diff options
| -rw-r--r-- | arch/sparc64/kernel/pci.c | 2 | ||||
| -rw-r--r-- | arch/sparc64/kernel/pci_psycho.c | 66 | ||||
| -rw-r--r-- | arch/sparc64/kernel/pci_sabre.c | 57 |
3 files changed, 58 insertions, 67 deletions
diff --git a/arch/sparc64/kernel/pci.c b/arch/sparc64/kernel/pci.c index b8a48db3d82d..ca290d6de64d 100644 --- a/arch/sparc64/kernel/pci.c +++ b/arch/sparc64/kernel/pci.c | |||
| @@ -921,10 +921,8 @@ static int __pci_mmap_make_offset_bus(struct pci_dev *pdev, struct vm_area_struc | |||
| 921 | enum pci_mmap_state mmap_state) | 921 | enum pci_mmap_state mmap_state) |
| 922 | { | 922 | { |
| 923 | struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller; | 923 | struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller; |
| 924 | struct pci_controller_info *p; | ||
| 925 | unsigned long space_size, user_offset, user_size; | 924 | unsigned long space_size, user_offset, user_size; |
| 926 | 925 | ||
| 927 | p = pbm->parent; | ||
| 928 | if (mmap_state == pci_mmap_io) { | 926 | if (mmap_state == pci_mmap_io) { |
| 929 | space_size = (pbm->io_space.end - | 927 | space_size = (pbm->io_space.end - |
| 930 | pbm->io_space.start) + 1; | 928 | pbm->io_space.start) + 1; |
diff --git a/arch/sparc64/kernel/pci_psycho.c b/arch/sparc64/kernel/pci_psycho.c index b6f073ed31d4..8ef808348993 100644 --- a/arch/sparc64/kernel/pci_psycho.c +++ b/arch/sparc64/kernel/pci_psycho.c | |||
| @@ -98,13 +98,8 @@ static int psycho_out_of_range(struct pci_pbm_info *pbm, | |||
| 98 | unsigned char bus, | 98 | unsigned char bus, |
| 99 | unsigned char devfn) | 99 | unsigned char devfn) |
| 100 | { | 100 | { |
| 101 | return ((pbm->parent == 0) || | 101 | return ((bus == pbm->pci_first_busno) && |
| 102 | ((pbm == &pbm->parent->pbm_B) && | 102 | PCI_SLOT(devfn) > 8); |
| 103 | (bus == pbm->pci_first_busno) && | ||
| 104 | PCI_SLOT(devfn) > 8) || | ||
| 105 | ((pbm == &pbm->parent->pbm_A) && | ||
| 106 | (bus == pbm->pci_first_busno) && | ||
| 107 | PCI_SLOT(devfn) > 8)); | ||
| 108 | } | 103 | } |
| 109 | 104 | ||
| 110 | /* PSYCHO PCI configuration space accessors. */ | 105 | /* PSYCHO PCI configuration space accessors. */ |
| @@ -918,33 +913,33 @@ static void psycho_scan_bus(struct pci_pbm_info *pbm) | |||
| 918 | psycho_register_error_handlers(pbm); | 913 | psycho_register_error_handlers(pbm); |
| 919 | } | 914 | } |
| 920 | 915 | ||
| 921 | static void psycho_iommu_init(struct pci_controller_info *p) | 916 | static void psycho_iommu_init(struct pci_pbm_info *pbm) |
| 922 | { | 917 | { |
| 923 | struct iommu *iommu = p->pbm_A.iommu; | 918 | struct iommu *iommu = pbm->iommu; |
| 924 | unsigned long i; | 919 | unsigned long i; |
| 925 | u64 control; | 920 | u64 control; |
| 926 | 921 | ||
| 927 | /* Register addresses. */ | 922 | /* Register addresses. */ |
| 928 | iommu->iommu_control = p->pbm_A.controller_regs + PSYCHO_IOMMU_CONTROL; | 923 | iommu->iommu_control = pbm->controller_regs + PSYCHO_IOMMU_CONTROL; |
| 929 | iommu->iommu_tsbbase = p->pbm_A.controller_regs + PSYCHO_IOMMU_TSBBASE; | 924 | iommu->iommu_tsbbase = pbm->controller_regs + PSYCHO_IOMMU_TSBBASE; |
| 930 | iommu->iommu_flush = p->pbm_A.controller_regs + PSYCHO_IOMMU_FLUSH; | 925 | iommu->iommu_flush = pbm->controller_regs + PSYCHO_IOMMU_FLUSH; |
| 931 | /* PSYCHO's IOMMU lacks ctx flushing. */ | 926 | /* PSYCHO's IOMMU lacks ctx flushing. */ |
| 932 | iommu->iommu_ctxflush = 0; | 927 | iommu->iommu_ctxflush = 0; |
| 933 | 928 | ||
| 934 | /* We use the main control register of PSYCHO as the write | 929 | /* We use the main control register of PSYCHO as the write |
| 935 | * completion register. | 930 | * completion register. |
| 936 | */ | 931 | */ |
| 937 | iommu->write_complete_reg = p->pbm_A.controller_regs + PSYCHO_CONTROL; | 932 | iommu->write_complete_reg = pbm->controller_regs + PSYCHO_CONTROL; |
| 938 | 933 | ||
| 939 | /* | 934 | /* |
| 940 | * Invalidate TLB Entries. | 935 | * Invalidate TLB Entries. |
| 941 | */ | 936 | */ |
| 942 | control = psycho_read(p->pbm_A.controller_regs + PSYCHO_IOMMU_CONTROL); | 937 | control = psycho_read(pbm->controller_regs + PSYCHO_IOMMU_CONTROL); |
| 943 | control |= PSYCHO_IOMMU_CTRL_DENAB; | 938 | control |= PSYCHO_IOMMU_CTRL_DENAB; |
| 944 | psycho_write(p->pbm_A.controller_regs + PSYCHO_IOMMU_CONTROL, control); | 939 | psycho_write(pbm->controller_regs + PSYCHO_IOMMU_CONTROL, control); |
| 945 | for(i = 0; i < 16; i++) { | 940 | for(i = 0; i < 16; i++) { |
| 946 | psycho_write(p->pbm_A.controller_regs + PSYCHO_IOMMU_TAG + (i * 8UL), 0); | 941 | psycho_write(pbm->controller_regs + PSYCHO_IOMMU_TAG + (i * 8UL), 0); |
| 947 | psycho_write(p->pbm_A.controller_regs + PSYCHO_IOMMU_DATA + (i * 8UL), 0); | 942 | psycho_write(pbm->controller_regs + PSYCHO_IOMMU_DATA + (i * 8UL), 0); |
| 948 | } | 943 | } |
| 949 | 944 | ||
| 950 | /* Leave diag mode enabled for full-flushing done | 945 | /* Leave diag mode enabled for full-flushing done |
| @@ -952,17 +947,17 @@ static void psycho_iommu_init(struct pci_controller_info *p) | |||
| 952 | */ | 947 | */ |
| 953 | pci_iommu_table_init(iommu, IO_TSB_SIZE, 0xc0000000, 0xffffffff); | 948 | pci_iommu_table_init(iommu, IO_TSB_SIZE, 0xc0000000, 0xffffffff); |
| 954 | 949 | ||
| 955 | psycho_write(p->pbm_A.controller_regs + PSYCHO_IOMMU_TSBBASE, | 950 | psycho_write(pbm->controller_regs + PSYCHO_IOMMU_TSBBASE, |
| 956 | __pa(iommu->page_table)); | 951 | __pa(iommu->page_table)); |
| 957 | 952 | ||
| 958 | control = psycho_read(p->pbm_A.controller_regs + PSYCHO_IOMMU_CONTROL); | 953 | control = psycho_read(pbm->controller_regs + PSYCHO_IOMMU_CONTROL); |
| 959 | control &= ~(PSYCHO_IOMMU_CTRL_TSBSZ | PSYCHO_IOMMU_CTRL_TBWSZ); | 954 | control &= ~(PSYCHO_IOMMU_CTRL_TSBSZ | PSYCHO_IOMMU_CTRL_TBWSZ); |
| 960 | control |= (PSYCHO_IOMMU_TSBSZ_128K | PSYCHO_IOMMU_CTRL_ENAB); | 955 | control |= (PSYCHO_IOMMU_TSBSZ_128K | PSYCHO_IOMMU_CTRL_ENAB); |
| 961 | psycho_write(p->pbm_A.controller_regs + PSYCHO_IOMMU_CONTROL, control); | 956 | psycho_write(pbm->controller_regs + PSYCHO_IOMMU_CONTROL, control); |
| 962 | 957 | ||
| 963 | /* If necessary, hook us up for starfire IRQ translations. */ | 958 | /* If necessary, hook us up for starfire IRQ translations. */ |
| 964 | if (this_is_starfire) | 959 | if (this_is_starfire) |
| 965 | starfire_hookup(p->pbm_A.portid); | 960 | starfire_hookup(pbm->portid); |
| 966 | } | 961 | } |
| 967 | 962 | ||
| 968 | #define PSYCHO_IRQ_RETRY 0x1a00UL | 963 | #define PSYCHO_IRQ_RETRY 0x1a00UL |
| @@ -977,36 +972,35 @@ static void psycho_iommu_init(struct pci_controller_info *p) | |||
| 977 | #define PSYCHO_PCIDIAG_IPAPAR 0x0000000000000002UL /* Invert PIO address parity */ | 972 | #define PSYCHO_PCIDIAG_IPAPAR 0x0000000000000002UL /* Invert PIO address parity */ |
| 978 | #define PSYCHO_PCIDIAG_LPBACK 0x0000000000000001UL /* Enable loopback mode */ | 973 | #define PSYCHO_PCIDIAG_LPBACK 0x0000000000000001UL /* Enable loopback mode */ |
| 979 | 974 | ||
| 980 | static void psycho_controller_hwinit(struct pci_controller_info *p) | 975 | static void psycho_controller_hwinit(struct pci_pbm_info *pbm) |
| 981 | { | 976 | { |
| 982 | u64 tmp; | 977 | u64 tmp; |
| 983 | 978 | ||
| 984 | psycho_write(p->pbm_A.controller_regs + PSYCHO_IRQ_RETRY, 5); | 979 | psycho_write(pbm->controller_regs + PSYCHO_IRQ_RETRY, 5); |
| 985 | 980 | ||
| 986 | /* Enable arbiter for all PCI slots. */ | 981 | /* Enable arbiter for all PCI slots. */ |
| 987 | tmp = psycho_read(p->pbm_A.controller_regs + PSYCHO_PCIA_CTRL); | 982 | tmp = psycho_read(pbm->controller_regs + PSYCHO_PCIA_CTRL); |
| 988 | tmp |= PSYCHO_PCICTRL_AEN; | 983 | tmp |= PSYCHO_PCICTRL_AEN; |
| 989 | psycho_write(p->pbm_A.controller_regs + PSYCHO_PCIA_CTRL, tmp); | 984 | psycho_write(pbm->controller_regs + PSYCHO_PCIA_CTRL, tmp); |
| 990 | 985 | ||
| 991 | tmp = psycho_read(p->pbm_A.controller_regs + PSYCHO_PCIB_CTRL); | 986 | tmp = psycho_read(pbm->controller_regs + PSYCHO_PCIB_CTRL); |
| 992 | tmp |= PSYCHO_PCICTRL_AEN; | 987 | tmp |= PSYCHO_PCICTRL_AEN; |
| 993 | psycho_write(p->pbm_A.controller_regs + PSYCHO_PCIB_CTRL, tmp); | 988 | psycho_write(pbm->controller_regs + PSYCHO_PCIB_CTRL, tmp); |
| 994 | 989 | ||
| 995 | /* Disable DMA write / PIO read synchronization on | 990 | /* Disable DMA write / PIO read synchronization on |
| 996 | * both PCI bus segments. | 991 | * both PCI bus segments. |
| 997 | * [ U2P Erratum 1243770, STP2223BGA data sheet ] | 992 | * [ U2P Erratum 1243770, STP2223BGA data sheet ] |
| 998 | */ | 993 | */ |
| 999 | tmp = psycho_read(p->pbm_A.controller_regs + PSYCHO_PCIA_DIAG); | 994 | tmp = psycho_read(pbm->controller_regs + PSYCHO_PCIA_DIAG); |
| 1000 | tmp |= PSYCHO_PCIDIAG_DDWSYNC; | 995 | tmp |= PSYCHO_PCIDIAG_DDWSYNC; |
| 1001 | psycho_write(p->pbm_A.controller_regs + PSYCHO_PCIA_DIAG, tmp); | 996 | psycho_write(pbm->controller_regs + PSYCHO_PCIA_DIAG, tmp); |
| 1002 | 997 | ||
| 1003 | tmp = psycho_read(p->pbm_A.controller_regs + PSYCHO_PCIB_DIAG); | 998 | tmp = psycho_read(pbm->controller_regs + PSYCHO_PCIB_DIAG); |
| 1004 | tmp |= PSYCHO_PCIDIAG_DDWSYNC; | 999 | tmp |= PSYCHO_PCIDIAG_DDWSYNC; |
| 1005 | psycho_write(p->pbm_A.controller_regs + PSYCHO_PCIB_DIAG, tmp); | 1000 | psycho_write(pbm->controller_regs + PSYCHO_PCIB_DIAG, tmp); |
| 1006 | } | 1001 | } |
| 1007 | 1002 | ||
| 1008 | static void psycho_pbm_strbuf_init(struct pci_controller_info *p, | 1003 | static void psycho_pbm_strbuf_init(struct pci_pbm_info *pbm, |
| 1009 | struct pci_pbm_info *pbm, | ||
| 1010 | int is_pbm_a) | 1004 | int is_pbm_a) |
| 1011 | { | 1005 | { |
| 1012 | unsigned long base = pbm->controller_regs; | 1006 | unsigned long base = pbm->controller_regs; |
| @@ -1105,7 +1099,7 @@ static void psycho_pbm_init(struct pci_controller_info *p, | |||
| 1105 | 1099 | ||
| 1106 | pci_get_pbm_props(pbm); | 1100 | pci_get_pbm_props(pbm); |
| 1107 | 1101 | ||
| 1108 | psycho_pbm_strbuf_init(p, pbm, is_pbm_a); | 1102 | psycho_pbm_strbuf_init(pbm, is_pbm_a); |
| 1109 | } | 1103 | } |
| 1110 | 1104 | ||
| 1111 | #define PSYCHO_CONFIGSPACE 0x001000000UL | 1105 | #define PSYCHO_CONFIGSPACE 0x001000000UL |
| @@ -1165,9 +1159,9 @@ void psycho_init(struct device_node *dp, char *model_name) | |||
| 1165 | */ | 1159 | */ |
| 1166 | pci_memspace_mask = 0x7fffffffUL; | 1160 | pci_memspace_mask = 0x7fffffffUL; |
| 1167 | 1161 | ||
| 1168 | psycho_controller_hwinit(p); | 1162 | psycho_controller_hwinit(&p->pbm_A); |
| 1169 | 1163 | ||
| 1170 | psycho_iommu_init(p); | 1164 | psycho_iommu_init(&p->pbm_A); |
| 1171 | 1165 | ||
| 1172 | is_pbm_a = ((pr_regs[0].phys_addr & 0x6000) == 0x2000); | 1166 | is_pbm_a = ((pr_regs[0].phys_addr & 0x6000) == 0x2000); |
| 1173 | psycho_pbm_init(p, dp, is_pbm_a); | 1167 | psycho_pbm_init(p, dp, is_pbm_a); |
diff --git a/arch/sparc64/kernel/pci_sabre.c b/arch/sparc64/kernel/pci_sabre.c index 422485bc67f0..733ab366a3d4 100644 --- a/arch/sparc64/kernel/pci_sabre.c +++ b/arch/sparc64/kernel/pci_sabre.c | |||
| @@ -942,30 +942,30 @@ static void sabre_scan_bus(struct pci_pbm_info *pbm) | |||
| 942 | sabre_register_error_handlers(pbm); | 942 | sabre_register_error_handlers(pbm); |
| 943 | } | 943 | } |
| 944 | 944 | ||
| 945 | static void sabre_iommu_init(struct pci_controller_info *p, | 945 | static void sabre_iommu_init(struct pci_pbm_info *pbm, |
| 946 | int tsbsize, unsigned long dvma_offset, | 946 | int tsbsize, unsigned long dvma_offset, |
| 947 | u32 dma_mask) | 947 | u32 dma_mask) |
| 948 | { | 948 | { |
| 949 | struct iommu *iommu = p->pbm_A.iommu; | 949 | struct iommu *iommu = pbm->iommu; |
| 950 | unsigned long i; | 950 | unsigned long i; |
| 951 | u64 control; | 951 | u64 control; |
| 952 | 952 | ||
| 953 | /* Register addresses. */ | 953 | /* Register addresses. */ |
| 954 | iommu->iommu_control = p->pbm_A.controller_regs + SABRE_IOMMU_CONTROL; | 954 | iommu->iommu_control = pbm->controller_regs + SABRE_IOMMU_CONTROL; |
| 955 | iommu->iommu_tsbbase = p->pbm_A.controller_regs + SABRE_IOMMU_TSBBASE; | 955 | iommu->iommu_tsbbase = pbm->controller_regs + SABRE_IOMMU_TSBBASE; |
| 956 | iommu->iommu_flush = p->pbm_A.controller_regs + SABRE_IOMMU_FLUSH; | 956 | iommu->iommu_flush = pbm->controller_regs + SABRE_IOMMU_FLUSH; |
| 957 | iommu->write_complete_reg = p->pbm_A.controller_regs + SABRE_WRSYNC; | 957 | iommu->write_complete_reg = pbm->controller_regs + SABRE_WRSYNC; |
| 958 | /* Sabre's IOMMU lacks ctx flushing. */ | 958 | /* Sabre's IOMMU lacks ctx flushing. */ |
| 959 | iommu->iommu_ctxflush = 0; | 959 | iommu->iommu_ctxflush = 0; |
| 960 | 960 | ||
| 961 | /* Invalidate TLB Entries. */ | 961 | /* Invalidate TLB Entries. */ |
| 962 | control = sabre_read(p->pbm_A.controller_regs + SABRE_IOMMU_CONTROL); | 962 | control = sabre_read(pbm->controller_regs + SABRE_IOMMU_CONTROL); |
| 963 | control |= SABRE_IOMMUCTRL_DENAB; | 963 | control |= SABRE_IOMMUCTRL_DENAB; |
| 964 | sabre_write(p->pbm_A.controller_regs + SABRE_IOMMU_CONTROL, control); | 964 | sabre_write(pbm->controller_regs + SABRE_IOMMU_CONTROL, control); |
| 965 | 965 | ||
| 966 | for(i = 0; i < 16; i++) { | 966 | for(i = 0; i < 16; i++) { |
| 967 | sabre_write(p->pbm_A.controller_regs + SABRE_IOMMU_TAG + (i * 8UL), 0); | 967 | sabre_write(pbm->controller_regs + SABRE_IOMMU_TAG + (i * 8UL), 0); |
| 968 | sabre_write(p->pbm_A.controller_regs + SABRE_IOMMU_DATA + (i * 8UL), 0); | 968 | sabre_write(pbm->controller_regs + SABRE_IOMMU_DATA + (i * 8UL), 0); |
| 969 | } | 969 | } |
| 970 | 970 | ||
| 971 | /* Leave diag mode enabled for full-flushing done | 971 | /* Leave diag mode enabled for full-flushing done |
| @@ -973,10 +973,10 @@ static void sabre_iommu_init(struct pci_controller_info *p, | |||
| 973 | */ | 973 | */ |
| 974 | pci_iommu_table_init(iommu, tsbsize * 1024 * 8, dvma_offset, dma_mask); | 974 | pci_iommu_table_init(iommu, tsbsize * 1024 * 8, dvma_offset, dma_mask); |
| 975 | 975 | ||
| 976 | sabre_write(p->pbm_A.controller_regs + SABRE_IOMMU_TSBBASE, | 976 | sabre_write(pbm->controller_regs + SABRE_IOMMU_TSBBASE, |
| 977 | __pa(iommu->page_table)); | 977 | __pa(iommu->page_table)); |
| 978 | 978 | ||
| 979 | control = sabre_read(p->pbm_A.controller_regs + SABRE_IOMMU_CONTROL); | 979 | control = sabre_read(pbm->controller_regs + SABRE_IOMMU_CONTROL); |
| 980 | control &= ~(SABRE_IOMMUCTRL_TSBSZ | SABRE_IOMMUCTRL_TBWSZ); | 980 | control &= ~(SABRE_IOMMUCTRL_TSBSZ | SABRE_IOMMUCTRL_TBWSZ); |
| 981 | control |= SABRE_IOMMUCTRL_ENAB; | 981 | control |= SABRE_IOMMUCTRL_ENAB; |
| 982 | switch(tsbsize) { | 982 | switch(tsbsize) { |
| @@ -991,14 +991,11 @@ static void sabre_iommu_init(struct pci_controller_info *p, | |||
| 991 | prom_halt(); | 991 | prom_halt(); |
| 992 | break; | 992 | break; |
| 993 | } | 993 | } |
| 994 | sabre_write(p->pbm_A.controller_regs + SABRE_IOMMU_CONTROL, control); | 994 | sabre_write(pbm->controller_regs + SABRE_IOMMU_CONTROL, control); |
| 995 | } | 995 | } |
| 996 | 996 | ||
| 997 | static void sabre_pbm_init(struct pci_controller_info *p, struct device_node *dp) | 997 | static void sabre_pbm_init(struct pci_controller_info *p, struct pci_pbm_info *pbm, struct device_node *dp) |
| 998 | { | 998 | { |
| 999 | struct pci_pbm_info *pbm; | ||
| 1000 | |||
| 1001 | pbm = &p->pbm_A; | ||
| 1002 | pbm->name = dp->full_name; | 999 | pbm->name = dp->full_name; |
| 1003 | printk("%s: SABRE PCI Bus Module\n", pbm->name); | 1000 | printk("%s: SABRE PCI Bus Module\n", pbm->name); |
| 1004 | 1001 | ||
| @@ -1019,6 +1016,7 @@ void sabre_init(struct device_node *dp, char *model_name) | |||
| 1019 | { | 1016 | { |
| 1020 | const struct linux_prom64_registers *pr_regs; | 1017 | const struct linux_prom64_registers *pr_regs; |
| 1021 | struct pci_controller_info *p; | 1018 | struct pci_controller_info *p; |
| 1019 | struct pci_pbm_info *pbm; | ||
| 1022 | struct iommu *iommu; | 1020 | struct iommu *iommu; |
| 1023 | int tsbsize; | 1021 | int tsbsize; |
| 1024 | const u32 *vdma; | 1022 | const u32 *vdma; |
| @@ -1055,14 +1053,15 @@ void sabre_init(struct device_node *dp, char *model_name) | |||
| 1055 | prom_printf("SABRE: Error, kmalloc(pci_iommu) failed.\n"); | 1053 | prom_printf("SABRE: Error, kmalloc(pci_iommu) failed.\n"); |
| 1056 | prom_halt(); | 1054 | prom_halt(); |
| 1057 | } | 1055 | } |
| 1058 | p->pbm_A.iommu = iommu; | 1056 | pbm = &p->pbm_A; |
| 1057 | pbm->iommu = iommu; | ||
| 1059 | 1058 | ||
| 1060 | upa_portid = of_getintprop_default(dp, "upa-portid", 0xff); | 1059 | upa_portid = of_getintprop_default(dp, "upa-portid", 0xff); |
| 1061 | 1060 | ||
| 1062 | p->pbm_A.next = pci_pbm_root; | 1061 | pbm->next = pci_pbm_root; |
| 1063 | pci_pbm_root = &p->pbm_A; | 1062 | pci_pbm_root = pbm; |
| 1064 | 1063 | ||
| 1065 | p->pbm_A.portid = upa_portid; | 1064 | pbm->portid = upa_portid; |
| 1066 | 1065 | ||
| 1067 | /* | 1066 | /* |
| 1068 | * Map in SABRE register set and report the presence of this SABRE. | 1067 | * Map in SABRE register set and report the presence of this SABRE. |
| @@ -1073,26 +1072,26 @@ void sabre_init(struct device_node *dp, char *model_name) | |||
| 1073 | /* | 1072 | /* |
| 1074 | * First REG in property is base of entire SABRE register space. | 1073 | * First REG in property is base of entire SABRE register space. |
| 1075 | */ | 1074 | */ |
| 1076 | p->pbm_A.controller_regs = pr_regs[0].phys_addr; | 1075 | pbm->controller_regs = pr_regs[0].phys_addr; |
| 1077 | 1076 | ||
| 1078 | /* Clear interrupts */ | 1077 | /* Clear interrupts */ |
| 1079 | 1078 | ||
| 1080 | /* PCI first */ | 1079 | /* PCI first */ |
| 1081 | for (clear_irq = SABRE_ICLR_A_SLOT0; clear_irq < SABRE_ICLR_B_SLOT0 + 0x80; clear_irq += 8) | 1080 | for (clear_irq = SABRE_ICLR_A_SLOT0; clear_irq < SABRE_ICLR_B_SLOT0 + 0x80; clear_irq += 8) |
| 1082 | sabre_write(p->pbm_A.controller_regs + clear_irq, 0x0UL); | 1081 | sabre_write(pbm->controller_regs + clear_irq, 0x0UL); |
| 1083 | 1082 | ||
| 1084 | /* Then OBIO */ | 1083 | /* Then OBIO */ |
| 1085 | for (clear_irq = SABRE_ICLR_SCSI; clear_irq < SABRE_ICLR_SCSI + 0x80; clear_irq += 8) | 1084 | for (clear_irq = SABRE_ICLR_SCSI; clear_irq < SABRE_ICLR_SCSI + 0x80; clear_irq += 8) |
| 1086 | sabre_write(p->pbm_A.controller_regs + clear_irq, 0x0UL); | 1085 | sabre_write(pbm->controller_regs + clear_irq, 0x0UL); |
| 1087 | 1086 | ||
| 1088 | /* Error interrupts are enabled later after the bus scan. */ | 1087 | /* Error interrupts are enabled later after the bus scan. */ |
| 1089 | sabre_write(p->pbm_A.controller_regs + SABRE_PCICTRL, | 1088 | sabre_write(pbm->controller_regs + SABRE_PCICTRL, |
| 1090 | (SABRE_PCICTRL_MRLEN | SABRE_PCICTRL_SERR | | 1089 | (SABRE_PCICTRL_MRLEN | SABRE_PCICTRL_SERR | |
| 1091 | SABRE_PCICTRL_ARBPARK | SABRE_PCICTRL_AEN)); | 1090 | SABRE_PCICTRL_ARBPARK | SABRE_PCICTRL_AEN)); |
| 1092 | 1091 | ||
| 1093 | /* Now map in PCI config space for entire SABRE. */ | 1092 | /* Now map in PCI config space for entire SABRE. */ |
| 1094 | p->pbm_A.config_space = | 1093 | pbm->config_space = |
| 1095 | (p->pbm_A.controller_regs + SABRE_CONFIGSPACE); | 1094 | (pbm->controller_regs + SABRE_CONFIGSPACE); |
| 1096 | 1095 | ||
| 1097 | vdma = of_get_property(dp, "virtual-dma", NULL); | 1096 | vdma = of_get_property(dp, "virtual-dma", NULL); |
| 1098 | 1097 | ||
| @@ -1116,10 +1115,10 @@ void sabre_init(struct device_node *dp, char *model_name) | |||
| 1116 | prom_halt(); | 1115 | prom_halt(); |
| 1117 | } | 1116 | } |
| 1118 | 1117 | ||
| 1119 | sabre_iommu_init(p, tsbsize, vdma[0], dma_mask); | 1118 | sabre_iommu_init(pbm, tsbsize, vdma[0], dma_mask); |
| 1120 | 1119 | ||
| 1121 | /* | 1120 | /* |
| 1122 | * Look for APB underneath. | 1121 | * Look for APB underneath. |
| 1123 | */ | 1122 | */ |
| 1124 | sabre_pbm_init(p, dp); | 1123 | sabre_pbm_init(p, pbm, dp); |
| 1125 | } | 1124 | } |
