Lines Matching full:pmc
3 * Driver for the Intel Broxton PMC
10 * The PMC (Power Management Controller) running on the ARC processor
13 * turn sends messages between the IA and the PMC.
51 * BIOS does not create an ACPI device for each PMC function, but
73 * intel_pmc_gcr_read64() - Read a 64-bit PMC GCR register
74 * @pmc: PMC device pointer
78 * Reads the 64-bit PMC GCR register at given offset.
82 int intel_pmc_gcr_read64(struct intel_pmc_dev *pmc, u32 offset, u64 *data) in intel_pmc_gcr_read64() argument
87 spin_lock(&pmc->gcr_lock); in intel_pmc_gcr_read64()
88 *data = readq(pmc->gcr_mem_base + offset); in intel_pmc_gcr_read64()
89 spin_unlock(&pmc->gcr_lock); in intel_pmc_gcr_read64()
96 * intel_pmc_gcr_update() - Update PMC GCR register bits
97 * @pmc: PMC device pointer
107 int intel_pmc_gcr_update(struct intel_pmc_dev *pmc, u32 offset, u32 mask, u32 val) in intel_pmc_gcr_update() argument
114 spin_lock(&pmc->gcr_lock); in intel_pmc_gcr_update()
115 new_val = readl(pmc->gcr_mem_base + offset); in intel_pmc_gcr_update()
118 writel(new_val, pmc->gcr_mem_base + offset); in intel_pmc_gcr_update()
120 new_val = readl(pmc->gcr_mem_base + offset); in intel_pmc_gcr_update()
121 spin_unlock(&pmc->gcr_lock); in intel_pmc_gcr_update()
130 * @pmc: PMC device pointer
138 int intel_pmc_s0ix_counter_read(struct intel_pmc_dev *pmc, u64 *data) in intel_pmc_s0ix_counter_read() argument
142 spin_lock(&pmc->gcr_lock); in intel_pmc_s0ix_counter_read()
143 deep = readq(pmc->gcr_mem_base + PMC_GCR_TELEM_DEEP_S0IX_REG); in intel_pmc_s0ix_counter_read()
144 shlw = readq(pmc->gcr_mem_base + PMC_GCR_TELEM_SHLW_S0IX_REG); in intel_pmc_s0ix_counter_read()
145 spin_unlock(&pmc->gcr_lock); in intel_pmc_s0ix_counter_read()
160 * values hold command and subcommand that is send to PMC.
168 struct intel_pmc_dev *pmc = dev_get_drvdata(dev); in simplecmd_store() local
169 struct intel_scu_ipc_dev *scu = pmc->scu; in simplecmd_store()
204 struct intel_pmc_dev *pmc = dev_get_drvdata(dev); in northpeak_store() local
205 struct intel_scu_ipc_dev *scu = pmc->scu; in northpeak_store()
303 struct intel_pmc_dev *pmc, in intel_pmc_get_resources() argument
330 pmc->gcr_mem_base = devm_ioremap_resource(&pdev->dev, &gcr_res); in intel_pmc_get_resources()
331 if (IS_ERR(pmc->gcr_mem_base)) in intel_pmc_get_resources()
332 return PTR_ERR(pmc->gcr_mem_base); in intel_pmc_get_resources()
387 pmc->telem_base = res; in intel_pmc_get_resources()
392 static int intel_pmc_create_devices(struct intel_pmc_dev *pmc) in intel_pmc_create_devices() argument
397 ret = devm_mfd_add_devices(pmc->dev, PLATFORM_DEVID_AUTO, &tco, in intel_pmc_create_devices()
403 ret = devm_mfd_add_devices(pmc->dev, PLATFORM_DEVID_AUTO, &punit, 1, in intel_pmc_create_devices()
408 if (pmc->telem_base) { in intel_pmc_create_devices()
409 ret = devm_mfd_add_devices(pmc->dev, PLATFORM_DEVID_AUTO, in intel_pmc_create_devices()
410 &telem, 1, pmc->telem_base, 0, NULL); in intel_pmc_create_devices()
425 struct intel_pmc_dev *pmc; in intel_pmc_probe() local
428 pmc = devm_kzalloc(&pdev->dev, sizeof(*pmc), GFP_KERNEL); in intel_pmc_probe()
429 if (!pmc) in intel_pmc_probe()
432 pmc->dev = &pdev->dev; in intel_pmc_probe()
433 spin_lock_init(&pmc->gcr_lock); in intel_pmc_probe()
435 ret = intel_pmc_get_resources(pdev, pmc, &scu_data); in intel_pmc_probe()
441 pmc->scu = devm_intel_scu_ipc_register(&pdev->dev, &scu_data); in intel_pmc_probe()
442 if (IS_ERR(pmc->scu)) in intel_pmc_probe()
443 return PTR_ERR(pmc->scu); in intel_pmc_probe()
445 platform_set_drvdata(pdev, pmc); in intel_pmc_probe()
447 ret = intel_pmc_create_devices(pmc); in intel_pmc_probe()
449 dev_err(&pdev->dev, "Failed to create PMC devices\n"); in intel_pmc_probe()
466 MODULE_DESCRIPTION("Intel Broxton PMC driver");