]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
board: gateworks: venice: enable GSC supervisor for new board models
authorTim Harvey <tharvey@gateworks.com>
Wed, 19 Jun 2024 21:12:58 +0000 (14:12 -0700)
committerFabio Estevam <festevam@gmail.com>
Mon, 24 Jun 2024 12:18:49 +0000 (09:18 -0300)
The Gateworks System Controller (GSC) has a voltage supervisor which is
disabled by default. On older boards we want to maintian this but on
newer boards we wish to enable the voltage supervisor.

The Gateworks System Controller (GSC) can disable the board primary
power supply by driving a pin to a FET high. On older board models
the leakage of the GSC may exceed the leakage of the FET causing this
signal slowly rise when the GSC battery is low and the board is in a
powered down state resulting in the board being kept in a disabled
state.

Newer boards have a hardware fix to avoid this leakage and thus should
enable the voltage supervisor.

Signed-off-by: Tim Harvey <tharvey@gateworks.com>
board/gateworks/venice/spl.c

index f10d310a46d4078d688f13ec28f67099c91f7f70..04dc0d66ea9c54989e9d150e6535681c479645c0 100644 (file)
@@ -118,13 +118,29 @@ static int dm_i2c_clrsetbits(struct udevice *dev, uint reg, uint clr, uint set)
        return dm_i2c_write(dev, reg, &val, 1);
 }
 
-static int power_init_board(void)
+static int power_init_board(struct udevice *gsc)
 {
        const char *model = eeprom_get_model();
        struct udevice *bus;
        struct udevice *dev;
        int ret;
 
+       /* Enable GSC voltage supervisor for new board models */
+       if ((!strncmp(model, "GW7100", 6) && model[10] > 'D') ||
+           (!strncmp(model, "GW7101", 6) && model[10] > 'D') ||
+           (!strncmp(model, "GW7200", 6) && model[10] > 'E') ||
+           (!strncmp(model, "GW7201", 6) && model[10] > 'E') ||
+           (!strncmp(model, "GW7300", 6) && model[10] > 'E') ||
+           (!strncmp(model, "GW7301", 6) && model[10] > 'E') ||
+           (!strncmp(model, "GW740", 5) && model[7] > 'B')) {
+               u8 ver;
+
+               if (!dm_i2c_read(gsc, 14, &ver, 1) && ver > 62) {
+                       printf("GSC     : enabling voltage supervisor\n");
+                       dm_i2c_clrsetbits(gsc, 25, 0, BIT(1));
+               }
+       }
+
        if ((!strncmp(model, "GW71", 4)) ||
            (!strncmp(model, "GW72", 4)) ||
            (!strncmp(model, "GW73", 4)) ||
@@ -297,7 +313,7 @@ void board_init_f(ulong dummy)
        dram_sz = venice_eeprom_init(0);
 
        /* PMIC */
-       power_init_board();
+       power_init_board(dev);
 
        /* DDR initialization */
        spl_dram_init(dram_sz);