* [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.