mmc: mtk-sd: use GENMASK and FIELD macros
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@baylibre.com> Reviewed-by: Macpaul Lin <macpaul.lin@mediatek.com> Signed-off-by: Peng Fan <peng.fan@nxp.com>
This commit is contained in:
+151
-206
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user