Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OS
U-Boot.Mirror
提交
e86e5a07
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,发现更多精彩内容 >>
提交
e86e5a07
编写于
10月 17, 2004
作者:
W
wdenk
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Code cleanup for GCC-3.3.x compilers
上级
8b74bf31
变更
22
隐藏空白更改
内联
并排
Showing
22 changed file
with
966 addition
and
995 deletion
+966
-995
README
README
+4
-3
board/ep7312/flash.c
board/ep7312/flash.c
+1
-1
board/evb4510/flash.c
board/evb4510/flash.c
+1
-2
board/impa7/flash.c
board/impa7/flash.c
+268
-276
board/lart/flash.c
board/lart/flash.c
+1
-0
board/mpl/vcma9/flash.c
board/mpl/vcma9/flash.c
+305
-318
board/shannon/flash.c
board/shannon/flash.c
+1
-0
board/smdk2400/flash.c
board/smdk2400/flash.c
+1
-1
board/smdk2410/flash.c
board/smdk2410/flash.c
+306
-319
board/trab/cmd_trab.c
board/trab/cmd_trab.c
+1
-0
board/trab/flash.c
board/trab/flash.c
+1
-1
board/trab/memory.c
board/trab/memory.c
+1
-1
board/trab/trab_fkt.c
board/trab/trab_fkt.c
+1
-1
board/versatile/flash.c
board/versatile/flash.c
+0
-1
board/xsengine/Makefile
board/xsengine/Makefile
+1
-1
common/usb.c
common/usb.c
+3
-1
cpu/arm720t/serial_netarm.c
cpu/arm720t/serial_netarm.c
+1
-0
cpu/s3c44b0/cpu.c
cpu/s3c44b0/cpu.c
+1
-1
cpu/s3c44b0/serial.c
cpu/s3c44b0/serial.c
+3
-3
drivers/s3c4510b_eth.c
drivers/s3c4510b_eth.c
+1
-1
include/cmd_confdefs.h
include/cmd_confdefs.h
+63
-63
include/configs/xaeniax.h
include/configs/xaeniax.h
+1
-1
未找到文件。
README
浏览文件 @
e86e5a07
...
...
@@ -25,9 +25,10 @@ Summary:
========
This directory contains the source code for U-Boot, a boot loader for
Embedded boards based on PowerPC and ARM processors, which can be
installed in a boot ROM and used to initialize and test the hardware
or to download and run application code.
Embedded boards based on PowerPC, ARM, MIPS and several other
processors, which can be installed in a boot ROM and used to
initialize and test the hardware or to download and run application
code.
The development of U-Boot is closely related to Linux: some parts of
the source code originate in the Linux source tree, we have some
...
...
board/ep7312/flash.c
浏览文件 @
e86e5a07
...
...
@@ -109,7 +109,7 @@ void flash_print_info (flash_info_t * info)
}
printf
(
"
\n
"
);
Done:
Done:
;
}
/*-----------------------------------------------------------------------
...
...
board/evb4510/flash.c
浏览文件 @
e86e5a07
...
...
@@ -362,8 +362,7 @@ unsigned long flash_init (void)
}
#endif
else
{
printf
(
__FUNCTION__
"(): Unable to detect PHYS_FLASH_1: 0x%08x
\n
"
,
printf
(
"flash_init(): Unable to detect PHYS_FLASH_1: 0x%08x
\n
"
,
PHYS_FLASH_1
);
}
...
...
board/impa7/flash.c
浏览文件 @
e86e5a07
...
...
@@ -28,338 +28,330 @@
#define MAIN_SECT_SIZE 0x20000
#define PARAM_SECT_SIZE 0x4000
flash_info_t
flash_info
[
CFG_MAX_FLASH_BANKS
];
flash_info_t
flash_info
[
CFG_MAX_FLASH_BANKS
];
/*-----------------------------------------------------------------------
*/
ulong
flash_init
(
void
)
ulong
flash_init
(
void
)
{
int
i
,
j
;
ulong
size
=
0
;
for
(
i
=
0
;
i
<
CFG_MAX_FLASH_BANKS
;
i
++
)
{
ulong
flashbase
=
0
;
flash_info
[
i
].
flash_id
=
(
INTEL_MANUFACT
&
FLASH_VENDMASK
)
|
(
INTEL_ID_28F320B3T
&
FLASH_TYPEMASK
);
flash_info
[
i
].
size
=
FLASH_BANK_SIZE
;
flash_info
[
i
].
sector_count
=
CFG_MAX_FLASH_SECT
;
memset
(
flash_info
[
i
].
protect
,
0
,
CFG_MAX_FLASH_SECT
);
if
(
i
==
0
)
flashbase
=
PHYS_FLASH_1
;
else
if
(
i
==
1
)
flashbase
=
PHYS_FLASH_2
;
else
panic
(
"configured too many flash banks!
\n
"
);
for
(
j
=
0
;
j
<
flash_info
[
i
].
sector_count
;
j
++
)
{
if
(
j
<=
7
)
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
j
*
PARAM_SECT_SIZE
;
}
else
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
(
j
-
7
)
*
MAIN_SECT_SIZE
;
}
int
i
,
j
;
ulong
size
=
0
;
for
(
i
=
0
;
i
<
CFG_MAX_FLASH_BANKS
;
i
++
)
{
ulong
flashbase
=
0
;
flash_info
[
i
].
flash_id
=
(
INTEL_MANUFACT
&
FLASH_VENDMASK
)
|
(
INTEL_ID_28F320B3T
&
FLASH_TYPEMASK
);
flash_info
[
i
].
size
=
FLASH_BANK_SIZE
;
flash_info
[
i
].
sector_count
=
CFG_MAX_FLASH_SECT
;
memset
(
flash_info
[
i
].
protect
,
0
,
CFG_MAX_FLASH_SECT
);
if
(
i
==
0
)
flashbase
=
PHYS_FLASH_1
;
else
if
(
i
==
1
)
flashbase
=
PHYS_FLASH_2
;
else
panic
(
"configured too many flash banks!
\n
"
);
for
(
j
=
0
;
j
<
flash_info
[
i
].
sector_count
;
j
++
)
{
if
(
j
<=
7
)
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
j
*
PARAM_SECT_SIZE
;
}
else
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
(
j
-
7
)
*
MAIN_SECT_SIZE
;
}
}
size
+=
flash_info
[
i
].
size
;
}
size
+=
flash_info
[
i
].
size
;
}
/* Protect monitor and environment sectors
*/
flash_protect
(
FLAG_PROTECT_SET
,
CFG_FLASH_BASE
,
CFG_FLASH_BASE
+
monitor_flash_len
-
1
,
&
flash_info
[
0
]);
flash_protect
(
FLAG_PROTECT_SET
,
CFG_ENV_ADDR
,
CFG_ENV_ADDR
+
CFG_ENV_SIZE
-
1
,
&
flash_info
[
0
]);
return
size
;
}
/*-----------------------------------------------------------------------
*/
void
flash_print_info
(
flash_info_t
*
info
)
{
int
i
;
switch
(
info
->
flash_id
&
FLASH_VENDMASK
)
{
case
(
INTEL_MANUFACT
&
FLASH_VENDMASK
):
printf
(
"Intel: "
);
break
;
default:
printf
(
"Unknown Vendor "
);
break
;
}
switch
(
info
->
flash_id
&
FLASH_TYPEMASK
)
{
case
(
INTEL_ID_28F320B3T
&
FLASH_TYPEMASK
):
printf
(
"28F320F3B (16Mbit)
\n
"
);
break
;
default:
printf
(
"Unknown Chip Type
\n
"
);
goto
Done
;
break
;
}
printf
(
" Size: %ld MB in %d Sectors
\n
"
,
info
->
size
>>
20
,
info
->
sector_count
);
printf
(
" Sector Start Addresses:"
);
for
(
i
=
0
;
i
<
info
->
sector_count
;
i
++
)
{
if
((
i
%
5
)
==
0
)
{
printf
(
"
\n
"
);
}
printf
(
" %08lX%s"
,
info
->
start
[
i
],
info
->
protect
[
i
]
?
" (RO)"
:
" "
);
}
printf
(
"
\n
"
);
/* Protect monitor and environment sectors
*/
flash_protect
(
FLAG_PROTECT_SET
,
CFG_FLASH_BASE
,
CFG_FLASH_BASE
+
monitor_flash_len
-
1
,
&
flash_info
[
0
]);
flash_protect
(
FLAG_PROTECT_SET
,
CFG_ENV_ADDR
,
CFG_ENV_ADDR
+
CFG_ENV_SIZE
-
1
,
&
flash_info
[
0
]);
Done:
return
size
;
}
/*-----------------------------------------------------------------------
*/
int
flash_erase
(
flash_info_t
*
info
,
int
s_first
,
int
s_last
)
void
flash_print_info
(
flash_info_t
*
info
)
{
int
flag
,
prot
,
sect
;
int
rc
=
ERR_OK
;
if
(
info
->
flash_id
==
FLASH_UNKNOWN
)
return
ERR_UNKNOWN_FLASH_TYPE
;
int
i
;
switch
(
info
->
flash_id
&
FLASH_VENDMASK
)
{
case
(
INTEL_MANUFACT
&
FLASH_VENDMASK
):
printf
(
"Intel: "
);
break
;
default:
printf
(
"Unknown Vendor "
);
break
;
}
if
((
s_first
<
0
)
||
(
s_first
>
s_last
))
{
return
ERR_INVAL
;
}
switch
(
info
->
flash_id
&
FLASH_TYPEMASK
)
{
case
(
INTEL_ID_28F320B3T
&
FLASH_TYPEMASK
):
printf
(
"28F320F3B (16Mbit)
\n
"
);
break
;
default:
printf
(
"Unknown Chip Type
\n
"
);
goto
Done
;
break
;
}
if
((
info
->
flash_id
&
FLASH_VENDMASK
)
!=
(
INTEL_MANUFACT
&
FLASH_VENDMASK
))
{
return
ERR_UNKNOWN_FLASH_VENDOR
;
}
printf
(
" Size: %ld MB in %d Sectors
\n
"
,
info
->
size
>>
20
,
info
->
sector_count
);
prot
=
0
;
for
(
sect
=
s_first
;
sect
<=
s_last
;
++
sect
)
{
if
(
info
->
protect
[
sect
])
{
prot
++
;
printf
(
" Sector Start Addresses:"
);
for
(
i
=
0
;
i
<
info
->
sector_count
;
i
++
)
{
if
((
i
%
5
)
==
0
)
{
printf
(
"
\n
"
);
}
printf
(
" %08lX%s"
,
info
->
start
[
i
],
info
->
protect
[
i
]
?
" (RO)"
:
" "
);
}
}
if
(
prot
)
return
ERR_PROTECTED
;
printf
(
"
\n
"
);
/*
* Disable interrupts which might cause a timeout
* here. Remember that our exception vectors are
* at address 0 in the flash, and we don't want a
* (ticker) exception to happen while the flash
* chip is in programming mode.
*/
flag
=
disable_interrupts
();
Done:
;
}
/* Start erase on unprotected sectors */
for
(
sect
=
s_first
;
sect
<=
s_last
&&
!
ctrlc
();
sect
++
)
{
/*-----------------------------------------------------------------------
*/
printf
(
"Erasing sector %2d ... "
,
sect
);
int
flash_erase
(
flash_info_t
*
info
,
int
s_first
,
int
s_last
)
{
int
flag
,
prot
,
sect
;
int
rc
=
ERR_OK
;
/* arm simple, non interrupt dependent timer */
reset_timer_masked
()
;
if
(
info
->
flash_id
==
FLASH_UNKNOWN
)
return
ERR_UNKNOWN_FLASH_TYPE
;
if
(
info
->
protect
[
sect
]
==
0
)
{
/* not protected */
vu_long
*
addr
=
(
vu_long
*
)(
info
->
start
[
sect
]);
if
((
s_first
<
0
)
||
(
s_first
>
s_last
))
{
return
ERR_INVAL
;
}
*
addr
=
0x00200020
;
/* erase setup */
*
addr
=
0x00D000D0
;
/* erase confirm */
if
((
info
->
flash_id
&
FLASH_VENDMASK
)
!=
(
INTEL_MANUFACT
&
FLASH_VENDMASK
))
{
return
ERR_UNKNOWN_FLASH_VENDOR
;
}
while
((
*
addr
&
0x00800080
)
!=
0x00800080
)
{
if
(
get_timer_masked
()
>
CFG_FLASH_ERASE_TOUT
)
{
*
addr
=
0x00B000B0
;
/* suspend erase */
*
addr
=
0x00FF00FF
;
/* reset to read mode */
rc
=
ERR_TIMOUT
;
goto
outahere
;
prot
=
0
;
for
(
sect
=
s_first
;
sect
<=
s_last
;
++
sect
)
{
if
(
info
->
protect
[
sect
])
{
prot
++
;
}
}
*
addr
=
0x00FF00FF
;
/* reset to read mode */
}
printf
(
"ok.
\n
"
);
}
if
(
ctrlc
())
printf
(
"User Interrupt!
\n
"
);
if
(
prot
)
return
ERR_PROTECTED
;
/*
* Disable interrupts which might cause a timeout
* here. Remember that our exception vectors are
* at address 0 in the flash, and we don't want a
* (ticker) exception to happen while the flash
* chip is in programming mode.
*/
flag
=
disable_interrupts
();
/* Start erase on unprotected sectors */
for
(
sect
=
s_first
;
sect
<=
s_last
&&
!
ctrlc
();
sect
++
)
{
printf
(
"Erasing sector %2d ... "
,
sect
);
/* arm simple, non interrupt dependent timer */
reset_timer_masked
();
if
(
info
->
protect
[
sect
]
==
0
)
{
/* not protected */
vu_long
*
addr
=
(
vu_long
*
)
(
info
->
start
[
sect
]);
*
addr
=
0x00200020
;
/* erase setup */
*
addr
=
0x00D000D0
;
/* erase confirm */
while
((
*
addr
&
0x00800080
)
!=
0x00800080
)
{
if
(
get_timer_masked
()
>
CFG_FLASH_ERASE_TOUT
)
{
*
addr
=
0x00B000B0
;
/* suspend erase */
*
addr
=
0x00FF00FF
;
/* reset to read mode */
rc
=
ERR_TIMOUT
;
goto
outahere
;
}
}
*
addr
=
0x00FF00FF
;
/* reset to read mode */
}
printf
(
"ok.
\n
"
);
}
if
(
ctrlc
())
printf
(
"User Interrupt!
\n
"
);
outahere:
outahere:
/* allow flash to settle - wait 10 ms */
udelay_masked
(
10000
);
/* allow flash to settle - wait 10 ms */
udelay_masked
(
10000
);
if
(
flag
)
enable_interrupts
();
if
(
flag
)
enable_interrupts
();
return
rc
;
return
rc
;
}
/*-----------------------------------------------------------------------
* Copy memory to flash
*/
static
int
write_word
(
flash_info_t
*
info
,
ulong
dest
,
ulong
data
)
static
int
write_word
(
flash_info_t
*
info
,
ulong
dest
,
ulong
data
)
{
vu_long
*
addr
=
(
vu_long
*
)
dest
;
ulong
barf
;
int
rc
=
ERR_OK
;
int
flag
;
/* Check if Flash is (sufficiently) erased
*/
if
((
*
addr
&
data
)
!=
data
)
return
ERR_NOT_ERASED
;
/*
* Disable interrupts which might cause a timeout
* here. Remember that our exception vectors are
* at address 0 in the flash, and we don't want a
* (ticker) exception to happen while the flash
* chip is in programming mode.
*/
flag
=
disable_interrupts
();
/* clear status register command */
*
addr
=
0x00500050
;
/* program set-up command */
*
addr
=
0x00400040
;
/* latch address/data */
*
addr
=
data
;
/* arm simple, non interrupt dependent timer */
reset_timer_masked
();
/* read status register command */
*
addr
=
0x00700070
;
/* wait while polling the status register */
while
((
*
addr
&
0x00800080
)
!=
0x00800080
)
{
if
(
get_timer_masked
()
>
CFG_FLASH_WRITE_TOUT
)
{
rc
=
ERR_TIMOUT
;
/* suspend program command */
*
addr
=
0x00B000B0
;
goto
outahere
;
}
vu_long
*
addr
=
(
vu_long
*
)
dest
;
ulong
barf
;
int
rc
=
ERR_OK
;
int
flag
;
/* Check if Flash is (sufficiently) erased
*/
if
((
*
addr
&
data
)
!=
data
)
return
ERR_NOT_ERASED
;
/*
* Disable interrupts which might cause a timeout
* here. Remember that our exception vectors are
* at address 0 in the flash, and we don't want a
* (ticker) exception to happen while the flash
* chip is in programming mode.
*/
flag
=
disable_interrupts
();
/* clear status register command */
*
addr
=
0x00500050
;
/* program set-up command */
*
addr
=
0x00400040
;
/* latch address/data */
*
addr
=
data
;
/* arm simple, non interrupt dependent timer */
reset_timer_masked
();
/* read status register command */
*
addr
=
0x00700070
;
/* wait while polling the status register */
while
((
*
addr
&
0x00800080
)
!=
0x00800080
)
{
if
(
get_timer_masked
()
>
CFG_FLASH_WRITE_TOUT
)
{
rc
=
ERR_TIMOUT
;
/* suspend program command */
*
addr
=
0x00B000B0
;
goto
outahere
;
}
if
(
*
addr
&
0x003A003A
)
{
/* check for error */
barf
=
*
addr
;
if
(
barf
&
0x003A0000
)
{
barf
>>=
16
;
}
else
{
barf
&=
0x0000003A
;
}
printf
(
"
\n
Flash write error %02lx at address %08lx
\n
"
,
barf
,
(
unsigned
long
)
dest
);
if
(
barf
&
0x0002
)
{
printf
(
"Block locked, not erased.
\n
"
)
;
rc
=
ERR_NOT_ERASED
;
goto
outahere
;
}
if
(
barf
&
0x0010
)
{
printf
(
"Programming error.
\n
"
)
;
rc
=
ERR_PROG_ERROR
;
goto
outahere
;
}
if
(
barf
&
0x0008
)
{
printf
(
"Vpp Low error.
\n
"
)
;
rc
=
ERR_PROG_ERROR
;
goto
outahere
;
}
rc
=
ERR_PROG_ERROR
;
goto
outahere
;
if
(
*
addr
&
0x003A003A
)
{
/* check for error */
barf
=
*
addr
;
if
(
barf
&
0x003A0000
)
{
barf
>>=
16
;
}
else
{
barf
&=
0x0000003A
;
}
printf
(
"
\n
Flash write error %02lx at address %08lx
\n
"
,
barf
,
(
unsigned
long
)
dest
);
if
(
barf
&
0x0002
)
{
printf
(
"Block locked, not erased.
\n
"
);
rc
=
ERR_NOT_ERASED
;
goto
outahere
;
}
if
(
barf
&
0x0010
)
{
printf
(
"Programming error.
\n
"
);
rc
=
ERR_PROG_ERROR
;
goto
outahere
;
}
if
(
barf
&
0x0008
)
{
printf
(
"Vpp Low error.
\n
"
);
rc
=
ERR_PROG_ERROR
;
goto
outahere
;
}
rc
=
ERR_PROG_ERROR
;
goto
outahere
;
}
}
}
outahere:
/* read array command */
*
addr
=
0x00FF00FF
;
outahere:
/* read array command */
*
addr
=
0x00FF00FF
;
if
(
flag
)
enable_interrupts
();
if
(
flag
)
enable_interrupts
();
return
rc
;
return
rc
;
}
/*-----------------------------------------------------------------------
* Copy memory to flash.
*/
int
write_buff
(
flash_info_t
*
info
,
uchar
*
src
,
ulong
addr
,
ulong
cnt
)
int
write_buff
(
flash_info_t
*
info
,
uchar
*
src
,
ulong
addr
,
ulong
cnt
)
{
ulong
cp
,
wp
,
data
;
int
l
;
int
i
,
rc
;
wp
=
(
addr
&
~
3
);
/* get lower word aligned address */
ulong
cp
,
wp
,
data
;
int
l
;
int
i
,
rc
;
wp
=
(
addr
&
~
3
);
/* get lower word aligned address */
/*
* handle unaligned start bytes
*/
if
((
l
=
addr
-
wp
)
!=
0
)
{
data
=
0
;
for
(
i
=
0
,
cp
=
wp
;
i
<
l
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
24
);
}
for
(;
i
<
4
&&
cnt
>
0
;
++
i
)
{
data
=
(
data
>>
8
)
|
(
*
src
++
<<
24
);
--
cnt
;
++
cp
;
}
for
(;
cnt
==
0
&&
i
<
4
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
24
);
}
/*
* handle unaligned start bytes
*/
if
((
l
=
addr
-
wp
)
!=
0
)
{
data
=
0
;
for
(
i
=
0
,
cp
=
wp
;
i
<
l
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
24
);
if
((
rc
=
write_word
(
info
,
wp
,
data
))
!=
0
)
{
return
(
rc
);
}
wp
+=
4
;
}
for
(;
i
<
4
&&
cnt
>
0
;
++
i
)
{
data
=
(
data
>>
8
)
|
(
*
src
++
<<
24
);
--
cnt
;
++
cp
;
/*
* handle word aligned part
*/
while
(
cnt
>=
4
)
{
data
=
*
((
vu_long
*
)
src
);
if
((
rc
=
write_word
(
info
,
wp
,
data
))
!=
0
)
{
return
(
rc
);
}
src
+=
4
;
wp
+=
4
;
cnt
-=
4
;
}
for
(;
cnt
==
0
&&
i
<
4
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
24
);
if
(
cnt
==
0
)
{
return
ERR_OK
;
}
if
((
rc
=
write_word
(
info
,
wp
,
data
))
!=
0
)
{
return
(
rc
);
/*
* handle unaligned tail bytes
*/
data
=
0
;
for
(
i
=
0
,
cp
=
wp
;
i
<
4
&&
cnt
>
0
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
src
++
<<
24
);
--
cnt
;
}
wp
+=
4
;
}
/*
* handle word aligned part
*/
while
(
cnt
>=
4
)
{
data
=
*
((
vu_long
*
)
src
);
if
((
rc
=
write_word
(
info
,
wp
,
data
))
!=
0
)
{
return
(
rc
);
for
(;
i
<
4
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
24
);
}
src
+=
4
;
wp
+=
4
;
cnt
-=
4
;
}
if
(
cnt
==
0
)
{
return
ERR_OK
;
}
/*
* handle unaligned tail bytes
*/
data
=
0
;
for
(
i
=
0
,
cp
=
wp
;
i
<
4
&&
cnt
>
0
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
src
++
<<
24
);
--
cnt
;
}
for
(;
i
<
4
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
24
);
}
return
write_word
(
info
,
wp
,
data
);
return
write_word
(
info
,
wp
,
data
);
}
board/lart/flash.c
浏览文件 @
e86e5a07
...
...
@@ -159,6 +159,7 @@ void flash_print_info (flash_info_t *info)
printf
(
"
\n
"
);
Done:
;
}
/*-----------------------------------------------------------------------
...
...
board/mpl/vcma9/flash.c
浏览文件 @
e86e5a07
...
...
@@ -24,13 +24,13 @@
#include <common.h>
ulong
myflush
(
void
);
ulong
myflush
(
void
);
#define FLASH_BANK_SIZE PHYS_FLASH_SIZE
#define MAIN_SECT_SIZE 0x10000
/* 64 KB */
#define MAIN_SECT_SIZE 0x10000
/* 64 KB */
flash_info_t
flash_info
[
CFG_MAX_FLASH_BANKS
];
flash_info_t
flash_info
[
CFG_MAX_FLASH_BANKS
];
#define CMD_READ_ARRAY 0x000000F0
...
...
@@ -47,7 +47,7 @@ flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
#define BIT_ERASE_DONE 0x00000080
#define BIT_RDY_MASK 0x00000080
#define BIT_PROGRAM_ERROR 0x00000020
#define BIT_TIMEOUT 0x80000000
/* our flag */
#define BIT_TIMEOUT 0x80000000
/* our flag */
#define READY 1
#define ERR 2
...
...
@@ -56,390 +56,377 @@ flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
/*-----------------------------------------------------------------------
*/
ulong
flash_init
(
void
)
ulong
flash_init
(
void
)
{
int
i
,
j
;
ulong
size
=
0
;
int
i
,
j
;
ulong
size
=
0
;
for
(
i
=
0
;
i
<
CFG_MAX_FLASH_BANKS
;
i
++
)
{
ulong
flashbase
=
0
;
flash_info
[
i
].
flash_id
=
for
(
i
=
0
;
i
<
CFG_MAX_FLASH_BANKS
;
i
++
)
{
ulong
flashbase
=
0
;
flash_info
[
i
].
flash_id
=
#if defined(CONFIG_AMD_LV400)
(
AMD_MANUFACT
&
FLASH_VENDMASK
)
|
(
AMD_ID_LV400B
&
FLASH_TYPEMASK
);
(
AMD_MANUFACT
&
FLASH_VENDMASK
)
|
(
AMD_ID_LV400B
&
FLASH_TYPEMASK
);
#elif defined(CONFIG_AMD_LV800)
(
AMD_MANUFACT
&
FLASH_VENDMASK
)
|
(
AMD_ID_LV800B
&
FLASH_TYPEMASK
);
(
AMD_MANUFACT
&
FLASH_VENDMASK
)
|
(
AMD_ID_LV800B
&
FLASH_TYPEMASK
);
#else
#error "Unknown flash configured"
#endif
flash_info
[
i
].
size
=
FLASH_BANK_SIZE
;
flash_info
[
i
].
sector_count
=
CFG_MAX_FLASH_SECT
;
memset
(
flash_info
[
i
].
protect
,
0
,
CFG_MAX_FLASH_SECT
);
if
(
i
==
0
)
flashbase
=
PHYS_FLASH_1
;
else
panic
(
"configured too many flash banks!
\n
"
);
for
(
j
=
0
;
j
<
flash_info
[
i
].
sector_count
;
j
++
)
{
if
(
j
<=
3
)
{
/* 1st one is 16 KB */
if
(
j
==
0
)
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
0
;
}
/* 2nd and 3rd are both 8 KB */
if
((
j
==
1
)
||
(
j
==
2
))
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
0x4000
+
(
j
-
1
)
*
0x2000
;
}
/* 4th 32 KB */
if
(
j
==
3
)
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
0x8000
;
flash_info
[
i
].
size
=
FLASH_BANK_SIZE
;
flash_info
[
i
].
sector_count
=
CFG_MAX_FLASH_SECT
;
memset
(
flash_info
[
i
].
protect
,
0
,
CFG_MAX_FLASH_SECT
);
if
(
i
==
0
)
flashbase
=
PHYS_FLASH_1
;
else
panic
(
"configured too many flash banks!
\n
"
);
for
(
j
=
0
;
j
<
flash_info
[
i
].
sector_count
;
j
++
)
{
if
(
j
<=
3
)
{
/* 1st one is 16 KB */
if
(
j
==
0
)
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
0
;
}
/* 2nd and 3rd are both 8 KB */
if
((
j
==
1
)
||
(
j
==
2
))
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
0x4000
+
(
j
-
1
)
*
0x2000
;
}
/* 4th 32 KB */
if
(
j
==
3
)
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
0x8000
;
}
}
else
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
(
j
-
3
)
*
MAIN_SECT_SIZE
;
}
}
}
else
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
(
j
-
3
)
*
MAIN_SECT_SIZE
;
}
size
+=
flash_info
[
i
].
size
;
}
size
+=
flash_info
[
i
].
size
;
}
flash_protect
(
FLAG_PROTECT_SET
,
CFG_FLASH_BASE
,
CFG_FLASH_BASE
+
monitor_flash_len
-
1
,
&
flash_info
[
0
]);
flash_protect
(
FLAG_PROTECT_SET
,
CFG_FLASH_BASE
,
CFG_FLASH_BASE
+
monitor_flash_len
-
1
,
&
flash_info
[
0
]);
flash_protect
(
FLAG_PROTECT_SET
,
CFG_ENV_ADDR
,
CFG_ENV_ADDR
+
CFG_ENV_SIZE
-
1
,
&
flash_info
[
0
]);
flash_protect
(
FLAG_PROTECT_SET
,
CFG_ENV_ADDR
,
CFG_ENV_ADDR
+
CFG_ENV_SIZE
-
1
,
&
flash_info
[
0
]);
return
size
;
return
size
;
}
/*-----------------------------------------------------------------------
*/
void
flash_print_info
(
flash_info_t
*
info
)
void
flash_print_info
(
flash_info_t
*
info
)
{
int
i
;
switch
(
info
->
flash_id
&
FLASH_VENDMASK
)
{
case
(
AMD_MANUFACT
&
FLASH_VENDMASK
):
puts
(
"AMD: "
);
break
;
default:
puts
(
"Unknown Vendor "
);
break
;
}
switch
(
info
->
flash_id
&
FLASH_TYPEMASK
)
{
case
(
AMD_ID_LV400B
&
FLASH_TYPEMASK
):
puts
(
"1x Amd29LV400BB (4Mbit)
\n
"
);
break
;
case
(
AMD_ID_LV800B
&
FLASH_TYPEMASK
):
puts
(
"1x Amd29LV800BB (8Mbit)
\n
"
);
break
;
default:
puts
(
"Unknown Chip Type
\n
"
);
goto
Done
;
break
;
}
printf
(
" Size: %ld MB in %d Sectors
\n
"
,
info
->
size
>>
20
,
info
->
sector_count
);
puts
(
" Sector Start Addresses:"
);
for
(
i
=
0
;
i
<
info
->
sector_count
;
i
++
)
{
if
((
i
%
5
)
==
0
)
{
puts
(
"
\n
"
);
int
i
;
switch
(
info
->
flash_id
&
FLASH_VENDMASK
)
{
case
(
AMD_MANUFACT
&
FLASH_VENDMASK
):
puts
(
"AMD: "
);
break
;
default:
puts
(
"Unknown Vendor "
);
break
;
}
printf
(
" %08lX%s"
,
info
->
start
[
i
],
info
->
protect
[
i
]
?
" (RO)"
:
" "
);
}
puts
(
"
\n
"
);
Done:
switch
(
info
->
flash_id
&
FLASH_TYPEMASK
)
{
case
(
AMD_ID_LV400B
&
FLASH_TYPEMASK
):
puts
(
"1x Amd29LV400BB (4Mbit)
\n
"
);
break
;
case
(
AMD_ID_LV800B
&
FLASH_TYPEMASK
):
puts
(
"1x Amd29LV800BB (8Mbit)
\n
"
);
break
;
default:
puts
(
"Unknown Chip Type
\n
"
);
goto
Done
;
break
;
}
printf
(
" Size: %ld MB in %d Sectors
\n
"
,
info
->
size
>>
20
,
info
->
sector_count
);
puts
(
" Sector Start Addresses:"
);
for
(
i
=
0
;
i
<
info
->
sector_count
;
i
++
)
{
if
((
i
%
5
)
==
0
)
{
puts
(
"
\n
"
);
}
printf
(
" %08lX%s"
,
info
->
start
[
i
],
info
->
protect
[
i
]
?
" (RO)"
:
" "
);
}
puts
(
"
\n
"
);
Done:
;
}
/*-----------------------------------------------------------------------
*/
int
flash_erase
(
flash_info_t
*
info
,
int
s_first
,
int
s_last
)
int
flash_erase
(
flash_info_t
*
info
,
int
s_first
,
int
s_last
)
{
ushort
result
;
int
iflag
,
cflag
,
prot
,
sect
;
int
rc
=
ERR_OK
;
int
chip
;
/* first look for protection bits */
ushort
result
;
int
iflag
,
cflag
,
prot
,
sect
;
int
rc
=
ERR_OK
;
int
chip
;
if
(
info
->
flash_id
==
FLASH_UNKNOWN
)
return
ERR_UNKNOWN_FLASH_TYPE
;
/* first look for protection bits */
if
((
s_first
<
0
)
||
(
s_first
>
s_last
))
{
return
ERR_INVAL
;
}
if
(
info
->
flash_id
==
FLASH_UNKNOWN
)
return
ERR_UNKNOWN_FLASH_TYPE
;
if
((
info
->
flash_id
&
FLASH_VENDMASK
)
!=
(
AMD_MANUFACT
&
FLASH_VENDMASK
))
{
return
ERR_UNKNOWN_FLASH_VENDOR
;
}
prot
=
0
;
for
(
sect
=
s_first
;
sect
<=
s_last
;
++
sect
)
{
if
(
info
->
protect
[
sect
])
{
prot
++
;
if
((
s_first
<
0
)
||
(
s_first
>
s_last
))
{
return
ERR_INVAL
;
}
}
if
(
prot
)
return
ERR_PROTECTED
;
/*
* Disable interrupts which might cause a timeout
* here. Remember that our exception vectors are
* at address 0 in the flash, and we don't want a
* (ticker) exception to happen while the flash
* chip is in programming mode.
*/
cflag
=
icache_status
();
icache_disable
();
iflag
=
disable_interrupts
();
/* Start erase on unprotected sectors */
for
(
sect
=
s_first
;
sect
<=
s_last
&&
!
ctrlc
();
sect
++
)
{
printf
(
"Erasing sector %2d ... "
,
sect
);
/* arm simple, non interrupt dependent timer */
reset_timer_masked
();
if
(
info
->
protect
[
sect
]
==
0
)
{
/* not protected */
vu_short
*
addr
=
(
vu_short
*
)(
info
->
start
[
sect
]);
MEM_FLASH_ADDR1
=
CMD_UNLOCK1
;
MEM_FLASH_ADDR2
=
CMD_UNLOCK2
;
MEM_FLASH_ADDR1
=
CMD_ERASE_SETUP
;
MEM_FLASH_ADDR1
=
CMD_UNLOCK1
;
MEM_FLASH_ADDR2
=
CMD_UNLOCK2
;
*
addr
=
CMD_ERASE_CONFIRM
;
/* wait until flash is ready */
chip
=
0
;
do
{
result
=
*
addr
;
if
((
info
->
flash_id
&
FLASH_VENDMASK
)
!=
(
AMD_MANUFACT
&
FLASH_VENDMASK
))
{
return
ERR_UNKNOWN_FLASH_VENDOR
;
}
/* check timeout */
if
(
get_timer_masked
()
>
CFG_FLASH_ERASE_TOUT
)
{
MEM_FLASH_ADDR1
=
CMD_READ_ARRAY
;
chip
=
TMO
;
break
;
prot
=
0
;
for
(
sect
=
s_first
;
sect
<=
s_last
;
++
sect
)
{
if
(
info
->
protect
[
sect
])
{
prot
++
;
}
if
(
!
chip
&&
(
result
&
0xFFFF
)
&
BIT_ERASE_DONE
)
chip
=
READY
;
if
(
!
chip
&&
(
result
&
0xFFFF
)
&
BIT_PROGRAM_ERROR
)
chip
=
ERR
;
}
while
(
!
chip
);
MEM_FLASH_ADDR1
=
CMD_READ_ARRAY
;
if
(
chip
==
ERR
)
{
rc
=
ERR_PROG_ERROR
;
goto
outahere
;
}
if
(
chip
==
TMO
)
{
rc
=
ERR_TIMOUT
;
goto
outahere
;
}
puts
(
"ok.
\n
"
);
}
else
/* it was protected */
{
puts
(
"protected!
\n
"
);
if
(
prot
)
return
ERR_PROTECTED
;
/*
* Disable interrupts which might cause a timeout
* here. Remember that our exception vectors are
* at address 0 in the flash, and we don't want a
* (ticker) exception to happen while the flash
* chip is in programming mode.
*/
cflag
=
icache_status
();
icache_disable
();
iflag
=
disable_interrupts
();
/* Start erase on unprotected sectors */
for
(
sect
=
s_first
;
sect
<=
s_last
&&
!
ctrlc
();
sect
++
)
{
printf
(
"Erasing sector %2d ... "
,
sect
);
/* arm simple, non interrupt dependent timer */
reset_timer_masked
();
if
(
info
->
protect
[
sect
]
==
0
)
{
/* not protected */
vu_short
*
addr
=
(
vu_short
*
)
(
info
->
start
[
sect
]);
MEM_FLASH_ADDR1
=
CMD_UNLOCK1
;
MEM_FLASH_ADDR2
=
CMD_UNLOCK2
;
MEM_FLASH_ADDR1
=
CMD_ERASE_SETUP
;
MEM_FLASH_ADDR1
=
CMD_UNLOCK1
;
MEM_FLASH_ADDR2
=
CMD_UNLOCK2
;
*
addr
=
CMD_ERASE_CONFIRM
;
/* wait until flash is ready */
chip
=
0
;
do
{
result
=
*
addr
;
/* check timeout */
if
(
get_timer_masked
()
>
CFG_FLASH_ERASE_TOUT
)
{
MEM_FLASH_ADDR1
=
CMD_READ_ARRAY
;
chip
=
TMO
;
break
;
}
if
(
!
chip
&&
(
result
&
0xFFFF
)
&
BIT_ERASE_DONE
)
chip
=
READY
;
if
(
!
chip
&&
(
result
&
0xFFFF
)
&
BIT_PROGRAM_ERROR
)
chip
=
ERR
;
}
while
(
!
chip
);
MEM_FLASH_ADDR1
=
CMD_READ_ARRAY
;
if
(
chip
==
ERR
)
{
rc
=
ERR_PROG_ERROR
;
goto
outahere
;
}
if
(
chip
==
TMO
)
{
rc
=
ERR_TIMOUT
;
goto
outahere
;
}
puts
(
"ok.
\n
"
);
}
else
{
/* it was protected */
puts
(
"protected!
\n
"
);
}
}
}
if
(
ctrlc
())
puts
(
"User Interrupt!
\n
"
);
if
(
ctrlc
())
puts
(
"User Interrupt!
\n
"
);
outahere:
/* allow flash to settle - wait 10 ms */
udelay_masked
(
10000
);
outahere:
/* allow flash to settle - wait 10 ms */
udelay_masked
(
10000
);
if
(
iflag
)
enable_interrupts
();
if
(
iflag
)
enable_interrupts
();
if
(
cflag
)
icache_enable
();
if
(
cflag
)
icache_enable
();
return
rc
;
return
rc
;
}
/*-----------------------------------------------------------------------
* Copy memory to flash
*/
volatile
static
int
write_hword
(
flash_info_t
*
info
,
ulong
dest
,
ushort
data
)
volatile
static
int
write_hword
(
flash_info_t
*
info
,
ulong
dest
,
ushort
data
)
{
vu_short
*
addr
=
(
vu_short
*
)
dest
;
ushort
result
;
int
rc
=
ERR_OK
;
int
cflag
,
iflag
;
int
chip
;
/*
* Check if Flash is (sufficiently) erased
*/
result
=
*
addr
;
if
((
result
&
data
)
!=
data
)
return
ERR_NOT_ERASED
;
/*
* Disable interrupts which might cause a timeout
* here. Remember that our exception vectors are
* at address 0 in the flash, and we don't want a
* (ticker) exception to happen while the flash
* chip is in programming mode.
*/
cflag
=
icache_status
();
icache_disable
();
iflag
=
disable_interrupts
();
MEM_FLASH_ADDR1
=
CMD_UNLOCK1
;
MEM_FLASH_ADDR2
=
CMD_UNLOCK2
;
MEM_FLASH_ADDR1
=
CMD_PROGRAM
;
*
addr
=
data
;
/* arm simple, non interrupt dependent timer */
reset_timer_masked
();
/* wait until flash is ready */
chip
=
0
;
do
{
vu_short
*
addr
=
(
vu_short
*
)
dest
;
ushort
result
;
int
rc
=
ERR_OK
;
int
cflag
,
iflag
;
int
chip
;
/*
* Check if Flash is (sufficiently) erased
*/
result
=
*
addr
;
if
((
result
&
data
)
!=
data
)
return
ERR_NOT_ERASED
;
/*
* Disable interrupts which might cause a timeout
* here. Remember that our exception vectors are
* at address 0 in the flash, and we don't want a
* (ticker) exception to happen while the flash
* chip is in programming mode.
*/
cflag
=
icache_status
();
icache_disable
();
iflag
=
disable_interrupts
();
MEM_FLASH_ADDR1
=
CMD_UNLOCK1
;
MEM_FLASH_ADDR2
=
CMD_UNLOCK2
;
MEM_FLASH_ADDR1
=
CMD_PROGRAM
;
*
addr
=
data
;
/* check timeout */
if
(
get_timer_masked
()
>
CFG_FLASH_ERASE_TOUT
)
{
chip
=
ERR
|
TMO
;
break
;
}
if
(
!
chip
&&
((
result
&
0x80
)
==
(
data
&
0x80
)))
chip
=
READY
;
/* arm simple, non interrupt dependent timer */
reset_timer_masked
();
if
(
!
chip
&&
((
result
&
0xFFFF
)
&
BIT_PROGRAM_ERROR
))
{
/* wait until flash is ready */
chip
=
0
;
do
{
result
=
*
addr
;
if
((
result
&
0x80
)
==
(
data
&
0x80
))
/* check timeout */
if
(
get_timer_masked
()
>
CFG_FLASH_ERASE_TOUT
)
{
chip
=
ERR
|
TMO
;
break
;
}
if
(
!
chip
&&
((
result
&
0x80
)
==
(
data
&
0x80
)))
chip
=
READY
;
else
chip
=
ERR
;
}
}
while
(
!
chip
);
if
(
!
chip
&&
((
result
&
0xFFFF
)
&
BIT_PROGRAM_ERROR
))
{
result
=
*
addr
;
if
((
result
&
0x80
)
==
(
data
&
0x80
))
chip
=
READY
;
else
chip
=
ERR
;
}
}
while
(
!
chip
);
*
addr
=
CMD_READ_ARRAY
;
*
addr
=
CMD_READ_ARRAY
;
if
(
chip
==
ERR
||
*
addr
!=
data
)
rc
=
ERR_PROG_ERROR
;
if
(
chip
==
ERR
||
*
addr
!=
data
)
rc
=
ERR_PROG_ERROR
;
if
(
iflag
)
enable_interrupts
();
if
(
iflag
)
enable_interrupts
();
if
(
cflag
)
icache_enable
();
if
(
cflag
)
icache_enable
();
return
rc
;
return
rc
;
}
/*-----------------------------------------------------------------------
* Copy memory to flash.
*/
int
write_buff
(
flash_info_t
*
info
,
uchar
*
src
,
ulong
addr
,
ulong
cnt
)
int
write_buff
(
flash_info_t
*
info
,
uchar
*
src
,
ulong
addr
,
ulong
cnt
)
{
ulong
cp
,
wp
;
int
l
;
int
i
,
rc
;
ushort
data
;
wp
=
(
addr
&
~
1
);
/* get lower word aligned address */
ulong
cp
,
wp
;
int
l
;
int
i
,
rc
;
ushort
data
;
wp
=
(
addr
&
~
1
);
/* get lower word aligned address */
/*
* handle unaligned start bytes
*/
if
((
l
=
addr
-
wp
)
!=
0
)
{
data
=
0
;
for
(
i
=
0
,
cp
=
wp
;
i
<
l
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
8
);
}
for
(;
i
<
2
&&
cnt
>
0
;
++
i
)
{
data
=
(
data
>>
8
)
|
(
*
src
++
<<
8
);
--
cnt
;
++
cp
;
}
for
(;
cnt
==
0
&&
i
<
2
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
8
);
}
/*
* handle unaligned start bytes
*/
if
((
l
=
addr
-
wp
)
!=
0
)
{
data
=
0
;
for
(
i
=
0
,
cp
=
wp
;
i
<
l
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
8
);
if
((
rc
=
write_hword
(
info
,
wp
,
data
))
!=
0
)
{
return
(
rc
);
}
wp
+=
2
;
}
for
(;
i
<
2
&&
cnt
>
0
;
++
i
)
{
data
=
(
data
>>
8
)
|
(
*
src
++
<<
8
);
--
cnt
;
++
cp
;
/*
* handle word aligned part
*/
while
(
cnt
>=
2
)
{
data
=
*
((
vu_short
*
)
src
);
if
((
rc
=
write_hword
(
info
,
wp
,
data
))
!=
0
)
{
return
(
rc
);
}
src
+=
2
;
wp
+=
2
;
cnt
-=
2
;
}
for
(;
cnt
==
0
&&
i
<
2
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
8
);
if
(
cnt
==
0
)
{
return
ERR_OK
;
}
if
((
rc
=
write_hword
(
info
,
wp
,
data
))
!=
0
)
{
return
(
rc
);
/*
* handle unaligned tail bytes
*/
data
=
0
;
for
(
i
=
0
,
cp
=
wp
;
i
<
2
&&
cnt
>
0
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
src
++
<<
8
);
--
cnt
;
}
wp
+=
2
;
}
/*
* handle word aligned part
*/
while
(
cnt
>=
2
)
{
data
=
*
((
vu_short
*
)
src
);
if
((
rc
=
write_hword
(
info
,
wp
,
data
))
!=
0
)
{
return
(
rc
);
for
(;
i
<
2
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
8
);
}
src
+=
2
;
wp
+=
2
;
cnt
-=
2
;
}
if
(
cnt
==
0
)
{
return
ERR_OK
;
}
/*
* handle unaligned tail bytes
*/
data
=
0
;
for
(
i
=
0
,
cp
=
wp
;
i
<
2
&&
cnt
>
0
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
src
++
<<
8
);
--
cnt
;
}
for
(;
i
<
2
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
8
);
}
return
write_hword
(
info
,
wp
,
data
);
return
write_hword
(
info
,
wp
,
data
);
}
board/shannon/flash.c
浏览文件 @
e86e5a07
...
...
@@ -178,6 +178,7 @@ void flash_print_info (flash_info_t *info)
printf
(
"
\n
"
);
Done:
;
}
/*-----------------------------------------------------------------------
...
...
board/smdk2400/flash.c
浏览文件 @
e86e5a07
...
...
@@ -149,7 +149,7 @@ void flash_print_info (flash_info_t * info)
}
printf
(
"
\n
"
);
Done:
Done:
;
}
/*-----------------------------------------------------------------------
...
...
board/smdk2410/flash.c
浏览文件 @
e86e5a07
...
...
@@ -24,13 +24,13 @@
#include <common.h>
ulong
myflush
(
void
);
ulong
myflush
(
void
);
#define FLASH_BANK_SIZE PHYS_FLASH_SIZE
#define MAIN_SECT_SIZE 0x10000
/* 64 KB */
#define MAIN_SECT_SIZE 0x10000
/* 64 KB */
flash_info_t
flash_info
[
CFG_MAX_FLASH_BANKS
];
flash_info_t
flash_info
[
CFG_MAX_FLASH_BANKS
];
#define CMD_READ_ARRAY 0x000000F0
...
...
@@ -47,7 +47,7 @@ flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
#define BIT_ERASE_DONE 0x00000080
#define BIT_RDY_MASK 0x00000080
#define BIT_PROGRAM_ERROR 0x00000020
#define BIT_TIMEOUT 0x80000000
/* our flag */
#define BIT_TIMEOUT 0x80000000
/* our flag */
#define READY 1
#define ERR 2
...
...
@@ -56,391 +56,378 @@ flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
/*-----------------------------------------------------------------------
*/
ulong
flash_init
(
void
)
ulong
flash_init
(
void
)
{
int
i
,
j
;
ulong
size
=
0
;
int
i
,
j
;
ulong
size
=
0
;
for
(
i
=
0
;
i
<
CFG_MAX_FLASH_BANKS
;
i
++
)
{
ulong
flashbase
=
0
;
flash_info
[
i
].
flash_id
=
for
(
i
=
0
;
i
<
CFG_MAX_FLASH_BANKS
;
i
++
)
{
ulong
flashbase
=
0
;
flash_info
[
i
].
flash_id
=
#if defined(CONFIG_AMD_LV400)
(
AMD_MANUFACT
&
FLASH_VENDMASK
)
|
(
AMD_ID_LV400B
&
FLASH_TYPEMASK
);
(
AMD_MANUFACT
&
FLASH_VENDMASK
)
|
(
AMD_ID_LV400B
&
FLASH_TYPEMASK
);
#elif defined(CONFIG_AMD_LV800)
(
AMD_MANUFACT
&
FLASH_VENDMASK
)
|
(
AMD_ID_LV800B
&
FLASH_TYPEMASK
);
(
AMD_MANUFACT
&
FLASH_VENDMASK
)
|
(
AMD_ID_LV800B
&
FLASH_TYPEMASK
);
#else
#error "Unknown flash configured"
#endif
flash_info
[
i
].
size
=
FLASH_BANK_SIZE
;
flash_info
[
i
].
sector_count
=
CFG_MAX_FLASH_SECT
;
memset
(
flash_info
[
i
].
protect
,
0
,
CFG_MAX_FLASH_SECT
);
if
(
i
==
0
)
flashbase
=
PHYS_FLASH_1
;
else
panic
(
"configured too many flash banks!
\n
"
);
for
(
j
=
0
;
j
<
flash_info
[
i
].
sector_count
;
j
++
)
{
if
(
j
<=
3
)
{
/* 1st one is 16 KB */
if
(
j
==
0
)
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
0
;
}
/* 2nd and 3rd are both 8 KB */
if
((
j
==
1
)
||
(
j
==
2
))
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
0x4000
+
(
j
-
1
)
*
0x2000
;
}
/* 4th 32 KB */
if
(
j
==
3
)
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
0x8000
;
flash_info
[
i
].
size
=
FLASH_BANK_SIZE
;
flash_info
[
i
].
sector_count
=
CFG_MAX_FLASH_SECT
;
memset
(
flash_info
[
i
].
protect
,
0
,
CFG_MAX_FLASH_SECT
);
if
(
i
==
0
)
flashbase
=
PHYS_FLASH_1
;
else
panic
(
"configured too many flash banks!
\n
"
);
for
(
j
=
0
;
j
<
flash_info
[
i
].
sector_count
;
j
++
)
{
if
(
j
<=
3
)
{
/* 1st one is 16 KB */
if
(
j
==
0
)
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
0
;
}
/* 2nd and 3rd are both 8 KB */
if
((
j
==
1
)
||
(
j
==
2
))
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
0x4000
+
(
j
-
1
)
*
0x2000
;
}
/* 4th 32 KB */
if
(
j
==
3
)
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
0x8000
;
}
}
else
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
(
j
-
3
)
*
MAIN_SECT_SIZE
;
}
}
}
else
{
flash_info
[
i
].
start
[
j
]
=
flashbase
+
(
j
-
3
)
*
MAIN_SECT_SIZE
;
}
size
+=
flash_info
[
i
].
size
;
}
size
+=
flash_info
[
i
].
size
;
}
flash_protect
(
FLAG_PROTECT_SET
,
CFG_FLASH_BASE
,
CFG_FLASH_BASE
+
monitor_flash_len
-
1
,
&
flash_info
[
0
]);
flash_protect
(
FLAG_PROTECT_SET
,
CFG_FLASH_BASE
,
CFG_FLASH_BASE
+
monitor_flash_len
-
1
,
&
flash_info
[
0
]);
flash_protect
(
FLAG_PROTECT_SET
,
CFG_ENV_ADDR
,
CFG_ENV_ADDR
+
CFG_ENV_SIZE
-
1
,
&
flash_info
[
0
]);
flash_protect
(
FLAG_PROTECT_SET
,
CFG_ENV_ADDR
,
CFG_ENV_ADDR
+
CFG_ENV_SIZE
-
1
,
&
flash_info
[
0
]);
return
size
;
return
size
;
}
/*-----------------------------------------------------------------------
*/
void
flash_print_info
(
flash_info_t
*
info
)
void
flash_print_info
(
flash_info_t
*
info
)
{
int
i
;
switch
(
info
->
flash_id
&
FLASH_VENDMASK
)
{
case
(
AMD_MANUFACT
&
FLASH_VENDMASK
):
printf
(
"AMD: "
);
break
;
default:
printf
(
"Unknown Vendor "
);
break
;
}
switch
(
info
->
flash_id
&
FLASH_TYPEMASK
)
{
case
(
AMD_ID_LV400B
&
FLASH_TYPEMASK
):
printf
(
"1x Amd29LV400BB (4Mbit)
\n
"
);
break
;
case
(
AMD_ID_LV800B
&
FLASH_TYPEMASK
):
printf
(
"1x Amd29LV800BB (8Mbit)
\n
"
);
break
;
default:
printf
(
"Unknown Chip Type
\n
"
);
goto
Done
;
break
;
}
printf
(
" Size: %ld MB in %d Sectors
\n
"
,
info
->
size
>>
20
,
info
->
sector_count
);
printf
(
" Sector Start Addresses:"
);
for
(
i
=
0
;
i
<
info
->
sector_count
;
i
++
)
{
if
((
i
%
5
)
==
0
)
{
printf
(
"
\n
"
);
int
i
;
switch
(
info
->
flash_id
&
FLASH_VENDMASK
)
{
case
(
AMD_MANUFACT
&
FLASH_VENDMASK
):
printf
(
"AMD: "
);
break
;
default:
printf
(
"Unknown Vendor "
);
break
;
}
printf
(
" %08lX%s"
,
info
->
start
[
i
],
info
->
protect
[
i
]
?
" (RO)"
:
" "
);
}
printf
(
"
\n
"
);
Done:
switch
(
info
->
flash_id
&
FLASH_TYPEMASK
)
{
case
(
AMD_ID_LV400B
&
FLASH_TYPEMASK
):
printf
(
"1x Amd29LV400BB (4Mbit)
\n
"
);
break
;
case
(
AMD_ID_LV800B
&
FLASH_TYPEMASK
):
printf
(
"1x Amd29LV800BB (8Mbit)
\n
"
);
break
;
default:
printf
(
"Unknown Chip Type
\n
"
);
goto
Done
;
break
;
}
printf
(
" Size: %ld MB in %d Sectors
\n
"
,
info
->
size
>>
20
,
info
->
sector_count
);
printf
(
" Sector Start Addresses:"
);
for
(
i
=
0
;
i
<
info
->
sector_count
;
i
++
)
{
if
((
i
%
5
)
==
0
)
{
printf
(
"
\n
"
);
}
printf
(
" %08lX%s"
,
info
->
start
[
i
],
info
->
protect
[
i
]
?
" (RO)"
:
" "
);
}
printf
(
"
\n
"
);
Done:
;
}
/*-----------------------------------------------------------------------
*/
int
flash_erase
(
flash_info_t
*
info
,
int
s_first
,
int
s_last
)
int
flash_erase
(
flash_info_t
*
info
,
int
s_first
,
int
s_last
)
{
ushort
result
;
int
iflag
,
cflag
,
prot
,
sect
;
int
rc
=
ERR_OK
;
int
chip
;
/* first look for protection bits */
ushort
result
;
int
iflag
,
cflag
,
prot
,
sect
;
int
rc
=
ERR_OK
;
int
chip
;
if
(
info
->
flash_id
==
FLASH_UNKNOWN
)
return
ERR_UNKNOWN_FLASH_TYPE
;
/* first look for protection bits */
if
((
s_first
<
0
)
||
(
s_first
>
s_last
))
{
return
ERR_INVAL
;
}
if
(
info
->
flash_id
==
FLASH_UNKNOWN
)
return
ERR_UNKNOWN_FLASH_TYPE
;
if
((
info
->
flash_id
&
FLASH_VENDMASK
)
!=
(
AMD_MANUFACT
&
FLASH_VENDMASK
))
{
return
ERR_UNKNOWN_FLASH_VENDOR
;
}
prot
=
0
;
for
(
sect
=
s_first
;
sect
<=
s_last
;
++
sect
)
{
if
(
info
->
protect
[
sect
])
{
prot
++
;
if
((
s_first
<
0
)
||
(
s_first
>
s_last
))
{
return
ERR_INVAL
;
}
}
if
(
prot
)
return
ERR_PROTECTED
;
/*
* Disable interrupts which might cause a timeout
* here. Remember that our exception vectors are
* at address 0 in the flash, and we don't want a
* (ticker) exception to happen while the flash
* chip is in programming mode.
*/
cflag
=
icache_status
();
icache_disable
();
iflag
=
disable_interrupts
();
/* Start erase on unprotected sectors */
for
(
sect
=
s_first
;
sect
<=
s_last
&&
!
ctrlc
();
sect
++
)
{
printf
(
"Erasing sector %2d ... "
,
sect
);
/* arm simple, non interrupt dependent timer */
reset_timer_masked
();
if
(
info
->
protect
[
sect
]
==
0
)
{
/* not protected */
vu_short
*
addr
=
(
vu_short
*
)(
info
->
start
[
sect
]);
MEM_FLASH_ADDR1
=
CMD_UNLOCK1
;
MEM_FLASH_ADDR2
=
CMD_UNLOCK2
;
MEM_FLASH_ADDR1
=
CMD_ERASE_SETUP
;
MEM_FLASH_ADDR1
=
CMD_UNLOCK1
;
MEM_FLASH_ADDR2
=
CMD_UNLOCK2
;
*
addr
=
CMD_ERASE_CONFIRM
;
/* wait until flash is ready */
chip
=
0
;
do
{
result
=
*
addr
;
if
((
info
->
flash_id
&
FLASH_VENDMASK
)
!=
(
AMD_MANUFACT
&
FLASH_VENDMASK
))
{
return
ERR_UNKNOWN_FLASH_VENDOR
;
}
/* check timeout */
if
(
get_timer_masked
()
>
CFG_FLASH_ERASE_TOUT
)
{
MEM_FLASH_ADDR1
=
CMD_READ_ARRAY
;
chip
=
TMO
;
break
;
prot
=
0
;
for
(
sect
=
s_first
;
sect
<=
s_last
;
++
sect
)
{
if
(
info
->
protect
[
sect
])
{
prot
++
;
}
if
(
!
chip
&&
(
result
&
0xFFFF
)
&
BIT_ERASE_DONE
)
chip
=
READY
;
if
(
!
chip
&&
(
result
&
0xFFFF
)
&
BIT_PROGRAM_ERROR
)
chip
=
ERR
;
}
while
(
!
chip
);
MEM_FLASH_ADDR1
=
CMD_READ_ARRAY
;
if
(
chip
==
ERR
)
{
rc
=
ERR_PROG_ERROR
;
goto
outahere
;
}
if
(
chip
==
TMO
)
{
rc
=
ERR_TIMOUT
;
goto
outahere
;
}
printf
(
"ok.
\n
"
);
}
else
/* it was protected */
{
printf
(
"protected!
\n
"
);
if
(
prot
)
return
ERR_PROTECTED
;
/*
* Disable interrupts which might cause a timeout
* here. Remember that our exception vectors are
* at address 0 in the flash, and we don't want a
* (ticker) exception to happen while the flash
* chip is in programming mode.
*/
cflag
=
icache_status
();
icache_disable
();
iflag
=
disable_interrupts
();
/* Start erase on unprotected sectors */
for
(
sect
=
s_first
;
sect
<=
s_last
&&
!
ctrlc
();
sect
++
)
{
printf
(
"Erasing sector %2d ... "
,
sect
);
/* arm simple, non interrupt dependent timer */
reset_timer_masked
();
if
(
info
->
protect
[
sect
]
==
0
)
{
/* not protected */
vu_short
*
addr
=
(
vu_short
*
)
(
info
->
start
[
sect
]);
MEM_FLASH_ADDR1
=
CMD_UNLOCK1
;
MEM_FLASH_ADDR2
=
CMD_UNLOCK2
;
MEM_FLASH_ADDR1
=
CMD_ERASE_SETUP
;
MEM_FLASH_ADDR1
=
CMD_UNLOCK1
;
MEM_FLASH_ADDR2
=
CMD_UNLOCK2
;
*
addr
=
CMD_ERASE_CONFIRM
;
/* wait until flash is ready */
chip
=
0
;
do
{
result
=
*
addr
;
/* check timeout */
if
(
get_timer_masked
()
>
CFG_FLASH_ERASE_TOUT
)
{
MEM_FLASH_ADDR1
=
CMD_READ_ARRAY
;
chip
=
TMO
;
break
;
}
if
(
!
chip
&&
(
result
&
0xFFFF
)
&
BIT_ERASE_DONE
)
chip
=
READY
;
if
(
!
chip
&&
(
result
&
0xFFFF
)
&
BIT_PROGRAM_ERROR
)
chip
=
ERR
;
}
while
(
!
chip
);
MEM_FLASH_ADDR1
=
CMD_READ_ARRAY
;
if
(
chip
==
ERR
)
{
rc
=
ERR_PROG_ERROR
;
goto
outahere
;
}
if
(
chip
==
TMO
)
{
rc
=
ERR_TIMOUT
;
goto
outahere
;
}
printf
(
"ok.
\n
"
);
}
else
{
/* it was protected */
printf
(
"protected!
\n
"
);
}
}
}
if
(
ctrlc
())
printf
(
"User Interrupt!
\n
"
);
if
(
ctrlc
())
printf
(
"User Interrupt!
\n
"
);
outahere:
/* allow flash to settle - wait 10 ms */
udelay_masked
(
10000
);
outahere:
/* allow flash to settle - wait 10 ms */
udelay_masked
(
10000
);
if
(
iflag
)
enable_interrupts
();
if
(
iflag
)
enable_interrupts
();
if
(
cflag
)
icache_enable
();
if
(
cflag
)
icache_enable
();
return
rc
;
return
rc
;
}
/*-----------------------------------------------------------------------
* Copy memory to flash
*/
volatile
static
int
write_hword
(
flash_info_t
*
info
,
ulong
dest
,
ushort
data
)
volatile
static
int
write_hword
(
flash_info_t
*
info
,
ulong
dest
,
ushort
data
)
{
vu_short
*
addr
=
(
vu_short
*
)
dest
;
ushort
result
;
int
rc
=
ERR_OK
;
int
cflag
,
iflag
;
int
chip
;
/*
* Check if Flash is (sufficiently) erased
*/
result
=
*
addr
;
if
((
result
&
data
)
!=
data
)
return
ERR_NOT_ERASED
;
/*
* Disable interrupts which might cause a timeout
* here. Remember that our exception vectors are
* at address 0 in the flash, and we don't want a
* (ticker) exception to happen while the flash
* chip is in programming mode.
*/
cflag
=
icache_status
();
icache_disable
();
iflag
=
disable_interrupts
();
MEM_FLASH_ADDR1
=
CMD_UNLOCK1
;
MEM_FLASH_ADDR2
=
CMD_UNLOCK2
;
MEM_FLASH_ADDR1
=
CMD_UNLOCK_BYPASS
;
*
addr
=
CMD_PROGRAM
;
*
addr
=
data
;
/* arm simple, non interrupt dependent timer */
reset_timer_masked
();
/* wait until flash is ready */
chip
=
0
;
do
{
vu_short
*
addr
=
(
vu_short
*
)
dest
;
ushort
result
;
int
rc
=
ERR_OK
;
int
cflag
,
iflag
;
int
chip
;
/*
* Check if Flash is (sufficiently) erased
*/
result
=
*
addr
;
if
((
result
&
data
)
!=
data
)
return
ERR_NOT_ERASED
;
/*
* Disable interrupts which might cause a timeout
* here. Remember that our exception vectors are
* at address 0 in the flash, and we don't want a
* (ticker) exception to happen while the flash
* chip is in programming mode.
*/
cflag
=
icache_status
();
icache_disable
();
iflag
=
disable_interrupts
();
MEM_FLASH_ADDR1
=
CMD_UNLOCK1
;
MEM_FLASH_ADDR2
=
CMD_UNLOCK2
;
MEM_FLASH_ADDR1
=
CMD_UNLOCK_BYPASS
;
*
addr
=
CMD_PROGRAM
;
*
addr
=
data
;
/* check timeout */
if
(
get_timer_masked
()
>
CFG_FLASH_ERASE_TOUT
)
{
chip
=
ERR
|
TMO
;
break
;
}
if
(
!
chip
&&
((
result
&
0x80
)
==
(
data
&
0x80
)))
chip
=
READY
;
/* arm simple, non interrupt dependent timer */
reset_timer_masked
();
if
(
!
chip
&&
((
result
&
0xFFFF
)
&
BIT_PROGRAM_ERROR
))
{
/* wait until flash is ready */
chip
=
0
;
do
{
result
=
*
addr
;
if
((
result
&
0x80
)
==
(
data
&
0x80
))
/* check timeout */
if
(
get_timer_masked
()
>
CFG_FLASH_ERASE_TOUT
)
{
chip
=
ERR
|
TMO
;
break
;
}
if
(
!
chip
&&
((
result
&
0x80
)
==
(
data
&
0x80
)))
chip
=
READY
;
else
chip
=
ERR
;
}
}
while
(
!
chip
);
if
(
!
chip
&&
((
result
&
0xFFFF
)
&
BIT_PROGRAM_ERROR
))
{
result
=
*
addr
;
if
((
result
&
0x80
)
==
(
data
&
0x80
))
chip
=
READY
;
else
chip
=
ERR
;
}
}
while
(
!
chip
);
*
addr
=
CMD_READ_ARRAY
;
*
addr
=
CMD_READ_ARRAY
;
if
(
chip
==
ERR
||
*
addr
!=
data
)
rc
=
ERR_PROG_ERROR
;
if
(
chip
==
ERR
||
*
addr
!=
data
)
rc
=
ERR_PROG_ERROR
;
if
(
iflag
)
enable_interrupts
();
if
(
iflag
)
enable_interrupts
();
if
(
cflag
)
icache_enable
();
if
(
cflag
)
icache_enable
();
return
rc
;
return
rc
;
}
/*-----------------------------------------------------------------------
* Copy memory to flash.
*/
int
write_buff
(
flash_info_t
*
info
,
uchar
*
src
,
ulong
addr
,
ulong
cnt
)
int
write_buff
(
flash_info_t
*
info
,
uchar
*
src
,
ulong
addr
,
ulong
cnt
)
{
ulong
cp
,
wp
;
int
l
;
int
i
,
rc
;
ushort
data
;
wp
=
(
addr
&
~
1
);
/* get lower word aligned address */
ulong
cp
,
wp
;
int
l
;
int
i
,
rc
;
ushort
data
;
wp
=
(
addr
&
~
1
);
/* get lower word aligned address */
/*
* handle unaligned start bytes
*/
if
((
l
=
addr
-
wp
)
!=
0
)
{
data
=
0
;
for
(
i
=
0
,
cp
=
wp
;
i
<
l
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
8
);
}
for
(;
i
<
2
&&
cnt
>
0
;
++
i
)
{
data
=
(
data
>>
8
)
|
(
*
src
++
<<
8
);
--
cnt
;
++
cp
;
}
for
(;
cnt
==
0
&&
i
<
2
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
8
);
}
/*
* handle unaligned start bytes
*/
if
((
l
=
addr
-
wp
)
!=
0
)
{
data
=
0
;
for
(
i
=
0
,
cp
=
wp
;
i
<
l
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
8
);
if
((
rc
=
write_hword
(
info
,
wp
,
data
))
!=
0
)
{
return
(
rc
);
}
wp
+=
2
;
}
for
(;
i
<
2
&&
cnt
>
0
;
++
i
)
{
data
=
(
data
>>
8
)
|
(
*
src
++
<<
8
);
--
cnt
;
++
cp
;
/*
* handle word aligned part
*/
while
(
cnt
>=
2
)
{
data
=
*
((
vu_short
*
)
src
);
if
((
rc
=
write_hword
(
info
,
wp
,
data
))
!=
0
)
{
return
(
rc
);
}
src
+=
2
;
wp
+=
2
;
cnt
-=
2
;
}
for
(;
cnt
==
0
&&
i
<
2
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
8
);
if
(
cnt
==
0
)
{
return
ERR_OK
;
}
if
((
rc
=
write_hword
(
info
,
wp
,
data
))
!=
0
)
{
return
(
rc
);
/*
* handle unaligned tail bytes
*/
data
=
0
;
for
(
i
=
0
,
cp
=
wp
;
i
<
2
&&
cnt
>
0
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
src
++
<<
8
);
--
cnt
;
}
wp
+=
2
;
}
/*
* handle word aligned part
*/
while
(
cnt
>=
2
)
{
data
=
*
((
vu_short
*
)
src
);
if
((
rc
=
write_hword
(
info
,
wp
,
data
))
!=
0
)
{
return
(
rc
);
for
(;
i
<
2
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
8
);
}
src
+=
2
;
wp
+=
2
;
cnt
-=
2
;
}
if
(
cnt
==
0
)
{
return
ERR_OK
;
}
/*
* handle unaligned tail bytes
*/
data
=
0
;
for
(
i
=
0
,
cp
=
wp
;
i
<
2
&&
cnt
>
0
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
src
++
<<
8
);
--
cnt
;
}
for
(;
i
<
2
;
++
i
,
++
cp
)
{
data
=
(
data
>>
8
)
|
(
*
(
uchar
*
)
cp
<<
8
);
}
return
write_hword
(
info
,
wp
,
data
);
return
write_hword
(
info
,
wp
,
data
);
}
board/trab/cmd_trab.c
浏览文件 @
e86e5a07
...
...
@@ -718,6 +718,7 @@ static void led_set (unsigned int state)
gpio
->
PADAT
&=
~
(
1
<<
12
);
break
;
default:
break
;
}
}
...
...
board/trab/flash.c
浏览文件 @
e86e5a07
...
...
@@ -166,7 +166,7 @@ void flash_print_info (flash_info_t * info)
}
printf
(
"
\n
"
);
Done:
Done:
;
}
/*-----------------------------------------------------------------------
...
...
board/trab/memory.c
浏览文件 @
e86e5a07
...
...
@@ -479,7 +479,7 @@ int memory_post_test (int flags)
return ret;
}
#endif
0
#endif
/* 0 */
/* #endif */
/* CONFIG_POST & CFG_POST_MEMORY */
/* #endif */
/* CONFIG_POST */
board/trab/trab_fkt.c
浏览文件 @
e86e5a07
...
...
@@ -35,7 +35,7 @@
* command do_touch is invoked and the touch is not pressed within an specific
* interval.
*/
#undef
CONFIG_TOUCH_WAIT_PRESSED 1
#undef
CONFIG_TOUCH_WAIT_PRESSED
/* max time to wait for touch is pressed */
#ifndef CONFIG_TOUCH_WAIT_PRESSED
...
...
board/versatile/flash.c
浏览文件 @
e86e5a07
...
...
@@ -239,7 +239,6 @@ static ulong flash_get_size (FPW * addr, flash_info_t * info)
info
->
flash_id
+=
FLASH_28F256K3
;
info
->
sector_count
=
256
;
info
->
size
=
0x02000000
;
printf
(
"\Intel StrataFlash 28F256K3C device initialized
\n
"
);
break
;
default:
...
...
board/xsengine/Makefile
浏览文件 @
e86e5a07
...
...
@@ -40,7 +40,7 @@ distclean: clean
#########################################################################
.depend
:
Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
$(CC)
-M
--disassemble-all
$(CPPFLAGS)
$(SOBJS:.o=.S)
$(OBJS:.o=.c)
>
$@
$(CC)
-M
$(CPPFLAGS)
$(SOBJS:.o=.S)
$(OBJS:.o=.c)
>
$@
-include
.depend
...
...
common/usb.c
浏览文件 @
e86e5a07
...
...
@@ -925,7 +925,9 @@ int usb_hub_configure(struct usb_device *dev)
}
descriptor
=
(
struct
usb_hub_descriptor
*
)
buffer
;
if
(
descriptor
->
bLength
>
USB_BUFSIZ
)
{
/* silence compiler warning if USB_BUFSIZ is > 256 [= sizeof(char)] */
i
=
descriptor
->
bLength
;
if
(
i
>
USB_BUFSIZ
)
{
USB_HUB_PRINTF
(
"usb_hub_configure: failed to get hub descriptor - too long: %d\N"
,
descriptor
->
bLength
);
return
-
1
;
...
...
cpu/arm720t/serial_netarm.c
浏览文件 @
e86e5a07
...
...
@@ -169,6 +169,7 @@ int serial_getc (void)
break
;
default:
/* panic, be never here */
break
;
}
serial_reg_ch1
->
status_a
|=
NETARM_SER_STATA_RX_CLOSED
;
...
...
cpu/s3c44b0/cpu.c
浏览文件 @
e86e5a07
...
...
@@ -272,7 +272,7 @@ int i2c_probe(uchar chip)
not implemented
*/
printf
(
__FUNCTION__
"
chip %d
\n
"
,
(
int
)
chip
);
printf
(
"i2c_probe
chip %d
\n
"
,
(
int
)
chip
);
return
-
1
;
}
...
...
cpu/s3c44b0/serial.c
浏览文件 @
e86e5a07
...
...
@@ -112,7 +112,7 @@ void serial_setbrg (void)
divisor
=
121
;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif
break;
#endif
/* break; */
case
57600
:
#if CONFIG_S3C44B0_CLOCK_SPEED==66
...
...
@@ -121,7 +121,7 @@ void serial_setbrg (void)
divisor
=
80
;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif
break;
#endif
/* break; */
case
115200
:
#if CONFIG_S3C44B0_CLOCK_SPEED==66
...
...
@@ -130,7 +130,7 @@ void serial_setbrg (void)
divisor
=
40
;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif
break;
#endif
/* break; */
}
serial_flush_output
();
...
...
drivers/s3c4510b_eth.c
浏览文件 @
e86e5a07
...
...
@@ -170,7 +170,7 @@ s32 eth_send(volatile void *packet, s32 length)
ETH
*
eth
=
&
m_eth
;
if
(
eth
->
m_curTX_FD
->
m_frameDataPtr
.
bf
.
owner
)
{
printf
(
__FUNCTION__
"
(): TX Frame. CPU not owner.
\n
"
);
printf
(
"eth_send
(): TX Frame. CPU not owner.
\n
"
);
return
-
1
;
}
...
...
include/cmd_confdefs.h
浏览文件 @
e86e5a07
...
...
@@ -30,68 +30,68 @@
/*
* Configurable monitor commands
*/
#define CFG_CMD_BDI 0x00000001U
/* bdinfo */
#define CFG_CMD_LOADS 0x00000002U
/* loads */
#define CFG_CMD_LOADB 0x00000004U
/* loadb */
#define CFG_CMD_IMI 0x00000008U
/* iminfo */
#define CFG_CMD_CACHE 0x00000010U
/* icache, dcache */
#define CFG_CMD_FLASH 0x00000020U
/* flinfo, erase, protect */
#define CFG_CMD_MEMORY 0x00000040U
/* md, mm, nm, mw, cp, cmp, */
#define CFG_CMD_BDI 0x00000001U
LL
/* bdinfo */
#define CFG_CMD_LOADS 0x00000002U
LL
/* loads */
#define CFG_CMD_LOADB 0x00000004U
LL
/* loadb */
#define CFG_CMD_IMI 0x00000008U
LL
/* iminfo */
#define CFG_CMD_CACHE 0x00000010U
LL
/* icache, dcache */
#define CFG_CMD_FLASH 0x00000020U
LL
/* flinfo, erase, protect */
#define CFG_CMD_MEMORY 0x00000040U
LL
/* md, mm, nm, mw, cp, cmp, */
/* crc, base, loop, mtest */
#define CFG_CMD_NET 0x00000080U
/* bootp, tftpboot, rarpboot */
#define CFG_CMD_ENV 0x00000100U
/* saveenv */
#define CFG_CMD_KGDB 0x00000200U
/* kgdb */
#define CFG_CMD_PCMCIA 0x00000400U
/* PCMCIA support */
#define CFG_CMD_IDE 0x00000800U
/* IDE harddisk support */
#define CFG_CMD_PCI 0x00001000U
/* pciinfo */
#define CFG_CMD_IRQ 0x00002000U
/* irqinfo */
#define CFG_CMD_BOOTD 0x00004000U
/* bootd */
#define CFG_CMD_CONSOLE 0x00008000U
/* coninfo */
#define CFG_CMD_EEPROM 0x00010000U
/* EEPROM read/write support */
#define CFG_CMD_ASKENV 0x00020000U
/* ask for env variable */
#define CFG_CMD_RUN 0x00040000U
/* run command in env variable */
#define CFG_CMD_ECHO 0x00080000U
/* echo arguments */
#define CFG_CMD_I2C 0x00100000U
/* I2C serial bus support */
#define CFG_CMD_REGINFO 0x00200000U
/* Register dump */
#define CFG_CMD_IMMAP 0x00400000U
/* IMMR dump support */
#define CFG_CMD_DATE 0x00800000U
/* support for RTC, date/time...*/
#define CFG_CMD_DHCP 0x01000000U
/* DHCP Support */
#define CFG_CMD_BEDBUG 0x02000000U
/* Include BedBug Debugger */
#define CFG_CMD_FDC 0x04000000U
/* Floppy Disk Support */
#define CFG_CMD_SCSI 0x08000000U
/* SCSI Support */
#define CFG_CMD_AUTOSCRIPT 0x10000000U
/* Autoscript Support */
#define CFG_CMD_MII 0x20000000U
/* MII support */
#define CFG_CMD_SETGETDCR 0x40000000U
/* DCR support on 4xx */
#define CFG_CMD_BSP 0x80000000U
/* Board Specific functions */
#define CFG_CMD_ELF 0x0000000100000000U
/* ELF (VxWorks) load/boot cmd */
#define CFG_CMD_MISC 0x0000000200000000U
/* Misc functions like sleep etc*/
#define CFG_CMD_USB 0x0000000400000000U
/* USB Support */
#define CFG_CMD_DOC 0x0000000800000000U
/* Disk-On-Chip Support */
#define CFG_CMD_JFFS2 0x0000001000000000U
/* JFFS2 Support */
#define CFG_CMD_DTT 0x0000002000000000U
/* Digital Therm and Thermostat */
#define CFG_CMD_SDRAM 0x0000004000000000U
/* SDRAM DIMM SPD info printout */
#define CFG_CMD_DIAG 0x0000008000000000U
/* Diagnostics */
#define CFG_CMD_FPGA 0x0000010000000000U
/* FPGA configuration Support */
#define CFG_CMD_HWFLOW 0x0000020000000000U
/* RTS/CTS hw flow control */
#define CFG_CMD_SAVES 0x0000040000000000U
/* save S record dump */
#define CFG_CMD_SPI 0x0000100000000000U
/* SPI utility */
#define CFG_CMD_FDOS 0x0000200000000000U
/* Floppy DOS support */
#define CFG_CMD_VFD 0x0000400000000000U
/* VFD support (TRAB) */
#define CFG_CMD_NAND 0x0000800000000000U
/* NAND support */
#define CFG_CMD_BMP 0x0001000000000000U
/* BMP support */
#define CFG_CMD_PORTIO 0x0002000000000000U
/* Port I/O */
#define CFG_CMD_PING 0x0004000000000000U
/* ping support */
#define CFG_CMD_MMC 0x0008000000000000U
/* MMC support */
#define CFG_CMD_FAT 0x0010000000000000U
/* FAT support */
#define CFG_CMD_IMLS 0x0020000000000000U
/* List all found images */
#define CFG_CMD_ITEST 0x0040000000000000U
/* Integer (and string) test */
#define CFG_CMD_NFS 0x0080000000000000U
/* NFS support */
#define CFG_CMD_REISER 0x0100000000000000U
/* Reiserfs support */
#define CFG_CMD_CDP 0x0200000000000000U
/* Cisco Discovery Protocol */
#define CFG_CMD_XIMG 0x0400000000000000U
/* Load part of Multi Image */
#define CFG_CMD_ALL 0xFFFFFFFFFFFFFFFFU
/* ALL commands */
#define CFG_CMD_NET 0x00000080U
LL
/* bootp, tftpboot, rarpboot */
#define CFG_CMD_ENV 0x00000100U
LL
/* saveenv */
#define CFG_CMD_KGDB 0x00000200U
LL
/* kgdb */
#define CFG_CMD_PCMCIA 0x00000400U
LL
/* PCMCIA support */
#define CFG_CMD_IDE 0x00000800U
LL
/* IDE harddisk support */
#define CFG_CMD_PCI 0x00001000U
LL
/* pciinfo */
#define CFG_CMD_IRQ 0x00002000U
LL
/* irqinfo */
#define CFG_CMD_BOOTD 0x00004000U
LL
/* bootd */
#define CFG_CMD_CONSOLE 0x00008000U
LL
/* coninfo */
#define CFG_CMD_EEPROM 0x00010000U
LL
/* EEPROM read/write support */
#define CFG_CMD_ASKENV 0x00020000U
LL
/* ask for env variable */
#define CFG_CMD_RUN 0x00040000U
LL
/* run command in env variable */
#define CFG_CMD_ECHO 0x00080000U
LL
/* echo arguments */
#define CFG_CMD_I2C 0x00100000U
LL
/* I2C serial bus support */
#define CFG_CMD_REGINFO 0x00200000U
LL
/* Register dump */
#define CFG_CMD_IMMAP 0x00400000U
LL
/* IMMR dump support */
#define CFG_CMD_DATE 0x00800000U
LL
/* support for RTC, date/time...*/
#define CFG_CMD_DHCP 0x01000000U
LL
/* DHCP Support */
#define CFG_CMD_BEDBUG 0x02000000U
LL
/* Include BedBug Debugger */
#define CFG_CMD_FDC 0x04000000U
LL
/* Floppy Disk Support */
#define CFG_CMD_SCSI 0x08000000U
LL
/* SCSI Support */
#define CFG_CMD_AUTOSCRIPT 0x10000000U
LL
/* Autoscript Support */
#define CFG_CMD_MII 0x20000000U
LL
/* MII support */
#define CFG_CMD_SETGETDCR 0x40000000U
LL
/* DCR support on 4xx */
#define CFG_CMD_BSP 0x80000000U
LL
/* Board Specific functions */
#define CFG_CMD_ELF 0x0000000100000000U
LL
/* ELF (VxWorks) load/boot cmd */
#define CFG_CMD_MISC 0x0000000200000000U
LL
/* Misc functions like sleep etc*/
#define CFG_CMD_USB 0x0000000400000000U
LL
/* USB Support */
#define CFG_CMD_DOC 0x0000000800000000U
LL
/* Disk-On-Chip Support */
#define CFG_CMD_JFFS2 0x0000001000000000U
LL
/* JFFS2 Support */
#define CFG_CMD_DTT 0x0000002000000000U
LL
/* Digital Therm and Thermostat */
#define CFG_CMD_SDRAM 0x0000004000000000U
LL
/* SDRAM DIMM SPD info printout */
#define CFG_CMD_DIAG 0x0000008000000000U
LL
/* Diagnostics */
#define CFG_CMD_FPGA 0x0000010000000000U
LL
/* FPGA configuration Support */
#define CFG_CMD_HWFLOW 0x0000020000000000U
LL
/* RTS/CTS hw flow control */
#define CFG_CMD_SAVES 0x0000040000000000U
LL
/* save S record dump */
#define CFG_CMD_SPI 0x0000100000000000U
LL
/* SPI utility */
#define CFG_CMD_FDOS 0x0000200000000000U
LL
/* Floppy DOS support */
#define CFG_CMD_VFD 0x0000400000000000U
LL
/* VFD support (TRAB) */
#define CFG_CMD_NAND 0x0000800000000000U
LL
/* NAND support */
#define CFG_CMD_BMP 0x0001000000000000U
LL
/* BMP support */
#define CFG_CMD_PORTIO 0x0002000000000000U
LL
/* Port I/O */
#define CFG_CMD_PING 0x0004000000000000U
LL
/* ping support */
#define CFG_CMD_MMC 0x0008000000000000U
LL
/* MMC support */
#define CFG_CMD_FAT 0x0010000000000000U
LL
/* FAT support */
#define CFG_CMD_IMLS 0x0020000000000000U
LL
/* List all found images */
#define CFG_CMD_ITEST 0x0040000000000000U
LL
/* Integer (and string) test */
#define CFG_CMD_NFS 0x0080000000000000U
LL
/* NFS support */
#define CFG_CMD_REISER 0x0100000000000000U
LL
/* Reiserfs support */
#define CFG_CMD_CDP 0x0200000000000000U
LL
/* Cisco Discovery Protocol */
#define CFG_CMD_XIMG 0x0400000000000000U
LL
/* Load part of Multi Image */
#define CFG_CMD_ALL 0xFFFFFFFFFFFFFFFFU
LL
/* ALL commands */
/* Commands that are considered "non-standard" for some reason
* (memory hogs, requires special hardware, not fully tested, etc.)
...
...
@@ -101,6 +101,7 @@
CFG_CMD_BMP | \
CFG_CMD_BSP | \
CFG_CMD_CACHE | \
CFG_CMD_CDP | \
CFG_CMD_DATE | \
CFG_CMD_DHCP | \
CFG_CMD_DIAG | \
...
...
@@ -133,8 +134,7 @@
CFG_CMD_SDRAM | \
CFG_CMD_SPI | \
CFG_CMD_USB | \
CFG_CMD_VFD | \
CFG_CMD_CDP )
CFG_CMD_VFD )
/* Default configuration
*/
...
...
include/configs/xaeniax.h
浏览文件 @
e86e5a07
...
...
@@ -69,7 +69,7 @@
#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
/* valid baudrates */
#define CONFIG_COMMANDS (
CONFIG_CMD_DFL | CFG_CMD_DIAG | CFG_CMD_SDRAM & ~CONFI
G_CMD_DTT)
#define CONFIG_COMMANDS (
(CONFIG_CMD_DFL | CFG_CMD_DIAG | CFG_CMD_SDRAM) & ~CF
G_CMD_DTT)
/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
#include <cmd_confdefs.h>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录