Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: [POWERPC] Fix zImage.coff generation for 32-bit pmac [POWERPC] Fix compile breakage for IBM/AMCC 4xx arch/ppc platforms [POWERPC] Don't allow PMAC_APM_EMU for 64-bit [POWERPC] Compare irq numbers with NO_IRQ not IRQ_NONE [POWERPC] Fix return from pte_alloc_one() in out-of-memory case [POWERPC] Fix compile warning in pseries xics code [POWERPC] Don't use HOSTCFLAGS in BOOTCFLAGS [POWERPC] Create a zImage for legacy iSeries [POWERPC] pasemi idle uses hard_smp_processor_id [POWERPC] ps3/interrupt.c uses get_hard_smp_processor_id [POWERPC] Fix possible access to free pages [POWERPC] Fix compiler/assembler flags for Ebony platform boot files [POWERPC] Fix ppc32 single-stepping out of syscalls [POWERPC] Update documentation for of_find_node_by_type()
This commit is contained in:
commit
20c4856b1d
|
@ -142,7 +142,6 @@ drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/
|
||||||
|
|
||||||
# Default to zImage, override when needed
|
# Default to zImage, override when needed
|
||||||
defaultimage-y := zImage
|
defaultimage-y := zImage
|
||||||
defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux
|
|
||||||
defaultimage-$(CONFIG_DEFAULT_UIMAGE) := uImage
|
defaultimage-$(CONFIG_DEFAULT_UIMAGE) := uImage
|
||||||
KBUILD_IMAGE := $(defaultimage-y)
|
KBUILD_IMAGE := $(defaultimage-y)
|
||||||
all: $(KBUILD_IMAGE)
|
all: $(KBUILD_IMAGE)
|
||||||
|
|
|
@ -11,20 +11,18 @@
|
||||||
# bootloader and increase compatibility with OpenFirmware.
|
# bootloader and increase compatibility with OpenFirmware.
|
||||||
#
|
#
|
||||||
# To this end we need to define BOOTCC, etc, as the tools
|
# To this end we need to define BOOTCC, etc, as the tools
|
||||||
# needed to build the 32 bit image. These are normally HOSTCC,
|
# needed to build the 32 bit image. That's normally the same
|
||||||
# but may be a third compiler if, for example, you are cross
|
# compiler for the rest of the kernel, with the -m32 flag added.
|
||||||
# compiling from an intel box. Once the 64bit ppc gcc is
|
|
||||||
# stable it will probably simply be a compiler switch to
|
|
||||||
# compile for 32bit mode.
|
|
||||||
# To make it easier to setup a cross compiler,
|
# To make it easier to setup a cross compiler,
|
||||||
# CROSS32_COMPILE is setup as a prefix just like CROSS_COMPILE
|
# CROSS32_COMPILE is setup as a prefix just like CROSS_COMPILE
|
||||||
# in the toplevel makefile.
|
# in the toplevel makefile.
|
||||||
|
|
||||||
all: $(obj)/zImage
|
all: $(obj)/zImage
|
||||||
|
|
||||||
HOSTCC := gcc
|
BOOTCFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
||||||
BOOTCFLAGS := $(HOSTCFLAGS) -fno-builtin -nostdinc -isystem \
|
-fno-strict-aliasing -Os -msoft-float -pipe \
|
||||||
$(shell $(CROSS32CC) -print-file-name=include) -fPIC
|
-fomit-frame-pointer -fno-builtin -fPIC -nostdinc \
|
||||||
|
-isystem $(shell $(CROSS32CC) -print-file-name=include)
|
||||||
BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
|
BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
|
||||||
|
|
||||||
ifeq ($(call cc-option-yn, -fstack-protector),y)
|
ifeq ($(call cc-option-yn, -fstack-protector),y)
|
||||||
|
@ -33,8 +31,8 @@ endif
|
||||||
|
|
||||||
BOOTCFLAGS += -I$(obj) -I$(srctree)/$(obj)
|
BOOTCFLAGS += -I$(obj) -I$(srctree)/$(obj)
|
||||||
|
|
||||||
$(obj)/44x.o: BOOTCFLAGS += -Wa,-mbooke
|
$(obj)/44x.o: BOOTCFLAGS += -mcpu=440
|
||||||
$(obj)/ebony.o: BOOTCFLAGS += -Wa,-mbooke
|
$(obj)/ebony.o: BOOTCFLAGS += -mcpu=440
|
||||||
|
|
||||||
zlib := inffast.c inflate.c inftrees.c
|
zlib := inffast.c inflate.c inftrees.c
|
||||||
zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h
|
zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h
|
||||||
|
@ -136,6 +134,7 @@ image-$(CONFIG_PPC_EFIKA) += zImage.chrp
|
||||||
image-$(CONFIG_PPC_PMAC) += zImage.pmac
|
image-$(CONFIG_PPC_PMAC) += zImage.pmac
|
||||||
image-$(CONFIG_PPC_HOLLY) += zImage.holly-elf
|
image-$(CONFIG_PPC_HOLLY) += zImage.holly-elf
|
||||||
image-$(CONFIG_PPC_PRPMC2800) += zImage.prpmc2800
|
image-$(CONFIG_PPC_PRPMC2800) += zImage.prpmc2800
|
||||||
|
image-$(CONFIG_PPC_ISERIES) += zImage.iseries
|
||||||
image-$(CONFIG_DEFAULT_UIMAGE) += uImage
|
image-$(CONFIG_DEFAULT_UIMAGE) += uImage
|
||||||
|
|
||||||
ifneq ($(CONFIG_DEVICE_TREE),"")
|
ifneq ($(CONFIG_DEVICE_TREE),"")
|
||||||
|
@ -185,6 +184,9 @@ $(obj)/zImage.initrd.%: vmlinux $(wrapperbits)
|
||||||
$(obj)/zImage.%: vmlinux $(wrapperbits)
|
$(obj)/zImage.%: vmlinux $(wrapperbits)
|
||||||
$(call if_changed,wrap,$*)
|
$(call if_changed,wrap,$*)
|
||||||
|
|
||||||
|
$(obj)/zImage.iseries: vmlinux
|
||||||
|
$(STRIP) -s -R .comment $< -o $@
|
||||||
|
|
||||||
$(obj)/zImage.ps3: vmlinux
|
$(obj)/zImage.ps3: vmlinux
|
||||||
$(STRIP) -s -R .comment $< -o $@
|
$(STRIP) -s -R .comment $< -o $@
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ case "$platform" in
|
||||||
pmac|pseries|chrp)
|
pmac|pseries|chrp)
|
||||||
platformo=$object/of.o
|
platformo=$object/of.o
|
||||||
;;
|
;;
|
||||||
pmaccoff)
|
coff)
|
||||||
platformo=$object/of.o
|
platformo=$object/of.o
|
||||||
lds=$object/zImage.coff.lds
|
lds=$object/zImage.coff.lds
|
||||||
;;
|
;;
|
||||||
|
@ -220,7 +220,7 @@ case "$platform" in
|
||||||
pseries|chrp)
|
pseries|chrp)
|
||||||
$object/addnote "$ofile"
|
$object/addnote "$ofile"
|
||||||
;;
|
;;
|
||||||
pmaccoff)
|
coff)
|
||||||
${CROSS}objcopy -O aixcoff-rs6000 --set-start "$entry" "$ofile"
|
${CROSS}objcopy -O aixcoff-rs6000 --set-start "$entry" "$ofile"
|
||||||
$object/hack-coff "$ofile"
|
$object/hack-coff "$ofile"
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -489,7 +489,7 @@ struct irq_host *irq_alloc_host(unsigned int revmap_type,
|
||||||
case IRQ_HOST_MAP_LINEAR:
|
case IRQ_HOST_MAP_LINEAR:
|
||||||
rmap = (unsigned int *)(host + 1);
|
rmap = (unsigned int *)(host + 1);
|
||||||
for (i = 0; i < revmap_arg; i++)
|
for (i = 0; i < revmap_arg; i++)
|
||||||
rmap[i] = IRQ_NONE;
|
rmap[i] = NO_IRQ;
|
||||||
host->revmap_data.linear.size = revmap_arg;
|
host->revmap_data.linear.size = revmap_arg;
|
||||||
smp_wmb();
|
smp_wmb();
|
||||||
host->revmap_data.linear.revmap = rmap;
|
host->revmap_data.linear.revmap = rmap;
|
||||||
|
@ -614,7 +614,7 @@ unsigned int irq_create_mapping(struct irq_host *host,
|
||||||
* host->ops->map() to update the flags
|
* host->ops->map() to update the flags
|
||||||
*/
|
*/
|
||||||
virq = irq_find_mapping(host, hwirq);
|
virq = irq_find_mapping(host, hwirq);
|
||||||
if (virq != IRQ_NONE) {
|
if (virq != NO_IRQ) {
|
||||||
if (host->ops->remap)
|
if (host->ops->remap)
|
||||||
host->ops->remap(host, virq, hwirq);
|
host->ops->remap(host, virq, hwirq);
|
||||||
pr_debug("irq: -> existing mapping on virq %d\n", virq);
|
pr_debug("irq: -> existing mapping on virq %d\n", virq);
|
||||||
|
@ -741,7 +741,7 @@ void irq_dispose_mapping(unsigned int virq)
|
||||||
switch(host->revmap_type) {
|
switch(host->revmap_type) {
|
||||||
case IRQ_HOST_MAP_LINEAR:
|
case IRQ_HOST_MAP_LINEAR:
|
||||||
if (hwirq < host->revmap_data.linear.size)
|
if (hwirq < host->revmap_data.linear.size)
|
||||||
host->revmap_data.linear.revmap[hwirq] = IRQ_NONE;
|
host->revmap_data.linear.revmap[hwirq] = NO_IRQ;
|
||||||
break;
|
break;
|
||||||
case IRQ_HOST_MAP_TREE:
|
case IRQ_HOST_MAP_TREE:
|
||||||
/* Check if radix tree allocated yet */
|
/* Check if radix tree allocated yet */
|
||||||
|
|
|
@ -1171,11 +1171,12 @@ EXPORT_SYMBOL(of_find_node_by_name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* of_find_node_by_type - Find a node by its "device_type" property
|
* of_find_node_by_type - Find a node by its "device_type" property
|
||||||
* @from: The node to start searching from or NULL, the node
|
* @from: The node to start searching from, or NULL to start searching
|
||||||
* you pass will not be searched, only the next one
|
* the entire device tree. The node you pass will not be
|
||||||
* will; typically, you pass what the previous call
|
* searched, only the next one will; typically, you pass
|
||||||
* returned. of_node_put() will be called on it
|
* what the previous call returned. of_node_put() will be
|
||||||
* @name: The type string to match against
|
* called on from for you.
|
||||||
|
* @type: The type string to match against
|
||||||
*
|
*
|
||||||
* Returns a node pointer with refcount incremented, use
|
* Returns a node pointer with refcount incremented, use
|
||||||
* of_node_put() on it when done.
|
* of_node_put() on it when done.
|
||||||
|
|
|
@ -218,6 +218,7 @@ set_single_step(struct task_struct *task)
|
||||||
regs->msr |= MSR_SE;
|
regs->msr |= MSR_SE;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
set_tsk_thread_flag(task, TIF_SINGLESTEP);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
@ -233,6 +234,7 @@ clear_single_step(struct task_struct *task)
|
||||||
regs->msr &= ~MSR_SE;
|
regs->msr &= ~MSR_SE;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
clear_tsk_thread_flag(task, TIF_SINGLESTEP);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_PPC32 */
|
#endif /* CONFIG_PPC32 */
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
#include <asm/machdep.h>
|
#include <asm/machdep.h>
|
||||||
#include <asm/reg.h>
|
#include <asm/reg.h>
|
||||||
|
#include <asm/smp.h>
|
||||||
|
|
||||||
#include "pasemi.h"
|
#include "pasemi.h"
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <asm/machdep.h>
|
#include <asm/machdep.h>
|
||||||
#include <asm/udbg.h>
|
#include <asm/udbg.h>
|
||||||
#include <asm/lv1call.h>
|
#include <asm/lv1call.h>
|
||||||
|
#include <asm/smp.h>
|
||||||
|
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
|
|
||||||
|
|
|
@ -752,6 +752,7 @@ skip_gserver_check:
|
||||||
void xics_request_IPIs(void)
|
void xics_request_IPIs(void)
|
||||||
{
|
{
|
||||||
unsigned int ipi;
|
unsigned int ipi;
|
||||||
|
int rc;
|
||||||
|
|
||||||
ipi = irq_create_mapping(xics_host, XICS_IPI);
|
ipi = irq_create_mapping(xics_host, XICS_IPI);
|
||||||
BUG_ON(ipi == NO_IRQ);
|
BUG_ON(ipi == NO_IRQ);
|
||||||
|
@ -762,11 +763,12 @@ void xics_request_IPIs(void)
|
||||||
*/
|
*/
|
||||||
set_irq_handler(ipi, handle_percpu_irq);
|
set_irq_handler(ipi, handle_percpu_irq);
|
||||||
if (firmware_has_feature(FW_FEATURE_LPAR))
|
if (firmware_has_feature(FW_FEATURE_LPAR))
|
||||||
request_irq(ipi, xics_ipi_action_lpar, IRQF_DISABLED,
|
rc = request_irq(ipi, xics_ipi_action_lpar, IRQF_DISABLED,
|
||||||
"IPI", NULL);
|
"IPI", NULL);
|
||||||
else
|
else
|
||||||
request_irq(ipi, xics_ipi_action_direct, IRQF_DISABLED,
|
rc = request_irq(ipi, xics_ipi_action_direct, IRQF_DISABLED,
|
||||||
"IPI", NULL);
|
"IPI", NULL);
|
||||||
|
BUG_ON(rc);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <asm/ibm4xx.h>
|
||||||
#include <asm/ocp.h>
|
#include <asm/ocp.h>
|
||||||
|
|
||||||
struct ocp_sys_info_data ocp_sys_info = {
|
struct ocp_sys_info_data ocp_sys_info = {
|
||||||
|
|
|
@ -114,7 +114,7 @@ config PMAC_SMU
|
||||||
config PMAC_APM_EMU
|
config PMAC_APM_EMU
|
||||||
tristate "APM emulation"
|
tristate "APM emulation"
|
||||||
select APM_EMULATION
|
select APM_EMULATION
|
||||||
depends on ADB_PMU && PM
|
depends on ADB_PMU && PM && PPC32
|
||||||
|
|
||||||
config PMAC_MEDIABAY
|
config PMAC_MEDIABAY
|
||||||
bool "Support PowerBook hotswap media bay"
|
bool "Support PowerBook hotswap media bay"
|
||||||
|
|
|
@ -90,7 +90,8 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
|
||||||
static inline struct page *pte_alloc_one(struct mm_struct *mm,
|
static inline struct page *pte_alloc_one(struct mm_struct *mm,
|
||||||
unsigned long address)
|
unsigned long address)
|
||||||
{
|
{
|
||||||
return virt_to_page(pte_alloc_one_kernel(mm, address));
|
pte_t *pte = pte_alloc_one_kernel(mm, address);
|
||||||
|
return pte ? virt_to_page(pte) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void pte_free_kernel(pte_t *pte)
|
static inline void pte_free_kernel(pte_t *pte)
|
||||||
|
|
|
@ -38,6 +38,15 @@ extern void pte_free_finish(void);
|
||||||
|
|
||||||
static inline void tlb_flush(struct mmu_gather *tlb)
|
static inline void tlb_flush(struct mmu_gather *tlb)
|
||||||
{
|
{
|
||||||
|
struct ppc64_tlb_batch *tlbbatch = &__get_cpu_var(ppc64_tlb_batch);
|
||||||
|
|
||||||
|
/* If there's a TLB batch pending, then we must flush it because the
|
||||||
|
* pages are going to be freed and we really don't want to have a CPU
|
||||||
|
* access a freed page because it has a stale TLB
|
||||||
|
*/
|
||||||
|
if (tlbbatch->index)
|
||||||
|
__flush_tlb_pending(tlbbatch);
|
||||||
|
|
||||||
pte_free_finish();
|
pte_free_finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue