Skip to content

Commit 6dc93d6

Browse files
committed
tools/power/x86/intel-speed-select: Check feature status
After change of enable/disable status of SST-CP, SST-TF and SST-BF check if the hardware status change was successful. If not successful even after retries, return failure. Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
1 parent c36f9d7 commit 6dc93d6

1 file changed

Lines changed: 43 additions & 2 deletions

File tree

tools/power/x86/intel-speed-select/isst-core-tpmi.c

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -452,13 +452,16 @@ static int tpmi_get_pbf_info(struct isst_id *id, int level,
452452
return _pbf_get_coremask_info(id, level, pbf_info);
453453
}
454454

455+
#define FEATURE_ENABLE_WAIT_US 1000
456+
#define FEATURE_ENABLE_RETRIES 5
457+
455458
static int tpmi_set_pbf_fact_status(struct isst_id *id, int pbf, int enable)
456459
{
457460
struct isst_pkg_ctdp pkg_dev;
458461
struct isst_pkg_ctdp_level_info ctdp_level;
459462
int current_level;
460463
struct isst_perf_feature_control info;
461-
int ret;
464+
int ret, i;
462465

463466
ret = isst_get_ctdp_levels(id, &pkg_dev);
464467
if (ret)
@@ -503,6 +506,30 @@ static int tpmi_set_pbf_fact_status(struct isst_id *id, int pbf, int enable)
503506
if (ret == -1)
504507
return ret;
505508

509+
for (i = 0; i < FEATURE_ENABLE_RETRIES; ++i) {
510+
511+
usleep(FEATURE_ENABLE_WAIT_US);
512+
513+
/* Check status */
514+
ret = isst_get_ctdp_control(id, current_level, &ctdp_level);
515+
if (ret)
516+
return ret;
517+
518+
debug_printf("pbf_enabled:%d fact_enabled:%d\n",
519+
ctdp_level.pbf_enabled, ctdp_level.fact_enabled);
520+
521+
if (pbf) {
522+
if (ctdp_level.pbf_enabled == enable)
523+
break;
524+
} else {
525+
if (ctdp_level.fact_enabled == enable)
526+
break;
527+
}
528+
}
529+
530+
if (i == FEATURE_ENABLE_RETRIES)
531+
return -1;
532+
506533
return 0;
507534
}
508535

@@ -659,7 +686,8 @@ static int tpmi_pm_qos_config(struct isst_id *id, int enable_clos,
659686
int priority_type)
660687
{
661688
struct isst_core_power info;
662-
int i, ret, saved_punit;
689+
int cp_state = 0, cp_cap = 0;
690+
int i, j, ret, saved_punit;
663691

664692
info.get_set = 1;
665693
info.socket_id = id->pkg;
@@ -679,6 +707,19 @@ static int tpmi_pm_qos_config(struct isst_id *id, int enable_clos,
679707
id->punit = saved_punit;
680708
return ret;
681709
}
710+
/* Get status */
711+
for (j = 0; j < FEATURE_ENABLE_RETRIES; ++j) {
712+
usleep(FEATURE_ENABLE_WAIT_US);
713+
ret = tpmi_read_pm_config(id, &cp_state, &cp_cap);
714+
debug_printf("ret:%d cp_state:%d enable_clos:%d\n", ret,
715+
cp_state, enable_clos);
716+
if (ret || cp_state == enable_clos)
717+
break;
718+
}
719+
if (j == FEATURE_ENABLE_RETRIES) {
720+
id->punit = saved_punit;
721+
return -1;
722+
}
682723
}
683724
}
684725

0 commit comments

Comments
 (0)