RE: [PATCH] mmc: renesas_sdhi: fix regression with hard reset on old SDHIs

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

 



Hi All,

Just to add, I made the below changes to test cd using SDHI IRQ rather than gpio interrupt on RZ/G2M board.

diff --git a/arch/arm64/boot/dts/renesas/hihope-common.dtsi b/arch/arm64/boot/dts/renesas/hihope-common.dtsi
index 0c7e6f790590..334225c39003 100644
--- a/arch/arm64/boot/dts/renesas/hihope-common.dtsi
+++ b/arch/arm64/boot/dts/renesas/hihope-common.dtsi
@@ -225,15 +225,29 @@
        };
 
        sdhi0_pins: sd0 {
-               groups = "sdhi0_data4", "sdhi0_ctrl";
-               function = "sdhi0";
-               power-source = <3300>;
+               sd0_data {
+                       groups = "sdhi0_data4", "sdhi0_ctrl";
+                       function = "sdhi0";
+                       power-source = <3300>;
+               };
+
+               sd0_mux {
+                       groups = "sdhi0_cd";
+                       function = "sdhi0";
+               };
        };
 
        sdhi0_pins_uhs: sd0_uhs {
-               groups = "sdhi0_data4", "sdhi0_ctrl";
-               function = "sdhi0";
-               power-source = <1800>;
+               sd0_data_uhs {
+                       groups = "sdhi0_data4", "sdhi0_ctrl";
+                       function = "sdhi0";
+                       power-source = <1800>;
+               };
+
+               sd0_mux_uhs {
+                       groups = "sdhi0_cd";
+                       function = "sdhi0";
+               };
        };
 
        sdhi2_pins: sd2 {
@@ -294,7 +308,6 @@
 
        vmmc-supply = <&reg_3p3v>;
        vqmmc-supply = <&vccq_sdhi0>;
-       cd-gpios = <&gpio3 12 GPIO_ACTIVE_LOW>;

Regards,
Biju

> -----Original Message-----
> From: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
> Sent: 06 October 2021 13:46
> To: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx>; linux-
> mmc@xxxxxxxxxxxxxxx
> Cc: linux-renesas-soc@xxxxxxxxxxxxxxx; Geert Uytterhoeven
> <geert+renesas@xxxxxxxxx>; Yoshihiro Shimoda
> <yoshihiro.shimoda.uh@xxxxxxxxxxx>; Geert Uytterhoeven
> <geert+renesas@xxxxxxxxx>
> Subject: RE: [PATCH] mmc: renesas_sdhi: fix regression with hard reset on
> old SDHIs
> 
> Hi All,
> 
> I have reproduced this issue on RZ/G2M pin by configuring cd using SDHI
> instead of gpio irq.
> After applying the patch card detection/removal works as expected.
> 
> Looks like the issue is present on R-Car Gen3 boards with cd as pin(ie,
> card detection/removal using SDHI IRQ).
> I will post a patch to fixing this issue.
> 
> Please find the logs
> 
> With IRQ fix on reset function
> -----------------------------------
>     3.090956] renesas_sdhi_internal_dmac ee100000.mmc: mmc1 base at
> 0x00000000ee100000, max clock rate 200 MHz
> [    4.855266] mmc1: new ultra high speed SDR104 SDHC card at address aaaa
> [    4.865396] mmcblk1: mmc1:aaaa SP32G 29.7 GiB
> [    4.885474]  mmcblk1: p1
> 
> 
> root@hihope-rzg2m:~# [   60.220648] mmc1: card aaaa removed
> [   61.613520] mmc1: new ultra high speed SDR104 SDHC card at address aaaa
> [   61.626103] mmcblk1: mmc1:aaaa SP32G 29.7 GiB
> [   61.647925]  mmcblk1: p1
> 
> root@hihope-rzg2m:~# cat /proc/interrupts | grep ee100000.mmc
> 162:       2158          0          0          0          0          0
> GIC-0 197 Level     ee100000.mmc
> 
> 
> without IRQ fix.
> -----------------
> 
> renesas_sdhi_internal_dmac ee140000.mmc: mmc2 base at 0x00000000ee140000,
> max clock rate 200 MHz
> 
> But there is no card detection during boot.
> it is not detecting card removal/removal at all
> 
> root@hihope-rzg2m:~# cat /proc/interrupts | grep ee100000.mmc
> 162:          0          0          0          0          0          0
> GIC-0 197 Level     ee100000.mmc
> root@hihope-rzg2m:~#
> 
> 
> regards,
> Biju
> 
> 
> 
> > -----Original Message-----
> > From: Biju Das
> > Sent: 05 October 2021 18:03
> > To: 'Wolfram Sang' <wsa+renesas@xxxxxxxxxxxxxxxxxxxx>; linux-
> > mmc@xxxxxxxxxxxxxxx
> > Cc: linux-renesas-soc@xxxxxxxxxxxxxxx; Geert Uytterhoeven
> > <geert+renesas@xxxxxxxxx>; Yoshihiro Shimoda
> > <yoshihiro.shimoda.uh@xxxxxxxxxxx>; Geert Uytterhoeven
> > <geert+renesas@xxxxxxxxx>
> > Subject: RE: [PATCH] mmc: renesas_sdhi: fix regression with hard reset
> > on old SDHIs
> >
> > Hi Wolfram,
> >
> > On my RZ/G2L board, if I configure card detection irq from SDHI,
> > instead of card detection using gpio interrupt, then it is missing
> > card detection interrupt after reset.
> >
> > Just wondering, does it work on R-Car with CD irq from SDHI instead of
> > card detection using gpio interrupt?
> >
> > With the below changes, I am getting cd interrupts from SDHI after
> reset.
> >
> > diff --git a/drivers/mmc/host/renesas_sdhi_core.c
> > b/drivers/mmc/host/renesas_sdhi_core.c
> > index a4407f391f66..32f34de1a2a6 100644
> > --- a/drivers/mmc/host/renesas_sdhi_core.c
> > +++ b/drivers/mmc/host/renesas_sdhi_core.c
> > @@ -561,6 +561,8 @@ static void renesas_sdhi_reset(struct
> > tmio_mmc_host
> > *host)
> >                 /* Unknown why but without polling reset status, it
> > will hang */
> >                 read_poll_timeout(reset_control_status, ret, ret == 0,
> > 1, 100,
> >                                   false, priv->rstc);
> > +
> > +               tmio_mmc_enable_mmc_irqs(host, TMIO_MASK_CMD);
> >                 /* At least SDHI_VER_GEN2_SDR50 needs manual release
> > of reset */
> >
> >
> > Regards,
> > Biju
> >
> >
> > > -----Original Message-----
> > > From: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx>
> > > Sent: 26 August 2021 09:21
> > > To: linux-mmc@xxxxxxxxxxxxxxx
> > > Cc: linux-renesas-soc@xxxxxxxxxxxxxxx; Geert Uytterhoeven
> > > <geert+renesas@xxxxxxxxx>; Yoshihiro Shimoda
> > > <yoshihiro.shimoda.uh@xxxxxxxxxxx>; Wolfram Sang <wsa+renesas@sang-
> > > engineering.com>
> > > Subject: [PATCH] mmc: renesas_sdhi: fix regression with hard reset
> > > on old SDHIs
> > >
> > > Old SDHI instances have a default value for the reset register which
> > > keeps it in reset state by default. So, when applying a hard reset
> > > we need to manually leave the soft reset state as well. Later SDHI
> > > instances have a different default value, the one we write manually
> now.
> > >
> > > Fixes: b4d86f37eacb ("mmc: renesas_sdhi: do hard reset if possible")
> > > Signed-off-by: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx>
> > > ---
> > >
> > > Geez, typical SDHI nastiness here...
> > >
> > > Geert: I think this fixes the issue you saw on Koelsch. It works
> > > fine on my Lager now at least. Can you please test and tag if all goes
> well?
> > > It would be great to have this in 5.14 but it definately needs
> > > Geert's confirmation first.
> > >
> > >  drivers/mmc/host/renesas_sdhi_core.c | 2 ++
> > >  1 file changed, 2 insertions(+)
> > >
> > > diff --git a/drivers/mmc/host/renesas_sdhi_core.c
> > > b/drivers/mmc/host/renesas_sdhi_core.c
> > > index 6fc4cf3c9dce..a4407f391f66 100644
> > > --- a/drivers/mmc/host/renesas_sdhi_core.c
> > > +++ b/drivers/mmc/host/renesas_sdhi_core.c
> > > @@ -561,6 +561,8 @@ static void renesas_sdhi_reset(struct
> > > tmio_mmc_host
> > > *host)
> > >  		/* Unknown why but without polling reset status, it will hang
> > */
> > >  		read_poll_timeout(reset_control_status, ret, ret == 0, 1, 100,
> > >  				  false, priv->rstc);
> > > +		/* At least SDHI_VER_GEN2_SDR50 needs manual release of reset
> > > */
> > > +		sd_ctrl_write16(host, CTL_RESET_SD, 0x0001);
> > >  		priv->needs_adjust_hs400 = false;
> > >  		renesas_sdhi_set_clock(host, host->clk_cache);
> > >  	} else if (priv->scc_ctl) {
> > > --
> > > 2.30.2





[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