Replace separate mask and shift definitions with GENMASK and FIELD_* macros for better readability and maintainability.
All macros ending in _M have the suffix dropped. The value remains the same but is now generated with GENMASK. All macros ending in _S are removed and their uses replaced with FIELD_PREP and FIELD_GET macros. Signed-off-by: David Lechner <[email protected]> --- drivers/mmc/mtk-sd.c | 357 ++++++++++++++++++++++----------------------------- 1 file changed, 151 insertions(+), 206 deletions(-) diff --git a/drivers/mmc/mtk-sd.c b/drivers/mmc/mtk-sd.c index 2bc700b0d05..69f54a342c6 100644 --- a/drivers/mmc/mtk-sd.c +++ b/drivers/mmc/mtk-sd.c @@ -16,6 +16,7 @@ #include <asm/gpio.h> #include <dm/device_compat.h> #include <dm/pinctrl.h> +#include <linux/bitfield.h> #include <linux/bitops.h> #include <linux/io.h> #include <linux/iopoll.h> @@ -23,15 +24,11 @@ /* MSDC_CFG */ #define MSDC_CFG_HS400_CK_MODE_EXT BIT(22) -#define MSDC_CFG_CKMOD_EXT_M 0x300000 -#define MSDC_CFG_CKMOD_EXT_S 20 -#define MSDC_CFG_CKDIV_EXT_M 0xfff00 -#define MSDC_CFG_CKDIV_EXT_S 8 +#define MSDC_CFG_CKMOD_EXT GENMASK(21, 20) +#define MSDC_CFG_CKDIV_EXT GENMASK(19, 8) #define MSDC_CFG_HS400_CK_MODE BIT(18) -#define MSDC_CFG_CKMOD_M 0x30000 -#define MSDC_CFG_CKMOD_S 16 -#define MSDC_CFG_CKDIV_M 0xff00 -#define MSDC_CFG_CKDIV_S 8 +#define MSDC_CFG_CKMOD GENMASK(17, 16) +#define MSDC_CFG_CKDIV GENMASK(15, 8) #define MSDC_CFG_CKSTB BIT(7) #define MSDC_CFG_PIO BIT(3) #define MSDC_CFG_RST BIT(2) @@ -45,8 +42,7 @@ /* MSDC_PS */ #define MSDC_PS_DAT0 BIT(16) -#define MSDC_PS_CDDBCE_M 0xf000 -#define MSDC_PS_CDDBCE_S 12 +#define MSDC_PS_CDDBCE GENMASK(15, 12) #define MSDC_PS_CDSTS BIT(1) #define MSDC_PS_CDEN BIT(0) @@ -63,30 +59,22 @@ /* MSDC_FIFOCS */ #define MSDC_FIFOCS_CLR BIT(31) -#define MSDC_FIFOCS_TXCNT_M 0xff0000 -#define MSDC_FIFOCS_TXCNT_S 16 -#define MSDC_FIFOCS_RXCNT_M 0xff -#define MSDC_FIFOCS_RXCNT_S 0 +#define MSDC_FIFOCS_TXCNT GENMASK(23, 16) +#define MSDC_FIFOCS_RXCNT GENMASK(7, 0) /* #define SDC_CFG */ -#define SDC_CFG_DTOC_M 0xff000000 -#define SDC_CFG_DTOC_S 24 +#define SDC_CFG_DTOC GENMASK(31, 24) #define SDC_CFG_SDIOIDE BIT(20) #define SDC_CFG_SDIO BIT(19) -#define SDC_CFG_BUSWIDTH_M 0x30000 -#define SDC_CFG_BUSWIDTH_S 16 +#define SDC_CFG_BUSWIDTH GENMASK(17, 16) /* SDC_CMD */ -#define SDC_CMD_BLK_LEN_M 0xfff0000 -#define SDC_CMD_BLK_LEN_S 16 +#define SDC_CMD_BLK_LEN GENMASK(27, 16) #define SDC_CMD_STOP BIT(14) #define SDC_CMD_WR BIT(13) -#define SDC_CMD_DTYPE_M 0x1800 -#define SDC_CMD_DTYPE_S 11 -#define SDC_CMD_RSPTYP_M 0x380 -#define SDC_CMD_RSPTYP_S 7 -#define SDC_CMD_CMD_M 0x3f -#define SDC_CMD_CMD_S 0 +#define SDC_CMD_DTYPE GENMASK(12, 11) +#define SDC_CMD_RSPTYP GENMASK(9, 7) +#define SDC_CMD_CMD GENMASK(5, 0) /* SDC_STS */ #define SDC_STS_CMDBUSY BIT(1) @@ -96,102 +84,73 @@ #define SDC_RX_ENHANCE_EN BIT(20) /* PATCH_BIT0 */ -#define MSDC_INT_DAT_LATCH_CK_SEL_M 0x380 -#define MSDC_INT_DAT_LATCH_CK_SEL_S 7 +#define MSDC_INT_DAT_LATCH_CK_SEL GENMASK(9, 7) /* PATCH_BIT1 */ -#define MSDC_PB1_STOP_DLY_M 0xf00 -#define MSDC_PB1_STOP_DLY_S 8 +#define MSDC_PB1_STOP_DLY GENMASK(11, 8) /* PATCH_BIT2 */ -#define MSDC_PB2_CRCSTSENSEL_M 0xe0000000 -#define MSDC_PB2_CRCSTSENSEL_S 29 +#define MSDC_PB2_CRCSTSENSEL GENMASK(31, 29) #define MSDC_PB2_CFGCRCSTS BIT(28) -#define MSDC_PB2_RESPSTSENSEL_M 0x70000 -#define MSDC_PB2_RESPSTSENSEL_S 16 +#define MSDC_PB2_RESPSTSENSEL GENMASK(18, 16) #define MSDC_PB2_CFGRESP BIT(15) -#define MSDC_PB2_RESPWAIT_M 0x0c -#define MSDC_PB2_RESPWAIT_S 2 +#define MSDC_PB2_RESPWAIT GENMASK(3, 2) /* MSDC_PAD_CTRL0 */ -#define MSDC_PAD_CTRL0_CLKRDSEL_M 0xff000000 -#define MSDC_PAD_CTRL0_CLKRDSEL_S 24 +#define MSDC_PAD_CTRL0_CLKRDSEL GENMASK(31, 24) #define MSDC_PAD_CTRL0_CLKTDSEL BIT(20) #define MSDC_PAD_CTRL0_CLKIES BIT(19) #define MSDC_PAD_CTRL0_CLKSMT BIT(18) #define MSDC_PAD_CTRL0_CLKPU BIT(17) #define MSDC_PAD_CTRL0_CLKPD BIT(16) #define MSDC_PAD_CTRL0_CLKSR BIT(8) -#define MSDC_PAD_CTRL0_CLKDRVP_M 0x70 -#define MSDC_PAD_CTRL0_CLKDRVP_S 4 -#define MSDC_PAD_CTRL0_CLKDRVN_M 0x7 -#define MSDC_PAD_CTRL0_CLKDRVN_S 0 +#define MSDC_PAD_CTRL0_CLKDRVP GENMASK(6, 4) +#define MSDC_PAD_CTRL0_CLKDRVN GENMASK(2, 0) /* MSDC_PAD_CTRL1 */ -#define MSDC_PAD_CTRL1_CMDRDSEL_M 0xff000000 -#define MSDC_PAD_CTRL1_CMDRDSEL_S 24 +#define MSDC_PAD_CTRL1_CMDRDSEL GENMASK(31, 24) #define MSDC_PAD_CTRL1_CMDTDSEL BIT(20) #define MSDC_PAD_CTRL1_CMDIES BIT(19) #define MSDC_PAD_CTRL1_CMDSMT BIT(18) #define MSDC_PAD_CTRL1_CMDPU BIT(17) #define MSDC_PAD_CTRL1_CMDPD BIT(16) #define MSDC_PAD_CTRL1_CMDSR BIT(8) -#define MSDC_PAD_CTRL1_CMDDRVP_M 0x70 -#define MSDC_PAD_CTRL1_CMDDRVP_S 4 -#define MSDC_PAD_CTRL1_CMDDRVN_M 0x7 -#define MSDC_PAD_CTRL1_CMDDRVN_S 0 - +#define MSDC_PAD_CTRL1_CMDDRVP GENMASK(6, 4) +#define MSDC_PAD_CTRL1_CMDDRVN GENMASK(2, 0) /* MSDC_PAD_CTRL2 */ -#define MSDC_PAD_CTRL2_DATRDSEL_M 0xff000000 -#define MSDC_PAD_CTRL2_DATRDSEL_S 24 +#define MSDC_PAD_CTRL2_DATRDSEL GENMASK(31, 24) #define MSDC_PAD_CTRL2_DATTDSEL BIT(20) #define MSDC_PAD_CTRL2_DATIES BIT(19) #define MSDC_PAD_CTRL2_DATSMT BIT(18) #define MSDC_PAD_CTRL2_DATPU BIT(17) #define MSDC_PAD_CTRL2_DATPD BIT(16) #define MSDC_PAD_CTRL2_DATSR BIT(8) -#define MSDC_PAD_CTRL2_DATDRVP_M 0x70 -#define MSDC_PAD_CTRL2_DATDRVP_S 4 -#define MSDC_PAD_CTRL2_DATDRVN_M 0x7 -#define MSDC_PAD_CTRL2_DATDRVN_S 0 +#define MSDC_PAD_CTRL2_DATDRVP GENMASK(6, 4) +#define MSDC_PAD_CTRL2_DATDRVN GENMASK(2, 0) /* PAD_TUNE */ -#define MSDC_PAD_TUNE_CLKTDLY_M 0xf8000000 -#define MSDC_PAD_TUNE_CLKTDLY_S 27 -#define MSDC_PAD_TUNE_CMDRRDLY_M 0x7c00000 -#define MSDC_PAD_TUNE_CMDRRDLY_S 22 +#define MSDC_PAD_TUNE_CLKTDLY GENMASK(31, 27) +#define MSDC_PAD_TUNE_CMDRRDLY GENMASK(26, 22) #define MSDC_PAD_TUNE_CMD_SEL BIT(21) -#define MSDC_PAD_TUNE_CMDRDLY_M 0x1f0000 -#define MSDC_PAD_TUNE_CMDRDLY_S 16 +#define MSDC_PAD_TUNE_CMDRDLY GENMASK(20, 16) #define MSDC_PAD_TUNE_RXDLYSEL BIT(15) #define MSDC_PAD_TUNE_RD_SEL BIT(13) -#define MSDC_PAD_TUNE_DATRRDLY_M 0x1f00 -#define MSDC_PAD_TUNE_DATRRDLY_S 8 -#define MSDC_PAD_TUNE_DATWRDLY_M 0x1f -#define MSDC_PAD_TUNE_DATWRDLY_S 0 +#define MSDC_PAD_TUNE_DATRRDLY GENMASK(12, 8) +#define MSDC_PAD_TUNE_DATWRDLY GENMASK(4, 0) -#define PAD_CMD_TUNE_RX_DLY3 0x3E -#define PAD_CMD_TUNE_RX_DLY3_S 1 +#define PAD_CMD_TUNE_RX_DLY3 GENMASK(5, 1) /* PAD_TUNE0 */ -#define MSDC_PAD_TUNE0_DAT0RDDLY_M 0x1f000000 -#define MSDC_PAD_TUNE0_DAT0RDDLY_S 24 -#define MSDC_PAD_TUNE0_DAT1RDDLY_M 0x1f0000 -#define MSDC_PAD_TUNE0_DAT1RDDLY_S 16 -#define MSDC_PAD_TUNE0_DAT2RDDLY_M 0x1f00 -#define MSDC_PAD_TUNE0_DAT2RDDLY_S 8 -#define MSDC_PAD_TUNE0_DAT3RDDLY_M 0x1f -#define MSDC_PAD_TUNE0_DAT3RDDLY_S 0 +#define MSDC_PAD_TUNE0_DAT0RDDLY GENMASK(28, 24) +#define MSDC_PAD_TUNE0_DAT1RDDLY GENMASK(20, 16) +#define MSDC_PAD_TUNE0_DAT2RDDLY GENMASK(12, 8) +#define MSDC_PAD_TUNE0_DAT3RDDLY GENMASK(4, 0) /* PAD_TUNE1 */ -#define MSDC_PAD_TUNE1_DAT4RDDLY_M 0x1f000000 -#define MSDC_PAD_TUNE1_DAT4RDDLY_S 24 -#define MSDC_PAD_TUNE1_DAT5RDDLY_M 0x1f0000 -#define MSDC_PAD_TUNE1_DAT5RDDLY_S 16 -#define MSDC_PAD_TUNE1_DAT6RDDLY_M 0x1f00 -#define MSDC_PAD_TUNE1_DAT6RDDLY_S 8 -#define MSDC_PAD_TUNE1_DAT7RDDLY_M 0x1f -#define MSDC_PAD_TUNE1_DAT7RDDLY_S 0 +#define MSDC_PAD_TUNE1_DAT4RDDLY GENMASK(28, 24) +#define MSDC_PAD_TUNE1_DAT5RDDLY GENMASK(20, 16) +#define MSDC_PAD_TUNE1_DAT6RDDLY GENMASK(12, 8) +#define MSDC_PAD_TUNE1_DAT7RDDLY GENMASK(4, 0) /* EMMC50_CFG0 */ #define EMMC50_CFG_CFCSTS_SEL BIT(4) @@ -203,21 +162,19 @@ /* EMMC_TOP_CONTROL mask */ #define PAD_RXDLY_SEL BIT(0) #define DELAY_EN BIT(1) -#define PAD_DAT_RD_RXDLY2 (0x1f << 2) -#define PAD_DAT_RD_RXDLY (0x1f << 7) -#define PAD_DAT_RD_RXDLY_S 7 +#define PAD_DAT_RD_RXDLY2 GENMASK(6, 2) +#define PAD_DAT_RD_RXDLY GENMASK(11, 7) #define PAD_DAT_RD_RXDLY2_SEL BIT(12) #define PAD_DAT_RD_RXDLY_SEL BIT(13) #define DATA_K_VALUE_SEL BIT(14) #define SDC_RX_ENH_EN BIT(15) /* EMMC_TOP_CMD mask */ -#define PAD_CMD_RXDLY2 (0x1f << 0) -#define PAD_CMD_RXDLY (0x1f << 5) -#define PAD_CMD_RXDLY_S 5 +#define PAD_CMD_RXDLY2 GENMASK(4, 0) +#define PAD_CMD_RXDLY GENMASK(9, 5) #define PAD_CMD_RD_RXDLY2_SEL BIT(10) #define PAD_CMD_RD_RXDLY_SEL BIT(11) -#define PAD_CMD_TX_DLY (0x1f << 12) +#define PAD_CMD_TX_DLY GENMASK(16, 12) /* SDC_CFG_BUSWIDTH */ #define MSDC_BUS_1BITS 0x0 @@ -428,14 +385,12 @@ static void msdc_fifo_clr(struct msdc_host *host) static u32 msdc_fifo_rx_bytes(struct msdc_host *host) { - return (readl(&host->base->msdc_fifocs) & - MSDC_FIFOCS_RXCNT_M) >> MSDC_FIFOCS_RXCNT_S; + return FIELD_GET(MSDC_FIFOCS_RXCNT, readl(&host->base->msdc_fifocs)); } static u32 msdc_fifo_tx_bytes(struct msdc_host *host) { - return (readl(&host->base->msdc_fifocs) & - MSDC_FIFOCS_TXCNT_M) >> MSDC_FIFOCS_TXCNT_S; + return FIELD_GET(MSDC_FIFOCS_TXCNT, readl(&host->base->msdc_fifocs)); } static u32 msdc_cmd_find_resp(struct msdc_host *host, struct mmc_cmd *cmd) @@ -504,10 +459,10 @@ static u32 msdc_cmd_prepare_raw_cmd(struct msdc_host *host, blocksize = data->blocksize; } - rawcmd |= ((opcode << SDC_CMD_CMD_S) & SDC_CMD_CMD_M) | - ((resp_type << SDC_CMD_RSPTYP_S) & SDC_CMD_RSPTYP_M) | - ((blocksize << SDC_CMD_BLK_LEN_S) & SDC_CMD_BLK_LEN_M) | - ((dtype << SDC_CMD_DTYPE_S) & SDC_CMD_DTYPE_M); + rawcmd |= FIELD_PREP(SDC_CMD_CMD, opcode) | + FIELD_PREP(SDC_CMD_RSPTYP, resp_type) | + FIELD_PREP(SDC_CMD_BLK_LEN, blocksize) | + FIELD_PREP(SDC_CMD_DTYPE, dtype); if (opcode == MMC_CMD_STOP_TRANSMISSION) rawcmd |= SDC_CMD_STOP; @@ -590,10 +545,8 @@ static int msdc_start_command(struct msdc_host *host, struct mmc_cmd *cmd, if (!msdc_cmd_is_ready(host)) return -EIO; - if ((readl(&host->base->msdc_fifocs) & - MSDC_FIFOCS_TXCNT_M) >> MSDC_FIFOCS_TXCNT_S || - (readl(&host->base->msdc_fifocs) & - MSDC_FIFOCS_RXCNT_M) >> MSDC_FIFOCS_RXCNT_S) { + if (FIELD_GET(MSDC_FIFOCS_TXCNT, readl(&host->base->msdc_fifocs)) || + FIELD_GET(MSDC_FIFOCS_RXCNT, readl(&host->base->msdc_fifocs))) { pr_err("TX/RX FIFO non-empty before start of IO. Reset\n"); msdc_reset_hw(host); } @@ -814,37 +767,35 @@ static void msdc_set_timeout(struct msdc_host *host, u32 ns, u32 clks) /* unit is 1048576 sclk cycles */ timeout = (timeout + (0x1 << shift) - 1) >> shift; if (host->dev_comp->clk_div_bits == 8) - mode = (readl(&host->base->msdc_cfg) & - MSDC_CFG_CKMOD_M) >> MSDC_CFG_CKMOD_S; + mode = FIELD_GET(MSDC_CFG_CKMOD, readl(&host->base->msdc_cfg)); else - mode = (readl(&host->base->msdc_cfg) & - MSDC_CFG_CKMOD_EXT_M) >> MSDC_CFG_CKMOD_EXT_S; + mode = FIELD_GET(MSDC_CFG_CKMOD_EXT, readl(&host->base->msdc_cfg)); /* DDR mode will double the clk cycles for data timeout */ timeout = mode >= 2 ? timeout * 2 : timeout; timeout = timeout > 1 ? timeout - 1 : 0; timeout = timeout > 255 ? 255 : timeout; } - clrsetbits_le32(&host->base->sdc_cfg, SDC_CFG_DTOC_M, - timeout << SDC_CFG_DTOC_S); + clrsetbits_le32(&host->base->sdc_cfg, SDC_CFG_DTOC, + FIELD_PREP(SDC_CFG_DTOC, timeout)); } static void msdc_set_buswidth(struct msdc_host *host, u32 width) { u32 val = readl(&host->base->sdc_cfg); - val &= ~SDC_CFG_BUSWIDTH_M; + val &= ~SDC_CFG_BUSWIDTH; switch (width) { default: case 1: - val |= (MSDC_BUS_1BITS << SDC_CFG_BUSWIDTH_S); + val |= FIELD_PREP(SDC_CFG_BUSWIDTH, MSDC_BUS_1BITS); break; case 4: - val |= (MSDC_BUS_4BITS << SDC_CFG_BUSWIDTH_S); + val |= FIELD_PREP(SDC_CFG_BUSWIDTH, MSDC_BUS_4BITS); break; case 8: - val |= (MSDC_BUS_8BITS << SDC_CFG_BUSWIDTH_S); + val |= FIELD_PREP(SDC_CFG_BUSWIDTH, MSDC_BUS_8BITS); break; } @@ -918,18 +869,17 @@ static void msdc_set_mclk(struct udevice *dev, clrbits_le32(&host->base->msdc_cfg, MSDC_CFG_CKPDN); if (host->dev_comp->clk_div_bits == 8) { - div = min(div, (u32)(MSDC_CFG_CKDIV_M >> MSDC_CFG_CKDIV_S)); + div = min(div, (u32)FIELD_MAX(MSDC_CFG_CKDIV)); clrsetbits_le32(&host->base->msdc_cfg, - MSDC_CFG_CKMOD_M | MSDC_CFG_CKDIV_M, - (mode << MSDC_CFG_CKMOD_S) | - (div << MSDC_CFG_CKDIV_S)); + MSDC_CFG_CKMOD | MSDC_CFG_CKDIV, + FIELD_PREP(MSDC_CFG_CKMOD, mode) | + FIELD_PREP(MSDC_CFG_CKDIV, div)); } else { - div = min(div, (u32)(MSDC_CFG_CKDIV_EXT_M >> - MSDC_CFG_CKDIV_EXT_S)); + div = min(div, (u32)FIELD_MAX(MSDC_CFG_CKDIV_EXT)); clrsetbits_le32(&host->base->msdc_cfg, - MSDC_CFG_CKMOD_EXT_M | MSDC_CFG_CKDIV_EXT_M, - (mode << MSDC_CFG_CKMOD_EXT_S) | - (div << MSDC_CFG_CKDIV_EXT_S)); + MSDC_CFG_CKMOD_EXT | MSDC_CFG_CKDIV_EXT, + FIELD_PREP(MSDC_CFG_CKMOD_EXT, mode) | + FIELD_PREP(MSDC_CFG_CKDIV_EXT, div)); } readl_poll_timeout(&host->base->msdc_cfg, reg, @@ -1085,10 +1035,10 @@ static inline void msdc_set_cmd_delay(struct msdc_host *host, u32 value) if (host->top_base) clrsetbits_le32(&host->top_base->emmc_top_cmd, PAD_CMD_RXDLY, - value << PAD_CMD_RXDLY_S); + FIELD_PREP(PAD_CMD_RXDLY, value)); else - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRDLY_M, - value << MSDC_PAD_TUNE_CMDRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRDLY, + FIELD_PREP(MSDC_PAD_TUNE_CMDRDLY, value)); } static inline void msdc_set_data_delay(struct msdc_host *host, u32 value) @@ -1100,10 +1050,10 @@ static inline void msdc_set_data_delay(struct msdc_host *host, u32 value) if (host->top_base) clrsetbits_le32(&host->top_base->emmc_top_control, - PAD_DAT_RD_RXDLY, value << PAD_DAT_RD_RXDLY_S); + PAD_DAT_RD_RXDLY, FIELD_PREP(PAD_DAT_RD_RXDLY, value)); else - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_DATRRDLY_M, - value << MSDC_PAD_TUNE_DATRRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_DATRRDLY, + FIELD_PREP(MSDC_PAD_TUNE_DATRRDLY, value)); } static int hs400_tune_response(struct udevice *dev, u32 opcode) @@ -1122,9 +1072,9 @@ static int hs400_tune_response(struct udevice *dev, u32 opcode) if (mmc->selected_mode == MMC_HS_200 || mmc->selected_mode == UHS_SDR104) - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRRDLY_M, - host->hs200_cmd_int_delay << - MSDC_PAD_TUNE_CMDRRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRRDLY, + FIELD_PREP(MSDC_PAD_TUNE_CMDRRDLY, + host->hs200_cmd_int_delay)); if (host->r_smpl) clrbits_le32(&host->base->msdc_iocon, MSDC_IOCON_RSPL); @@ -1133,7 +1083,7 @@ static int hs400_tune_response(struct udevice *dev, u32 opcode) for (i = 0; i < PAD_DELAY_MAX; i++) { clrsetbits_le32(tune_reg, PAD_CMD_TUNE_RX_DLY3, - i << PAD_CMD_TUNE_RX_DLY3_S); + FIELD_PREP(PAD_CMD_TUNE_RX_DLY3, i)); for (j = 0; j < 3; j++) { cmd_err = mmc_send_tuning(mmc, opcode); @@ -1148,8 +1098,7 @@ static int hs400_tune_response(struct udevice *dev, u32 opcode) final_cmd_delay = get_best_delay(dev, host, cmd_delay); clrsetbits_le32(tune_reg, PAD_CMD_TUNE_RX_DLY3, - final_cmd_delay.final_phase << - PAD_CMD_TUNE_RX_DLY3_S); + FIELD_PREP(PAD_CMD_TUNE_RX_DLY3, final_cmd_delay.final_phase)); final_delay = final_cmd_delay.final_phase; dev_info(dev, "Final cmd pad delay: %x\n", final_delay); @@ -1175,15 +1124,15 @@ static int msdc_tune_response(struct udevice *dev, u32 opcode) if (mmc->selected_mode == MMC_HS_200 || mmc->selected_mode == UHS_SDR104) - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRRDLY_M, - host->hs200_cmd_int_delay << - MSDC_PAD_TUNE_CMDRRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRRDLY, + FIELD_PREP(MSDC_PAD_TUNE_CMDRRDLY, + host->hs200_cmd_int_delay)); clrbits_le32(&host->base->msdc_iocon, MSDC_IOCON_RSPL); for (i = 0; i < PAD_DELAY_MAX; i++) { - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRDLY_M, - i << MSDC_PAD_TUNE_CMDRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRDLY, + FIELD_PREP(MSDC_PAD_TUNE_CMDRDLY, i)); for (j = 0; j < 3; j++) { cmd_err = mmc_send_tuning(mmc, opcode); @@ -1204,8 +1153,8 @@ static int msdc_tune_response(struct udevice *dev, u32 opcode) setbits_le32(&host->base->msdc_iocon, MSDC_IOCON_RSPL); for (i = 0; i < PAD_DELAY_MAX; i++) { - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRDLY_M, - i << MSDC_PAD_TUNE_CMDRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRDLY, + FIELD_PREP(MSDC_PAD_TUNE_CMDRDLY, i)); for (j = 0; j < 3; j++) { cmd_err = mmc_send_tuning(mmc, opcode); @@ -1224,15 +1173,13 @@ skip_fall: final_maxlen = max(final_rise_delay.maxlen, final_fall_delay.maxlen); if (final_maxlen == final_rise_delay.maxlen) { clrbits_le32(&host->base->msdc_iocon, MSDC_IOCON_RSPL); - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRDLY_M, - final_rise_delay.final_phase << - MSDC_PAD_TUNE_CMDRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRDLY, + FIELD_PREP(MSDC_PAD_TUNE_CMDRDLY, final_rise_delay.final_phase)); final_delay = final_rise_delay.final_phase; } else { setbits_le32(&host->base->msdc_iocon, MSDC_IOCON_RSPL); - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRDLY_M, - final_fall_delay.final_phase << - MSDC_PAD_TUNE_CMDRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRDLY, + FIELD_PREP(MSDC_PAD_TUNE_CMDRDLY, final_fall_delay.final_phase)); final_delay = final_fall_delay.final_phase; } @@ -1240,9 +1187,8 @@ skip_fall: goto skip_internal; for (i = 0; i < PAD_DELAY_MAX; i++) { - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRRDLY_M, - i << MSDC_PAD_TUNE_CMDRRDLY_S); - + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRRDLY, + FIELD_PREP(MSDC_PAD_TUNE_CMDRRDLY, i)); cmd_err = mmc_send_tuning(mmc, opcode); if (!cmd_err) internal_delay |= (1 << i); @@ -1251,9 +1197,9 @@ skip_fall: dev_dbg(dev, "Final internal delay: 0x%x\n", internal_delay); internal_delay_phase = get_best_delay(dev, host, internal_delay); - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRRDLY_M, - internal_delay_phase.final_phase << - MSDC_PAD_TUNE_CMDRRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRRDLY, + FIELD_PREP(MSDC_PAD_TUNE_CMDRRDLY, + internal_delay_phase.final_phase)); skip_internal: dev_dbg(dev, "Final cmd pad delay: %x\n", final_delay); @@ -1278,8 +1224,8 @@ static int msdc_tune_data(struct udevice *dev, u32 opcode) clrbits_le32(&host->base->msdc_iocon, MSDC_IOCON_W_DSPL); for (i = 0; i < PAD_DELAY_MAX; i++) { - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_DATRRDLY_M, - i << MSDC_PAD_TUNE_DATRRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_DATRRDLY, + FIELD_PREP(MSDC_PAD_TUNE_DATRRDLY, i)); ret = mmc_send_tuning(mmc, opcode); if (!ret) { @@ -1301,8 +1247,8 @@ static int msdc_tune_data(struct udevice *dev, u32 opcode) setbits_le32(&host->base->msdc_iocon, MSDC_IOCON_W_DSPL); for (i = 0; i < PAD_DELAY_MAX; i++) { - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_DATRRDLY_M, - i << MSDC_PAD_TUNE_DATRRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_DATRRDLY, + FIELD_PREP(MSDC_PAD_TUNE_DATRRDLY, i)); ret = mmc_send_tuning(mmc, opcode); if (!ret) { @@ -1322,24 +1268,24 @@ skip_fall: if (final_maxlen == final_rise_delay.maxlen) { clrbits_le32(&host->base->msdc_iocon, MSDC_IOCON_DSPL); clrbits_le32(&host->base->msdc_iocon, MSDC_IOCON_W_DSPL); - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_DATRRDLY_M, - final_rise_delay.final_phase << - MSDC_PAD_TUNE_DATRRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_DATRRDLY, + FIELD_PREP(MSDC_PAD_TUNE_DATRRDLY, + final_rise_delay.final_phase)); final_delay = final_rise_delay.final_phase; } else { setbits_le32(&host->base->msdc_iocon, MSDC_IOCON_DSPL); setbits_le32(&host->base->msdc_iocon, MSDC_IOCON_W_DSPL); - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_DATRRDLY_M, - final_fall_delay.final_phase << - MSDC_PAD_TUNE_DATRRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_DATRRDLY, + FIELD_PREP(MSDC_PAD_TUNE_DATRRDLY, + final_fall_delay.final_phase)); final_delay = final_fall_delay.final_phase; } if (mmc->selected_mode == MMC_HS_200 || mmc->selected_mode == UHS_SDR104) - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_DATWRDLY_M, - host->hs200_write_int_delay << - MSDC_PAD_TUNE_DATWRDLY_S); + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_DATWRDLY, + FIELD_PREP(MSDC_PAD_TUNE_DATWRDLY, + host->hs200_write_int_delay)); dev_dbg(dev, "Final data pad delay: %x\n", final_delay); @@ -1426,7 +1372,7 @@ static int msdc_execute_tuning(struct udevice *dev, uint opcode) clrbits_le32(&host->base->msdc_iocon, MSDC_IOCON_DSPL | MSDC_IOCON_W_DSPL); clrsetbits_le32(&host->base->pad_tune, - MSDC_PAD_TUNE_DATRRDLY_M, 0); + MSDC_PAD_TUNE_DATRRDLY, 0); writel(host->hs400_ds_delay, &host->base->pad_ds_tune); /* for hs400 mode it must be set to 0 */ @@ -1488,8 +1434,8 @@ static void msdc_init_hw(struct msdc_host *host) /* Enable/disable hw card detection according to fdt option */ if (host->builtin_cd) clrsetbits_le32(&host->base->msdc_ps, - MSDC_PS_CDDBCE_M, - (DEFAULT_CD_DEBOUNCE << MSDC_PS_CDDBCE_S) | + MSDC_PS_CDDBCE, + FIELD_PREP(MSDC_PS_CDDBCE, DEFAULT_CD_DEBOUNCE) | MSDC_PS_CDEN); else clrbits_le32(&host->base->msdc_ps, MSDC_PS_CDEN); @@ -1518,8 +1464,8 @@ static void msdc_init_hw(struct msdc_host *host) writel(0xffff4089, &host->base->patch_bit1); if (host->dev_comp->stop_clk_fix) { - clrsetbits_le32(&host->base->patch_bit1, MSDC_PB1_STOP_DLY_M, - 3 << MSDC_PB1_STOP_DLY_S); + clrsetbits_le32(&host->base->patch_bit1, MSDC_PB1_STOP_DLY, + FIELD_PREP(MSDC_PB1_STOP_DLY, 3)); clrbits_le32(&host->base->sdc_fifo_cfg, SDC_FIFO_CFG_WRVALIDSEL); clrbits_le32(&host->base->sdc_fifo_cfg, @@ -1532,8 +1478,8 @@ static void msdc_init_hw(struct msdc_host *host) setbits_le32(&host->base->emmc50_cfg0, EMMC50_CFG_CFCSTS_SEL); if (host->dev_comp->async_fifo) { - clrsetbits_le32(&host->base->patch_bit2, MSDC_PB2_RESPWAIT_M, - 3 << MSDC_PB2_RESPWAIT_S); + clrsetbits_le32(&host->base->patch_bit2, MSDC_PB2_RESPWAIT, + FIELD_PREP(MSDC_PB2_RESPWAIT, 3)); if (host->dev_comp->enhance_rx) { if (host->top_base) @@ -1544,11 +1490,11 @@ static void msdc_init_hw(struct msdc_host *host) SDC_RX_ENHANCE_EN); } else { clrsetbits_le32(&host->base->patch_bit2, - MSDC_PB2_RESPSTSENSEL_M, - 2 << MSDC_PB2_RESPSTSENSEL_S); + MSDC_PB2_RESPSTSENSEL, + FIELD_PREP(MSDC_PB2_RESPSTSENSEL, 2)); clrsetbits_le32(&host->base->patch_bit2, - MSDC_PB2_CRCSTSENSEL_M, - 2 << MSDC_PB2_CRCSTSENSEL_S); + MSDC_PB2_CRCSTSENSEL, + FIELD_PREP(MSDC_PB2_CRCSTSENSEL, 2)); } /* use async fifo to avoid tune internal delay */ @@ -1574,9 +1520,9 @@ static void msdc_init_hw(struct msdc_host *host) setbits_le32(tune_reg, MSDC_PAD_TUNE_RD_SEL | MSDC_PAD_TUNE_CMD_SEL); clrsetbits_le32(&host->base->patch_bit0, - MSDC_INT_DAT_LATCH_CK_SEL_M, - host->latch_ck << - MSDC_INT_DAT_LATCH_CK_SEL_S); + MSDC_INT_DAT_LATCH_CK_SEL, + FIELD_PREP(MSDC_INT_DAT_LATCH_CK_SEL, + host->latch_ck)); } } else { /* choose clock tune */ @@ -1590,39 +1536,38 @@ static void msdc_init_hw(struct msdc_host *host) if (host->dev_comp->builtin_pad_ctrl) { /* Set pins driving strength */ writel(MSDC_PAD_CTRL0_CLKPD | MSDC_PAD_CTRL0_CLKSMT | - MSDC_PAD_CTRL0_CLKIES | (4 << MSDC_PAD_CTRL0_CLKDRVN_S) | - (4 << MSDC_PAD_CTRL0_CLKDRVP_S), &host->base->pad_ctrl0); + MSDC_PAD_CTRL0_CLKIES | FIELD_PREP(MSDC_PAD_CTRL0_CLKDRVN, 4) | + FIELD_PREP(MSDC_PAD_CTRL0_CLKDRVP, 4), &host->base->pad_ctrl0); writel(MSDC_PAD_CTRL1_CMDPU | MSDC_PAD_CTRL1_CMDSMT | - MSDC_PAD_CTRL1_CMDIES | (4 << MSDC_PAD_CTRL1_CMDDRVN_S) | - (4 << MSDC_PAD_CTRL1_CMDDRVP_S), &host->base->pad_ctrl1); + MSDC_PAD_CTRL1_CMDIES | FIELD_PREP(MSDC_PAD_CTRL1_CMDDRVN, 4) | + FIELD_PREP(MSDC_PAD_CTRL1_CMDDRVP, 4), &host->base->pad_ctrl1); writel(MSDC_PAD_CTRL2_DATPU | MSDC_PAD_CTRL2_DATSMT | - MSDC_PAD_CTRL2_DATIES | (4 << MSDC_PAD_CTRL2_DATDRVN_S) | - (4 << MSDC_PAD_CTRL2_DATDRVP_S), &host->base->pad_ctrl2); + MSDC_PAD_CTRL2_DATIES | FIELD_PREP(MSDC_PAD_CTRL2_DATDRVN, 4) | + FIELD_PREP(MSDC_PAD_CTRL2_DATDRVP, 4), &host->base->pad_ctrl2); } if (host->dev_comp->default_pad_dly) { /* Default pad delay may be needed if tuning not enabled */ - clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CLKTDLY_M | - MSDC_PAD_TUNE_CMDRRDLY_M | - MSDC_PAD_TUNE_CMDRDLY_M | - MSDC_PAD_TUNE_DATRRDLY_M | - MSDC_PAD_TUNE_DATWRDLY_M, - (0x10 << MSDC_PAD_TUNE_CLKTDLY_S) | - (0x10 << MSDC_PAD_TUNE_CMDRRDLY_S) | - (0x10 << MSDC_PAD_TUNE_CMDRDLY_S) | - (0x10 << MSDC_PAD_TUNE_DATRRDLY_S) | - (0x10 << MSDC_PAD_TUNE_DATWRDLY_S)); - - writel((0x10 << MSDC_PAD_TUNE0_DAT0RDDLY_S) | - (0x10 << MSDC_PAD_TUNE0_DAT1RDDLY_S) | - (0x10 << MSDC_PAD_TUNE0_DAT2RDDLY_S) | - (0x10 << MSDC_PAD_TUNE0_DAT3RDDLY_S), + clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CLKTDLY | + MSDC_PAD_TUNE_CMDRRDLY | + MSDC_PAD_TUNE_CMDRDLY | + MSDC_PAD_TUNE_DATRRDLY | + MSDC_PAD_TUNE_DATWRDLY, + FIELD_PREP(MSDC_PAD_TUNE_CLKTDLY, 0x10) | + FIELD_PREP(MSDC_PAD_TUNE_CMDRRDLY, 0x10) | + FIELD_PREP(MSDC_PAD_TUNE_CMDRDLY, 0x10) | + FIELD_PREP(MSDC_PAD_TUNE_DATRRDLY, 0x10) | + FIELD_PREP(MSDC_PAD_TUNE_DATWRDLY, 0x10)); + writel(FIELD_PREP(MSDC_PAD_TUNE0_DAT0RDDLY, 0x10) | + FIELD_PREP(MSDC_PAD_TUNE0_DAT1RDDLY, 0x10) | + FIELD_PREP(MSDC_PAD_TUNE0_DAT2RDDLY, 0x10) | + FIELD_PREP(MSDC_PAD_TUNE0_DAT3RDDLY, 0x10), rd_dly0_reg); - writel((0x10 << MSDC_PAD_TUNE1_DAT4RDDLY_S) | - (0x10 << MSDC_PAD_TUNE1_DAT5RDDLY_S) | - (0x10 << MSDC_PAD_TUNE1_DAT6RDDLY_S) | - (0x10 << MSDC_PAD_TUNE1_DAT7RDDLY_S), + writel(FIELD_PREP(MSDC_PAD_TUNE1_DAT4RDDLY, 0x10) | + FIELD_PREP(MSDC_PAD_TUNE1_DAT5RDDLY, 0x10) | + FIELD_PREP(MSDC_PAD_TUNE1_DAT6RDDLY, 0x10) | + FIELD_PREP(MSDC_PAD_TUNE1_DAT7RDDLY, 0x10), rd_dly1_reg); } @@ -1633,8 +1578,8 @@ static void msdc_init_hw(struct msdc_host *host) clrbits_le32(&host->base->sdc_cfg, SDC_CFG_SDIOIDE); /* Configure to default data timeout */ - clrsetbits_le32(&host->base->sdc_cfg, SDC_CFG_DTOC_M, - 3 << SDC_CFG_DTOC_S); + clrsetbits_le32(&host->base->sdc_cfg, SDC_CFG_DTOC, + FIELD_PREP(SDC_CFG_DTOC, 3)); host->def_tune_para.iocon = readl(&host->base->msdc_iocon); host->def_tune_para.pad_tune = readl(&host->base->pad_tune); -- 2.43.0

