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
fe599e17
Commit
fe599e17
authored
Aug 07, 2005
by
Wolfgang Denk
Browse files
Fix errors that occur when accessing SystemACE CF
Patch by Jeff Angielski, 09 Jan 2005
parent
7ebdb19b
Changes
2
Hide whitespace changes
Inline
Side-by-side
CHANGELOG
View file @
fe599e17
...
...
@@ -2,6 +2,9 @@
Changes for U-Boot 1.1.3:
======================================================================
* Fix errors that occur when accessing SystemACE CF
Patch by Jeff Angielski, 09 Jan 2005
* Document switching between U-Boot and PlanetCore on RPXlite
by Sam Song, 24 Dec 2004
...
...
common/cmd_ace.c
View file @
fe599e17
...
...
@@ -31,6 +31,12 @@
* available to cmd_fat.c:get_dev and filling in a block device
* description that has all the bits needed for FAT support to
* read sectors.
*
* According to Xilinx technical support, before accessing the
* SystemACE CF you need to set the following control bits:
* FORCECFGMODE : 1
* CFGMODE : 0
* CFGSTART : 0
*/
# include <common.h>
...
...
@@ -95,7 +101,9 @@ static int get_cf_lock(void)
int
retry
=
10
;
/* CONTROLREG = LOCKREG */
ace_writew
(
0x0002
,
0x18
);
unsigned
val
=
ace_readw
(
0x18
);
val
|=
0x0002
;
ace_writew
((
val
&
0xffff
),
0x18
);
/* Wait for MPULOCK in STATUSREG[15:0] */
while
(
!
(
ace_readw
(
0x04
)
&
0x0002
))
{
...
...
@@ -112,8 +120,9 @@ static int get_cf_lock(void)
static
void
release_cf_lock
(
void
)
{
/* CONTROLREG = none */
ace_writew
(
0x0000
,
0x18
);
unsigned
val
=
ace_readw
(
0x18
);
val
&=~
(
0x0002
);
ace_writew
((
val
&
0xffff
),
0x18
);
}
block_dev_desc_t
*
systemace_get_dev
(
int
dev
)
...
...
@@ -127,6 +136,9 @@ block_dev_desc_t * systemace_get_dev(int dev)
systemace_dev
.
blksz
=
512
;
systemace_dev
.
removable
=
1
;
systemace_dev
.
block_read
=
systemace_read
;
init_part
(
&
systemace_dev
);
}
return
&
systemace_dev
;
...
...
@@ -145,6 +157,7 @@ static unsigned long systemace_read(int dev,
int
retry
;
unsigned
blk_countdown
;
unsigned
char
*
dp
=
(
unsigned
char
*
)
buffer
;
unsigned
val
;
if
(
get_cf_lock
()
<
0
)
{
unsigned
status
=
ace_readw
(
0x04
);
...
...
@@ -165,7 +178,7 @@ static unsigned long systemace_read(int dev,
retry
=
2000
;
for
(;;)
{
unsigned
val
=
ace_readw
(
0x04
);
val
=
ace_readw
(
0x04
);
/* If CFDETECT is false, card is missing. */
if
(
!
(
val
&
0x0010
))
{
...
...
@@ -212,6 +225,11 @@ static unsigned long systemace_read(int dev,
/* Write sector count | ReadMemCardData. */
ace_writew
((
trans
&
0xff
)
|
0x0300
,
0x14
);
/* Reset the configruation controller */
val
=
ace_readw
(
0x18
);
val
|=
0x0080
;
ace_writew
(
val
,
0x18
);
retry
=
trans
*
16
;
while
(
retry
>
0
)
{
int
idx
;
...
...
@@ -231,6 +249,11 @@ static unsigned long systemace_read(int dev,
retry
-=
1
;
}
/* Clear the configruation controller reset */
val
=
ace_readw
(
0x18
);
val
&=~
0x0080
;
ace_writew
(
val
,
0x18
);
/* Count the blocks we transfer this time. */
start
+=
trans
;
blk_countdown
-=
trans
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment