/** @file
  Register names for PCH GPIO
  Conventions:
  Prefixes:
  Definitions beginning with "R_" are registers
  Definitions beginning with "B_" are bits within registers
  Definitions beginning with "V_" are meaningful values within the bits
  Definitions beginning with "S_" are register sizes
  Definitions beginning with "N_" are the bit position
  In general, PCH registers are denoted by "_PCH_" in register names
  Registers / bits that are different between PCH generations are denoted by
  _PCH_[generation_name]_" in register/bit names.
  Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
  Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
  e.g., "_PCH_H_", "_PCH_LP_"
  Registers / bits names without _H_ or _LP_ apply for both H and LP.
  Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
  at the end of the register/bit names
  Registers / bits of new devices introduced in a PCH generation will be just named
  as "_PCH_" without [generation_name] inserted.

  @copyright
  Copyright 2013 - 2021 Intel Corporation. <BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#ifndef _PCH_REGS_GPIO_H_
#define _PCH_REGS_GPIO_H_

#define V_PCH_GPIO_GPP_A_PAD_MAX            24
#define V_PCH_GPIO_GPP_B_PAD_MAX            24
#define V_PCH_GPIO_GPP_C_PAD_MAX            24
#define V_PCH_GPIO_GPP_D_PAD_MAX            24
#define V_PCH_LP_GPIO_GPP_E_PAD_MAX         24
#define V_PCH_H_GPIO_GPP_E_PAD_MAX          13
#define V_PCH_GPIO_GPP_F_PAD_MAX            24
#define V_PCH_LP_GPIO_GPP_G_PAD_MAX         8
#define V_PCH_H_GPIO_GPP_G_PAD_MAX          24
#define V_PCH_H_GPIO_GPP_H_PAD_MAX          24
#define V_PCH_H_GPIO_GPP_J_PAD_MAX          24
#define V_PCH_H_GPIO_GPP_K_PAD_MAX          11
#define V_PCH_H_GPIO_GPP_L_PAD_MAX          20
#define V_PCH_H_GPIO_GPP_I_PAD_MAX          11

#define V_PCH_GPIO_GPD_PAD_MAX              12

#define V_PCH_GPIO_GROUP_MAX                13
#define V_PCH_H_GPIO_GROUP_MAX              V_PCH_GPIO_GROUP_MAX
#define V_PCH_LP_GPIO_GROUP_MAX             8
#define PCH_GPIO_NUM_SUPPORTED_GPIS       261
#define S_GPIO_PCR_GP_SMI_EN                4
#define S_GPIO_PCR_GP_SMI_STS               4

///
/// Groups mapped to 2-tier General Purpose Event will all be under
/// one master GPE_111 (0x6F)
///
#define PCH_GPIO_2_TIER_MASTER_GPE_NUMBER  0x6F


//
// GPIO Common Private Configuration Registers
//
#define R_GPIO_PCR_REV_ID               0x00
#define R_GPIO_PCR_CAP_LIST             0x04
#define R_GPIO_PCR_FAMBAR               0x08
#define R_GPIO_PCR_PADBAR               0x0C
#define B_GPIO_PCR_PADBAR               0x0000FFFF
#define R_GPIO_PCR_MISCCFG              0x10
#define B_GPIO_PCR_MISCCFG_GPE0_DW2     (BIT19 | BIT18 | BIT17 | BIT16)
#define N_GPIO_PCR_MISCCFG_GPE0_DW2     16
#define B_GPIO_PCR_MISCCFG_GPE0_DW1     (BIT15 | BIT14 | BIT13 | BIT12)
#define N_GPIO_PCR_MISCCFG_GPE0_DW1     12
#define B_GPIO_PCR_MISCCFG_GPE0_DW0     (BIT11 | BIT10 | BIT9 | BIT8)
#define N_GPIO_PCR_MISCCFG_GPE0_DW0     8
#define B_PCH_PCR_GPIO_MISCCFG_IRQ_ROUTE    BIT3
#define N_PCH_PCR_GPIO_MISCCFG_IRQ_ROUTE    3
#define B_GPIO_PCR_MISCCFG_GPDPCGEN     BIT1
#define B_GPIO_PCR_MISCCFG_GPDLCGEN     BIT0
// SKL PCH-H:
#define R_PCH_H_PCR_GPIO_MISCSECCFG         0x14

//
// GPIO Community 0 Private Configuration Registers
//
// SKL PCH-LP
#define R_PCH_LP_PCR_GPIO_GPP_A_PAD_OWN        0x20
#define R_PCH_LP_PCR_GPIO_GPP_B_PAD_OWN        0x30
#define R_PCH_LP_PCR_GPIO_GPP_A_GPI_VWM_EN     0x80
#define R_PCH_LP_PCR_GPIO_GPP_B_GPI_VWM_EN     0x84
#define R_PCH_LP_PCR_GPIO_GPP_A_PADCFGLOCK     0xA0
#define R_PCH_LP_PCR_GPIO_GPP_A_PADCFGLOCKTX   0xA4
#define R_PCH_LP_PCR_GPIO_GPP_B_PADCFGLOCK     0xA8
#define R_PCH_LP_PCR_GPIO_GPP_B_PADCFGLOCKTX   0xAC
// SKX Server PCH
#define R_PCH_H_PCR_GPIO_GPP_A_PAD_OWN        0x20
#define R_PCH_H_PCR_GPIO_GPP_B_PAD_OWN        0x2C
#define R_PCH_H_PCR_GPIO_GPP_F_PAD_OWN        0x38
#define R_PCH_H_PCR_GPIO_GPP_A_GPI_VWM_EN     0x50
#define R_PCH_H_PCR_GPIO_GPP_B_GPI_VWM_EN     0x54
#define R_PCH_H_PCR_GPIO_GPP_F_GPI_VWM_EN     0x58
#define R_PCH_H_PCR_GPIO_GPP_A_PADCFGLOCK     0x60
#define R_PCH_H_PCR_GPIO_GPP_A_PADCFGLOCKTX   0x64
#define R_PCH_H_PCR_GPIO_GPP_B_PADCFGLOCK     0x68
#define R_PCH_H_PCR_GPIO_GPP_B_PADCFGLOCKTX   0x6C
#define R_PCH_H_PCR_GPIO_GPP_F_PADCFGLOCK     0x70
#define R_PCH_H_PCR_GPIO_GPP_F_PADCFGLOCKTX   0x74
#define R_PCH_H_PCR_GPIO_GPP_F_HOSTSW_OWN     0x88
#define R_PCH_H_PCR_GPIO_GPP_F_GPI_IS         0x0108
#define R_PCH_H_PCR_GPIO_GPP_F_GPI_IE         0x0118
#define R_PCH_H_PCR_GPIO_GPP_F_GPI_GPE_STS    0x0128
#define R_PCH_H_PCR_GPIO_GPP_F_GPI_GPE_EN     0x0138
#define R_PCH_H_PCR_GPIO_GPP_F_PADCFG_OFFSET  0x580

// Common
#define R_PCH_PCR_GPIO_GPP_A_HOSTSW_OWN     0x80
#define R_PCH_PCR_GPIO_GPP_B_HOSTSW_OWN     0x84
#define R_PCH_PCR_GPIO_GPP_A_GPI_IS         0x0100
#define R_PCH_PCR_GPIO_GPP_B_GPI_IS         0x0104
#define R_PCH_PCR_GPIO_GPP_A_GPI_IE         0x0110
#define R_PCH_PCR_GPIO_GPP_B_GPI_IE         0x0114
#define R_PCH_PCR_GPIO_GPP_A_GPI_GPE_STS    0x0120
#define R_PCH_PCR_GPIO_GPP_B_GPI_GPE_STS    0x0124
#define R_PCH_PCR_GPIO_GPP_A_GPI_GPE_EN     0x0130
#define R_PCH_PCR_GPIO_GPP_B_GPI_GPE_EN     0x0134
#define R_PCH_PCR_GPIO_GPP_B_SMI_STS        0x0144
#define R_PCH_PCR_GPIO_GPP_B_SMI_EN         0x0154
#define R_PCH_PCR_GPIO_GPP_B_NMI_STS        0x0164
#define R_PCH_PCR_GPIO_GPP_B_NMI_EN         0x0174
#define R_PCH_PCR_GPIO_GPP_A_PADCFG_OFFSET  0x400
#define R_PCH_PCR_GPIO_GPP_B_PADCFG_OFFSET  0x4C0

//
// GPIO Community 1 Private Configuration Registers
//
//SKL PCH-LP:
#define R_PCH_LP_PCR_GPIO_GPP_C_PAD_OWN        0x20
#define R_PCH_LP_PCR_GPIO_GPP_D_PAD_OWN        0x30
#define R_PCH_LP_PCR_GPIO_GPP_E_PAD_OWN        0x40
#define R_PCH_LP_PCR_GPIO_GPP_C_GPI_VWM_EN     0x80
#define R_PCH_LP_PCR_GPIO_GPP_D_GPI_VWM_EN     0x84
#define R_PCH_LP_PCR_GPIO_GPP_E_GPI_VWM_EN     0x88
#define R_PCH_LP_PCR_GPIO_GPP_C_PADCFGLOCK     0xA0
#define R_PCH_LP_PCR_GPIO_GPP_C_PADCFGLOCKTX   0xA4
#define R_PCH_LP_PCR_GPIO_GPP_D_PADCFGLOCK     0xA8
#define R_PCH_LP_PCR_GPIO_GPP_D_PADCFGLOCKTX   0xAC
#define R_PCH_LP_PCR_GPIO_GPP_E_PADCFGLOCK     0xB0
#define R_PCH_LP_PCR_GPIO_GPP_E_PADCFGLOCKTX   0xB4
//SKL PCH-H:
#define R_PCH_H_PCR_GPIO_GPP_C_PAD_OWN        0x20
#define R_PCH_H_PCR_GPIO_GPP_D_PAD_OWN        0x2C
#define R_PCH_H_PCR_GPIO_GPP_E_PAD_OWN        0x38
// Server SKX PCH
#define R_PCH_H_PCR_GPIO_GPP_C_GPI_VWM_EN     0x50
#define R_PCH_H_PCR_GPIO_GPP_D_GPI_VWM_EN     0x54
#define R_PCH_H_PCR_GPIO_GPP_E_GPI_VWM_EN     0x58
#define R_PCH_H_PCR_GPIO_GPP_C_PADCFGLOCK     0x60
#define R_PCH_H_PCR_GPIO_GPP_C_PADCFGLOCKTX   0x64
#define R_PCH_H_PCR_GPIO_GPP_D_PADCFGLOCK     0x68
#define R_PCH_H_PCR_GPIO_GPP_D_PADCFGLOCKTX   0x6C
#define R_PCH_H_PCR_GPIO_GPP_E_PADCFGLOCK     0x70
#define R_PCH_H_PCR_GPIO_GPP_E_PADCFGLOCKTX   0x74
// Common
#define R_PCH_PCR_GPIO_GPP_C_HOSTSW_OWN       0x80
#define R_PCH_PCR_GPIO_GPP_D_HOSTSW_OWN       0x84
#define R_PCH_PCR_GPIO_GPP_E_HOSTSW_OWN       0x88
#define R_PCH_PCR_GPIO_GPP_C_GPI_IS           0x0100
#define R_PCH_PCR_GPIO_GPP_D_GPI_IS           0x0104
#define R_PCH_PCR_GPIO_GPP_E_GPI_IS           0x0108
#define R_PCH_PCR_GPIO_GPP_C_GPI_IE           0x0110
#define R_PCH_PCR_GPIO_GPP_D_GPI_IE           0x0114
#define R_PCH_PCR_GPIO_GPP_E_GPI_IE           0x0114
#define R_PCH_PCR_GPIO_GPP_C_GPI_GPE_STS      0x0120
#define R_PCH_PCR_GPIO_GPP_D_GPI_GPE_STS      0x0124
#define R_PCH_PCR_GPIO_GPP_E_GPI_GPE_STS      0x0128
#define R_PCH_PCR_GPIO_GPP_C_GPI_GPE_EN       0x0130
#define R_PCH_PCR_GPIO_GPP_D_GPI_GPE_EN       0x0134
#define R_PCH_PCR_GPIO_GPP_E_GPI_GPE_EN       0x0138
#define R_PCH_PCR_GPIO_GPP_C_SMI_STS          0x0140
#define R_PCH_PCR_GPIO_GPP_D_SMI_STS          0x0144
#define R_PCH_PCR_GPIO_GPP_E_SMI_STS          0x0148
#define R_PCH_PCR_GPIO_GPP_C_SMI_EN           0x0150
#define R_PCH_PCR_GPIO_GPP_D_SMI_EN           0x0154
#define R_PCH_PCR_GPIO_GPP_E_SMI_EN           0x0158
#define R_PCH_PCR_GPIO_GPP_C_NMI_STS          0x0160
#define R_PCH_PCR_GPIO_GPP_D_NMI_STS          0x0164
#define R_PCH_PCR_GPIO_GPP_E_NMI_STS          0x0168
#define R_PCH_PCR_GPIO_GPP_C_NMI_EN           0x0170
#define R_PCH_PCR_GPIO_GPP_D_NMI_EN           0x0174
#define R_PCH_PCR_GPIO_GPP_E_NMI_EN           0x0178


// Common:
#define R_GPIO_PCR_CAP_LIST_1_PWM         0x0200
#define R_GPIO_PCR_PWMC                   0x0204
#define R_GPIO_PCR_CAP_LIST_2_SER_BLINK   0x0208
#define R_GPIO_PCR_GP_SER_BLINK           0x020C
#define B_GPIO_PCR_GP_SER_BLINK           0x1F
#define R_GPIO_PCR_GP_SER_CMDSTS          0x0210
#define B_GPIO_PCR_GP_SER_CMDSTS_DLS      (BIT23 | BIT22)
#define N_GPIO_PCR_GP_SER_CMDSTS_DLS      22
#define B_GPIO_PCR_GP_SER_CMDSTS_DRS      0x003F0000
#define N_GPIO_PCR_GP_SER_CMDSTS_DRS      16
#define B_GPIO_PCR_GP_SER_CMDSTS_BUSY     BIT8
#define B_GPIO_PCR_GP_SER_CMDSTS_GO       BIT0
#define R_GPIO_PCR_GP_SER_DATA            0x0210
// Common:
#define R_PCH_PCR_GPIO_GPP_C_PADCFG_OFFSET    0x400
#define R_PCH_PCR_GPIO_GPP_D_PADCFG_OFFSET    0x4C0
#define R_PCH_PCR_GPIO_GPP_E_PADCFG_OFFSET    0x580

//
// GPIO Community 2 Private Configuration Registers
//
// SKL PCH-LP
#define R_PCH_LP_PCR_GPIO_GPD_PAD_OWN         0x20
#define R_PCH_LP_PCR_GPIO_GPD_GPI_VWM_EN      0x80
#define R_PCH_LP_PCR_GPIO_GPD_PADCFGLOCK      0xA0
#define R_PCH_LP_PCR_GPIO_GPD_PADCFGLOCKTX    0xA4
// SKX Server PCH
#define R_PCH_H_PCR_GPIO_GPD_PAD_OWN          0x20
#define R_PCH_H_PCR_GPIO_GPD_GPI_VWM_EN       0x50
#define R_PCH_H_PCR_GPIO_GPD_PADCFGLOCK       0x60
#define R_PCH_H_PCR_GPIO_GPD_PADCFGLOCKTX     0x64
// Common
#define R_PCH_PCR_GPIO_GPD_HOSTSW_OWN       0x80
#define R_PCH_PCR_GPIO_GPD_GPI_IS           0x0100
#define R_PCH_PCR_GPIO_GPD_GPI_IE           0x0110
#define R_PCH_PCR_GPIO_GPD_GPI_GPE_STS      0x0120
#define R_PCH_PCR_GPIO_GPD_GPI_GPE_EN       0x0130
#define R_PCH_PCR_GPIO_GPD_PADCFG_OFFSET    0x400

//
// GPIO Community 3 Private Configuration Registers
//
// SKL PCH-LP:
#define R_PCH_LP_PCR_GPIO_GPP_F_PAD_OWN        0x20
#define R_PCH_LP_PCR_GPIO_GPP_G_PAD_OWN        0x30
#define R_PCH_LP_PCR_GPIO_GPP_F_GPI_VWM_EN     0x80
#define R_PCH_LP_PCR_GPIO_GPP_G_GPI_VWM_EN     0x84
#define R_PCH_LP_PCR_GPIO_GPP_F_PADCFGLOCK     0xA0
#define R_PCH_LP_PCR_GPIO_GPP_F_PADCFGLOCKTX   0xA4
#define R_PCH_LP_PCR_GPIO_GPP_G_PADCFGLOCK     0xA8
#define R_PCH_LP_PCR_GPIO_GPP_G_PADCFGLOCKTX   0xAC
#define R_PCH_LP_PCR_GPIO_GPP_F_HOSTSW_OWN     0xD0
#define R_PCH_LP_PCR_GPIO_GPP_G_HOSTSW_OWN     0xD4
#define R_PCH_LP_PCR_GPIO_GPP_F_GPI_IS         0x0100
#define R_PCH_LP_PCR_GPIO_GPP_G_GPI_IS         0x0104
#define R_PCH_LP_PCR_GPIO_GPP_F_GPI_IE         0x0120
#define R_PCH_LP_PCR_GPIO_GPP_G_GPI_IE         0x0124
#define R_PCH_LP_PCR_GPIO_GPP_F_GPI_GPE_STS    0x0140
#define R_PCH_LP_PCR_GPIO_GPP_G_GPI_GPE_STS    0x0144
#define R_PCH_LP_PCR_GPIO_GPP_F_GPI_GPE_EN     0x0160
#define R_PCH_LP_PCR_GPIO_GPP_G_GPI_GPE_EN     0x0164
#define R_PCH_LP_PCR_GPIO_GPP_F_PADCFG_OFFSET  0x400
#define R_PCH_LP_PCR_GPIO_GPP_G_PADCFG_OFFSET  0x4C0

// SKX Server PCH
#define R_PCH_H_PCR_GPIO_GPP_I_PAD_OWN        0x20
#define R_PCH_H_PCR_GPIO_GPP_I_GPI_VWM_EN     0x50
#define R_PCH_H_PCR_GPIO_GPP_I_PADCFGLOCK     0x60
#define R_PCH_H_PCR_GPIO_GPP_I_PADCFGLOCKTX   0x64
#define R_PCH_H_PCR_GPIO_GPP_I_HOSTSW_OWN     0x80
#define R_PCH_H_PCR_GPIO_GPP_I_GPI_IS         0x0100
#define R_PCH_H_PCR_GPIO_GPP_I_GPI_IE         0x0110
#define R_PCH_H_PCR_GPIO_GPP_I_GPI_GPE_STS    0x0120
#define R_PCH_H_PCR_GPIO_GPP_I_GPI_GPE_EN     0x0130
#define R_PCH_H_PCR_GPIO_GPP_I_SMI_STS        0x0140
#define R_PCH_H_PCR_GPIO_GPP_I_SMI_EN         0x0150
#define R_PCH_H_PCR_GPIO_GPP_I_NMI_STS        0x0160
#define R_PCH_H_PCR_GPIO_GPP_I_NMI_EN         0x0170
#define R_PCH_H_PCR_GPIO_GPP_I_PADCFG_OFFSET  0x400

//
// GPIO Community 4 Private Configuration Registers
//

// SKX Server PCH
#define R_PCH_H_PCR_GPIO_GPP_J_PAD_OWN        0x20
#define R_PCH_H_PCR_GPIO_GPP_K_PAD_OWN        0x2C
#define R_PCH_H_PCR_GPIO_GPP_J_GPI_VWM_EN     0x50
#define R_PCH_H_PCR_GPIO_GPP_K_GPI_VWM_EN     0x54
#define R_PCH_H_PCR_GPIO_GPP_J_PADCFGLOCK     0x60
#define R_PCH_H_PCR_GPIO_GPP_J_PADCFGLOCKTX   0x64
#define R_PCH_H_PCR_GPIO_GPP_K_PADCFGLOCK     0x68
#define R_PCH_H_PCR_GPIO_GPP_K_PADCFGLOCKTX   0x6C
#define R_PCH_H_PCR_GPIO_GPP_J_HOSTSW_OWN     0x80
#define R_PCH_H_PCR_GPIO_GPP_K_HOSTSW_OWN     0x84
#define R_PCH_H_PCR_GPIO_GPP_J_GPI_IS         0x0100
#define R_PCH_H_PCR_GPIO_GPP_K_GPI_IS         0x0104
#define R_PCH_H_PCR_GPIO_GPP_J_GPI_IE         0x0110
#define R_PCH_H_PCR_GPIO_GPP_K_GPI_IE         0x0114
#define R_PCH_H_PCR_GPIO_GPP_J_GPI_GPE_STS    0x0120
#define R_PCH_H_PCR_GPIO_GPP_K_GPI_GPE_STS    0x0124
#define R_PCH_H_PCR_GPIO_GPP_J_GPI_GPE_EN     0x0130
#define R_PCH_H_PCR_GPIO_GPP_K_GPI_GPE_EN     0x0134
#define R_PCH_H_PCR_GPIO_GPP_J_PADCFG_OFFSET  0x400
#define R_PCH_H_PCR_GPIO_GPP_K_PADCFG_OFFSET  0x4C0

//
// GPIO Community 5 Private Configuration Registers
//

// SKX Server PCH
#define R_PCH_H_PCR_GPIO_GPP_G_PAD_OWN        0x20
#define R_PCH_H_PCR_GPIO_GPP_H_PAD_OWN        0x2C
#define R_PCH_H_PCR_GPIO_GPP_L_PAD_OWN        0x38
#define R_PCH_H_PCR_GPIO_GPP_G_GPI_VWM_EN     0x50
#define R_PCH_H_PCR_GPIO_GPP_H_GPI_VWM_EN     0x54
#define R_PCH_H_PCR_GPIO_GPP_L_GPI_VWM_EN     0x58
#define R_PCH_H_PCR_GPIO_GPP_G_PADCFGLOCK     0x60
#define R_PCH_H_PCR_GPIO_GPP_G_PADCFGLOCKTX   0x64
#define R_PCH_H_PCR_GPIO_GPP_H_PADCFGLOCK     0x68
#define R_PCH_H_PCR_GPIO_GPP_H_PADCFGLOCKTX   0x6C
#define R_PCH_H_PCR_GPIO_GPP_L_PADCFGLOCK     0x70
#define R_PCH_H_PCR_GPIO_GPP_L_PADCFGLOCKTX   0x74
#define R_PCH_H_PCR_GPIO_GPP_G_HOSTSW_OWN     0x80
#define R_PCH_H_PCR_GPIO_GPP_H_HOSTSW_OWN     0x84
#define R_PCH_H_PCR_GPIO_GPP_L_HOSTSW_OWN     0x88
#define R_PCH_H_PCR_GPIO_GPP_G_GPI_IS         0x0100
#define R_PCH_H_PCR_GPIO_GPP_H_GPI_IS         0x0104
#define R_PCH_H_PCR_GPIO_GPP_L_GPI_IS         0x0108
#define R_PCH_H_PCR_GPIO_GPP_G_GPI_IE         0x0110
#define R_PCH_H_PCR_GPIO_GPP_H_GPI_IE         0x0114
#define R_PCH_H_PCR_GPIO_GPP_L_GPI_IE         0x0118
#define R_PCH_H_PCR_GPIO_GPP_G_GPI_GPE_STS    0x0120
#define R_PCH_H_PCR_GPIO_GPP_H_GPI_GPE_STS    0x0124
#define R_PCH_H_PCR_GPIO_GPP_L_GPI_GPE_STS    0x0128
#define R_PCH_H_PCR_GPIO_GPP_G_GPI_GPE_EN     0x0130
#define R_PCH_H_PCR_GPIO_GPP_H_GPI_GPE_EN     0x0134
#define R_PCH_H_PCR_GPIO_GPP_L_GPI_GPE_EN     0x0138
#define R_PCH_H_PCR_GPIO_GPP_G_PADCFG_OFFSET  0x400
#define R_PCH_H_PCR_GPIO_GPP_H_PADCFG_OFFSET  0x4C0
#define R_PCH_H_PCR_GPIO_GPP_L_PADCFG_OFFSET  0x580




//
// Define Pad Number
//
#define V_GPIO_PAD0                                  0
#define V_GPIO_PAD1                                  1
#define V_GPIO_PAD2                                  2
#define V_GPIO_PAD3                                  3
#define V_GPIO_PAD4                                  4
#define V_GPIO_PAD5                                  5
#define V_GPIO_PAD6                                  6
#define V_GPIO_PAD7                                  7
#define V_GPIO_PAD8                                  8
#define V_GPIO_PAD9                                  9
#define V_GPIO_PAD10                                10
#define V_GPIO_PAD11                                11
#define V_GPIO_PAD12                                12
#define V_GPIO_PAD13                                13
#define V_GPIO_PAD14                                14
#define V_GPIO_PAD15                                15
#define V_GPIO_PAD16                                16
#define V_GPIO_PAD17                                17
#define V_GPIO_PAD18                                18
#define V_GPIO_PAD19                                19
#define V_GPIO_PAD20                                20
#define V_GPIO_PAD21                                21
#define V_GPIO_PAD22                                22
#define V_GPIO_PAD23                                23

//
// Host Software Pad Ownership modes
//
#define V_GPIO_PCR_HOSTSW_OWN_ACPI      0x00
#define V_GPIO_PCR_HOSTSW_OWN_GPIO      0x01

//
// Pad Ownership modes
//
#define V_GPIO_PCR_PAD_OWN_HOST         0x00
#define V_GPIO_PCR_PAD_OWN_CSME         0x01
#define V_GPIO_PCR_PAD_OWN_ISH          0x02

//
// Pad Configuration Register DW0
//

//Pad Reset Config
#define B_GPIO_PCR_RST_CONF             (BIT31 | BIT30)
#define N_GPIO_PCR_RST_CONF             30
#define V_GPIO_PCR_RST_CONF_POW_GOOD    0x00
#define V_GPIO_PCR_RST_CONF_DEEP_RST    0x01
#define V_GPIO_PCR_RST_CONF_GPIO_RST    0x02
#define V_GPIO_PCR_RST_CONF_RESUME_RST  0x03  // Only for GPD Group

//RX Pad State Select
#define B_GPIO_PCR_RX_PAD_STATE         BIT29
#define N_GPIO_PCR_RX_PAD_STATE         29
#define V_GPIO_PCR_RX_PAD_STATE_RAW     0x00
#define V_GPIO_PCR_RX_PAD_STATE_INT     0x01

//RX Raw Overrride to 1
#define B_GPIO_PCR_RX_RAW1              BIT28
#define N_GPIO_PCR_RX_RAW1              28
#define V_GPIO_PCR_RX_RAW1_DIS          0x00
#define V_GPIO_PCR_RX_RAW1_EN           0x01

//RX Level/Edge Configuration
#define B_GPIO_PCR_RX_LVL_EDG           (BIT26 | BIT25)
#define N_GPIO_PCR_RX_LVL_EDG           25
#define V_GPIO_PCR_RX_LVL_EDG_LVL       0x00
#define V_GPIO_PCR_RX_LVL_EDG_EDG       0x01
#define V_GPIO_PCR_RX_LVL_EDG_0         0x02
#define V_GPIO_PCR_RX_LVL_EDG_RIS_FAL   0x03

//RX Invert
#define B_GPIO_PCR_RXINV                BIT23
#define N_GPIO_PCR_RXINV                23
#define V_GPIO_PCR_RXINV_NO             0x00
#define V_GPIO_PCR_RXINV_YES            0x01

//GPIO Input Route IOxAPIC
#define B_GPIO_PCR_RX_APIC_ROUTE        BIT20
#define N_GPIO_PCR_RX_APIC_ROUTE        20
#define V_GPIO_PCR_RX_APIC_ROUTE_DIS    0x00
#define V_GPIO_PCR_RX_APIC_ROUTE_EN     0x01

//GPIO Input Route SCI
#define B_GPIO_PCR_RX_SCI_ROUTE         BIT19
#define N_GPIO_PCR_RX_SCI_ROUTE         19
#define V_GPIO_PCR_RX_SCI_ROUTE_DIS     0x00
#define V_GPIO_PCR_RX_SCI_ROUTE_EN      0x01

//GPIO Input Route SMI
#define B_GPIO_PCR_RX_SMI_ROUTE         BIT18
#define N_GPIO_PCR_RX_SMI_ROUTE         18
#define V_GPIO_PCR_RX_SMI_ROUTE_DIS     0x00
#define V_GPIO_PCR_RX_SMI_ROUTE_EN      0x01

//GPIO Input Route NMI
#define B_GPIO_PCR_RX_NMI_ROUTE         BIT17
#define N_GPIO_PCR_RX_NMI_ROUTE         17
#define V_GPIO_PCR_RX_NMI_ROUTE_DIS     0x00
#define V_GPIO_PCR_RX_NMI_ROUTE_EN      0x01

//GPIO Pad Mode
#define B_GPIO_PCR_PAD_MODE             (BIT12 | BIT11 | BIT10)
#define N_GPIO_PCR_PAD_MODE             10
#define V_GPIO_PCR_PAD_MODE_GPIO        0
#define V_GPIO_PCR_PAD_MODE_NAT_1       1
#define V_GPIO_PCR_PAD_MODE_NAT_2       2
#define V_GPIO_PCR_PAD_MODE_NAT_3       3
#define V_GPIO_PCR_PAD_MODE_NAT_4       4 // SPT-H only

//GPIO RX Disable
#define B_GPIO_PCR_RXDIS                BIT9
#define N_GPIO_PCR_RXDIS                9
#define V_GPIO_PCR_RXDIS_EN             0x00
#define V_GPIO_PCR_RXDIS_DIS            0x01

//GPIO TX Disable
#define B_GPIO_PCR_TXDIS                BIT8
#define N_GPIO_PCR_TXDIS                8
#define V_GPIO_PCR_TXDIS_EN             0x00
#define V_GPIO_PCR_TXDIS_DIS            0x01

//GPIO RX State
#define B_GPIO_PCR_RX_STATE             BIT1
#define N_GPIO_PCR_RX_STATE             1
#define V_GPIO_PCR_RX_STATE_LOW         0x00
#define V_GPIO_PCR_RX_STATE_HIGH        0x01

//GPIO TX State
#define B_GPIO_PCR_TX_STATE             BIT0
#define N_GPIO_PCR_TX_STATE             0
#define V_GPIO_PCR_TX_STATE_LOW         0x00
#define V_GPIO_PCR_TX_STATE_HIGH        0x01

//
// Pad Configuration Register DW1
//

//Padtol
#define B_GPIO_PCR_PADTOL               BIT25
#define N_GPIO_PCR_PADTOL               25
#define V_GPIO_PCR_PADTOL_NONE          0x00
#define V_GPIO_PCR_PADTOL_CLEAR         0x00
#define V_GPIO_PCR_PADTOL_SET           0x01

//Termination
#define B_GPIO_PCR_TERM                (BIT13 | BIT12 | BIT11 | BIT10)
#define N_GPIO_PCR_TERM                 10
#define V_GPIO_PCR_TERM_WPD_NONE        0x00
#define V_GPIO_PCR_TERM_WPD_5K          0x02
#define V_GPIO_PCR_TERM_WPD_20K         0x04
#define V_GPIO_PCR_TERM_WPU_NONE        0x08
#define V_GPIO_PCR_TERM_WPU_1K          0x09
#define V_GPIO_PCR_TERM_WPU_2K          0x0B
#define V_GPIO_PCR_TERM_WPU_5K          0x0A
#define V_GPIO_PCR_TERM_WPU_20K         0x0C
#define V_GPIO_PCR_TERM_WPU_1K_2K       0x0D
#define V_GPIO_PCR_TERM_NATIVE          0x0F

//Interrupt number
#define B_GPIO_PCR_INTSEL               0x7F
#define N_GPIO_PCR_INTSEL               0

//
// Ownership
//
#define V_GPIO_PCR_OWN_GPIO             0x01
#define V_GPIO_PCR_OWN_ACPI             0x00

//
// GPE
//
#define V_GPIO_PCR_GPE_EN               0x01
#define V_GPIO_PCR_GPE_DIS              0x00
//
// SMI
//
#define V_GPIO_PCR_SMI_EN               0x01
#define V_GPIO_PCR_SMI_DIS              0x00
//
// NMI
//
#define V_GPIO_PCR_NMI_EN               0x01
#define V_GPIO_PCR_NMI_DIS              0x00
//
// Reserved: RSVD1
//
#define V_PCH_GPIO_RSVD1                0x00

#endif
