[U-Boot] [PATCH] arm: mvebu: move i2c slave disable to generic SPL code
Chris Packham
judge.packham at gmail.com
Mon May 28 08:11:39 UTC 2018
On Mon, May 28, 2018 at 3:27 AM Baruch Siach <baruch at tkos.co.il> wrote:
> 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.
I can't find a definition of this but the register seems to work for
kirkwood as well (not surprising since it's probably a common IP block). Is
there any chance we can find a home for this that's available to boards
that don't use SPL?
> 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
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot
More information about the U-Boot
mailing list