1 /* This file is part of the coreboot project. */
2 /* SPDX-License-Identifier: GPL-2.0-or-later */
4 #include <device/pci.h>
5 #include <intelblocks/lpc_lib.h>
6 #include <intelblocks/rtc.h>
8 #include <soc/pcr_ids.h>
12 static const struct lpc_mmio_range apl_lpc_fixed_mmio_ranges
[] = {
13 { 0xfed40000, 0x8000 },
14 { 0xfedc0000, 0x4000 },
26 const struct lpc_mmio_range
*soc_get_fixed_mmio_ranges(void)
28 return apl_lpc_fixed_mmio_ranges
;
31 static const struct pad_config lpc_gpios
[] = {
32 #if CONFIG(SOC_INTEL_GLK)
34 PAD_CFG_NF(GPIO_147
, UP_20K
, DEEP
, NF1
), /* LPC_ILB_SERIRQ */
35 PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_148
, NONE
, DEEP
, NF1
, HIZCRx1
,
36 DISPUPD
), /* LPC_CLKOUT0 */
37 PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_149
, NONE
, DEEP
, NF1
, HIZCRx1
,
38 DISPUPD
), /* LPC_CLKOUT1 */
39 PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_150
, UP_20K
, DEEP
, NF1
, HIZCRx1
,
40 DISPUPD
), /* LPC_AD0 */
41 PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_151
, UP_20K
, DEEP
, NF1
, HIZCRx1
,
42 DISPUPD
), /* LPC_AD1 */
43 PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_152
, UP_20K
, DEEP
, NF1
, HIZCRx1
,
44 DISPUPD
), /* LPC_AD2 */
45 PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_153
, UP_20K
, DEEP
, NF1
, HIZCRx1
,
46 DISPUPD
), /* LPC_AD3 */
47 PAD_CFG_NF(GPIO_154
, UP_20K
, DEEP
, NF1
), /* LPC_CLKRUNB */
48 PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_155
, UP_20K
, DEEP
, NF1
, HIZCRx1
,
49 DISPUPD
), /* LPC_FRAMEB */
52 * LPC_CLKRUNB should be in GPIO mode for eSPI. Other pin settings
53 * i.e. Rx path enable/disable, Tx path enable/disable, pull up
54 * enable/disable etc are ignored. Leaving this pin in Native mode
55 * will keep LPC Controller awake and prevent S0ix entry
57 PAD_NC(GPIO_154
, NONE
),
58 #endif /* !CONFIG(SOC_ESPI) */
60 PAD_CFG_NF(LPC_ILB_SERIRQ
, UP_20K
, DEEP
, NF1
),
61 PAD_CFG_NF(LPC_CLKRUNB
, UP_20K
, DEEP
, NF1
),
62 PAD_CFG_NF(LPC_AD0
, UP_20K
, DEEP
, NF1
),
63 PAD_CFG_NF(LPC_AD1
, UP_20K
, DEEP
, NF1
),
64 PAD_CFG_NF(LPC_AD2
, UP_20K
, DEEP
, NF1
),
65 PAD_CFG_NF(LPC_AD3
, UP_20K
, DEEP
, NF1
),
66 PAD_CFG_NF(LPC_FRAMEB
, NATIVE
, DEEP
, NF1
),
67 PAD_CFG_NF(LPC_CLKOUT0
, UP_20K
, DEEP
, NF1
),
68 PAD_CFG_NF(LPC_CLKOUT1
, UP_20K
, DEEP
, NF1
)
72 void lpc_configure_pads(void)
74 gpio_configure_pads(lpc_gpios
, ARRAY_SIZE(lpc_gpios
));
77 void lpc_soc_init(struct device
*dev
)
79 const struct soc_intel_apollolake_config
*cfg
;
82 /* Set LPC Serial IRQ mode */
83 lpc_set_serirq_mode(cfg
->serirq_mode
);