Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
fc159c62
Unverified
Commit
fc159c62
authored
Feb 27, 2019
by
Antonio Niño Díaz
Committed by
GitHub
Feb 27, 2019
Browse files
Merge pull request #1840 from grandpaul/rpi3-sdhost-improve1
RaspberryPi3 sdhost driver improvement.
parents
ed43437d
2c8ef2ae
Changes
3
Show whitespace changes
Inline
Side-by-side
drivers/rpi3/sdhost/rpi3_sdhost.c
View file @
fc159c62
...
...
@@ -272,8 +272,6 @@ static int rpi3_sdhost_send_cmd(struct mmc_cmd *cmd)
}
cmd_idx
=
cmd
->
cmd_idx
&
HC_CMD_COMMAND_MASK
;
if
(
cmd_idx
==
MMC_CMD
(
17
))
cmd_idx
=
MMC_CMD
(
18
);
cmd_arg
=
cmd
->
cmd_arg
;
if
(
cmd_idx
==
MMC_ACMD
(
51
))
{
...
...
@@ -364,8 +362,12 @@ static int rpi3_sdhost_send_cmd(struct mmc_cmd *cmd)
mmio_write_32
(
reg_base
+
HC_HOSTSTATUS
,
HC_HSTST_MASK_ERROR_ALL
);
/*
* If the command SEND_OP_COND returns with CRC7 error,
* it can be considered as having completed successfully.
*/
if
(
!
(
sdhsts
&
HC_HSTST_ERROR_CRC7
)
||
(
cmd_idx
!=
MMC_
A
CMD
(
5
1
)))
{
||
(
cmd_idx
!=
MMC_CMD
(
1
)))
{
if
(
sdhsts
&
HC_HSTST_TIMEOUT_CMD
)
{
ERROR
(
"rpi3_sdhost: timeout status 0x%x
\n
"
,
sdhsts
);
...
...
@@ -533,21 +535,6 @@ static int rpi3_sdhost_read(int lba, uintptr_t buf, size_t size)
if
(
rpi3_sdhost_params
.
current_cmd
==
MMC_CMD
(
18
))
send_command_decorated
(
MMC_CMD
(
12
),
0
);
if
(
err
==
-
(
EILSEQ
))
{
const
int
max_retries
=
20
;
int
r
;
rpi3_sdhost_params
.
crc_err_retries
++
;
if
(
rpi3_sdhost_params
.
crc_err_retries
<
max_retries
)
{
/* retries if there's an CRC error */
r
=
rpi3_sdhost_prepare
(
lba
,
buf
,
size
);
send_command_decorated
(
MMC_CMD
(
18
),
lba
);
r
=
rpi3_sdhost_read
(
lba
,
buf
,
size
);
if
(
r
==
0
)
err
=
0
;
}
}
return
err
;
}
...
...
@@ -617,16 +604,20 @@ void rpi3_sdhost_init(struct rpi3_sdhost_params *params,
}
/* setting pull resistors for 48 to 53.
* GPIO 48 (SD_CLK) to GPIO_PULL_UP
* GPIO 49 (SD_CMD) to GPIO_PULL_NONE
* GPIO 50 (SD_D0) to GPIO_PULL_NONE
* GPIO 51 (SD_D1) to GPIO_PULL_NONE
* GPIO 52 (SD_D2) to GPIO_PULL_NONE
* GPIO 53 (SD_D3) to GPIO_PULL_NONE
* It is debatable to set SD_CLK to UP or NONE. We massively
* tested different brands of SD Cards and found NONE works
* most stable.
*
* GPIO 48 (SD_CLK) to GPIO_PULL_NONE
* GPIO 49 (SD_CMD) to GPIO_PULL_UP
* GPIO 50 (SD_D0) to GPIO_PULL_UP
* GPIO 51 (SD_D1) to GPIO_PULL_UP
* GPIO 52 (SD_D2) to GPIO_PULL_UP
* GPIO 53 (SD_D3) to GPIO_PULL_UP
*/
gpio_set_pull
(
48
,
GPIO_PULL_
UP
);
gpio_set_pull
(
48
,
GPIO_PULL_
NONE
);
for
(
int
i
=
49
;
i
<=
53
;
i
++
)
gpio_set_pull
(
i
,
GPIO_PULL_
NONE
);
gpio_set_pull
(
i
,
GPIO_PULL_
UP
);
/* Set pin 48-53 to alt-0. It means route SDHOST to card slot */
for
(
int
i
=
48
;
i
<=
53
;
i
++
)
...
...
@@ -675,15 +666,14 @@ void rpi3_sdhost_stop(void)
rpi3_sdhost_params
.
gpio48_pinselect
[
i
-
48
]);
}
/*
Must r
eset the pull resistors for
u-boot to work
.
* GPIO 48 (SD_CLK) to GPIO_PULL_
NONE
/*
R
eset the pull resistors
be
for
e entering BL33
.
* GPIO 48 (SD_CLK) to GPIO_PULL_
UP
* GPIO 49 (SD_CMD) to GPIO_PULL_UP
* GPIO 50 (SD_D0) to GPIO_PULL_UP
* GPIO 51 (SD_D1) to GPIO_PULL_UP
* GPIO 52 (SD_D2) to GPIO_PULL_UP
* GPIO 53 (SD_D3) to GPIO_PULL_UP
*/
gpio_set_pull
(
48
,
GPIO_PULL_NONE
);
for
(
int
i
=
49
;
i
<=
53
;
i
++
)
for
(
int
i
=
48
;
i
<=
53
;
i
++
)
gpio_set_pull
(
i
,
GPIO_PULL_UP
);
}
include/drivers/rpi3/sdhost/rpi3_sdhost.h
View file @
fc159c62
...
...
@@ -21,7 +21,6 @@ struct rpi3_sdhost_params {
uint8_t
cmdbusy
;
uint8_t
mmc_app_cmd
;
uint32_t
ns_per_fifo_word
;
uint32_t
crc_err_retries
;
uint32_t
sdcard_rca
;
uint32_t
gpio48_pinselect
[
6
];
...
...
plat/rpi3/rpi3_bl2_setup.c
View file @
fc159c62
...
...
@@ -44,8 +44,8 @@ static void rpi3_sdhost_setup(void)
memset
(
&
params
,
0
,
sizeof
(
struct
rpi3_sdhost_params
));
params
.
reg_base
=
RPI3_SDHOST_BASE
;
params
.
bus_width
=
MMC_BUS_WIDTH_
4
;
params
.
clk_rate
=
392464
;
params
.
bus_width
=
MMC_BUS_WIDTH_
1
;
params
.
clk_rate
=
50000000
;
mmc_info
.
mmc_dev_type
=
MMC_IS_SD_HC
;
rpi3_sdhost_init
(
&
params
,
&
mmc_info
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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