[no subject]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> 
> >
> > Implement the hw_reset function in sdhci_ops asserting reset for at
> > least 10us and waiting an extra 300us after deassertion.
> > These particular delays were inspired by sunxi-mmc hw_reset function.
> >
> > Tested on SolidRun i.MX8DXL SoM with a scope, and confirmed that eMMC
> > is still accessible after boot. eMMC extcsd has RST_N_FUNCTION=0x01,
> > i.e.
> > reset input enabled, Linux v5.15.
> >
> > Signed-off-by: Josua Mayer <josua@xxxxxxxxxxxxx>
> > ---
> >  drivers/mmc/host/sdhci-esdhc-imx.c | 12 ++++++++++++
> >  1 file changed, 12 insertions(+)
> >
> > diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c
> > b/drivers/mmc/host/sdhci-esdhc-imx.c
> > index
> > 8f0bc6dca2b0402fd2a0695903cf261a5b4e19dc..ebcfa427cca6cc2791
> > a1701a3515ef6515779aa4 100644
> > --- a/drivers/mmc/host/sdhci-esdhc-imx.c
> > +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
> > @@ -33,6 +33,8 @@
> >  #define ESDHC_SYS_CTRL_DTOCV_MASK	0x0f
> >  #define	ESDHC_CTRL_D3CD			0x08
> >  #define ESDHC_BURST_LEN_EN_INCR		(1 << 27)
> > +#define ESDHC_SYS_CTRL			0x2c
> > +#define ESDHC_SYS_CTRL_IPP_RST_N	BIT(23)
> >  /* VENDOR SPEC register */
> >  #define ESDHC_VENDOR_SPEC		0xc0
> >  #define  ESDHC_VENDOR_SPEC_SDIO_QUIRK	(1 << 1)
> > @@ -1402,6 +1404,15 @@ static u32 esdhc_cqhci_irq(struct sdhci_host
> > *host, u32 intmask)
> >  	return 0;
> >  }
> >
> > +static void esdhc_hw_reset(struct sdhci_host *host) {
> > +	esdhc_clrset_le(host, ESDHC_SYS_CTRL_IPP_RST_N, 0,
> > ESDHC_SYS_CTRL);
> > +	udelay(10);
> > +	esdhc_clrset_le(host, ESDHC_SYS_CTRL_IPP_RST_N,
> > +			ESDHC_SYS_CTRL_IPP_RST_N,
> > ESDHC_SYS_CTRL);
> > +	udelay(300);
> 
> Please add a comment on why 10us or 300us? This is board related or soc
> related or card related?

Agree, please add comment and explain.

Regards
Haibo Chen
> 
> Thanks,
> Peng.
> 
> > +}
> > +
> >  static struct sdhci_ops sdhci_esdhc_ops = {
> >  	.read_l = esdhc_readl_le,
> >  	.read_w = esdhc_readw_le,
> > @@ -1420,6 +1431,7 @@ static struct sdhci_ops sdhci_esdhc_ops = {
> >  	.reset = esdhc_reset,
> >  	.irq = esdhc_cqhci_irq,
> >  	.dump_vendor_regs = esdhc_dump_debug_regs,
> > +	.hw_reset = esdhc_hw_reset,
> >  };
> >
> >  static const struct sdhci_pltfm_data sdhci_esdhc_imx_pdata = {
> >
> > ---
> > base-commit: 9852d85ec9d492ebef56dc5f229416c925758edc
> > change-id: 20241027-imx-emmc-reset-7127d311174c
> >
> > Best regards,
> > --
> > Josua Mayer <josua@xxxxxxxxxxxxx>
> >





[Index of Archives]     [Linux Memonry Technology]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux