diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-07 20:09:01 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-07 20:09:01 -0400 |
commit | 34750bb15687fa03ba95a0ccb1307b0727bc308b (patch) | |
tree | 84e4b9987fb2dce76978ce585c6649625a3f2cf0 | |
parent | df3872a9664667edae729361c9948b652de5c6f4 (diff) | |
parent | ec4d18f219e71ef682fe2d7b9a6d121617fef6d5 (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6:
[SPARC64]: Fix SBUS IRQ regression caused by PCI-E driver.
[SPARC64]: Fix 2 bugs in PCI Sabre bus scanning.
-rw-r--r-- | arch/sparc64/kernel/pci_sabre.c | 17 | ||||
-rw-r--r-- | arch/sparc64/kernel/prom.c | 54 | ||||
-rw-r--r-- | arch/sparc64/kernel/sbus.c | 54 |
3 files changed, 65 insertions, 60 deletions
diff --git a/arch/sparc64/kernel/pci_sabre.c b/arch/sparc64/kernel/pci_sabre.c index 323d6c278518..22e1be5c7489 100644 --- a/arch/sparc64/kernel/pci_sabre.c +++ b/arch/sparc64/kernel/pci_sabre.c | |||
@@ -636,13 +636,18 @@ static void apb_init(struct pci_bus *sabre_bus) | |||
636 | static void sabre_scan_bus(struct pci_pbm_info *pbm) | 636 | static void sabre_scan_bus(struct pci_pbm_info *pbm) |
637 | { | 637 | { |
638 | static int once; | 638 | static int once; |
639 | struct pci_bus *pbus; | ||
640 | 639 | ||
641 | /* The APB bridge speaks to the Sabre host PCI bridge | 640 | /* The APB bridge speaks to the Sabre host PCI bridge |
642 | * at 66Mhz, but the front side of APB runs at 33Mhz | 641 | * at 66Mhz, but the front side of APB runs at 33Mhz |
643 | * for both segments. | 642 | * for both segments. |
643 | * | ||
644 | * Hummingbird systems do not use APB, so they run | ||
645 | * at 66MHZ. | ||
644 | */ | 646 | */ |
645 | pbm->is_66mhz_capable = 0; | 647 | if (hummingbird_p) |
648 | pbm->is_66mhz_capable = 1; | ||
649 | else | ||
650 | pbm->is_66mhz_capable = 0; | ||
646 | 651 | ||
647 | /* This driver has not been verified to handle | 652 | /* This driver has not been verified to handle |
648 | * multiple SABREs yet, so trap this. | 653 | * multiple SABREs yet, so trap this. |
@@ -656,13 +661,13 @@ static void sabre_scan_bus(struct pci_pbm_info *pbm) | |||
656 | } | 661 | } |
657 | once++; | 662 | once++; |
658 | 663 | ||
659 | pbus = pci_scan_one_pbm(pbm); | 664 | pbm->pci_bus = pci_scan_one_pbm(pbm); |
660 | if (!pbus) | 665 | if (!pbm->pci_bus) |
661 | return; | 666 | return; |
662 | 667 | ||
663 | sabre_root_bus = pbus; | 668 | sabre_root_bus = pbm->pci_bus; |
664 | 669 | ||
665 | apb_init(pbus); | 670 | apb_init(pbm->pci_bus); |
666 | 671 | ||
667 | sabre_register_error_handlers(pbm); | 672 | sabre_register_error_handlers(pbm); |
668 | } | 673 | } |
diff --git a/arch/sparc64/kernel/prom.c b/arch/sparc64/kernel/prom.c index 6f4a5284b0ea..61036b346664 100644 --- a/arch/sparc64/kernel/prom.c +++ b/arch/sparc64/kernel/prom.c | |||
@@ -933,29 +933,29 @@ static void __init fire_irq_trans_init(struct device_node *dp) | |||
933 | * This should conform to both Sunfire/Wildfire server and Fusion | 933 | * This should conform to both Sunfire/Wildfire server and Fusion |
934 | * desktop designs. | 934 | * desktop designs. |
935 | */ | 935 | */ |
936 | #define SYSIO_IMAP_SLOT0 0x2c04UL | 936 | #define SYSIO_IMAP_SLOT0 0x2c00UL |
937 | #define SYSIO_IMAP_SLOT1 0x2c0cUL | 937 | #define SYSIO_IMAP_SLOT1 0x2c08UL |
938 | #define SYSIO_IMAP_SLOT2 0x2c14UL | 938 | #define SYSIO_IMAP_SLOT2 0x2c10UL |
939 | #define SYSIO_IMAP_SLOT3 0x2c1cUL | 939 | #define SYSIO_IMAP_SLOT3 0x2c18UL |
940 | #define SYSIO_IMAP_SCSI 0x3004UL | 940 | #define SYSIO_IMAP_SCSI 0x3000UL |
941 | #define SYSIO_IMAP_ETH 0x300cUL | 941 | #define SYSIO_IMAP_ETH 0x3008UL |
942 | #define SYSIO_IMAP_BPP 0x3014UL | 942 | #define SYSIO_IMAP_BPP 0x3010UL |
943 | #define SYSIO_IMAP_AUDIO 0x301cUL | 943 | #define SYSIO_IMAP_AUDIO 0x3018UL |
944 | #define SYSIO_IMAP_PFAIL 0x3024UL | 944 | #define SYSIO_IMAP_PFAIL 0x3020UL |
945 | #define SYSIO_IMAP_KMS 0x302cUL | 945 | #define SYSIO_IMAP_KMS 0x3028UL |
946 | #define SYSIO_IMAP_FLPY 0x3034UL | 946 | #define SYSIO_IMAP_FLPY 0x3030UL |
947 | #define SYSIO_IMAP_SHW 0x303cUL | 947 | #define SYSIO_IMAP_SHW 0x3038UL |
948 | #define SYSIO_IMAP_KBD 0x3044UL | 948 | #define SYSIO_IMAP_KBD 0x3040UL |
949 | #define SYSIO_IMAP_MS 0x304cUL | 949 | #define SYSIO_IMAP_MS 0x3048UL |
950 | #define SYSIO_IMAP_SER 0x3054UL | 950 | #define SYSIO_IMAP_SER 0x3050UL |
951 | #define SYSIO_IMAP_TIM0 0x3064UL | 951 | #define SYSIO_IMAP_TIM0 0x3060UL |
952 | #define SYSIO_IMAP_TIM1 0x306cUL | 952 | #define SYSIO_IMAP_TIM1 0x3068UL |
953 | #define SYSIO_IMAP_UE 0x3074UL | 953 | #define SYSIO_IMAP_UE 0x3070UL |
954 | #define SYSIO_IMAP_CE 0x307cUL | 954 | #define SYSIO_IMAP_CE 0x3078UL |
955 | #define SYSIO_IMAP_SBERR 0x3084UL | 955 | #define SYSIO_IMAP_SBERR 0x3080UL |
956 | #define SYSIO_IMAP_PMGMT 0x308cUL | 956 | #define SYSIO_IMAP_PMGMT 0x3088UL |
957 | #define SYSIO_IMAP_GFX 0x3094UL | 957 | #define SYSIO_IMAP_GFX 0x3090UL |
958 | #define SYSIO_IMAP_EUPA 0x309cUL | 958 | #define SYSIO_IMAP_EUPA 0x3098UL |
959 | 959 | ||
960 | #define bogon ((unsigned long) -1) | 960 | #define bogon ((unsigned long) -1) |
961 | static unsigned long sysio_irq_offsets[] = { | 961 | static unsigned long sysio_irq_offsets[] = { |
@@ -1006,10 +1006,10 @@ static unsigned long sysio_irq_offsets[] = { | |||
1006 | * Interrupt Clear register pointer, SYSIO specific version. | 1006 | * Interrupt Clear register pointer, SYSIO specific version. |
1007 | */ | 1007 | */ |
1008 | #define SYSIO_ICLR_UNUSED0 0x3400UL | 1008 | #define SYSIO_ICLR_UNUSED0 0x3400UL |
1009 | #define SYSIO_ICLR_SLOT0 0x340cUL | 1009 | #define SYSIO_ICLR_SLOT0 0x3408UL |
1010 | #define SYSIO_ICLR_SLOT1 0x344cUL | 1010 | #define SYSIO_ICLR_SLOT1 0x3448UL |
1011 | #define SYSIO_ICLR_SLOT2 0x348cUL | 1011 | #define SYSIO_ICLR_SLOT2 0x3488UL |
1012 | #define SYSIO_ICLR_SLOT3 0x34ccUL | 1012 | #define SYSIO_ICLR_SLOT3 0x34c8UL |
1013 | static unsigned long sysio_imap_to_iclr(unsigned long imap) | 1013 | static unsigned long sysio_imap_to_iclr(unsigned long imap) |
1014 | { | 1014 | { |
1015 | unsigned long diff = SYSIO_ICLR_UNUSED0 - SYSIO_IMAP_SLOT0; | 1015 | unsigned long diff = SYSIO_ICLR_UNUSED0 - SYSIO_IMAP_SLOT0; |
diff --git a/arch/sparc64/kernel/sbus.c b/arch/sparc64/kernel/sbus.c index 91f6e2a74ad5..a1fd9bcc0b87 100644 --- a/arch/sparc64/kernel/sbus.c +++ b/arch/sparc64/kernel/sbus.c | |||
@@ -629,29 +629,29 @@ void sbus_set_sbus64(struct sbus_dev *sdev, int bursts) | |||
629 | * This should conform to both Sunfire/Wildfire server and Fusion | 629 | * This should conform to both Sunfire/Wildfire server and Fusion |
630 | * desktop designs. | 630 | * desktop designs. |
631 | */ | 631 | */ |
632 | #define SYSIO_IMAP_SLOT0 0x2c04UL | 632 | #define SYSIO_IMAP_SLOT0 0x2c00UL |
633 | #define SYSIO_IMAP_SLOT1 0x2c0cUL | 633 | #define SYSIO_IMAP_SLOT1 0x2c08UL |
634 | #define SYSIO_IMAP_SLOT2 0x2c14UL | 634 | #define SYSIO_IMAP_SLOT2 0x2c10UL |
635 | #define SYSIO_IMAP_SLOT3 0x2c1cUL | 635 | #define SYSIO_IMAP_SLOT3 0x2c18UL |
636 | #define SYSIO_IMAP_SCSI 0x3004UL | 636 | #define SYSIO_IMAP_SCSI 0x3000UL |
637 | #define SYSIO_IMAP_ETH 0x300cUL | 637 | #define SYSIO_IMAP_ETH 0x3008UL |
638 | #define SYSIO_IMAP_BPP 0x3014UL | 638 | #define SYSIO_IMAP_BPP 0x3010UL |
639 | #define SYSIO_IMAP_AUDIO 0x301cUL | 639 | #define SYSIO_IMAP_AUDIO 0x3018UL |
640 | #define SYSIO_IMAP_PFAIL 0x3024UL | 640 | #define SYSIO_IMAP_PFAIL 0x3020UL |
641 | #define SYSIO_IMAP_KMS 0x302cUL | 641 | #define SYSIO_IMAP_KMS 0x3028UL |
642 | #define SYSIO_IMAP_FLPY 0x3034UL | 642 | #define SYSIO_IMAP_FLPY 0x3030UL |
643 | #define SYSIO_IMAP_SHW 0x303cUL | 643 | #define SYSIO_IMAP_SHW 0x3038UL |
644 | #define SYSIO_IMAP_KBD 0x3044UL | 644 | #define SYSIO_IMAP_KBD 0x3040UL |
645 | #define SYSIO_IMAP_MS 0x304cUL | 645 | #define SYSIO_IMAP_MS 0x3048UL |
646 | #define SYSIO_IMAP_SER 0x3054UL | 646 | #define SYSIO_IMAP_SER 0x3050UL |
647 | #define SYSIO_IMAP_TIM0 0x3064UL | 647 | #define SYSIO_IMAP_TIM0 0x3060UL |
648 | #define SYSIO_IMAP_TIM1 0x306cUL | 648 | #define SYSIO_IMAP_TIM1 0x3068UL |
649 | #define SYSIO_IMAP_UE 0x3074UL | 649 | #define SYSIO_IMAP_UE 0x3070UL |
650 | #define SYSIO_IMAP_CE 0x307cUL | 650 | #define SYSIO_IMAP_CE 0x3078UL |
651 | #define SYSIO_IMAP_SBERR 0x3084UL | 651 | #define SYSIO_IMAP_SBERR 0x3080UL |
652 | #define SYSIO_IMAP_PMGMT 0x308cUL | 652 | #define SYSIO_IMAP_PMGMT 0x3088UL |
653 | #define SYSIO_IMAP_GFX 0x3094UL | 653 | #define SYSIO_IMAP_GFX 0x3090UL |
654 | #define SYSIO_IMAP_EUPA 0x309cUL | 654 | #define SYSIO_IMAP_EUPA 0x3098UL |
655 | 655 | ||
656 | #define bogon ((unsigned long) -1) | 656 | #define bogon ((unsigned long) -1) |
657 | static unsigned long sysio_irq_offsets[] = { | 657 | static unsigned long sysio_irq_offsets[] = { |
@@ -700,10 +700,10 @@ static unsigned long sysio_irq_offsets[] = { | |||
700 | * Interrupt Clear register pointer, SYSIO specific version. | 700 | * Interrupt Clear register pointer, SYSIO specific version. |
701 | */ | 701 | */ |
702 | #define SYSIO_ICLR_UNUSED0 0x3400UL | 702 | #define SYSIO_ICLR_UNUSED0 0x3400UL |
703 | #define SYSIO_ICLR_SLOT0 0x340cUL | 703 | #define SYSIO_ICLR_SLOT0 0x3408UL |
704 | #define SYSIO_ICLR_SLOT1 0x344cUL | 704 | #define SYSIO_ICLR_SLOT1 0x3448UL |
705 | #define SYSIO_ICLR_SLOT2 0x348cUL | 705 | #define SYSIO_ICLR_SLOT2 0x3488UL |
706 | #define SYSIO_ICLR_SLOT3 0x34ccUL | 706 | #define SYSIO_ICLR_SLOT3 0x34c8UL |
707 | static unsigned long sysio_imap_to_iclr(unsigned long imap) | 707 | static unsigned long sysio_imap_to_iclr(unsigned long imap) |
708 | { | 708 | { |
709 | unsigned long diff = SYSIO_ICLR_UNUSED0 - SYSIO_IMAP_SLOT0; | 709 | unsigned long diff = SYSIO_ICLR_UNUSED0 - SYSIO_IMAP_SLOT0; |