soc/intel/common/block/gpio: Add support to program VCCIO selection

Some of the Intel SoCs with more than 2 PAD configuration registers
support programming VCCIO selection. Add a pad configuration macro to
program VCCIO selection when the GPIO is an output pin.

BUG=b:194120188
TEST=Build and boot to OS in Gallop. Ensure that the VCCIO selection is
configured as expected and probing the GPIO reads the configured
voltage.

Change-Id: Icda33b3cc84f42ab87ca174b1fe12a5fa2184061
Signed-off-by: Karthikeyan Ramasubramanian <kramasub@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/56507
Reviewed-by: Furquan Shaikh <furquan@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Karthikeyan Ramasubramanian
2021-07-22 00:48:37 -06:00
committed by Werner Zeh
parent 9b6a3a0370
commit 4c569b52f6
3 changed files with 25 additions and 0 deletions

View File

@@ -36,4 +36,9 @@ config SOC_INTEL_COMMON_BLOCK_GPIO_DUAL_ROUTE_SUPPORT
bool
default n
# Used to program VCCIO Selection as 1.8V or 3.3V
config SOC_INTEL_COMMON_BLOCK_GPIO_PADCFG_VCCIOSEL
bool
default n
endif

View File

@@ -39,7 +39,11 @@
PAD_CFG1_IOSSTATE_MASK)
#endif
#if CONFIG(SOC_INTEL_COMMON_BLOCK_GPIO_PADCFG_VCCIOSEL)
#define PAD_DW2_MASK (PAD_CFG2_VCCIOSEL_MASK | PAD_CFG2_DEBOUNCE_MASK)
#else
#define PAD_DW2_MASK (PAD_CFG2_DEBOUNCE_MASK)
#endif /* SOC_INTEL_COMMON_BLOCK_GPIO_PADCFG_VCCIOSEL */
#define PAD_DW3_MASK (0)
#define MISCCFG_GPE0_DW0_SHIFT 8

View File

@@ -123,6 +123,14 @@
#define PAD_CFG1_TOL_1V8 (0x1 << 25)
#endif /* CONFIG_SOC_INTEL_COMMON_BLOCK_GPIO_PADCFG_PADTOL */
/* On SoCs with more than 2 PAD_CFG registers, some of them support programmable VCCIO.
0(default)=3.3V, 1=1.8V */
#if CONFIG(SOC_INTEL_COMMON_BLOCK_GPIO_PADCFG_VCCIOSEL)
#define PAD_CFG2_VCCIOSEL_MASK (0x1 << 8)
#define PAD_CFG2_VCCIOSEL_3V3 (0x0 << 8)
#define PAD_CFG2_VCCIOSEL_1V8 (0x1 << 8)
#endif /* CONFIG_SOC_INTEL_COMMON_BLOCK_GPIO_PADCFG_VCCIOSEL */
#define PAD_FUNC(value) PAD_CFG0_MODE_##value
#define PAD_RESET(value) PAD_CFG0_LOGICAL_RESET_##value
#define PAD_RX_POL(value) PAD_CFG0_RX_POL_##value
@@ -252,6 +260,14 @@
PAD_TRIG(OFF) | PAD_BUF(RX_DISABLE) | !!val, \
PAD_PULL(pull) | PAD_IOSSTATE(iosstate) | PAD_IOSTERM(ioterm))
/* General purpose output with VCCIO Select. */
#define PAD_CFG_GPO_VCCIOSEL(pad, val, rst, vcciosel) \
_PAD_CFG_STRUCT_3(pad, \
PAD_FUNC(GPIO) | PAD_RESET(rst) | \
PAD_TRIG(OFF) | PAD_BUF(RX_DISABLE) | !!val, \
PAD_PULL(NONE) | PAD_IOSSTATE(TxLASTRxE), \
PAD_CFG2_VCCIOSEL_##vcciosel)
/* General purpose input */
#define PAD_CFG_GPI(pad, pull, rst) \
_PAD_CFG_STRUCT(pad, \