]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
mmc: arm_pl180_mmci: Add configuration for ST-Ericsson Ux500v2
authorStephan Gerhold <stephan@gerhold.net>
Tue, 6 Jul 2021 14:54:36 +0000 (16:54 +0200)
committerPeng Fan <peng.fan@nxp.com>
Fri, 30 Jul 2021 09:13:03 +0000 (17:13 +0800)
For the eMMC on ST-Ericsson Ux500v2 we need slightly different
configuration values. Use the existing switch statement to match
the peripheral ID of Ux500v2 (0x10480180) and override the necessary
values to make the eMMC work on devices with ST-Ericsson Ux500.

Cc: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
Tested-by: Patrice Chotard <patrice.chotard@foss.st.com> on stm32f769-disco
Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>
drivers/mmc/arm_pl180_mmci.c
drivers/mmc/arm_pl180_mmci.h

index 809b86570af85e254530f1dd79c608707a1c5db8..f99b5f997e26e16d9bc81b1eb2c4106f2f7b08dc 100644 (file)
@@ -443,22 +443,30 @@ static int arm_pl180_mmc_probe(struct udevice *dev)
                            SDI_CLKCR_HWFC_EN;
        host->clock_in = clk_get_rate(&clk);
 
+       cfg->name = dev->name;
+       cfg->voltages = VOLTAGE_WINDOW_SD;
+       cfg->host_caps = 0;
+       cfg->f_min = host->clock_in / (2 * (SDI_CLKCR_CLKDIV_INIT_V1 + 1));
+       cfg->f_max = MMC_CLOCK_MAX;
+       cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
+
        periphid = dev_read_u32_default(dev, "arm,primecell-periphid", 0);
        switch (periphid) {
        case STM32_MMCI_ID: /* stm32 variant */
                host->version2 = false;
                break;
+       case UX500V2_MMCI_ID:
+               host->pwr_init = SDI_PWR_OPD | SDI_PWR_PWRCTRL_ON;
+               host->clkdiv_init = SDI_CLKCR_CLKDIV_INIT_V2 | SDI_CLKCR_CLKEN |
+                                   SDI_CLKCR_HWFC_EN;
+               cfg->voltages = VOLTAGE_WINDOW_MMC;
+               cfg->f_min = host->clock_in / (2 + SDI_CLKCR_CLKDIV_INIT_V2);
+               host->version2 = true;
+               break;
        default:
                host->version2 = true;
        }
 
-       cfg->name = dev->name;
-       cfg->voltages = VOLTAGE_WINDOW_SD;
-       cfg->host_caps = 0;
-       cfg->f_min = host->clock_in / (2 * (SDI_CLKCR_CLKDIV_INIT_V1 + 1));
-       cfg->f_max = MMC_CLOCK_MAX;
-       cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
-
        gpio_request_by_name(dev, "cd-gpios", 0, &host->cd_gpio, GPIOD_IS_IN);
 
        ret = mmc_of_parse(dev, cfg);
index 61ee96a112d9daf84145eb30d522f1f6a09a61c7..15c29beadbca327c677e3e94f41c8481f2ff2d23 100644 (file)
 #define SDI_FIFO_BURST_SIZE    8
 
 #define STM32_MMCI_ID          0x00880180
+#define UX500V2_MMCI_ID                0x10480180
 
 struct sdi_registers {
        u32 power;              /* 0x00*/