intel/skylake: Fix bug in VR configuration with FSP 2.0

With the move to FSP 2.0 the number of VR types supported was
reduced to 4, and the VR_RING type is no longer present.

This means all existing boards using FSP 2.0 are incorrectly
passing VR configuration into FSP as the values corresponding to
"GT Sliced" and "GT Unsliced" have changed.

Fix this by updating the skylake SOC VR handling to account for
changes in the FSP configuration and no longer provide VR_RING
type when using FSP 2.0.

BUG=b:36228330
BRANCH=none
TEST=manual: build and boot on Eve

Change-Id: I59eea9fba006a4c235d7b42d07fdc6e4f44f7351
Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: https://review.coreboot.org/18818
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Furquan Shaikh <furquan@google.com>
Tested-by: build bot (Jenkins)
This commit is contained in:
Duncan Laurie 2017-03-14 16:37:55 -07:00
parent 2661a9f517
commit 4fa8a6f4fe
6 changed files with 73 additions and 107 deletions

View File

@ -61,20 +61,20 @@ chip soc/intel/skylake
register "pirqg_routing" = "PCH_IRQ11" register "pirqg_routing" = "PCH_IRQ11"
register "pirqh_routing" = "PCH_IRQ11" register "pirqh_routing" = "PCH_IRQ11"
# VR Settings Configuration for 5 Domains # VR Settings Configuration for 4 Domains
#+----------------+-------+-------+-------------+-------------+-------+ #+----------------+-------+-------+-------+-------+
#| Domain/Setting | SA | IA | Ring Sliced | GT Unsliced | GT | #| Domain/Setting | SA | IA | GTUS | GTS |
#+----------------+-------+-------+-------------+-------------+-------+ #+----------------+-------+-------+-------+-------+
#| Psi1Threshold | 20A | 20A | 20A | 20A | 20A | #| Psi1Threshold | 20A | 20A | 20A | 20A |
#| Psi2Threshold | 4A | 5A | 5A | 5A | 5A | #| Psi2Threshold | 4A | 5A | 5A | 5A |
#| Psi3Threshold | 1A | 1A | 1A | 1A | 1A | #| Psi3Threshold | 1A | 1A | 1A | 1A |
#| Psi3Enable | 1 | 1 | 1 | 1 | 1 | #| Psi3Enable | 1 | 1 | 1 | 1 |
#| Psi4Enable | 1 | 1 | 1 | 1 | 1 | #| Psi4Enable | 1 | 1 | 1 | 1 |
#| ImonSlope | 0 | 0 | 0 | 0 | 0 | #| ImonSlope | 0 | 0 | 0 | 0 |
#| ImonOffset | 0 | 0 | 0 | 0 | 0 | #| ImonOffset | 0 | 0 | 0 | 0 |
#| IccMax | 4A | 24A | 24A | 24A | 24A | #| IccMax | 4A | 24A | 24A | 24A |
#| VrVoltageLimit | 1.52V | 1.52V | 1.52V | 1.52V | 1.52V | #| VrVoltageLimit | 1.52V | 1.52V | 1.52V | 1.52V |
#+----------------+-------+-------+-------------+-------------+-------+ #+----------------+-------+-------+-------+-------+
register "domain_vr_config[VR_SYSTEM_AGENT]" = "{ register "domain_vr_config[VR_SYSTEM_AGENT]" = "{
.vr_config_enable = 1, .vr_config_enable = 1,
.psi1threshold = VR_CFG_AMP(20), .psi1threshold = VR_CFG_AMP(20),
@ -101,19 +101,6 @@ chip soc/intel/skylake
.voltage_limit = 1520, .voltage_limit = 1520,
}" }"
register "domain_vr_config[VR_RING]" = "{
.vr_config_enable = 1,
.psi1threshold = VR_CFG_AMP(20),
.psi2threshold = VR_CFG_AMP(5),
.psi3threshold = VR_CFG_AMP(1),
.psi3enable = 1,
.psi4enable = 1,
.imon_slope = 0x0,
.imon_offset = 0x0,
.icc_max = VR_CFG_AMP(24),
.voltage_limit = 1520,
}"
register "domain_vr_config[VR_GT_UNSLICED]" = "{ register "domain_vr_config[VR_GT_UNSLICED]" = "{
.vr_config_enable = 1, .vr_config_enable = 1,
.psi1threshold = VR_CFG_AMP(20), .psi1threshold = VR_CFG_AMP(20),

View File

@ -65,20 +65,20 @@ chip soc/intel/skylake
register "pirqg_routing" = "PCH_IRQ11" register "pirqg_routing" = "PCH_IRQ11"
register "pirqh_routing" = "PCH_IRQ11" register "pirqh_routing" = "PCH_IRQ11"
# VR Settings Configuration for 5 Domains # VR Settings Configuration for 4 Domains
#+----------------+-------+-------+-------------+-------------+-------+ #+----------------+-------+-------+-------+-------+
#| Domain/Setting | SA | IA | Ring Sliced | GT Unsliced | GT | #| Domain/Setting | SA | IA | GTUS | GTS |
#+----------------+-------+-------+-------------+-------------+-------+ #+----------------+-------+-------+-------+-------+
#| Psi1Threshold | 20A | 20A | 20A | 20A | 20A | #| Psi1Threshold | 20A | 20A | 20A | 20A |
#| Psi2Threshold | 4A | 5A | 5A | 5A | 5A | #| Psi2Threshold | 4A | 5A | 5A | 5A |
#| Psi3Threshold | 1A | 1A | 1A | 1A | 1A | #| Psi3Threshold | 1A | 1A | 1A | 1A |
#| Psi3Enable | 1 | 1 | 1 | 1 | 1 | #| Psi3Enable | 1 | 1 | 1 | 1 |
#| Psi4Enable | 1 | 1 | 1 | 1 | 1 | #| Psi4Enable | 1 | 1 | 1 | 1 |
#| ImonSlope | 0 | 0 | 0 | 0 | 0 | #| ImonSlope | 0 | 0 | 0 | 0 |
#| ImonOffset | 0 | 0 | 0 | 0 | 0 | #| ImonOffset | 0 | 0 | 0 | 0 |
#| IccMax | 7A | 34A | 34A | 35A | 35A | #| IccMax | 7A | 34A | 35A | 35A |
#| VrVoltageLimit | 1.52V | 1.52V | 1.52V | 1.52V | 1.52V | #| VrVoltageLimit | 1.52V | 1.52V | 1.52V | 1.52V |
#+----------------+-------+-------+-------------+-------------+-------+ #+----------------+-------+-------+-------+-------+
register "domain_vr_config[VR_SYSTEM_AGENT]" = "{ register "domain_vr_config[VR_SYSTEM_AGENT]" = "{
.vr_config_enable = 1, .vr_config_enable = 1,
.psi1threshold = VR_CFG_AMP(20), .psi1threshold = VR_CFG_AMP(20),
@ -105,19 +105,6 @@ chip soc/intel/skylake
.voltage_limit = 1520, .voltage_limit = 1520,
}" }"
register "domain_vr_config[VR_RING]" = "{
.vr_config_enable = 1,
.psi1threshold = VR_CFG_AMP(20),
.psi2threshold = VR_CFG_AMP(5),
.psi3threshold = VR_CFG_AMP(1),
.psi3enable = 1,
.psi4enable = 1,
.imon_slope = 0x0,
.imon_offset = 0x0,
.icc_max = VR_CFG_AMP(34),
.voltage_limit = 1520,
}"
register "domain_vr_config[VR_GT_UNSLICED]" = "{ register "domain_vr_config[VR_GT_UNSLICED]" = "{
.vr_config_enable = 1, .vr_config_enable = 1,
.psi1threshold = VR_CFG_AMP(20), .psi1threshold = VR_CFG_AMP(20),

View File

@ -59,20 +59,20 @@ chip soc/intel/skylake
# Determines if enable Serial IRQ. Values 0: Disabled, 1: Enabled # Determines if enable Serial IRQ. Values 0: Disabled, 1: Enabled
register "SerialIrqConfigSirqEnable" = "0x01" register "SerialIrqConfigSirqEnable" = "0x01"
# VR Settings Configuration for 5 Domains # VR Settings Configuration for 4 Domains
#+----------------+-------+-------+-------------+-------------+-------+ #+----------------+-------+-------+-------+-------+
#| Domain/Setting | SA | IA | Ring Sliced | GT Unsliced | GT | #| Domain/Setting | SA | IA | GTUS | GTS |
#+----------------+-------+-------+-------------+-------------+-------+ #+----------------+-------+-------+-------+-------+
#| Psi1Threshold | 20A | 20A | 20A | 20A | 20A | #| Psi1Threshold | 20A | 20A | 20A | 20A |
#| Psi2Threshold | 5A | 5A | 5A | 5A | 5A | #| Psi2Threshold | 5A | 5A | 5A | 5A |
#| Psi3Threshold | 1A | 1A | 1A | 1A | 1A | #| Psi3Threshold | 1A | 1A | 1A | 1A |
#| Psi3Enable | 1 | 1 | 1 | 1 | 1 | #| Psi3Enable | 1 | 1 | 1 | 1 |
#| Psi4Enable | 1 | 1 | 1 | 1 | 1 | #| Psi4Enable | 1 | 1 | 1 | 1 |
#| ImonSlope | 0 | 0 | 0 | 0 | 0 | #| ImonSlope | 0 | 0 | 0 | 0 |
#| ImonOffset | 0 | 0 | 0 | 0 | 0 | #| ImonOffset | 0 | 0 | 0 | 0 |
#| IccMax | 7A | 34A | 34A | 35A | 35A | #| IccMax | 7A | 34A | 35A | 35A |
#| VrVoltageLimit | 1.52V | 1.52V | 1.52V | 1.52V | 1.52V | #| VrVoltageLimit | 1.52V | 1.52V | 1.52V | 1.52V |
#+----------------+-------+-------+-------------+-------------+-------+ #+----------------+-------+-------+-------+-------+
register "domain_vr_config[VR_SYSTEM_AGENT]" = "{ register "domain_vr_config[VR_SYSTEM_AGENT]" = "{
.vr_config_enable = 1, \ .vr_config_enable = 1, \
.psi1threshold = 0x50, \ .psi1threshold = 0x50, \
@ -98,18 +98,6 @@ chip soc/intel/skylake
.icc_max = 0x88, \ .icc_max = 0x88, \
.voltage_limit = 0x5F0 \ .voltage_limit = 0x5F0 \
}" }"
register "domain_vr_config[VR_RING]" = "{
.vr_config_enable = 1, \
.psi1threshold = 0x50, \
.psi2threshold = 0x14, \
.psi3threshold = 0x4, \
.psi3enable = 1, \
.psi4enable = 1, \
.imon_slope = 0x0, \
.imon_offset = 0x0, \
.icc_max = 0x88, \
.voltage_limit = 0x5F0, \
}"
register "domain_vr_config[VR_GT_UNSLICED]" = "{ register "domain_vr_config[VR_GT_UNSLICED]" = "{
.vr_config_enable = 1, \ .vr_config_enable = 1, \

View File

@ -65,20 +65,20 @@ chip soc/intel/skylake
# Determines if enable Serial IRQ. Values 0: Disabled, 1: Enabled # Determines if enable Serial IRQ. Values 0: Disabled, 1: Enabled
register "SerialIrqConfigSirqEnable" = "0x01" register "SerialIrqConfigSirqEnable" = "0x01"
# VR Settings Configuration for 5 Domains # VR Settings Configuration for 4 Domains
#+----------------+-------+-------+-------------+-------------+-------+ #+----------------+-------+-------+-------+-------+
#| Domain/Setting | SA | IA | Ring Sliced | GT Unsliced | GT | #| Domain/Setting | SA | IA | GTUS | GTS |
#+----------------+-------+-------+-------------+-------------+-------+ #+----------------+-------+-------+-------+-------+
#| Psi1Threshold | 20A | 20A | 20A | 20A | 20A | #| Psi1Threshold | 20A | 20A | 20A | 20A |
#| Psi2Threshold | 4A | 5A | 5A | 5A | 5A | #| Psi2Threshold | 4A | 5A | 5A | 5A |
#| Psi3Threshold | 1A | 1A | 1A | 1A | 1A | #| Psi3Threshold | 1A | 1A | 1A | 1A |
#| Psi3Enable | 1 | 1 | 1 | 1 | 1 | #| Psi3Enable | 1 | 1 | 1 | 1 |
#| Psi4Enable | 1 | 1 | 1 | 1 | 1 | #| Psi4Enable | 1 | 1 | 1 | 1 |
#| ImonSlope | 0 | 0 | 0 | 0 | 0 | #| ImonSlope | 0 | 0 | 0 | 0 |
#| ImonOffset | 0 | 0 | 0 | 0 | 0 | #| ImonOffset | 0 | 0 | 0 | 0 |
#| IccMax | 7A | 34A | 34A | 35A | 35A | #| IccMax | 7A | 34A | 35A | 35A |
#| VrVoltageLimit | 1.52V | 1.52V | 1.52V | 1.52V | 1.52V | #| VrVoltageLimit | 1.52V | 1.52V | 1.52V | 1.52V |
#+----------------+-------+-------+-------------+-------------+-------+ #+----------------+-------+-------+-------+-------+
register "domain_vr_config[VR_SYSTEM_AGENT]" = "{ register "domain_vr_config[VR_SYSTEM_AGENT]" = "{
.vr_config_enable = 1, \ .vr_config_enable = 1, \
.psi1threshold = 0x50, \ .psi1threshold = 0x50, \
@ -104,18 +104,6 @@ chip soc/intel/skylake
.icc_max = 0x0, \ .icc_max = 0x0, \
.voltage_limit = 0x0 \ .voltage_limit = 0x0 \
}" }"
register "domain_vr_config[VR_RING]" = "{
.vr_config_enable = 1, \
.psi1threshold = 0x50, \
.psi2threshold = 0x14, \
.psi3threshold = 0x4, \
.psi3enable = 1, \
.psi4enable = 1, \
.imon_slope = 0x0, \
.imon_offset = 0x0, \
.icc_max = 0x0, \
.voltage_limit = 0x0, \
}"
register "domain_vr_config[VR_GT_UNSLICED]" = "{ register "domain_vr_config[VR_GT_UNSLICED]" = "{
.vr_config_enable = 1, \ .vr_config_enable = 1, \

View File

@ -65,11 +65,12 @@ struct vr_config {
#define VR_CFG_AMP(i) ((i) * 4) #define VR_CFG_AMP(i) ((i) * 4)
#if IS_ENABLED(CONFIG_PLATFORM_USES_FSP1_1)
/* VrConfig Settings for 5 domains /* VrConfig Settings for 5 domains
* 0 = System Agent, 1 = IA Core, 2 = Ring, * 0 = System Agent, 1 = IA Core, 2 = Ring,
* 3 = GT unsliced, 4 = GT sliced * 3 = GT unsliced, 4 = GT sliced
*/ */
enum vr_domain{ enum vr_domain {
VR_SYSTEM_AGENT, VR_SYSTEM_AGENT,
VR_IA_CORE, VR_IA_CORE,
VR_RING, VR_RING,
@ -77,6 +78,19 @@ enum vr_domain{
VR_GT_SLICED, VR_GT_SLICED,
NUM_VR_DOMAINS NUM_VR_DOMAINS
}; };
#else
/* VrConfig Settings for 4 domains
* 0 = System Agent, 1 = IA Core,
* 2 = GT unsliced, 3 = GT sliced
*/
enum vr_domain {
VR_SYSTEM_AGENT,
VR_IA_CORE,
VR_GT_UNSLICED,
VR_GT_SLICED,
NUM_VR_DOMAINS
};
#endif
void fill_vr_domain_config(void *params, void fill_vr_domain_config(void *params,
int domain, const struct vr_config *cfg); int domain, const struct vr_config *cfg);

View File

@ -44,6 +44,7 @@ static const struct vr_config default_configs[NUM_VR_DOMAINS] = {
.icc_max = VR_CFG_AMP(34), .icc_max = VR_CFG_AMP(34),
.voltage_limit = 1520, .voltage_limit = 1520,
}, },
#if IS_ENABLED(CONFIG_PLATFORM_USES_FSP1_1)
[VR_RING] = { [VR_RING] = {
.vr_config_enable = 1, .vr_config_enable = 1,
.psi1threshold = VR_CFG_AMP(20), .psi1threshold = VR_CFG_AMP(20),
@ -56,6 +57,7 @@ static const struct vr_config default_configs[NUM_VR_DOMAINS] = {
.icc_max = VR_CFG_AMP(34), .icc_max = VR_CFG_AMP(34),
.voltage_limit = 1520, .voltage_limit = 1520,
}, },
#endif
[VR_GT_UNSLICED] = { [VR_GT_UNSLICED] = {
.vr_config_enable = 1, .vr_config_enable = 1,
.psi1threshold = VR_CFG_AMP(20), .psi1threshold = VR_CFG_AMP(20),