coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
gpio_apl.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include <intelblocks/gpio.h>
4 #include <intelblocks/pcr.h>
5 #include <soc/pcr_ids.h>
6 #include <soc/pm.h>
7 
8 static const struct reset_mapping rst_map[] = {
9  { .logical = PAD_CFG0_LOGICAL_RESET_PWROK, .chipset = 0U << 30 },
10  { .logical = PAD_CFG0_LOGICAL_RESET_DEEP, .chipset = 1U << 30 },
11  { .logical = PAD_CFG0_LOGICAL_RESET_PLTRST, .chipset = 2U << 30 },
12 };
13 
14 static const struct pad_group apl_community_n_groups[] = {
15  INTEL_GPP(N_OFFSET, N_OFFSET, GPIO_31), /* NORTH 0 */
16  INTEL_GPP(N_OFFSET, GPIO_32, TRST_B), /* NORTH 1 */
17  INTEL_GPP(N_OFFSET, TMS, SVID0_CLK), /* NORTH 2 */
18 };
19 
20 static const struct pad_group apl_community_w_groups[] = {
23 };
24 
25 static const struct pad_group apl_community_sw_groups[] = {
26  INTEL_GPP(SW_OFFSET, SW_OFFSET, SMB_ALERTB), /* SOUTHWEST 0 */
27  INTEL_GPP(SW_OFFSET, SMB_CLK, LPC_FRAMEB), /* SOUTHWEST 1 */
28 };
29 
30 static const struct pad_group apl_community_nw_groups[] = {
31  INTEL_GPP(NW_OFFSET, NW_OFFSET, PROCHOT_B), /* NORTHWEST 0 */
32  INTEL_GPP(NW_OFFSET, PMIC_I2C_SCL, GPIO_106),/* NORTHWEST 1 */
33  INTEL_GPP(NW_OFFSET, GPIO_109, GPIO_123), /* NORTHWEST 2 */
34 };
35 
36 static const struct pad_community apl_gpio_communities[] = {
37  {
38  .port = PID_GPIO_SW,
39  .first_pad = SW_OFFSET,
40  .last_pad = LPC_FRAMEB,
41  .num_gpi_regs = NUM_SW_GPI_REGS,
42  .gpi_status_offset = 0,
43  .pad_cfg_base = PAD_CFG_BASE,
44  .host_own_reg_0 = HOSTSW_OWN_REG_0,
45  .gpi_int_sts_reg_0 = GPI_INT_STS_0,
46  .gpi_int_en_reg_0 = GPI_INT_EN_0,
47  .gpi_smi_sts_reg_0 = GPI_SMI_STS_0,
48  .gpi_smi_en_reg_0 = GPI_SMI_EN_0,
49  .max_pads_per_group = GPIO_MAX_NUM_PER_GROUP,
50  .name = "GPIO_GPE_SW",
51  .acpi_path = "\\_SB.GPO3",
52  .reset_map = rst_map,
53  .num_reset_vals = ARRAY_SIZE(rst_map),
54  .groups = apl_community_sw_groups,
55  .num_groups = ARRAY_SIZE(apl_community_sw_groups),
56  }, {
57  .port = PID_GPIO_W,
58  .first_pad = W_OFFSET,
59  .last_pad = SUSPWRDNACK,
60  .num_gpi_regs = NUM_W_GPI_REGS,
61  .gpi_status_offset = NUM_SW_GPI_REGS,
62  .pad_cfg_base = PAD_CFG_BASE,
63  .host_own_reg_0 = HOSTSW_OWN_REG_0,
64  .gpi_int_sts_reg_0 = GPI_INT_STS_0,
65  .gpi_int_en_reg_0 = GPI_INT_EN_0,
66  .gpi_smi_sts_reg_0 = GPI_SMI_STS_0,
67  .gpi_smi_en_reg_0 = GPI_SMI_EN_0,
68  .max_pads_per_group = GPIO_MAX_NUM_PER_GROUP,
69  .name = "GPIO_GPE_W",
70  .acpi_path = "\\_SB.GPO2",
71  .reset_map = rst_map,
72  .num_reset_vals = ARRAY_SIZE(rst_map),
73  .groups = apl_community_w_groups,
74  .num_groups = ARRAY_SIZE(apl_community_w_groups),
75  }, {
76  .port = PID_GPIO_NW,
77  .first_pad = NW_OFFSET,
78  .last_pad = GPIO_123,
79  .num_gpi_regs = NUM_NW_GPI_REGS,
80  .gpi_status_offset = NUM_W_GPI_REGS + NUM_SW_GPI_REGS,
81  .pad_cfg_base = PAD_CFG_BASE,
82  .host_own_reg_0 = HOSTSW_OWN_REG_0,
83  .gpi_int_sts_reg_0 = GPI_INT_STS_0,
84  .gpi_int_en_reg_0 = GPI_INT_EN_0,
85  .gpi_smi_sts_reg_0 = GPI_SMI_STS_0,
86  .gpi_smi_en_reg_0 = GPI_SMI_EN_0,
87  .max_pads_per_group = GPIO_MAX_NUM_PER_GROUP,
88  .name = "GPIO_GPE_NW",
89  .acpi_path = "\\_SB.GPO1",
90  .reset_map = rst_map,
91  .num_reset_vals = ARRAY_SIZE(rst_map),
92  .groups = apl_community_nw_groups,
93  .num_groups = ARRAY_SIZE(apl_community_nw_groups),
94  }, {
95  .port = PID_GPIO_N,
96  .first_pad = N_OFFSET,
97  .last_pad = SVID0_CLK,
98  .num_gpi_regs = NUM_N_GPI_REGS,
99  .gpi_status_offset = NUM_NW_GPI_REGS + NUM_W_GPI_REGS
100  + NUM_SW_GPI_REGS,
101  .pad_cfg_base = PAD_CFG_BASE,
102  .host_own_reg_0 = HOSTSW_OWN_REG_0,
103  .gpi_int_sts_reg_0 = GPI_INT_STS_0,
104  .gpi_int_en_reg_0 = GPI_INT_EN_0,
105  .gpi_smi_sts_reg_0 = GPI_SMI_STS_0,
106  .gpi_smi_en_reg_0 = GPI_SMI_EN_0,
107  .max_pads_per_group = GPIO_MAX_NUM_PER_GROUP,
108  .name = "GPIO_GPE_N",
109  .acpi_path = "\\_SB.GPO0",
110  .reset_map = rst_map,
111  .num_reset_vals = ARRAY_SIZE(rst_map),
112  .groups = apl_community_n_groups,
113  .num_groups = ARRAY_SIZE(apl_community_n_groups),
114  }
115 };
116 
117 const struct pad_community *soc_gpio_get_community(size_t *num_communities)
118 {
119  *num_communities = ARRAY_SIZE(apl_gpio_communities);
120  return apl_gpio_communities;
121 }
122 
123 const struct pmc_to_gpio_route *soc_pmc_gpio_routes(size_t *num)
124 {
125  static const struct pmc_to_gpio_route routes[] = {
134  };
135  *num = ARRAY_SIZE(routes);
136  return routes;
137 }
#define GPIO_MAX_NUM_PER_GROUP
Definition: gpio_soc_defs.h:31
#define PID_GPIO_N
Definition: pcr_ids.h:18
#define PID_GPIO_SW
Definition: pcr_ids.h:13
#define PID_GPIO_W
Definition: pcr_ids.h:15
#define PID_GPIO_NW
Definition: pcr_ids.h:17
#define PMC_GPE_W_31_0
Definition: pm.h:201
#define PMC_GPE_N_63_32
Definition: pm.h:200
#define PMC_GPE_N_31_0
Definition: pm.h:199
#define PMC_GPE_NW_31_0
Definition: pm.h:196
#define PMC_GPE_NW_63_32
Definition: pm.h:197
#define PMC_GPE_SW_31_0
Definition: pm.h:194
#define PMC_GPE_SW_63_32
Definition: pm.h:195
#define PMC_GPE_NW_95_64
Definition: pm.h:198
#define GPIO_32
Definition: gpio_ftns.h:15
#define ARRAY_SIZE(a)
Definition: helpers.h:12
const struct pmc_to_gpio_route * soc_pmc_gpio_routes(size_t *num)
Definition: gpio_apl.c:123
static const struct pad_group apl_community_sw_groups[]
Definition: gpio_apl.c:25
const struct pad_community * soc_gpio_get_community(size_t *num_communities)
Definition: gpio_apl.c:117
static const struct reset_mapping rst_map[]
Definition: gpio_apl.c:8
static const struct pad_group apl_community_w_groups[]
Definition: gpio_apl.c:20
static const struct pad_community apl_gpio_communities[]
Definition: gpio_apl.c:36
static const struct pad_group apl_community_nw_groups[]
Definition: gpio_apl.c:30
static const struct pad_group apl_community_n_groups[]
Definition: gpio_apl.c:14
#define PROCHOT_B
Definition: gpio_apl.h:176
#define SVID0_CLK
Definition: gpio_apl.h:142
#define TRST_B
Definition: gpio_apl.h:128
#define NUM_W_GPI_REGS
Definition: gpio_apl.h:55
#define PMIC_I2C_SCL
Definition: gpio_apl.h:177
#define GPIO_GPE_NW_95_64
Definition: gpio_apl.h:24
#define OSC_CLK_OUT_1
Definition: gpio_apl.h:255
#define GPIO_GPE_N_31_0
Definition: gpio_apl.h:25
#define GPIO_GPE_W_31_0
Definition: gpio_apl.h:21
#define SMB_ALERTB
Definition: gpio_apl.h:304
#define SW_OFFSET
Definition: gpio_apl.h:324
#define W_OFFSET
Definition: gpio_apl.h:323
#define TMS
Definition: gpio_apl.h:129
#define SUSPWRDNACK
Definition: gpio_apl.h:270
#define GPIO_GPE_SW_63_32
Definition: gpio_apl.h:20
#define N_OFFSET
Definition: gpio_apl.h:321
#define GPIO_123
Definition: gpio_apl.h:221
#define GPIO_GPE_NW_31_0
Definition: gpio_apl.h:22
#define NUM_SW_GPI_REGS
Definition: gpio_apl.h:58
#define GPIO_GPE_SW_31_0
Definition: gpio_apl.h:19
#define SMB_CLK
Definition: gpio_apl.h:305
#define NW_OFFSET
Definition: gpio_apl.h:322
#define GPIO_GPE_NW_63_32
Definition: gpio_apl.h:23
#define NUM_NW_GPI_REGS
Definition: gpio_apl.h:52
#define LPC_FRAMEB
Definition: gpio_apl.h:315
#define NUM_N_GPI_REGS
Definition: gpio_apl.h:49
#define GPIO_GPE_N_63_32
Definition: gpio_apl.h:26
#define OSC_CLK_OUT_2
Definition: gpio_apl.h:256
#define GPIO_109
Definition: gpio.h:74
#define GPIO_31
Definition: gpio.h:47
#define GPIO_106
Definition: gpio.h:71
#define GPI_INT_EN_0
Definition: gpio_defs.h:346
#define GPI_INT_STS_0
Definition: gpio_defs.h:345
#define HOSTSW_OWN_REG_0
Definition: gpio_defs.h:344
#define GPI_SMI_STS_0
Definition: gpio_defs.h:347
#define PAD_CFG_BASE
Definition: gpio_defs.h:349
#define GPI_SMI_EN_0
Definition: gpio_defs.h:348
#define INTEL_GPP(first_of_community, start_of_group, end_of_group)
Definition: gpio.h:49
#define PAD_CFG0_LOGICAL_RESET_PWROK
Definition: gpio_defs.h:44
#define PAD_CFG0_LOGICAL_RESET_PLTRST
Definition: gpio_defs.h:46
#define PAD_CFG0_LOGICAL_RESET_DEEP
Definition: gpio_defs.h:45
uint8_t port
Definition: gpio.h:135
Definition: gpio.h:94
uint32_t logical
Definition: gpio.h:89