[SPARC64] PCI: Use common routine to fetch PBM properties.
Namely bus-range and ino-bitmap. This allows us also to eliminate pci_controller_info's pci_{first,last}_busno fields as only the pbm ones are used now. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
36f021b579
commit
cfa0652c4e
8 changed files with 20 additions and 47 deletions
|
@ -15,6 +15,20 @@
|
||||||
|
|
||||||
#include "pci_impl.h"
|
#include "pci_impl.h"
|
||||||
|
|
||||||
|
void pci_get_pbm_props(struct pci_pbm_info *pbm)
|
||||||
|
{
|
||||||
|
const u32 *val = of_get_property(pbm->prom_node, "bus-range", NULL);
|
||||||
|
|
||||||
|
pbm->pci_first_busno = val[0];
|
||||||
|
pbm->pci_last_busno = val[1];
|
||||||
|
|
||||||
|
val = of_get_property(pbm->prom_node, "ino-bitmap", NULL);
|
||||||
|
if (val) {
|
||||||
|
pbm->ino_bitmap = (((u64)val[1] << 32UL) |
|
||||||
|
((u64)val[0] << 0UL));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void pci_register_legacy_regions(struct resource *io_res,
|
static void pci_register_legacy_regions(struct resource *io_res,
|
||||||
struct resource *mem_res)
|
struct resource *mem_res)
|
||||||
{
|
{
|
||||||
|
|
|
@ -317,8 +317,6 @@ static void pci_fire_pbm_init(struct pci_controller_info *p,
|
||||||
{
|
{
|
||||||
const struct linux_prom64_registers *regs;
|
const struct linux_prom64_registers *regs;
|
||||||
struct pci_pbm_info *pbm;
|
struct pci_pbm_info *pbm;
|
||||||
const u32 *ino_bitmap;
|
|
||||||
const unsigned int *busrange;
|
|
||||||
|
|
||||||
if ((portid & 1) == 0)
|
if ((portid & 1) == 0)
|
||||||
pbm = &p->pbm_A;
|
pbm = &p->pbm_A;
|
||||||
|
@ -338,13 +336,7 @@ static void pci_fire_pbm_init(struct pci_controller_info *p,
|
||||||
|
|
||||||
pci_determine_mem_io_space(pbm);
|
pci_determine_mem_io_space(pbm);
|
||||||
|
|
||||||
ino_bitmap = of_get_property(dp, "ino-bitmap", NULL);
|
pci_get_pbm_props(pbm);
|
||||||
pbm->ino_bitmap = (((u64)ino_bitmap[1] << 32UL) |
|
|
||||||
((u64)ino_bitmap[0] << 0UL));
|
|
||||||
|
|
||||||
busrange = of_get_property(dp, "bus-range", NULL);
|
|
||||||
pbm->pci_first_busno = busrange[0];
|
|
||||||
pbm->pci_last_busno = busrange[1];
|
|
||||||
|
|
||||||
pci_fire_hw_init(pbm);
|
pci_fire_hw_init(pbm);
|
||||||
pci_fire_pbm_iommu_init(pbm);
|
pci_fire_pbm_iommu_init(pbm);
|
||||||
|
|
|
@ -17,6 +17,7 @@ extern unsigned long pci_memspace_mask;
|
||||||
extern int pci_num_controllers;
|
extern int pci_num_controllers;
|
||||||
|
|
||||||
/* PCI bus scanning and fixup support. */
|
/* PCI bus scanning and fixup support. */
|
||||||
|
extern void pci_get_pbm_props(struct pci_pbm_info *pbm);
|
||||||
extern struct pci_bus *pci_scan_one_pbm(struct pci_pbm_info *pbm);
|
extern struct pci_bus *pci_scan_one_pbm(struct pci_pbm_info *pbm);
|
||||||
extern void pci_determine_mem_io_space(struct pci_pbm_info *pbm);
|
extern void pci_determine_mem_io_space(struct pci_pbm_info *pbm);
|
||||||
|
|
||||||
|
|
|
@ -1088,7 +1088,6 @@ static void psycho_pbm_strbuf_init(struct pci_controller_info *p,
|
||||||
static void psycho_pbm_init(struct pci_controller_info *p,
|
static void psycho_pbm_init(struct pci_controller_info *p,
|
||||||
struct device_node *dp, int is_pbm_a)
|
struct device_node *dp, int is_pbm_a)
|
||||||
{
|
{
|
||||||
unsigned int *busrange;
|
|
||||||
struct property *prop;
|
struct property *prop;
|
||||||
struct pci_pbm_info *pbm;
|
struct pci_pbm_info *pbm;
|
||||||
|
|
||||||
|
@ -1117,10 +1116,7 @@ static void psycho_pbm_init(struct pci_controller_info *p,
|
||||||
|
|
||||||
pci_determine_mem_io_space(pbm);
|
pci_determine_mem_io_space(pbm);
|
||||||
|
|
||||||
prop = of_find_property(dp, "bus-range", NULL);
|
pci_get_pbm_props(pbm);
|
||||||
busrange = prop->value;
|
|
||||||
pbm->pci_first_busno = busrange[0];
|
|
||||||
pbm->pci_last_busno = busrange[1];
|
|
||||||
|
|
||||||
psycho_pbm_strbuf_init(p, pbm, is_pbm_a);
|
psycho_pbm_strbuf_init(p, pbm, is_pbm_a);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1006,8 +1006,7 @@ static void sabre_pbm_init(struct pci_controller_info *p, struct device_node *dp
|
||||||
pbm->chip_type = PBM_CHIP_TYPE_SABRE;
|
pbm->chip_type = PBM_CHIP_TYPE_SABRE;
|
||||||
pbm->parent = p;
|
pbm->parent = p;
|
||||||
pbm->prom_node = dp;
|
pbm->prom_node = dp;
|
||||||
pbm->pci_first_busno = p->pci_first_busno;
|
pci_get_pbm_props(pbm);
|
||||||
pbm->pci_last_busno = p->pci_last_busno;
|
|
||||||
|
|
||||||
pci_determine_mem_io_space(pbm);
|
pci_determine_mem_io_space(pbm);
|
||||||
}
|
}
|
||||||
|
@ -1018,7 +1017,6 @@ void sabre_init(struct device_node *dp, char *model_name)
|
||||||
struct pci_controller_info *p;
|
struct pci_controller_info *p;
|
||||||
struct iommu *iommu;
|
struct iommu *iommu;
|
||||||
int tsbsize;
|
int tsbsize;
|
||||||
const u32 *busrange;
|
|
||||||
const u32 *vdma;
|
const u32 *vdma;
|
||||||
u32 upa_portid, dma_mask;
|
u32 upa_portid, dma_mask;
|
||||||
u64 clear_irq;
|
u64 clear_irq;
|
||||||
|
@ -1119,10 +1117,6 @@ void sabre_init(struct device_node *dp, char *model_name)
|
||||||
|
|
||||||
sabre_iommu_init(p, tsbsize, vdma[0], dma_mask);
|
sabre_iommu_init(p, tsbsize, vdma[0], dma_mask);
|
||||||
|
|
||||||
busrange = of_get_property(dp, "bus-range", NULL);
|
|
||||||
p->pci_first_busno = busrange[0];
|
|
||||||
p->pci_last_busno = busrange[1];
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Look for APB underneath.
|
* Look for APB underneath.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1491,10 +1491,8 @@ static void schizo_pbm_init(struct pci_controller_info *p,
|
||||||
int chip_type)
|
int chip_type)
|
||||||
{
|
{
|
||||||
const struct linux_prom64_registers *regs;
|
const struct linux_prom64_registers *regs;
|
||||||
const unsigned int *busrange;
|
|
||||||
struct pci_pbm_info *pbm;
|
struct pci_pbm_info *pbm;
|
||||||
const char *chipset_name;
|
const char *chipset_name;
|
||||||
const u32 *ino_bitmap;
|
|
||||||
int is_pbm_a;
|
int is_pbm_a;
|
||||||
|
|
||||||
switch (chip_type) {
|
switch (chip_type) {
|
||||||
|
@ -1555,13 +1553,7 @@ static void schizo_pbm_init(struct pci_controller_info *p,
|
||||||
|
|
||||||
pci_determine_mem_io_space(pbm);
|
pci_determine_mem_io_space(pbm);
|
||||||
|
|
||||||
ino_bitmap = of_get_property(dp, "ino-bitmap", NULL);
|
pci_get_pbm_props(pbm);
|
||||||
pbm->ino_bitmap = (((u64)ino_bitmap[1] << 32UL) |
|
|
||||||
((u64)ino_bitmap[0] << 0UL));
|
|
||||||
|
|
||||||
busrange = of_get_property(dp, "bus-range", NULL);
|
|
||||||
pbm->pci_first_busno = busrange[0];
|
|
||||||
pbm->pci_last_busno = busrange[1];
|
|
||||||
|
|
||||||
schizo_pbm_iommu_init(pbm);
|
schizo_pbm_iommu_init(pbm);
|
||||||
schizo_pbm_strbuf_init(pbm);
|
schizo_pbm_strbuf_init(pbm);
|
||||||
|
|
|
@ -802,20 +802,6 @@ static void pci_sun4v_iommu_init(struct pci_pbm_info *pbm)
|
||||||
pbm->name, sz);
|
pbm->name, sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pci_sun4v_get_bus_range(struct pci_pbm_info *pbm)
|
|
||||||
{
|
|
||||||
struct property *prop;
|
|
||||||
unsigned int *busrange;
|
|
||||||
|
|
||||||
prop = of_find_property(pbm->prom_node, "bus-range", NULL);
|
|
||||||
|
|
||||||
busrange = prop->value;
|
|
||||||
|
|
||||||
pbm->pci_first_busno = busrange[0];
|
|
||||||
pbm->pci_last_busno = busrange[1];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_PCI_MSI
|
#ifdef CONFIG_PCI_MSI
|
||||||
struct pci_sun4v_msiq_entry {
|
struct pci_sun4v_msiq_entry {
|
||||||
u64 version_type;
|
u64 version_type;
|
||||||
|
@ -1271,7 +1257,7 @@ static void pci_sun4v_pbm_init(struct pci_controller_info *p, struct device_node
|
||||||
|
|
||||||
pci_determine_mem_io_space(pbm);
|
pci_determine_mem_io_space(pbm);
|
||||||
|
|
||||||
pci_sun4v_get_bus_range(pbm);
|
pci_get_pbm_props(pbm);
|
||||||
pci_sun4v_iommu_init(pbm);
|
pci_sun4v_iommu_init(pbm);
|
||||||
pci_sun4v_msi_init(pbm);
|
pci_sun4v_msi_init(pbm);
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,8 +145,6 @@ struct pci_controller_info {
|
||||||
|
|
||||||
/* Now things for the actual PCI bus probes. */
|
/* Now things for the actual PCI bus probes. */
|
||||||
struct pci_ops *pci_ops;
|
struct pci_ops *pci_ops;
|
||||||
unsigned int pci_first_busno;
|
|
||||||
unsigned int pci_last_busno;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* !(__SPARC64_PBM_H) */
|
#endif /* !(__SPARC64_PBM_H) */
|
||||||
|
|
Loading…
Reference in a new issue