[U-Boot] [PATCH] arm: mvebu: move i2c slave disable to generic SPL code

Baruch Siach baruch at tkos.co.il
Sun May 27 15:25:46 UTC 2018


The hidden i2c slave that interferes the i2c bus is not board specific.
All Armada 38x SoCs are affected. Move the code disabling this slave to
generic code to make it work on all affected hardware.

Cc: Marek BehĂșn <marek.behun at nic.cz>
Cc: Rabeeh Khoury <rabeeh at solid-run.com>
Signed-off-by: Baruch Siach <baruch at tkos.co.il>
---
 arch/arm/mach-mvebu/spl.c                | 16 ++++++++++++++++
 board/CZ.NIC/turris_omnia/turris_omnia.c |  9 ---------
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
index 50b24f5760b7..cbd900fee5d1 100644
--- a/arch/arm/mach-mvebu/spl.c
+++ b/arch/arm/mach-mvebu/spl.c
@@ -8,10 +8,13 @@
 #include <debug_uart.h>
 #include <fdtdec.h>
 #include <spl.h>
+#include <linux/bitops.h>
 #include <asm/io.h>
 #include <asm/arch/cpu.h>
 #include <asm/arch/soc.h>
 
+#define MVTWSI_ARMADA_DEBUG_REG	0x8c
+
 static u32 get_boot_device(void)
 {
 	u32 val;
@@ -69,10 +72,23 @@ u32 spl_boot_device(void)
 	return get_boot_device();
 }
 
+static void disable_i2c_slave(void)
+{
+	u32 i2c_debug_reg;
+
+	/* Disable I2C debug mode blocking 0x64 I2C address */
+	i2c_debug_reg = readl(MVEBU_TWSI_BASE + MVTWSI_ARMADA_DEBUG_REG);
+	i2c_debug_reg &= ~BIT(18);
+	writel(i2c_debug_reg, MVEBU_TWSI_BASE + MVTWSI_ARMADA_DEBUG_REG);
+}
+
 void board_init_f(ulong dummy)
 {
 	int ret;
 
+	if (IS_ENABLED(CONFIG_ARMADA_38X))
+		disable_i2c_slave();
+
 	/*
 	 * Pin muxing needs to be done before UART output, since
 	 * on A38x the UART pins need some re-muxing for output
diff --git a/board/CZ.NIC/turris_omnia/turris_omnia.c b/board/CZ.NIC/turris_omnia/turris_omnia.c
index da663cf1bb0c..044c959d1b13 100644
--- a/board/CZ.NIC/turris_omnia/turris_omnia.c
+++ b/board/CZ.NIC/turris_omnia/turris_omnia.c
@@ -50,8 +50,6 @@ DECLARE_GLOBAL_DATA_PTR;
 #define OMNIA_ATSHA204_OTP_MAC0		3
 #define OMNIA_ATSHA204_OTP_MAC1		4
 
-#define MVTWSI_ARMADA_DEBUG_REG		0x8c
-
 /*
  * Those values and defines are taken from the Marvell U-Boot version
  * "u-boot-2013.01-2014_T3.0"
@@ -297,8 +295,6 @@ static int set_regdomain(void)
 
 int board_early_init_f(void)
 {
-	u32 i2c_debug_reg;
-
 	/* Configure MPP */
 	writel(0x11111111, MVEBU_MPP_BASE + 0x00);
 	writel(0x11111111, MVEBU_MPP_BASE + 0x04);
@@ -321,11 +317,6 @@ int board_early_init_f(void)
 	writel(OMNIA_GPP_OUT_ENA_LOW, MVEBU_GPIO0_BASE + 0x04);
 	writel(OMNIA_GPP_OUT_ENA_MID, MVEBU_GPIO1_BASE + 0x04);
 
-	/* Disable I2C debug mode blocking 0x64 I2C address */
-	i2c_debug_reg = readl(MVEBU_TWSI_BASE + MVTWSI_ARMADA_DEBUG_REG);
-	i2c_debug_reg &= ~(1<<18);
-	writel(i2c_debug_reg, MVEBU_TWSI_BASE + MVTWSI_ARMADA_DEBUG_REG);
-
 	return 0;
 }
 
-- 
2.17.0



More information about the U-Boot mailing list