diff mbox series

[u-boot-marvell,v2] arm: a37xx: espressobin: Fix non-working SPI

Message ID 20220323161942.7308-1-pali@kernel.org
State Accepted
Commit 8285b928c5c1cb48a6ef9f54dae99cfc1066a44e
Delegated to: Stefan Roese
Headers show
Series [u-boot-marvell,v2] arm: a37xx: espressobin: Fix non-working SPI | expand

Commit Message

Pali Rohár March 23, 2022, 4:19 p.m. UTC
Commit 0934dddc6436 ("arm: a37xx: Update DTS files to version from
upstream Linux kernel") ported Linux's device-tree files for Armada 3720
SOCs. This broke SPI support on some Espressobin boards and results in
following U-Boot error:

  Loading Environment from SPIFlash... jedec_spi_nor flash@0: unrecognized JEDEC id bytes: f7, 30, 0b
  *** Warning - spi_flash_probe_bus_cs() failed, using default environment

Before that commit DT node for SPI was called 'spi-flash@0' and after
that commit it is called 'flash@0'. Before that commit 'spi-max-frequency'
was set to 50000000 and after it is 104000000.

Rename DT node 'spi-flash@0 in armada-3720-espressobin-u-boot.dtsi to
'flash@0' and set custom U-Boot 'spi-max-frequency' back to 50000000.

With this change SPI is working on Espressobin again and it is detected
with JEDEC ids ef, 60, 16 on our tested unit.

  Loading Environment from SPIFlash... SF: Detected w25q32dw with page size 256 Bytes, erase size 4 KiB, total 4 MiB
  OK

Note that it is unknown why spi-max-frequency with value 104000000 does not
work in U-Boot as it works fine with Linux kernel. Also note that in
defconfig file configs/mvebu_espressobin-88f3720_defconfig is set option
CONFIG_SF_DEFAULT_SPEED=40000000 which is different value than in DT.

Fixes: 0934dddc6436 ("arm: a37xx: Update DTS files to version from upstream Linux kernel")
Signed-off-by: Pali Rohár <pali@kernel.org>

---
Changes in v2:
* Fix #endif for partitions { } node
---
 arch/arm/dts/armada-3720-espressobin-u-boot.dtsi | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

Comments

Stefan Roese March 24, 2022, 7:08 a.m. UTC | #1
On 3/23/22 17:19, Pali Rohár wrote:
> Commit 0934dddc6436 ("arm: a37xx: Update DTS files to version from
> upstream Linux kernel") ported Linux's device-tree files for Armada 3720
> SOCs. This broke SPI support on some Espressobin boards and results in
> following U-Boot error:
> 
>    Loading Environment from SPIFlash... jedec_spi_nor flash@0: unrecognized JEDEC id bytes: f7, 30, 0b
>    *** Warning - spi_flash_probe_bus_cs() failed, using default environment
> 
> Before that commit DT node for SPI was called 'spi-flash@0' and after
> that commit it is called 'flash@0'. Before that commit 'spi-max-frequency'
> was set to 50000000 and after it is 104000000.
> 
> Rename DT node 'spi-flash@0 in armada-3720-espressobin-u-boot.dtsi to
> 'flash@0' and set custom U-Boot 'spi-max-frequency' back to 50000000.
> 
> With this change SPI is working on Espressobin again and it is detected
> with JEDEC ids ef, 60, 16 on our tested unit.
> 
>    Loading Environment from SPIFlash... SF: Detected w25q32dw with page size 256 Bytes, erase size 4 KiB, total 4 MiB
>    OK
> 
> Note that it is unknown why spi-max-frequency with value 104000000 does not
> work in U-Boot as it works fine with Linux kernel. Also note that in
> defconfig file configs/mvebu_espressobin-88f3720_defconfig is set option
> CONFIG_SF_DEFAULT_SPEED=40000000 which is different value than in DT.
> 
> Fixes: 0934dddc6436 ("arm: a37xx: Update DTS files to version from upstream Linux kernel")
> Signed-off-by: Pali Rohár <pali@kernel.org>
> 
> ---
> Changes in v2:
> * Fix #endif for partitions { } node

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   arch/arm/dts/armada-3720-espressobin-u-boot.dtsi | 13 ++++++++++---
>   1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm/dts/armada-3720-espressobin-u-boot.dtsi b/arch/arm/dts/armada-3720-espressobin-u-boot.dtsi
> index 3e01c64a4bdb..07293ab72d1f 100644
> --- a/arch/arm/dts/armada-3720-espressobin-u-boot.dtsi
> +++ b/arch/arm/dts/armada-3720-espressobin-u-boot.dtsi
> @@ -1,8 +1,15 @@
>   // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
>   
> -#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
>   &spi0 {
> -	spi-flash@0 {
> +	flash@0 {
> +		/*
> +		 * For some unknown reason U-Boot SPI driver cannot access
> +		 * SPI-NOR with higher frequency. Linux kernel SPI driver
> +		 * does not have this problem.
> +		 */
> +		spi-max-frequency = <50000000>;
> +
> +#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
>   		partitions {
>   			compatible = "fixed-partitions";
>   			#address-cells = <1>;
> @@ -18,9 +25,9 @@
>   				label = "u-boot-env";
>   			};
>   		};
> +#endif
>   	};
>   };
> -#endif
>   
>   /*
>    * U-Boot requires to have this eMMC node by default in "okay" status. U-Boot

Viele Grüße,
Stefan Roese
diff mbox series

Patch

diff --git a/arch/arm/dts/armada-3720-espressobin-u-boot.dtsi b/arch/arm/dts/armada-3720-espressobin-u-boot.dtsi
index 3e01c64a4bdb..07293ab72d1f 100644
--- a/arch/arm/dts/armada-3720-espressobin-u-boot.dtsi
+++ b/arch/arm/dts/armada-3720-espressobin-u-boot.dtsi
@@ -1,8 +1,15 @@ 
 // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
 
-#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
 &spi0 {
-	spi-flash@0 {
+	flash@0 {
+		/*
+		 * For some unknown reason U-Boot SPI driver cannot access
+		 * SPI-NOR with higher frequency. Linux kernel SPI driver
+		 * does not have this problem.
+		 */
+		spi-max-frequency = <50000000>;
+
+#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
 		partitions {
 			compatible = "fixed-partitions";
 			#address-cells = <1>;
@@ -18,9 +25,9 @@ 
 				label = "u-boot-env";
 			};
 		};
+#endif
 	};
 };
-#endif
 
 /*
  * U-Boot requires to have this eMMC node by default in "okay" status. U-Boot