Merge tag 'mmc-1-16-2020' of https://gitlab.denx.de/u-boot/custodians/u-boot-mmc
- Cleanup of fsl_esdhc driver together with arch/defconfig change - Add quirk for APP_CMD retry
This commit is contained in:
commit
d7bb6aceb2
@ -125,7 +125,6 @@ void get_sys_info(struct sys_info *sys_info)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC
|
||||
#define HWA_CGA_M2_CLK_SEL 0x00000007
|
||||
#define HWA_CGA_M2_CLK_SHIFT 0
|
||||
#if defined(CONFIG_TARGET_LS1046ARDB) || defined(CONFIG_TARGET_LS1043ARDB)
|
||||
@ -148,11 +147,10 @@ void get_sys_info(struct sys_info *sys_info)
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
printf("Error: Unknown peripheral clock select!\n");
|
||||
printf("Error: Unknown cluster group A mux 2 clock select!\n");
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_FSL_IFC)
|
||||
sys_info->freq_localbus = sys_info->freq_systembus /
|
||||
@ -179,28 +177,21 @@ unsigned long get_qman_freq(void)
|
||||
int get_clocks(void)
|
||||
{
|
||||
struct sys_info sys_info;
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC
|
||||
u32 clock = 0;
|
||||
#endif
|
||||
get_sys_info(&sys_info);
|
||||
gd->cpu_clk = sys_info.freq_processor[0];
|
||||
gd->bus_clk = sys_info.freq_systembus / CONFIG_SYS_FSL_PCLK_DIV;
|
||||
gd->mem_clk = sys_info.freq_ddrbus;
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC
|
||||
#if defined(CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK)
|
||||
#if defined(CONFIG_TARGET_LS1046ARDB)
|
||||
gd->arch.sdhc_clk = sys_info.freq_cga_m2 / 2;
|
||||
#endif
|
||||
#if defined(CONFIG_TARGET_LS1043ARDB)
|
||||
gd->arch.sdhc_clk = sys_info.freq_cga_m2;
|
||||
#endif
|
||||
#if defined(CONFIG_TARGET_LS1012ARDB)
|
||||
gd->arch.sdhc_clk = sys_info.freq_systembus;
|
||||
#endif
|
||||
#else
|
||||
gd->arch.sdhc_clk = (sys_info.freq_systembus /
|
||||
CONFIG_SYS_FSL_PCLK_DIV) /
|
||||
CONFIG_SYS_FSL_SDHC_CLK_DIV;
|
||||
#if defined(CONFIG_ARCH_LS1012A)
|
||||
clock = sys_info.freq_systembus;
|
||||
#elif defined(CONFIG_ARCH_LS1043A) || defined(CONFIG_ARCH_LS1046A)
|
||||
clock = sys_info.freq_cga_m2;
|
||||
#endif
|
||||
gd->arch.sdhc_per_clk = clock / CONFIG_SYS_FSL_SDHC_CLK_DIV;
|
||||
gd->arch.sdhc_clk = gd->bus_clk / CONFIG_SYS_FSL_SDHC_CLK_DIV;
|
||||
#endif
|
||||
if (gd->cpu_clk != 0)
|
||||
return 0;
|
||||
|
@ -160,14 +160,14 @@ void get_sys_info(struct sys_info *sys_info)
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#if defined(CONFIG_ARCH_LX2160A) || defined(CONFIG_ARCH_LS2080A)
|
||||
sys_info->freq_cga_m2 = sys_info->freq_systembus;
|
||||
#endif
|
||||
}
|
||||
|
||||
int get_clocks(void)
|
||||
{
|
||||
struct sys_info sys_info;
|
||||
#ifdef CONFIG_FSL_ESDHC
|
||||
u32 clock = 0;
|
||||
#endif
|
||||
get_sys_info(&sys_info);
|
||||
gd->cpu_clk = sys_info.freq_processor[0];
|
||||
gd->bus_clk = sys_info.freq_systembus / CONFIG_SYS_FSL_PCLK_DIV;
|
||||
@ -175,18 +175,16 @@ int get_clocks(void)
|
||||
#ifdef CONFIG_SYS_FSL_HAS_DP_DDR
|
||||
gd->arch.mem2_clk = sys_info.freq_ddrbus2;
|
||||
#endif
|
||||
#if defined(CONFIG_FSL_ESDHC)
|
||||
#if defined(CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK)
|
||||
#if defined(CONFIG_ARCH_LS1028A) || defined(CONFIG_ARCH_LX2160A)
|
||||
gd->arch.sdhc_clk = sys_info.freq_cga_m2 / 2;
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC
|
||||
#if defined(CONFIG_ARCH_LS1028A) || defined(CONFIG_ARCH_LS1088A)
|
||||
clock = sys_info.freq_cga_m2;
|
||||
#elif defined(CONFIG_ARCH_LX2160A) || defined(CONFIG_ARCH_LS2080A)
|
||||
clock = sys_info.freq_systembus;
|
||||
#endif
|
||||
#if defined(CONFIG_ARCH_LS2080A) || defined(CONFIG_ARCH_LS1088A)
|
||||
gd->arch.sdhc_clk = sys_info.freq_cga_m2;
|
||||
#endif
|
||||
#else
|
||||
gd->arch.sdhc_per_clk = clock / CONFIG_SYS_FSL_SDHC_CLK_DIV;
|
||||
gd->arch.sdhc_clk = gd->bus_clk / CONFIG_SYS_FSL_SDHC_CLK_DIV;
|
||||
#endif
|
||||
#endif /* defined(CONFIG_FSL_ESDHC) */
|
||||
|
||||
if (gd->cpu_clk != 0)
|
||||
return 0;
|
||||
|
@ -13,6 +13,10 @@ struct arch_global_data {
|
||||
u32 sdhc_clk;
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_FSL_ESDHC)
|
||||
u32 sdhc_per_clk;
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_U_QE)
|
||||
u32 qe_clk;
|
||||
u32 brg_clk;
|
||||
|
@ -69,8 +69,7 @@ void get_sys_info(sys_info_t *sys_info)
|
||||
[14] = 4, /* CC4 PPL / 4 */
|
||||
};
|
||||
uint i, freq_c_pll[CONFIG_SYS_FSL_NUM_CC_PLLS];
|
||||
#if !defined(CONFIG_FM_PLAT_CLK_DIV) || !defined(CONFIG_PME_PLAT_CLK_DIV) || \
|
||||
defined(CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK)
|
||||
#if !defined(CONFIG_FM_PLAT_CLK_DIV) || !defined(CONFIG_PME_PLAT_CLK_DIV)
|
||||
uint rcw_tmp;
|
||||
#endif
|
||||
uint ratio[CONFIG_SYS_FSL_NUM_CC_PLLS];
|
||||
@ -450,48 +449,6 @@ void get_sys_info(sys_info_t *sys_info)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
#if defined(CONFIG_ARCH_T2080)
|
||||
#define ESDHC_CLK_SEL 0x00000007
|
||||
#define ESDHC_CLK_SHIFT 0
|
||||
#define ESDHC_CLK_RCWSR 15
|
||||
#else /* Support T1040 T1024 by now */
|
||||
#define ESDHC_CLK_SEL 0xe0000000
|
||||
#define ESDHC_CLK_SHIFT 29
|
||||
#define ESDHC_CLK_RCWSR 7
|
||||
#endif
|
||||
rcw_tmp = in_be32(&gur->rcwsr[ESDHC_CLK_RCWSR]);
|
||||
switch ((rcw_tmp & ESDHC_CLK_SEL) >> ESDHC_CLK_SHIFT) {
|
||||
case 1:
|
||||
sys_info->freq_sdhc = freq_c_pll[CONFIG_SYS_SDHC_CLK];
|
||||
break;
|
||||
case 2:
|
||||
sys_info->freq_sdhc = freq_c_pll[CONFIG_SYS_SDHC_CLK] / 2;
|
||||
break;
|
||||
case 3:
|
||||
sys_info->freq_sdhc = freq_c_pll[CONFIG_SYS_SDHC_CLK] / 3;
|
||||
break;
|
||||
#if defined(CONFIG_SYS_SDHC_CLK_2_PLL)
|
||||
case 4:
|
||||
sys_info->freq_sdhc = freq_c_pll[CONFIG_SYS_SDHC_CLK] / 4;
|
||||
break;
|
||||
#if defined(CONFIG_ARCH_T2080)
|
||||
case 5:
|
||||
sys_info->freq_sdhc = freq_c_pll[1 - CONFIG_SYS_SDHC_CLK];
|
||||
break;
|
||||
#endif
|
||||
case 6:
|
||||
sys_info->freq_sdhc = freq_c_pll[1 - CONFIG_SYS_SDHC_CLK] / 2;
|
||||
break;
|
||||
case 7:
|
||||
sys_info->freq_sdhc = freq_c_pll[1 - CONFIG_SYS_SDHC_CLK] / 3;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
sys_info->freq_sdhc = 0;
|
||||
printf("Error: Unknown SDHC peripheral clock select!\n");
|
||||
}
|
||||
#endif
|
||||
#else /* CONFIG_SYS_FSL_QORIQ_CHASSIS2 */
|
||||
|
||||
for_each_cpu(i, cpu, cpu_numcores(), cpu_mask()) {
|
||||
@ -673,15 +630,11 @@ int get_clocks (void)
|
||||
gd->arch.i2c2_clk = gd->arch.i2c1_clk;
|
||||
|
||||
#if defined(CONFIG_FSL_ESDHC)
|
||||
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
gd->arch.sdhc_clk = sys_info.freq_sdhc / 2;
|
||||
#else
|
||||
#if defined(CONFIG_ARCH_MPC8569) || defined(CONFIG_ARCH_P1010)
|
||||
gd->arch.sdhc_clk = gd->bus_clk;
|
||||
#else
|
||||
gd->arch.sdhc_clk = gd->bus_clk / 2;
|
||||
#endif
|
||||
#endif
|
||||
#endif /* defined(CONFIG_FSL_ESDHC) */
|
||||
|
||||
#if defined(CONFIG_CPM2)
|
||||
|
@ -331,9 +331,6 @@
|
||||
#define CONFIG_SYS_FMAN_V3
|
||||
#define CONFIG_FM_PLAT_CLK_DIV 1
|
||||
#define CONFIG_SYS_FM1_CLK CONFIG_FM_PLAT_CLK_DIV
|
||||
#define CONFIG_SYS_SDHC_CLK 0/* Select SDHC CLK begining from PLL1
|
||||
per rcw field value */
|
||||
#define CONFIG_SYS_SDHC_CLK_2_PLL /* Select SDHC CLK from 2 PLLs */
|
||||
#define CONFIG_SYS_FM_MURAM_SIZE 0x30000
|
||||
#define CONFIG_SYS_FSL_SINGLE_SOURCE_CLK
|
||||
#define CONFIG_SYS_FSL_TBCLK_DIV 16
|
||||
@ -362,8 +359,6 @@
|
||||
#define CONFIG_USB_MAX_CONTROLLER_COUNT 2
|
||||
#define CONFIG_SYS_FSL_IFC_BANK_COUNT 8
|
||||
#define CONFIG_SYS_FM1_CLK 0
|
||||
#define CONFIG_SYS_SDHC_CLK 0/* Select SDHC CLK begining from PLL1
|
||||
per rcw field value */
|
||||
#define CONFIG_QBMAN_CLK_DIV 1
|
||||
#define CONFIG_SYS_FM_MURAM_SIZE 0x30000
|
||||
#define CONFIG_SYS_FSL_SINGLE_SOURCE_CLK
|
||||
@ -402,9 +397,6 @@
|
||||
#define CONFIG_PME_PLAT_CLK_DIV 1
|
||||
#define CONFIG_SYS_PME_CLK CONFIG_PME_PLAT_CLK_DIV
|
||||
#define CONFIG_SYS_FM1_CLK 0
|
||||
#define CONFIG_SYS_SDHC_CLK 1/* Select SDHC CLK begining from PLL2
|
||||
per rcw field value */
|
||||
#define CONFIG_SYS_SDHC_CLK_2_PLL /* Select SDHC CLK from 2 PLLs */
|
||||
#define CONFIG_SYS_FSL_IFC_BANK_COUNT 8
|
||||
#define CONFIG_SYS_FMAN_V3
|
||||
#define CONFIG_SYS_FM_MURAM_SIZE 0x28000
|
||||
|
@ -14,6 +14,7 @@
|
||||
struct arch_global_data {
|
||||
#if defined(CONFIG_FSL_ESDHC)
|
||||
u32 sdhc_clk;
|
||||
u32 sdhc_per_clk;
|
||||
#if defined(CONFIG_FSL_ESDHC_ADAPTER_IDENT)
|
||||
u8 sdhc_adapter;
|
||||
#endif
|
||||
|
@ -4,7 +4,6 @@ CONFIG_TFABOOT=y
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x6000
|
||||
CONFIG_NXP_ESBC=y
|
||||
CONFIG_FSPI_AHB_EN_4BYTE=y
|
||||
CONFIG_SYS_FSL_SDHC_CLK_DIV=1
|
||||
CONFIG_ENV_SIZE=0x2000
|
||||
CONFIG_NR_DRAM_BANKS=2
|
||||
CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT=y
|
||||
|
@ -3,7 +3,6 @@ CONFIG_TARGET_LS1028AQDS=y
|
||||
CONFIG_TFABOOT=y
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x6000
|
||||
CONFIG_FSPI_AHB_EN_4BYTE=y
|
||||
CONFIG_SYS_FSL_SDHC_CLK_DIV=1
|
||||
CONFIG_ENV_SIZE=0x2000
|
||||
CONFIG_ENV_OFFSET=0x500000
|
||||
CONFIG_NR_DRAM_BANKS=2
|
||||
|
@ -4,7 +4,6 @@ CONFIG_TFABOOT=y
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x6000
|
||||
CONFIG_NXP_ESBC=y
|
||||
CONFIG_FSPI_AHB_EN_4BYTE=y
|
||||
CONFIG_SYS_FSL_SDHC_CLK_DIV=1
|
||||
CONFIG_ENV_SIZE=0x2000
|
||||
CONFIG_NR_DRAM_BANKS=2
|
||||
CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT=y
|
||||
|
@ -3,7 +3,6 @@ CONFIG_TARGET_LS1028ARDB=y
|
||||
CONFIG_TFABOOT=y
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x6000
|
||||
CONFIG_FSPI_AHB_EN_4BYTE=y
|
||||
CONFIG_SYS_FSL_SDHC_CLK_DIV=1
|
||||
CONFIG_ENV_SIZE=0x2000
|
||||
CONFIG_ENV_OFFSET=0x500000
|
||||
CONFIG_NR_DRAM_BANKS=2
|
||||
|
@ -79,7 +79,7 @@ config MMC_QUIRKS
|
||||
help
|
||||
Some cards and hosts may sometimes behave unexpectedly (quirks).
|
||||
This option enable workarounds to handle those quirks. Some of them
|
||||
are enabled by default, other may require additionnal flags or are
|
||||
are enabled by default, other may require additional flags or are
|
||||
enabled by the host driver.
|
||||
|
||||
config MMC_HW_PARTITIONING
|
||||
@ -711,19 +711,10 @@ endif
|
||||
|
||||
config FSL_ESDHC
|
||||
bool "Freescale/NXP eSDHC controller support"
|
||||
select FSL_ESDHC_USE_PERIPHERAL_CLK if MMC_HS200_SUPPORT || MMC_UHS_SUPPORT
|
||||
help
|
||||
This selects support for the eSDHC (Enhanced Secure Digital Host
|
||||
Controller) found on numerous Freescale/NXP SoCs.
|
||||
|
||||
config FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
bool "enable ESDHC peripheral clock support"
|
||||
depends on FSL_ESDHC
|
||||
help
|
||||
eSDHC supports two reference clocks (platform clock and peripheral clock).
|
||||
Peripheral clock which could provide higher clock frequency is required to
|
||||
be used for tuning of SD UHS mode and eMMC HS200/HS400 modes.
|
||||
|
||||
config FSL_ESDHC_IMX
|
||||
bool "Freescale/NXP i.MX eSDHC controller support"
|
||||
help
|
||||
|
@ -81,6 +81,7 @@ struct fsl_esdhc_plat {
|
||||
struct fsl_esdhc_priv {
|
||||
struct fsl_esdhc *esdhc_regs;
|
||||
unsigned int sdhc_clk;
|
||||
bool is_sdhc_per_clk;
|
||||
unsigned int clock;
|
||||
#if !CONFIG_IS_ENABLED(DM_MMC)
|
||||
struct mmc *mmc;
|
||||
@ -523,7 +524,6 @@ static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock)
|
||||
esdhc_setbits32(®s->sysctl, SYSCTL_PEREN | SYSCTL_CKEN);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
static void esdhc_clock_control(struct fsl_esdhc_priv *priv, bool enable)
|
||||
{
|
||||
struct fsl_esdhc *regs = priv->esdhc_regs;
|
||||
@ -550,18 +550,18 @@ static void esdhc_clock_control(struct fsl_esdhc_priv *priv, bool enable)
|
||||
mdelay(1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static int esdhc_set_ios_common(struct fsl_esdhc_priv *priv, struct mmc *mmc)
|
||||
{
|
||||
struct fsl_esdhc *regs = priv->esdhc_regs;
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
/* Select to use peripheral clock */
|
||||
esdhc_clock_control(priv, false);
|
||||
esdhc_setbits32(®s->esdhcctl, ESDHCCTL_PCS);
|
||||
esdhc_clock_control(priv, true);
|
||||
#endif
|
||||
if (priv->is_sdhc_per_clk) {
|
||||
/* Select to use peripheral clock */
|
||||
esdhc_clock_control(priv, false);
|
||||
esdhc_setbits32(®s->esdhcctl, ESDHCCTL_PCS);
|
||||
esdhc_clock_control(priv, true);
|
||||
}
|
||||
|
||||
/* Set the clock speed */
|
||||
if (priv->clock != mmc->clock)
|
||||
set_sysctl(priv, mmc, mmc->clock);
|
||||
@ -716,17 +716,8 @@ void fdt_fixup_esdhc(void *blob, bd_t *bd)
|
||||
if (esdhc_status_fixup(blob, compat))
|
||||
return;
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
do_fixup_by_compat_u32(blob, compat, "peripheral-frequency",
|
||||
gd->arch.sdhc_clk, 1);
|
||||
#else
|
||||
do_fixup_by_compat_u32(blob, compat, "clock-frequency",
|
||||
gd->arch.sdhc_clk, 1);
|
||||
#endif
|
||||
#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
|
||||
do_fixup_by_compat_u32(blob, compat, "adapter-type",
|
||||
(u32)(gd->arch.sdhc_adapter), 1);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -788,6 +779,8 @@ int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg)
|
||||
|
||||
priv->esdhc_regs = (struct fsl_esdhc *)(unsigned long)(cfg->esdhc_base);
|
||||
priv->sdhc_clk = cfg->sdhc_clk;
|
||||
if (gd->arch.sdhc_per_clk)
|
||||
priv->is_sdhc_per_clk = true;
|
||||
|
||||
mmc_cfg = &plat->cfg;
|
||||
|
||||
@ -826,7 +819,11 @@ int fsl_esdhc_mmc_init(bd_t *bis)
|
||||
|
||||
cfg = calloc(sizeof(struct fsl_esdhc_cfg), 1);
|
||||
cfg->esdhc_base = CONFIG_SYS_FSL_ESDHC_ADDR;
|
||||
cfg->sdhc_clk = gd->arch.sdhc_clk;
|
||||
/* Prefer peripheral clock which provides higher frequency. */
|
||||
if (gd->arch.sdhc_per_clk)
|
||||
cfg->sdhc_clk = gd->arch.sdhc_per_clk;
|
||||
else
|
||||
cfg->sdhc_clk = gd->arch.sdhc_clk;
|
||||
return fsl_esdhc_initialize(bis, cfg);
|
||||
}
|
||||
#else /* DM_MMC */
|
||||
@ -848,7 +845,13 @@ static int fsl_esdhc_probe(struct udevice *dev)
|
||||
#endif
|
||||
priv->dev = dev;
|
||||
|
||||
priv->sdhc_clk = gd->arch.sdhc_clk;
|
||||
if (gd->arch.sdhc_per_clk) {
|
||||
priv->sdhc_clk = gd->arch.sdhc_per_clk;
|
||||
priv->is_sdhc_per_clk = true;
|
||||
} else {
|
||||
priv->sdhc_clk = gd->arch.sdhc_clk;
|
||||
}
|
||||
|
||||
if (priv->sdhc_clk <= 0) {
|
||||
dev_err(dev, "Unable to get clk for %s\n", dev->name);
|
||||
return -EINVAL;
|
||||
|
@ -661,35 +661,6 @@ static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock)
|
||||
priv->clock = clock;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
static void esdhc_clock_control(struct fsl_esdhc_priv *priv, bool enable)
|
||||
{
|
||||
struct fsl_esdhc *regs = priv->esdhc_regs;
|
||||
u32 value;
|
||||
u32 time_out;
|
||||
|
||||
value = esdhc_read32(®s->sysctl);
|
||||
|
||||
if (enable)
|
||||
value |= SYSCTL_CKEN;
|
||||
else
|
||||
value &= ~SYSCTL_CKEN;
|
||||
|
||||
esdhc_write32(®s->sysctl, value);
|
||||
|
||||
time_out = 20;
|
||||
value = PRSSTAT_SDSTB;
|
||||
while (!(esdhc_read32(®s->prsstat) & value)) {
|
||||
if (time_out == 0) {
|
||||
printf("fsl_esdhc: Internal clock never stabilised.\n");
|
||||
break;
|
||||
}
|
||||
time_out--;
|
||||
mdelay(1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MMC_SUPPORTS_TUNING
|
||||
static int esdhc_change_pinstate(struct udevice *dev)
|
||||
{
|
||||
@ -961,12 +932,6 @@ static int esdhc_set_ios_common(struct fsl_esdhc_priv *priv, struct mmc *mmc)
|
||||
int ret __maybe_unused;
|
||||
u32 clock;
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
/* Select to use peripheral clock */
|
||||
esdhc_clock_control(priv, false);
|
||||
esdhc_setbits32(®s->scr, ESDHCCTL_PCS);
|
||||
esdhc_clock_control(priv, true);
|
||||
#endif
|
||||
/* Set the clock speed */
|
||||
clock = mmc->clock;
|
||||
if (clock < mmc->cfg->f_min)
|
||||
@ -1394,13 +1359,8 @@ void fdt_fixup_esdhc(void *blob, bd_t *bd)
|
||||
if (esdhc_status_fixup(blob, compat))
|
||||
return;
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
do_fixup_by_compat_u32(blob, compat, "peripheral-frequency",
|
||||
gd->arch.sdhc_clk, 1);
|
||||
#else
|
||||
do_fixup_by_compat_u32(blob, compat, "clock-frequency",
|
||||
gd->arch.sdhc_clk, 1);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1444,6 +1444,20 @@ static int sd_read_ssr(struct mmc *mmc)
|
||||
cmd.cmdarg = mmc->rca << 16;
|
||||
|
||||
err = mmc_send_cmd(mmc, &cmd, NULL);
|
||||
#ifdef CONFIG_MMC_QUIRKS
|
||||
if (err && (mmc->quirks & MMC_QUIRK_RETRY_APP_CMD)) {
|
||||
int retries = 4;
|
||||
/*
|
||||
* It has been seen that APP_CMD may fail on the first
|
||||
* attempt, let's try a few more times
|
||||
*/
|
||||
do {
|
||||
err = mmc_send_cmd(mmc, &cmd, NULL);
|
||||
if (!err)
|
||||
break;
|
||||
} while (retries--);
|
||||
}
|
||||
#endif
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@ -2755,7 +2769,8 @@ int mmc_get_op_cond(struct mmc *mmc)
|
||||
|
||||
#ifdef CONFIG_MMC_QUIRKS
|
||||
mmc->quirks = MMC_QUIRK_RETRY_SET_BLOCKLEN |
|
||||
MMC_QUIRK_RETRY_SEND_CID;
|
||||
MMC_QUIRK_RETRY_SEND_CID |
|
||||
MMC_QUIRK_RETRY_APP_CMD;
|
||||
#endif
|
||||
|
||||
err = mmc_power_cycle(mmc);
|
||||
|
@ -481,7 +481,6 @@ unsigned long get_board_ddr_clk(void);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MMC
|
||||
#define CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
#define CONFIG_SYS_FSL_ESDHC_ADDR CONFIG_SYS_MPC85xx_ESDHC_ADDR
|
||||
#define CONFIG_FSL_ESDHC_ADAPTER_IDENT
|
||||
#endif
|
||||
|
@ -630,7 +630,6 @@ unsigned long get_board_ddr_clk(void);
|
||||
* SDHC
|
||||
*/
|
||||
#ifdef CONFIG_MMC
|
||||
#define CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
#define CONFIG_SYS_FSL_ESDHC_ADDR CONFIG_SYS_MPC85xx_ESDHC_ADDR
|
||||
#define CONFIG_SYS_FSL_ESDHC_BROKEN_TIMEOUT
|
||||
#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
|
||||
|
@ -18,7 +18,6 @@ typedef struct
|
||||
unsigned long freq_ddrbus;
|
||||
unsigned long freq_localbus;
|
||||
unsigned long freq_qe;
|
||||
unsigned long freq_sdhc;
|
||||
#ifdef CONFIG_SYS_DPAA_FMAN
|
||||
unsigned long freq_fman[CONFIG_SYS_NUM_FMAN];
|
||||
#endif
|
||||
|
@ -331,6 +331,7 @@ static inline bool mmc_is_tuning_cmd(uint cmdidx)
|
||||
|
||||
#define MMC_QUIRK_RETRY_SEND_CID BIT(0)
|
||||
#define MMC_QUIRK_RETRY_SET_BLOCKLEN BIT(1)
|
||||
#define MMC_QUIRK_RETRY_APP_CMD BIT(2)
|
||||
|
||||
enum mmc_voltage {
|
||||
MMC_SIGNAL_VOLTAGE_000 = 0,
|
||||
|
@ -3777,8 +3777,6 @@ CONFIG_SYS_SCRATCH_VA
|
||||
CONFIG_SYS_SCSI_MAX_DEVICE
|
||||
CONFIG_SYS_SCSI_MAX_LUN
|
||||
CONFIG_SYS_SCSI_MAX_SCSI_ID
|
||||
CONFIG_SYS_SDHC_CLK
|
||||
CONFIG_SYS_SDHC_CLK_2_PLL
|
||||
CONFIG_SYS_SDIO0
|
||||
CONFIG_SYS_SDIO0_MAX_CLK
|
||||
CONFIG_SYS_SDIO1
|
||||
|
Loading…
Reference in New Issue
Block a user