Skip to content

Commit 9a7fd2c

Browse files
HSD#16026967164: arm64: dts: socfpga: Enable SDR104, and tune SDHCI6 timing for Agilex5
These changes improve SD card performance and compatibility across Agilex5 boards. - Enable UHS SDR104 mode for SD cards in the Agilex5 SoCFPGA device tree. - Adjust sdhci-caps-mask to mask out DDR50 while allowing SDR104 and SDR50. - Update SDHCI Cadence V6 driver timing parameters for SDR104 mode to improve reliability and compatibility. - Add DLL reset toggling during tuning value programming for better PHY initialization. Signed-off-by: Tanmay Kathpalia <tanmay.kathpalia@altera.com>
1 parent 954bd7f commit 9a7fd2c

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

arch/arm64/boot/dts/intel/socfpga_agilex5_socdk.dts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,13 @@
119119
no-mmc;
120120
disable-wp;
121121
sd-uhs-sdr50;
122+
sd-uhs-sdr104;
122123
cap-sd-highspeed;
123124
vmmc-supply = <&sd_emmc_power>;
124125
vqmmc-supply = <&sd_io_1v8_reg>;
125126
max-frequency = <200000000>;
126127
sdhci-caps = <0x00000000 0x0000c800>;
127-
sdhci-caps-mask = <0x00002006 0x0000ff00>;
128+
sdhci-caps-mask = <0x00002004 0x0000ff00>;
128129
};
129130

130131
&osc1 {

drivers/mmc/host/sdhci-cadence6.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ static const struct sdhci_cdns6_ctrl_cfg reg_cfg[REG_CFG_MAX][MAX_TIMING_MODES]
9393
{ "cdns,ctrl-hrs07-timing-delay-sd-sdr12", 0x000A0001 }, // SD UHS1 SDR12
9494
{ "cdns,ctrl-hrs07-timing-delay-sd-sdr25", 0x000A0001 }, // SD UHS1 SDR25
9595
{ "cdns,ctrl-hrs07-timing-delay-sd-sdr50", 0x00090005 }, // SD UHS1 SDR50
96-
{ "cdns,ctrl-hrs07-timing-delay-sd-sdr104", 0x00090005 }, // SD UHS1 SDR104
96+
{ "cdns,ctrl-hrs07-timing-delay-sd-sdr104", 0x000a0001 }, // SD UHS1 SDR104
9797
{ "cdns,ctrl-hrs07-timing-delay-sd-ddr50", 0x00090001 }, // SD UHS1 DDR50
9898
{ "cdns,ctrl-hrs07-timing-delay-mmc-ddr52", 0x00090001 }, // MMC DDR52
9999
{ "cdns,ctrl-hrs07-timing-delay-mmc-hs200", 0x00090000 }, // MMC HS200
@@ -108,7 +108,7 @@ static const struct sdhci_cdns6_ctrl_cfg reg_cfg[REG_CFG_MAX][MAX_TIMING_MODES]
108108
{ "cdns,ctrl-hrs09-timing-delay-sd-sdr12", 0x0001800C },
109109
{ "cdns,ctrl-hrs09-timing-delay-sd-sdr25", 0x0001800C },
110110
{ "cdns,ctrl-hrs09-timing-delay-sd-sdr50", 0xf1c1800c },
111-
{ "cdns,ctrl-hrs09-timing-delay-sd-sdr104", 0xf1c1800c },
111+
{ "cdns,ctrl-hrs09-timing-delay-sd-sdr104", 0xf1c18000 },
112112
{ "cdns,ctrl-hrs09-timing-delay-sd-ddr50", 0x0001800C },
113113
{ "cdns,ctrl-hrs09-timing-delay-mmc-ddr52", 0x0001800C },
114114
{ "cdns,ctrl-hrs09-timing-delay-mmc-hs200", 0xf1c18000 },
@@ -123,7 +123,7 @@ static const struct sdhci_cdns6_ctrl_cfg reg_cfg[REG_CFG_MAX][MAX_TIMING_MODES]
123123
{ "cdns,ctrl-hrs10-timing-delay-sd-sdr12", 0x00030000 },
124124
{ "cdns,ctrl-hrs10-timing-delay-sd-sdr25", 0x00030000 },
125125
{ "cdns,ctrl-hrs10-timing-delay-sd-sdr50", 0x00020000 },
126-
{ "cdns,ctrl-hrs10-timing-delay-sd-sdr104", 0x00020000 },
126+
{ "cdns,ctrl-hrs10-timing-delay-sd-sdr104", 0x00090000 },
127127
{ "cdns,ctrl-hrs10-timing-delay-sd-ddr50", 0x00020000 },
128128
{ "cdns,ctrl-hrs10-timing-delay-mmc-ddr52", 0x00020000 },
129129
{ "cdns,ctrl-hrs10-timing-delay-mmc-hs200", 0x00080000 },
@@ -168,7 +168,7 @@ static const struct sdhci_cdns6_ctrl_cfg reg_cfg[REG_CFG_MAX][MAX_TIMING_MODES]
168168
{ "cdns,phy-gate-lpbk_ctrl-delay-sd-sdr12", 0x81a40040 },
169169
{ "cdns,phy-gate-lpbk_ctrl-delay-sd-sdr25", 0x81a40040 },
170170
{ "cdns,phy-gate-lpbk_ctrl-delay-sd-sdr50", 0x80a40040 },
171-
{ "cdns,phy-gate-lpbk_ctrl-delay-sd-sdr104", 0x80a40040 },
171+
{ "cdns,phy-gate-lpbk_ctrl-delay-sd-sdr104", 0x81a40040 },
172172
{ "cdns,phy-gate-lpbk_ctrl-delay-sd-ddr50", 0x80a40040 },
173173
{ "cdns,phy-gate-lpbk_ctrl-delay-mmc-ddr52", 0x81a40040 },
174174
{ "cdns,phy-gate-lpbk_ctrl-delay-mmc-hs200", 0x81a40040 },
@@ -183,7 +183,7 @@ static const struct sdhci_cdns6_ctrl_cfg reg_cfg[REG_CFG_MAX][MAX_TIMING_MODES]
183183
{ "cdns,phy-dll-master-ctrl-sd-sdr12", 0x00800004 },
184184
{ "cdns,phy-dll-master-ctrl-sd-sdr25", 0x00800004 },
185185
{ "cdns,phy-dll-master-ctrl-sd-sdr50", 0x00800004 },
186-
{ "cdns,phy-dll-master-ctrl-sd-sdr104", 0x00204d00 },
186+
{ "cdns,phy-dll-master-ctrl-sd-sdr104", 0x00000004 },
187187
{ "cdns,phy-dll-master-ctrl-sd-ddr50", 0x00800000 },
188188
{ "cdns,phy-dll-master-ctrl-mmc-ddr52", 0x00800000 },
189189
{ "cdns,phy-dll-master-ctrl-mmc-hs200", 0x00204d00 },
@@ -198,7 +198,7 @@ static const struct sdhci_cdns6_ctrl_cfg reg_cfg[REG_CFG_MAX][MAX_TIMING_MODES]
198198
{ "cdns,phy-dll-slave-ctrl-sd-sdr12", 0x00000000 },
199199
{ "cdns,phy-dll-slave-ctrl-sd-sdr25", 0x00000000 },
200200
{ "cdns,phy-dll-slave-ctrl-sd-sdr50", 0x04000004 },
201-
{ "cdns,phy-dll-slave-ctrl-sd-sdr104", 0x04000004 },
201+
{ "cdns,phy-dll-slave-ctrl-sd-sdr104", 0x004d4d00 },
202202
{ "cdns,phy-dll-slave-ctrl-sd-ddr50", 0x00000000 },
203203
{ "cdns,phy-dll-slave-ctrl-mmc-ddr52", 0x00000000 },
204204
{ "cdns,phy-dll-slave-ctrl-mmc-hs200", 0x004dc600 },
@@ -213,7 +213,7 @@ static const struct sdhci_cdns6_ctrl_cfg reg_cfg[REG_CFG_MAX][MAX_TIMING_MODES]
213213
{ "cdns,phy-dq-timing-delay-sd-sdr12", 0x28000001 },
214214
{ "cdns,phy-dq-timing-delay-sd-sdr25", 0x10000001 },
215215
{ "cdns,phy-dq-timing-delay-sd-sdr50", 0x38000001 },
216-
{ "cdns,phy-dq-timing-delay-sd-sdr104", 0x38000001 },
216+
{ "cdns,phy-dq-timing-delay-sd-sdr104", 0x11000001 },
217217
{ "cdns,phy-dq-timing-delay-sd-ddr50", 0x38000001 },
218218
{ "cdns,phy-dq-timing-delay-mmc-ddr52", 0x10000001 },
219219
{ "cdns,phy-dq-timing-delay-mmc-hs200", 0x00000001 },
@@ -378,8 +378,15 @@ int sdhci_cdns6_set_tune_val(struct sdhci_host *host, unsigned int val)
378378
PHY_DLL_SLAVE_CTRL_REG_READ_DQS_DELAY);
379379
tmp |= FIELD_PREP(PHY_DLL_SLAVE_CTRL_REG_READ_DQS_CMD_DELAY, tuneval) |
380380
FIELD_PREP(PHY_DLL_SLAVE_CTRL_REG_READ_DQS_DELAY, tuneval);
381+
382+
/* Switch On the DLL Reset */
383+
sdhci_cdns6_reset_phy_dll(host, true);
384+
381385
sdhci_cdns6_write_phy_reg(priv, PHY_DLL_SLAVE_CTRL_REG_ADDR, tmp);
382386

387+
/* Switch Off the DLL Reset */
388+
sdhci_cdns6_reset_phy_dll(host, false);
389+
383390
return 0;
384391
}
385392

0 commit comments

Comments
 (0)