[U-Boot] [PATCH 0/4] Fixes for Turris Omnia

Hi Stefan, could you please review and apply these patches for Turris Omnia?
Marek
Marek Behún (3): i2c: mvtwsi: fix disabling i2c slave on Armada 38x mvebu: turris_omnia: remove redundant code arm: mvebu: turris_omnia: add XHCI to defconfig
Pierre Bourdon (1): mvebu: turris_omnia: fix eeprom/mcu device names
board/CZ.NIC/turris_omnia/turris_omnia.c | 15 ++------------- configs/turris_omnia_defconfig | 2 ++ drivers/i2c/mvtwsi.c | 16 ++++------------ 3 files changed, 8 insertions(+), 25 deletions(-)

Commit 173ec351 ("i2c: mvtwsi: disable i2c slave on Armada 38x") adds slave disabling code on port 0 into bind method. This does not work on Turris Omnia in SPL, because at the time the bind method is called in SPL, arch/arm/mach-mvebu/spl.c has not yet set DM translation offset, so the bind function reads from bad memory place, which causes a fault.
Move the i2c slave disabling code into the probe method of mvtwsi, by that time dm_set_translation_offset is already called.
Signed-off-by: Marek Behún marek.behun@nic.cz Cc: Baruch Siach baruch@tkos.co.il Cc: Heiko Schocher hs@denx.de Cc: Chris Packham judge.packham@gmail.com Cc: Stefan Roese sr@denx.de --- drivers/i2c/mvtwsi.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/drivers/i2c/mvtwsi.c b/drivers/i2c/mvtwsi.c index 74ac0a4aa7..b0f7c3e057 100644 --- a/drivers/i2c/mvtwsi.c +++ b/drivers/i2c/mvtwsi.c @@ -804,22 +804,15 @@ static void twsi_disable_i2c_slave(struct mvtwsi_registers *twsi) clrbits_le32(&twsi->debug, BIT(18)); }
-static int mvtwsi_i2c_bind(struct udevice *bus) +static int mvtwsi_i2c_probe(struct udevice *bus) { - struct mvtwsi_registers *twsi = devfdt_get_addr_ptr(bus); + struct mvtwsi_i2c_dev *dev = dev_get_priv(bus); + uint actual_speed;
/* Disable the hidden slave in i2c0 of these platforms */ if ((IS_ENABLED(CONFIG_ARMADA_38X) || IS_ENABLED(CONFIG_KIRKWOOD)) && bus->req_seq == 0) - twsi_disable_i2c_slave(twsi); - - return 0; -} - -static int mvtwsi_i2c_probe(struct udevice *bus) -{ - struct mvtwsi_i2c_dev *dev = dev_get_priv(bus); - uint actual_speed; + twsi_disable_i2c_slave(dev->base);
__twsi_i2c_init(dev->base, dev->speed, dev->slaveadd, &actual_speed); dev->speed = actual_speed; @@ -871,7 +864,6 @@ U_BOOT_DRIVER(i2c_mvtwsi) = { .name = "i2c_mvtwsi", .id = UCLASS_I2C, .of_match = mvtwsi_i2c_ids, - .bind = mvtwsi_i2c_bind, .probe = mvtwsi_i2c_probe, .ofdata_to_platdata = mvtwsi_i2c_ofdata_to_platdata, .priv_auto_alloc_size = sizeof(struct mvtwsi_i2c_dev),

On Thu, Apr 25, 2019 at 3:30 PM Marek Behún marek.behun@nic.cz wrote:
Commit 173ec351 ("i2c: mvtwsi: disable i2c slave on Armada 38x") adds slave disabling code on port 0 into bind method. This does not work on Turris Omnia in SPL, because at the time the bind method is called in SPL, arch/arm/mach-mvebu/spl.c has not yet set DM translation offset, so the bind function reads from bad memory place, which causes a fault.
Move the i2c slave disabling code into the probe method of mvtwsi, by that time dm_set_translation_offset is already called.
https://patchwork.ozlabs.org/patch/1084776/ implements a better fix for this issue and has been merged in master with the latest DM pull 2h ago.
-- Pierre Bourdon delroth@gmail.com Software Engineer @ Zürich, Switzerland https://delroth.net/

:) I did not know about that, thanks.
On Thu, 25 Apr 2019 15:35:10 +0200 Pierre Bourdon delroth@gmail.com wrote:
On Thu, Apr 25, 2019 at 3:30 PM Marek Behún marek.behun@nic.cz wrote:
Commit 173ec351 ("i2c: mvtwsi: disable i2c slave on Armada 38x") adds slave disabling code on port 0 into bind method. This does not work on Turris Omnia in SPL, because at the time the bind method is called in SPL, arch/arm/mach-mvebu/spl.c has not yet set DM translation offset, so the bind function reads from bad memory place, which causes a fault.
Move the i2c slave disabling code into the probe method of mvtwsi, by that time dm_set_translation_offset is already called.
https://patchwork.ozlabs.org/patch/1084776/ implements a better fix for this issue and has been merged in master with the latest DM pull 2h ago.
-- Pierre Bourdon delroth@gmail.com Software Engineer @ Zürich, Switzerland https://delroth.net/

The i2c slave disabling is done by mvtwsi driver and is not needed here.
Signed-off-by: Marek Behún marek.behun@nic.cz Cc: Baruch Siach baruch@tkos.co.il --- board/CZ.NIC/turris_omnia/turris_omnia.c | 11 ----------- 1 file changed, 11 deletions(-)
diff --git a/board/CZ.NIC/turris_omnia/turris_omnia.c b/board/CZ.NIC/turris_omnia/turris_omnia.c index c21d2f3ffa..c446f471a6 100644 --- a/board/CZ.NIC/turris_omnia/turris_omnia.c +++ b/board/CZ.NIC/turris_omnia/turris_omnia.c @@ -297,8 +297,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,15 +319,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. - * Note: that would be redundant once Turris Omnia migrates to DM_I2C, - * because the mvtwsi driver includes equivalent code. - */ - 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; }

Hi Marek,
On Thu, Apr 25 2019, Marek Behún wrote:
The i2c slave disabling is done by mvtwsi driver and is not needed here.
Signed-off-by: Marek Behún marek.behun@nic.cz Cc: Baruch Siach baruch@tkos.co.il
board/CZ.NIC/turris_omnia/turris_omnia.c | 11 ----------- 1 file changed, 11 deletions(-)
diff --git a/board/CZ.NIC/turris_omnia/turris_omnia.c b/board/CZ.NIC/turris_omnia/turris_omnia.c index c21d2f3ffa..c446f471a6 100644 --- a/board/CZ.NIC/turris_omnia/turris_omnia.c +++ b/board/CZ.NIC/turris_omnia/turris_omnia.c @@ -297,8 +297,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,15 +319,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.
* Note: that would be redundant once Turris Omnia migrates to DM_I2C,
* because the mvtwsi driver includes equivalent code.
*/
As this comment notes, Turris Omnia needs to migrate to DM_I2C before removing this code. The non DM code path in the mvtwsi driver does not disable the debug I2C client.
Is there a pending patch that enables DM_I2C for Turris Omnia?
- 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;
}
baruch

The next version of this patchseries will include patch with name "arm: mvebu: turris_omnia: move I2C dependencies to Kconfig", which adds select DM_I2C to config TARGET_TURRIS_OMNIA
Marek
On Sun, 28 Apr 2019 14:59:10 +0300 Baruch Siach baruch@tkos.co.il wrote:
Hi Marek,
On Thu, Apr 25 2019, Marek Behún wrote:
The i2c slave disabling is done by mvtwsi driver and is not needed here.
Signed-off-by: Marek Behún marek.behun@nic.cz Cc: Baruch Siach baruch@tkos.co.il
board/CZ.NIC/turris_omnia/turris_omnia.c | 11 ----------- 1 file changed, 11 deletions(-)
diff --git a/board/CZ.NIC/turris_omnia/turris_omnia.c b/board/CZ.NIC/turris_omnia/turris_omnia.c index c21d2f3ffa..c446f471a6 100644 --- a/board/CZ.NIC/turris_omnia/turris_omnia.c +++ b/board/CZ.NIC/turris_omnia/turris_omnia.c @@ -297,8 +297,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,15 +319,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.
* Note: that would be redundant once Turris Omnia migrates to DM_I2C,
* because the mvtwsi driver includes equivalent code.
*/
As this comment notes, Turris Omnia needs to migrate to DM_I2C before removing this code. The non DM code path in the mvtwsi driver does not disable the debug I2C client.
Is there a pending patch that enables DM_I2C for Turris Omnia?
- 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;
}
baruch

From: Pierre Bourdon delroth@gmail.com
Commit c4bd12a7dad4 ("i2c: mux: Generate longer i2c mux name") changed the naming scheme of i2c devices within a mux. This broke references to i2c@0 in the Turris Omnia board initialization code.
Signed-off-by: Pierre Bourdon delroth@gmail.com Reviewed-by: Marek Behún marek.behun@nic.cz --- board/CZ.NIC/turris_omnia/turris_omnia.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/board/CZ.NIC/turris_omnia/turris_omnia.c b/board/CZ.NIC/turris_omnia/turris_omnia.c index c446f471a6..3bfd6fe4e4 100644 --- a/board/CZ.NIC/turris_omnia/turris_omnia.c +++ b/board/CZ.NIC/turris_omnia/turris_omnia.c @@ -32,13 +32,13 @@
DECLARE_GLOBAL_DATA_PTR;
-#define OMNIA_I2C_EEPROM_DM_NAME "i2c@0" +#define OMNIA_I2C_EEPROM_DM_NAME "i2c@11000->i2cmux@70->i2c@0" #define OMNIA_I2C_EEPROM 0x54 #define OMNIA_I2C_EEPROM_CONFIG_ADDR 0x0 #define OMNIA_I2C_EEPROM_ADDRLEN 2 #define OMNIA_I2C_EEPROM_MAGIC 0x0341a034
-#define OMNIA_I2C_MCU_DM_NAME "i2c@0" +#define OMNIA_I2C_MCU_DM_NAME "i2c@11000->i2cmux@70->i2c@0" #define OMNIA_I2C_MCU_ADDR_STATUS 0x1 #define OMNIA_I2C_MCU_SATA 0x20 #define OMNIA_I2C_MCU_CARDDET 0x10

Add XHCI_HOST and XHCI_MVEBU to defconfig, so that user's can by default boot from USB on Turris Omnia.
Signed-off-by: Marek Behún marek.behun@nic.cz --- configs/turris_omnia_defconfig | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/configs/turris_omnia_defconfig b/configs/turris_omnia_defconfig index 85f214148a..4b792d9a5a 100644 --- a/configs/turris_omnia_defconfig +++ b/configs/turris_omnia_defconfig @@ -56,5 +56,7 @@ CONFIG_KIRKWOOD_SPI=y CONFIG_USB=y CONFIG_DM_USB=y CONFIG_USB_EHCI_HCD=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_MVEBU=y CONFIG_WDT=y CONFIG_WDT_ORION=y
participants (4)
-
Baruch Siach
-
Marek Behun
-
Marek Behún
-
Pierre Bourdon