soc/intel/alderlake: Move C State Demotion to mainboard config

Rather than disabling C State demotions for every single Raptor
Lake board due to an issue with S0ix, regardless of if they even
use S0ix, configure it in the mainboard.

Signed-off-by: Sean Rhodes <sean@starlabs.systems>
Change-Id: I4f941a549bc717ae2f8ec961ead7ac7668347c99
Reviewed-on: https://review.coreboot.org/c/coreboot/+/77087
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Martin L Roth <gaumless@gmail.com>
diff --git a/src/mainboard/google/brya/variants/baseboard/brya/devicetree.cb b/src/mainboard/google/brya/variants/baseboard/brya/devicetree.cb
index d48462c..0290181 100644
--- a/src/mainboard/google/brya/variants/baseboard/brya/devicetree.cb
+++ b/src/mainboard/google/brya/variants/baseboard/brya/devicetree.cb
@@ -14,6 +14,10 @@
 	# S0ix enable
 	register "s0ix_enable" = "1"
 
+	# Disable package C state demotion on Raptorlake as a W/A for S0ix issues
+	# seen on J0 and Q0 SKUs
+	register "disable_package_c_state_demotion" = "1"
+
 	# DPTF enable
 	register "dptf_enable" = "1"
 
diff --git a/src/mainboard/intel/adlrvp/variants/adlrvp_rpl/overridetree.cb b/src/mainboard/intel/adlrvp/variants/adlrvp_rpl/overridetree.cb
index e58e9fb..73012d1 100644
--- a/src/mainboard/intel/adlrvp/variants/adlrvp_rpl/overridetree.cb
+++ b/src/mainboard/intel/adlrvp/variants/adlrvp_rpl/overridetree.cb
@@ -1,4 +1,7 @@
 chip soc/intel/alderlake
+	# Disable package C state demotion on Raptorlake as a W/A for S0ix issues
+	# seen on J0 and Q0 SKUs
+	register "disable_package_c_state_demotion" = "1"
 
 	device domain 0 on end
 end
diff --git a/src/mainboard/intel/adlrvp/variants/adlrvp_rpl_ext_ec/overridetree.cb b/src/mainboard/intel/adlrvp/variants/adlrvp_rpl_ext_ec/overridetree.cb
index fc4c11c..8bc35c0 100644
--- a/src/mainboard/intel/adlrvp/variants/adlrvp_rpl_ext_ec/overridetree.cb
+++ b/src/mainboard/intel/adlrvp/variants/adlrvp_rpl_ext_ec/overridetree.cb
@@ -1,4 +1,7 @@
 chip soc/intel/alderlake
+	# Disable package C state demotion on Raptorlake as a W/A for S0ix issues
+	# seen on J0 and Q0 SKUs
+	register "disable_package_c_state_demotion" = "1"
 
 	device domain 0 on
 		device ref pch_espi on
diff --git a/src/mainboard/system76/rpl/devicetree.cb b/src/mainboard/system76/rpl/devicetree.cb
index 0fed44d..a016dec 100644
--- a/src/mainboard/system76/rpl/devicetree.cb
+++ b/src/mainboard/system76/rpl/devicetree.cb
@@ -17,6 +17,10 @@
 	# Thermal
 	register "tcc_offset" = "8"
 
+	# Disable package C state demotion on Raptorlake as a W/A for S0ix issues
+	# seen on J0 and Q0 SKUs
+	register "disable_package_c_state_demotion" = "1"
+
 	device cpu_cluster 0 on end
 
 	device domain 0 on
diff --git a/src/soc/intel/alderlake/fsp_params.c b/src/soc/intel/alderlake/fsp_params.c
index 67fb55b..d86d62c 100644
--- a/src/soc/intel/alderlake/fsp_params.c
+++ b/src/soc/intel/alderlake/fsp_params.c
@@ -1061,11 +1061,12 @@
 
 	s_cfg->VrPowerDeliveryDesign = config->vr_power_delivery_design;
 
-	/* FIXME: Disable package C state demotion on Raptorlake as a W/A for S0ix issues */
-	if ((cpu_id == CPUID_RAPTORLAKE_J0) || (cpu_id == CPUID_RAPTORLAKE_Q0))
-		s_cfg->PkgCStateDemotion = 0;
-	else
-		s_cfg->PkgCStateDemotion = !config->disable_package_c_state_demotion;
+	/* C state demotion must be disabled for Raptorlake J0 and Q0 SKUs */
+	assert(!(config->s0ix_enable && ((cpu_id == CPUID_RAPTORLAKE_J0) ||
+		(cpu_id == CPUID_RAPTORLAKE_Q0)) &&
+		!config->disable_package_c_state_demotion));
+
+	s_cfg->PkgCStateDemotion = !config->disable_package_c_state_demotion;
 
 	if (cpu_id == CPUID_RAPTORLAKE_J0 || cpu_id == CPUID_RAPTORLAKE_Q0)
 		s_cfg->C1e = 0;