summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/gateworks/gw_ventana/gsc.c27
-rw-r--r--board/gateworks/gw_ventana/gsc.h1
-rw-r--r--board/gateworks/gw_ventana/gw_ventana.c24
3 files changed, 30 insertions, 22 deletions
diff --git a/board/gateworks/gw_ventana/gsc.c b/board/gateworks/gw_ventana/gsc.c
index 718e165..3febd12 100644
--- a/board/gateworks/gw_ventana/gsc.c
+++ b/board/gateworks/gw_ventana/gsc.c
@@ -132,6 +132,33 @@ int gsc_info(int verbose)
return 0;
}
+/*
+ * The Gateworks System Controller implements a boot
+ * watchdog (always enabled) as a workaround for IMX6 boot related
+ * errata such as:
+ * ERR005768 - no fix scheduled
+ * ERR006282 - fixed in silicon r1.2
+ * ERR007117 - fixed in silicon r1.3
+ * ERR007220 - fixed in silicon r1.3
+ * ERR007926 - no fix scheduled
+ * see http://cache.freescale.com/files/32bit/doc/errata/IMX6DQCE.pdf
+ *
+ * Disable the boot watchdog
+ */
+int gsc_boot_wd_disable(void)
+{
+ u8 reg;
+
+ i2c_set_bus_num(CONFIG_I2C_GSC);
+ if (!gsc_i2c_read(GSC_SC_ADDR, GSC_SC_CTRL1, 1, &reg, 1)) {
+ reg |= (1 << GSC_SC_CTRL1_WDDIS);
+ if (!gsc_i2c_write(GSC_SC_ADDR, GSC_SC_CTRL1, 1, &reg, 1))
+ return 0;
+ }
+ puts("Error: could not disable GSC Watchdog\n");
+ return 1;
+}
+
#ifdef CONFIG_CMD_GSC
static int do_gsc_wd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
diff --git a/board/gateworks/gw_ventana/gsc.h b/board/gateworks/gw_ventana/gsc.h
index 2d4969e..e0c0ed0 100644
--- a/board/gateworks/gw_ventana/gsc.h
+++ b/board/gateworks/gw_ventana/gsc.h
@@ -66,5 +66,6 @@ enum {
int gsc_i2c_read(uchar chip, uint addr, int alen, uchar *buf, int len);
int gsc_i2c_write(uchar chip, uint addr, int alen, uchar *buf, int len);
int gsc_info(int verbose);
+int gsc_boot_wd_disable(void);
#endif
diff --git a/board/gateworks/gw_ventana/gw_ventana.c b/board/gateworks/gw_ventana/gw_ventana.c
index 8163d38..8c6f469 100644
--- a/board/gateworks/gw_ventana/gw_ventana.c
+++ b/board/gateworks/gw_ventana/gw_ventana.c
@@ -659,7 +659,6 @@ static const struct boot_mode board_boot_modes[] = {
int misc_init_r(void)
{
struct ventana_board_info *info = &ventana_info;
- unsigned char reg;
/* set env vars based on EEPROM data */
if (ventana_info.model[0]) {
@@ -740,27 +739,8 @@ int misc_init_r(void)
add_board_boot_modes(board_boot_modes);
#endif
- /*
- * The Gateworks System Controller implements a boot
- * watchdog (always enabled) as a workaround for IMX6 boot related
- * errata such as:
- * ERR005768 - no fix scheduled
- * ERR006282 - fixed in silicon r1.2
- * ERR007117 - fixed in silicon r1.3
- * ERR007220 - fixed in silicon r1.3
- * ERR007926 - no fix scheduled
- * see http://cache.freescale.com/files/32bit/doc/errata/IMX6DQCE.pdf
- *
- * Disable the boot watchdog and display/clear the timeout flag if set
- */
- i2c_set_bus_num(CONFIG_I2C_GSC);
- if (!gsc_i2c_read(GSC_SC_ADDR, GSC_SC_CTRL1, 1, &reg, 1)) {
- reg |= (1 << GSC_SC_CTRL1_WDDIS);
- if (gsc_i2c_write(GSC_SC_ADDR, GSC_SC_CTRL1, 1, &reg, 1))
- puts("Error: could not disable GSC Watchdog\n");
- } else {
- puts("Error: could not disable GSC Watchdog\n");
- }
+ /* disable boot watchdog */
+ gsc_boot_wd_disable();
return 0;
}