summaryrefslogtreecommitdiff
path: root/src/soc/intel/meteorlake/include
diff options
context:
space:
mode:
authorRavi Sarawadi <ravishankar.sarawadi@intel.com>2022-04-10 23:36:52 -0700
committerSubrata Banik <subratabanik@google.com>2022-06-29 05:27:52 +0000
commit8069b5d3f242b14421c1b825c1eff22b7945411c (patch)
tree58946ddec1bb02fa1748f24769dddb9748826697 /src/soc/intel/meteorlake/include
parentb0c68656aa6470ec594d743c99a5366c25f0fb04 (diff)
soc/intel/mtl: Do initial Meteor Lake SoC commit till romstage
List of changes: 1. Add required SoC programming till romstage 2. Include only required headers into include/soc 3. Fill required FSP-M UPD to call FSP-M API BUG=b:224325352 TEST=Build 'util/abuild/abuild -p none -t google/rex -a -c max'. Signed-off-by: Ravi Sarawadi <ravishankar.sarawadi@intel.com> Change-Id: I3d5c6ceb7f97429ff903e7577186e8d8843c1f14 Reviewed-on: https://review.coreboot.org/c/coreboot/+/63363 Reviewed-by: Subrata Banik <subratabanik@google.com> Reviewed-by: Tarun Tuli <taruntuli@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/soc/intel/meteorlake/include')
-rw-r--r--src/soc/intel/meteorlake/include/soc/gpe.h8
-rw-r--r--src/soc/intel/meteorlake/include/soc/meminit.h115
-rw-r--r--src/soc/intel/meteorlake/include/soc/msr.h11
-rw-r--r--src/soc/intel/meteorlake/include/soc/pmc.h144
-rw-r--r--src/soc/intel/meteorlake/include/soc/romstage.h22
-rw-r--r--src/soc/intel/meteorlake/include/soc/soc_chip.h8
-rw-r--r--src/soc/intel/meteorlake/include/soc/systemagent.h45
7 files changed, 353 insertions, 0 deletions
diff --git a/src/soc/intel/meteorlake/include/soc/gpe.h b/src/soc/intel/meteorlake/include/soc/gpe.h
new file mode 100644
index 0000000000..6c08d35588
--- /dev/null
+++ b/src/soc/intel/meteorlake/include/soc/gpe.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef _SOC_GPE_H_
+#define _SOC_GPE_H_
+
+#include <intelpch/gpe.h>
+
+#endif /* _SOC_GPE_H_ */
diff --git a/src/soc/intel/meteorlake/include/soc/meminit.h b/src/soc/intel/meteorlake/include/soc/meminit.h
new file mode 100644
index 0000000000..cc5ab18cdc
--- /dev/null
+++ b/src/soc/intel/meteorlake/include/soc/meminit.h
@@ -0,0 +1,115 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef _SOC_METEORLAKE_MEMINIT_H_
+#define _SOC_METEORLAKE_MEMINIT_H_
+
+#include <stddef.h>
+#include <stdint.h>
+#include <types.h>
+#include <fsp/soc_binding.h>
+#include <intelblocks/meminit.h>
+
+enum mem_type {
+ MEM_TYPE_DDR5,
+ MEM_TYPE_LP5X,
+};
+
+struct mem_ddr_config {
+ /* Dqs Pins Interleaved Setting. Enable/Disable Control */
+ bool dq_pins_interleaved;
+};
+
+struct lpx_dq {
+ uint8_t dq0[BITS_PER_BYTE];
+ uint8_t dq1[BITS_PER_BYTE];
+};
+
+struct lpx_dqs {
+ uint8_t dqs0;
+ uint8_t dqs1;
+};
+
+struct lpx_dq_map {
+ struct lpx_dq ddr0;
+ struct lpx_dq ddr1;
+ struct lpx_dq ddr2;
+ struct lpx_dq ddr3;
+ struct lpx_dq ddr4;
+ struct lpx_dq ddr5;
+ struct lpx_dq ddr6;
+ struct lpx_dq ddr7;
+};
+
+struct lpx_dqs_map {
+ struct lpx_dqs ddr0;
+ struct lpx_dqs ddr1;
+ struct lpx_dqs ddr2;
+ struct lpx_dqs ddr3;
+ struct lpx_dqs ddr4;
+ struct lpx_dqs ddr5;
+ struct lpx_dqs ddr6;
+ struct lpx_dqs ddr7;
+};
+
+struct mem_lp5x_config {
+ uint8_t ccc_config;
+};
+
+struct rcomp {
+ /*
+ * Rcomp resistor value. This values represents the resistance in
+ * ohms of the rcomp resistor attached to the DDR_COMP pin on the SoC.
+ *
+ * Note: If mainboard users don't want to override rcomp related settings
+ * then associated rcomp UPDs will have its default value.
+ */
+ uint16_t resistor;
+ /* Rcomp target values. */
+ uint16_t targets[5];
+};
+
+struct mb_cfg {
+ enum mem_type type;
+ struct rcomp rcomp;
+ union {
+ /*
+ * DQ CPU<>DRAM map:
+ * Index of the array represents DQ# on the CPU and the value represents DQ# on
+ * the DRAM part.
+ */
+ uint8_t dq_map[CONFIG_DATA_BUS_WIDTH];
+ struct lpx_dq_map lpx_dq_map;
+ };
+
+ union {
+ /*
+ * DQS CPU<>DRAM map:
+ * Index of the array represents DQS# on the CPU and the value represents DQS#
+ * on the DRAM part.
+ */
+ uint8_t dqs_map[CONFIG_DATA_BUS_WIDTH/BITS_PER_BYTE];
+ struct lpx_dqs_map lpx_dqs_map;
+ };
+
+ union {
+ struct mem_lp5x_config lp5x_config;
+ struct mem_ddr_config ddr_config;
+ };
+
+ /* Early Command Training Enable/Disable Control */
+ bool ect;
+
+ /* Board type */
+ uint8_t UserBd;
+
+ /* Command Mirror */
+ uint8_t CmdMirror;
+
+ /* Enable/Disable TxDqDqs Retraining for Lp4/Lp5/DDR */
+ uint8_t LpDdrDqDqsReTraining;
+};
+
+void memcfg_init(FSPM_UPD *memupd, const struct mb_cfg *mb_cfg,
+ const struct mem_spd *spd_info, bool half_populated);
+
+#endif /* _SOC_METEORLAKE_MEMINIT_H_ */
diff --git a/src/soc/intel/meteorlake/include/soc/msr.h b/src/soc/intel/meteorlake/include/soc/msr.h
new file mode 100644
index 0000000000..e6b8c07850
--- /dev/null
+++ b/src/soc/intel/meteorlake/include/soc/msr.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef _SOC_MSR_H_
+#define _SOC_MSR_H_
+
+#include <intelblocks/msr.h>
+
+#define MSR_BIOS_DONE 0x151
+#define ENABLE_IA_UNTRUSTED (1 << 0)
+
+#endif
diff --git a/src/soc/intel/meteorlake/include/soc/pmc.h b/src/soc/intel/meteorlake/include/soc/pmc.h
new file mode 100644
index 0000000000..a56c2905be
--- /dev/null
+++ b/src/soc/intel/meteorlake/include/soc/pmc.h
@@ -0,0 +1,144 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef _SOC_METEORLAKE_PMC_H_
+#define _SOC_METEORLAKE_PMC_H_
+#include <device/device.h>
+
+extern struct device_operations pmc_ops;
+
+/* PCI Configuration Space (D31:F2): PMC */
+#define PWRMBASE 0x10
+#define ABASE 0x20
+
+/* Memory mapped IO registers in PMC */
+#define GEN_PMCON_A 0x1020
+#define DC_PP_DIS (1 << 30)
+#define DSX_PP_DIS (1 << 29)
+#define AG3_PP_EN (1 << 28)
+#define SX_PP_EN (1 << 27)
+#define ALLOW_ICLK_PLL_SD_INC0 (1 << 26)
+#define GBL_RST_STS (1 << 24)
+#define DISB (1 << 23)
+#define ALLOW_OPI_PLL_SD_INC0 (1 << 22)
+#define MEM_SR (1 << 21)
+#define ALLOW_SPXB_CG_INC0 (1 << 20)
+#define ALLOW_L1LOW_C0 (1 << 19)
+#define MS4V (1 << 18)
+#define ALLOW_L1LOW_OPI_ON (1 << 17)
+#define SUS_PWR_FLR (1 << 16)
+#define PME_B0_S5_DIS (1 << 15)
+#define PWR_FLR (1 << 14)
+#define ALLOW_L1LOW_BCLKREQ_ON (1 << 13)
+#define DIS_SLP_X_STRCH_SUS_UP (1 << 12)
+#define SLP_S3_MIN_ASST_WDTH_MASK (3 << 10)
+#define SLP_S3_MIN_ASST_WDTH_60USEC (0 << 10)
+#define SLP_S3_MIN_ASST_WDTH_1MS (1 << 10)
+#define SLP_S3_MIN_ASST_WDTH_50MS (2 << 10)
+#define SLP_S3_MIN_ASST_WDTH_2S (3 << 10)
+#define HOST_RST_STS (1 << 9)
+#define ESPI_SMI_LOCK (1 << 8)
+#define S4MAW_MASK (3 << 4)
+#define S4MAW_1S (1 << 4)
+#define S4MAW_2S (2 << 4)
+#define S4MAW_3S (3 << 4)
+#define S4MAW_4S (0 << 4)
+#define S4ASE (1 << 3)
+#define PER_SMI_SEL_MASK (3 << 1)
+#define SMI_RATE_64S (0 << 1)
+#define SMI_RATE_32S (1 << 1)
+#define SMI_RATE_16S (2 << 1)
+#define SMI_RATE_8S (3 << 1)
+#define SLEEP_AFTER_POWER_FAIL (1 << 0)
+
+#define GEN_PMCON_B 0x1024
+#define SLP_STR_POL_LOCK (1 << 18)
+#define ACPI_BASE_LOCK (1 << 17)
+#define PM_DATA_BAR_DIS (1 << 16)
+#define WOL_EN_OVRD (1 << 13)
+#define BIOS_PCI_EXP_EN (1 << 10)
+#define PWRBTN_LVL (1 << 9)
+#define SMI_LOCK (1 << 4)
+#define RTC_BATTERY_DEAD (1 << 2)
+
+#define ETR 0x1048
+#define CF9_LOCK (1 << 31)
+#define CF9_GLB_RST (1 << 20)
+
+#define SSML 0x104C
+#define SSML_SSL_DS (0 << 0)
+#define SSML_SSL_EN (1 << 0)
+
+#define SSMC 0x1050
+#define SSMC_SSMS (1 << 0)
+
+#define SSMD 0x1054
+#define SSMD_SSD_MASK (0xffff << 0)
+
+#define PRSTS 0x1810
+
+#define S3_PWRGATE_POL 0x1828
+#define S3DC_GATE_SUS (1 << 1)
+#define S3AC_GATE_SUS (1 << 0)
+
+#define S4_PWRGATE_POL 0x182c
+#define S4DC_GATE_SUS (1 << 1)
+#define S4AC_GATE_SUS (1 << 0)
+
+#define S5_PWRGATE_POL 0x1830
+#define S5DC_GATE_SUS (1 << 15)
+#define S5AC_GATE_SUS (1 << 14)
+
+#define DSX_CFG 0x1834
+#define REQ_CNV_NOWAKE_DSX (1 << 4)
+#define REQ_BATLOW_DSX (1 << 3)
+#define DSX_EN_WAKE_PIN (1 << 2)
+#define DSX_DIS_AC_PRESENT_PD (1 << 1)
+#define DSX_EN_LAN_WAKE_PIN (1 << 0)
+#define DSX_CFG_MASK (0x1f << 0)
+
+#define PMSYNC_TPR_CFG 0x18C4
+#define PCH2CPU_TPR_CFG_LOCK (1 << 31)
+#define PCH2CPU_TT_EN (1 << 26)
+
+#define PCH_PWRM_ACPI_TMR_CTL 0x18FC
+#define ACPI_TIM_DIS (1 << 1)
+#define GPIO_GPE_CFG 0x1920
+#define GPE0_DWX_MASK 0xf
+#define GPE0_DW_SHIFT(x) (4*(x))
+
+#define PMC_GPP_V 0x0
+#define PMC_GPP_C 0x1
+#define PMC_GPP_A 0x2
+#define PMC_GPP_E 0x3
+#define PMC_GPP_H 0x4
+#define PMC_GPP_F 0x5
+#define PMC_GPP_S 0x6
+#define PMC_GPP_B 0x7
+#define PMC_GPP_D 0x8
+
+#define GBLRST_CAUSE0 0x1924
+#define GBLRST_CAUSE0_THERMTRIP (1 << 5)
+#define GBLRST_CAUSE1 0x1928
+#define HPR_CAUSE0 0x192C
+#define HPR_CAUSE0_MI_HRPD (1 << 10)
+#define HPR_CAUSE0_MI_HRPC (1 << 9)
+#define HPR_CAUSE0_MI_HR (1 << 8)
+
+#define CPPMVRIC 0x1B1C
+#define XTALSDQDIS (1 << 22)
+
+#define IRQ_REG ACTL
+#define SCI_IRQ_ADJUST 0
+#define ACTL 0x1BD8
+#define PWRM_EN (1 << 8)
+#define ACPI_EN (1 << 7)
+#define SCI_IRQ_SEL (7 << 0)
+
+#define SCIS_IRQ9 0
+#define SCIS_IRQ10 1
+#define SCIS_IRQ11 2
+#define SCIS_IRQ20 4
+#define SCIS_IRQ21 5
+#define SCIS_IRQ22 6
+#define SCIS_IRQ23 7
+#endif
diff --git a/src/soc/intel/meteorlake/include/soc/romstage.h b/src/soc/intel/meteorlake/include/soc/romstage.h
new file mode 100644
index 0000000000..b9b3cf8bb6
--- /dev/null
+++ b/src/soc/intel/meteorlake/include/soc/romstage.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef _SOC_ROMSTAGE_H_
+#define _SOC_ROMSTAGE_H_
+
+#include <fsp/api.h>
+#include <stddef.h>
+#include <soc/soc_chip.h>
+
+void mainboard_update_premem_soc_chip_config(struct soc_intel_meteorlake_config *config);
+void mainboard_memory_init_params(FSPM_UPD *memupd);
+void systemagent_early_init(void);
+
+/* Board type */
+enum board_type {
+ BOARD_TYPE_MOBILE = 0,
+ BOARD_TYPE_DESKTOP = 1,
+ BOARD_TYPE_ULT_ULX = 5,
+ BOARD_TYPE_SERVER = 7
+};
+
+#endif /* _SOC_ROMSTAGE_H_ */
diff --git a/src/soc/intel/meteorlake/include/soc/soc_chip.h b/src/soc/intel/meteorlake/include/soc/soc_chip.h
new file mode 100644
index 0000000000..c72c0e9542
--- /dev/null
+++ b/src/soc/intel/meteorlake/include/soc/soc_chip.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef _SOC_METEORLAKE_SOC_CHIP_H_
+#define _SOC_METEORLAKE_SOC_CHIP_H_
+
+#include "../../chip.h"
+
+#endif /* _SOC_METEORLAKE_SOC_CHIP_H_ */
diff --git a/src/soc/intel/meteorlake/include/soc/systemagent.h b/src/soc/intel/meteorlake/include/soc/systemagent.h
new file mode 100644
index 0000000000..8d029f3e16
--- /dev/null
+++ b/src/soc/intel/meteorlake/include/soc/systemagent.h
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef SOC_METEORLAKE_SYSTEMAGENT_H
+#define SOC_METEORLAKE_SYSTEMAGENT_H
+
+#include <intelblocks/systemagent.h>
+
+/* Device 0:0.0 PCI configuration space */
+
+#define EPBAR 0x40
+#define DMIBAR 0x68
+#define CAPID0_A 0xe4
+#define VTD_DISABLE (1 << 23)
+
+/* MCHBAR offsets */
+#define EDRAMBAR 0x5408
+#define GFXVTBAR 0x5410
+#define REGBAR 0x5420
+#define MCH_DDR_POWER_LIMIT_LO 0x58e0
+#define MCH_DDR_POWER_LIMIT_HI 0x58e4
+#define MCH_PKG_POWER_LIMIT_LO 0x59a0
+#define MCH_PKG_POWER_LIMIT_HI 0x59a4
+#define BIOS_RESET_CPL 0x5da8
+#define IMRBASE 0x6a40
+#define IMRLIMIT 0x6a48
+#define IPUVTBAR 0x7880
+#define TBTxBAR(x) (0x7888 + (x) * 8)
+
+#define MAX_TBT_PCIE_PORT 4
+
+#define VTBAR_ENABLED 0x01
+#define VTBAR_MASK 0x7ffffff000ull
+
+static const struct sa_mmio_descriptor soc_vtd_resources[] = {
+ { GFXVTBAR, GFXVT_BASE_ADDRESS, GFXVT_BASE_SIZE, "GFXVTBAR" },
+};
+
+#define V_P2SB_CFG_IBDF_BUS 0
+#define V_P2SB_CFG_IBDF_DEV 30
+#define V_P2SB_CFG_IBDF_FUNC 7
+#define V_P2SB_CFG_HBDF_BUS 0
+#define V_P2SB_CFG_HBDF_DEV 30
+#define V_P2SB_CFG_HBDF_FUNC 6
+
+#endif