[coreboot-gerrit] Change in coreboot[master]: soc/intel/common/block: Update LPC lib
Ravishankar Sarawadi (Code Review)
gerrit at coreboot.org
Wed Sep 20 00:01:17 CEST 2017
Ravishankar Sarawadi has uploaded this change for review. ( https://review.coreboot.org/21605
Change subject: soc/intel/common/block: Update LPC lib
......................................................................
soc/intel/common/block: Update LPC lib
Add wrapper functions to support SoC specific functionality:
1. Setup PCH LPC interrupt routing.
2. Get SoC's generic IO decoder configuration settings.
Change-Id: Ib9359765f7293210044b411db49163df0418070a
Signed-off-by: Ravi Sarawadi <ravishankar.sarawadi at intel.com>
---
M src/soc/intel/common/block/include/intelblocks/lpc_lib.h
M src/soc/intel/common/block/lpc/lpc_lib.c
2 files changed, 69 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/05/21605/1
diff --git a/src/soc/intel/common/block/include/intelblocks/lpc_lib.h b/src/soc/intel/common/block/include/intelblocks/lpc_lib.h
index 596c2b5..455f6c2 100644
--- a/src/soc/intel/common/block/include/intelblocks/lpc_lib.h
+++ b/src/soc/intel/common/block/include/intelblocks/lpc_lib.h
@@ -38,6 +38,14 @@
#define LPC_IOE_COMB_EN (1 << 1)
#define LPC_IOE_COMA_EN (1 << 0)
+#define PCR_DMI_LPCLGIR1 0x2730
+#define PCR_DMI_LPCLGIR2 0x2734
+#define PCR_DMI_LPCLGIR3 0x2738
+#define PCR_DMI_LPCLGIR4 0x273c
+
+#define PCR_DMI_LPCIOD 0x2770
+#define PCR_DMI_LPCIOE 0x2774
+
/* Serial IRQ control. SERIRQ_QUIET is the default (0). */
enum serirq_mode {
SERIRQ_QUIET,
@@ -75,6 +83,8 @@
void lpc_set_eiss(void);
/* Set LPC Serial IRQ mode. */
void lpc_set_serirq_mode(enum serirq_mode mode);
+/* Enable CLKRUN_EN for power gating LPC. */
+void lpc_enable_pci_clk_cntl(void);
/*
* Setup I/O Decode Range Register for LPC
* ComA Range 3F8h-3FFh [2:0]
@@ -82,5 +92,13 @@
* Enable ComA and ComB Port
*/
void lpc_io_setup_comm_a_b(void);
+/* Enable PCH LPC by setting up generic decode range registers. */
+void pch_enable_lpc(void);
+/* Setup PCH LPC interrupt routing. */
+void pch_lpc_interrupt_init(void);
+/* Retrieve and setup SoC speicific PCH LPC interrupt routing. */
+void soc_pch_pirq_init(const struct device *dev);
+/* Get SoC's generic IO decoder configuration settings. */
+void soc_get_gen_io_dec_config(const struct device *dev, uint32_t *gen_io_dec);
#endif /* _SOC_COMMON_BLOCK_LPC_LIB_H_ */
diff --git a/src/soc/intel/common/block/lpc/lpc_lib.c b/src/soc/intel/common/block/lpc/lpc_lib.c
index 6b5f29a..6d695ee 100644
--- a/src/soc/intel/common/block/lpc/lpc_lib.c
+++ b/src/soc/intel/common/block/lpc/lpc_lib.c
@@ -18,12 +18,16 @@
#define __SIMPLE_DEVICE__
#include <assert.h>
+#include <chip.h>
#include <console/console.h>
#include <device/pci.h>
+#include <intelblocks/itss.h>
#include <intelblocks/lpc_lib.h>
+#include <intelblocks/pcr.h>
#include <lib.h>
#include "lpc_def.h"
#include <soc/pci_devs.h>
+#include <soc/pcr_ids.h>
void lpc_enable_fixed_io_ranges(uint16_t io_enables)
{
@@ -235,3 +239,50 @@
/* Enable ComA and ComB Port */
lpc_enable_fixed_io_ranges(LPC_IOE_COMA_EN | LPC_IOE_COMB_EN);
}
+
+void pch_enable_lpc(void)
+{
+ /* Lookup device tree in romstage */
+ const struct device *dev;
+ uint32_t gen_io_dec[4];
+
+ dev = dev_find_slot(0, PCI_DEVFN(PCH_DEV_SLOT_LPC, 0));
+ if (!dev || !dev->chip_info)
+ return;
+
+ soc_get_gen_io_dec_config(dev, gen_io_dec);
+
+ /* Set in PCI generic decode range registers */
+ pci_write_config32(PCH_DEV_LPC, LPC_GENERIC_IO_RANGE(0),
+ gen_io_dec[0]);
+ pci_write_config32(PCH_DEV_LPC, LPC_GENERIC_IO_RANGE(1),
+ gen_io_dec[1]);
+ pci_write_config32(PCH_DEV_LPC, LPC_GENERIC_IO_RANGE(2),
+ gen_io_dec[2]);
+ pci_write_config32(PCH_DEV_LPC, LPC_GENERIC_IO_RANGE(3),
+ gen_io_dec[3]);
+
+ /* Mirror these same settings in DMI PCR */
+ pcr_write32(PID_DMI, PCR_DMI_LPCLGIR1, gen_io_dec[0]);
+ pcr_write32(PID_DMI, PCR_DMI_LPCLGIR2, gen_io_dec[1]);
+ pcr_write32(PID_DMI, PCR_DMI_LPCLGIR3, gen_io_dec[2]);
+ pcr_write32(PID_DMI, PCR_DMI_LPCLGIR4, gen_io_dec[3]);
+}
+
+void pch_lpc_interrupt_init(void)
+{
+ const struct device *dev;
+
+ dev = dev_find_slot(0, PCI_DEVFN(PCH_DEV_SLOT_LPC, 0));
+ if (!dev || !dev->chip_info)
+ return;
+
+ soc_pch_pirq_init(dev);
+}
+
+void lpc_enable_pci_clk_cntl(void)
+{
+ device_t dev = PCH_DEV_LPC;
+
+ pci_write_config8(dev, LPC_PCCTL, LPC_PCCTL_CLKRUN_EN);
+}
--
To view, visit https://review.coreboot.org/21605
To unsubscribe, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib9359765f7293210044b411db49163df0418070a
Gerrit-Change-Number: 21605
Gerrit-PatchSet: 1
Gerrit-Owner: Ravishankar Sarawadi <ravishankar.sarawadi at intel.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20170919/00308cf7/attachment.html>
More information about the coreboot-gerrit
mailing list