[coreboot-gerrit] Patch set updated for coreboot: 1bc8e8a lynxpoint: Rework LP GPIO handling
Stefan Reinauer (stefan.reinauer@coreboot.org)
gerrit at coreboot.org
Wed Nov 20 01:10:21 CET 2013
Stefan Reinauer (stefan.reinauer at coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/4138
-gerrit
commit 1bc8e8a9ed714bea4294b3981b3687d331b2a987
Author: Duncan Laurie <dlaurie at chromium.org>
Date: Tue Apr 23 13:43:23 2013 -0700
lynxpoint: Rework LP GPIO handling
This adds some macros for the common GPIO defines and drops
the gpio number definition from each entry. The end result
is much easier to read. The wtm2 mainboard gpio list is modified
to use this.
Also fix a bug in the LP version of get_gpio() that was always
returning zero due to a miscompare.
Change-Id: I143e5aee412af1eda84e35f8026f31cf13df508e
Signed-off-by: Duncan Laurie <dlaurie at chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/48946
Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
src/mainboard/intel/wtm2/gpio.h | 439 +++++++-----------------------
src/southbridge/intel/lynxpoint/lp_gpio.c | 18 +-
src/southbridge/intel/lynxpoint/lp_gpio.h | 53 +++-
3 files changed, 156 insertions(+), 354 deletions(-)
diff --git a/src/mainboard/intel/wtm2/gpio.h b/src/mainboard/intel/wtm2/gpio.h
index 179259c..884fd66 100644
--- a/src/mainboard/intel/wtm2/gpio.h
+++ b/src/mainboard/intel/wtm2/gpio.h
@@ -22,348 +22,103 @@
#include "southbridge/intel/lynxpoint/lp_gpio.h"
-const struct pch_lp_gpio_map mainboard_gpio_map[] = {
- /* LPSS_UART1_RXD */
- { .gpio = 0,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_UART1_TXD */
- { .gpio = 1,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_UART1_RTS_N_R */
- { .gpio = 2,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_UART1_CTS_N */
- { .gpio = 3,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_I2C0_SDA_R */
- { .gpio = 4,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_I2C0_SCL */
- { .gpio = 5,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_I2C1_SDA */
- { .gpio = 6,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_I2C1_SCL */
- { .gpio = 7,
- .conf0 = GPIO_MODE_NATIVE },
- /* NGFF_SLTA_WIFI_WAKE_N */
- { .gpio = 8,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_DISABLE },
- /* ACCEL_INT2_MCP (NGFF_SLTA_UART_WAKE_N) */
- { .gpio = 9,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_DISABLE },
- /* SMC_RUNTIME_SCI_N */
- { .gpio = 10,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT | GPIO_INVERT,
- .conf1 = GPIO_SENSE_ENABLE,
- .owner = GPIO_OWNER_ACPI,
- .route = GPIO_ROUTE_SCI },
- /* AMB_THRM_R_N */
- { .gpio = 11,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_DISABLE },
- /* PM_LANPHY_ENABLE */
- { .gpio = 12,
- .conf0 = GPIO_MODE_NATIVE },
- /* USB32_P0_PWREN */
- { .gpio = 13,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH,
- .conf1 = GPIO_SENSE_DISABLE },
- /* SH_INT_ACCEL_DRDY_USB_INT_N */
- { .gpio = 14,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT | GPIO_IRQ_EDGE,
- .conf1 = GPIO_SENSE_ENABLE,
- .owner = GPIO_OWNER_GPIO,
- .irqen = GPIO_IRQ_ENABLE },
- /* LAN_PWREN_N */
- { .gpio = 15,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH,
- .conf1 = GPIO_SENSE_DISABLE },
- /* LAN_RST_N */
- { .gpio = 16,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH,
- .conf1 = GPIO_SENSE_DISABLE },
- /* CRIT_TEMP_REP_R_N (NGFF_SLTB_CARD_PRESENT_SSD_N) */
- { .gpio = 17,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_LOW },
- /* TBT_FORCE_PWR */
- { .gpio = 18,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT,
- .conf1 = GPIO_SENSE_DISABLE },
- /* EC_IN_RW */
- { .gpio = 19,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_DISABLE,
- .owner = GPIO_OWNER_GPIO },
- /* CK_REQ_P2_NGFFSLTA_N_R */
- { .gpio = 20,
- .conf0 = GPIO_MODE_NATIVE },
- /* CK_PCIE_LAN_REQ_N */
- { .gpio = 21,
- .conf0 = GPIO_MODE_NATIVE },
- /* CK_REQ_P4_TBT_N */
- { .gpio = 22,
- .conf0 = GPIO_MODE_NATIVE },
- /* CK_REQ_P5_N */
- { .gpio = 23,
- .conf0 = GPIO_MODE_NATIVE },
- /* ME_PG_LED (NGFF_SLTB_WWN_CRD_PRSNT) */
- { .gpio = 24,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_LOW,
- .conf1 = GPIO_SENSE_DISABLE },
- /* USB_WAKEOUT_N */
- { .gpio = 25,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_ENABLE },
- /* NFC_IRQ_MGP5 */
- { .gpio = 26,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT | GPIO_IRQ_EDGE,
- .conf1 = GPIO_SENSE_ENABLE,
- .owner = GPIO_OWNER_GPIO,
- .irqen = GPIO_IRQ_ENABLE },
- /* SMC_WAKE_SCI_N */
- { .gpio = 27,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_ENABLE },
- /* PCH_NFC_RESET */
- { .gpio = 28,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_LOW,
- .conf1 = GPIO_SENSE_DISABLE },
- /* PCH_SLP_WLAN_N */
- { .gpio = 29,
- .conf0 = GPIO_MODE_NATIVE },
- /* SUS_PWR_ACK_R */
- { .gpio = 30,
- .conf0 = GPIO_MODE_NATIVE },
- /* AC_PRESENT_R */
- { .gpio = 31,
- .conf0 = GPIO_MODE_NATIVE },
- /* PM_CKRUN_N */
- { .gpio = 32,
- .conf0 = GPIO_MODE_NATIVE },
- /* SATA0_PHYSLP */
- { .gpio = 33,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_LOW,
- .conf1 = GPIO_SENSE_DISABLE },
- /* ESATA_DET_N */
- { .gpio = 34,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT },
- /* SATA_DIRECT_PRSNT_R_N */
- { .gpio = 35,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT },
- /* NGFF_SSD_SATA2_PCIE1_DET_N */
- { .gpio = 36,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT },
- /* NGFF_SSD_SATA3_PCIE0_DET_N */
- { .gpio = 37,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT },
- /* SATA1_PHYSLP_DIRECT */
- { .gpio = 38,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_LOW,
- .conf1 = GPIO_SENSE_DISABLE },
- /* SMC_EXTSMI_N_R */
- { .gpio = 39,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_ENABLE,
- .owner = GPIO_OWNER_ACPI,
- .route = GPIO_ROUTE_SMI },
- /* USB_OC_0_1_R_N */
- { .gpio = 40,
- .conf0 = GPIO_MODE_NATIVE },
- /* USB_OC_2_6_R_N */
- { .gpio = 41,
- .conf0 = GPIO_MODE_NATIVE },
- /* TBT_CIO_PLUG_SMI_N_R */
- { .gpio = 42,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_DISABLE },
- /* USB32_P1_PWREN */
- { .gpio = 43,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH,
- .conf1 = GPIO_SENSE_DISABLE },
- /* SENSOR_HUB_RST_N */
- { .gpio = 44,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT },
- /* GYRO_INT2_MCP_R (TBT_WAKE_Q_N) */
- { .gpio = 45,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT },
- /* SNSR_HUB_PWREN */
- { .gpio = 46,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH,
- .conf1 = GPIO_SENSE_DISABLE },
- /* SPI_TPM_HDR_IRQ_N */
- { .gpio = 47,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_ENABLE,
- .owner = GPIO_OWNER_GPIO,
- .irqen = GPIO_IRQ_ENABLE },
- /* PCIE_TBT_RST_N */
- { .gpio = 48,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH,
- .conf1 = GPIO_SENSE_DISABLE },
- /* COMBO_JD */
- { .gpio = 49,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT },
- /* TOUCH_PANEL_INTR_N */
- { .gpio = 50,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_ENABLE,
- .owner = GPIO_OWNER_GPIO,
- .irqen = GPIO_IRQ_ENABLE },
- /* PCH_WIFI_RF_KILL_N */
- { .gpio = 51,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH,
- .conf1 = GPIO_SENSE_DISABLE },
- /* TOUCH_PNL_RST_N_R */
- { .gpio = 52,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH,
- .conf1 = GPIO_SENSE_DISABLE },
- /* SNSR_HUB_I2C_WAKE / ALS_INT_MCP (NGFF_SLTB_WWAN_SSD_DET2) */
- { .gpio = 53,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_ENABLE,
- .owner = GPIO_OWNER_GPIO },
- /* NGFF_SLTB_SSD_MC_WAKE_N */
- { .gpio = 54,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_ENABLE,
- .owner = GPIO_OWNER_GPIO },
- /* TOUCHPAD_INTR_N */
- { .gpio = 55,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT,
- .conf1 = GPIO_SENSE_ENABLE,
- .owner = GPIO_OWNER_GPIO,
- .irqen = GPIO_IRQ_ENABLE },
- /* NGFF_SLTB_WWAN_SSD_DET1 */
- { .gpio = 56,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT },
- /* NGFF_SLTB_WWAN_PWREN */
- { .gpio = 57,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH,
- .conf1 = GPIO_SENSE_DISABLE },
- /* SLATEMODE_HALLOUT_R */
- { .gpio = 58,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_LOW,
- .conf1 = GPIO_SENSE_DISABLE },
- /* USB2_CAM_PWREN */
- { .gpio = 59,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH,
- .conf1 = GPIO_SENSE_DISABLE },
- /* USB_CR_PWREN_N */
- { .gpio = 60,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_LOW,
- .conf1 = GPIO_SENSE_DISABLE },
- /* PM_SUS_STAT_N */
- { .gpio = 61,
- .conf0 = GPIO_MODE_NATIVE },
- /* SUS_CK */
- { .gpio = 62,
- .conf0 = GPIO_MODE_NATIVE },
- /* SLP_S5_R_N */
- { .gpio = 63,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_SDIO_CLK_CMNHDR_R */
- { .gpio = 64,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_SDIO_CMD_CMNHDR_R */
- { .gpio = 65,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_SDIO_D0_CMNHDR_R */
- { .gpio = 66,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_SDIO_D1_CMNHDR_R */
- { .gpio = 67,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_SDIO_D2_CMNHDR_R */
- { .gpio = 68,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_SDIO_D3_CMNHDR_R1 */
- { .gpio = 69,
- .conf0 = GPIO_MODE_NATIVE },
- /* NGFF_SLTA_WIFI_PWREN_N_R (SDIO_POWER_EN) */
- { .gpio = 70,
- .conf0 = GPIO_MODE_NATIVE },
- /* MPHY_PWREN */
- { .gpio = 71,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH,
- .conf1 = GPIO_SENSE_DISABLE },
- /* PM_BATLOW_R_N */
- { .gpio = 72,
- .conf0 = GPIO_MODE_NATIVE },
- /* PCH_NOT_N */
- { .gpio = 73,
- .conf0 = GPIO_MODE_NATIVE },
- /* SML1_DATA */
- { .gpio = 74,
- .conf0 = GPIO_MODE_NATIVE },
- /* SML1_CK */
- { .gpio = 75,
- .conf0 = GPIO_MODE_NATIVE },
- /* PCH_AUDIO_PWR_R */
- { .gpio = 76,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH,
- .conf1 = GPIO_SENSE_DISABLE },
- /* PC_SLTB_SSD_RST_N_R */
- { .gpio = 77,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_LOW,
- .conf1 = GPIO_SENSE_DISABLE },
- /* PM_EXTTS0_EC_N */
- { .gpio = 78,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT },
- /* SIO1007_IRQ_N */
- { .gpio = 79,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT },
- /* PM_EXTTS1_R_N */
- { .gpio = 80,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT },
- /* PCH_HDA_SPKR */
- { .gpio = 81,
- .conf0 = GPIO_MODE_NATIVE },
- /* H_RCIN_N */
- { .gpio = 82,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_GSPI0_CS_R_N */
- { .gpio = 83,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_GSPI0_CLK_R */
- { .gpio = 84,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_GSPI0_MISO_R */
- { .gpio = 85,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_GSPI0_MOSI_BBS0_R */
- { .gpio = 86,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_GSPI1_CS_R_N */
- { .gpio = 87,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_GSPI1_CLK_R */
- { .gpio = 88,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_GSPI1_MISO_R */
- { .gpio = 89,
- .conf0 = GPIO_MODE_NATIVE },
- /* NGFF_SLTA_WIFI_RST_N */
- { .gpio = 90,
- .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_LOW,
- .conf1 = GPIO_SENSE_DISABLE },
- /* LPSS_UART0_RXD */
- { .gpio = 91,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_UART0_TXD */
- { .gpio = 92,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_UART0_RTS_N */
- { .gpio = 93,
- .conf0 = GPIO_MODE_NATIVE },
- /* LPSS_UART0_CTS_N */
- { .gpio = 94,
- .conf0 = GPIO_MODE_NATIVE },
- /* END */
- { .gpio = GPIO_LIST_END }
+static const struct pch_lp_gpio_map mainboard_gpio_map[] = {
+ LP_GPIO_NATIVE, /* 0: LPSS_UART1_RXD */
+ LP_GPIO_NATIVE, /* 1: LPSS_UART1_TXD */
+ LP_GPIO_NATIVE, /* 2: LPSS_UART1_RTS_N_R */
+ LP_GPIO_NATIVE, /* 3: LPSS_UART1_CTS_N */
+ LP_GPIO_NATIVE, /* 4: LPSS_I2C0_SDA_R */
+ LP_GPIO_NATIVE, /* 5: LPSS_I2C0_SCL */
+ LP_GPIO_NATIVE, /* 6: LPSS_I2C1_SDA */
+ LP_GPIO_NATIVE, /* 7: LPSS_I2C1_SCL */
+ LP_GPIO_UNUSED, /* 8: NGFF_SLTA_WIFI_WAKE_N */
+ LP_GPIO_UNUSED, /* 9: ACCEL_INT2_MCP */
+ LP_GPIO_ACPI_SCI, /* 10: SMC_RUNTIME_SCI_N */
+ LP_GPIO_UNUSED, /* 11: AMB_THRM_R_N */
+ LP_GPIO_NATIVE, /* 12: PM_LANPHY_ENABLE */
+ LP_GPIO_OUT_HIGH, /* 13: USB32_P0_PWREN */
+ LP_GPIO_IRQ_EDGE, /* 14: SH_INT_ACCEL_DRDY_USB_INT_N */
+ LP_GPIO_OUT_HIGH, /* 15: LAN_PWREN_N */
+ LP_GPIO_OUT_HIGH, /* 16: LAN_RST_N */
+ LP_GPIO_OUT_LOW, /* 17: CRIT_TEMP_REP_R_N */
+ LP_GPIO_UNUSED, /* 18: TBT_FORCE_PWR */
+ LP_GPIO_INPUT, /* 19: EC_IN_RW */
+ LP_GPIO_NATIVE, /* 20: CK_REQ_P2_NGFFSLTA_N_R */
+ LP_GPIO_NATIVE, /* 21: CK_PCIE_LAN_REQ_N */
+ LP_GPIO_NATIVE, /* 22: CK_REQ_P4_TBT_N */
+ LP_GPIO_NATIVE, /* 23: CK_REQ_P5_N */
+ LP_GPIO_OUT_LOW, /* 24: ME_PG_LED */
+ LP_GPIO_INPUT, /* 25: USB_WAKEOUT_N */
+ LP_GPIO_IRQ_EDGE, /* 26: NFC_IRQ_MGP5 */
+ LP_GPIO_ACPI_SCI, /* 27: SMC_WAKE_SCI_N */
+ LP_GPIO_OUT_LOW, /* 28: PCH_NFC_RESET */
+ LP_GPIO_NATIVE, /* 29: PCH_SLP_WLAN_N */
+ LP_GPIO_NATIVE, /* 30: SUS_PWR_ACK_R */
+ LP_GPIO_NATIVE, /* 31: AC_PRESENT_R */
+ LP_GPIO_NATIVE, /* 32: PM_CKRUN_N */
+ LP_GPIO_OUT_LOW, /* 33: SATA0_PHYSLP */
+ LP_GPIO_INPUT, /* 34: ESATA_DET_N */
+ LP_GPIO_INPUT, /* 35: SATA_DIRECT_PRSNT_R_N */
+ LP_GPIO_INPUT, /* 36: NGFF_SSD_SATA2_PCIE1_DET_N */
+ LP_GPIO_INPUT, /* 37: NGFF_SSD_SATA3_PCIE0_DET_N */
+ LP_GPIO_OUT_LOW, /* 38: SATA1_PHYSLP_DIRECT */
+ LP_GPIO_ACPI_SMI, /* 39: SMC_EXTSMI_N_R */
+ LP_GPIO_NATIVE, /* 40: USB_OC_0_1_R_N */
+ LP_GPIO_NATIVE, /* 41: USB_OC_2_6_R_N */
+ LP_GPIO_INPUT, /* 42: TBT_CIO_PLUG_SMI_N_R */
+ LP_GPIO_OUT_HIGH, /* 43: USB32_P1_PWREN */
+ LP_GPIO_INPUT, /* 44: SENSOR_HUB_RST_N */
+ LP_GPIO_INPUT, /* 45: GYRO_INT2_MCP_R */
+ LP_GPIO_OUT_HIGH, /* 46: SNSR_HUB_PWREN */
+ LP_GPIO_IRQ_EDGE, /* 47: SPI_TPM_HDR_IRQ_N */
+ LP_GPIO_OUT_HIGH, /* 48: PCIE_TBT_RST_N */
+ LP_GPIO_INPUT, /* 49: COMBO_JD */
+ LP_GPIO_IRQ_EDGE, /* 50: TOUCH_PANEL_INTR_N */
+ LP_GPIO_OUT_HIGH, /* 51: PCH_WIFI_RF_KILL_N */
+ LP_GPIO_OUT_HIGH, /* 52: TOUCH_PNL_RST_N_R */
+ LP_GPIO_INPUT, /* 53: SNSR_HUB_I2C_WAKE / ALS_INT_MCP */
+ LP_GPIO_ACPI_SCI, /* 54: NGFF_SLTB_SSD_MC_WAKE_N */
+ LP_GPIO_IRQ_EDGE, /* 55: TOUCHPAD_INTR_N */
+ LP_GPIO_INPUT, /* 56: NGFF_SLTB_WWAN_SSD_DET1 */
+ LP_GPIO_OUT_HIGH, /* 57: NGFF_SLTB_WWAN_PWREN */
+ LP_GPIO_OUT_LOW, /* 58: SLATEMODE_HALLOUT_R */
+ LP_GPIO_OUT_HIGH, /* 59: USB2_CAM_PWREN */
+ LP_GPIO_OUT_LOW, /* 60: USB_CR_PWREN_N */
+ LP_GPIO_NATIVE, /* 61: PM_SUS_STAT_N */
+ LP_GPIO_NATIVE, /* 62: SUS_CK */
+ LP_GPIO_NATIVE, /* 63: SLP_S5_R_N */
+ LP_GPIO_NATIVE, /* 64: LPSS_SDIO_CLK_CMNHDR_R */
+ LP_GPIO_NATIVE, /* 65: LPSS_SDIO_CMD_CMNHDR_R */
+ LP_GPIO_NATIVE, /* 66: LPSS_SDIO_D0_CMNHDR_R */
+ LP_GPIO_NATIVE, /* 67: LPSS_SDIO_D1_CMNHDR_R */
+ LP_GPIO_NATIVE, /* 68: LPSS_SDIO_D2_CMNHDR_R */
+ LP_GPIO_NATIVE, /* 69: LPSS_SDIO_D3_CMNHDR_R1 */
+ LP_GPIO_NATIVE, /* 70: NGFF_SLTA_WIFI_PWREN_N_R */
+ LP_GPIO_OUT_HIGH, /* 71: MPHY_PWREN */
+ LP_GPIO_NATIVE, /* 72: PM_BATLOW_R_N */
+ LP_GPIO_NATIVE, /* 73: PCH_NOT_N */
+ LP_GPIO_NATIVE, /* 74: SML1_DATA */
+ LP_GPIO_NATIVE, /* 75: SML1_CK */
+ LP_GPIO_OUT_HIGH, /* 76: PCH_AUDIO_PWR_R */
+ LP_GPIO_OUT_LOW, /* 77: PC_SLTB_SSD_RST_N_R */
+ LP_GPIO_INPUT, /* 78: PM_EXTTS0_EC_N */
+ LP_GPIO_IRQ_EDGE, /* 79: SIO1007_IRQ_N */
+ LP_GPIO_INPUT, /* 80: PM_EXTTS1_R_N */
+ LP_GPIO_NATIVE, /* 81: PCH_HDA_SPKR */
+ LP_GPIO_NATIVE, /* 82: H_RCIN_N */
+ LP_GPIO_NATIVE, /* 83: LPSS_GSPI0_CS_R_N */
+ LP_GPIO_NATIVE, /* 84: LPSS_GSPI0_CLK_R */
+ LP_GPIO_NATIVE, /* 85: LPSS_GSPI0_MISO_R */
+ LP_GPIO_NATIVE, /* 86: LPSS_GSPI0_MOSI_BBS0_R */
+ LP_GPIO_NATIVE, /* 87: LPSS_GSPI1_CS_R_N */
+ LP_GPIO_NATIVE, /* 88: LPSS_GSPI1_CLK_R */
+ LP_GPIO_NATIVE, /* 89: LPSS_GSPI1_MISO_R */
+ LP_GPIO_OUT_LOW, /* 90: NGFF_SLTA_WIFI_RST_N */
+ LP_GPIO_NATIVE, /* 91: LPSS_UART0_RXD */
+ LP_GPIO_NATIVE, /* 92: LPSS_UART0_TXD */
+ LP_GPIO_NATIVE, /* 93: LPSS_UART0_RTS_N */
+ LP_GPIO_NATIVE, /* 94: LPSS_UART0_CTS_N */
+ LP_GPIO_END
};
#endif
diff --git a/src/southbridge/intel/lynxpoint/lp_gpio.c b/src/southbridge/intel/lynxpoint/lp_gpio.c
index 604423a..b90e5ba 100644
--- a/src/southbridge/intel/lynxpoint/lp_gpio.c
+++ b/src/southbridge/intel/lynxpoint/lp_gpio.c
@@ -45,19 +45,19 @@ void setup_pch_lp_gpios(const struct pch_lp_gpio_map map[])
u32 irqen[3] = {0};
u32 reset[3] = {0};
u32 blink = 0;
- int set, bit;
+ int set, bit, gpio = 0;
- for (config = map; config->gpio != GPIO_LIST_END; config++) {
- if (config->gpio > MAX_GPIO_NUMBER)
- continue;
+ for (config = map; config->conf0 != GPIO_LIST_END; config++, gpio++) {
+ if (gpio > MAX_GPIO_NUMBER)
+ break;
/* Setup Configuration registers 1 and 2 */
- outl(config->conf0, gpio_base + GPIO_CONFIG0(config->gpio));
- outl(config->conf1, gpio_base + GPIO_CONFIG1(config->gpio));
+ outl(config->conf0, gpio_base + GPIO_CONFIG0(gpio));
+ outl(config->conf1, gpio_base + GPIO_CONFIG1(gpio));
/* Determine set and bit based on GPIO number */
- set = config->gpio >> 5;
- bit = config->gpio % 32;
+ set = gpio >> 5;
+ bit = gpio % 32;
/* Apply settings to set specific bits */
owner[set] |= config->owner << bit;
@@ -83,7 +83,7 @@ int get_gpio(int gpio_num)
{
u16 gpio_base = get_gpio_base();
- if (gpio_num < MAX_GPIO_NUMBER)
+ if (gpio_num > MAX_GPIO_NUMBER)
return 0;
return !!(inl(gpio_base + GPIO_CONFIG0(gpio_num)) & GPI_LEVEL);
diff --git a/src/southbridge/intel/lynxpoint/lp_gpio.h b/src/southbridge/intel/lynxpoint/lp_gpio.h
index 9666adc..48a23cb 100644
--- a/src/southbridge/intel/lynxpoint/lp_gpio.h
+++ b/src/southbridge/intel/lynxpoint/lp_gpio.h
@@ -36,7 +36,7 @@
#define GPIO_CONFIG1(gpio) (0x104 + ((gpio) * 8))
#define MAX_GPIO_NUMBER 94 /* zero based */
-#define GPIO_LIST_END 0xff
+#define GPIO_LIST_END 0xffffffff
/* conf0 */
@@ -54,8 +54,10 @@
#define GPI_LEVEL (1 << 30)
-#define GPO_LEVEL_LOW (0 << 31)
-#define GPO_LEVEL_HIGH (1 << 31)
+#define GPO_LEVEL_SHIFT 31
+#define GPO_LEVEL_MASK (1 << GPO_LEVEL_SHIFT)
+#define GPO_LEVEL_LOW (0 << GPO_LEVEL_SHIFT)
+#define GPO_LEVEL_HIGH (1 << GPO_LEVEL_SHIFT)
/* conf1 */
@@ -91,6 +93,51 @@
#define GPIO_RESET_PWROK 0
#define GPIO_RESET_RSMRST 1
+#define LP_GPIO_END \
+ { .conf0 = GPIO_LIST_END }
+
+#define LP_GPIO_NATIVE \
+ { .conf0 = GPIO_MODE_NATIVE }
+
+#define LP_GPIO_UNUSED \
+ { .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT, \
+ .owner = GPIO_OWNER_GPIO, \
+ .conf1 = GPIO_SENSE_DISABLE }
+
+#define LP_GPIO_ACPI_SCI \
+ { .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT | GPIO_INVERT, \
+ .owner = GPIO_OWNER_ACPI, \
+ .route = GPIO_ROUTE_SCI }
+
+#define LP_GPIO_ACPI_SMI \
+ { .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT, \
+ .owner = GPIO_OWNER_ACPI, \
+ .route = GPIO_ROUTE_SMI }
+
+#define LP_GPIO_INPUT \
+ { .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT, \
+ .owner = GPIO_OWNER_GPIO }
+
+#define LP_GPIO_IRQ_EDGE \
+ { .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT | GPIO_IRQ_EDGE, \
+ .owner = GPIO_OWNER_GPIO, \
+ .irqen = GPIO_IRQ_ENABLE }
+
+#define LP_GPIO_IRQ_LEVEL \
+ { .conf0 = GPIO_MODE_GPIO | GPIO_DIR_INPUT | GPIO_IRQ_LEVEL, \
+ .owner = GPIO_OWNER_GPIO, \
+ .irqen = GPIO_IRQ_ENABLE }
+
+#define LP_GPIO_OUT_HIGH \
+ { .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_HIGH, \
+ .owner = GPIO_OWNER_GPIO, \
+ .conf1 = GPIO_SENSE_DISABLE }
+
+#define LP_GPIO_OUT_LOW \
+ { .conf0 = GPIO_MODE_GPIO | GPIO_DIR_OUTPUT | GPO_LEVEL_LOW, \
+ .owner = GPIO_OWNER_GPIO, \
+ .conf1 = GPIO_SENSE_DISABLE }
+
struct pch_lp_gpio_map {
u8 gpio;
u32 conf0;
More information about the coreboot-gerrit
mailing list