|
@@ -296,7 +296,7 @@ static struct ips_mcp_limits ips_ulv_limits = {
|
|
|
|
|
|
struct ips_driver {
|
|
|
struct pci_dev *dev;
|
|
|
- void *regmap;
|
|
|
+ void __iomem *regmap;
|
|
|
struct task_struct *monitor;
|
|
|
struct task_struct *adjust;
|
|
|
struct dentry *debug_root;
|
|
@@ -1517,62 +1517,45 @@ static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|
|
if (dmi_check_system(ips_blacklist))
|
|
|
return -ENODEV;
|
|
|
|
|
|
- ips = kzalloc(sizeof(struct ips_driver), GFP_KERNEL);
|
|
|
+ ips = devm_kzalloc(&dev->dev, sizeof(*ips), GFP_KERNEL);
|
|
|
if (!ips)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- pci_set_drvdata(dev, ips);
|
|
|
+ spin_lock_init(&ips->turbo_status_lock);
|
|
|
ips->dev = dev;
|
|
|
|
|
|
ips->limits = ips_detect_cpu(ips);
|
|
|
if (!ips->limits) {
|
|
|
dev_info(&dev->dev, "IPS not supported on this CPU\n");
|
|
|
- ret = -ENXIO;
|
|
|
- goto error_free;
|
|
|
+ return -ENXIO;
|
|
|
}
|
|
|
|
|
|
- spin_lock_init(&ips->turbo_status_lock);
|
|
|
-
|
|
|
- ret = pci_enable_device(dev);
|
|
|
+ ret = pcim_enable_device(dev);
|
|
|
if (ret) {
|
|
|
dev_err(&dev->dev, "can't enable PCI device, aborting\n");
|
|
|
- goto error_free;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
- if (!pci_resource_start(dev, 0)) {
|
|
|
- dev_err(&dev->dev, "TBAR not assigned, aborting\n");
|
|
|
- ret = -ENXIO;
|
|
|
- goto error_free;
|
|
|
- }
|
|
|
-
|
|
|
- ret = pci_request_regions(dev, "ips thermal sensor");
|
|
|
+ ret = pcim_iomap_regions(dev, 1 << 0, pci_name(dev));
|
|
|
if (ret) {
|
|
|
- dev_err(&dev->dev, "thermal resource busy, aborting\n");
|
|
|
- goto error_free;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- ips->regmap = ioremap(pci_resource_start(dev, 0),
|
|
|
- pci_resource_len(dev, 0));
|
|
|
- if (!ips->regmap) {
|
|
|
dev_err(&dev->dev, "failed to map thermal regs, aborting\n");
|
|
|
- ret = -EBUSY;
|
|
|
- goto error_release;
|
|
|
+ return ret;
|
|
|
}
|
|
|
+ ips->regmap = pcim_iomap_table(dev)[0];
|
|
|
+
|
|
|
+ pci_set_drvdata(dev, ips);
|
|
|
|
|
|
tse = thm_readb(THM_TSE);
|
|
|
if (tse != TSE_EN) {
|
|
|
dev_err(&dev->dev, "thermal device not enabled (0x%02x), aborting\n", tse);
|
|
|
- ret = -ENXIO;
|
|
|
- goto error_unmap;
|
|
|
+ return -ENXIO;
|
|
|
}
|
|
|
|
|
|
trc = thm_readw(THM_TRC);
|
|
|
trc_required_mask = TRC_CORE1_EN | TRC_CORE_PWR | TRC_MCH_EN;
|
|
|
if ((trc & trc_required_mask) != trc_required_mask) {
|
|
|
dev_err(&dev->dev, "thermal reporting for required devices not enabled, aborting\n");
|
|
|
- ret = -ENXIO;
|
|
|
- goto error_unmap;
|
|
|
+ return -ENXIO;
|
|
|
}
|
|
|
|
|
|
if (trc & TRC_CORE2_EN)
|
|
@@ -1602,8 +1585,7 @@ static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|
|
rdmsrl(PLATFORM_INFO, platform_info);
|
|
|
if (!(platform_info & PLATFORM_TDP)) {
|
|
|
dev_err(&dev->dev, "platform indicates TDP override unavailable, aborting\n");
|
|
|
- ret = -ENODEV;
|
|
|
- goto error_unmap;
|
|
|
+ return -ENODEV;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -1615,7 +1597,7 @@ static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|
|
ips);
|
|
|
if (ret) {
|
|
|
dev_err(&dev->dev, "request irq failed, aborting\n");
|
|
|
- goto error_unmap;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
/* Enable aux, hot & critical interrupts */
|
|
@@ -1673,12 +1655,6 @@ error_thread_cleanup:
|
|
|
kthread_stop(ips->adjust);
|
|
|
error_free_irq:
|
|
|
free_irq(ips->dev->irq, ips);
|
|
|
-error_unmap:
|
|
|
- iounmap(ips->regmap);
|
|
|
-error_release:
|
|
|
- pci_release_regions(dev);
|
|
|
-error_free:
|
|
|
- kfree(ips);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -1714,22 +1690,14 @@ static void ips_remove(struct pci_dev *dev)
|
|
|
kthread_stop(ips->adjust);
|
|
|
if (ips->monitor)
|
|
|
kthread_stop(ips->monitor);
|
|
|
- iounmap(ips->regmap);
|
|
|
- pci_release_regions(dev);
|
|
|
- kfree(ips);
|
|
|
dev_dbg(&dev->dev, "IPS driver removed\n");
|
|
|
}
|
|
|
|
|
|
-static void ips_shutdown(struct pci_dev *dev)
|
|
|
-{
|
|
|
-}
|
|
|
-
|
|
|
static struct pci_driver ips_pci_driver = {
|
|
|
.name = "intel ips",
|
|
|
.id_table = ips_id_table,
|
|
|
.probe = ips_probe,
|
|
|
.remove = ips_remove,
|
|
|
- .shutdown = ips_shutdown,
|
|
|
};
|
|
|
|
|
|
module_pci_driver(ips_pci_driver);
|