Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5516b540 authored by Kumar Gala's avatar Kumar Gala
Browse files

[POWERPC] Use global_number in ppc32 pci_controller



Make the pci_controller struct use global_number for the PHB domain number
instead of index to match what ppc64 does and reuse its pci_domain_nr code.

Introduced a pci-common.c to handle shared code between ppc32 & ppc64.

Signed-off-by: default avatarKumar Gala <galak@kernel.crashing.org>
parent 6a506238
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ obj-$(CONFIG_MODULES) += $(module-y)

pci64-$(CONFIG_PPC64)		+= pci_64.o pci_dn.o isa-bridge.o
pci32-$(CONFIG_PPC32)		:= pci_32.o
obj-$(CONFIG_PCI)		+= $(pci64-y) $(pci32-y)
obj-$(CONFIG_PCI)		+= $(pci64-y) $(pci32-y) pci-common.o
obj-$(CONFIG_PCI_MSI)		+= msi.o
kexec-$(CONFIG_PPC64)		:= machine_kexec_64.o
kexec-$(CONFIG_PPC32)		:= machine_kexec_32.o
+53 −0
Original line number Diff line number Diff line
/*
 * Contains common pci routines for ALL ppc platform
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version
 * 2 of the License, or (at your option) any later version.
 */

#undef DEBUG

#include <linux/kernel.h>
#include <linux/pci.h>
#include <linux/string.h>
#include <linux/init.h>
#include <linux/bootmem.h>
#include <linux/mm.h>
#include <linux/list.h>
#include <linux/syscalls.h>
#include <linux/irq.h>
#include <linux/vmalloc.h>

#include <asm/processor.h>
#include <asm/io.h>
#include <asm/prom.h>
#include <asm/pci-bridge.h>
#include <asm/byteorder.h>
#include <asm/machdep.h>
#include <asm/ppc-pci.h>
#include <asm/firmware.h>

#ifdef DEBUG
#include <asm/udbg.h>
#define DBG(fmt...) printk(fmt)
#else
#define DBG(fmt...)
#endif

/*
 * Return the domain number for this bus.
 */
int pci_domain_nr(struct pci_bus *bus)
{
	if (firmware_has_feature(FW_FEATURE_ISERIES))
		return 0;
	else {
		struct pci_controller *hose = pci_bus_to_host(bus);

		return hose->global_number;
	}
}

EXPORT_SYMBOL(pci_domain_nr);
+3 −3
Original line number Diff line number Diff line
@@ -620,7 +620,7 @@ pcibios_alloc_controller(void)
	*hose_tail = hose;
	hose_tail = &hose->next;

	hose->index = next_controller_index++;
	hose->global_number = next_controller_index++;

	return hose;
}
@@ -1336,7 +1336,7 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)
		if (!res->flags) {
			if (io_offset)
				printk(KERN_ERR "I/O resource not set for host"
				       " bridge %d\n", hose->index);
				       " bridge %d\n", hose->global_number);
			res->start = 0;
			res->end = IO_SPACE_LIMIT;
			res->flags = IORESOURCE_IO;
@@ -1350,7 +1350,7 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)
				if (i > 0)
					continue;
				printk(KERN_ERR "Memory resource not set for "
				       "host bridge %d\n", hose->index);
				       "host bridge %d\n", hose->global_number);
				res->start = hose->pci_mem_offset;
				res->end = ~0U;
				res->flags = IORESOURCE_MEM;
+0 −16
Original line number Diff line number Diff line
@@ -636,22 +636,6 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
	return 0;
}

/*
 * Return the domain number for this bus.
 */
int pci_domain_nr(struct pci_bus *bus)
{
	if (firmware_has_feature(FW_FEATURE_ISERIES))
		return 0;
	else {
		struct pci_controller *hose = pci_bus_to_host(bus);

		return hose->global_number;
	}
}

EXPORT_SYMBOL(pci_domain_nr);

/* Decide whether to display the domain number in /proc */
int pci_proc_domain(struct pci_bus *bus)
{
+2 −2
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ static int rtas_read_config(struct pci_bus *bus, unsigned int devfn, int offset,
	struct pci_controller *hose = bus->sysdata;
	unsigned long addr = (offset & 0xff) | ((devfn & 0xff) << 8)
	    | (((bus->number - hose->first_busno) & 0xff) << 16)
	    | (hose->index << 24);
	    | (hose->global_number << 24);
	int ret = -1;
	int rval;

@@ -69,7 +69,7 @@ static int rtas_write_config(struct pci_bus *bus, unsigned int devfn,
	struct pci_controller *hose = bus->sysdata;
	unsigned long addr = (offset & 0xff) | ((devfn & 0xff) << 8)
	    | (((bus->number - hose->first_busno) & 0xff) << 16)
	    | (hose->index << 24);
	    | (hose->global_number << 24);
	int rval;

	rval = rtas_call(rtas_token("write-pci-config"), 3, 1, NULL,
Loading