summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/pstates/pstates/lab_pstates.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf/hwp/pstates/pstates/lab_pstates.c')
-rwxr-xr-xsrc/usr/hwpf/hwp/pstates/pstates/lab_pstates.c192
1 files changed, 157 insertions, 35 deletions
diff --git a/src/usr/hwpf/hwp/pstates/pstates/lab_pstates.c b/src/usr/hwpf/hwp/pstates/pstates/lab_pstates.c
index 2e7767927..fe545b7a5 100755
--- a/src/usr/hwpf/hwp/pstates/pstates/lab_pstates.c
+++ b/src/usr/hwpf/hwp/pstates/pstates/lab_pstates.c
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: lab_pstates.c,v 1.7 2013/06/12 20:01:35 mjjones Exp $
+// $Id: lab_pstates.c,v 1.8 2013/08/13 17:12:54 jimyac Exp $
/// \file lab_pstates.c
/// \brief Lab-only (as opposed to product-procedure) support for Pstates.
@@ -97,7 +97,7 @@ vrm112vuv(uint8_t vrm11_vid, uint32_t *v_uv)
int
vuv2ivid(uint32_t v_uv, int round, uint8_t *ivid)
-{
+{
int rc;
int32_t offset, vid;
@@ -105,7 +105,7 @@ vuv2ivid(uint32_t v_uv, int round, uint8_t *ivid)
vid = offset / IVID_STEP_UV;
if (((offset % IVID_STEP_UV) != 0) && (round >= 0)) {
- vid++;
+ vid++;
}
*ivid = vid;
@@ -114,10 +114,9 @@ vuv2ivid(uint32_t v_uv, int round, uint8_t *ivid)
} else {
rc = 0;
}
- return rc;
+ return rc;
}
-
/// Convert an iVID code to a voltage in microvolts
int
@@ -141,21 +140,24 @@ sprintf_10uv(char *s, uint32_t v_uv)
return sprintf(s, "%d.%05d", v_uv / 1000000, (v_uv % 1000000) / 10);
}
-/// Format an IVID code as 10 microvolts into a user-supplied string. The
-/// string \a s must be able to store at least FORMAT_10UV_STRLEN characters.
+#ifdef FAPIECMD
+
+/// Format a voltage in microvolts as 10 microvolts to a stream.
int
-sprintf_ivid(char *s, uint8_t ivid)
+fprintf_10uv(FILE *stream, uint32_t v_uv)
{
int rc;
- uint32_t v_uv;
+ char s[FORMAT_10UV_STRLEN];
- if ((rc = ivid2vuv(ivid, &v_uv)) != 0) {
- return rc;
+ rc = sprintf_10uv(s, v_uv);
+ if (rc > 0) {
+ rc = fputs(s, stream);
}
- return sprintf_10uv(s, v_uv);
+ return rc;
}
+
/// Format a VRM-11 VID code as 10 microvolts into a user-supplied string. The
/// string \a s must be able to store at least FORMAT_10UV_STRLEN characters.
@@ -173,17 +175,16 @@ sprintf_vrm11(char *s, uint8_t vrm11)
return rc;
}
-#ifdef FAPIECMD
-/// Format a voltage in microvolts as 10 microvolts to a stream.
+/// Format a VRM-11 VID code as 10 microvolts to a stream.
int
-fprintf_10uv(FILE *stream, uint32_t v_uv)
+fprintf_vrm11(FILE *stream, uint8_t vrm11)
{
int rc;
char s[FORMAT_10UV_STRLEN];
- rc = sprintf_10uv(s, v_uv);
+ rc = sprintf_vrm11(s, vrm11);
if (rc > 0) {
rc = fputs(s, stream);
}
@@ -191,19 +192,19 @@ fprintf_10uv(FILE *stream, uint32_t v_uv)
}
-/// Format a VRM-11 VID code as 10 microvolts to a stream.
+/// Format an IVID code as 10 microvolts into a user-supplied string. The
+/// string \a s must be able to store at least FORMAT_10UV_STRLEN characters.
int
-fprintf_vrm11(FILE *stream, uint8_t vrm11)
+sprintf_ivid(char *s, uint8_t ivid)
{
int rc;
- char s[FORMAT_10UV_STRLEN];
+ uint32_t v_uv;
- rc = sprintf_vrm11(s, vrm11);
- if (rc > 0) {
- rc = fputs(s, stream);
- }
+ if ((rc = ivid2vuv(ivid, &v_uv)) != 0) {
return rc;
+ }
+ return sprintf_10uv(s, v_uv);
}
@@ -400,32 +401,154 @@ void
lpsa_print(FILE* stream, LocalPstateArray* lpsa)
{
int i;
+ uint8_t entries;
+ uint8_t entries_div4;
+ char ivid_vdd_str[FORMAT_10UV_STRLEN];
+ char ivid_vcs_str[FORMAT_10UV_STRLEN];
+ uint8_t ivid_vdd, ivid_vcs;
+ lpst_entry_t lpst_entry;
+ vdsvin_entry_t vdsvin_entry;
fprintf(stream,
"---------------------------------------------------------------------------------------------------------\n");
fprintf(stream, "Local Pstate Array @ %p\n", lpsa);
fprintf(stream,
"---------------------------------------------------------------------------------------------------------\n");
-
fprintf(stream, "%d Entries from %+d to %+d\n",
lpsa->entries, lpst_pmin(lpsa), lpst_pmax(lpsa));
fprintf(stream, "Step Delay Rising %u, Step Delay Falling %u\n",
- lpsa->stepdelay_rising,
+ lpsa->stepdelay_rising,
lpsa->stepdelay_lowering);
+ fprintf(stream,
+ "---------------------------------------------------------------------------------------------------------------------\n");
+ fprintf(stream,
+ " I ivid_vdd(V) ivid_vcs(V) Core vdd Core vcs ECO vdd ECO vcs ps1 inc ps2 inc ps3 inc inc step dec step\n"
+ " pwrratio pwrratio pwrratio pwrratio \n"
+ "---------------------------------------------------------------------------------------------------------------------\n");
+
+ entries = lpsa->entries;
+ entries_div4 = entries/4;
+
+ if ( entries % 4 != 0)
+ entries_div4++;
+
+ for (i = entries_div4-1 ; i >= 0; i--) {
+ lpst_entry.value = revle64(lpsa->pstate[i].value);
+
+ ivid_vdd = lpst_entry.fields.ivid_vdd;
+ sprintf_ivid(ivid_vdd_str, ivid_vdd);
+
+ ivid_vcs = lpst_entry.fields.ivid_vcs;
+ sprintf_ivid(ivid_vcs_str, ivid_vcs);
+
+ fprintf(stream,
+ "%2u "
+ "0x%02x %s "
+ "0x%02x %s "
+ "%-9u %-9u %-9u %-9u "
+ "%-8u %-8u %-8u "
+ "%-9u %-9u \n",
+ i,
+ ivid_vdd, ivid_vdd_str,
+ ivid_vcs, ivid_vcs_str,
+ (uint8_t)lpst_entry.fields.vdd_core_pwrratio,
+ (uint8_t)lpst_entry.fields.vcs_core_pwrratio,
+ (uint8_t)lpst_entry.fields.vdd_eco_pwrratio,
+ (uint8_t)lpst_entry.fields.vcs_eco_pwrratio,
+ (uint8_t)lpst_entry.fields.ps1_vid_incr,
+ (uint8_t)lpst_entry.fields.ps2_vid_incr,
+ (uint8_t)lpst_entry.fields.ps3_vid_incr,
+ (uint8_t)lpst_entry.fields.inc_step,
+ (uint8_t)lpst_entry.fields.dec_step);
+ }
- fprintf(stream, "Array :\n");
- for (i = 0; i < LOCAL_PSTATE_ARRAY_ENTRIES; i+= 4) {
- fprintf(stream, " 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n",
- (unsigned long long)(lpsa->pstate[i].value),
- (unsigned long long)(lpsa->pstate[i + 1].value),
- (unsigned long long)(lpsa->pstate[i + 2].value),
- (unsigned long long)(lpsa->pstate[i + 3].value));
+ fprintf(stream,
+ "---------------------------------------------------------------------------------------------------------------------\n\n");
+
+ fprintf(stream,
+ "--------------------------------\n");
+ fprintf(stream,
+ "VDS\n");
+ fprintf(stream,
+ " I beg_offset end_offset \n"
+ "--------------------------------\n");
+
+ for (i = 15 ; i >= 0; i--) {
+ vdsvin_entry.value = revle64(lpsa->vdsvin[i].value);
+
+ fprintf(stream,
+ "%2u "
+ "%-10u "
+ "%-10u \n",
+ i,
+ (uint8_t)vdsvin_entry.fields.ivid0,
+ (uint8_t)vdsvin_entry.fields.ivid1);
}
fprintf(stream,
- "---------------------------------------------------------------------------------------------------------\n");
+ "--------------------------------\n\n");
+
+
+ fprintf(stream,
+ "-----------------------------------------------------\n");
+ fprintf(stream,
+ "VIN\n");
+ fprintf(stream,
+ " I ptef0 pfet1 pfet2 pfet3 pfet4 pfet5 pfet6 pfet7\n"
+ "-----------------------------------------------------\n");
+
+ for (i = 63 ; i >= 0; i--) {
+ vdsvin_entry.value = revle64(lpsa->vdsvin[i].value);
+
+ fprintf(stream,
+ "%2u "
+ "%-5u %-5u %-5u %-5u %-5u %-5u %-5u %-5u\n",
+ i,
+ (uint8_t)vdsvin_entry.fields.pfet0,
+ (uint8_t)vdsvin_entry.fields.pfet1,
+ (uint8_t)vdsvin_entry.fields.pfet2,
+ (uint8_t)vdsvin_entry.fields.pfet3,
+ (uint8_t)vdsvin_entry.fields.pfet4,
+ (uint8_t)vdsvin_entry.fields.pfet5,
+ (uint8_t)vdsvin_entry.fields.pfet6,
+ (uint8_t)vdsvin_entry.fields.pfet7);
+ }
+
+ fprintf(stream,
+ "-----------------------------------------------------\n\n");
}
+/// Print CPM Pstate Range structure on a given stream
+///
+/// \param stream The output stream
+///
+/// \param cpmrange The CPM Pstate Range structure to print
+
+void
+cpmrange_print(FILE* stream, CpmPstateModeRanges* cpmrange)
+{
+ int i;
+
+ fprintf(stream,
+ "---------------------------------------------------------------------------------------------------------\n");
+ fprintf(stream, "CPM Pstate Range @ %p\n", cpmrange);
+ fprintf(stream,
+ "---------------------------------------------------------------------------------------------------------\n");
+
+ fprintf(stream, "Valid Number of CPM Pstate Ranges : %u\n",
+ cpmrange->validRanges);
+
+ for (i == 0; i < 8; i++) {
+ fprintf(stream, " CPM Range %d Pstate : %d\n",
+ i, cpmrange->inflectionPoint[i]);
+ }
+
+ fprintf(stream, " CPM Pmax : %d\n",
+ cpmrange->pMax);
+
+ fprintf(stream,
+ "---------------------------------------------------------------------------------------------------------\n");
+}
/// Print a Resonant Clocking Setup structure on a given stream
///
@@ -481,6 +604,5 @@ pss_print(FILE* stream, PstateSuperStructure* pss)
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
-#endif // FAPIECMD
-
+#endif // FAPIECMD
OpenPOWER on IntegriCloud