Lines Matching +full:8 +full:- +full:cpu
1 // SPDX-License-Identifier: GPL-2.0
3 * Intel Speed Select -- Enumerate and control features for Mailbox Interface
34 snprintf(level_str, sizeof(level_str), "level-%d", level); in mbox_get_trl_level_name()
66 if (id->cpu < 0) in mbox_is_punit_valid()
69 if (id->pkg < 0 || id->die < 0 || id->punit) in mbox_is_punit_valid()
75 static int _send_mmio_command(unsigned int cpu, unsigned int reg, int write, in _send_mmio_command() argument
84 debug_printf("mmio_cmd cpu:%d reg:%d write:%d\n", cpu, reg, write); in _send_mmio_command()
88 err(-1, "%s open failed", pathname); in _send_mmio_command()
91 io_regs.io_reg[0].logical_cpu = cpu; in _send_mmio_command()
101 if (ioctl(fd, cmd, &io_regs) == -1) { in _send_mmio_command()
107 fprintf(outf, "Error: mmio_cmd cpu:%d reg:%x read_write:%x\n", in _send_mmio_command()
108 cpu, reg, write); in _send_mmio_command()
114 "mmio_cmd response: cpu:%d reg:%x rd_write:%x resp:%x\n", in _send_mmio_command()
115 cpu, reg, write, *value); in _send_mmio_command()
123 int _send_mbox_command(unsigned int cpu, unsigned char command, in _send_mbox_command() argument
132 "mbox_send: cpu:%d command:%x sub_command:%x parameter:%x req_data:%x\n", in _send_mbox_command()
133 cpu, command, sub_command, parameter, req_data); in _send_mbox_command()
141 debug_printf("CPU %d\n", cpu); in _send_mbox_command()
152 cpu, PQR_ASSOC_OFFSET + core_id * 4, write, in _send_mbox_command()
160 cpu, PM_CLOS_OFFSET + clos_id * 4, write, in _send_mbox_command()
174 mbox_cmds.mbox_cmd[0].logical_cpu = cpu; in _send_mbox_command()
185 err(-1, "%s open failed", pathname); in _send_mbox_command()
189 if (ioctl(fd, ISST_IF_MBOX_COMMAND, &mbox_cmds) == -1) { in _send_mbox_command()
196 "Error: mbox_cmd cpu:%d command:%x sub_command:%x parameter:%x req_data:%x errorno:%d\n", in _send_mbox_command()
197 cpu, command, sub_command, parameter, req_data, errno); in _send_mbox_command()
198 --retry; in _send_mbox_command()
202 "mbox_cmd response: cpu:%d command:%x sub_command:%x parameter:%x req_data:%x resp:%x\n", in _send_mbox_command()
203 cpu, command, sub_command, parameter, req_data, *resp); in _send_mbox_command()
212 return -1; in _send_mbox_command()
224 ret = _send_mbox_command(id->cpu, READ_PM_CONFIG, PM_FEATURE, 0, 0, in mbox_read_pm_config()
229 debug_printf("cpu:%d READ_PM_CONFIG resp:%x\n", id->cpu, resp); in mbox_read_pm_config()
242 ret = _send_mbox_command(id->cpu, CONFIG_TDP, in mbox_get_config_levels()
245 pkg_dev->levels = 0; in mbox_get_config_levels()
246 pkg_dev->locked = 1; in mbox_get_config_levels()
247 pkg_dev->current_level = 0; in mbox_get_config_levels()
248 pkg_dev->version = 0; in mbox_get_config_levels()
249 pkg_dev->enabled = 0; in mbox_get_config_levels()
253 debug_printf("cpu:%d CONFIG_TDP_GET_LEVELS_INFO resp:%x\n", id->cpu, resp); in mbox_get_config_levels()
255 pkg_dev->version = resp & 0xff; in mbox_get_config_levels()
256 pkg_dev->levels = (resp >> 8) & 0xff; in mbox_get_config_levels()
257 pkg_dev->current_level = (resp >> 16) & 0xff; in mbox_get_config_levels()
258 pkg_dev->locked = !!(resp & BIT(24)); in mbox_get_config_levels()
259 pkg_dev->enabled = !!(resp & BIT(31)); in mbox_get_config_levels()
271 ret = _send_mbox_command(id->cpu, CONFIG_TDP, in mbox_get_ctdp_control()
277 ctdp_level->fact_support = resp & BIT(0); in mbox_get_ctdp_control()
278 ctdp_level->pbf_support = !!(resp & BIT(1)); in mbox_get_ctdp_control()
279 ctdp_level->fact_enabled = !!(resp & BIT(16)); in mbox_get_ctdp_control()
280 ctdp_level->pbf_enabled = !!(resp & BIT(17)); in mbox_get_ctdp_control()
284 debug_printf("cpu:%d pm_config is not supported\n", id->cpu); in mbox_get_ctdp_control()
286 debug_printf("cpu:%d pm_config SST-CP state:%d cap:%d\n", id->cpu, cp_state, cp_cap); in mbox_get_ctdp_control()
287 ctdp_level->sst_cp_support = cp_cap; in mbox_get_ctdp_control()
288 ctdp_level->sst_cp_enabled = cp_state; in mbox_get_ctdp_control()
292 …"cpu:%d CONFIG_TDP_GET_TDP_CONTROL resp:%x fact_support:%d pbf_support: %d fact_enabled:%d pbf_ena… in mbox_get_ctdp_control()
293 id->cpu, resp, ctdp_level->fact_support, ctdp_level->pbf_support, in mbox_get_ctdp_control()
294 ctdp_level->fact_enabled, ctdp_level->pbf_enabled); in mbox_get_ctdp_control()
305 ctdp_level->uncore_pm = 0; in _get_uncore_p0_p1_info()
306 ctdp_level->uncore_p0 = 0; in _get_uncore_p0_p1_info()
307 ctdp_level->uncore_p1 = 0; in _get_uncore_p0_p1_info()
309 ret = _send_mbox_command(id->cpu, CONFIG_TDP, in _get_uncore_p0_p1_info()
316 ctdp_level->uncore_p0 = resp & GENMASK(7, 0); in _get_uncore_p0_p1_info()
317 ctdp_level->uncore_p1 = (resp & GENMASK(15, 8)) >> 8; in _get_uncore_p0_p1_info()
318 ctdp_level->uncore_pm = (resp & GENMASK(31, 24)) >> 24; in _get_uncore_p0_p1_info()
321 "cpu:%d ctdp:%d CONFIG_TDP_GET_RATIO_INFO resp:%x uncore p0:%d uncore p1:%d uncore pm:%d\n", in _get_uncore_p0_p1_info()
322 id->cpu, config_index, resp, ctdp_level->uncore_p0, ctdp_level->uncore_p1, in _get_uncore_p0_p1_info()
323 ctdp_level->uncore_pm); in _get_uncore_p0_p1_info()
328 ret = _send_mbox_command(id->cpu, CONFIG_TDP, in _get_uncore_p0_p1_info()
332 ctdp_level->uncore_p0 = 0; in _get_uncore_p0_p1_info()
333 ctdp_level->uncore_p1 = 0; in _get_uncore_p0_p1_info()
337 ctdp_level->uncore_p0 = resp & GENMASK(7, 0); in _get_uncore_p0_p1_info()
338 ctdp_level->uncore_p1 = (resp & GENMASK(15, 8)) >> 8; in _get_uncore_p0_p1_info()
340 "cpu:%d ctdp:%d CONFIG_TDP_GET_UNCORE_P0_P1_INFO resp:%x uncore p0:%d uncore p1:%d\n", in _get_uncore_p0_p1_info()
341 id->cpu, config_index, resp, ctdp_level->uncore_p0, in _get_uncore_p0_p1_info()
342 ctdp_level->uncore_p1); in _get_uncore_p0_p1_info()
352 …"/sys/devices/system/cpu/intel_uncore_frequency/package_%02d_die_%02d/max_freq_khz", id->pkg, id->… in _set_uncore_min_max()
355 …"/sys/devices/system/cpu/intel_uncore_frequency/package_%02d_die_%02d/min_freq_khz", id->pkg, id->… in _set_uncore_min_max()
364 if (ret == -1) { in _set_uncore_min_max()
377 if (ctdp_level->uncore_pm) in mbox_adjust_uncore_freq()
378 _set_uncore_min_max(id, 0, ctdp_level->uncore_pm * 100000); in mbox_adjust_uncore_freq()
380 if (ctdp_level->uncore_p0) in mbox_adjust_uncore_freq()
381 _set_uncore_min_max(id, 1, ctdp_level->uncore_p0 * 100000); in mbox_adjust_uncore_freq()
389 ret = _send_mbox_command(id->cpu, CONFIG_TDP, CONFIG_TDP_GET_P1_INFO, 0, in _get_p1_info()
392 ctdp_level->sse_p1 = 0; in _get_p1_info()
393 ctdp_level->avx2_p1 = 0; in _get_p1_info()
394 ctdp_level->avx512_p1 = 0; in _get_p1_info()
398 ctdp_level->sse_p1 = resp & GENMASK(7, 0); in _get_p1_info()
399 ctdp_level->avx2_p1 = (resp & GENMASK(15, 8)) >> 8; in _get_p1_info()
400 ctdp_level->avx512_p1 = (resp & GENMASK(23, 16)) >> 16; in _get_p1_info()
401 ctdp_level->amx_p1 = (resp & GENMASK(31, 24)) >> 24; in _get_p1_info()
403 "cpu:%d ctdp:%d CONFIG_TDP_GET_P1_INFO resp:%x sse_p1:%d avx2_p1:%d avx512_p1:%d amx_p1:%d\n", in _get_p1_info()
404 id->cpu, config_index, resp, ctdp_level->sse_p1, in _get_p1_info()
405 ctdp_level->avx2_p1, ctdp_level->avx512_p1, ctdp_level->amx_p1); in _get_p1_info()
414 ret = _send_mbox_command(id->cpu, CONFIG_TDP, CONFIG_TDP_GET_MEM_FREQ, in _get_uncore_mem_freq()
417 ctdp_level->mem_freq = 0; in _get_uncore_mem_freq()
421 ctdp_level->mem_freq = resp & GENMASK(7, 0); in _get_uncore_mem_freq()
423 ctdp_level->mem_freq *= 200; in _get_uncore_mem_freq()
425 if (ctdp_level->mem_freq < 7) { in _get_uncore_mem_freq()
426 ctdp_level->mem_freq = (12 - ctdp_level->mem_freq) * 133.33 * 2 * 10; in _get_uncore_mem_freq()
427 ctdp_level->mem_freq /= 10; in _get_uncore_mem_freq()
428 if (ctdp_level->mem_freq % 10 > 5) in _get_uncore_mem_freq()
429 ctdp_level->mem_freq++; in _get_uncore_mem_freq()
431 ctdp_level->mem_freq = 0; in _get_uncore_mem_freq()
434 ctdp_level->mem_freq = 0; in _get_uncore_mem_freq()
437 "cpu:%d ctdp:%d CONFIG_TDP_GET_MEM_FREQ resp:%x uncore mem_freq:%d\n", in _get_uncore_mem_freq()
438 id->cpu, config_index, resp, ctdp_level->mem_freq); in _get_uncore_mem_freq()
447 ret = _send_mbox_command(id->cpu, CONFIG_TDP, CONFIG_TDP_GET_TDP_INFO, in mbox_get_tdp_info()
454 ctdp_level->pkg_tdp = resp & GENMASK(14, 0); in mbox_get_tdp_info()
455 ctdp_level->tdp_ratio = (resp & GENMASK(23, 16)) >> 16; in mbox_get_tdp_info()
458 "cpu:%d ctdp:%d CONFIG_TDP_GET_TDP_INFO resp:%x tdp_ratio:%d pkg_tdp:%d\n", in mbox_get_tdp_info()
459 id->cpu, config_index, resp, ctdp_level->tdp_ratio, in mbox_get_tdp_info()
460 ctdp_level->pkg_tdp); in mbox_get_tdp_info()
462 ret = _send_mbox_command(id->cpu, CONFIG_TDP, CONFIG_TDP_GET_TJMAX_INFO, in mbox_get_tdp_info()
467 ctdp_level->t_proc_hot = resp & GENMASK(7, 0); in mbox_get_tdp_info()
474 "cpu:%d ctdp:%d CONFIG_TDP_GET_TJMAX_INFO resp:%x t_proc_hot:%d\n", in mbox_get_tdp_info()
475 id->cpu, config_index, resp, ctdp_level->t_proc_hot); in mbox_get_tdp_info()
486 ret = _send_mbox_command(id->cpu, CONFIG_TDP, CONFIG_TDP_GET_PWR_INFO, in mbox_get_pwr_info()
491 ctdp_level->pkg_max_power = resp & GENMASK(14, 0); in mbox_get_pwr_info()
492 ctdp_level->pkg_min_power = (resp & GENMASK(30, 16)) >> 16; in mbox_get_pwr_info()
495 "cpu:%d ctdp:%d CONFIG_TDP_GET_PWR_INFO resp:%x pkg_max_power:%d pkg_min_power:%d\n", in mbox_get_pwr_info()
496 id->cpu, config_index, resp, ctdp_level->pkg_max_power, in mbox_get_pwr_info()
497 ctdp_level->pkg_min_power); in mbox_get_pwr_info()
508 ctdp_level->cpu_count = 0; in mbox_get_coremask_info()
513 ret = _send_mbox_command(id->cpu, CONFIG_TDP, in mbox_get_coremask_info()
515 (i << 8) | config_index, &resp); in mbox_get_coremask_info()
520 "cpu:%d ctdp:%d mask:%d CONFIG_TDP_GET_CORE_MASK resp:%x\n", in mbox_get_coremask_info()
521 id->cpu, config_index, i, resp); in mbox_get_coremask_info()
525 ctdp_level->core_cpumask_size, in mbox_get_coremask_info()
526 ctdp_level->core_cpumask, in mbox_get_coremask_info()
528 ctdp_level->cpu_count += cpu_count; in mbox_get_coremask_info()
529 debug_printf("cpu:%d ctdp:%d mask:%d cpu count:%d\n", id->cpu, in mbox_get_coremask_info()
530 config_index, i, ctdp_level->cpu_count); in mbox_get_coremask_info()
542 ret = _send_mbox_command(id->cpu, CONFIG_TDP, in mbox_get_get_trl()
549 "cpu:%d CONFIG_TDP_GET_TURBO_LIMIT_RATIOS req:%x resp:%x\n", in mbox_get_get_trl()
550 id->cpu, req, resp); in mbox_get_get_trl()
553 trl[1] = (resp & GENMASK(15, 8)) >> 8; in mbox_get_get_trl()
557 req = level | BIT(8) | (avx_level << 16); in mbox_get_get_trl()
558 ret = _send_mbox_command(id->cpu, CONFIG_TDP, in mbox_get_get_trl()
564 debug_printf("cpu:%d CONFIG_TDP_GET_TURBO_LIMIT req:%x resp:%x\n", id->cpu, in mbox_get_get_trl()
568 trl[5] = (resp & GENMASK(15, 8)) >> 8; in mbox_get_get_trl()
581 ret = mbox_get_get_trl(id, level, i, ctdp_level->trl_ratios[i]); in mbox_get_get_trls()
592 debug_printf("cpu:%d bucket info via MSR\n", id->cpu); in mbox_get_trl_bucket_info()
596 ret = isst_send_msr_command(id->cpu, 0x1ae, 0, buckets_info); in mbox_get_trl_bucket_info()
600 debug_printf("cpu:%d bucket info via MSR successful 0x%llx\n", id->cpu, in mbox_get_trl_bucket_info()
614 return -1; in mbox_set_tdp_level()
618 ret = _send_mbox_command(id->cpu, CONFIG_TDP, CONFIG_TDP_SET_LEVEL, 0, in mbox_set_tdp_level()
641 ret = _send_mbox_command(id->cpu, CONFIG_TDP, in mbox_get_pbf_info()
643 0, (i << 8) | level, &resp); in mbox_get_pbf_info()
648 "cpu:%d CONFIG_TDP_PBF_GET_CORE_MASK_INFO resp:%x\n", in mbox_get_pbf_info()
649 id->cpu, resp); in mbox_get_pbf_info()
653 pbf_info->core_cpumask_size, in mbox_get_pbf_info()
654 pbf_info->core_cpumask, in mbox_get_pbf_info()
659 ret = _send_mbox_command(id->cpu, CONFIG_TDP, in mbox_get_pbf_info()
665 debug_printf("cpu:%d CONFIG_TDP_PBF_GET_P1HI_P1LO_INFO resp:%x\n", id->cpu, in mbox_get_pbf_info()
668 pbf_info->p1_low = resp & 0xff; in mbox_get_pbf_info()
669 pbf_info->p1_high = (resp & GENMASK(15, 8)) >> 8; in mbox_get_pbf_info()
673 id->cpu, CONFIG_TDP, CONFIG_TDP_PBF_GET_TDP_INFO, 0, req, &resp); in mbox_get_pbf_info()
677 debug_printf("cpu:%d CONFIG_TDP_PBF_GET_TDP_INFO resp:%x\n", id->cpu, resp); in mbox_get_pbf_info()
679 pbf_info->tdp = resp & 0xffff; in mbox_get_pbf_info()
683 id->cpu, CONFIG_TDP, CONFIG_TDP_PBF_GET_TJ_MAX_INFO, 0, req, &resp); in mbox_get_pbf_info()
687 debug_printf("cpu:%d CONFIG_TDP_PBF_GET_TJ_MAX_INFO resp:%x\n", id->cpu, in mbox_get_pbf_info()
689 pbf_info->t_control = (resp >> 8) & 0xff; in mbox_get_pbf_info()
690 pbf_info->t_prochot = resp & 0xff; in mbox_get_pbf_info()
705 debug_printf("cpu:%d No support for dynamic ISST\n", id->cpu); in mbox_set_pbf_fact_status()
724 isst_display_error_info_message(0, "Make sure to execute before: core-power enable", 0, 0); in mbox_set_pbf_fact_status()
735 ret = _send_mbox_command(id->cpu, CONFIG_TDP, in mbox_set_pbf_fact_status()
740 debug_printf("cpu:%d CONFIG_TDP_SET_TDP_CONTROL pbf/fact:%d req:%x\n", in mbox_set_pbf_fact_status()
741 id->cpu, pbf, req); in mbox_set_pbf_fact_status()
756 id->cpu, CONFIG_TDP, in _get_fact_bucket_info()
758 (i << 8) | level, &resp); in _get_fact_bucket_info()
763 "cpu:%d CONFIG_TDP_GET_FACT_HP_TURBO_LIMIT_NUMCORES index:%d level:%d resp:%x\n", in _get_fact_bucket_info()
764 id->cpu, i, level, resp); in _get_fact_bucket_info()
768 (resp >> (j * 8)) & 0xff; in _get_fact_bucket_info()
777 id->cpu, CONFIG_TDP, in _get_fact_bucket_info()
779 (k << 16) | (i << 8) | level, &resp); in _get_fact_bucket_info()
784 "cpu:%d CONFIG_TDP_GET_FACT_HP_TURBO_LIMIT_RATIOS index:%d level:%d avx:%d resp:%x\n", in _get_fact_bucket_info()
785 id->cpu, i, level, k, resp); in _get_fact_bucket_info()
789 (resp >> (j * 8)) & 0xff; in _get_fact_bucket_info()
802 ret = _send_mbox_command(id->cpu, CONFIG_TDP, in mbox_get_fact_info()
808 debug_printf("cpu:%d CONFIG_TDP_GET_FACT_LP_CLIPPING_RATIO resp:%x\n", in mbox_get_fact_info()
809 id->cpu, resp); in mbox_get_fact_info()
811 fact_info->lp_ratios[0] = resp & 0xff; in mbox_get_fact_info()
812 fact_info->lp_ratios[1] = (resp >> 8) & 0xff; in mbox_get_fact_info()
813 fact_info->lp_ratios[2] = (resp >> 16) & 0xff; in mbox_get_fact_info()
815 ret = _get_fact_bucket_info(id, level, fact_info->bucket_info); in mbox_get_fact_info()
824 if (!fact_info->bucket_info[j].hp_cores) in mbox_get_fact_info()
831 return -1; in mbox_get_fact_info()
842 ret = _send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PM_QOS_CONFIG, 0, 0, in mbox_get_clos_information()
847 debug_printf("cpu:%d CLOS_PM_QOS_CONFIG resp:%x\n", id->cpu, resp); in mbox_get_clos_information()
872 ret = _send_mbox_command(id->cpu, WRITE_PM_CONFIG, PM_FEATURE, 0, req, in _write_pm_config()
877 debug_printf("cpu:%d WRITE_PM_CONFIG resp:%x\n", id->cpu, resp); in _write_pm_config()
903 … isst_display_error_info_message(1, "Ignoring request, turbo-freq feature is still enabled", 0, 0); in mbox_pm_qos_config()
904 return -EINVAL; in mbox_pm_qos_config()
915 ret = _send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PM_QOS_CONFIG, 0, 0, in mbox_pm_qos_config()
922 debug_printf("cpu:%d CLOS_PM_QOS_CONFIG resp:%x\n", id->cpu, resp); in mbox_pm_qos_config()
939 ret = _send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PM_QOS_CONFIG, in mbox_pm_qos_config()
944 debug_printf("cpu:%d CLOS_PM_QOS_CONFIG priority type:%d req:%x\n", id->cpu, in mbox_pm_qos_config()
955 ret = _send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PM_CLOS, clos, 0, in mbox_pm_get_clos()
960 clos_config->epp = resp & 0x0f; in mbox_pm_get_clos()
961 clos_config->clos_prop_prio = (resp >> 4) & 0x0f; in mbox_pm_get_clos()
962 clos_config->clos_min = (resp >> 8) & 0xff; in mbox_pm_get_clos()
963 clos_config->clos_max = (resp >> 16) & 0xff; in mbox_pm_get_clos()
964 clos_config->clos_desired = (resp >> 24) & 0xff; in mbox_pm_get_clos()
975 req = clos_config->epp & 0x0f; in mbox_set_clos()
976 req |= (clos_config->clos_prop_prio & 0x0f) << 4; in mbox_set_clos()
977 req |= (clos_config->clos_min & 0xff) << 8; in mbox_set_clos()
978 req |= (clos_config->clos_max & 0xff) << 16; in mbox_set_clos()
979 req |= (clos_config->clos_desired & 0xff) << 24; in mbox_set_clos()
983 ret = _send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PM_CLOS, param, req, in mbox_set_clos()
988 debug_printf("cpu:%d CLOS_PM_CLOS param:%x req:%x\n", id->cpu, param, req); in mbox_set_clos()
999 core_id = find_phy_core_num(id->cpu); in mbox_clos_get_assoc_status()
1002 ret = _send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PQR_ASSOC, param, 0, in mbox_clos_get_assoc_status()
1007 debug_printf("cpu:%d CLOS_PQR_ASSOC param:%x resp:%x\n", id->cpu, param, in mbox_clos_get_assoc_status()
1021 core_id = find_phy_core_num(id->cpu); in mbox_clos_associate()
1024 ret = _send_mbox_command(id->cpu, CONFIG_CLOS, CLOS_PQR_ASSOC, param, in mbox_clos_associate()
1029 debug_printf("cpu:%d CLOS_PQR_ASSOC param:%x req:%x\n", id->cpu, param, in mbox_clos_associate()