]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mmc: dw_mmc-pltfm: Use phase_map for SoCFPGA clock phase configuration
authorShawn Lin <shawn.lin@rock-chips.com>
Tue, 17 Mar 2026 02:14:52 +0000 (10:14 +0800)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 23 Mar 2026 14:51:23 +0000 (15:51 +0100)
This change aligns the SoCFPGA driver with the current dw_mmc core,
which now manages clock phases through host->phase_map. The phase values
are still scaled by SOCFPGA_DW_MMC_CLK_PHASE_STEP before being written
to the system manager registers.

No functional changes intended.

Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/dw_mmc-pltfm.c

index 68770aaff8d999e77fcea972d433f17fb8f1a1a1..cf38bb118dc2cd0afa2f971518c7a61e64aa68d3 100644 (file)
@@ -59,12 +59,13 @@ EXPORT_SYMBOL_GPL(dw_mci_pltfm_register);
 static int dw_mci_socfpga_priv_init(struct dw_mci *host)
 {
        struct device_node *np = host->dev->of_node;
+       struct mmc_clk_phase phase;
        struct regmap *sys_mgr_base_addr;
-       u32 clk_phase[2] = {0}, reg_offset, reg_shift;
-       int i, rc, hs_timing;
+       u32 reg_offset, reg_shift;
+       int hs_timing;
 
-       rc = of_property_read_variable_u32_array(np, "clk-phase-sd-hs", &clk_phase[0], 2, 0);
-       if (rc < 0)
+       phase = host->phase_map.phase[MMC_TIMING_SD_HS];
+       if (!phase.valid)
                return 0;
 
        sys_mgr_base_addr = altr_sysmgr_regmap_lookup_by_phandle(np, "altr,sysmgr-syscon");
@@ -76,10 +77,10 @@ static int dw_mci_socfpga_priv_init(struct dw_mci *host)
        of_property_read_u32_index(np, "altr,sysmgr-syscon", 1, &reg_offset);
        of_property_read_u32_index(np, "altr,sysmgr-syscon", 2, &reg_shift);
 
-       for (i = 0; i < ARRAY_SIZE(clk_phase); i++)
-               clk_phase[i] /= SOCFPGA_DW_MMC_CLK_PHASE_STEP;
+       phase.in_deg /= SOCFPGA_DW_MMC_CLK_PHASE_STEP;
+       phase.out_deg /= SOCFPGA_DW_MMC_CLK_PHASE_STEP;
 
-       hs_timing = SYSMGR_SDMMC_CTRL_SET(clk_phase[0], clk_phase[1], reg_shift);
+       hs_timing = SYSMGR_SDMMC_CTRL_SET(phase.in_deg, phase.out_deg, reg_shift);
        regmap_write(sys_mgr_base_addr, reg_offset, hs_timing);
 
        return 0;