diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/kernel/prom_parse.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/prom_parse.c b/arch/powerpc/kernel/prom_parse.c index 0dfbe1cd28eb..12c51e4ad2b4 100644 --- a/arch/powerpc/kernel/prom_parse.c +++ b/arch/powerpc/kernel/prom_parse.c | |||
@@ -920,9 +920,20 @@ static int of_irq_map_oldworld(struct device_node *device, int index, | |||
920 | 920 | ||
921 | /* | 921 | /* |
922 | * Old machines just have a list of interrupt numbers | 922 | * Old machines just have a list of interrupt numbers |
923 | * and no interrupt-controller nodes. | 923 | * and no interrupt-controller nodes. We also have dodgy |
924 | * cases where the APPL,interrupts property is completely | ||
925 | * missing behind pci-pci bridges and we have to get it | ||
926 | * from the parent (the bridge itself, as apple just wired | ||
927 | * everything together on these) | ||
924 | */ | 928 | */ |
925 | ints = get_property(device, "AAPL,interrupts", &intlen); | 929 | while (device) { |
930 | ints = get_property(device, "AAPL,interrupts", &intlen); | ||
931 | if (ints != NULL) | ||
932 | break; | ||
933 | device = device->parent; | ||
934 | if (device && strcmp(device->type, "pci") != 0) | ||
935 | break; | ||
936 | } | ||
926 | if (ints == NULL) | 937 | if (ints == NULL) |
927 | return -EINVAL; | 938 | return -EINVAL; |
928 | intlen /= sizeof(u32); | 939 | intlen /= sizeof(u32); |