Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Librem5
uboot-imx
Commits
e86e5a07
Commit
e86e5a07
authored
Oct 17, 2004
by
wdenk
Browse files
Code cleanup for GCC-3.3.x compilers
parent
8b74bf31
Changes
22
Hide whitespace changes
Inline
Side-by-side
README
View file @
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
View file @
e86e5a07
...
...
@@ -109,7 +109,7 @@ void flash_print_info (flash_info_t * info)
}
printf
(
"
\n
"
);
Done:
Done:
;
}
/*-----------------------------------------------------------------------
...
...
board/evb4510/flash.c
View file @
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
View file @
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 */
re
set_timer_masked
()
;
if
(
info
->
flash_id
==
FLASH_UNKNOWN
)
re
turn
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
)
{