aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-06-07 20:09:01 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-06-07 20:09:01 -0400
commit34750bb15687fa03ba95a0ccb1307b0727bc308b (patch)
tree84e4b9987fb2dce76978ce585c6649625a3f2cf0
parentdf3872a9664667edae729361c9948b652de5c6f4 (diff)
parentec4d18f219e71ef682fe2d7b9a6d121617fef6d5 (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.c17
-rw-r--r--arch/sparc64/kernel/prom.c54
-rw-r--r--arch/sparc64/kernel/sbus.c54
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)
636static void sabre_scan_bus(struct pci_pbm_info *pbm) 636static 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)
961static unsigned long sysio_irq_offsets[] = { 961static 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
1013static unsigned long sysio_imap_to_iclr(unsigned long imap) 1013static 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)
657static unsigned long sysio_irq_offsets[] = { 657static 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
707static unsigned long sysio_imap_to_iclr(unsigned long imap) 707static 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;