Skip to content

Commit

Permalink
platform/x86/intel/pmc: Allow pmc_core_ssram_init to fail
Browse files Browse the repository at this point in the history
Currently, if the PMC SSRAM initialization fails, no error is returned and
the only indication is that a PMC device has not been created.  Instead,
allow an error to be returned and handled directly by the caller.

Signed-off-by: David E. Box <[email protected]>
Reviewed-by: Ilpo Järvinen <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Hans de Goede <[email protected]>
  • Loading branch information
debox1 authored and jwrdegoede committed Dec 4, 2023
1 parent 2e35e3a commit 9512920
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 9 deletions.
2 changes: 1 addition & 1 deletion drivers/platform/x86/intel/pmc/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ int pmc_core_resume_common(struct pmc_dev *pmcdev);
int get_primary_reg_base(struct pmc *pmc);
extern void pmc_core_get_low_power_modes(struct pmc_dev *pmcdev);

extern void pmc_core_ssram_init(struct pmc_dev *pmcdev);
extern int pmc_core_ssram_init(struct pmc_dev *pmcdev);

int spt_core_init(struct pmc_dev *pmcdev);
int cnp_core_init(struct pmc_dev *pmcdev);
Expand Down
21 changes: 13 additions & 8 deletions drivers/platform/x86/intel/pmc/core_ssram.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,20 @@ static inline u64 get_base(void __iomem *addr, u32 offset)
return lo_hi_readq(addr + offset) & GENMASK_ULL(63, 3);
}

static void
static int
pmc_core_pmc_add(struct pmc_dev *pmcdev, u64 pwrm_base,
const struct pmc_reg_map *reg_map, int pmc_index)
{
struct pmc *pmc = pmcdev->pmcs[pmc_index];

if (!pwrm_base)
return;
return -ENODEV;

/* Memory for primary PMC has been allocated in core.c */
if (!pmc) {
pmc = devm_kzalloc(&pmcdev->pdev->dev, sizeof(*pmc), GFP_KERNEL);
if (!pmc)
return;
return -ENOMEM;
}

pmc->map = reg_map;
Expand All @@ -57,10 +57,12 @@ pmc_core_pmc_add(struct pmc_dev *pmcdev, u64 pwrm_base,

if (!pmc->regbase) {
devm_kfree(&pmcdev->pdev->dev, pmc);
return;
return -ENOMEM;
}

pmcdev->pmcs[pmc_index] = pmc;

return 0;
}

static void
Expand Down Expand Up @@ -96,7 +98,7 @@ pmc_core_ssram_get_pmc(struct pmc_dev *pmcdev, void __iomem *ssram, u32 offset,
iounmap(ssram);
}

void pmc_core_ssram_init(struct pmc_dev *pmcdev)
int pmc_core_ssram_init(struct pmc_dev *pmcdev)
{
void __iomem *ssram;
struct pci_dev *pcidev;
Expand All @@ -105,7 +107,7 @@ void pmc_core_ssram_init(struct pmc_dev *pmcdev)

pcidev = pci_get_domain_bus_and_slot(0, 0, PCI_DEVFN(20, 2));
if (!pcidev)
goto out;
return -ENODEV;

ret = pcim_enable_device(pcidev);
if (ret)
Expand All @@ -123,11 +125,14 @@ void pmc_core_ssram_init(struct pmc_dev *pmcdev)
pmc_core_ssram_get_pmc(pmcdev, ssram, SSRAM_PCH_OFFSET, PMC_IDX_PCH);

iounmap(ssram);
out:
return;

return 0;

disable_dev:
pmcdev->ssram_pcidev = NULL;
pci_disable_device(pcidev);
release_dev:
pci_dev_put(pcidev);

return ret;
}

0 comments on commit 9512920

Please sign in to comment.