Commit cfa0652c authored by David S. Miller's avatar David S. Miller
Browse files

[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: default avatarDavid S. Miller <davem@davemloft.net>
parent 36f021b5
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -15,6 +15,20 @@

#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,
					struct resource *mem_res)
{
+1 −9
Original line number Diff line number Diff line
@@ -317,8 +317,6 @@ static void pci_fire_pbm_init(struct pci_controller_info *p,
{
	const struct linux_prom64_registers *regs;
	struct pci_pbm_info *pbm;
	const u32 *ino_bitmap;
	const unsigned int *busrange;

	if ((portid & 1) == 0)
		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);

	ino_bitmap = of_get_property(dp, "ino-bitmap", NULL);
	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_get_pbm_props(pbm);

	pci_fire_hw_init(pbm);
	pci_fire_pbm_iommu_init(pbm);
+1 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ extern unsigned long pci_memspace_mask;
extern int pci_num_controllers;

/* 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 void pci_determine_mem_io_space(struct pci_pbm_info *pbm);

+1 −5
Original line number Diff line number Diff line
@@ -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,
			    struct device_node *dp, int is_pbm_a)
{
	unsigned int *busrange;
	struct property *prop;
	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);

	prop = of_find_property(dp, "bus-range", NULL);
	busrange = prop->value;
	pbm->pci_first_busno = busrange[0];
	pbm->pci_last_busno = busrange[1];
	pci_get_pbm_props(pbm);

	psycho_pbm_strbuf_init(p, pbm, is_pbm_a);
}
+1 −7
Original line number Diff line number Diff line
@@ -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->parent = p;
	pbm->prom_node = dp;
	pbm->pci_first_busno = p->pci_first_busno;
	pbm->pci_last_busno = p->pci_last_busno;
	pci_get_pbm_props(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 iommu *iommu;
	int tsbsize;
	const u32 *busrange;
	const u32 *vdma;
	u32 upa_portid, dma_mask;
	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);

	busrange = of_get_property(dp, "bus-range", NULL);
	p->pci_first_busno = busrange[0];
	p->pci_last_busno = busrange[1];

	/*
	 * Look for APB underneath.
	 */
Loading