diff mbox series

arm64: dts: imx8mq: Add QuadSPI controller

Message ID 20190129163457.7107-1-ccaione@baylibre.com (mailing list archive)
State New, archived
Headers show
Series arm64: dts: imx8mq: Add QuadSPI controller | expand

Commit Message

Carlo Caione Jan. 29, 2019, 4:34 p.m. UTC
Add a node for the Freescale/NXP QuadSPI controller with a proper
pinctrl set and enable it for the i.MX8MQ EVK board.

Signed-off-by: Carlo Caione <ccaione@baylibre.com>
---
 arch/arm64/boot/dts/freescale/imx8mq-evk.dts | 27 ++++++++++++++++++++
 arch/arm64/boot/dts/freescale/imx8mq.dtsi    | 13 ++++++++++
 2 files changed, 40 insertions(+)

Comments

Lucas Stach Jan. 29, 2019, 4:42 p.m. UTC | #1
Hi Carlo,

Am Dienstag, den 29.01.2019, 16:34 +0000 schrieb Carlo Caione:
> Add a node for the Freescale/NXP QuadSPI controller with a proper
> pinctrl set and enable it for the i.MX8MQ EVK board.
> 
> > Signed-off-by: Carlo Caione <ccaione@baylibre.com>
> ---
>  arch/arm64/boot/dts/freescale/imx8mq-evk.dts | 27 ++++++++++++++++++++
>  arch/arm64/boot/dts/freescale/imx8mq.dtsi    | 13 ++++++++++
>  2 files changed, 40 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/freescale/imx8mq-evk.dts b/arch/arm64/boot/dts/freescale/imx8mq-evk.dts
> index f74b13aa5aa5..ae181c2a5003 100644
> --- a/arch/arm64/boot/dts/freescale/imx8mq-evk.dts
> +++ b/arch/arm64/boot/dts/freescale/imx8mq-evk.dts
> @@ -137,6 +137,21 @@
> >  	status = "okay";
>  };
>  
> +&spi0 {
> > +	pinctrl-names = "default";
> > +	pinctrl-0 = <&pinctrl_qspi>;
> > +	status = "okay";
> +
> > > +	flash0: n25q256a@0 {
> > +		reg = <0>;
> > +		#address-cells = <1>;
> > +		#size-cells = <1>;
> > +		compatible = "micron,n25q256a", "jedec,spi-nor";
> > +		spi-max-frequency = <29000000>;
> > +		spi-nor,ddr-quad-read-dummy = <6>;
> > +	};
> +};
> +
>  &usdhc1 {
> >  	pinctrl-names = "default", "state_100mhz", "state_200mhz";
> >  	pinctrl-0 = <&pinctrl_usdhc1>;
> @@ -195,6 +210,18 @@
> >  		>;
> >  	};
>  
> > +	pinctrl_qspi: qspigrp {
> > +		fsl,pins = <
> > > +			MX8MQ_IOMUXC_NAND_ALE_QSPI_A_SCLK	0x82
> > > +			MX8MQ_IOMUXC_NAND_CE0_B_QSPI_A_SS0_B	0x82
> > > +			MX8MQ_IOMUXC_NAND_DATA00_QSPI_A_DATA0	0x82
> > > +			MX8MQ_IOMUXC_NAND_DATA01_QSPI_A_DATA1	0x82
> > > +			MX8MQ_IOMUXC_NAND_DATA02_QSPI_A_DATA2	0x82
> > > +			MX8MQ_IOMUXC_NAND_DATA03_QSPI_A_DATA3	0x82
> +
> > +		>;
> > +	};
> +
> >  	pinctrl_reg_usdhc2: regusdhc2grpgpio {
> >  		fsl,pins = <
> > >  			MX8MQ_IOMUXC_SD2_RESET_B_GPIO2_IO19		0x41
> diff --git a/arch/arm64/boot/dts/freescale/imx8mq.dtsi b/arch/arm64/boot/dts/freescale/imx8mq.dtsi
> index dbedc4a5e7fb..e0059f451591 100644
> --- a/arch/arm64/boot/dts/freescale/imx8mq.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx8mq.dtsi
> @@ -516,6 +516,19 @@
> >  			};
> >  		};
>  
> +		spi0: spi@30bb0000 {

30bb0000 is part of the AIPS3 bus address space, so please move this to
the correct location within this bus node.

> +			#address-cells = <1>;
> > +			#size-cells = <0>;
> +			compatible = "fsl,imx7d-qspi";

Please add a "fsl,imx8mq-qspi" compatible here, as was done with all
the other nodes in this file, so we can match this in the driver should
the need arise.

> +			reg = <0x30bb0000 0x10000>, <0x08000000 0x10000000>;
> > +			reg-names = "QuadSPI", "QuadSPI-memory";
> > +			interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
> > +			clocks = <&clk IMX8MQ_CLK_QSPI_ROOT>,
> +			<&clk IMX8MQ_CLK_QSPI_ROOT>;

Please align the second clock reference, as is done for all other
peripheral nodes in this file.

Regards,
Lucas
Carlo Caione Jan. 29, 2019, 4:54 p.m. UTC | #2
On 29/01/2019 16:42, Lucas Stach wrote:
> Hi Carlo,

Hi Lucas,

>> --- a/arch/arm64/boot/dts/freescale/imx8mq.dtsi
>> +++ b/arch/arm64/boot/dts/freescale/imx8mq.dtsi
>> @@ -516,6 +516,19 @@
>>>   			};
>>>   		};
>>   
>> +		spi0: spi@30bb0000 {
> 
> 30bb0000 is part of the AIPS3 bus address space, so please move this to
> the correct location within this bus node.

The problem is that the "QuadSPI-memory" region doesn't fall within the 
memory range of the AIPS3 bus, so the devm_ioremap_resource is failing 
when moving the node there.

>> +			#address-cells = <1>;
>>> +			#size-cells = <0>;
>> +			compatible = "fsl,imx7d-qspi";
> 
> Please add a "fsl,imx8mq-qspi" compatible here, as was done with all
> the other nodes in this file, so we can match this in the driver should
> the need arise.

This is odd since at least for the AmLogic SoCs we are going exactly in 
the opposite direction where we avoid to add unnecessary compatibles if 
that's not strictly required.

>> +			reg = <0x30bb0000 0x10000>, <0x08000000 0x10000000>;
>>> +			reg-names = "QuadSPI", "QuadSPI-memory";
>>> +			interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
>>> +			clocks = <&clk IMX8MQ_CLK_QSPI_ROOT>,
>> +			<&clk IMX8MQ_CLK_QSPI_ROOT>;
> 
> Please align the second clock reference, as is done for all other
> peripheral nodes in this file.

I'll do.

Cheers,

--
Carlo Caione
Lucas Stach Jan. 29, 2019, 5:40 p.m. UTC | #3
Am Dienstag, den 29.01.2019, 16:54 +0000 schrieb Carlo Caione:
> On 29/01/2019 16:42, Lucas Stach wrote:
> > Hi Carlo,
> 
> Hi Lucas,
> 
> > > --- a/arch/arm64/boot/dts/freescale/imx8mq.dtsi
> > > +++ b/arch/arm64/boot/dts/freescale/imx8mq.dtsi
> > > @@ -516,6 +516,19 @@
> > > > > > > >   			};
> > > >   		};
> > > 
> > >   
> > > +		spi0: spi@30bb0000 {
> > 
> > 30bb0000 is part of the AIPS3 bus address space, so please move this to
> > the correct location within this bus node.
> 
> The problem is that the "QuadSPI-memory" region doesn't fall within the 
> memory range of the AIPS3 bus, so the devm_ioremap_resource is failing 
> when moving the node there.

Uh, that's interesting. Normally the DTs are organized along the
control path and I guess the QuadSPI-memory is not really a control
path, but the fast memory access path. Maybe this is something the DT
folks could take a look at.

But then I would still prefer to have the QSPI controller moved into
the correct control bus. I guess we can work around your
devm_ioremap_resource failing issue by adding the QSPI-memory region to
the AIPS3 bus ranges.

> > > +			#address-cells = <1>;
> > > > +			#size-cells = <0>;
> > > 
> > > +			compatible = "fsl,imx7d-qspi";
> > 
> > Please add a "fsl,imx8mq-qspi" compatible here, as was done with all
> > the other nodes in this file, so we can match this in the driver should
> > the need arise.
> 
> This is odd since at least for the AmLogic SoCs we are going exactly in 
> the opposite direction where we avoid to add unnecessary compatibles if 
> that's not strictly required.

It's a safety net, so we don't need to change existing DTBs if it turns
out that a specific SoC integration has a bug that needs a workaround
in the driver.

This is one of things I've proposed in my ELC-E talk "Stable Devicetree
ABI: it's possible!", which was generally well received by the DT
folks.

Regards,
Lucas
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/freescale/imx8mq-evk.dts b/arch/arm64/boot/dts/freescale/imx8mq-evk.dts
index f74b13aa5aa5..ae181c2a5003 100644
--- a/arch/arm64/boot/dts/freescale/imx8mq-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx8mq-evk.dts
@@ -137,6 +137,21 @@ 
 	status = "okay";
 };
 
+&spi0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_qspi>;
+	status = "okay";
+
+	flash0: n25q256a@0 {
+		reg = <0>;
+		#address-cells = <1>;
+		#size-cells = <1>;
+		compatible = "micron,n25q256a", "jedec,spi-nor";
+		spi-max-frequency = <29000000>;
+		spi-nor,ddr-quad-read-dummy = <6>;
+	};
+};
+
 &usdhc1 {
 	pinctrl-names = "default", "state_100mhz", "state_200mhz";
 	pinctrl-0 = <&pinctrl_usdhc1>;
@@ -195,6 +210,18 @@ 
 		>;
 	};
 
+	pinctrl_qspi: qspigrp {
+		fsl,pins = <
+			MX8MQ_IOMUXC_NAND_ALE_QSPI_A_SCLK	0x82
+			MX8MQ_IOMUXC_NAND_CE0_B_QSPI_A_SS0_B	0x82
+			MX8MQ_IOMUXC_NAND_DATA00_QSPI_A_DATA0	0x82
+			MX8MQ_IOMUXC_NAND_DATA01_QSPI_A_DATA1	0x82
+			MX8MQ_IOMUXC_NAND_DATA02_QSPI_A_DATA2	0x82
+			MX8MQ_IOMUXC_NAND_DATA03_QSPI_A_DATA3	0x82
+
+		>;
+	};
+
 	pinctrl_reg_usdhc2: regusdhc2grpgpio {
 		fsl,pins = <
 			MX8MQ_IOMUXC_SD2_RESET_B_GPIO2_IO19		0x41
diff --git a/arch/arm64/boot/dts/freescale/imx8mq.dtsi b/arch/arm64/boot/dts/freescale/imx8mq.dtsi
index dbedc4a5e7fb..e0059f451591 100644
--- a/arch/arm64/boot/dts/freescale/imx8mq.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mq.dtsi
@@ -516,6 +516,19 @@ 
 			};
 		};
 
+		spi0: spi@30bb0000 {
+			#address-cells = <1>;
+			#size-cells = <0>;
+			compatible = "fsl,imx7d-qspi";
+			reg = <0x30bb0000 0x10000>, <0x08000000 0x10000000>;
+			reg-names = "QuadSPI", "QuadSPI-memory";
+			interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk IMX8MQ_CLK_QSPI_ROOT>,
+			<&clk IMX8MQ_CLK_QSPI_ROOT>;
+			clock-names = "qspi_en", "qspi";
+			status = "disabled";
+		};
+
 		gic: interrupt-controller@38800000 {
 			compatible = "arm,gic-v3";
 			reg = <0x38800000 0x10000>,	/* GIC Dist */