Message ID | 20240630063845.116307-1-kanakshilledar@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | arch: riscv: thead: implement basic spi | expand |
On Sun, Jun 30, 2024 at 12:08:20PM +0530, Kanak Shilledar wrote: > implemented basic spi support for TH1520 SoC. > created a fixed clock and a simple spi0 node. > updated the matching binding to include thead,th1520-spi as compatible. > added a spidev device in devicetree which will utilise the spi0 node. > this is usually reserved for a SPI NOR flash which is left unpopulated > underneath the carrier board. I performed a SPI self loop test using > tools/spi/spidev_test.c and tried sending `\xDE\xAD\xBE\xEF` and verified > it is being received correctly. i updated the of_device_id struct in > drivers/spi/spi-dw-mmio.c to include "thead,th1520-spi" as the compatible. > this patch also adds basic spi support on beaglev ahead which shares the > same TH1520 SoC. i have only tested on LicheePi 4A. > > Signed-off-by: Kanak Shilledar <kanakshilledar@gmail.com> > --- > .../devicetree/bindings/spi/snps,dw-apb-ssi.yaml | 4 ++++ > .../boot/dts/thead/th1520-beaglev-ahead.dts | 9 +++++++++ > .../boot/dts/thead/th1520-lichee-module-4a.dtsi | 4 ++++ > .../riscv/boot/dts/thead/th1520-lichee-pi-4a.dts | 10 ++++++++++ > arch/riscv/boot/dts/thead/th1520.dtsi | 16 ++++++++++++++++ > drivers/spi/spi-dw-mmio.c | 1 + This needs to be 3 different patches - one for the binding, one for the driver and a final one for the dts files. > + > +&spi0 { > + status = "okay"; > + spidev@0 { "spidev" is not a type of device, the nodename should match the type. > + compatible = "rohm,dh2228fv"; > + reg = <0>; > + spi-max-frequency = <500000>; > + }; > +}; I'll put money on you not having a dh2228fv on this board. Document what you actually have on it please, not what allows you to probe the spidev driver in linux. Thanks, Conor.
On Sun, Jun 30, 2024 at 7:22 PM Conor Dooley <conor@kernel.org> wrote: > > On Sun, Jun 30, 2024 at 12:08:20PM +0530, Kanak Shilledar wrote: > > implemented basic spi support for TH1520 SoC. > > created a fixed clock and a simple spi0 node. > > updated the matching binding to include thead,th1520-spi as compatible. > > added a spidev device in devicetree which will utilise the spi0 node. > > this is usually reserved for a SPI NOR flash which is left unpopulated > > underneath the carrier board. I performed a SPI self loop test using > > tools/spi/spidev_test.c and tried sending `\xDE\xAD\xBE\xEF` and verified > > it is being received correctly. i updated the of_device_id struct in > > drivers/spi/spi-dw-mmio.c to include "thead,th1520-spi" as the compatible. > > this patch also adds basic spi support on beaglev ahead which shares the > > same TH1520 SoC. i have only tested on LicheePi 4A. > > > > Signed-off-by: Kanak Shilledar <kanakshilledar@gmail.com> > > --- > > .../devicetree/bindings/spi/snps,dw-apb-ssi.yaml | 4 ++++ > > .../boot/dts/thead/th1520-beaglev-ahead.dts | 9 +++++++++ > > .../boot/dts/thead/th1520-lichee-module-4a.dtsi | 4 ++++ > > .../riscv/boot/dts/thead/th1520-lichee-pi-4a.dts | 10 ++++++++++ > > arch/riscv/boot/dts/thead/th1520.dtsi | 16 ++++++++++++++++ > > drivers/spi/spi-dw-mmio.c | 1 + > > This needs to be 3 different patches - one for the binding, one for the > driver and a final one for the dts files. I will convert this into a patch set of 3 patch as you suggested. > > + > > +&spi0 { > > + status = "okay"; > > + spidev@0 { > > "spidev" is not a type of device, the nodename should match the type. > > > + compatible = "rohm,dh2228fv"; > > + reg = <0>; > > + spi-max-frequency = <500000>; > > + }; > > +}; > > I'll put money on you not having a dh2228fv on this board. Document what > you actually have on it please, not what allows you to probe the spidev > driver in linux. Yes, you are right! Actually as per the vendor's kernel it should be a "spi-nor" device from winbond. I changed it to spidev for testing purposes. Shall I just leave it with status = "okay" or add the node for that spi-nor flash? > Thanks, > Conor. Thanks and Regards, Kanak Shilledar
On Mon, Jul 01, 2024 at 02:43:46PM +0530, Kanak Shilledar wrote: > On Sun, Jun 30, 2024 at 7:22 PM Conor Dooley <conor@kernel.org> wrote: > > > > On Sun, Jun 30, 2024 at 12:08:20PM +0530, Kanak Shilledar wrote: > > > implemented basic spi support for TH1520 SoC. > > > created a fixed clock and a simple spi0 node. > > > updated the matching binding to include thead,th1520-spi as compatible. > > > added a spidev device in devicetree which will utilise the spi0 node. > > > this is usually reserved for a SPI NOR flash which is left unpopulated > > > underneath the carrier board. I performed a SPI self loop test using > > > tools/spi/spidev_test.c and tried sending `\xDE\xAD\xBE\xEF` and verified > > > it is being received correctly. i updated the of_device_id struct in > > > drivers/spi/spi-dw-mmio.c to include "thead,th1520-spi" as the compatible. > > > this patch also adds basic spi support on beaglev ahead which shares the > > > same TH1520 SoC. i have only tested on LicheePi 4A. > > > > > > Signed-off-by: Kanak Shilledar <kanakshilledar@gmail.com> > > > --- > > > .../devicetree/bindings/spi/snps,dw-apb-ssi.yaml | 4 ++++ > > > .../boot/dts/thead/th1520-beaglev-ahead.dts | 9 +++++++++ > > > .../boot/dts/thead/th1520-lichee-module-4a.dtsi | 4 ++++ > > > .../riscv/boot/dts/thead/th1520-lichee-pi-4a.dts | 10 ++++++++++ > > > arch/riscv/boot/dts/thead/th1520.dtsi | 16 ++++++++++++++++ > > > drivers/spi/spi-dw-mmio.c | 1 + > > > > This needs to be 3 different patches - one for the binding, one for the > > driver and a final one for the dts files. > > I will convert this into a patch set of 3 patch as you suggested. > > > > + > > > +&spi0 { > > > + status = "okay"; > > > + spidev@0 { > > > > "spidev" is not a type of device, the nodename should match the type. > > > > > + compatible = "rohm,dh2228fv"; > > > + reg = <0>; > > > + spi-max-frequency = <500000>; > > > + }; > > > +}; > > > > I'll put money on you not having a dh2228fv on this board. Document what > > you actually have on it please, not what allows you to probe the spidev > > driver in linux. > > Yes, you are right! Actually as per the vendor's kernel it should be a > "spi-nor" device from winbond. > I changed it to spidev for testing purposes. Shall I just leave it > with status = "okay" or add the node for > that spi-nor flash? If it isn't on the board, it shouldn't be in the devicetree. Please add the actual device that is here instead. If there's a board with nothing connected, then please don't add anything. Thanks, Conor.
On Mon, Jul 1, 2024 at 3:03 PM Conor Dooley <conor@kernel.org> wrote: > > On Mon, Jul 01, 2024 at 02:43:46PM +0530, Kanak Shilledar wrote: > > On Sun, Jun 30, 2024 at 7:22 PM Conor Dooley <conor@kernel.org> wrote: > > > > > > On Sun, Jun 30, 2024 at 12:08:20PM +0530, Kanak Shilledar wrote: > > > > implemented basic spi support for TH1520 SoC. > > > > created a fixed clock and a simple spi0 node. > > > > updated the matching binding to include thead,th1520-spi as compatible. > > > > added a spidev device in devicetree which will utilise the spi0 node. > > > > this is usually reserved for a SPI NOR flash which is left unpopulated > > > > underneath the carrier board. I performed a SPI self loop test using > > > > tools/spi/spidev_test.c and tried sending `\xDE\xAD\xBE\xEF` and verified > > > > it is being received correctly. i updated the of_device_id struct in > > > > drivers/spi/spi-dw-mmio.c to include "thead,th1520-spi" as the compatible. > > > > this patch also adds basic spi support on beaglev ahead which shares the > > > > same TH1520 SoC. i have only tested on LicheePi 4A. > > > > > > > > Signed-off-by: Kanak Shilledar <kanakshilledar@gmail.com> > > > > --- > > > > .../devicetree/bindings/spi/snps,dw-apb-ssi.yaml | 4 ++++ > > > > .../boot/dts/thead/th1520-beaglev-ahead.dts | 9 +++++++++ > > > > .../boot/dts/thead/th1520-lichee-module-4a.dtsi | 4 ++++ > > > > .../riscv/boot/dts/thead/th1520-lichee-pi-4a.dts | 10 ++++++++++ > > > > arch/riscv/boot/dts/thead/th1520.dtsi | 16 ++++++++++++++++ > > > > drivers/spi/spi-dw-mmio.c | 1 + > > > > > > This needs to be 3 different patches - one for the binding, one for the > > > driver and a final one for the dts files. > > > > I will convert this into a patch set of 3 patch as you suggested. > > > > > > + > > > > +&spi0 { > > > > + status = "okay"; > > > > + spidev@0 { > > > > > > "spidev" is not a type of device, the nodename should match the type. > > > > > > > + compatible = "rohm,dh2228fv"; > > > > + reg = <0>; > > > > + spi-max-frequency = <500000>; > > > > + }; > > > > +}; > > > > > > I'll put money on you not having a dh2228fv on this board. Document what > > > you actually have on it please, not what allows you to probe the spidev > > > driver in linux. > > > > Yes, you are right! Actually as per the vendor's kernel it should be a > > "spi-nor" device from winbond. > > I changed it to spidev for testing purposes. Shall I just leave it > > with status = "okay" or add the node for > > that spi-nor flash? > > If it isn't on the board, it shouldn't be in the devicetree. Please add > the actual device that is here instead. If there's a board with nothing > connected, then please don't add anything. Alright got it. The SPI flash pad is left unpopulated on the LicheePi 4A board. Thus, I will not mention it in the devicetree. > Thanks, > Conor. Thanks and Regards, Kanak Shilledar
diff --git a/Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml b/Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml index fde3776a558b..bccd00a1ddd0 100644 --- a/Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml +++ b/Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml @@ -88,6 +88,10 @@ properties: - renesas,r9a06g032-spi # RZ/N1D - renesas,r9a06g033-spi # RZ/N1S - const: renesas,rzn1-spi # RZ/N1 + - description: T-HEAD TH1520 SoC SPI Controller + items: + - const: thead,th1520-spi + - const: snps,dw-apb-ssi reg: minItems: 1 diff --git a/arch/riscv/boot/dts/thead/th1520-beaglev-ahead.dts b/arch/riscv/boot/dts/thead/th1520-beaglev-ahead.dts index d9b4de9e4757..3103b74e0288 100644 --- a/arch/riscv/boot/dts/thead/th1520-beaglev-ahead.dts +++ b/arch/riscv/boot/dts/thead/th1520-beaglev-ahead.dts @@ -17,6 +17,7 @@ aliases { gpio1 = &gpio1; gpio2 = &gpio2; gpio3 = &gpio3; + spi0 = &spi0; serial0 = &uart0; serial1 = &uart1; serial2 = &uart2; @@ -52,6 +53,10 @@ &sdhci_clk { clock-frequency = <198000000>; }; +&spi_clk { + clock-frequency = <396000000>; +}; + &uart_sclk { clock-frequency = <100000000>; }; @@ -79,3 +84,7 @@ &sdio0 { &uart0 { status = "okay"; }; + +&spi0 { + status = "okay"; +}; diff --git a/arch/riscv/boot/dts/thead/th1520-lichee-module-4a.dtsi b/arch/riscv/boot/dts/thead/th1520-lichee-module-4a.dtsi index 1365d3a512a3..6939bd36560c 100644 --- a/arch/riscv/boot/dts/thead/th1520-lichee-module-4a.dtsi +++ b/arch/riscv/boot/dts/thead/th1520-lichee-module-4a.dtsi @@ -33,6 +33,10 @@ &sdhci_clk { clock-frequency = <198000000>; }; +&spi_clk { + clock-frequency = <396000000>; +}; + &uart_sclk { clock-frequency = <100000000>; }; diff --git a/arch/riscv/boot/dts/thead/th1520-lichee-pi-4a.dts b/arch/riscv/boot/dts/thead/th1520-lichee-pi-4a.dts index 9a3884a73e13..26f82fe91489 100644 --- a/arch/riscv/boot/dts/thead/th1520-lichee-pi-4a.dts +++ b/arch/riscv/boot/dts/thead/th1520-lichee-pi-4a.dts @@ -14,6 +14,7 @@ aliases { gpio1 = &gpio1; gpio2 = &gpio2; gpio3 = &gpio3; + spi0 = &spi0; serial0 = &uart0; serial1 = &uart1; serial2 = &uart2; @@ -30,3 +31,12 @@ chosen { &uart0 { status = "okay"; }; + +&spi0 { + status = "okay"; + spidev@0 { + compatible = "rohm,dh2228fv"; + reg = <0>; + spi-max-frequency = <500000>; + }; +}; diff --git a/arch/riscv/boot/dts/thead/th1520.dtsi b/arch/riscv/boot/dts/thead/th1520.dtsi index d2fa25839012..f962de663e7e 100644 --- a/arch/riscv/boot/dts/thead/th1520.dtsi +++ b/arch/riscv/boot/dts/thead/th1520.dtsi @@ -140,6 +140,12 @@ apb_clk: apb-clk-clock { #clock-cells = <0>; }; + spi_clk: spi-clock { + compatible = "fixed-clock"; + clock-output-names = "spi_clk"; + #clock-cells = <0>; + }; + uart_sclk: uart-sclk-clock { compatible = "fixed-clock"; clock-output-names = "uart_sclk"; @@ -183,6 +189,16 @@ clint: timer@ffdc000000 { <&cpu3_intc 3>, <&cpu3_intc 7>; }; + spi0: spi@ffe700c000 { + compatible = "thead,th1520-spi", "snps,dw-apb-ssi"; + reg = <0xff 0xe700c000 0x0 0x1000>; + interrupts = <54 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&spi_clk>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + uart0: serial@ffe7014000 { compatible = "snps,dw-apb-uart"; reg = <0xff 0xe7014000 0x0 0x100>; diff --git a/drivers/spi/spi-dw-mmio.c b/drivers/spi/spi-dw-mmio.c index 819907e332c4..39e3d46ebf5d 100644 --- a/drivers/spi/spi-dw-mmio.c +++ b/drivers/spi/spi-dw-mmio.c @@ -419,6 +419,7 @@ static const struct of_device_id dw_spi_mmio_of_match[] = { { .compatible = "microchip,sparx5-spi", dw_spi_mscc_sparx5_init}, { .compatible = "canaan,k210-spi", dw_spi_canaan_k210_init}, { .compatible = "amd,pensando-elba-spi", .data = dw_spi_elba_init}, + { .compatible = "thead,th1520-spi", .data = dw_spi_pssi_init}, { /* end of table */} }; MODULE_DEVICE_TABLE(of, dw_spi_mmio_of_match);
implemented basic spi support for TH1520 SoC. created a fixed clock and a simple spi0 node. updated the matching binding to include thead,th1520-spi as compatible. added a spidev device in devicetree which will utilise the spi0 node. this is usually reserved for a SPI NOR flash which is left unpopulated underneath the carrier board. I performed a SPI self loop test using tools/spi/spidev_test.c and tried sending `\xDE\xAD\xBE\xEF` and verified it is being received correctly. i updated the of_device_id struct in drivers/spi/spi-dw-mmio.c to include "thead,th1520-spi" as the compatible. this patch also adds basic spi support on beaglev ahead which shares the same TH1520 SoC. i have only tested on LicheePi 4A. Signed-off-by: Kanak Shilledar <kanakshilledar@gmail.com> --- .../devicetree/bindings/spi/snps,dw-apb-ssi.yaml | 4 ++++ .../boot/dts/thead/th1520-beaglev-ahead.dts | 9 +++++++++ .../boot/dts/thead/th1520-lichee-module-4a.dtsi | 4 ++++ .../riscv/boot/dts/thead/th1520-lichee-pi-4a.dts | 10 ++++++++++ arch/riscv/boot/dts/thead/th1520.dtsi | 16 ++++++++++++++++ drivers/spi/spi-dw-mmio.c | 1 + 6 files changed, 44 insertions(+)