soc/intel/alderlake: add chipset devicetree for ADL-S

Add chipset devicetree and power limits for AlderLake-S platform.

Based on Intel docs #619501, #619362 and #626343.

Change-Id: I1dd72465c458b718ecfcb29c2f7e433a63b89807
Signed-off-by: Michał Kopeć <michal.kopec@3mdeb.com>
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/63493
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-by: ron minnich <rminnich@gmail.com>
diff --git a/src/soc/intel/alderlake/Kconfig b/src/soc/intel/alderlake/Kconfig
index 25f456b..d14b9a9 100644
--- a/src/soc/intel/alderlake/Kconfig
+++ b/src/soc/intel/alderlake/Kconfig
@@ -177,6 +177,7 @@
 
 config CHIPSET_DEVICETREE
 	string
+	default "soc/intel/alderlake/chipset_pch_s.cb" if SOC_INTEL_ALDERLAKE_PCH_S
 	default "soc/intel/alderlake/chipset.cb"
 
 config EXT_BIOS_WIN_BASE
diff --git a/src/soc/intel/alderlake/chip.h b/src/soc/intel/alderlake/chip.h
index 3088eaa..a5e6056 100644
--- a/src/soc/intel/alderlake/chip.h
+++ b/src/soc/intel/alderlake/chip.h
@@ -33,6 +33,15 @@
 	ADL_N_081_15W_CORE,
 	ADL_N_041_6W_CORE,
 	ADL_N_021_6W_CORE,
+	ADL_S_882_35W_CORE,
+	ADL_S_882_65W_CORE,
+	ADL_S_882_125W_CORE,
+	ADL_S_842_35W_CORE,
+	ADL_S_842_65W_CORE,
+	ADL_S_842_125W_CORE,
+	ADL_S_642_125W_CORE,
+	ADL_S_602_35W_CORE,
+	ADL_S_602_65W_CORE,
 	ADL_POWER_LIMITS_COUNT
 };
 
@@ -43,7 +52,10 @@
 	TDP_12W = 12,
 	TDP_15W = 15,
 	TDP_28W = 28,
-	TDP_45W = 45
+	TDP_35W = 35,
+	TDP_45W = 45,
+	TDP_65W = 65,
+	TDP_125W = 125
 };
 
 /* Mapping of different SKUs based on CPU ID and TDP values */
@@ -69,6 +81,15 @@
 	{ PCI_DID_INTEL_ADL_N_ID_2, ADL_N_041_6W_CORE, TDP_6W },
 	{ PCI_DID_INTEL_ADL_N_ID_3, ADL_N_041_6W_CORE, TDP_6W },
 	{ PCI_DID_INTEL_ADL_N_ID_4, ADL_N_021_6W_CORE, TDP_6W },
+	{ PCI_DID_INTEL_ADL_S_ID_1, ADL_S_882_35W_CORE, TDP_35W },
+	{ PCI_DID_INTEL_ADL_S_ID_1, ADL_S_882_65W_CORE, TDP_65W },
+	{ PCI_DID_INTEL_ADL_S_ID_1, ADL_S_882_125W_CORE, TDP_125W },
+	{ PCI_DID_INTEL_ADL_S_ID_3, ADL_S_842_35W_CORE, TDP_35W },
+	{ PCI_DID_INTEL_ADL_S_ID_3, ADL_S_842_65W_CORE, TDP_65W },
+	{ PCI_DID_INTEL_ADL_S_ID_3, ADL_S_842_125W_CORE, TDP_125W },
+	{ PCI_DID_INTEL_ADL_S_ID_8, ADL_S_642_125W_CORE, TDP_125W },
+	{ PCI_DID_INTEL_ADL_S_ID_10, ADL_S_602_35W_CORE, TDP_35W },
+	{ PCI_DID_INTEL_ADL_S_ID_10, ADL_S_602_65W_CORE, TDP_65W },
 };
 
 /* Types of display ports */
diff --git a/src/soc/intel/alderlake/chipset_pch_s.cb b/src/soc/intel/alderlake/chipset_pch_s.cb
new file mode 100644
index 0000000..2ade381
--- /dev/null
+++ b/src/soc/intel/alderlake/chipset_pch_s.cb
@@ -0,0 +1,217 @@
+chip soc/intel/alderlake
+
+	device cpu_cluster 0 on end
+
+	register "power_limits_config[ADL_S_882_35W_CORE]" = "{
+		.tdp_pl1_override = 35,
+		.tdp_pl2_override = 106,
+		.tdp_pl4 = 177,
+	}"
+
+	register "power_limits_config[ADL_S_882_65W_CORE]" = "{
+		.tdp_pl1_override = 65,
+		.tdp_pl2_override = 202,
+		.tdp_pl4 = 311,
+	}"
+
+	register "power_limits_config[ADL_S_882_125W_CORE]" = "{
+		.tdp_pl1_override = 125,
+		.tdp_pl2_override = 241,
+		.tdp_pl4 = 359,
+	}"
+
+	register "power_limits_config[ADL_S_842_35W_CORE]" = "{
+		.tdp_pl1_override = 35,
+		.tdp_pl2_override = 99,
+		.tdp_pl4 = 140,
+	}"
+
+	register "power_limits_config[ADL_S_842_65W_CORE]" = "{
+		.tdp_pl1_override = 65,
+		.tdp_pl2_override = 180,
+		.tdp_pl4 = 260,
+	}"
+
+	register "power_limits_config[ADL_S_842_125W_CORE]" = "{
+		.tdp_pl1_override = 125,
+		.tdp_pl2_override = 190,
+		.tdp_pl4 = 280,
+	}"
+
+	register "power_limits_config[ADL_S_642_125W_CORE]" = "{
+		.tdp_pl1_override = 125,
+		.tdp_pl2_override = 150,
+		.tdp_pl4 = 230,
+	}"
+
+	register "power_limits_config[ADL_S_602_35W_CORE]" = "{
+		.tdp_pl1_override = 35,
+		.tdp_pl2_override = 74,
+		.tdp_pl4 = 112,
+	}"
+
+	register "power_limits_config[ADL_S_602_65W_CORE]" = "{
+		.tdp_pl1_override = 65,
+		.tdp_pl2_override = 117,
+		.tdp_pl4 = 176,
+	}"
+
+	# NOTE: if any variant wants to override this value, use the same format
+	# as register "common_soc_config.pch_thermal_trip" = "value", instead of
+	# putting it under register "common_soc_config" in overridetree.cb file.
+	register "common_soc_config.pch_thermal_trip" = "100"
+
+	device domain 0 on
+		device gpio 0 alias pch_gpio on end
+		device pci 00.0 alias system_agent on end
+		device pci 01.0 alias pcie5_0 off end
+		device pci 01.1 alias pcie5_1 off end
+		device pci 02.0 alias igpu off end
+		device pci 04.0 alias dtt off end
+		device pci 06.0 alias pcie4_0 off end
+		device pci 08.0 alias gna off end
+		device pci 09.0 alias north_tracehub off end
+		device pci 0a.0 alias crashlog on end
+		device pci 0e.0 alias vmd off end
+		device pci 11.0 alias uart3 off end
+		device pci 12.0 alias ish off end
+		device pci 12.6 alias gspi2 off end
+		device pci 13.0 alias gspi3 off end
+		device pci 14.0 alias xhci off
+			chip drivers/usb/acpi
+				register "type" = "UPC_TYPE_HUB"
+				device usb 0.0 alias xhci_root_hub off
+					chip drivers/usb/acpi
+						device usb 2.0 alias usb2_port1 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.1 alias usb2_port2 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.2 alias usb2_port3 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.3 alias usb2_port4 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.4 alias usb2_port5 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.5 alias usb2_port6 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.6 alias usb2_port7 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.7 alias usb2_port8 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.8 alias usb2_port9 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.9 alias usb2_port10 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.a alias usb2_port11 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.b alias usb2_port12 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.c alias usb2_port13 off end
+					end
+					chip drivers/usb/acpi
+						device usb 2.d alias usb2_port14 off end
+					end
+					chip drivers/usb/acpi
+						device usb 3.0 alias usb3_port1 off end
+					end
+					chip drivers/usb/acpi
+						device usb 3.1 alias usb3_port2 off end
+					end
+					chip drivers/usb/acpi
+						device usb 3.2 alias usb3_port3 off end
+					end
+					chip drivers/usb/acpi
+						device usb 3.3 alias usb3_port4 off end
+					end
+					chip drivers/usb/acpi
+						device usb 3.4 alias usb3_port5 off end
+					end
+					chip drivers/usb/acpi
+						device usb 3.5 alias usb3_port6 off end
+					end
+					chip drivers/usb/acpi
+						device usb 3.6 alias usb3_port7 off end
+					end
+					chip drivers/usb/acpi
+						device usb 3.7 alias usb3_port8 off end
+					end
+					chip drivers/usb/acpi
+						device usb 3.8 alias usb3_port9 off end
+					end
+					chip drivers/usb/acpi
+						device usb 3.9 alias usb3_port10 off end
+					end
+				end
+			end
+		end
+		device pci 14.1 alias xdci off end
+		device pci 14.2 alias shared_sram off end
+		device pci 14.3 alias cnvi_wifi off end
+		device pci 15.0 alias i2c0 off end
+		device pci 15.1 alias i2c1 off end
+		device pci 15.2 alias i2c2 off end
+		device pci 15.3 alias i2c3 off end
+		device pci 16.0 alias heci1 on  end
+		device pci 16.1 alias heci2 off end
+		device pci 16.2 alias ide_r off end
+		device pci 16.3 alias kt off end
+		device pci 16.4 alias heci3 off end
+		device pci 16.5 alias heci4 off end
+		device pci 17.0 alias sata off end
+		device pci 19.0 alias i2c4 off end
+		device pci 19.1 alias i2c5 off end
+		device pci 19.2 alias uart2 off end
+		device pci 1a.0 alias pcie_rp25 off end
+		device pci 1a.1 alias pcie_rp26 off end
+		device pci 1a.2 alias pcie_rp27 off end
+		device pci 1a.3 alias pcie_rp28 off end
+		device pci 1b.0 alias pcie_rp17 off end
+		device pci 1b.1 alias pcie_rp18 off end
+		device pci 1b.2 alias pcie_rp19 off end
+		device pci 1b.3 alias pcie_rp20 off end
+		device pci 1b.4 alias pcie_rp21 off end
+		device pci 1b.5 alias pcie_rp22 off end
+		device pci 1b.6 alias pcie_rp23 off end
+		device pci 1b.7 alias pcie_rp24 off end
+		device pci 1c.0 alias pcie_rp1 off end
+		device pci 1c.1 alias pcie_rp2 off end
+		device pci 1c.2 alias pcie_rp3 off end
+		device pci 1c.3 alias pcie_rp4 off end
+		device pci 1c.4 alias pcie_rp5 off end
+		device pci 1c.5 alias pcie_rp6 off end
+		device pci 1c.6 alias pcie_rp7 off end
+		device pci 1c.7 alias pcie_rp8 off end
+		device pci 1d.0 alias pcie_rp9 off end
+		device pci 1d.1 alias pcie_rp10 off end
+		device pci 1d.2 alias pcie_rp11 off end
+		device pci 1d.3 alias pcie_rp12 off end
+		device pci 1d.4 alias pcie_rp13 off end
+		device pci 1d.5 alias pcie_rp14 off end
+		device pci 1d.6 alias pcie_rp15 off end
+		device pci 1d.7 alias pcie_rp16 off end
+		device pci 1e.0 alias uart0 off end
+		device pci 1e.1 alias uart1 off end
+		device pci 1e.2 alias gspi0 off end
+		device pci 1e.3 alias gspi1 off end
+		device pci 1f.0 alias pch_espi on end
+		device pci 1f.1 alias p2sb off end
+		device pci 1f.2 alias pmc hidden end
+		device pci 1f.3 alias hda off end
+		device pci 1f.4 alias smbus off end
+		device pci 1f.5 alias fast_spi on end
+		device pci 1f.6 alias gbe off end
+		device pci 1f.7 alias south_tracehub off end
+	end
+end
diff --git a/src/soc/intel/alderlake/fsp_params.c b/src/soc/intel/alderlake/fsp_params.c
index e82607c1..864367f 100644
--- a/src/soc/intel/alderlake/fsp_params.c
+++ b/src/soc/intel/alderlake/fsp_params.c
@@ -599,6 +599,11 @@
 	s_cfg->PavpEnable = CONFIG(PAVP);
 }
 
+WEAK_DEV_PTR(tcss_usb3_port1);
+WEAK_DEV_PTR(tcss_usb3_port2);
+WEAK_DEV_PTR(tcss_usb3_port3);
+WEAK_DEV_PTR(tcss_usb3_port4);
+
 static void fill_fsps_tcss_params(FSP_S_CONFIG *s_cfg,
 		const struct soc_intel_alderlake_config *config)
 {