[U-Boot] [PATCH 1/2] arm: sunxi: allwinner spi driver sun6i support
Andre Przywara
andre.przywara at arm.com
Thu Jan 24 11:31:43 UTC 2019
On Thu, 24 Jan 2019 12:21:17 +0100
Alexander Graf <agraf at suse.de> wrote:
> On 24.01.19 12:07, Andre Przywara wrote:
> > On Thu, 24 Jan 2019 11:59:32 +0100
> > Alexander Graf <agraf at suse.de> wrote:
> >
> >> On 24.01.19 11:57, Andre Przywara wrote:
> >>> On Thu, 24 Jan 2019 11:17:03 +0100
> >>> Alexander Graf <agraf at suse.de> wrote:
> >>>
> >>>> On 22.01.19 17:37, Alexander Graf wrote:
> >>>>>
> >>>>>
> >>>>> On 22.01.19 17:28, Alexander Graf wrote:
> >>>>>>
> >>>>>>
> >>>>>> On 22.01.19 17:17, Oskari Lemmelä wrote:
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> On 22.1.2019 16.54, Alexander Graf wrote:
> >>>>>>>>
> >>>>>>>> On 05.01.19 18:52, Oskari Lemmela wrote:
> >>>>>>>>> Minimal changes to support sun6i based Allwinner SOCs
> >>>>>>>>> Changes are based to SPL driver
> >>>>>>>>> arch/arm/mach-sunxi/spl_spi_sunxi.c
> >>>>>>>>>
> >>>>>>>>> Signed-off-by: Oskari Lemmela <oskari at lemmela.net>
> >>>>>>>> I just tried to see if this patch gives me "sf" access on a
> >>>>>>>> SoPine system. Unfortunately, it seems as if the sun4i_spi
> >>>>>>>> driver doesn't even get probed?
> >>>>>>>>
> >>>>>>>> How did you manage to actually make use of this driver?
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Alex
> >>>>>>>
> >>>>>>> You need to add spi0 alias to dts and enable needed drivers to
> >>>>>>> defconfig. You can take look from Jagan's patch [1].
> >>>>>>>
> >>>>>>> I didn't include those changes as Maxime already commented [2]
> >>>>>>> that Kconfig depends/defaults should be modified first.
> >>>>>>
> >>>>>> I don't see any relation between the dts change and the Kconfig
> >>>>>> dependency issues?
> >>>>>>
> >>>>>> But thanks for the pointer, I'll give this patch a try.
> >>>>>
> >>>>> Ok, so I now get the SPI controller initialized, but it seems to
> >>>>> only returns zeros when trying to access the SPI flash device.
> >>>>>
> >>>>> In other words, it doesn't work for me :). But maybe I'm missing
> >>>>> all the other clk patches to actually get it working?
> >>>>
> >>>> Ok, so turns out the problem is that you can't have eMMC and SPI
> >>>> both working. I don't quite know yet whether this is just a
> >>>> pinmux problem (so potentially software workaroundable) or if
> >>>> it's a hardware limitation (eMMC pulling a line required for
> >>>> SPI).
> >>>
> >>> The line that is shared is "DS", which is only needed for higher
> >>> (e)MMC modes (HS-400). At the moment neither Linux nor U-Boot
> >>> implement this mode, and probably U-Boot will never need it: it
> >>> adds software complexity for a questionable performance benefit,
> >>> especially if the flash chips can't keep up with the high
> >>> interface speed anyway.
> >>>
> >>> We addressed this in the DTs (kernel commit fa59dd2ef755).
> >>>
> >>> I am a bit puzzled here as why this happens: I can't find where
> >>> U-Boot would configure PC1 to use the MMC2 function: the
> >>> hard-coded mmc_pinmux_setup() doesn't touch PC1 at all. Maybe
> >>> it's the BootROM configuring this line? So we would need to reset
> >>> it?
> >>>
> >>> As I don't have an eMMC module here at hand right now, this has to
> >>> wait till tonight for further insights.
> >>
> >> A few more data points:
> >>
> >> When I boot w/o eMMC module attached, SPI flash works
> >> When I then plug in the eMMC module, SPI flash still works
> >
> > Plug in with power off (which you should always do)? So it goes
> > through the BootROM?
> >
> >> When I that start initializing the eMMC module, SPI flash fails
> >
> > What do you mean by that, exactly? Accessing eMMC from U-Boot?
>
> Yes, "mmc part" to be precise.
>
> > Because that is the interesting data point, somehow this makes the
> > eMMC module drive the pin.
> >
> >> When I then unplug the eMMC module, SPI flash works again
> >
> > Again, at runtime?
>
> Yup, all of it at runtime. I felt darey and ignored the fact that you
> should really only plug the eMMC module at boot time ;).
>
> The last step definitely did not change pinmux. Hence the conclusion
> that this is line drive collision, not pinmux.
>
> So I guess you're saying that forcing the eMMC into 4-DAT mode would
> make things work?
Technically DS is for HS-400, which is a step beyond 8-bit bus width.
So just enabling 8 bit should not affect the DS line. There is a bit in
the MMC controller to enable HS-400, but I don't see that we would set
it (we actually don't even define the register).
You could try to force eMMC to 4 bit to check this theory, by
hack-removing the MMC_MODE_8BIT line in sunxi_mmc_init() in
drivers/mmc/sunxi-mmc.c (we don't use DM_MMC yet, so it's in the hacky
part and ignores the DT property)
Cheers,
Andre.
More information about the U-Boot
mailing list