mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-11 15:23:22 +09:00
![Tim Harvey](/assets/img/avatar_default.png)
This adds information about the Gateworks System Controller to the gsc command such as the firmware version, firmware CRC and status of the GSC watchdog (if its enabled and if its tripped). Additionally the 'gsc wd' command can be used to enable or disable the watchdog with the following usage: gsc wd enable [30|60] gsc wd disable Note that the GSC registers are battery-backed by the GSC coincell so once eanbled, they remain enabled across power-cycles or until either the GSC firmware has been updated or FLASH has been re-programmed by the Gateworks JTAG adapter. Signed-off-by: Tim Harvey <tharvey@gateworks.com>
71 lines
1.8 KiB
C
71 lines
1.8 KiB
C
/*
|
|
* Copyright (C) 2013 Gateworks Corporation
|
|
*
|
|
* Author: Tim Harvey <tharvey@gateworks.com>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
/* i2c slave addresses */
|
|
#define GSC_SC_ADDR 0x20
|
|
#define GSC_RTC_ADDR 0x68
|
|
#define GSC_HWMON_ADDR 0x29
|
|
#define GSC_EEPROM_ADDR 0x51
|
|
|
|
/* System Controller registers */
|
|
enum {
|
|
GSC_SC_CTRL0 = 0x00,
|
|
GSC_SC_CTRL1 = 0x01,
|
|
GSC_SC_STATUS = 0x0a,
|
|
GSC_SC_FWCRC = 0x0c,
|
|
GSC_SC_FWVER = 0x0e,
|
|
};
|
|
|
|
/* System Controller Control1 bits */
|
|
enum {
|
|
GSC_SC_CTRL1_WDTIME = 4, /* 1 = 60s timeout, 0 = 30s timeout */
|
|
GSC_SC_CTRL1_WDEN = 5, /* 1 = enable, 0 = disable */
|
|
GSC_SC_CTRL1_WDDIS = 7, /* 1 = disable boot watchdog */
|
|
};
|
|
|
|
/* System Controller Interrupt bits */
|
|
enum {
|
|
GSC_SC_IRQ_PB = 0, /* Pushbutton switch */
|
|
GSC_SC_IRQ_SECURE = 1, /* Secure Key erase operation complete */
|
|
GSC_SC_IRQ_EEPROM_WP = 2, /* EEPROM write violation */
|
|
GSC_SC_IRQ_GPIO = 4, /* GPIO change */
|
|
GSC_SC_IRQ_TAMPER = 5, /* Tamper detect */
|
|
GSC_SC_IRQ_WATCHDOG = 6, /* Watchdog trip */
|
|
GSC_SC_IRQ_PBLONG = 7, /* Pushbutton long hold */
|
|
};
|
|
|
|
/* Hardware Monitor registers */
|
|
enum {
|
|
GSC_HWMON_TEMP = 0x00,
|
|
GSC_HWMON_VIN = 0x02,
|
|
GSC_HWMON_VDD_3P3 = 0x05,
|
|
GSC_HWMON_VBATT = 0x08,
|
|
GSC_HWMON_VDD_5P0 = 0x0b,
|
|
GSC_HWMON_VDD_CORE = 0x0e,
|
|
GSC_HWMON_VDD_HIGH = 0x14,
|
|
GSC_HWMON_VDD_DDR = 0x17,
|
|
GSC_HWMON_VDD_SOC = 0x11,
|
|
GSC_HWMON_VDD_1P8 = 0x1d,
|
|
GSC_HWMON_VDD_IO2 = 0x20,
|
|
GSC_HWMON_VDD_2P5 = 0x23,
|
|
GSC_HWMON_VDD_IO3 = 0x26,
|
|
GSC_HWMON_VDD_IO4 = 0x29,
|
|
};
|
|
|
|
/*
|
|
* I2C transactions to the GSC are done via these functions which
|
|
* perform retries in the case of a busy GSC NAK'ing the transaction
|
|
*/
|
|
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);
|
|
#endif
|
|
|