x86: Use the IRQ device when setting up the mptable

Instead of searching for the device tree node, use the IRQ device which has
a record of it.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
master
Simon Glass 9 years ago committed by Bin Meng
parent d3b884b294
commit b565d66d2c
  1. 16
      arch/x86/cpu/irq.c
  2. 14
      arch/x86/lib/mpspec.c

@ -88,7 +88,7 @@ __weak void cpu_irq_init(void)
return;
}
static int create_pirq_routing_table(void)
static int create_pirq_routing_table(struct udevice *dev)
{
const void *blob = gd->fdt_blob;
struct fdt_pci_addr addr;
@ -102,16 +102,8 @@ static int create_pirq_routing_table(void)
int i;
int ret;
node = fdtdec_next_compatible(blob, 0, COMPAT_INTEL_IRQ_ROUTER);
if (node < 0) {
debug("%s: Cannot find irq router node\n", __func__);
return -EINVAL;
}
/* TODO(sjg@chromium.org): Drop this when PIRQ is a driver */
parent = fdt_parent_offset(blob, node);
if (parent < 0)
return -EINVAL;
node = dev->of_offset;
parent = dev->parent->of_offset;
ret = fdtdec_get_pci_addr(blob, parent, FDT_PCI_SPACE_CONFIG,
"reg", &addr);
if (ret)
@ -237,7 +229,7 @@ int irq_router_common_init(struct udevice *dev)
cpu_irq_init();
ret = create_pirq_routing_table();
ret = create_pirq_routing_table(dev);
if (ret) {
debug("Failed to create pirq routing table\n");
return ret;

@ -292,19 +292,19 @@ static int mptable_add_intsrc(struct mp_config_table *mc,
struct mpc_config_intsrc *intsrc_base;
int intsrc_entries = 0;
const void *blob = gd->fdt_blob;
int node;
struct udevice *dev;
int len, count;
const u32 *cell;
int i;
int i, ret;
/* Get I/O interrupt information from device tree */
node = fdtdec_next_compatible(blob, 0, COMPAT_INTEL_IRQ_ROUTER);
if (node < 0) {
ret = uclass_first_device(UCLASS_IRQ, &dev);
if (ret && ret != -ENODEV) {
debug("%s: Cannot find irq router node\n", __func__);
return -ENOENT;
return ret;
}
cell = fdt_getprop(blob, node, "intel,pirq-routing", &len);
/* Get I/O interrupt information from device tree */
cell = fdt_getprop(blob, dev->of_offset, "intel,pirq-routing", &len);
if (!cell)
return -ENOENT;

Loading…
Cancel
Save