[PATCH v2 10/17] mmc: rockchip_sdhci: Rearrange and simplify used regs and flags
Kever Yang
kever.yang at rock-chips.com
Thu Apr 20 12:01:23 CEST 2023
On 2023/4/19 00:46, Jonas Karlman wrote:
> This rearrange and remove duplicate defines to make the code cleaner.
>
> There is no need to read vendor area1 and use an offset each time, it is
> easier and clearer to just use the reg offset defined in TRM, same as
> the other vendor regs.
>
> This also removes use of the misspelled const for the RK3588 CMDOUT reg,
> it will be re-added when support for RK3588 is introduced.
>
> Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>
Thanks,
- Kever
> ---
> v2:
> - No change
>
> drivers/mmc/rockchip_sdhci.c | 40 ++++++++++++------------------------
> 1 file changed, 13 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/mmc/rockchip_sdhci.c b/drivers/mmc/rockchip_sdhci.c
> index 9716fbb54dd4..bcf65e091741 100644
> --- a/drivers/mmc/rockchip_sdhci.c
> +++ b/drivers/mmc/rockchip_sdhci.c
> @@ -47,46 +47,36 @@
> #define ARASAN_VENDOR_REGISTER 0x78
> #define ARASAN_VENDOR_ENHANCED_STROBE BIT(0)
>
> -/* DWC IP vendor area 1 pointer */
> -#define DWCMSHC_P_VENDOR_AREA1 0xe8
> -#define DWCMSHC_AREA1_MASK GENMASK(11, 0)
> -/* Offset inside the vendor area 1 */
> -#define DWCMSHC_EMMC_CONTROL 0x2c
> +/* Rockchip specific Registers */
> +#define DWCMSHC_EMMC_EMMC_CTRL 0x52c
> #define DWCMSHC_CARD_IS_EMMC BIT(0)
> #define DWCMSHC_ENHANCED_STROBE BIT(8)
> -
> -/* Rockchip specific Registers */
> #define DWCMSHC_EMMC_DLL_CTRL 0x800
> #define DWCMSHC_EMMC_DLL_CTRL_RESET BIT(1)
> #define DWCMSHC_EMMC_DLL_RXCLK 0x804
> #define DWCMSHC_EMMC_DLL_TXCLK 0x808
> #define DWCMSHC_EMMC_DLL_STRBIN 0x80c
> -#define DECMSHC_EMMC_DLL_CMDOUT 0x810
> #define DWCMSHC_EMMC_DLL_STATUS0 0x840
> #define DWCMSHC_EMMC_DLL_STATUS1 0x844
> #define DWCMSHC_EMMC_DLL_START BIT(0)
> -#define DWCMSHC_EMMC_DLL_RXCLK_SRCSEL 29
> +#define DWCMSHC_EMMC_DLL_LOCKED BIT(8)
> +#define DWCMSHC_EMMC_DLL_TIMEOUT BIT(9)
> #define DWCMSHC_EMMC_DLL_START_POINT 16
> #define DWCMSHC_EMMC_DLL_START_DEFAULT 5
> #define DWCMSHC_EMMC_DLL_INC_VALUE 2
> #define DWCMSHC_EMMC_DLL_INC 8
> #define DWCMSHC_EMMC_DLL_BYPASS BIT(24)
> #define DWCMSHC_EMMC_DLL_DLYENA BIT(27)
> +#define DLL_RXCLK_NO_INVERTER BIT(29)
> +#define DLL_RXCLK_ORI_GATE BIT(31)
> #define DLL_TXCLK_TAPNUM_DEFAULT 0xA
> -
> +#define DLL_TXCLK_TAPNUM_FROM_SW BIT(24)
> #define DLL_STRBIN_TAPNUM_DEFAULT 0x8
> #define DLL_STRBIN_TAPNUM_FROM_SW BIT(24)
> #define DLL_STRBIN_DELAY_NUM_SEL BIT(26)
> #define DLL_STRBIN_DELAY_NUM_OFFSET 16
> #define DLL_STRBIN_DELAY_NUM_DEFAULT 0x16
>
> -#define DLL_TXCLK_TAPNUM_FROM_SW BIT(24)
> -#define DWCMSHC_EMMC_DLL_LOCKED BIT(8)
> -#define DWCMSHC_EMMC_DLL_TIMEOUT BIT(9)
> -#define DLL_RXCLK_NO_INVERTER 1
> -#define DLL_RXCLK_INVERTER 0
> -#define DLL_RXCLK_ORI_GATE BIT(31)
> -#define DWCMSHC_ENHANCED_STROBE BIT(8)
> #define DLL_LOCK_WO_TMOUT(x) \
> ((((x) & DWCMSHC_EMMC_DLL_LOCKED) == DWCMSHC_EMMC_DLL_LOCKED) && \
> (((x) & DWCMSHC_EMMC_DLL_TIMEOUT) == 0))
> @@ -328,8 +318,7 @@ static int rk3568_sdhci_config_dll(struct sdhci_host *host, u32 clock, bool enab
> if (ret)
> return ret;
>
> - extra = DWCMSHC_EMMC_DLL_DLYENA |
> - DLL_RXCLK_NO_INVERTER << DWCMSHC_EMMC_DLL_RXCLK_SRCSEL;
> + extra = DWCMSHC_EMMC_DLL_DLYENA | DLL_RXCLK_NO_INVERTER;
> sdhci_writel(host, extra, DWCMSHC_EMMC_DLL_RXCLK);
>
> extra = DWCMSHC_EMMC_DLL_DLYENA |
> @@ -346,10 +335,9 @@ static int rk3568_sdhci_config_dll(struct sdhci_host *host, u32 clock, bool enab
> * Disable DLL and reset both of sample and drive clock.
> * The bypass bit and start bit need to be set if DLL is not locked.
> */
> - sdhci_writel(host, DWCMSHC_EMMC_DLL_BYPASS | DWCMSHC_EMMC_DLL_START,
> - DWCMSHC_EMMC_DLL_CTRL);
> + extra = DWCMSHC_EMMC_DLL_BYPASS | DWCMSHC_EMMC_DLL_START;
> + sdhci_writel(host, extra, DWCMSHC_EMMC_DLL_CTRL);
> sdhci_writel(host, DLL_RXCLK_ORI_GATE, DWCMSHC_EMMC_DLL_RXCLK);
> - sdhci_writel(host, 0, DECMSHC_EMMC_DLL_CMDOUT);
> sdhci_writel(host, 0, DWCMSHC_EMMC_DLL_TXCLK);
> /*
> * Before switching to hs400es mode, the driver will enable
> @@ -368,7 +356,7 @@ static int rk3568_sdhci_config_dll(struct sdhci_host *host, u32 clock, bool enab
> static int rk3568_sdhci_set_ios_post(struct sdhci_host *host)
> {
> struct mmc *mmc = host->mmc;
> - u32 reg, vendor_reg;
> + u32 reg;
>
> reg = sdhci_readw(host, SDHCI_HOST_CONTROL2);
> reg &= ~SDHCI_CTRL_UHS_MASK;
> @@ -400,9 +388,7 @@ static int rk3568_sdhci_set_ios_post(struct sdhci_host *host)
>
> sdhci_writew(host, reg, SDHCI_HOST_CONTROL2);
>
> - vendor_reg = (sdhci_readl(host, DWCMSHC_P_VENDOR_AREA1) & DWCMSHC_AREA1_MASK)
> - + DWCMSHC_EMMC_CONTROL;
> - reg = sdhci_readw(host, vendor_reg);
> + reg = sdhci_readw(host, DWCMSHC_EMMC_EMMC_CTRL);
>
> if (IS_MMC(mmc))
> reg |= DWCMSHC_CARD_IS_EMMC;
> @@ -414,7 +400,7 @@ static int rk3568_sdhci_set_ios_post(struct sdhci_host *host)
> else
> reg &= ~DWCMSHC_ENHANCED_STROBE;
>
> - sdhci_writew(host, reg, vendor_reg);
> + sdhci_writew(host, reg, DWCMSHC_EMMC_EMMC_CTRL);
>
> return 0;
> }
More information about the U-Boot
mailing list