Message ID | 20240201-mmc-v2-3-9f09dc1335fd@outlook.com |
---|---|
State | Accepted |
Commit | 2ea7b7a42a59ffa88817cc297655fcacb1e407cc |
Delegated to: | Jaehoon Chung |
Headers | show |
Series | mmc: hi6220-dwmmc: handle resets and clocks | expand |
Hi On 2/1/24 23:05, Yang Xiwen via B4 Relay wrote: > From: Yang Xiwen <forbidden405@outlook.com> > > The value defaults to 0 and is ignored by dw_mmc code, so the other > users are not affected. > > Setting this explicitly fixes some weird reading error found on Hi3798MV200. > > Fixes: 8a5dc8140e62 ("mmc: hi6220_dw_mmc: add compatible for HC2910 support") > > Signed-off-by: Yang Xiwen <forbidden405@outlook.com> > --- > drivers/mmc/hi6220_dw_mmc.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/hi6220_dw_mmc.c b/drivers/mmc/hi6220_dw_mmc.c > index a4b8072976..dc0210402b 100644 > --- a/drivers/mmc/hi6220_dw_mmc.c > +++ b/drivers/mmc/hi6220_dw_mmc.c > @@ -37,6 +37,7 @@ struct hi6220_dwmmc_priv_data { > struct hisi_mmc_data { > unsigned int clock; > bool use_fifo; > + u32 fifoth_val; > }; > > static int hi6220_dwmmc_of_to_plat(struct udevice *dev) > @@ -125,6 +126,7 @@ static int hi6220_dwmmc_probe(struct udevice *dev) > host->mmc = &plat->mmc; > > host->fifo_mode = mmc_data->use_fifo; > + host->fifoth_val = mmc_data->fifoth_val; > host->mmc->priv = &priv->host; > upriv->mmc = host->mmc; > host->mmc->dev = dev; > @@ -154,13 +156,20 @@ static const struct hisi_mmc_data hi6220_mmc_data = { > .use_fifo = false, > }; > > +static const struct hisi_mmc_data hi3798mv2x_mmc_data = { > + .clock = 50000000, > + .use_fifo = false, > + // FIFO depth is 256 Removed unnecessary comment. Best Regards, Jaehoon Chung > + .fifoth_val = MSIZE(4) | RX_WMARK(0x7f) | TX_WMARK(0x80), > +}; > + > static const struct udevice_id hi6220_dwmmc_ids[] = { > { .compatible = "hisilicon,hi6220-dw-mshc", > .data = (ulong)&hi6220_mmc_data }, > { .compatible = "hisilicon,hi3798cv200-dw-mshc", > .data = (ulong)&hi6220_mmc_data }, > { .compatible = "hisilicon,hi3798mv200-dw-mshc", > - .data = (ulong)&hi6220_mmc_data }, > + .data = (ulong)&hi3798mv2x_mmc_data }, > { .compatible = "hisilicon,hi3660-dw-mshc", > .data = (ulong)&hi3660_mmc_data }, > { }
On 4/3/2024 8:43 AM, Jaehoon Chung wrote: > Hi > > On 2/1/24 23:05, Yang Xiwen via B4 Relay wrote: >> From: Yang Xiwen <forbidden405@outlook.com> >> >> The value defaults to 0 and is ignored by dw_mmc code, so the other >> users are not affected. >> >> Setting this explicitly fixes some weird reading error found on Hi3798MV200. >> >> Fixes: 8a5dc8140e62 ("mmc: hi6220_dw_mmc: add compatible for HC2910 support") >> >> Signed-off-by: Yang Xiwen <forbidden405@outlook.com> >> --- >> drivers/mmc/hi6220_dw_mmc.c | 11 ++++++++++- >> 1 file changed, 10 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/mmc/hi6220_dw_mmc.c b/drivers/mmc/hi6220_dw_mmc.c >> index a4b8072976..dc0210402b 100644 >> --- a/drivers/mmc/hi6220_dw_mmc.c >> +++ b/drivers/mmc/hi6220_dw_mmc.c >> @@ -37,6 +37,7 @@ struct hi6220_dwmmc_priv_data { >> struct hisi_mmc_data { >> unsigned int clock; >> bool use_fifo; >> + u32 fifoth_val; >> }; >> >> static int hi6220_dwmmc_of_to_plat(struct udevice *dev) >> @@ -125,6 +126,7 @@ static int hi6220_dwmmc_probe(struct udevice *dev) >> host->mmc = &plat->mmc; >> >> host->fifo_mode = mmc_data->use_fifo; >> + host->fifoth_val = mmc_data->fifoth_val; >> host->mmc->priv = &priv->host; >> upriv->mmc = host->mmc; >> host->mmc->dev = dev; >> @@ -154,13 +156,20 @@ static const struct hisi_mmc_data hi6220_mmc_data = { >> .use_fifo = false, >> }; >> >> +static const struct hisi_mmc_data hi3798mv2x_mmc_data = { >> + .clock = 50000000, >> + .use_fifo = false, >> + // FIFO depth is 256 > Removed unnecessary comment. Will do. It seems that this should also apply to hi3798cv200-dw-mshc. tests are needed from cv200 users. > > Best Regards, > Jaehoon Chung > >> + .fifoth_val = MSIZE(4) | RX_WMARK(0x7f) | TX_WMARK(0x80), >> +}; >> + >> static const struct udevice_id hi6220_dwmmc_ids[] = { >> { .compatible = "hisilicon,hi6220-dw-mshc", >> .data = (ulong)&hi6220_mmc_data }, >> { .compatible = "hisilicon,hi3798cv200-dw-mshc", >> .data = (ulong)&hi6220_mmc_data }, >> { .compatible = "hisilicon,hi3798mv200-dw-mshc", >> - .data = (ulong)&hi6220_mmc_data }, >> + .data = (ulong)&hi3798mv2x_mmc_data }, >> { .compatible = "hisilicon,hi3660-dw-mshc", >> .data = (ulong)&hi3660_mmc_data }, >> { }
Hi, > -----Original Message----- > From: Yang Xiwen <forbidden405@outlook.com> > Sent: Wednesday, April 3, 2024 10:22 AM > To: Jaehoon Chung <jh80.chung@samsung.com>; Peng Fan <peng.fan@nxp.com> > Cc: u-boot@lists.denx.de > Subject: Re: [PATCH v2 3/3] mmc: hi6220_dw_mmc: add fifoth_val to private data and set it in .probe > > On 4/3/2024 8:43 AM, Jaehoon Chung wrote: > > Hi > > > > On 2/1/24 23:05, Yang Xiwen via B4 Relay wrote: > >> From: Yang Xiwen <forbidden405@outlook.com> > >> > >> The value defaults to 0 and is ignored by dw_mmc code, so the other > >> users are not affected. > >> > >> Setting this explicitly fixes some weird reading error found on Hi3798MV200. > >> > >> Fixes: 8a5dc8140e62 ("mmc: hi6220_dw_mmc: add compatible for HC2910 support") > >> > >> Signed-off-by: Yang Xiwen <forbidden405@outlook.com> Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com> > >> --- > >> drivers/mmc/hi6220_dw_mmc.c | 11 ++++++++++- > >> 1 file changed, 10 insertions(+), 1 deletion(-) > >> > >> diff --git a/drivers/mmc/hi6220_dw_mmc.c b/drivers/mmc/hi6220_dw_mmc.c > >> index a4b8072976..dc0210402b 100644 > >> --- a/drivers/mmc/hi6220_dw_mmc.c > >> +++ b/drivers/mmc/hi6220_dw_mmc.c > >> @@ -37,6 +37,7 @@ struct hi6220_dwmmc_priv_data { > >> struct hisi_mmc_data { > >> unsigned int clock; > >> bool use_fifo; > >> + u32 fifoth_val; > >> }; > >> > >> static int hi6220_dwmmc_of_to_plat(struct udevice *dev) > >> @@ -125,6 +126,7 @@ static int hi6220_dwmmc_probe(struct udevice *dev) > >> host->mmc = &plat->mmc; > >> > >> host->fifo_mode = mmc_data->use_fifo; > >> + host->fifoth_val = mmc_data->fifoth_val; > >> host->mmc->priv = &priv->host; > >> upriv->mmc = host->mmc; > >> host->mmc->dev = dev; > >> @@ -154,13 +156,20 @@ static const struct hisi_mmc_data hi6220_mmc_data = { > >> .use_fifo = false, > >> }; > >> > >> +static const struct hisi_mmc_data hi3798mv2x_mmc_data = { > >> + .clock = 50000000, > >> + .use_fifo = false, > >> + // FIFO depth is 256 > > Removed unnecessary comment. > > > Will do. It seems that this should also apply to hi3798cv200-dw-mshc. > tests are needed from cv200 users. In future, It can be removed. Others looks good to me. Best Regards, Jaehoon Chung > > > > > > Best Regards, > > Jaehoon Chung > > > >> + .fifoth_val = MSIZE(4) | RX_WMARK(0x7f) | TX_WMARK(0x80), > >> +}; > >> + > >> static const struct udevice_id hi6220_dwmmc_ids[] = { > >> { .compatible = "hisilicon,hi6220-dw-mshc", > >> .data = (ulong)&hi6220_mmc_data }, > >> { .compatible = "hisilicon,hi3798cv200-dw-mshc", > >> .data = (ulong)&hi6220_mmc_data }, > >> { .compatible = "hisilicon,hi3798mv200-dw-mshc", > >> - .data = (ulong)&hi6220_mmc_data }, > >> + .data = (ulong)&hi3798mv2x_mmc_data }, > >> { .compatible = "hisilicon,hi3660-dw-mshc", > >> .data = (ulong)&hi3660_mmc_data }, > >> { } > > > -- > Regards, > Yang Xiwen
diff --git a/drivers/mmc/hi6220_dw_mmc.c b/drivers/mmc/hi6220_dw_mmc.c index a4b8072976..dc0210402b 100644 --- a/drivers/mmc/hi6220_dw_mmc.c +++ b/drivers/mmc/hi6220_dw_mmc.c @@ -37,6 +37,7 @@ struct hi6220_dwmmc_priv_data { struct hisi_mmc_data { unsigned int clock; bool use_fifo; + u32 fifoth_val; }; static int hi6220_dwmmc_of_to_plat(struct udevice *dev) @@ -125,6 +126,7 @@ static int hi6220_dwmmc_probe(struct udevice *dev) host->mmc = &plat->mmc; host->fifo_mode = mmc_data->use_fifo; + host->fifoth_val = mmc_data->fifoth_val; host->mmc->priv = &priv->host; upriv->mmc = host->mmc; host->mmc->dev = dev; @@ -154,13 +156,20 @@ static const struct hisi_mmc_data hi6220_mmc_data = { .use_fifo = false, }; +static const struct hisi_mmc_data hi3798mv2x_mmc_data = { + .clock = 50000000, + .use_fifo = false, + // FIFO depth is 256 + .fifoth_val = MSIZE(4) | RX_WMARK(0x7f) | TX_WMARK(0x80), +}; + static const struct udevice_id hi6220_dwmmc_ids[] = { { .compatible = "hisilicon,hi6220-dw-mshc", .data = (ulong)&hi6220_mmc_data }, { .compatible = "hisilicon,hi3798cv200-dw-mshc", .data = (ulong)&hi6220_mmc_data }, { .compatible = "hisilicon,hi3798mv200-dw-mshc", - .data = (ulong)&hi6220_mmc_data }, + .data = (ulong)&hi3798mv2x_mmc_data }, { .compatible = "hisilicon,hi3660-dw-mshc", .data = (ulong)&hi3660_mmc_data }, { }