Gpio Tool
GenGpioData.py
is a utility that converts the GPIO pin data from one format to other. The formats currently supported are [h, csv, txt, dsc, yaml, dlt]. h, csv, txt
formats are external to SBL and dsc, yaml, dlt
formats are known to SBL. So, this tool provides a way to convert one of the h, csv, txt
to dsc, yaml, dlt
and vice-versa.
Each of the above mentioned formats is as follows:
h:
This format expects an instance of the following GPIO_INIT_CONFIG structure: typedef struct { UINT32 PadMode : 5; UINT32 HostSoftPadOwn : 2; UINT32 Direction : 6; UINT32 OutputState : 2; UINT32 InterruptConfig : 9; UINT32 PowerConfig : 8; UINT32 ElectricalConfig : 9; UINT32 LockConfig : 4; UINT32 OtherSettings : 9; UINT32 RsvdBits : 10; } GPIO_CONFIG; typedef struct { CHAR8 *GpioPad; GPIO_CONFIG GpioConfig; } GPIO_INIT_CONFIG;
example:
static GPIO_INIT_CONFIG mGpioTable[] = { // GpioPad Pmode GPI_IS GpioDir GPIOTxState RxEvCfg/GPIRoutConfig PadRstCfg Term LockConfig { GPP_A7, { GpioPadModeGpio, GpioHostOwnGpio, GpioDirIn, GpioOutDefault, GpioIntLevel | GpioIntApic, GpioHostDeepReset, GpioTermWpu20K, GpioPadConfigUnlock }}, };
Note
GpioPad
should follow the below rule:
GPP_<group_name><pad_num>
group_name = A single letter describing the group for this pad
pad_num = Pad Number inside the group
Each of the GPIO pad config fields can take the values as given below (these are common across all formats):
typedef enum = {
GpioHardwareDefault = 0x0,
GpioPadModeGpio = 0x1,
GpioPadModeNative1 = 0x3,
GpioPadModeNative2 = 0x5,
GpioPadModeNative3 = 0x7,
GpioPadModeNative4 = 0x9,
GpioPadModeNative5 = 0xB,
} GPIO_PAD_MODE;
typedef enum = {
GpioHostOwnDefault = 0x0,
GpioHostOwnAcpi = 0x1,
GpioHostOwnGpio = 0x3,
} GPIO_HOSTSW_OWN;
typedef enum = {
GpioDirDefault = 0x0,
GpioDirInOut = (0x1 | (0x1 << 3)),
GpioDirInInvOut = (0x1 | (0x3 << 3)),
GpioDirIn = (0x3 | (0x1 << 3)),
GpioDirInInv = (0x3 | (0x3 << 3)),
GpioDirOut = 0x5,
GpioDirNone = 0x7,
} GPIO_DIRECTION;
typedef enum = {
GpioOutDefault = 0x0,
GpioOutLow = 0x1,
GpioOutHigh = 0x3,
} GPIO_OUTPUT_STATE;
typedef enum = {
GpioIntDefault = 0x0,
GpioIntDis = 0x1,
GpioIntNmi = 0x3,
GpioIntSmi = 0x5,
GpioIntSci = 0x9,
GpioIntApic = 0x11,
GpioIntLevel = (0x1 << 5),
GpioIntEdge = (0x3 << 5),
GpioIntLvlEdgDis = (0x5 << 5),
GpioIntBothEdge = (0x7 << 5),
} GPIO_INT_CONFIG;
typedef enum = {
GpioResetDefault = 0x00,
GpioResumeReset = 0x01,
GpioHostDeepReset = 0x03,
GpioPlatformReset = 0x05,
GpioDswReset = 0x07,
} GPIO_RESET_CONFIG;
typedef enum = {
GpioTermDefault = 0x0,
GpioTermNone = 0x1,
GpioTermWpd5K = 0x5,
GpioTermWpd20K = 0x9,
GpioTermWpu1K = 0x13,
GpioTermWpu2K = 0x17,
GpioTermWpu5K = 0x15,
GpioTermWpu20K = 0x19,
GpioTermWpu1K2K = 0x1B,
GpioTermNative = 0x1F,
} GPIO_ELECTRICAL_CONFIG;
typedef enum = {
GpioLockDefault = 0x0,
GpioPadConfigUnlock = 0x3,
GpioPadConfigLock = 0x1,
GpioOutputStateUnlock = 0xC,
GpioPadUnlock = 0xF,
GpioPadLock = 0x5,
} GPIO_LOCK_CONFIG;
csv:
This format expects Gpio pad config info in the following order: GpioPad, PadMode, HostSoftPadOwn, Direction, OutputState, InterruptConfig, PowerConfig, ElectricalConfig, LockConfig
example:
GPP_A7,GpioPadModeGpio,GpioHostOwnGpio,GpioDirIn,GpioOutDefault,GpioIntLevel|GpioIntApic,GpioHostDeepReset,GpioTermWpu20K,GpioPadConfigUnlock
txt:
This format is used when the Pad Config DWords are read/programmed from/to the GPIO Community registers on the platform. GpioPad:<host_sw_own>:<pad_cfg_lock>:<pad_cfg_lock_tx>:<pad_cfg_dw0>:<pad_cfg_dw1> host_sw_own = Value of the HostSoftPadOwnership register that contains this pin pad_cfg_lock = Value of the PadConfigurationLock register that contains this pin pad_cfg_lock_tx = Value of the PadConfigurationLockTxState register that contains this pin pad_cfg_dw0 = Value of the PadConfigurationDw0 register for this pin pad_cfg_dw1 = Value of the PadConfigurationDw1 register for this pin
example:
GPP_A07:0x0001A880:0x01FCF77F:0x01FE5FFF:0x40100102:0x0000301F
dsc, yaml, dlt:
Please take a look at your project's dsc, yaml and dlt files for this format.
example:
dsc : # !BSF SUBT:{GPIO_TMPL:GPP_A07: 0x031885E1: 0x00070619} yaml : - !expand { CFGHDR_TMPL : [ PSD_CFG_DATA, 0x800, 0, 0 ] } dlt : GPIO_CFG_DATA.GpioPinConfig0_GPP_A07 | 0x031885E1 GPIO_CFG_DATA.GpioPinConfig1_GPP_A07 | 0x00070619