Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
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
6 years ago
by
Antonio Niño Díaz
Committed by
GitHub
6 years ago
Browse files
Options
Download
Plain Diff
Merge pull request #1840 from grandpaul/rpi3-sdhost-improve1
RaspberryPi3 sdhost driver improvement.
parents
ed43437d
2c8ef2ae
master
v2.5
v2.5-rc1
v2.5-rc0
v2.4
v2.4-rc2
v2.4-rc1
v2.4-rc0
v2.3
v2.3-rc2
v2.3-rc1
v2.3-rc0
v2.2
v2.2-rc2
v2.2-rc1
v2.2-rc0
v2.1
v2.1-rc1
v2.1-rc0
arm_cca_v0.2
arm_cca_v0.1
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
drivers/rpi3/sdhost/rpi3_sdhost.c
+20
-30
drivers/rpi3/sdhost/rpi3_sdhost.c
include/drivers/rpi3/sdhost/rpi3_sdhost.h
+0
-1
include/drivers/rpi3/sdhost/rpi3_sdhost.h
plat/rpi3/rpi3_bl2_setup.c
+2
-2
plat/rpi3/rpi3_bl2_setup.c
with
22 additions
and
33 deletions
+22
-33
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
);
}
This diff is collapsed.
Click to expand it.
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
];
...
...
This diff is collapsed.
Click to expand it.
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
);
}
...
...
This diff is collapsed.
Click to expand it.
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
Menu
Projects
Groups
Snippets
Help