* [PATCH v2 0/3] arm64: dts: sun50i: H6: Enable SPI controller @ 2020-01-16 0:56 Andre Przywara [not found] ` <20200116005654.27672-1-andre.przywara-5wv7dgnIgG8@public.gmane.org> 0 siblings, 1 reply; 6+ messages in thread From: Andre Przywara @ 2020-01-16 0:56 UTC (permalink / raw) To: Maxime Ripard, Chen-Yu Tsai Cc: linux-spi-u79uwXL29TY76Z2rM5mHXA, Mark Brown, Icenowy Zheng, Mark Rutland, Rob Herring, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, devicetree-u79uwXL29TY76Z2rM5mHXA Even though the SPI controller in the Allwinner H6 SoC is more advanced than in the previous generations (it supports 3-wire and 4-wire mode), the register set stays backwards-compatible. So we can use the existing driver to use the "normal" SPI mode, for instance to access the SPI flash soldered on the Pine H64 board. These two patches allow this by adding the SPI controller nodes to the DT. The compatible strings include an H6 specific name, so that any future 4-wire enhancements for instance would be automatically usable once the driver learns this new trick. For now we use the H3 fallback name to bind the current driver. This time I tested this actual branch (on top of sunxi/dt-for-5.6), on a Pine H64, both the internal SPI flash as well with SPI flash connected to the other SPI controller available on the GPIO headers. As the SPI0-CS0 pin clashes with the eMMC CMD pin, we keep this node disabled by default, to avoid losing the eMMC if it probes last. People (or U-Boot) can enable it if needed. Cheers, Andre. Changelog v1 ... v2: - comment on pinmux clash between eMMC and SPI - disable Pine H64 SPI flash node by default - add binding doc for the new compatible string Andre Przywara (3): arm64: dts: sun50i: H6: Add SPI controllers nodes and pinmuxes arm64: dts: allwinner: h6: Pine H64: Add SPI flash node dt-bindings: spi: sunxi: Document new compatible strings .../bindings/spi/allwinner,sun6i-a31-spi.yaml | 12 +++-- .../boot/dts/allwinner/sun50i-h6-pine-h64.dts | 19 ++++++++ arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi | 55 ++++++++++++++++++++++ 3 files changed, 83 insertions(+), 3 deletions(-) -- 2.14.5 ^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <20200116005654.27672-1-andre.przywara-5wv7dgnIgG8@public.gmane.org>]
* [PATCH v2 1/3] arm64: dts: sun50i: H6: Add SPI controllers nodes and pinmuxes [not found] ` <20200116005654.27672-1-andre.przywara-5wv7dgnIgG8@public.gmane.org> @ 2020-01-16 0:56 ` Andre Przywara 2020-01-16 0:56 ` [PATCH v2 2/3] arm64: dts: allwinner: h6: Pine H64: Add SPI flash node Andre Przywara 2020-01-16 0:56 ` [PATCH v2 3/3] dt-bindings: spi: sunxi: Document new compatible strings Andre Przywara 2 siblings, 0 replies; 6+ messages in thread From: Andre Przywara @ 2020-01-16 0:56 UTC (permalink / raw) To: Maxime Ripard, Chen-Yu Tsai Cc: linux-spi-u79uwXL29TY76Z2rM5mHXA, Mark Brown, Icenowy Zheng, Mark Rutland, Rob Herring, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, devicetree-u79uwXL29TY76Z2rM5mHXA The Allwinner H6 SoC contains two SPI controllers similar to the H3/A64, but with the added capability of 3-wire and 4-wire operation modes. For now the driver does not support those, but the SPI registers are fully backwards-compatible, just adding bits and registers which were formerly reserved. So we can use the existing driver in "legacy" SPI modes, for instance to access the SPI NOR flash soldered on the PineH64 board. We use an H6 specific compatible string in addition to the existing H3 string, so when the driver later gains QSPI support, it should work automatically without any DT changes. Tested by accessing the SPI flash on a Pine H64 board (SPI0), also connecting another SPI flash to the SPI1 header pins. Signed-off-by: Andre Przywara <andre.przywara-5wv7dgnIgG8@public.gmane.org> --- arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi | 55 ++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi index 3329283e38ab..41b58ffa8596 100644 --- a/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi +++ b/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi @@ -338,6 +338,31 @@ bias-pull-up; }; + /omit-if-no-ref/ + spi0_pins: spi0-pins { + pins = "PC0", "PC2", "PC3"; + function = "spi0"; + }; + + /* pin shared with MMC2-CMD (eMMC) */ + /omit-if-no-ref/ + spi0_cs_pin: spi0-cs-pin { + pins = "PC5"; + function = "spi0"; + }; + + /omit-if-no-ref/ + spi1_pins: spi1-pins { + pins = "PH4", "PH5", "PH6"; + function = "spi1"; + }; + + /omit-if-no-ref/ + spi1_cs_pin: spi1-cs-pin { + pins = "PH3"; + function = "spi1"; + }; + spdif_tx_pin: spdif-tx-pin { pins = "PH7"; function = "spdif"; @@ -504,6 +529,36 @@ #size-cells = <0>; }; + spi0: spi@5010000 { + compatible = "allwinner,sun50i-h6-spi", + "allwinner,sun8i-h3-spi"; + reg = <0x05010000 0x1000>; + interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>; + clock-names = "ahb", "mod"; + dmas = <&dma 22>, <&dma 22>; + dma-names = "rx", "tx"; + resets = <&ccu RST_BUS_SPI0>; + status = "disabled"; + #address-cells = <1>; + #size-cells = <0>; + }; + + spi1: spi@5011000 { + compatible = "allwinner,sun50i-h6-spi", + "allwinner,sun8i-h3-spi"; + reg = <0x05011000 0x1000>; + interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&ccu CLK_BUS_SPI1>, <&ccu CLK_SPI1>; + clock-names = "ahb", "mod"; + dmas = <&dma 23>, <&dma 23>; + dma-names = "rx", "tx"; + resets = <&ccu RST_BUS_SPI1>; + status = "disabled"; + #address-cells = <1>; + #size-cells = <0>; + }; + emac: ethernet@5020000 { compatible = "allwinner,sun50i-h6-emac", "allwinner,sun50i-a64-emac"; -- 2.14.5 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/3] arm64: dts: allwinner: h6: Pine H64: Add SPI flash node [not found] ` <20200116005654.27672-1-andre.przywara-5wv7dgnIgG8@public.gmane.org> 2020-01-16 0:56 ` [PATCH v2 1/3] arm64: dts: sun50i: H6: Add SPI controllers nodes and pinmuxes Andre Przywara @ 2020-01-16 0:56 ` Andre Przywara 2020-01-16 0:56 ` [PATCH v2 3/3] dt-bindings: spi: sunxi: Document new compatible strings Andre Przywara 2 siblings, 0 replies; 6+ messages in thread From: Andre Przywara @ 2020-01-16 0:56 UTC (permalink / raw) To: Maxime Ripard, Chen-Yu Tsai Cc: linux-spi-u79uwXL29TY76Z2rM5mHXA, Mark Brown, Icenowy Zheng, Mark Rutland, Rob Herring, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, devicetree-u79uwXL29TY76Z2rM5mHXA The Pine H64 board comes with SPI flash soldered on the board, connected to the SPI0 pins (so it can also boot from there). Add the required SPI flash DT node to describe this. Unfortunately the SPI CS0 pin collides with the eMMC CMD pin, so we can't use both eMMC and SPI flash at the same time (the first to claim the pin would win, the other's probe routine would then fail). To avoid losing the more useful eMMC device by chance, mark the SPI device as "disabled" for now. A user or some U-Boot code could fix this up if needed, for instance if no eMMC has been detected (it's socketed). Signed-off-by: Andre Przywara <andre.przywara-5wv7dgnIgG8@public.gmane.org> --- arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dts b/arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dts index d1c2aa5b3a20..3c9dd0d69754 100644 --- a/arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dts +++ b/arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dts @@ -14,6 +14,7 @@ aliases { ethernet0 = &emac; serial0 = &uart0; + spi0 = &spi0; }; chosen { @@ -278,6 +279,24 @@ vcc-pm-supply = <®_aldo1>; }; +/* + * The CS pin is shared with the MMC2 CMD pin, so we cannot have the SPI + * flash and eMMC at the same time, as one of them would fail probing. + * Disable SPI0 in here, to prefer the more useful eMMC. U-Boot can + * fix this up in no eMMC is connected. + */ +&spi0 { + pinctrl-0 = <&spi0_pins>, <&spi0_cs_pin>; + pinctrl-names = "default"; + status = "disabled"; + + flash@0 { + compatible = "winbond,w25q128", "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <4000000>; + }; +}; + &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_ph_pins>; -- 2.14.5 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 3/3] dt-bindings: spi: sunxi: Document new compatible strings [not found] ` <20200116005654.27672-1-andre.przywara-5wv7dgnIgG8@public.gmane.org> 2020-01-16 0:56 ` [PATCH v2 1/3] arm64: dts: sun50i: H6: Add SPI controllers nodes and pinmuxes Andre Przywara 2020-01-16 0:56 ` [PATCH v2 2/3] arm64: dts: allwinner: h6: Pine H64: Add SPI flash node Andre Przywara @ 2020-01-16 0:56 ` Andre Przywara [not found] ` <20200116005654.27672-4-andre.przywara-5wv7dgnIgG8@public.gmane.org> 2 siblings, 1 reply; 6+ messages in thread From: Andre Przywara @ 2020-01-16 0:56 UTC (permalink / raw) To: Maxime Ripard, Chen-Yu Tsai Cc: linux-spi-u79uwXL29TY76Z2rM5mHXA, Mark Brown, Icenowy Zheng, Mark Rutland, Rob Herring, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, devicetree-u79uwXL29TY76Z2rM5mHXA The Allwinner H6 SPI controller has advanced features over the H3 version, but remains compatible with it. Document the usual "specific", "fallback" compatible string pair. Also add the R40 version while at it. Signed-off-by: Andre Przywara <andre.przywara-5wv7dgnIgG8@public.gmane.org> --- .../devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml b/Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml index f36c46d236d7..c19dfbe42d90 100644 --- a/Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml +++ b/Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml @@ -18,9 +18,15 @@ properties: "#size-cells": true compatible: - enum: - - allwinner,sun6i-a31-spi - - allwinner,sun8i-h3-spi + oneOf: + - const: allwinner,sun6i-a31-spi + - const: allwinner,sun8i-h3-spi + - items: + - const: allwinner,sun8i-r40-spi + - const: allwinner,sun8i-h3-spi + - items: + - const: allwinner,sun50i-h6-spi + - const: allwinner,sun8i-h3-spi reg: maxItems: 1 -- 2.14.5 ^ permalink raw reply related [flat|nested] 6+ messages in thread
[parent not found: <20200116005654.27672-4-andre.przywara-5wv7dgnIgG8@public.gmane.org>]
* Re: [PATCH v2 3/3] dt-bindings: spi: sunxi: Document new compatible strings [not found] ` <20200116005654.27672-4-andre.przywara-5wv7dgnIgG8@public.gmane.org> @ 2020-01-16 14:23 ` Maxime Ripard [not found] ` <20200116142301.w2t4o6pg3dapp3g6-2DbqMqoCcjvhXIiyNabO3w@public.gmane.org> 0 siblings, 1 reply; 6+ messages in thread From: Maxime Ripard @ 2020-01-16 14:23 UTC (permalink / raw) To: Andre Przywara Cc: Chen-Yu Tsai, linux-spi-u79uwXL29TY76Z2rM5mHXA, Mark Brown, Icenowy Zheng, Mark Rutland, Rob Herring, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, devicetree-u79uwXL29TY76Z2rM5mHXA [-- Attachment #1: Type: text/plain, Size: 1586 bytes --] Hi, On Thu, Jan 16, 2020 at 12:56:54AM +0000, Andre Przywara wrote: > The Allwinner H6 SPI controller has advanced features over the H3 > version, but remains compatible with it. > Document the usual "specific", "fallback" compatible string pair. > Also add the R40 version while at it. > > Signed-off-by: Andre Przywara <andre.przywara-5wv7dgnIgG8@public.gmane.org> > --- > .../devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml b/Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml > index f36c46d236d7..c19dfbe42d90 100644 > --- a/Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml > +++ b/Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml > @@ -18,9 +18,15 @@ properties: > "#size-cells": true > > compatible: > - enum: > - - allwinner,sun6i-a31-spi > - - allwinner,sun8i-h3-spi > + oneOf: > + - const: allwinner,sun6i-a31-spi > + - const: allwinner,sun8i-h3-spi > + - items: > + - const: allwinner,sun8i-r40-spi > + - const: allwinner,sun8i-h3-spi > + - items: > + - const: allwinner,sun50i-h6-spi > + - const: allwinner,sun8i-h3-spi Having oneOf: - const: allwinner,sun6i-a31-spi - const: allwinner,sun8i-h3-spi - items: - enum: - allwinner,sun8i-r40-spi - allwinner,sun50i-h6-spi - const: allwinner,sun8i-h3-spi Will be easier to maintain in the long run Maxime [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <20200116142301.w2t4o6pg3dapp3g6-2DbqMqoCcjvhXIiyNabO3w@public.gmane.org>]
* Re: [PATCH v2 3/3] dt-bindings: spi: sunxi: Document new compatible strings [not found] ` <20200116142301.w2t4o6pg3dapp3g6-2DbqMqoCcjvhXIiyNabO3w@public.gmane.org> @ 2020-01-16 14:38 ` Andre Przywara 0 siblings, 0 replies; 6+ messages in thread From: Andre Przywara @ 2020-01-16 14:38 UTC (permalink / raw) To: Maxime Ripard Cc: Chen-Yu Tsai, linux-spi-u79uwXL29TY76Z2rM5mHXA, Mark Brown, Icenowy Zheng, Mark Rutland, Rob Herring, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, devicetree-u79uwXL29TY76Z2rM5mHXA On Thu, 16 Jan 2020 15:23:01 +0100 Maxime Ripard <mripard-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote: Hi, > On Thu, Jan 16, 2020 at 12:56:54AM +0000, Andre Przywara wrote: > > The Allwinner H6 SPI controller has advanced features over the H3 > > version, but remains compatible with it. > > Document the usual "specific", "fallback" compatible string pair. > > Also add the R40 version while at it. > > > > Signed-off-by: Andre Przywara <andre.przywara-5wv7dgnIgG8@public.gmane.org> > > --- > > .../devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml | 12 +++++++++--- > > 1 file changed, 9 insertions(+), 3 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml b/Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml > > index f36c46d236d7..c19dfbe42d90 100644 > > --- a/Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml > > +++ b/Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml > > @@ -18,9 +18,15 @@ properties: > > "#size-cells": true > > > > compatible: > > - enum: > > - - allwinner,sun6i-a31-spi > > - - allwinner,sun8i-h3-spi > > + oneOf: > > + - const: allwinner,sun6i-a31-spi > > + - const: allwinner,sun8i-h3-spi > > + - items: > > + - const: allwinner,sun8i-r40-spi > > + - const: allwinner,sun8i-h3-spi > > + - items: > > + - const: allwinner,sun50i-h6-spi > > + - const: allwinner,sun8i-h3-spi > > Having > > oneOf: > - const: allwinner,sun6i-a31-spi > - const: allwinner,sun8i-h3-spi > - items: > - enum: > - allwinner,sun8i-r40-spi > - allwinner,sun50i-h6-spi > - const: allwinner,sun8i-h3-spi > > Will be easier to maintain in the long run Ah, nice, I tried something like this, based on the example-schema.yaml file, but the example in there is more verbose, and looked much less readable. But your version seems to hit the sweet spot, so I will go with this. Thanks, Andre. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-01-16 14:38 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-01-16 0:56 [PATCH v2 0/3] arm64: dts: sun50i: H6: Enable SPI controller Andre Przywara [not found] ` <20200116005654.27672-1-andre.przywara-5wv7dgnIgG8@public.gmane.org> 2020-01-16 0:56 ` [PATCH v2 1/3] arm64: dts: sun50i: H6: Add SPI controllers nodes and pinmuxes Andre Przywara 2020-01-16 0:56 ` [PATCH v2 2/3] arm64: dts: allwinner: h6: Pine H64: Add SPI flash node Andre Przywara 2020-01-16 0:56 ` [PATCH v2 3/3] dt-bindings: spi: sunxi: Document new compatible strings Andre Przywara [not found] ` <20200116005654.27672-4-andre.przywara-5wv7dgnIgG8@public.gmane.org> 2020-01-16 14:23 ` Maxime Ripard [not found] ` <20200116142301.w2t4o6pg3dapp3g6-2DbqMqoCcjvhXIiyNabO3w@public.gmane.org> 2020-01-16 14:38 ` Andre Przywara
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).