[PATCH 1/3] mmc: mtk-sd: use GENMASK and FIELD macros

David Lechner dlechner at baylibre.com
Wed Jan 21 23:36:24 CET 2026


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 <dlechner at baylibre.com>
---
 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



More information about the U-Boot mailing list