|
@@ -26,28 +26,18 @@ static struct platform_device wdt_dev = {
|
|
|
|
|
|
static int tangier_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
- int ioapic;
|
|
|
- int irq;
|
|
|
+ int gsi;
|
|
|
struct intel_mid_wdt_pdata *pdata = pdev->dev.platform_data;
|
|
|
- struct io_apic_irq_attr irq_attr = { 0 };
|
|
|
|
|
|
if (!pdata)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- irq = pdata->irq;
|
|
|
- ioapic = mp_find_ioapic(irq);
|
|
|
- if (ioapic >= 0) {
|
|
|
- int ret;
|
|
|
- irq_attr.ioapic = ioapic;
|
|
|
- irq_attr.ioapic_pin = irq;
|
|
|
- irq_attr.trigger = 1;
|
|
|
- /* irq_attr.polarity = 0; -> Active high */
|
|
|
- ret = io_apic_set_pci_routing(NULL, irq, &irq_attr);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
- } else {
|
|
|
+ /* IOAPIC builds identity mapping between GSI and IRQ on MID */
|
|
|
+ gsi = pdata->irq;
|
|
|
+ if (mp_set_gsi_attr(gsi, 1, 0, cpu_to_node(0)) ||
|
|
|
+ mp_map_gsi_to_irq(gsi, IOAPIC_MAP_ALLOC) <= 0) {
|
|
|
dev_warn(&pdev->dev, "cannot find interrupt %d in ioapic\n",
|
|
|
- irq);
|
|
|
+ gsi);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|