[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