All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/3] arm: mvebu: Add base address for 2nd I2C controller
@ 2016-04-08 13:58 Stefan Roese
  2016-04-08 13:58 ` [U-Boot] [PATCH 2/3] arm: mvebu: theadorable: Enable " Stefan Roese
  2016-04-08 13:58 ` [U-Boot] [PATCH 3/3] arm: mvebu: theadorable: Add PEX-switch detection and reset code Stefan Roese
  0 siblings, 2 replies; 3+ messages in thread
From: Stefan Roese @ 2016-04-08 13:58 UTC (permalink / raw)
  To: u-boot

Add MVEBU_TWSI1_BASE define so that the 2nd I2C controller on e.g. AXP
can be used.

Signed-off-by: Stefan Roese <sr@denx.de>
---
 arch/arm/mach-mvebu/include/mach/soc.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/mach-mvebu/include/mach/soc.h b/arch/arm/mach-mvebu/include/mach/soc.h
index a12be2a..13c9f29 100644
--- a/arch/arm/mach-mvebu/include/mach/soc.h
+++ b/arch/arm/mach-mvebu/include/mach/soc.h
@@ -55,6 +55,7 @@
 #define MVEBU_L2_CACHE_BASE	(MVEBU_REGISTER(0x08000))
 #define CONFIG_SYS_PL310_BASE	MVEBU_L2_CACHE_BASE
 #define MVEBU_TWSI_BASE		(MVEBU_REGISTER(0x11000))
+#define MVEBU_TWSI1_BASE	(MVEBU_REGISTER(0x11100))
 #define MVEBU_MPP_BASE		(MVEBU_REGISTER(0x18000))
 #define MVEBU_GPIO0_BASE	(MVEBU_REGISTER(0x18100))
 #define MVEBU_GPIO1_BASE	(MVEBU_REGISTER(0x18140))
-- 
2.8.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [U-Boot] [PATCH 2/3] arm: mvebu: theadorable: Enable 2nd I2C controller
  2016-04-08 13:58 [U-Boot] [PATCH 1/3] arm: mvebu: Add base address for 2nd I2C controller Stefan Roese
@ 2016-04-08 13:58 ` Stefan Roese
  2016-04-08 13:58 ` [U-Boot] [PATCH 3/3] arm: mvebu: theadorable: Add PEX-switch detection and reset code Stefan Roese
  1 sibling, 0 replies; 3+ messages in thread
From: Stefan Roese @ 2016-04-08 13:58 UTC (permalink / raw)
  To: u-boot

This patch enables the 2nd I2C controller on the Armada XP theadorable
board.

Signed-off-by: Stefan Roese <sr@denx.de>
---
 include/configs/theadorable.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/configs/theadorable.h b/include/configs/theadorable.h
index 20a44c9..05a248e 100644
--- a/include/configs/theadorable.h
+++ b/include/configs/theadorable.h
@@ -51,6 +51,7 @@
 #define CONFIG_SYS_I2C
 #define CONFIG_SYS_I2C_MVTWSI
 #define CONFIG_I2C_MVTWSI_BASE0		MVEBU_TWSI_BASE
+#define CONFIG_I2C_MVTWSI_BASE1		MVEBU_TWSI1_BASE
 #define CONFIG_SYS_I2C_SLAVE		0x0
 #define CONFIG_SYS_I2C_SPEED		100000
 
-- 
2.8.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [U-Boot] [PATCH 3/3] arm: mvebu: theadorable: Add PEX-switch detection and reset code
  2016-04-08 13:58 [U-Boot] [PATCH 1/3] arm: mvebu: Add base address for 2nd I2C controller Stefan Roese
  2016-04-08 13:58 ` [U-Boot] [PATCH 2/3] arm: mvebu: theadorable: Enable " Stefan Roese
@ 2016-04-08 13:58 ` Stefan Roese
  1 sibling, 0 replies; 3+ messages in thread
From: Stefan Roese @ 2016-04-08 13:58 UTC (permalink / raw)
  To: u-boot

Sometimes the PCIe link for the PEX-switch will not come-up. In this case,
the board is not in a usable state. This patch makes sure that in this
case a soft-reset is issued. If this soft-reset does not result in the
PEX-switch being detected after some soft-reset cycles, an I2C message
is sent to the uC to issue a complete power-cycle of the board.

Signed-off-by: Stefan Roese <sr@denx.de>
---
 board/theadorable/theadorable.c | 69 +++++++++++++++++++++++++++++++++++++++++
 include/configs/theadorable.h   |  1 +
 2 files changed, 70 insertions(+)

diff --git a/board/theadorable/theadorable.c b/board/theadorable/theadorable.c
index 9c3b97c..5836bf7 100644
--- a/board/theadorable/theadorable.c
+++ b/board/theadorable/theadorable.c
@@ -5,10 +5,13 @@
  */
 
 #include <common.h>
+#include <i2c.h>
+#include <pci.h>
 #include <asm/gpio.h>
 #include <asm/io.h>
 #include <asm/arch/cpu.h>
 #include <asm/arch/soc.h>
+#include <linux/crc8.h>
 #include <linux/mbus.h>
 #ifdef CONFIG_NET
 #include <netdev.h>
@@ -35,6 +38,12 @@ DECLARE_GLOBAL_DATA_PTR;
 #define GPIO_USB0_PWR_ON		18
 #define GPIO_USB1_PWR_ON		19
 
+#define PEX_SWITCH_NOT_FOUNT_LIMIT	3
+
+#define STM_I2C_BUS	1
+#define STM_I2C_ADDR	0x27
+#define REBOOT_DELAY	1000		/* reboot-delay in ms */
+
 /* DDR3 static configuration */
 static MV_DRAM_MC_INIT ddr3_theadorable[MV_MAX_DDR3_STATIC_SIZE] = {
 	{0x00001400, 0x7301ca28},	/* DDR SDRAM Configuration Register */
@@ -218,3 +227,63 @@ int board_video_init(void)
 
 	return mvebu_lcd_register_init(&lcd_info);
 }
+
+#ifdef CONFIG_BOARD_LATE_INIT
+int board_late_init(void)
+{
+	pci_dev_t bdf;
+	ulong bootcount;
+
+	/*
+	 * Check if the PEX switch is detected (somtimes its not available
+	 * on the PCIe bus). In this case, try to recover by issuing a
+	 * soft-reset or even a power-cycle, depending on the bootcounter
+	 * value.
+	 */
+	bdf = pci_find_device(PCI_VENDOR_ID_PLX, 0x8619, 0);
+	if (bdf == -1) {
+		u8 i2c_buf[8];
+		int ret;
+
+		/* PEX switch not found! */
+		bootcount = bootcount_load();
+		printf("Failed to find PLX PEX-switch (bootcount=%ld)\n",
+		       bootcount);
+		if (bootcount > PEX_SWITCH_NOT_FOUNT_LIMIT) {
+			printf("Issuing power-switch via uC!\n");
+
+			printf("Issuing power-switch via uC!\n");
+			i2c_set_bus_num(STM_I2C_BUS);
+			i2c_buf[0] = STM_I2C_ADDR << 1;
+			i2c_buf[1] = 0xc5;	/* cmd */
+			i2c_buf[2] = 0x01;	/* enable */
+			/* Delay before reboot */
+			i2c_buf[3] = REBOOT_DELAY & 0x00ff;
+			i2c_buf[4] = (REBOOT_DELAY & 0xff00) >> 8;
+			/* Delay before shutdown */
+			i2c_buf[5] = 0x00;
+			i2c_buf[6] = 0x00;
+			i2c_buf[7] = crc8(0x72, &i2c_buf[0], 7);
+
+			ret = i2c_write(STM_I2C_ADDR, 0, 0, &i2c_buf[1], 7);
+			if (ret) {
+				printf("I2C write error (ret=%d)\n", ret);
+				printf("Issuing soft-reset...\n");
+				/* default handling: SOFT reset */
+				do_reset(NULL, 0, 0, NULL);
+			}
+
+			/* Wait for power-cycle to occur... */
+			printf("Waiting for power-cycle via uC...\n");
+			while (1)
+				;
+		} else {
+			printf("Issuing soft-reset...\n");
+			/* default handling: SOFT reset */
+			do_reset(NULL, 0, 0, NULL);
+		}
+	}
+
+	return 0;
+}
+#endif
diff --git a/include/configs/theadorable.h b/include/configs/theadorable.h
index 05a248e..5864f27 100644
--- a/include/configs/theadorable.h
+++ b/include/configs/theadorable.h
@@ -104,6 +104,7 @@
 #define CONFIG_PCI
 #define CONFIG_PCI_MVEBU
 #define CONFIG_PCI_PNP
+#define CONFIG_BOARD_LATE_INIT		/* for PEX switch test */
 #endif
 #endif
 
-- 
2.8.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-04-08 13:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-08 13:58 [U-Boot] [PATCH 1/3] arm: mvebu: Add base address for 2nd I2C controller Stefan Roese
2016-04-08 13:58 ` [U-Boot] [PATCH 2/3] arm: mvebu: theadorable: Enable " Stefan Roese
2016-04-08 13:58 ` [U-Boot] [PATCH 3/3] arm: mvebu: theadorable: Add PEX-switch detection and reset code Stefan Roese

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.