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
8ae41aec
Unverified
Commit
8ae41aec
authored
6 years ago
by
Dimitris Papastamos
Committed by
GitHub
6 years ago
Browse files
Options
Download
Plain Diff
Merge pull request #1505 from Yann-lms/mmc_delays
mmc: add required delays when retrying commands
parents
29be1b55
15e913d4
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
v2.0
v2.0-rc0
v1.6
v1.6-rc1
v1.6-rc0
arm_cca_v0.2
arm_cca_v0.1
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
drivers/mmc/mmc.c
+42
-35
drivers/mmc/mmc.c
with
42 additions
and
35 deletions
+42
-35
drivers/mmc/mmc.c
View file @
8ae41aec
...
...
@@ -9,6 +9,7 @@
#include <arch_helpers.h>
#include <assert.h>
#include <debug.h>
#include <delay_timer.h>
#include <errno.h>
#include <mmc.h>
#include <stdbool.h>
...
...
@@ -319,18 +320,12 @@ static int mmc_fill_device_info(void)
static
int
sd_send_op_cond
(
void
)
{
int
retries
=
SEND_OP_COND_MAX_RETRIES
;
int
n
;
unsigned
int
resp_data
[
4
];
do
{
for
(
n
=
0
;
n
<
SEND_OP_COND_MAX_RETRIES
;
n
++
)
{
int
ret
;
if
(
retries
==
0
)
{
ERROR
(
"ACMD41 failed after %d retries
\n
"
,
SEND_OP_COND_MAX_RETRIES
);
return
-
EIO
;
}
/* CMD55: Application Specific Command */
ret
=
mmc_send_cmd
(
MMC_CMD
(
55
),
0
,
MMC_RESPONSE_R
(
1
),
NULL
);
if
(
ret
!=
0
)
{
...
...
@@ -344,25 +339,31 @@ static int sd_send_op_cond(void)
return
ret
;
}
retries
--
;
}
while
((
resp_data
[
0
]
&
OCR_POWERUP
)
==
0U
)
;
if
((
resp_data
[
0
]
&
OCR_POWERUP
)
!=
0U
)
{
mmc_ocr_value
=
resp_data
[
0
]
;
mmc_ocr_value
=
resp_data
[
0
];
if
((
mmc_ocr_value
&
OCR_HCS
)
!=
0U
)
{
mmc_dev_info
->
mmc_dev_type
=
MMC_IS_SD_HC
;
}
else
{
mmc_dev_info
->
mmc_dev_type
=
MMC_IS_SD
;
}
if
((
mmc_ocr_value
&
OCR_HCS
)
!=
0U
)
{
mmc_dev_info
->
mmc_dev_type
=
MMC_IS_SD_HC
;
}
else
{
m
mc_dev_info
->
mmc_dev_type
=
MMC_IS_SD
;
return
0
;
}
m
delay
(
1
)
;
}
return
0
;
ERROR
(
"ACMD41 failed after %d retries
\n
"
,
SEND_OP_COND_MAX_RETRIES
);
return
-
EIO
;
}
static
int
mmc_
send_op_cond
(
void
)
static
int
mmc_
reset_to_idle
(
void
)
{
int
ret
;
int
retries
=
SEND_OP_COND_MAX_RETRIES
;
unsigned
int
resp_data
[
4
]
;
mdelay
(
1
)
;
/* CMD0: reset to IDLE */
ret
=
mmc_send_cmd
(
MMC_CMD
(
0
),
0
,
0
,
NULL
);
...
...
@@ -370,14 +371,19 @@ static int mmc_send_op_cond(void)
return
ret
;
}
do
{
if
(
retries
==
0
)
{
ERROR
(
"CMD1 failed after %d retries
\n
"
,
SEND_OP_COND_MAX_RETRIES
);
return
-
EIO
;
}
mdelay
(
2
);
/* CMD1: get OCR register (SEND_OP_COND) */
return
0
;
}
static
int
mmc_send_op_cond
(
void
)
{
int
ret
,
n
;
unsigned
int
resp_data
[
4
];
mmc_reset_to_idle
();
for
(
n
=
0
;
n
<
SEND_OP_COND_MAX_RETRIES
;
n
++
)
{
ret
=
mmc_send_cmd
(
MMC_CMD
(
1
),
OCR_SECTOR_MODE
|
OCR_VDD_MIN_2V7
|
OCR_VDD_MIN_1V7
,
MMC_RESPONSE_R
(
3
),
&
resp_data
[
0
]);
...
...
@@ -385,12 +391,17 @@ static int mmc_send_op_cond(void)
return
ret
;
}
retries
--
;
}
while
((
resp_data
[
0
]
&
OCR_POWERUP
)
==
0U
);
if
((
resp_data
[
0
]
&
OCR_POWERUP
)
!=
0U
)
{
mmc_ocr_value
=
resp_data
[
0
];
return
0
;
}
mmc_ocr_value
=
resp_data
[
0
];
mdelay
(
1
);
}
return
0
;
ERROR
(
"CMD1 failed after %d retries
\n
"
,
SEND_OP_COND_MAX_RETRIES
);
return
-
EIO
;
}
static
int
mmc_enumerate
(
unsigned
int
clk
,
unsigned
int
bus_width
)
...
...
@@ -400,11 +411,7 @@ static int mmc_enumerate(unsigned int clk, unsigned int bus_width)
ops
->
init
();
/* CMD0: reset to IDLE */
ret
=
mmc_send_cmd
(
MMC_CMD
(
0
),
0
,
0
,
NULL
);
if
(
ret
!=
0
)
{
return
ret
;
}
mmc_reset_to_idle
();
/* CMD8: Send Interface Condition Command */
ret
=
mmc_send_cmd
(
MMC_CMD
(
8
),
VHS_2_7_3_6_V
|
CMD8_CHECK_PATTERN
,
...
...
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