|
48 | 48 | #define DWCMSHC_EMMC_DLL_RXCLK_SRCSEL 29 |
49 | 49 | #define DWCMSHC_EMMC_DLL_START_POINT 16 |
50 | 50 | #define DWCMSHC_EMMC_DLL_INC 8 |
| 51 | +#define DWCMSHC_EMMC_DLL_BYPASS BIT(24) |
51 | 52 | #define DWCMSHC_EMMC_DLL_DLYENA BIT(27) |
52 | 53 | #define DLL_TXCLK_TAPNUM_DEFAULT 0x10 |
53 | 54 | #define DLL_TXCLK_TAPNUM_90_DEGREES 0xA |
|
60 | 61 | #define DLL_RXCLK_NO_INVERTER 1 |
61 | 62 | #define DLL_RXCLK_INVERTER 0 |
62 | 63 | #define DLL_CMDOUT_TAPNUM_90_DEGREES 0x8 |
| 64 | +#define DLL_RXCLK_ORI_GATE BIT(31) |
63 | 65 | #define DLL_CMDOUT_TAPNUM_FROM_SW BIT(24) |
64 | 66 | #define DLL_CMDOUT_SRC_CLK_NEG BIT(28) |
65 | 67 | #define DLL_CMDOUT_EN_SRC_CLK_NEG BIT(29) |
@@ -234,9 +236,12 @@ static void dwcmshc_rk3568_set_clock(struct sdhci_host *host, unsigned int clock |
234 | 236 | sdhci_writel(host, extra, reg); |
235 | 237 |
|
236 | 238 | if (clock <= 52000000) { |
237 | | - /* Disable DLL and reset both of sample and drive clock */ |
238 | | - sdhci_writel(host, 0, DWCMSHC_EMMC_DLL_CTRL); |
239 | | - sdhci_writel(host, 0, DWCMSHC_EMMC_DLL_RXCLK); |
| 239 | + /* |
| 240 | + * Disable DLL and reset both of sample and drive clock. |
| 241 | + * The bypass bit and start bit need to be set if DLL is not locked. |
| 242 | + */ |
| 243 | + sdhci_writel(host, DWCMSHC_EMMC_DLL_BYPASS | DWCMSHC_EMMC_DLL_START, DWCMSHC_EMMC_DLL_CTRL); |
| 244 | + sdhci_writel(host, DLL_RXCLK_ORI_GATE, DWCMSHC_EMMC_DLL_RXCLK); |
240 | 245 | sdhci_writel(host, 0, DWCMSHC_EMMC_DLL_TXCLK); |
241 | 246 | sdhci_writel(host, 0, DECMSHC_EMMC_DLL_CMDOUT); |
242 | 247 | /* |
@@ -279,7 +284,7 @@ static void dwcmshc_rk3568_set_clock(struct sdhci_host *host, unsigned int clock |
279 | 284 | } |
280 | 285 |
|
281 | 286 | extra = 0x1 << 16 | /* tune clock stop en */ |
282 | | - 0x2 << 17 | /* pre-change delay */ |
| 287 | + 0x3 << 17 | /* pre-change delay */ |
283 | 288 | 0x3 << 19; /* post-change delay */ |
284 | 289 | sdhci_writel(host, extra, dwc_priv->vendor_specific_area1 + DWCMSHC_EMMC_ATCTRL); |
285 | 290 |
|
|
0 commit comments