diff options
author | Paul Mackerras <paulus@samba.org> | 2006-08-31 01:45:48 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-08-31 01:45:48 -0400 |
commit | aa43f77939c97bf9d3580c6a5e71a5a40290e451 (patch) | |
tree | 095c0b8b3da4b6554a3f8ef4b39240a5d9216d4d /arch/powerpc/kernel/prom_parse.c | |
parent | 2818c5dec5e28d65d52afbb7695bbbafe6377ee5 (diff) | |
parent | 4c15343167b5febe7bb0ba96aad5bef42ae94d3b (diff) |
Merge branch 'merge'
Diffstat (limited to 'arch/powerpc/kernel/prom_parse.c')
-rw-r--r-- | arch/powerpc/kernel/prom_parse.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/prom_parse.c b/arch/powerpc/kernel/prom_parse.c index 603203276ef6..603dff3ad62a 100644 --- a/arch/powerpc/kernel/prom_parse.c +++ b/arch/powerpc/kernel/prom_parse.c | |||
@@ -642,7 +642,7 @@ void of_irq_map_init(unsigned int flags) | |||
642 | 642 | ||
643 | } | 643 | } |
644 | 644 | ||
645 | int of_irq_map_raw(struct device_node *parent, const u32 *intspec, | 645 | int of_irq_map_raw(struct device_node *parent, const u32 *intspec, u32 ointsize, |
646 | const u32 *addr, struct of_irq *out_irq) | 646 | const u32 *addr, struct of_irq *out_irq) |
647 | { | 647 | { |
648 | struct device_node *ipar, *tnode, *old = NULL, *newpar = NULL; | 648 | struct device_node *ipar, *tnode, *old = NULL, *newpar = NULL; |
@@ -650,6 +650,9 @@ int of_irq_map_raw(struct device_node *parent, const u32 *intspec, | |||
650 | u32 intsize = 1, addrsize, newintsize = 0, newaddrsize = 0; | 650 | u32 intsize = 1, addrsize, newintsize = 0, newaddrsize = 0; |
651 | int imaplen, match, i; | 651 | int imaplen, match, i; |
652 | 652 | ||
653 | DBG("of_irq_map_raw: par=%s,intspec=[0x%08x 0x%08x...],ointsize=%d\n", | ||
654 | parent->full_name, intspec[0], intspec[1], ointsize); | ||
655 | |||
653 | ipar = of_node_get(parent); | 656 | ipar = of_node_get(parent); |
654 | 657 | ||
655 | /* First get the #interrupt-cells property of the current cursor | 658 | /* First get the #interrupt-cells property of the current cursor |
@@ -673,6 +676,9 @@ int of_irq_map_raw(struct device_node *parent, const u32 *intspec, | |||
673 | 676 | ||
674 | DBG("of_irq_map_raw: ipar=%s, size=%d\n", ipar->full_name, intsize); | 677 | DBG("of_irq_map_raw: ipar=%s, size=%d\n", ipar->full_name, intsize); |
675 | 678 | ||
679 | if (ointsize != intsize) | ||
680 | return -EINVAL; | ||
681 | |||
676 | /* Look for this #address-cells. We have to implement the old linux | 682 | /* Look for this #address-cells. We have to implement the old linux |
677 | * trick of looking for the parent here as some device-trees rely on it | 683 | * trick of looking for the parent here as some device-trees rely on it |
678 | */ | 684 | */ |
@@ -879,12 +885,15 @@ int of_irq_map_one(struct device_node *device, int index, struct of_irq *out_irq | |||
879 | } | 885 | } |
880 | intsize = *tmp; | 886 | intsize = *tmp; |
881 | 887 | ||
888 | DBG(" intsize=%d intlen=%d\n", intsize, intlen); | ||
889 | |||
882 | /* Check index */ | 890 | /* Check index */ |
883 | if ((index + 1) * intsize > intlen) | 891 | if ((index + 1) * intsize > intlen) |
884 | return -EINVAL; | 892 | return -EINVAL; |
885 | 893 | ||
886 | /* Get new specifier and map it */ | 894 | /* Get new specifier and map it */ |
887 | res = of_irq_map_raw(p, intspec + index * intsize, addr, out_irq); | 895 | res = of_irq_map_raw(p, intspec + index * intsize, intsize, |
896 | addr, out_irq); | ||
888 | of_node_put(p); | 897 | of_node_put(p); |
889 | return res; | 898 | return res; |
890 | } | 899 | } |
@@ -969,7 +978,7 @@ int of_irq_map_pci(struct pci_dev *pdev, struct of_irq *out_irq) | |||
969 | laddr[0] = (pdev->bus->number << 16) | 978 | laddr[0] = (pdev->bus->number << 16) |
970 | | (pdev->devfn << 8); | 979 | | (pdev->devfn << 8); |
971 | laddr[1] = laddr[2] = 0; | 980 | laddr[1] = laddr[2] = 0; |
972 | return of_irq_map_raw(ppnode, &lspec, laddr, out_irq); | 981 | return of_irq_map_raw(ppnode, &lspec, 1, laddr, out_irq); |
973 | } | 982 | } |
974 | EXPORT_SYMBOL_GPL(of_irq_map_pci); | 983 | EXPORT_SYMBOL_GPL(of_irq_map_pci); |
975 | #endif /* CONFIG_PCI */ | 984 | #endif /* CONFIG_PCI */ |