summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf')
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.C197
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.H31
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_errors.xml20
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C312
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H106
-rw-r--r--src/usr/hwpf/hwp/freq_attributes.xml14
6 files changed, 571 insertions, 109 deletions
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.C b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.C
index 5d98e2d88..f7955914e 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.C
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp.C,v 1.10 2013/09/26 18:14:05 jmcgill Exp $
+// $Id: proc_build_smp.C,v 1.13 2013/11/13 01:44:13 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp.C,v $
//------------------------------------------------------------------------------
// *|
@@ -73,7 +73,7 @@ extern "C"
// RC_PROC_BUILD_SMP_CORE_FLOOR_FREQ_RATIO_ERR if cache/nest frequency
// ratio is unsupported,
// RC_PROC_FAB_SMP_ASYNC_SAFE_MODE_ATTR_ERR if attribute value is
-// invalid,
+// invalid,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_process_system(
@@ -89,7 +89,8 @@ fapi::ReturnCode proc_build_smp_process_system(
do
{
- // TODO: link to attribute if PB AVP mode support is needed
+
+ // ToDO: link to attribute if PB AVP mode support is needed
io_smp.avp_mode = false;
// get PB frequency attribute
@@ -127,12 +128,45 @@ fapi::ReturnCode proc_build_smp_process_system(
// get core floor frequency attribute
FAPI_DBG("proc_build_smp_process_system: Querying core floor frequency attribute");
- rc = FAPI_ATTR_GET(ATTR_BOOT_FREQ_MHZ,
+ rc = FAPI_ATTR_GET(ATTR_FREQ_CORE_FLOOR,
NULL,
io_smp.freq_core_floor);
if (!rc.ok())
{
- FAPI_ERR("proc_build_smp_process_system: Error from FAPI_ATTR_GET (ATTR_BOOT_FREQ_MHZ");
+ FAPI_ERR("proc_build_smp_process_system: Error from FAPI_ATTR_GET (ATTR_FREQ_CORE_FLOOR)");
+ break;
+ }
+
+ // get core nominal frequency attribute
+ FAPI_DBG("proc_build_smp_process_system: Querying core nominal frequency attribute");
+ rc = FAPI_ATTR_GET(ATTR_FREQ_CORE_NOMINAL,
+ NULL,
+ io_smp.freq_core_nom);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_build_smp_process_system: Error from FAPI_ATTR_GET (ATTR_FREQ_CORE_NOMINAL)");
+ break;
+ }
+
+ // get core ceiling frequency attribute
+ FAPI_DBG("proc_build_smp_process_system: Querying core ceiling frequency attribute");
+ rc = FAPI_ATTR_GET(ATTR_FREQ_CORE_MAX,
+ NULL,
+ io_smp.freq_core_ceiling);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_build_smp_process_system: Error from FAPI_ATTR_GET (ATTR_FREQ_CORE_MAX)");
+ break;
+ }
+
+ if (!((io_smp.freq_core_ceiling >= io_smp.freq_core_nom) &&
+ (io_smp.freq_core_nom >= io_smp.freq_core_floor)))
+ {
+ const uint32_t& CEILING = io_smp.freq_core_ceiling;
+ const uint32_t& NOM = io_smp.freq_core_nom;
+ const uint32_t& FLOOR = io_smp.freq_core_floor;
+ FAPI_SET_HWP_ERROR(rc,
+ RC_PROC_BUILD_SMP_CORE_FREQ_RANGE_ERR);
break;
}
@@ -414,32 +448,32 @@ fapi::ReturnCode proc_build_smp_process_system(
FAPI_DBG("proc_build_smp_process_system: Calculating core floor to nest frequency ratio");
if ((io_smp.freq_core_floor) >= (2 * io_smp.freq_pb))
{
- io_smp.core_floor_ratio = PROC_BUILD_SMP_CORE_FLOOR_RATIO_8_8;
+ io_smp.core_floor_ratio = PROC_BUILD_SMP_CORE_RATIO_8_8;
}
// breakpoint ratio: core floor 4.2, pb 2.4 (cache floor :: pb = 7/8)
else if ((4 * io_smp.freq_core_floor) >= (7 * io_smp.freq_pb))
{
- io_smp.core_floor_ratio = PROC_BUILD_SMP_CORE_FLOOR_RATIO_7_8;
+ io_smp.core_floor_ratio = PROC_BUILD_SMP_CORE_RATIO_7_8;
}
// breakpoint ratio: core floor 3.6, pb 2.4 (cache floor :: pb = 6/8)
else if ((2 * io_smp.freq_core_floor) >= (3 * io_smp.freq_pb))
{
- io_smp.core_floor_ratio = PROC_BUILD_SMP_CORE_FLOOR_RATIO_6_8;
+ io_smp.core_floor_ratio = PROC_BUILD_SMP_CORE_RATIO_6_8;
}
// breakpoint ratio: core floor 3.0, pb 2.4 (cache floor :: pb = 5/8)
else if ((4 * io_smp.freq_core_floor) >= (5 * io_smp.freq_pb))
{
- io_smp.core_floor_ratio = PROC_BUILD_SMP_CORE_FLOOR_RATIO_5_8;
+ io_smp.core_floor_ratio = PROC_BUILD_SMP_CORE_RATIO_5_8;
}
// breakpoint ratio: core floor 2.4, pb 2.4 (cache floor :: pb = 4/8)
else if (io_smp.freq_core_floor >= io_smp.freq_pb)
{
- io_smp.core_floor_ratio = PROC_BUILD_SMP_CORE_FLOOR_RATIO_4_8;
+ io_smp.core_floor_ratio = PROC_BUILD_SMP_CORE_RATIO_4_8;
}
// breakpoint ratio: core floor 1.2, pb 2.4 (cache floor :: pb = 2/8)
else if ((2 * io_smp.freq_core_floor) >= io_smp.freq_pb)
{
- io_smp.core_floor_ratio = PROC_BUILD_SMP_CORE_FLOOR_RATIO_2_8;
+ io_smp.core_floor_ratio = PROC_BUILD_SMP_CORE_RATIO_2_8;
}
// under-range, raise error
else
@@ -451,6 +485,147 @@ fapi::ReturnCode proc_build_smp_process_system(
FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_CORE_FLOOR_FREQ_RATIO_ERR);
break;
}
+
+ // determine table index based on pb/core ceiling frequency ratio
+ // breakpoint ratio: core ceiling 4.8, pb 2.4 (cache ceiling :: pb = 8/8)
+ FAPI_DBG("proc_build_smp_process_system: Calculating core ceiling to nest frequency ratio");
+ if ((io_smp.freq_core_ceiling) >= (2 * io_smp.freq_pb))
+ {
+ io_smp.core_ceiling_ratio = PROC_BUILD_SMP_CORE_RATIO_8_8;
+ }
+ // breakpoint ratio: core ceiling 4.2, pb 2.4 (cache ceiling :: pb = 7/8)
+ else if ((4 * io_smp.freq_core_ceiling) >= (7 * io_smp.freq_pb))
+ {
+ io_smp.core_ceiling_ratio = PROC_BUILD_SMP_CORE_RATIO_7_8;
+ }
+ // breakpoint ratio: core ceiling 3.6, pb 2.4 (cache ceiling :: pb = 6/8)
+ else if ((2 * io_smp.freq_core_ceiling) >= (3 * io_smp.freq_pb))
+ {
+ io_smp.core_ceiling_ratio = PROC_BUILD_SMP_CORE_RATIO_6_8;
+ }
+ // breakpoint ratio: core ceiling 3.0, pb 2.4 (cache ceiling :: pb = 5/8)
+ else if ((4 * io_smp.freq_core_ceiling) >= (5 * io_smp.freq_pb))
+ {
+ io_smp.core_ceiling_ratio = PROC_BUILD_SMP_CORE_RATIO_5_8;
+ }
+ // breakpoint ratio: core ceiling 2.4, pb 2.4 (cache ceiling :: pb = 4/8)
+ else if (io_smp.freq_core_ceiling >= io_smp.freq_pb)
+ {
+ io_smp.core_ceiling_ratio = PROC_BUILD_SMP_CORE_RATIO_4_8;
+ }
+ // breakpoint ratio: core ceiling 1.2, pb 2.4 (cache ceiling :: pb = 2/8)
+ else if ((2 * io_smp.freq_core_ceiling) >= io_smp.freq_pb)
+ {
+ io_smp.core_ceiling_ratio = PROC_BUILD_SMP_CORE_RATIO_2_8;
+ }
+ // under-range, raise error
+ else
+ {
+ FAPI_ERR("proc_build_smp_process_system: Unsupported core ceiling/PB frequency ratio (=%d/%d)",
+ io_smp.freq_core_ceiling, io_smp.freq_pb);
+ const uint32_t& FREQ_PB = io_smp.freq_pb;
+ const uint32_t& FREQ_CORE_CEILING = io_smp.freq_core_ceiling;
+ FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_CORE_CEILING_FREQ_RATIO_ERR);
+ break;
+ }
+
+ // determine full CPU delay settings
+ FAPI_DBG("proc_build_smp_process_system: Calculating full CPU delay settings:");
+ if ((2400 * io_smp.freq_core_ceiling) >= (4800 * io_smp.freq_pb))
+ {
+ io_smp.full_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_4800_2400;
+ }
+ else if ((2400 * io_smp.freq_core_ceiling) >= (4431 * io_smp.freq_pb))
+ {
+ io_smp.full_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_4431_2400;
+ }
+ else if ((2400 * io_smp.freq_core_ceiling) >= (4114 * io_smp.freq_pb))
+ {
+ io_smp.full_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_4114_2400;
+ }
+ else if ((2400 * io_smp.freq_core_ceiling) >= (3840 * io_smp.freq_pb))
+ {
+ io_smp.full_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_3840_2400;
+ }
+ else if ((2400 * io_smp.freq_core_ceiling) >= (3338 * io_smp.freq_pb))
+ {
+ io_smp.full_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_3338_2400;
+ }
+ else if ((2400 * io_smp.freq_core_ceiling) >= (3032 * io_smp.freq_pb))
+ {
+ io_smp.full_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_3032_2400;
+ }
+ else
+ {
+ io_smp.full_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_2743_2400;
+ }
+
+ // determine nominal CPU delay settings
+ FAPI_DBG("proc_build_smp_process_system: Calculating nominal CPU delay settings:");
+ if ((2400 * io_smp.freq_core_nom) >= (4800 * io_smp.freq_pb))
+ {
+ // shift to avoid equivalent index
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_4431_2400;
+ }
+ else if ((2400 * io_smp.freq_core_nom) >= (4431 * io_smp.freq_pb))
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_4431_2400;
+ // shift to avoid equivalent index
+ if (io_smp.nom_cpu_delay == io_smp.full_cpu_delay)
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_4114_2400;
+ }
+ }
+ else if ((2400 * io_smp.freq_core_nom) >= (4114 * io_smp.freq_pb))
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_4114_2400;
+ // shift to avoid equivalent index
+ if (io_smp.nom_cpu_delay == io_smp.full_cpu_delay)
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_3840_2400;
+ }
+ }
+ else if ((2400 * io_smp.freq_core_nom) >= (3840 * io_smp.freq_pb))
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_3840_2400;
+ // shift to avoid equivalent index
+ if (io_smp.nom_cpu_delay == io_smp.full_cpu_delay)
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_3338_2400;
+ }
+ }
+ else if ((2400 * io_smp.freq_core_nom) >= (3338 * io_smp.freq_pb))
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_3338_2400;
+ // shift to avoid equivalent index
+ if (io_smp.nom_cpu_delay == io_smp.full_cpu_delay)
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_3032_2400;
+ }
+ }
+ else if ((2400 * io_smp.freq_core_nom) >= (3032 * io_smp.freq_pb))
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_3032_2400;
+ // shift to avoid equivalent index
+ if (io_smp.nom_cpu_delay == io_smp.full_cpu_delay)
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_2743_2400;
+ }
+ }
+ else if ((2400 * io_smp.freq_core_nom) >= (2743 * io_smp.freq_pb))
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_2743_2400;
+ // shift to avoid equivalent index
+ if (io_smp.nom_cpu_delay == io_smp.full_cpu_delay)
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_2504_2400;
+ }
+ }
+ else
+ {
+ io_smp.nom_cpu_delay = PROC_BUILD_SMP_CPU_DELAY_2504_2400;
+ }
+
} while(0);
// mark function entry
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.H b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.H
index ec9b01059..f7e24d68a 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.H
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.H
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp.H,v 1.12 2013/10/18 21:36:02 jmcgill Exp $
+// $Id: proc_build_smp.H,v 1.13 2013/11/13 01:41:53 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp.H,v $
//------------------------------------------------------------------------------
// *|
@@ -158,15 +158,15 @@ struct proc_build_smp_node
proc_fab_smp_node_id node_id;
};
-// core floor/nest frequency ratio cutpoints (epsilon)
-enum proc_build_smp_core_floor_ratio
+// core/nest frequency ratio cutpoints (epsilon)
+enum proc_build_smp_core_ratio
{
- PROC_BUILD_SMP_CORE_FLOOR_RATIO_8_8 = 0,
- PROC_BUILD_SMP_CORE_FLOOR_RATIO_7_8 = 1,
- PROC_BUILD_SMP_CORE_FLOOR_RATIO_6_8 = 2,
- PROC_BUILD_SMP_CORE_FLOOR_RATIO_5_8 = 3,
- PROC_BUILD_SMP_CORE_FLOOR_RATIO_4_8 = 4,
- PROC_BUILD_SMP_CORE_FLOOR_RATIO_2_8 = 5
+ PROC_BUILD_SMP_CORE_RATIO_8_8 = 0,
+ PROC_BUILD_SMP_CORE_RATIO_7_8 = 1,
+ PROC_BUILD_SMP_CORE_RATIO_6_8 = 2,
+ PROC_BUILD_SMP_CORE_RATIO_5_8 = 3,
+ PROC_BUILD_SMP_CORE_RATIO_4_8 = 4,
+ PROC_BUILD_SMP_CORE_RATIO_2_8 = 5
};
// core floor/nest frequency ratio cutpoints (CPU delay)
@@ -226,9 +226,10 @@ struct proc_build_smp_system
uint32_t freq_core_nom;
uint32_t freq_core_ceiling;
uint32_t freq_pcie;
- // core floor/pb frequency ratio
- proc_build_smp_core_floor_ratio core_floor_ratio;
- // CPU ratios
+ // core/pb frequency ratios
+ proc_build_smp_core_ratio core_floor_ratio;
+ proc_build_smp_core_ratio core_ceiling_ratio;
+ // CPU delay/RCMD highwater settings
proc_build_smp_cpu_delay nom_cpu_delay;
proc_build_smp_cpu_delay full_cpu_delay;
@@ -287,6 +288,12 @@ extern "C"
// invalid,
// RC_PROC_BUILD_SMP_CORE_FLOOR_FREQ_RATIO_ERR if cache/nest frequency
// ratio is unsupported,
+// RC_PROC_BUILD_SMP_CORE_CEILING_FREQ_RATIO_ERR if cache/nest frequency
+// ratio is unsupported,
+// RC_PROC_BUILD_SMP_CORE_FLOOR_RATIO_ERR if cache/nest frequency
+// ratio is unsupported,
+// RC_PROC_BUILD_SMP_CORE_CEILING_RATIO_ERR if cache/nest frequency
+// ratio is unsupported,
// RC_PROC_FAB_SMP_ASYNC_SAFE_MODE_ATTR_ERR if attribute value is
// invalid,
// RC_PROC_FAB_SMP_PCIE_NOT_F_LINK_ATTR_ERR if attribute value is
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_errors.xml b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_errors.xml
index 1203a3ae7..4d8783a95 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_errors.xml
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_errors.xml
@@ -20,7 +20,7 @@
<!-- Origin: 30 -->
<!-- -->
<!-- IBM_PROLOG_END_TAG -->
-<!-- $Id: proc_build_smp_errors.xml,v 1.5 2013/09/26 18:16:09 jmcgill Exp $ -->
+<!-- $Id: proc_build_smp_errors.xml,v 1.7 2013/11/13 13:59:51 jmcgill Exp $ -->
<!-- Error definitions for proc_build_smp -->
<hwpErrors>
<!-- *********************************************************************** -->
@@ -69,17 +69,35 @@
<description>Command rate pacing table lookup error.</description>
</hwpError>
<hwpError>
+ <rc>RC_PROC_BUILD_SMP_CORE_FREQ_RANGE_ERR</rc>
+ <description>Invalid relationship between ceiling/nominal/floor core frequency attributes.</description>
+ <ffdc>CEILING</ffdc>
+ <ffdc>NOM</ffdc>
+ <ffdc>FLOOR</ffdc>
+ </hwpError>
+ <hwpError>
<rc>RC_PROC_BUILD_SMP_CORE_FLOOR_FREQ_RATIO_ERR</rc>
<description>Unsupported core floor to PB frequency ratio.</description>
<ffdc>FREQ_PB</ffdc>
<ffdc>FREQ_CORE_FLOOR</ffdc>
</hwpError>
<hwpError>
+ <rc>RC_PROC_BUILD_SMP_CORE_CEILING_FREQ_RATIO_ERR</rc>
+ <description>Unsupported core ceiling to PB frequency ratio.</description>
+ <ffdc>FREQ_PB</ffdc>
+ <ffdc>FREQ_CORE_CEILING</ffdc>
+ </hwpError>
+ <hwpError>
<rc>RC_PROC_BUILD_SMP_CORE_FLOOR_RATIO_ERR</rc>
<description>Unsupported core floor frequency enumerated value.</description>
<ffdc>CORE_FLOOR_RATIO</ffdc>
</hwpError>
<hwpError>
+ <rc>RC_PROC_BUILD_SMP_CORE_CEILING_RATIO_ERR</rc>
+ <description>Unsupported core ceiling frequency enumerated value.</description>
+ <ffdc>CORE_CEILING_RATIO</ffdc>
+ </hwpError>
+ <hwpError>
<rc>RC_PROC_BUILD_SMP_INVALID_GROUP_SIZE_ERR</rc>
<description>Invalid chips per group configuration detected.</description>
<ffdc>SIZE</ffdc>
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C
index 3d7938537..27915f48a 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_fbc_cd.C,v 1.9 2013/06/20 21:19:02 jmcgill Exp $
+// $Id: proc_build_smp_fbc_cd.C,v 1.13 2013/11/13 01:51:47 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_fbc_cd.C,v $
//------------------------------------------------------------------------------
// *|
@@ -450,12 +450,99 @@ fapi::ReturnCode proc_build_smp_set_sconfig_c8(
fapi::ReturnCode rc;
uint32_t rc_ecmd = 0x0;
ecmdDataBufferBase data(64);
+ uint8_t ver2 = 0x0;
+ uint8_t ver3 = 0x0;
+ uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT[PB_SCONFIG_NUM_HANG_LEVELS];
+ uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT[PB_SCONFIG_NUM_HANG_LEVELS];
+ uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT;
+ uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT;
+ uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT;
+ uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT;
+ uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT;
+ uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT;
+ uint32_t PB_SCONFIG_C8_RTY_PERCENTAGE_START_BIT;
+ uint32_t PB_SCONFIG_C8_RTY_PERCENTAGE_END_BIT;
+ uint32_t PB_SCONFIG_C8_INCLUDE_LPC_RTY_BIT;
+ proc_build_smp_sconfig_def pb_sconfig_c8_def;
// mark function entry
FAPI_DBG("proc_build_smp_set_sconfig_c8: Start");
do
{
+ rc = FAPI_ATTR_GET(ATTR_CHIP_EC_FEATURE_FBC_SERIAL_SCOM_C8_VER2,
+ &(i_smp_chip.chip->this_chip),
+ ver2);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error querying Chip EC feature: ATTR_CHIP_EC_FEATURE_FBC_SERIAL_SCOM_C8_VER2");
+ break;
+ }
+
+ rc = FAPI_ATTR_GET(ATTR_CHIP_EC_FEATURE_FBC_SERIAL_SCOM_C8_VER3,
+ &(i_smp_chip.chip->this_chip),
+ ver3);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error querying Chip EC feature: ATTR_CHIP_EC_FEATURE_FBC_SERIAL_SCOM_C8_VER3");
+ break;
+ }
+
+ if (ver3)
+ {
+ for (uint8_t l = 0; l < PB_SCONFIG_NUM_HANG_LEVELS; l++)
+ {
+ PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT[l] = PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT_VER3[l];
+ PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT[l] = PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT_VER3[l];
+ }
+ PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT = PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT_VER3;
+ PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT = PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT_VER3;
+ PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT = PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT_VER3;
+ PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT = PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT_VER3;
+ PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT = PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT_VER3;
+ PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT = PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT_VER3;
+ PB_SCONFIG_C8_RTY_PERCENTAGE_START_BIT = PB_SCONFIG_C8_RTY_PERCENTAGE_START_BIT_VER3;
+ PB_SCONFIG_C8_RTY_PERCENTAGE_END_BIT = PB_SCONFIG_C8_RTY_PERCENTAGE_END_BIT_VER3;
+ PB_SCONFIG_C8_INCLUDE_LPC_RTY_BIT = PB_SCONFIG_C8_INCLUDE_LPC_RTY_BIT_VER3;
+ pb_sconfig_c8_def = PB_SCONFIG_C8_DEF_VER3;
+ }
+ else if (ver2)
+ {
+ for (uint8_t l = 0; l < PB_SCONFIG_NUM_HANG_LEVELS; l++)
+ {
+ PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT[l] = PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT_VER2[l];
+ PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT[l] = PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT_VER2[l];
+ }
+ PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT = PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT_VER2;
+ PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT = PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT_VER2;
+ PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT = PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT_VER2;
+ PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT = PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT_VER2;
+ PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT = PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT_VER2;
+ PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT = PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT_VER2;
+ PB_SCONFIG_C8_RTY_PERCENTAGE_START_BIT = 0xFF;
+ PB_SCONFIG_C8_RTY_PERCENTAGE_END_BIT = 0xFF;
+ PB_SCONFIG_C8_INCLUDE_LPC_RTY_BIT = 0xFF;
+ pb_sconfig_c8_def = PB_SCONFIG_C8_DEF_VER2;
+ }
+ else
+ {
+ for (uint8_t l = 0; l < PB_SCONFIG_NUM_HANG_LEVELS; l++)
+ {
+ PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT[l] = PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT_VER1[l];
+ PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT[l] = PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT_VER1[l];
+ }
+ PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT = PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT_VER1;
+ PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT = PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT_VER1;
+ PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT = PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT_VER1;
+ PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT = PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT_VER1;
+ PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT = 0xFF;
+ PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT = 0xFF;
+ PB_SCONFIG_C8_RTY_PERCENTAGE_START_BIT = 0xFF;
+ PB_SCONFIG_C8_RTY_PERCENTAGE_END_BIT = 0xFF;
+ PB_SCONFIG_C8_INCLUDE_LPC_RTY_BIT = 0xFF;
+ pb_sconfig_c8_def = PB_SCONFIG_C8_DEF_VER1;
+ }
+
// build register content
// program hang command rates
for (uint8_t l = 0; l < PB_SCONFIG_NUM_HANG_LEVELS; l++)
@@ -481,6 +568,31 @@ fapi::ReturnCode proc_build_smp_set_sconfig_c8(
(PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT-
PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT+1));
+ // p7_sleep_backoff
+ if (ver2 || ver3)
+ {
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_C8_P7_SLEEP_BACKOFF,
+ PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT,
+ (PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT-
+ PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT+1));
+ }
+
+ // rty_percentage
+ // include_lpc_rty
+ if (ver3)
+ {
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_C8_RTY_PERCENTAGE,
+ PB_SCONFIG_C8_RTY_PERCENTAGE_START_BIT,
+ (PB_SCONFIG_C8_RTY_PERCENTAGE_END_BIT-
+ PB_SCONFIG_C8_RTY_PERCENTAGE_START_BIT+1));
+
+ rc_ecmd |= data.writeBit(
+ PB_SCONFIG_C8_INCLUDE_LPC_RTY_BIT,
+ PB_SCONFIG_C8_INCLUDE_LPC_RTY?1:0);
+ }
+
if (rc_ecmd)
{
FAPI_ERR("proc_build_smp_set_sconfig_c8: Error 0x%x setting up PB Serial Configuration load register data buffer",
@@ -490,7 +602,10 @@ fapi::ReturnCode proc_build_smp_set_sconfig_c8(
}
// call common routine to program chain
- rc = proc_build_smp_set_sconfig(i_smp_chip, PB_SCONFIG_C8_DEF, data);
+ rc = proc_build_smp_set_sconfig(
+ i_smp_chip,
+ pb_sconfig_c8_def,
+ data);
if (!rc.ok())
{
FAPI_ERR("proc_build_smp_set_sconfig_c8: Error from proc_build_smp_set_sconfig");
@@ -598,30 +713,105 @@ fapi::ReturnCode proc_build_smp_set_sconfig_c9(
//------------------------------------------------------------------------------
// function: program PB serial SCOM chain (center #10)
// parameters: i_smp_chip => structure encapsulating SMP chip
+// i_smp => structure encapsulating SMP
// returns: FAPI_RC_SUCCESS if register programming is successful,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_set_sconfig_c10(
- const proc_build_smp_chip& i_smp_chip)
+ const proc_build_smp_chip& i_smp_chip,
+ const proc_build_smp_system& i_smp)
{
fapi::ReturnCode rc;
uint32_t rc_ecmd = 0x0;
ecmdDataBufferBase data(64);
+ uint8_t ver2;
+ uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[PB_SCONFIG_NUM_CPU_RATIOS];
+ uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT[PB_SCONFIG_NUM_CPU_RATIOS];
+ uint32_t PB_SCONFIG_C10_DAT_X_LINK_HOLDOFF_ENABLE_BIT;
+ uint32_t PB_SCONFIG_C10_DAT_A_LINK_HOLDOFF_ENABLE_BIT;
+ uint32_t PB_SCONFIG_C10_DAT_LINK_HOLDOFF_MULTIPLIER_BIT;
+ proc_build_smp_sconfig_def pb_sconfig_c10_def;
// mark function entry
FAPI_DBG("proc_build_smp_set_sconfig_c10: Start");
do
{
+ rc = FAPI_ATTR_GET(ATTR_CHIP_EC_FEATURE_FBC_SERIAL_SCOM_C10_VER2,
+ &(i_smp_chip.chip->this_chip),
+ ver2);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error querying Chip EC feature: ATTR_CHIP_EC_FEATURE_FBC_SERIAL_SCOM_C10_VER2");
+ break;
+ }
+
+ if (ver2)
+ {
+ for (uint8_t l = 0; l < PB_SCONFIG_NUM_CPU_RATIOS; l++)
+ {
+ PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[l] = PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT_VER2[l];
+ PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT[l] = PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT_VER2[l];
+ }
+ PB_SCONFIG_C10_DAT_X_LINK_HOLDOFF_ENABLE_BIT = PB_SCONFIG_C10_DAT_X_LINK_HOLDOFF_ENABLE_BIT_VER2;
+ PB_SCONFIG_C10_DAT_A_LINK_HOLDOFF_ENABLE_BIT = PB_SCONFIG_C10_DAT_A_LINK_HOLDOFF_ENABLE_BIT_VER2;
+ PB_SCONFIG_C10_DAT_LINK_HOLDOFF_MULTIPLIER_BIT = PB_SCONFIG_C10_DAT_LINK_HOLDOFF_MULTIPLIER_BIT_VER2;
+ pb_sconfig_c10_def = PB_SCONFIG_C10_DEF_VER2;
+ }
+ else
+ {
+ for (uint8_t l = 0; l < PB_SCONFIG_NUM_CPU_RATIOS; l++)
+ {
+ PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[l] = PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT_VER1[l];
+ PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT[l] = PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT_VER1[l];
+ }
+ PB_SCONFIG_C10_DAT_X_LINK_HOLDOFF_ENABLE_BIT = 0xFF;
+ PB_SCONFIG_C10_DAT_A_LINK_HOLDOFF_ENABLE_BIT = 0xFF;
+ PB_SCONFIG_C10_DAT_LINK_HOLDOFF_MULTIPLIER_BIT = 0xFF;
+ pb_sconfig_c10_def = PB_SCONFIG_C10_DEF_VER1;
+ }
+
// build register content
- // program hang command rates
- for (uint8_t l = 0; l < PB_SCONFIG_NUM_CPU_RATIOS; l++)
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_C10_CMD_CPU_RATIO_QUARTER,
+ PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[0],
+ (PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT[0]-
+ PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[0]+1));
+
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_C10_CMD_CPU_RATIO_HALF,
+ PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[1],
+ (PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT[1]-
+ PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[1]+1));
+
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_C10_CMD_CPU_RATIO_TABLE[i_smp.nom_cpu_delay],
+ PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[2],
+ (PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT[2]-
+ PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[2]+1));
+
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_C10_CMD_CPU_RATIO_TABLE[i_smp.full_cpu_delay],
+ PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[3],
+ (PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT[3]-
+ PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[3]+1));
+
+ // x_link_holdoff_enable
+ // a_link_holdoff_enable
+ // link_holdoff_mutlipler
+ if (ver2)
{
- rc_ecmd |= data.insertFromRight(
- PB_SCONFIG_C10_CMD_CPU_RATIO[l],
- PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[l],
- (PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT[l]-
- PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[l]+1));
+ rc_ecmd |= data.writeBit(
+ PB_SCONFIG_C10_DAT_X_LINK_HOLDOFF_ENABLE_BIT,
+ PB_SCONFIG_C10_DAT_X_LINK_HOLDOFF_ENABLE);
+
+ rc_ecmd |= data.writeBit(
+ PB_SCONFIG_C10_DAT_A_LINK_HOLDOFF_ENABLE_BIT,
+ PB_SCONFIG_C10_DAT_A_LINK_HOLDOFF_ENABLE);
+
+ rc_ecmd |= data.writeBit(
+ PB_SCONFIG_C10_DAT_LINK_HOLDOFF_MULTIPLIER_BIT,
+ PB_SCONFIG_C10_DAT_LINK_HOLDOFF_MULTIPLIER);
}
if (rc_ecmd)
@@ -633,7 +823,7 @@ fapi::ReturnCode proc_build_smp_set_sconfig_c10(
}
// call common routine to program chain
- rc = proc_build_smp_set_sconfig(i_smp_chip, PB_SCONFIG_C10_DEF, data);
+ rc = proc_build_smp_set_sconfig(i_smp_chip, pb_sconfig_c10_def, data);
if (!rc.ok())
{
FAPI_ERR("proc_build_smp_set_sconfig_c10: Error from proc_build_smp_set_sconfig");
@@ -650,11 +840,13 @@ fapi::ReturnCode proc_build_smp_set_sconfig_c10(
//------------------------------------------------------------------------------
// function: program PB serial SCOM chain (center #11)
// parameters: i_smp_chip => structure encapsulating SMP chip
+// i_smp => structure encapsulating SMP
// returns: FAPI_RC_SUCCESS if register programming is successful,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_set_sconfig_c11(
- const proc_build_smp_chip& i_smp_chip)
+ const proc_build_smp_chip& i_smp_chip,
+ const proc_build_smp_system& i_smp)
{
fapi::ReturnCode rc;
uint32_t rc_ecmd = 0x0;
@@ -666,15 +858,29 @@ fapi::ReturnCode proc_build_smp_set_sconfig_c11(
do
{
// build register content
- // program hang command rates
- for (uint8_t l = 0; l < PB_SCONFIG_NUM_CPU_RATIOS; l++)
- {
- rc_ecmd |= data.insertFromRight(
- PB_SCONFIG_C11_RSP_CPU_RATIO[l],
- PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[l],
- (PB_SCONFIG_C11_RSP_CPU_RATIO_END_BIT[l]-
- PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[l]+1));
- }
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_C11_RSP_CPU_RATIO_QUARTER,
+ PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[0],
+ (PB_SCONFIG_C11_RSP_CPU_RATIO_END_BIT[0]-
+ PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[0]+1));
+
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_C11_RSP_CPU_RATIO_HALF,
+ PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[1],
+ (PB_SCONFIG_C11_RSP_CPU_RATIO_END_BIT[1]-
+ PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[1]+1));
+
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_C11_RSP_CPU_RATIO_TABLE[i_smp.nom_cpu_delay],
+ PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[2],
+ (PB_SCONFIG_C11_RSP_CPU_RATIO_END_BIT[2]-
+ PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[2]+1));
+
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_C11_RSP_CPU_RATIO_TABLE[i_smp.full_cpu_delay],
+ PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[3],
+ (PB_SCONFIG_C11_RSP_CPU_RATIO_END_BIT[3]-
+ PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[3]+1));
if (rc_ecmd)
{
@@ -704,7 +910,7 @@ fapi::ReturnCode proc_build_smp_set_sconfig_c11(
// parameters: i_smp_chip => structure encapsulating SMP chip
// i_smp => structure encapsulating SMP
// returns: FAPI_RC_SUCCESS if register programming is successful,
-// RC_PROC_BUILD_SMP_CORE_FLOOR_RATIO_ERR if cache/nest frequency
+// RC_PROC_BUILD_SMP_CORE_CEILING_RATIO_ERR if cache/nest frequency
// ratio is unsupported,
// else error
//------------------------------------------------------------------------------
@@ -740,29 +946,30 @@ fapi::ReturnCode proc_build_smp_set_sconfig_we0(
data_c2i_dctr_launch = 0x3; // rc
rcmd_i2c_dval_launch = 0x3; // wc
- switch (i_smp.core_floor_ratio)
+ switch (i_smp.core_ceiling_ratio)
{
- // dial back if over 2x
- case PROC_BUILD_SMP_CORE_FLOOR_RATIO_8_8:
- if (i_smp.freq_core_floor > (2 * i_smp.freq_pb))
+ // dial back if ceiling is over 2x
+ case PROC_BUILD_SMP_CORE_RATIO_8_8:
+ if (i_smp.freq_core_ceiling > (2 * i_smp.freq_pb))
{
+ FAPI_DBG("proc_build_smp_set_sconfig_we0: Clamping CRSP/RCMD/DATA i2c dval to safe mode based on ceiling frequency");
crsp_i2c_dval_launch = 0x0; // rc_p1
rcmd_i2c_dval_launch = 0x0; // rc_p1
data_i2c_dval_launch = 0x3; // wc
}
break;
- case PROC_BUILD_SMP_CORE_FLOOR_RATIO_7_8:
- case PROC_BUILD_SMP_CORE_FLOOR_RATIO_6_8:
- case PROC_BUILD_SMP_CORE_FLOOR_RATIO_5_8:
- case PROC_BUILD_SMP_CORE_FLOOR_RATIO_4_8:
- case PROC_BUILD_SMP_CORE_FLOOR_RATIO_2_8:
+ case PROC_BUILD_SMP_CORE_RATIO_7_8:
+ case PROC_BUILD_SMP_CORE_RATIO_6_8:
+ case PROC_BUILD_SMP_CORE_RATIO_5_8:
+ case PROC_BUILD_SMP_CORE_RATIO_4_8:
+ case PROC_BUILD_SMP_CORE_RATIO_2_8:
break;
default:
FAPI_ERR("proc_build_smp_set_sconfig_we0: Unsupported core floor frequency ratio enum (%d)",
i_smp.core_floor_ratio);
- const uint32_t& CORE_FLOOR_RATIO = i_smp.core_floor_ratio;
+ const uint32_t& CORE_CEILING_RATIO = i_smp.core_floor_ratio;
FAPI_SET_HWP_ERROR(rc,
- RC_PROC_BUILD_SMP_CORE_FLOOR_RATIO_ERR);
+ RC_PROC_BUILD_SMP_CORE_CEILING_RATIO_ERR);
break;
}
}
@@ -941,19 +1148,19 @@ fapi::ReturnCode proc_build_smp_set_sconfig_we0(
PB_SCONFIG_WE0_FP_C2I_SPARE_MODE_BIT,
PB_SCONFIG_WE0_FP_C2I_SPARE_MODE?1:0);
- // cpu_ratio_table_full
+ // cpu_delay_full
rc_ecmd |= data.insertFromRight(
- PB_SCONFIG_WE0_CPU_RATIO_TABLE_FULL,
- PB_SCONFIG_WE0_CPU_RATIO_TABLE_FULL_START_BIT,
- (PB_SCONFIG_WE0_CPU_RATIO_TABLE_FULL_END_BIT-
- PB_SCONFIG_WE0_CPU_RATIO_TABLE_FULL_START_BIT+1));
+ PB_SCONFIG_WE0_CPU_DELAY_TABLE[i_smp.full_cpu_delay],
+ PB_SCONFIG_WE0_CPU_DELAY_FULL_START_BIT,
+ (PB_SCONFIG_WE0_CPU_DELAY_FULL_END_BIT-
+ PB_SCONFIG_WE0_CPU_DELAY_FULL_START_BIT+1));
- // cpu_ratio_table_half
+ // cpu_delay_nom
rc_ecmd |= data.insertFromRight(
- PB_SCONFIG_WE0_CPU_RATIO_TABLE_NOM,
- PB_SCONFIG_WE0_CPU_RATIO_TABLE_NOM_START_BIT,
- (PB_SCONFIG_WE0_CPU_RATIO_TABLE_NOM_END_BIT-
- PB_SCONFIG_WE0_CPU_RATIO_TABLE_NOM_START_BIT+1));
+ PB_SCONFIG_WE0_CPU_DELAY_TABLE[i_smp.nom_cpu_delay],
+ PB_SCONFIG_WE0_CPU_DELAY_NOM_START_BIT,
+ (PB_SCONFIG_WE0_CPU_DELAY_NOM_END_BIT-
+ PB_SCONFIG_WE0_CPU_DELAY_NOM_START_BIT+1));
if (rc_ecmd)
{
@@ -1024,22 +1231,22 @@ fapi::ReturnCode proc_build_smp_set_sconfig_we1(
switch (i_smp.core_floor_ratio)
{
- case PROC_BUILD_SMP_CORE_FLOOR_RATIO_8_8:
- case PROC_BUILD_SMP_CORE_FLOOR_RATIO_7_8:
- case PROC_BUILD_SMP_CORE_FLOOR_RATIO_6_8:
- case PROC_BUILD_SMP_CORE_FLOOR_RATIO_5_8:
+ case PROC_BUILD_SMP_CORE_RATIO_8_8:
+ case PROC_BUILD_SMP_CORE_RATIO_7_8:
+ case PROC_BUILD_SMP_CORE_RATIO_6_8:
+ case PROC_BUILD_SMP_CORE_RATIO_5_8:
cmd_c2i_dval_launch = 0x3; // wc
data_i2c_dctr_launch = 0x1; // rc_m2
data_c2i_dval_launch = 0x2; // wc_m1
attr_proc_pbiex_async_sel = fapi::ENUM_ATTR_PROC_PBIEX_ASYNC_SEL_SEL0;
break;
- case PROC_BUILD_SMP_CORE_FLOOR_RATIO_4_8:
+ case PROC_BUILD_SMP_CORE_RATIO_4_8:
cmd_c2i_dval_launch = 0x3; // wc
data_i2c_dctr_launch = 0x2; // rc_m1
data_c2i_dval_launch = 0x3; // wc
attr_proc_pbiex_async_sel = fapi::ENUM_ATTR_PROC_PBIEX_ASYNC_SEL_SEL1;
break;
- case PROC_BUILD_SMP_CORE_FLOOR_RATIO_2_8:
+ case PROC_BUILD_SMP_CORE_RATIO_2_8:
cmd_c2i_dval_launch = 0x0; // wc_p1
data_i2c_dctr_launch = 0x3; // rc
data_c2i_dval_launch = 0x0; // wc_p1
@@ -1273,13 +1480,12 @@ fapi::ReturnCode proc_build_smp_set_sconfig_we5(
do
{
-//@thi - Patch this per Joe's suggestion
rc = FAPI_ATTR_GET(ATTR_CHIP_EC_FEATURE_FBC_SERIAL_SCOM_WE5_VER2,
&(i_smp_chip.chip->this_chip),
ver2);
if (!rc.ok())
{
- FAPI_ERR("Error querying Chip EC feature: ATTR_CHIP_EC_FEATURE_FBC_SERIAL_SCOM_CENT5_VER2");
+ FAPI_ERR("Error querying Chip EC feature: ATTR_CHIP_EC_FEATURE_FBC_SERIAL_SCOM_WE5_VER2");
break;
}
@@ -1604,14 +1810,14 @@ fapi::ReturnCode proc_build_smp_set_fbc_cd(
break;
}
- rc = proc_build_smp_set_sconfig_c10(p_iter->second);
+ rc = proc_build_smp_set_sconfig_c10(p_iter->second, i_smp);
if (!rc.ok())
{
FAPI_ERR("proc_build_smp_set_fbc_cd: Error from proc_build_smp_set_sconfig_c10");
break;
}
- rc = proc_build_smp_set_sconfig_c11(p_iter->second);
+ rc = proc_build_smp_set_sconfig_c11(p_iter->second, i_smp);
if (!rc.ok())
{
FAPI_ERR("proc_build_smp_set_fbc_cd: Error from proc_build_smp_set_sconfig_c11");
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H
index f847b0f9b..240da6adc 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_fbc_cd.H,v 1.11 2013/09/26 18:01:39 jmcgill Exp $
+// $Id: proc_build_smp_fbc_cd.H,v 1.15 2013/11/13 01:52:36 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_fbc_cd.H,v $
//------------------------------------------------------------------------------
// *|
@@ -192,19 +192,46 @@ const bool PB_SCONFIG_C7_SLOW_GO_RATE = true;
// PBH_CMD_SNOOPER (center, chain #8) field/bit definitions
//
-const proc_build_smp_sconfig_def PB_SCONFIG_C8_DEF = { 0x8, 37, false, { false, true, false } };
-
-const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT[PB_SCONFIG_NUM_HANG_LEVELS] = { 27, 31, 35, 39, 43, 47, 51 };
-const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT[PB_SCONFIG_NUM_HANG_LEVELS] = { 30, 34, 38, 42, 46, 50, 54 };
-const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT = 55;
-const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT = 57;
-const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT = 58;
-const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT = 63;
-
-const uint8_t PB_SCONFIG_C8_HANG_CMD_RATE[PB_SCONFIG_NUM_HANG_LEVELS] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL = 0x3;
-const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL = 0xF;
-
+const proc_build_smp_sconfig_def PB_SCONFIG_C8_DEF_VER1 = { 0x8, 37, false, { false, true, false } };
+const proc_build_smp_sconfig_def PB_SCONFIG_C8_DEF_VER2 = { 0x8, 39, false, { false, true, false } };
+const proc_build_smp_sconfig_def PB_SCONFIG_C8_DEF_VER3 = { 0x8, 43, false, { false, true, false } };
+
+const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT_VER1[PB_SCONFIG_NUM_HANG_LEVELS] = { 27, 31, 35, 39, 43, 47, 51 };
+const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT_VER1[PB_SCONFIG_NUM_HANG_LEVELS] = { 30, 34, 38, 42, 46, 50, 54 };
+const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT_VER1 = 55;
+const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT_VER1 = 57;
+const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT_VER1 = 58;
+const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT_VER1 = 63;
+
+const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT_VER2[PB_SCONFIG_NUM_HANG_LEVELS] = { 25, 29, 33, 37, 41, 45, 49 };
+const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT_VER2[PB_SCONFIG_NUM_HANG_LEVELS] = { 28, 32, 36, 40, 44, 48, 52 };
+const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT_VER2 = 53;
+const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT_VER2 = 55;
+const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT_VER2 = 56;
+const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT_VER2 = 61;
+const uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT_VER2 = 62;
+const uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT_VER2 = 63;
+
+const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT_VER3[PB_SCONFIG_NUM_HANG_LEVELS] = { 21, 25, 29, 33, 37, 41, 45 };
+const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT_VER3[PB_SCONFIG_NUM_HANG_LEVELS] = { 24, 28, 32, 36, 40, 44, 48 };
+const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT_VER3 = 49;
+const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT_VER3 = 51;
+const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT_VER3 = 52;
+const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT_VER3 = 57;
+const uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT_VER3 = 58;
+const uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT_VER3 = 59;
+const uint32_t PB_SCONFIG_C8_RTY_PERCENTAGE_START_BIT_VER3 = 60;
+const uint32_t PB_SCONFIG_C8_RTY_PERCENTAGE_END_BIT_VER3 = 62;
+const uint32_t PB_SCONFIG_C8_INCLUDE_LPC_RTY_BIT_VER3 = 63;
+
+const uint8_t PB_SCONFIG_C8_HANG_CMD_RATE[PB_SCONFIG_NUM_HANG_LEVELS] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+const uint8_t PB_SCONFIG_C8_CPO_JUMP_LEVEL = 0x3;
+const uint8_t PB_SCONFIG_C8_CPO_RTY_LEVEL = 0x4;
+
+const uint8_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF = 0x2; // backoff_1k
+
+const uint8_t PB_SCONFIG_C8_RTY_PERCENTAGE = 0x0; // 000
+const uint8_t PB_SCONFIG_C8_INCLUDE_LPC_RTY = 0x0; // off
//
// PBH_CMD_CENTRAL_ARB (center, chain #9) field/bit definitions
@@ -227,11 +254,11 @@ const uint32_t PB_SCONFIG_C9_UX_SCOPE_ARB_MODE_END_BIT = 61;
const uint32_t PB_SCONFIG_C9_UX_LOCAL_ARB_MODE_START_BIT = 62;
const uint32_t PB_SCONFIG_C9_UX_LOCAL_ARB_MODE_END_BIT = 63;
-const uint8_t PB_SCONFIG_C9_CP_STARVE_LIMIT = 0x80;
-const uint8_t PB_SCONFIG_C9_GP_STARVE_LIMIT = 0x80;
-const uint8_t PB_SCONFIG_C9_RGP_STARVE_LIMIT = 0x80;
-const uint8_t PB_SCONFIG_C9_SP_STARVE_LIMIT = 0x80;
-const uint8_t PB_SCONFIG_C9_FP_STARVE_LIMIT = 0x80;
+const uint8_t PB_SCONFIG_C9_CP_STARVE_LIMIT = 0x10;
+const uint8_t PB_SCONFIG_C9_GP_STARVE_LIMIT = 0x10;
+const uint8_t PB_SCONFIG_C9_RGP_STARVE_LIMIT = 0x10;
+const uint8_t PB_SCONFIG_C9_SP_STARVE_LIMIT = 0x10;
+const uint8_t PB_SCONFIG_C9_FP_STARVE_LIMIT = 0x10;
const uint8_t PB_SCONFIG_C9_UX_SCOPE_ARB_MODE = 0x0; // LFSR_ONLY
const uint8_t PB_SCONFIG_C9_UX_LOCAL_ARB_MODE = 0x2; // LFSR_ON_STARVATION_ELSE_RR
@@ -240,12 +267,25 @@ const uint8_t PB_SCONFIG_C9_UX_LOCAL_ARB_MODE = 0x2; // LFSR_ON_STARVATION_ELSE_
// PBH_CMD_CENTRAL_ARB (center, chain #10) field/bit definitions
//
-const proc_build_smp_sconfig_def PB_SCONFIG_C10_DEF = { 0xA, 20, false, { false, true, false } };
+const proc_build_smp_sconfig_def PB_SCONFIG_C10_DEF_VER1 = { 0xA, 20, false, { false, true, false } };
+const proc_build_smp_sconfig_def PB_SCONFIG_C10_DEF_VER2 = { 0xA, 23, false, { false, true, false } };
+
+const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT_VER1[PB_SCONFIG_NUM_CPU_RATIOS] = { 59, 54, 49, 44 };
+const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT_VER1[PB_SCONFIG_NUM_CPU_RATIOS] = { 63, 58, 53, 48 };
-const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT[PB_SCONFIG_NUM_CPU_RATIOS] = { 59, 54, 49, 44 };
-const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT[PB_SCONFIG_NUM_CPU_RATIOS] = { 63, 58, 53, 48 };
+const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT_VER2[PB_SCONFIG_NUM_CPU_RATIOS] = { 56, 51, 46, 41 };
+const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT_VER2[PB_SCONFIG_NUM_CPU_RATIOS] = { 60, 55, 50, 45 };
+const uint32_t PB_SCONFIG_C10_DAT_X_LINK_HOLDOFF_ENABLE_BIT_VER2 = 61;
+const uint32_t PB_SCONFIG_C10_DAT_A_LINK_HOLDOFF_ENABLE_BIT_VER2 = 62;
+const uint32_t PB_SCONFIG_C10_DAT_LINK_HOLDOFF_MULTIPLIER_BIT_VER2 = 63;
-const uint8_t PB_SCONFIG_C10_CMD_CPU_RATIO[PB_SCONFIG_NUM_CPU_RATIOS] = { 3, 7, 11, 15 };
+const uint8_t PB_SCONFIG_C10_CMD_CPU_RATIO_TABLE[PROC_BUILD_SMP_CPU_DELAY_NUM_SETPOINTS] = { 15, 14, 13, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7 };
+
+const uint8_t PB_SCONFIG_C10_CMD_CPU_RATIO_QUARTER = 3;
+const uint8_t PB_SCONFIG_C10_CMD_CPU_RATIO_HALF = 7;
+const uint8_t PB_SCONFIG_C10_DAT_X_LINK_HOLDOFF_ENABLE = 0x0; // disable
+const uint8_t PB_SCONFIG_C10_DAT_A_LINK_HOLDOFF_ENABLE = 0x0; // disable
+const uint8_t PB_SCONFIG_C10_DAT_LINK_HOLDOFF_MULTIPLIER = 0x0; // x2
//
@@ -257,8 +297,10 @@ const proc_build_smp_sconfig_def PB_SCONFIG_C11_DEF = { 0xB, 20, false, { false,
const uint32_t PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[PB_SCONFIG_NUM_CPU_RATIOS] = { 59, 54, 49, 44 };
const uint32_t PB_SCONFIG_C11_RSP_CPU_RATIO_END_BIT[PB_SCONFIG_NUM_CPU_RATIOS] = { 63, 58, 53, 48 };
-const uint8_t PB_SCONFIG_C11_RSP_CPU_RATIO[PB_SCONFIG_NUM_CPU_RATIOS] = { 4, 8, 12, 16 };
+const uint8_t PB_SCONFIG_C11_RSP_CPU_RATIO_TABLE[PROC_BUILD_SMP_CPU_DELAY_NUM_SETPOINTS] = { 16, 15, 14, 13, 12, 12, 11, 11, 10, 10, 9, 9, 8 };
+const uint8_t PB_SCONFIG_C11_RSP_CPU_RATIO_QUARTER = 4;
+const uint8_t PB_SCONFIG_C11_RSP_CPU_RATIO_HALF = 8;
//
// PBH_PBIEX_EH (east/west, chain #0) field/bit definitions
@@ -306,12 +348,12 @@ const uint32_t PB_SCONFIG_WE0_FP_I2C_HSHAKE_BIT = 50;
const uint32_t PB_SCONFIG_WE0_FP_I2C_SPARE_MODE_BIT = 51;
const uint32_t PB_SCONFIG_WE0_FP_C2I_DONE_LAUNCH_BIT = 52;
const uint32_t PB_SCONFIG_WE0_FP_C2I_SPARE_MODE_BIT = 53;
-const uint32_t PB_SCONFIG_WE0_CPU_RATIO_TABLE_FULL_START_BIT = 54;
-const uint32_t PB_SCONFIG_WE0_CPU_RATIO_TABLE_FULL_END_BIT = 58;
-const uint32_t PB_SCONFIG_WE0_CPU_RATIO_TABLE_NOM_START_BIT = 59;
-const uint32_t PB_SCONFIG_WE0_CPU_RATIO_TABLE_NOM_END_BIT = 63;
+const uint32_t PB_SCONFIG_WE0_CPU_DELAY_FULL_START_BIT = 54;
+const uint32_t PB_SCONFIG_WE0_CPU_DELAY_FULL_END_BIT = 58;
+const uint32_t PB_SCONFIG_WE0_CPU_DELAY_NOM_START_BIT = 59;
+const uint32_t PB_SCONFIG_WE0_CPU_DELAY_NOM_END_BIT = 63;
-const uint8_t PB_SCONFIG_WE0_CMD_C2I_LATE_RD_MODE = true; // on
+const bool PB_SCONFIG_WE0_CMD_C2I_LATE_RD_MODE = true; // on
const uint8_t PB_SCONFIG_WE0_CMD_C2I_DELAY_SP_RD = 0x0; // rc_p1
const bool PB_SCONFIG_WE0_CMD_C2I_SPARE_MODE = false; // spare
const uint8_t PB_SCONFIG_WE0_PRSP_C2I_DONE_LAUNCH = 0x0; // rc_p1
@@ -335,8 +377,8 @@ const uint8_t PB_SCONFIG_WE0_FP_I2C_HSHAKE = false; // off
const bool PB_SCONFIG_WE0_FP_I2C_SPARE_MODE = false; // spare
const uint8_t PB_SCONFIG_WE0_FP_C2I_DONE_LAUNCH = 0x0; // rc_p1
const bool PB_SCONFIG_WE0_FP_C2I_SPARE_MODE = false; // spare
-const uint32_t PB_SCONFIG_WE0_CPU_RATIO_TABLE_FULL = 0x0E; // 14
-const uint32_t PB_SCONFIG_WE0_CPU_RATIO_TABLE_NOM = 0x12; // 18
+
+const uint8_t PB_SCONFIG_WE0_CPU_DELAY_TABLE[PROC_BUILD_SMP_CPU_DELAY_NUM_SETPOINTS] = { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 };
//
@@ -500,6 +542,8 @@ extern "C"
// registers are equivalent,
// RC_PROC_BUILD_SMP_CORE_FLOOR_RATIO_ERR if cache/nest frequency
// ratio is unsupported,
+// RC_PROC_BUILD_SMP_CORE_CEILING_RATIO_ERR if cache/nest frequency
+// ratio is unsupported,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_set_fbc_cd(
diff --git a/src/usr/hwpf/hwp/freq_attributes.xml b/src/usr/hwpf/hwp/freq_attributes.xml
index 973f03a23..588a02434 100644
--- a/src/usr/hwpf/hwp/freq_attributes.xml
+++ b/src/usr/hwpf/hwp/freq_attributes.xml
@@ -20,7 +20,7 @@
<!-- Origin: 30 -->
<!-- -->
<!-- IBM_PROLOG_END_TAG -->
-<!-- $Id: freq_attributes.xml,v 1.7 2013/08/09 15:14:59 mjjones Exp $ -->
+<!-- $Id: freq_attributes.xml,v 1.8 2013/10/16 20:42:30 jmcgill Exp $ -->
<!--
XML file specifying HWPF attributes.
These are frequency attributes.
@@ -81,6 +81,18 @@
</attribute>
<!-- ********************************************************************* -->
<attribute>
+ <id>ATTR_FREQ_CORE_NOMINAL</id>
+ <targetType>TARGET_TYPE_SYSTEM</targetType>
+ <description>
+ The nominal core frequency in MHz.
+ This is the same for all cores in the system.
+ Provided by the Machine Readable Workbook.
+ </description>
+ <valueType>uint32</valueType>
+ <platInit/>
+ </attribute>
+ <!-- ********************************************************************* -->
+ <attribute>
<id>ATTR_FREQ_PB</id>
<targetType>TARGET_TYPE_SYSTEM</targetType>
<description>
OpenPOWER on IntegriCloud