Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OS
U-Boot.Mirror
提交
f16b608a
U
U-Boot.Mirror
项目概览
OS
/
U-Boot.Mirror
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
U-Boot.Mirror
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f16b608a
编写于
4月 13, 2011
作者:
W
Wolfgang Denk
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'sf' of
git://git.denx.de/u-boot-blackfin
上级
107b56bd
1c091f59
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
148 addition
and
116 deletion
+148
-116
common/cmd_sf.c
common/cmd_sf.c
+75
-36
drivers/mtd/spi/atmel.c
drivers/mtd/spi/atmel.c
+32
-8
drivers/mtd/spi/eon.c
drivers/mtd/spi/eon.c
+4
-9
drivers/mtd/spi/macronix.c
drivers/mtd/spi/macronix.c
+5
-12
drivers/mtd/spi/ramtron.c
drivers/mtd/spi/ramtron.c
+1
-4
drivers/mtd/spi/spansion.c
drivers/mtd/spi/spansion.c
+4
-11
drivers/mtd/spi/spi_flash.c
drivers/mtd/spi/spi_flash.c
+7
-2
drivers/mtd/spi/spi_flash_internal.h
drivers/mtd/spi/spi_flash_internal.h
+1
-1
drivers/mtd/spi/sst.c
drivers/mtd/spi/sst.c
+9
-8
drivers/mtd/spi/stmicro.c
drivers/mtd/spi/stmicro.c
+4
-11
drivers/mtd/spi/winbond.c
drivers/mtd/spi/winbond.c
+4
-9
include/spi_flash.h
include/spi_flash.h
+2
-5
未找到文件。
common/cmd_sf.c
浏览文件 @
f16b608a
...
...
@@ -19,6 +19,47 @@
static
struct
spi_flash
*
flash
;
/*
* This function computes the length argument for the erase command.
* The length on which the command is to operate can be given in two forms:
* 1. <cmd> offset len - operate on <'offset', 'len')
* 2. <cmd> offset +len - operate on <'offset', 'round_up(len)')
* If the second form is used and the length doesn't fall on the
* sector boundary, than it will be adjusted to the next sector boundary.
* If it isn't in the flash, the function will fail (return -1).
* Input:
* arg: length specification (i.e. both command arguments)
* Output:
* len: computed length for operation
* Return:
* 1: success
* -1: failure (bad format, bad address).
*/
static
int
sf_parse_len_arg
(
char
*
arg
,
ulong
*
len
)
{
char
*
ep
;
char
round_up_len
;
/* indicates if the "+length" form used */
ulong
len_arg
;
round_up_len
=
0
;
if
(
*
arg
==
'+'
)
{
round_up_len
=
1
;
++
arg
;
}
len_arg
=
simple_strtoul
(
arg
,
&
ep
,
16
);
if
(
ep
==
arg
||
*
ep
!=
'\0'
)
return
-
1
;
if
(
round_up_len
&&
flash
->
sector_size
>
0
)
*
len
=
ROUND
(
len_arg
-
1
,
flash
->
sector_size
);
else
*
len
=
len_arg
;
return
1
;
}
static
int
do_spi_flash_probe
(
int
argc
,
char
*
const
argv
[])
{
unsigned
int
bus
=
0
;
...
...
@@ -29,30 +70,30 @@ static int do_spi_flash_probe(int argc, char * const argv[])
struct
spi_flash
*
new
;
if
(
argc
<
2
)
goto
usage
;
return
-
1
;
cs
=
simple_strtoul
(
argv
[
1
],
&
endp
,
0
);
if
(
*
argv
[
1
]
==
0
||
(
*
endp
!=
0
&&
*
endp
!=
':'
))
goto
usage
;
return
-
1
;
if
(
*
endp
==
':'
)
{
if
(
endp
[
1
]
==
0
)
goto
usage
;
return
-
1
;
bus
=
cs
;
cs
=
simple_strtoul
(
endp
+
1
,
&
endp
,
0
);
if
(
*
endp
!=
0
)
goto
usage
;
return
-
1
;
}
if
(
argc
>=
3
)
{
speed
=
simple_strtoul
(
argv
[
2
],
&
endp
,
0
);
if
(
*
argv
[
2
]
==
0
||
*
endp
!=
0
)
goto
usage
;
return
-
1
;
}
if
(
argc
>=
4
)
{
mode
=
simple_strtoul
(
argv
[
3
],
&
endp
,
16
);
if
(
*
argv
[
3
]
==
0
||
*
endp
!=
0
)
goto
usage
;
return
-
1
;
}
new
=
spi_flash_probe
(
bus
,
cs
,
speed
,
mode
);
...
...
@@ -65,14 +106,7 @@ static int do_spi_flash_probe(int argc, char * const argv[])
spi_flash_free
(
flash
);
flash
=
new
;
printf
(
"%u KiB %s at %u:%u is now current device
\n
"
,
flash
->
size
>>
10
,
flash
->
name
,
bus
,
cs
);
return
0
;
usage:
puts
(
"Usage: sf probe [bus:]cs [hz] [mode]
\n
"
);
return
1
;
}
static
int
do_spi_flash_read_write
(
int
argc
,
char
*
const
argv
[])
...
...
@@ -85,17 +119,17 @@ static int do_spi_flash_read_write(int argc, char * const argv[])
int
ret
;
if
(
argc
<
4
)
goto
usage
;
return
-
1
;
addr
=
simple_strtoul
(
argv
[
1
],
&
endp
,
16
);
if
(
*
argv
[
1
]
==
0
||
*
endp
!=
0
)
goto
usage
;
return
-
1
;
offset
=
simple_strtoul
(
argv
[
2
],
&
endp
,
16
);
if
(
*
argv
[
2
]
==
0
||
*
endp
!=
0
)
goto
usage
;
return
-
1
;
len
=
simple_strtoul
(
argv
[
3
],
&
endp
,
16
);
if
(
*
argv
[
3
]
==
0
||
*
endp
!=
0
)
goto
usage
;
return
-
1
;
buf
=
map_physmem
(
addr
,
len
,
MAP_WRBACK
);
if
(
!
buf
)
{
...
...
@@ -116,10 +150,6 @@ static int do_spi_flash_read_write(int argc, char * const argv[])
}
return
0
;
usage:
printf
(
"Usage: sf %s addr offset len
\n
"
,
argv
[
0
]);
return
1
;
}
static
int
do_spi_flash_erase
(
int
argc
,
char
*
const
argv
[])
...
...
@@ -130,14 +160,15 @@ static int do_spi_flash_erase(int argc, char * const argv[])
int
ret
;
if
(
argc
<
3
)
goto
usage
;
return
-
1
;
offset
=
simple_strtoul
(
argv
[
1
],
&
endp
,
16
);
if
(
*
argv
[
1
]
==
0
||
*
endp
!=
0
)
goto
usage
;
len
=
simple_strtoul
(
argv
[
2
],
&
endp
,
16
);
if
(
*
argv
[
2
]
==
0
||
*
endp
!=
0
)
goto
usage
;
return
-
1
;
ret
=
sf_parse_len_arg
(
argv
[
2
],
&
len
);
if
(
ret
!=
1
)
return
-
1
;
ret
=
spi_flash_erase
(
flash
,
offset
,
len
);
if
(
ret
)
{
...
...
@@ -146,24 +177,25 @@ static int do_spi_flash_erase(int argc, char * const argv[])
}
return
0
;
usage:
puts
(
"Usage: sf erase offset len
\n
"
);
return
1
;
}
static
int
do_spi_flash
(
cmd_tbl_t
*
cmdtp
,
int
flag
,
int
argc
,
char
*
const
argv
[])
{
const
char
*
cmd
;
int
ret
;
/* need at least two arguments */
if
(
argc
<
2
)
goto
usage
;
cmd
=
argv
[
1
];
--
argc
;
++
argv
;
if
(
strcmp
(
cmd
,
"probe"
)
==
0
)
return
do_spi_flash_probe
(
argc
-
1
,
argv
+
1
);
if
(
strcmp
(
cmd
,
"probe"
)
==
0
)
{
ret
=
do_spi_flash_probe
(
argc
,
argv
);
goto
done
;
}
/* The remaining commands require a selected device */
if
(
!
flash
)
{
...
...
@@ -172,9 +204,15 @@ static int do_spi_flash(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[
}
if
(
strcmp
(
cmd
,
"read"
)
==
0
||
strcmp
(
cmd
,
"write"
)
==
0
)
return
do_spi_flash_read_write
(
argc
-
1
,
argv
+
1
);
if
(
strcmp
(
cmd
,
"erase"
)
==
0
)
return
do_spi_flash_erase
(
argc
-
1
,
argv
+
1
);
ret
=
do_spi_flash_read_write
(
argc
,
argv
);
else
if
(
strcmp
(
cmd
,
"erase"
)
==
0
)
ret
=
do_spi_flash_erase
(
argc
,
argv
);
else
ret
=
-
1
;
done:
if
(
ret
!=
-
1
)
return
ret
;
usage:
return
cmd_usage
(
cmdtp
);
...
...
@@ -189,5 +227,6 @@ U_BOOT_CMD(
" `offset' to memory at `addr'
\n
"
"sf write addr offset len - write `len' bytes from memory
\n
"
" at `addr' to flash at `offset'
\n
"
"sf erase offset len - erase `len' bytes from `offset'"
"sf erase offset [+]len - erase `len' bytes from `offset'
\n
"
" `+len' round up `len' to block size"
);
drivers/mtd/spi/atmel.c
浏览文件 @
f16b608a
...
...
@@ -113,8 +113,35 @@ static const struct atmel_spi_flash_params atmel_spi_flash_table[] = {
static
int
at45_wait_ready
(
struct
spi_flash
*
flash
,
unsigned
long
timeout
)
{
return
spi_flash_cmd_poll_bit
(
flash
,
timeout
,
CMD_AT45_READ_STATUS
,
AT45_STATUS_READY
);
struct
spi_slave
*
spi
=
flash
->
spi
;
unsigned
long
timebase
;
int
ret
;
u8
cmd
=
CMD_AT45_READ_STATUS
;
u8
status
;
timebase
=
get_timer
(
0
);
ret
=
spi_xfer
(
spi
,
8
,
&
cmd
,
NULL
,
SPI_XFER_BEGIN
);
if
(
ret
)
return
-
1
;
do
{
ret
=
spi_xfer
(
spi
,
8
,
NULL
,
&
status
,
0
);
if
(
ret
)
return
-
1
;
if
(
status
&
AT45_STATUS_READY
)
break
;
}
while
(
get_timer
(
timebase
)
<
timeout
);
/* Deactivate CS */
spi_xfer
(
spi
,
0
,
NULL
,
NULL
,
SPI_XFER_END
);
if
(
status
&
AT45_STATUS_READY
)
return
0
;
/* Timed out */
return
-
1
;
}
/*
...
...
@@ -301,7 +328,7 @@ out:
/*
* TODO: the two erase funcs (_p2/_at45) should get unified ...
*/
int
dataflash_erase_p2
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
static
int
dataflash_erase_p2
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
{
struct
atmel_spi_flash
*
asf
=
to_atmel_spi_flash
(
flash
);
unsigned
long
page_size
;
...
...
@@ -360,7 +387,7 @@ out:
return
ret
;
}
int
dataflash_erase_at45
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
static
int
dataflash_erase_at45
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
{
struct
atmel_spi_flash
*
asf
=
to_atmel_spi_flash
(
flash
);
unsigned
long
page_addr
;
...
...
@@ -495,14 +522,11 @@ struct spi_flash *spi_flash_probe_atmel(struct spi_slave *spi, u8 *idcode)
goto
err
;
}
asf
->
flash
.
sector_size
=
page_size
;
asf
->
flash
.
size
=
page_size
*
params
->
pages_per_block
*
params
->
blocks_per_sector
*
params
->
nr_sectors
;
printf
(
"SF: Detected %s with page size %u, total "
,
params
->
name
,
page_size
);
print_size
(
asf
->
flash
.
size
,
"
\n
"
);
return
&
asf
->
flash
;
err:
...
...
drivers/mtd/spi/eon.c
浏览文件 @
f16b608a
...
...
@@ -119,13 +119,9 @@ static int eon_write(struct spi_flash *flash,
return
ret
;
}
int
eon_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
static
int
eon_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
{
struct
eon_spi_flash
*
eon
=
to_eon_spi_flash
(
flash
);
return
spi_flash_cmd_erase
(
flash
,
CMD_EN25Q128_BE
,
eon
->
params
->
page_size
*
eon
->
params
->
pages_per_sector
*
eon
->
params
->
sectors_per_block
;
offset
,
len
);
return
spi_flash_cmd_erase
(
flash
,
CMD_EN25Q128_BE
,
offset
,
len
);
}
struct
spi_flash
*
spi_flash_probe_eon
(
struct
spi_slave
*
spi
,
u8
*
idcode
)
...
...
@@ -158,11 +154,10 @@ struct spi_flash *spi_flash_probe_eon(struct spi_slave *spi, u8 *idcode)
eon
->
flash
.
write
=
eon_write
;
eon
->
flash
.
erase
=
eon_erase
;
eon
->
flash
.
read
=
spi_flash_cmd_read_fast
;
eon
->
flash
.
sector_size
=
params
->
page_size
*
params
->
pages_per_sector
*
params
->
sectors_per_block
;
eon
->
flash
.
size
=
params
->
page_size
*
params
->
pages_per_sector
*
params
->
nr_sectors
;
debug
(
"SF: Detected %s with page size %u, total %u bytes
\n
"
,
params
->
name
,
params
->
page_size
,
eon
->
flash
.
size
);
return
&
eon
->
flash
;
}
drivers/mtd/spi/macronix.c
浏览文件 @
f16b608a
...
...
@@ -175,13 +175,9 @@ static int macronix_write(struct spi_flash *flash,
return
ret
;
}
int
macronix_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
static
int
macronix_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
{
struct
macronix_spi_flash
*
mcx
=
to_macronix_spi_flash
(
flash
);
return
spi_flash_cmd_erase
(
flash
,
CMD_MX25XX_BE
,
mcx
->
params
->
page_size
*
mcx
->
params
->
pages_per_sector
*
mcx
->
params
->
sectors_per_block
,
offset
,
len
);
return
spi_flash_cmd_erase
(
flash
,
CMD_MX25XX_BE
,
offset
,
len
);
}
struct
spi_flash
*
spi_flash_probe_macronix
(
struct
spi_slave
*
spi
,
u8
*
idcode
)
...
...
@@ -215,12 +211,9 @@ struct spi_flash *spi_flash_probe_macronix(struct spi_slave *spi, u8 *idcode)
mcx
->
flash
.
write
=
macronix_write
;
mcx
->
flash
.
erase
=
macronix_erase
;
mcx
->
flash
.
read
=
spi_flash_cmd_read_fast
;
mcx
->
flash
.
size
=
params
->
page_size
*
params
->
pages_per_sector
*
params
->
sectors_per_block
*
params
->
nr_blocks
;
printf
(
"SF: Detected %s with page size %u, total "
,
params
->
name
,
params
->
page_size
);
print_size
(
mcx
->
flash
.
size
,
"
\n
"
);
mcx
->
flash
.
sector_size
=
params
->
page_size
*
params
->
pages_per_sector
*
params
->
sectors_per_block
;
mcx
->
flash
.
size
=
mcx
->
flash
.
sector_size
*
params
->
nr_blocks
;
return
&
mcx
->
flash
;
}
drivers/mtd/spi/ramtron.c
浏览文件 @
f16b608a
...
...
@@ -233,7 +233,7 @@ static int ramtron_write(struct spi_flash *flash,
CMD_RAMTRON_WRITE
);
}
int
ramtron_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
static
int
ramtron_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
{
debug
(
"SF: Erase of RAMTRON FRAMs is pointless
\n
"
);
return
-
1
;
...
...
@@ -312,8 +312,5 @@ found:
sn
->
flash
.
erase
=
ramtron_erase
;
sn
->
flash
.
size
=
params
->
size
;
printf
(
"SF: Detected %s with size "
,
params
->
name
);
print_size
(
sn
->
flash
.
size
,
"
\n
"
);
return
&
sn
->
flash
;
}
drivers/mtd/spi/spansion.c
浏览文件 @
f16b608a
...
...
@@ -196,12 +196,9 @@ static int spansion_write(struct spi_flash *flash,
return
ret
;
}
int
spansion_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
static
int
spansion_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
{
struct
spansion_spi_flash
*
spsn
=
to_spansion_spi_flash
(
flash
);
return
spi_flash_cmd_erase
(
flash
,
CMD_S25FLXX_SE
,
spsn
->
params
->
page_size
*
spsn
->
params
->
pages_per_sector
,
offset
,
len
);
return
spi_flash_cmd_erase
(
flash
,
CMD_S25FLXX_SE
,
offset
,
len
);
}
struct
spi_flash
*
spi_flash_probe_spansion
(
struct
spi_slave
*
spi
,
u8
*
idcode
)
...
...
@@ -240,12 +237,8 @@ struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode)
spsn
->
flash
.
write
=
spansion_write
;
spsn
->
flash
.
erase
=
spansion_erase
;
spsn
->
flash
.
read
=
spi_flash_cmd_read_fast
;
spsn
->
flash
.
size
=
params
->
page_size
*
params
->
pages_per_sector
*
params
->
nr_sectors
;
printf
(
"SF: Detected %s with page size %u, total "
,
params
->
name
,
params
->
page_size
);
print_size
(
spsn
->
flash
.
size
,
"
\n
"
);
spsn
->
flash
.
sector_size
=
params
->
page_size
*
params
->
pages_per_sector
;
spsn
->
flash
.
size
=
spsn
->
flash
.
sector_size
*
params
->
nr_sectors
;
return
&
spsn
->
flash
;
}
drivers/mtd/spi/spi_flash.c
浏览文件 @
f16b608a
...
...
@@ -131,12 +131,13 @@ int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout)
}
int
spi_flash_cmd_erase
(
struct
spi_flash
*
flash
,
u8
erase_cmd
,
u32
erase_size
,
u32
offset
,
size_t
len
)
u32
offset
,
size_t
len
)
{
u32
start
,
end
;
u32
start
,
end
,
erase_size
;
int
ret
;
u8
cmd
[
4
];
erase_size
=
flash
->
sector_size
;
if
(
offset
%
erase_size
||
len
%
erase_size
)
{
debug
(
"SF: Erase offset/length not multiple of erase size
\n
"
);
return
-
1
;
...
...
@@ -296,6 +297,10 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs,
goto
err_manufacturer_probe
;
}
printf
(
"SF: Detected %s with page size "
,
flash
->
name
);
print_size
(
flash
->
sector_size
,
", total "
);
print_size
(
flash
->
size
,
"
\n
"
);
spi_release_bus
(
spi
);
return
flash
;
...
...
drivers/mtd/spi/spi_flash_internal.h
浏览文件 @
f16b608a
...
...
@@ -64,7 +64,7 @@ int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout);
/* Erase sectors. */
int
spi_flash_cmd_erase
(
struct
spi_flash
*
flash
,
u8
erase_cmd
,
u32
erase_size
,
u32
offset
,
size_t
len
);
u32
offset
,
size_t
len
);
/* Manufacturer-specific probe functions */
struct
spi_flash
*
spi_flash_probe_spansion
(
struct
spi_slave
*
spi
,
u8
*
idcode
);
...
...
drivers/mtd/spi/sst.c
浏览文件 @
f16b608a
...
...
@@ -70,6 +70,10 @@ static const struct sst_spi_flash_params sst_spi_flash_table[] = {
.
idcode1
=
0x4a
,
.
nr_sectors
=
1024
,
.
name
=
"SST25VF032B"
,
},{
.
idcode1
=
0x4b
,
.
nr_sectors
=
2048
,
.
name
=
"SST25VF064C"
,
},{
.
idcode1
=
0x01
,
.
nr_sectors
=
16
,
...
...
@@ -199,10 +203,9 @@ sst_write(struct spi_flash *flash, u32 offset, size_t len, const void *buf)
return
ret
;
}
int
sst_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
static
int
sst_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
{
return
spi_flash_cmd_erase
(
flash
,
CMD_SST_SE
,
SST_SECTOR_SIZE
,
offset
,
len
);
return
spi_flash_cmd_erase
(
flash
,
CMD_SST_SE
,
offset
,
len
);
}
static
int
...
...
@@ -256,11 +259,9 @@ spi_flash_probe_sst(struct spi_slave *spi, u8 *idcode)
stm
->
flash
.
write
=
sst_write
;
stm
->
flash
.
erase
=
sst_erase
;
stm
->
flash
.
size
=
SST_SECTOR_SIZE
*
params
->
nr_sectors
;
printf
(
"SF: Detected %s with page size %u, total "
,
params
->
name
,
SST_SECTOR_SIZE
);
print_size
(
stm
->
flash
.
size
,
"
\n
"
);
stm
->
flash
.
read
=
spi_flash_cmd_read_fast
;
stm
->
flash
.
sector_size
=
SST_SECTOR_SIZE
;
stm
->
flash
.
size
=
stm
->
flash
.
sector_size
*
params
->
nr_sectors
;
/* Flash powers up read-only, so clear BP# bits */
sst_unlock
(
&
stm
->
flash
);
...
...
drivers/mtd/spi/stmicro.c
浏览文件 @
f16b608a
...
...
@@ -197,12 +197,9 @@ static int stmicro_write(struct spi_flash *flash,
return
ret
;
}
int
stmicro_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
static
int
stmicro_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
{
struct
stmicro_spi_flash
*
stm
=
to_stmicro_spi_flash
(
flash
);
return
spi_flash_cmd_erase
(
flash
,
CMD_M25PXX_SE
,
stm
->
params
->
page_size
*
stm
->
params
->
pages_per_sector
,
offset
,
len
);
return
spi_flash_cmd_erase
(
flash
,
CMD_M25PXX_SE
,
offset
,
len
);
}
struct
spi_flash
*
spi_flash_probe_stmicro
(
struct
spi_slave
*
spi
,
u8
*
idcode
)
...
...
@@ -249,12 +246,8 @@ struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 * idcode)
stm
->
flash
.
write
=
stmicro_write
;
stm
->
flash
.
erase
=
stmicro_erase
;
stm
->
flash
.
read
=
spi_flash_cmd_read_fast
;
stm
->
flash
.
size
=
params
->
page_size
*
params
->
pages_per_sector
*
params
->
nr_sectors
;
printf
(
"SF: Detected %s with page size %u, total "
,
params
->
name
,
params
->
page_size
);
print_size
(
stm
->
flash
.
size
,
"
\n
"
);
stm
->
flash
.
sector_size
=
params
->
page_size
*
params
->
pages_per_sector
;
stm
->
flash
.
size
=
stm
->
flash
.
sector_size
*
params
->
nr_sectors
;
return
&
stm
->
flash
;
}
drivers/mtd/spi/winbond.c
浏览文件 @
f16b608a
...
...
@@ -170,12 +170,9 @@ out:
return
ret
;
}
int
winbond_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
static
int
winbond_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
{
struct
winbond_spi_flash
*
stm
=
to_winbond_spi_flash
(
flash
);
return
spi_flash_cmd_erase
(
flash
,
CMD_W25_SE
,
(
1
<<
stm
->
params
->
l2_page_size
)
*
stm
->
params
->
pages_per_sector
,
offset
,
len
);
return
spi_flash_cmd_erase
(
flash
,
CMD_W25_SE
,
offset
,
len
);
}
struct
spi_flash
*
spi_flash_probe_winbond
(
struct
spi_slave
*
spi
,
u8
*
idcode
)
...
...
@@ -213,13 +210,11 @@ struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode)
stm
->
flash
.
write
=
winbond_write
;
stm
->
flash
.
erase
=
winbond_erase
;
stm
->
flash
.
read
=
spi_flash_cmd_read_fast
;
stm
->
flash
.
sector_size
=
(
1
<<
stm
->
params
->
l2_page_size
)
*
stm
->
params
->
pages_per_sector
;
stm
->
flash
.
size
=
page_size
*
params
->
pages_per_sector
*
params
->
sectors_per_block
*
params
->
nr_blocks
;
printf
(
"SF: Detected %s with page size %u, total "
,
params
->
name
,
page_size
);
print_size
(
stm
->
flash
.
size
,
"
\n
"
);
return
&
stm
->
flash
;
}
include/spi_flash.h
浏览文件 @
f16b608a
...
...
@@ -26,11 +26,6 @@
#include <spi.h>
#include <linux/types.h>
struct
spi_flash_region
{
unsigned
int
count
;
unsigned
int
size
;
};
struct
spi_flash
{
struct
spi_slave
*
spi
;
...
...
@@ -38,6 +33,8 @@ struct spi_flash {
u32
size
;
u32
sector_size
;
int
(
*
read
)(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
,
void
*
buf
);
int
(
*
write
)(
struct
spi_flash
*
flash
,
u32
offset
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录