Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

platform/x86:intel/pmc: Move telemetry endpoint register handling

Move telemetry endpoint handling to pmc_core_get_telem_info(). This
is a preparation patch to introduce a new table to obtain Low Power
Mode substate requirement data for platforms starting from Panther
Lake.

Signed-off-by: Xi Pardee <xi.pardee@linux.intel.com>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://patch.msgid.link/20250910210629.11198-3-xi.pardee@linux.intel.com
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>

authored by

Xi Pardee and committed by
Ilpo Järvinen
1e508af6 feae929d

+25 -26
+25 -26
drivers/platform/x86/intel/pmc/core.c
··· 1399 1399 * +----+---------------------------------------------------------+ 1400 1400 * 1401 1401 */ 1402 - static int pmc_core_get_lpm_req(struct pmc_dev *pmcdev, struct pmc *pmc, struct pci_dev *pcidev) 1402 + static int pmc_core_pmt_get_lpm_req(struct pmc_dev *pmcdev, struct pmc *pmc, 1403 + struct telem_endpoint *ep) 1403 1404 { 1404 - struct telem_endpoint *ep; 1405 1405 const u8 *lpm_indices; 1406 1406 int num_maps, mode_offset = 0; 1407 1407 int ret, mode; 1408 1408 int lpm_size; 1409 - u32 guid; 1410 1409 1411 1410 lpm_indices = pmc->map->lpm_reg_index; 1412 1411 num_maps = pmc->map->lpm_num_maps; 1413 1412 lpm_size = LPM_MAX_NUM_MODES * num_maps; 1414 1413 1415 - guid = pmc_core_find_guid(pmcdev->regmap_list, pmc->map); 1416 - if (!guid) 1417 - return -ENXIO; 1418 - 1419 - ep = pmt_telem_find_and_register_endpoint(pcidev, guid, 0); 1420 - if (IS_ERR(ep)) { 1421 - dev_dbg(&pmcdev->pdev->dev, "couldn't get telem endpoint %pe", ep); 1422 - return -EPROBE_DEFER; 1423 - } 1424 - 1425 1414 pmc->lpm_req_regs = devm_kzalloc(&pmcdev->pdev->dev, 1426 1415 lpm_size * sizeof(u32), 1427 1416 GFP_KERNEL); 1428 - if (!pmc->lpm_req_regs) { 1429 - ret = -ENOMEM; 1430 - goto unregister_ep; 1431 - } 1417 + if (!pmc->lpm_req_regs) 1418 + return -ENOMEM; 1432 1419 1433 1420 mode_offset = LPM_HEADER_OFFSET + LPM_MODE_OFFSET; 1434 1421 pmc_for_each_mode(mode, pmcdev) { ··· 1429 1442 if (ret) { 1430 1443 dev_err(&pmcdev->pdev->dev, 1431 1444 "couldn't read Low Power Mode requirements: %d\n", ret); 1432 - goto unregister_ep; 1445 + return ret; 1433 1446 } 1434 1447 ++req_offset; 1435 1448 } 1436 1449 mode_offset += LPM_REG_COUNT + LPM_MODE_OFFSET; 1437 1450 } 1438 - 1439 - unregister_ep: 1440 - pmt_telem_unregister_endpoint(ep); 1441 - 1442 1451 return ret; 1443 1452 } 1444 1453 1445 - static int pmc_core_ssram_get_lpm_reqs(struct pmc_dev *pmcdev, int func) 1454 + static int pmc_core_get_telem_info(struct pmc_dev *pmcdev, int func) 1446 1455 { 1447 1456 struct pci_dev *pcidev __free(pci_dev_put) = NULL; 1457 + struct telem_endpoint *ep; 1448 1458 unsigned int i; 1459 + u32 guid; 1449 1460 int ret; 1450 1461 1451 1462 pcidev = pci_get_domain_bus_and_slot(0, 0, PCI_DEVFN(20, func)); ··· 1451 1466 return -ENODEV; 1452 1467 1453 1468 for (i = 0; i < ARRAY_SIZE(pmcdev->pmcs); ++i) { 1454 - if (!pmcdev->pmcs[i]) 1469 + struct pmc *pmc; 1470 + 1471 + pmc = pmcdev->pmcs[i]; 1472 + if (!pmc) 1455 1473 continue; 1456 1474 1457 - ret = pmc_core_get_lpm_req(pmcdev, pmcdev->pmcs[i], pcidev); 1475 + guid = pmc_core_find_guid(pmcdev->regmap_list, pmc->map); 1476 + if (!guid) 1477 + return -ENXIO; 1478 + 1479 + ep = pmt_telem_find_and_register_endpoint(pcidev, guid, 0); 1480 + if (IS_ERR(ep)) { 1481 + dev_dbg(&pmcdev->pdev->dev, "couldn't get telem endpoint %pe", ep); 1482 + return -EPROBE_DEFER; 1483 + } 1484 + 1485 + ret = pmc_core_pmt_get_lpm_req(pmcdev, pmc, ep); 1486 + pmt_telem_unregister_endpoint(ep); 1458 1487 if (ret) 1459 1488 return ret; 1460 1489 } ··· 1582 1583 pmc_core_punit_pmt_init(pmcdev, pmc_dev_info->dmu_guid); 1583 1584 1584 1585 if (ssram) { 1585 - ret = pmc_core_ssram_get_lpm_reqs(pmcdev, pmc_dev_info->pci_func); 1586 + ret = pmc_core_get_telem_info(pmcdev, pmc_dev_info->pci_func); 1586 1587 if (ret) 1587 1588 goto unmap_regbase; 1588 1589 }