From 3d372548b4af1a3d0a40f3dde7af5389a30ce359 Mon Sep 17 00:00:00 2001 From: "James.Yang" Date: Wed, 2 May 2007 16:34:43 -0500 Subject: [POWERPC] Remove CPU_FTR_NEED_COHERENT for 7448. Remove CPU_FTR_NEED_COHERENT for MPC7448 (and single-core MPC86xx). This prevents needlessly setting M=1 when not SMP. Signed-off-by: James.Yang Acked-by: Jon Loeliger Signed-off-by: Kumar Gala --- arch/powerpc/kernel/cputable.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'arch/powerpc/kernel') diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 9cb24d20f0f9..6ef87fb90b8e 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c @@ -836,7 +836,7 @@ static struct cpu_spec cpu_specs[] = { .pvr_mask = 0xffff0000, .pvr_value = 0x80040000, .cpu_name = "7448", - .cpu_features = CPU_FTRS_7447A, + .cpu_features = CPU_FTRS_7448, .cpu_user_features = COMMON_USER | PPC_FEATURE_HAS_ALTIVEC_COMP | PPC_FEATURE_PPC_LE, .icache_bsize = 32, -- cgit v1.2.2 From 991eb43af989002d5c7f4a2ff2a6c806a912b51b Mon Sep 17 00:00:00 2001 From: Kumar Gala Date: Mon, 14 May 2007 17:11:58 -0500 Subject: [POWERPC] Fix COMMON symbol warnings We get the following warnings in various ARCH=powerpc builds: WARNING: "ee_restarts" [arch/powerpc/kernel/built-in] is COMMON symbol WARNING: "fee_restarts" [arch/powerpc/kernel/built-in] is COMMON symbol WARNING: "htab_hash_searches" [arch/powerpc/mm/built-in] is COMMON symbol WARNING: "next_slot" [arch/powerpc/mm/built-in] is COMMON symbol WARNING: "mmu_hash_lock" [arch/powerpc/mm/built-in] is COMMON symbol WARNING: "primary_pteg_full" [arch/powerpc/mm/built-in] is COMMON symbol WARNING: "global_dbcr0" [arch/powerpc/kernel/built-in] is COMMON symbol Switch to moving local symbols (except mmu_hash_lock which is global) and space directive instead. Signed-off-by: Kumar Gala --- arch/powerpc/kernel/entry_32.S | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'arch/powerpc/kernel') diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index c29d1652a421..4074c0b31453 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S @@ -596,7 +596,11 @@ fast_exception_return: mr r12,r4 /* restart at exc_exit_restart */ b 2b - .comm fee_restarts,4 + .section .bss + .align 2 +fee_restarts: + .space 4 + .previous /* aargh, a nonrecoverable interrupt, panic */ /* aargh, we don't know which trap this is */ @@ -851,7 +855,11 @@ load_dbcr0: mtspr SPRN_DBSR,r11 /* clear all pending debug events */ blr - .comm global_dbcr0,8 + .section .bss + .align 4 +global_dbcr0: + .space 8 + .previous #endif /* !(CONFIG_4xx || CONFIG_BOOKE) */ do_work: /* r10 contains MSR_KERNEL here */ @@ -926,7 +934,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_601) /* shouldn't return */ b 4b - .comm ee_restarts,4 + .section .bss + .align 2 +ee_restarts: + .space 4 + .previous /* * PROM code for specific machines follows. Put it -- cgit v1.2.2 From de821204dbd0a967f77213daf7b89070a65e7523 Mon Sep 17 00:00:00 2001 From: Benjamin Herrenschmidt Date: Tue, 15 May 2007 16:19:36 +1000 Subject: [POWERPC] Fix IO space on PCI buses created from of_platform This changes the way of_platform_pci creates PCI host bridges such that it uses request_phb_iospace() for mapping the IO ports, instead of using the dynamic hotplug stuff. That guarantees the IO space stays within the 2GB limit and thus doesn't break half of the legacy drivers around. Fixes a couple of warnings due to missing IO space while at it. This patch is a temporary workaround for 2.6.22 before a more complete rewrite of IO mappings is merged in 2.6.23 Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Paul Mackerras --- arch/powerpc/kernel/of_platform.c | 10 ++++++---- arch/powerpc/kernel/pci_64.c | 23 ++++++++++++++++++++++- 2 files changed, 28 insertions(+), 5 deletions(-) (limited to 'arch/powerpc/kernel') diff --git a/arch/powerpc/kernel/of_platform.c b/arch/powerpc/kernel/of_platform.c index 84c34d979a88..d501c23e5159 100644 --- a/arch/powerpc/kernel/of_platform.c +++ b/arch/powerpc/kernel/of_platform.c @@ -427,11 +427,13 @@ static int __devinit of_pci_phb_probe(struct of_device *dev, /* Process "ranges" property */ pci_process_bridge_OF_ranges(phb, dev->node, 0); - /* Setup IO space. - * This will not work properly for ISA IOs, something needs to be done - * about it if we ever generalize that way of probing PCI brigdes + /* Setup IO space. We use the non-dynamic version of that code here, + * which doesn't quite support unplugging. Next kernel release will + * have a better fix for this. + * Note also that we don't do ISA, this will also be fixed with a + * more massive rework. */ - pci_setup_phb_io_dynamic(phb, 0); + pci_setup_phb_io(phb, 0); /* Init pci_dn data structures */ pci_devs_phb_init_dynamic(phb); diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index b0409e19b1c1..249cca27a9b8 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c @@ -41,6 +41,7 @@ unsigned long pci_probe_only = 1; int pci_assign_all_buses = 0; +static int pci_initial_scan_done; static void fixup_resource(struct resource *res, struct pci_dev *dev); static void do_bus_setup(struct pci_bus *bus); @@ -604,6 +605,8 @@ static int __init pcibios_init(void) /* map in PCI I/O space */ phbs_remap_io(); + pci_initial_scan_done = 1; + printk(KERN_DEBUG "PCI: Probing PCI hardware done\n"); return 0; @@ -1042,13 +1045,16 @@ void __devinit pci_process_bridge_OF_ranges(struct pci_controller *hose, } } -void __init pci_setup_phb_io(struct pci_controller *hose, int primary) +void __devinit pci_setup_phb_io(struct pci_controller *hose, int primary) { unsigned long size = hose->pci_io_size; unsigned long io_virt_offset; struct resource *res; struct device_node *isa_dn; + if (size == 0) + return; + hose->io_base_virt = reserve_phb_iospace(size); DBG("phb%d io_base_phys 0x%lx io_base_virt 0x%lx\n", hose->global_number, hose->io_base_phys, @@ -1069,6 +1075,15 @@ void __init pci_setup_phb_io(struct pci_controller *hose, int primary) res = &hose->io_resource; res->start += io_virt_offset; res->end += io_virt_offset; + + /* If this is called after the initial PCI scan, then we need to + * proceed to IO mappings now + */ + if (pci_initial_scan_done) + __ioremap_explicit(hose->io_base_phys, + (unsigned long)hose->io_base_virt, + hose->pci_io_size, + _PAGE_NO_CACHE | _PAGE_GUARDED); } void __devinit pci_setup_phb_io_dynamic(struct pci_controller *hose, @@ -1078,6 +1093,9 @@ void __devinit pci_setup_phb_io_dynamic(struct pci_controller *hose, unsigned long io_virt_offset; struct resource *res; + if (size == 0) + return; + hose->io_base_virt = __ioremap(hose->io_base_phys, size, _PAGE_NO_CACHE | _PAGE_GUARDED); DBG("phb%d io_base_phys 0x%lx io_base_virt 0x%lx\n", @@ -1106,6 +1124,9 @@ static int get_bus_io_range(struct pci_bus *bus, unsigned long *start_phys, /* Root Bus */ res = &hose->io_resource; + if (res->end == 0 && res->start == 0) + return 1; + *start_virt = pci_io_base + res->start; *start_phys = *start_virt + hose->io_base_phys - (unsigned long) hose->io_base_virt; -- cgit v1.2.2 From 847f5976f90d5637a86a826c1c594091d08f3156 Mon Sep 17 00:00:00 2001 From: Benjamin Herrenschmidt Date: Wed, 16 May 2007 16:57:24 +1000 Subject: [POWERPC] Make sure device node type/name is not NULL on hot-added nodes Our device-tree unflattening code makes sure the name and type fields of a device-node are not NULL. However, the code for dynamically adding devices nodes which is used for pSeries hotplug for example didn't do it, potentially causing crashes in some code that assume it can always do things like strcmp on those. Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Paul Mackerras --- arch/powerpc/kernel/prom.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'arch/powerpc/kernel') diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index c065b5550368..066a6a7a25b8 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c @@ -1472,6 +1472,11 @@ static int of_finish_dynamic_node(struct device_node *node) node->name = of_get_property(node, "name", NULL); node->type = of_get_property(node, "device_type", NULL); + if (!node->name) + node->name = ""; + if (!node->type) + node->type = ""; + if (!parent) { err = -ENODEV; goto out; -- cgit v1.2.2 From 9a6b50703e95b638f610a65ffcc5faf4356f73c9 Mon Sep 17 00:00:00 2001 From: Segher Boessenkool Date: Wed, 16 May 2007 23:12:17 +1000 Subject: [POWERPC] Fix ppc_rtas_progress_show() Fixes the warning arch/powerpc/kernel/rtas-proc.c: In function 'ppc_rtas_progress_show': arch/powerpc/kernel/rtas-proc.c:382: warning: the address of 'progress_led' will always evaluate as 'true' by fixing the code to do what it presumably is meant to do. Signed-off-by: Segher Boessenkool Signed-off-by: Paul Mackerras --- arch/powerpc/kernel/rtas-proc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'arch/powerpc/kernel') diff --git a/arch/powerpc/kernel/rtas-proc.c b/arch/powerpc/kernel/rtas-proc.c index 190b7ed1dbfb..f2e3bc714d76 100644 --- a/arch/powerpc/kernel/rtas-proc.c +++ b/arch/powerpc/kernel/rtas-proc.c @@ -379,7 +379,7 @@ static ssize_t ppc_rtas_progress_write(struct file *file, /* ****************************************************************** */ static int ppc_rtas_progress_show(struct seq_file *m, void *v) { - if (progress_led) + if (progress_led[0]) seq_printf(m, "%s\n", progress_led); return 0; } -- cgit v1.2.2