Browse Source

Merge pull request #1863 from thloh85-intel/mmc_fixes

drivers: mmc: Fix some issues with MMC stack
pull/1872/head
Dimitris Papastamos 6 years ago
committed by GitHub
parent
commit
3c652a2d1c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      drivers/mmc/mmc.c
  2. 1
      include/drivers/mmc.h
  3. 1
      plat/intel/soc/stratix10/bl2_plat_setup.c

8
drivers/mmc/mmc.c

@ -29,6 +29,7 @@ static unsigned char mmc_ext_csd[512] __aligned(16);
static unsigned int mmc_flags; static unsigned int mmc_flags;
static struct mmc_device_info *mmc_dev_info; static struct mmc_device_info *mmc_dev_info;
static unsigned int rca; static unsigned int rca;
static unsigned int scr[2]__aligned(16) = { 0 };
static const unsigned char tran_speed_base[16] = { static const unsigned char tran_speed_base[16] = {
0, 10, 12, 13, 15, 20, 26, 30, 35, 40, 45, 52, 55, 60, 70, 80 0, 10, 12, 13, 15, 20, 26, 30, 35, 40, 45, 52, 55, 60, 70, 80
@ -90,7 +91,8 @@ static int mmc_device_state(void)
ret = mmc_send_cmd(MMC_CMD(13), rca << RCA_SHIFT_OFFSET, ret = mmc_send_cmd(MMC_CMD(13), rca << RCA_SHIFT_OFFSET,
MMC_RESPONSE_R1, &resp_data[0]); MMC_RESPONSE_R1, &resp_data[0]);
if (ret != 0) { if (ret != 0) {
return ret; retries--;
continue;
} }
if ((resp_data[0] & STATUS_SWITCH_ERROR) != 0U) { if ((resp_data[0] & STATUS_SWITCH_ERROR) != 0U) {
@ -129,7 +131,6 @@ static int mmc_sd_switch(unsigned int bus_width)
{ {
int ret; int ret;
int retries = MMC_DEFAULT_MAX_RETRIES; int retries = MMC_DEFAULT_MAX_RETRIES;
unsigned int scr[2] = { 0 };
unsigned int bus_width_arg = 0; unsigned int bus_width_arg = 0;
ret = ops->prepare(0, (uintptr_t)&scr, sizeof(scr)); ret = ops->prepare(0, (uintptr_t)&scr, sizeof(scr));
@ -341,7 +342,8 @@ static int sd_send_op_cond(void)
} }
/* ACMD41: SD_SEND_OP_COND */ /* ACMD41: SD_SEND_OP_COND */
ret = mmc_send_cmd(MMC_ACMD(41), OCR_HCS, MMC_RESPONSE_R3, ret = mmc_send_cmd(MMC_ACMD(41), OCR_HCS |
mmc_dev_info->ocr_voltage, MMC_RESPONSE_R3,
&resp_data[0]); &resp_data[0]);
if (ret != 0) { if (ret != 0) {
return ret; return ret;

1
include/drivers/mmc.h

@ -220,6 +220,7 @@ struct mmc_device_info {
unsigned long long device_size; /* Size of device in bytes */ unsigned long long device_size; /* Size of device in bytes */
unsigned int block_size; /* Block size in bytes */ unsigned int block_size; /* Block size in bytes */
unsigned int max_bus_freq; /* Max bus freq in Hz */ unsigned int max_bus_freq; /* Max bus freq in Hz */
unsigned int ocr_voltage; /* OCR voltage */
enum mmc_device_type mmc_dev_type; /* Type of MMC */ enum mmc_device_type mmc_dev_type; /* Type of MMC */
}; };

1
plat/intel/soc/stratix10/bl2_plat_setup.c

@ -104,6 +104,7 @@ void bl2_el3_plat_arch_setup(void)
dw_mmc_params_t params = EMMC_INIT_PARAMS(0x100000); dw_mmc_params_t params = EMMC_INIT_PARAMS(0x100000);
info.mmc_dev_type = MMC_IS_SD; info.mmc_dev_type = MMC_IS_SD;
info.ocr_voltage = OCR_3_3_3_4 | OCR_3_2_3_3;
switch (boot_source) { switch (boot_source) {
case BOOT_SOURCE_SDMMC: case BOOT_SOURCE_SDMMC:

Loading…
Cancel
Save