Merge branch 'merge' into next

Merge a pile of fixes that went into the "merge" branch (3.13-rc's) such
as Anton Little Endian fixes.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
Benjamin Herrenschmidt 2013-12-30 15:19:31 +11:00
commit dece8ada99
33 changed files with 172 additions and 126 deletions

View File

@ -77,7 +77,6 @@
compatible = "fsl,mpc5121-immr"; compatible = "fsl,mpc5121-immr";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
#interrupt-cells = <2>;
ranges = <0x0 0x80000000 0x400000>; ranges = <0x0 0x80000000 0x400000>;
reg = <0x80000000 0x400000>; reg = <0x80000000 0x400000>;
bus-frequency = <66000000>; /* 66 MHz ips bus */ bus-frequency = <66000000>; /* 66 MHz ips bus */

View File

@ -58,7 +58,6 @@
compatible = "fsl,mpc5121-immr"; compatible = "fsl,mpc5121-immr";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
#interrupt-cells = <2>;
ranges = <0x0 0x80000000 0x400000>; ranges = <0x0 0x80000000 0x400000>;
reg = <0x80000000 0x400000>; reg = <0x80000000 0x400000>;
bus-frequency = <66000000>; // 66 MHz ips bus bus-frequency = <66000000>; // 66 MHz ips bus
@ -189,6 +188,10 @@
reg = <0xA000 0x1000>; reg = <0xA000 0x1000>;
}; };
// disable USB1 port
// TODO:
// correct pinmux config and fix USB3320 ulpi dependency
// before re-enabling it
usb@3000 { usb@3000 {
compatible = "fsl,mpc5121-usb2-dr"; compatible = "fsl,mpc5121-usb2-dr";
reg = <0x3000 0x400>; reg = <0x3000 0x400>;
@ -197,6 +200,7 @@
interrupts = <43 0x8>; interrupts = <43 0x8>;
dr_mode = "host"; dr_mode = "host";
phy_type = "ulpi"; phy_type = "ulpi";
status = "disabled";
}; };
// 5125 PSCs are not 52xx or 5121 PSC compatible // 5125 PSCs are not 52xx or 5121 PSC compatible

View File

@ -12,7 +12,6 @@ CONFIG_EXPERT=y
CONFIG_PPC_MPC52xx=y CONFIG_PPC_MPC52xx=y
CONFIG_PPC_MPC5200_SIMPLE=y CONFIG_PPC_MPC5200_SIMPLE=y
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
CONFIG_PPC_BESTCOMM=y
CONFIG_SPARSE_IRQ=y CONFIG_SPARSE_IRQ=y
CONFIG_PM=y CONFIG_PM=y
# CONFIG_PCI is not set # CONFIG_PCI is not set
@ -71,6 +70,8 @@ CONFIG_USB_DEVICEFS=y
CONFIG_USB_OHCI_HCD=y CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE=y
CONFIG_DMADEVICES=y
CONFIG_PPC_BESTCOMM=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set

View File

@ -15,7 +15,6 @@ CONFIG_PPC_MPC52xx=y
CONFIG_PPC_MPC5200_SIMPLE=y CONFIG_PPC_MPC5200_SIMPLE=y
CONFIG_PPC_LITE5200=y CONFIG_PPC_LITE5200=y
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
CONFIG_PPC_BESTCOMM=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
CONFIG_SPARSE_IRQ=y CONFIG_SPARSE_IRQ=y
@ -59,6 +58,8 @@ CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MPC=y CONFIG_I2C_MPC=y
# CONFIG_HWMON is not set # CONFIG_HWMON is not set
CONFIG_VIDEO_OUTPUT_CONTROL=m CONFIG_VIDEO_OUTPUT_CONTROL=m
CONFIG_DMADEVICES=y
CONFIG_PPC_BESTCOMM=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set

View File

@ -12,7 +12,6 @@ CONFIG_EXPERT=y
CONFIG_PPC_MPC52xx=y CONFIG_PPC_MPC52xx=y
CONFIG_PPC_MPC5200_SIMPLE=y CONFIG_PPC_MPC5200_SIMPLE=y
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
CONFIG_PPC_BESTCOMM=y
CONFIG_SPARSE_IRQ=y CONFIG_SPARSE_IRQ=y
CONFIG_PM=y CONFIG_PM=y
# CONFIG_PCI is not set # CONFIG_PCI is not set
@ -84,6 +83,8 @@ CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y CONFIG_RTC_DRV_DS1307=y
CONFIG_DMADEVICES=y
CONFIG_PPC_BESTCOMM=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set

View File

@ -21,7 +21,6 @@ CONFIG_MODULE_UNLOAD=y
CONFIG_PPC_MPC52xx=y CONFIG_PPC_MPC52xx=y
CONFIG_PPC_MPC5200_SIMPLE=y CONFIG_PPC_MPC5200_SIMPLE=y
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
CONFIG_PPC_BESTCOMM=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
CONFIG_HZ_100=y CONFIG_HZ_100=y
@ -87,6 +86,8 @@ CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
CONFIG_USB_STORAGE=m CONFIG_USB_STORAGE=m
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF8563=m
CONFIG_DMADEVICES=y
CONFIG_PPC_BESTCOMM=y
CONFIG_EXT2_FS=m CONFIG_EXT2_FS=m
CONFIG_EXT3_FS=m CONFIG_EXT3_FS=m
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set

View File

@ -17,7 +17,6 @@ CONFIG_PPC_MPC52xx=y
CONFIG_PPC_MPC5200_SIMPLE=y CONFIG_PPC_MPC5200_SIMPLE=y
CONFIG_PPC_MPC5200_BUGFIX=y CONFIG_PPC_MPC5200_BUGFIX=y
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
CONFIG_PPC_BESTCOMM=y
CONFIG_PM=y CONFIG_PM=y
# CONFIG_PCI is not set # CONFIG_PCI is not set
CONFIG_NET=y CONFIG_NET=y
@ -86,6 +85,8 @@ CONFIG_USB_STORAGE=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y CONFIG_RTC_DRV_DS1307=y
CONFIG_RTC_DRV_DS1374=y CONFIG_RTC_DRV_DS1374=y
CONFIG_DMADEVICES=y
CONFIG_PPC_BESTCOMM=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set

View File

@ -15,7 +15,6 @@ CONFIG_PPC_MEDIA5200=y
CONFIG_PPC_MPC5200_BUGFIX=y CONFIG_PPC_MPC5200_BUGFIX=y
CONFIG_PPC_MPC5200_LPBFIFO=m CONFIG_PPC_MPC5200_LPBFIFO=m
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
CONFIG_PPC_BESTCOMM=y
CONFIG_SIMPLE_GPIO=y CONFIG_SIMPLE_GPIO=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
@ -125,6 +124,8 @@ CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y CONFIG_RTC_DRV_DS1307=y
CONFIG_RTC_DRV_DS1374=y CONFIG_RTC_DRV_DS1374=y
CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF8563=m
CONFIG_DMADEVICES=y
CONFIG_PPC_BESTCOMM=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set

View File

@ -2,7 +2,6 @@ CONFIG_PPC64=y
CONFIG_ALTIVEC=y CONFIG_ALTIVEC=y
CONFIG_SMP=y CONFIG_SMP=y
CONFIG_NR_CPUS=2 CONFIG_NR_CPUS=2
CONFIG_EXPERIMENTAL=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
@ -45,8 +44,9 @@ CONFIG_INET_AH=y
CONFIG_INET_ESP=y CONFIG_INET_ESP=y
# CONFIG_IPV6 is not set # CONFIG_IPV6 is not set
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_MTD=y CONFIG_MTD=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLOCK=y CONFIG_MTD_BLOCK=y
CONFIG_MTD_SLRAM=y CONFIG_MTD_SLRAM=y
CONFIG_MTD_PHRAM=y CONFIG_MTD_PHRAM=y
@ -88,7 +88,6 @@ CONFIG_BLK_DEV_DM=y
CONFIG_DM_CRYPT=y CONFIG_DM_CRYPT=y
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
CONFIG_DUMMY=y CONFIG_DUMMY=y
CONFIG_MII=y
CONFIG_TIGON3=y CONFIG_TIGON3=y
CONFIG_E1000=y CONFIG_E1000=y
CONFIG_PASEMI_MAC=y CONFIG_PASEMI_MAC=y
@ -174,8 +173,8 @@ CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_1=y
CONFIG_CRC_CCITT=y CONFIG_CRC_CCITT=y
CONFIG_PRINTK_TIME=y CONFIG_PRINTK_TIME=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_FS=y CONFIG_DEBUG_FS=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DETECT_HUNG_TASK=y
# CONFIG_SCHED_DEBUG is not set # CONFIG_SCHED_DEBUG is not set

View File

@ -284,7 +284,7 @@ do_kvm_##n: \
subi r1,r1,INT_FRAME_SIZE; /* alloc frame on kernel stack */ \ subi r1,r1,INT_FRAME_SIZE; /* alloc frame on kernel stack */ \
beq- 1f; \ beq- 1f; \
ld r1,PACAKSAVE(r13); /* kernel stack to use */ \ ld r1,PACAKSAVE(r13); /* kernel stack to use */ \
1: cmpdi cr1,r1,0; /* check if r1 is in userspace */ \ 1: cmpdi cr1,r1,-INT_FRAME_SIZE; /* check if r1 is in userspace */ \
blt+ cr1,3f; /* abort if it is */ \ blt+ cr1,3f; /* abort if it is */ \
li r1,(n); /* will be reloaded later */ \ li r1,(n); /* will be reloaded later */ \
sth r1,PACA_TRAP_SAVE(r13); \ sth r1,PACA_TRAP_SAVE(r13); \

View File

@ -811,13 +811,13 @@ int64_t opal_pci_next_error(uint64_t phb_id, uint64_t *first_frozen_pe,
int64_t opal_pci_poll(uint64_t phb_id); int64_t opal_pci_poll(uint64_t phb_id);
int64_t opal_return_cpu(void); int64_t opal_return_cpu(void);
int64_t opal_xscom_read(uint32_t gcid, uint32_t pcb_addr, uint64_t *val); int64_t opal_xscom_read(uint32_t gcid, uint32_t pcb_addr, __be64 *val);
int64_t opal_xscom_write(uint32_t gcid, uint32_t pcb_addr, uint64_t val); int64_t opal_xscom_write(uint32_t gcid, uint32_t pcb_addr, uint64_t val);
int64_t opal_lpc_write(uint32_t chip_id, enum OpalLPCAddressType addr_type, int64_t opal_lpc_write(uint32_t chip_id, enum OpalLPCAddressType addr_type,
uint32_t addr, uint32_t data, uint32_t sz); uint32_t addr, uint32_t data, uint32_t sz);
int64_t opal_lpc_read(uint32_t chip_id, enum OpalLPCAddressType addr_type, int64_t opal_lpc_read(uint32_t chip_id, enum OpalLPCAddressType addr_type,
uint32_t addr, uint32_t *data, uint32_t sz); uint32_t addr, __be32 *data, uint32_t sz);
int64_t opal_validate_flash(uint64_t buffer, uint32_t *size, uint32_t *result); int64_t opal_validate_flash(uint64_t buffer, uint32_t *size, uint32_t *result);
int64_t opal_manage_flash(uint8_t op); int64_t opal_manage_flash(uint8_t op);
int64_t opal_update_flash(uint64_t blk_list); int64_t opal_update_flash(uint64_t blk_list);

View File

@ -84,10 +84,8 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb,
static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table, static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,
unsigned long address) unsigned long address)
{ {
struct page *page = page_address(table);
tlb_flush_pgtable(tlb, address); tlb_flush_pgtable(tlb, address);
pgtable_page_dtor(page); pgtable_page_dtor(table);
pgtable_free_tlb(tlb, page, 0); pgtable_free_tlb(tlb, page_address(table), 0);
} }
#endif /* _ASM_POWERPC_PGALLOC_32_H */ #endif /* _ASM_POWERPC_PGALLOC_32_H */

View File

@ -148,11 +148,9 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb,
static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table, static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,
unsigned long address) unsigned long address)
{ {
struct page *page = page_address(table);
tlb_flush_pgtable(tlb, address); tlb_flush_pgtable(tlb, address);
pgtable_page_dtor(page); pgtable_page_dtor(table);
pgtable_free_tlb(tlb, page, 0); pgtable_free_tlb(tlb, page_address(table), 0);
} }
#else /* if CONFIG_PPC_64K_PAGES */ #else /* if CONFIG_PPC_64K_PAGES */

View File

@ -4,13 +4,18 @@
#ifdef __KERNEL__ #ifdef __KERNEL__
/* /*
* The PowerPC can do unaligned accesses itself in big endian mode. * The PowerPC can do unaligned accesses itself based on its endian mode.
*/ */
#include <linux/unaligned/access_ok.h> #include <linux/unaligned/access_ok.h>
#include <linux/unaligned/generic.h> #include <linux/unaligned/generic.h>
#ifdef __LITTLE_ENDIAN__
#define get_unaligned __get_unaligned_le
#define put_unaligned __put_unaligned_le
#else
#define get_unaligned __get_unaligned_be #define get_unaligned __get_unaligned_be
#define put_unaligned __put_unaligned_be #define put_unaligned __put_unaligned_be
#endif
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#endif /* _ASM_POWERPC_UNALIGNED_H */ #endif /* _ASM_POWERPC_UNALIGNED_H */

View File

@ -124,15 +124,15 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
void crash_free_reserved_phys_range(unsigned long begin, unsigned long end) void crash_free_reserved_phys_range(unsigned long begin, unsigned long end)
{ {
unsigned long addr; unsigned long addr;
const u32 *basep, *sizep; const __be32 *basep, *sizep;
unsigned int rtas_start = 0, rtas_end = 0; unsigned int rtas_start = 0, rtas_end = 0;
basep = of_get_property(rtas.dev, "linux,rtas-base", NULL); basep = of_get_property(rtas.dev, "linux,rtas-base", NULL);
sizep = of_get_property(rtas.dev, "rtas-size", NULL); sizep = of_get_property(rtas.dev, "rtas-size", NULL);
if (basep && sizep) { if (basep && sizep) {
rtas_start = *basep; rtas_start = be32_to_cpup(basep);
rtas_end = *basep + *sizep; rtas_end = rtas_start + be32_to_cpup(sizep);
} }
for (addr = begin; addr < end; addr += PAGE_SIZE) { for (addr = begin; addr < end; addr += PAGE_SIZE) {

View File

@ -80,6 +80,7 @@ END_FTR_SECTION(0, 1)
* of the function that the cpu should jump to to continue * of the function that the cpu should jump to to continue
* initialization. * initialization.
*/ */
.balign 8
.globl __secondary_hold_spinloop .globl __secondary_hold_spinloop
__secondary_hold_spinloop: __secondary_hold_spinloop:
.llong 0x0 .llong 0x0
@ -470,6 +471,7 @@ _STATIC(__after_prom_start)
mtctr r8 mtctr r8
bctr bctr
.balign 8
p_end: .llong _end - _stext p_end: .llong _end - _stext
4: /* Now copy the rest of the kernel up to _end */ 4: /* Now copy the rest of the kernel up to _end */

View File

@ -148,7 +148,7 @@ void __init reserve_crashkernel(void)
* a small SLB (128MB) since the crash kernel needs to place * a small SLB (128MB) since the crash kernel needs to place
* itself and some stacks to be in the first segment. * itself and some stacks to be in the first segment.
*/ */
crashk_res.start = min(0x80000000ULL, (ppc64_rma_size / 2)); crashk_res.start = min(0x8000000ULL, (ppc64_rma_size / 2));
#else #else
crashk_res.start = KDUMP_KERNELBASE; crashk_res.start = KDUMP_KERNELBASE;
#endif #endif

View File

@ -252,8 +252,8 @@ _GLOBAL(__bswapdi2)
or r3,r7,r9 or r3,r7,r9
blr blr
#if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE)
#ifdef CONFIG_PPC_EARLY_DEBUG_BOOTX
_GLOBAL(rmci_on) _GLOBAL(rmci_on)
sync sync
isync isync
@ -283,6 +283,9 @@ _GLOBAL(rmci_off)
isync isync
sync sync
blr blr
#endif /* CONFIG_PPC_EARLY_DEBUG_BOOTX */
#if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE)
/* /*
* Do an IO access in real mode * Do an IO access in real mode

View File

@ -1555,7 +1555,7 @@ long arch_ptrace(struct task_struct *child, long request,
flush_fp_to_thread(child); flush_fp_to_thread(child);
if (fpidx < (PT_FPSCR - PT_FPR0)) if (fpidx < (PT_FPSCR - PT_FPR0))
memcpy(&tmp, &child->thread.fp_state.fpr, memcpy(&tmp, &child->thread.TS_FPR(fpidx),
sizeof(long)); sizeof(long));
else else
tmp = child->thread.fp_state.fpscr; tmp = child->thread.fp_state.fpscr;
@ -1588,7 +1588,7 @@ long arch_ptrace(struct task_struct *child, long request,
flush_fp_to_thread(child); flush_fp_to_thread(child);
if (fpidx < (PT_FPSCR - PT_FPR0)) if (fpidx < (PT_FPSCR - PT_FPR0))
memcpy(&child->thread.fp_state.fpr, &data, memcpy(&child->thread.TS_FPR(fpidx), &data,
sizeof(long)); sizeof(long));
else else
child->thread.fp_state.fpscr = data; child->thread.fp_state.fpscr = data;

View File

@ -479,7 +479,7 @@ void __init smp_setup_cpu_maps(void)
if (machine_is(pseries) && firmware_has_feature(FW_FEATURE_LPAR) && if (machine_is(pseries) && firmware_has_feature(FW_FEATURE_LPAR) &&
(dn = of_find_node_by_path("/rtas"))) { (dn = of_find_node_by_path("/rtas"))) {
int num_addr_cell, num_size_cell, maxcpus; int num_addr_cell, num_size_cell, maxcpus;
const unsigned int *ireg; const __be32 *ireg;
num_addr_cell = of_n_addr_cells(dn); num_addr_cell = of_n_addr_cells(dn);
num_size_cell = of_n_size_cells(dn); num_size_cell = of_n_size_cells(dn);
@ -489,7 +489,7 @@ void __init smp_setup_cpu_maps(void)
if (!ireg) if (!ireg)
goto out; goto out;
maxcpus = ireg[num_addr_cell + num_size_cell]; maxcpus = be32_to_cpup(ireg + num_addr_cell + num_size_cell);
/* Double maxcpus for processors which have SMT capability */ /* Double maxcpus for processors which have SMT capability */
if (cpu_has_feature(CPU_FTR_SMT)) if (cpu_has_feature(CPU_FTR_SMT))

View File

@ -575,7 +575,7 @@ int __cpu_up(unsigned int cpu, struct task_struct *tidle)
int cpu_to_core_id(int cpu) int cpu_to_core_id(int cpu)
{ {
struct device_node *np; struct device_node *np;
const int *reg; const __be32 *reg;
int id = -1; int id = -1;
np = of_get_cpu_node(cpu, NULL); np = of_get_cpu_node(cpu, NULL);
@ -586,7 +586,7 @@ int cpu_to_core_id(int cpu)
if (!reg) if (!reg)
goto out; goto out;
id = *reg; id = be32_to_cpup(reg);
out: out:
of_node_put(np); of_node_put(np);
return id; return id;

View File

@ -9,6 +9,14 @@
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/ppc_asm.h> #include <asm/ppc_asm.h>
#ifdef __BIG_ENDIAN__
#define sLd sld /* Shift towards low-numbered address. */
#define sHd srd /* Shift towards high-numbered address. */
#else
#define sLd srd /* Shift towards low-numbered address. */
#define sHd sld /* Shift towards high-numbered address. */
#endif
.align 7 .align 7
_GLOBAL(__copy_tofrom_user) _GLOBAL(__copy_tofrom_user)
BEGIN_FTR_SECTION BEGIN_FTR_SECTION
@ -118,10 +126,10 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
24: ld r9,0(r4) /* 3+2n loads, 2+2n stores */ 24: ld r9,0(r4) /* 3+2n loads, 2+2n stores */
25: ld r0,8(r4) 25: ld r0,8(r4)
sld r6,r9,r10 sLd r6,r9,r10
26: ldu r9,16(r4) 26: ldu r9,16(r4)
srd r7,r0,r11 sHd r7,r0,r11
sld r8,r0,r10 sLd r8,r0,r10
or r7,r7,r6 or r7,r7,r6
blt cr6,79f blt cr6,79f
27: ld r0,8(r4) 27: ld r0,8(r4)
@ -129,35 +137,35 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
28: ld r0,0(r4) /* 4+2n loads, 3+2n stores */ 28: ld r0,0(r4) /* 4+2n loads, 3+2n stores */
29: ldu r9,8(r4) 29: ldu r9,8(r4)
sld r8,r0,r10 sLd r8,r0,r10
addi r3,r3,-8 addi r3,r3,-8
blt cr6,5f blt cr6,5f
30: ld r0,8(r4) 30: ld r0,8(r4)
srd r12,r9,r11 sHd r12,r9,r11
sld r6,r9,r10 sLd r6,r9,r10
31: ldu r9,16(r4) 31: ldu r9,16(r4)
or r12,r8,r12 or r12,r8,r12
srd r7,r0,r11 sHd r7,r0,r11
sld r8,r0,r10 sLd r8,r0,r10
addi r3,r3,16 addi r3,r3,16
beq cr6,78f beq cr6,78f
1: or r7,r7,r6 1: or r7,r7,r6
32: ld r0,8(r4) 32: ld r0,8(r4)
76: std r12,8(r3) 76: std r12,8(r3)
2: srd r12,r9,r11 2: sHd r12,r9,r11
sld r6,r9,r10 sLd r6,r9,r10
33: ldu r9,16(r4) 33: ldu r9,16(r4)
or r12,r8,r12 or r12,r8,r12
77: stdu r7,16(r3) 77: stdu r7,16(r3)
srd r7,r0,r11 sHd r7,r0,r11
sld r8,r0,r10 sLd r8,r0,r10
bdnz 1b bdnz 1b
78: std r12,8(r3) 78: std r12,8(r3)
or r7,r7,r6 or r7,r7,r6
79: std r7,16(r3) 79: std r7,16(r3)
5: srd r12,r9,r11 5: sHd r12,r9,r11
or r12,r8,r12 or r12,r8,r12
80: std r12,24(r3) 80: std r12,24(r3)
bne 6f bne 6f
@ -165,23 +173,38 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
blr blr
6: cmpwi cr1,r5,8 6: cmpwi cr1,r5,8
addi r3,r3,32 addi r3,r3,32
sld r9,r9,r10 sLd r9,r9,r10
ble cr1,7f ble cr1,7f
34: ld r0,8(r4) 34: ld r0,8(r4)
srd r7,r0,r11 sHd r7,r0,r11
or r9,r7,r9 or r9,r7,r9
7: 7:
bf cr7*4+1,1f bf cr7*4+1,1f
#ifdef __BIG_ENDIAN__
rotldi r9,r9,32 rotldi r9,r9,32
#endif
94: stw r9,0(r3) 94: stw r9,0(r3)
#ifdef __LITTLE_ENDIAN__
rotrdi r9,r9,32
#endif
addi r3,r3,4 addi r3,r3,4
1: bf cr7*4+2,2f 1: bf cr7*4+2,2f
#ifdef __BIG_ENDIAN__
rotldi r9,r9,16 rotldi r9,r9,16
#endif
95: sth r9,0(r3) 95: sth r9,0(r3)
#ifdef __LITTLE_ENDIAN__
rotrdi r9,r9,16
#endif
addi r3,r3,2 addi r3,r3,2
2: bf cr7*4+3,3f 2: bf cr7*4+3,3f
#ifdef __BIG_ENDIAN__
rotldi r9,r9,8 rotldi r9,r9,8
#endif
96: stb r9,0(r3) 96: stb r9,0(r3)
#ifdef __LITTLE_ENDIAN__
rotrdi r9,r9,8
#endif
3: li r3,0 3: li r3,0
blr blr

View File

@ -36,7 +36,6 @@
#include "powernv.h" #include "powernv.h"
#include "pci.h" #include "pci.h"
static char *hub_diag = NULL;
static int ioda_eeh_nb_init = 0; static int ioda_eeh_nb_init = 0;
static int ioda_eeh_event(struct notifier_block *nb, static int ioda_eeh_event(struct notifier_block *nb,
@ -140,15 +139,6 @@ static int ioda_eeh_post_init(struct pci_controller *hose)
ioda_eeh_nb_init = 1; ioda_eeh_nb_init = 1;
} }
/* We needn't HUB diag-data on PHB3 */
if (phb->type == PNV_PHB_IODA1 && !hub_diag) {
hub_diag = (char *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
if (!hub_diag) {
pr_err("%s: Out of memory !\n", __func__);
return -ENOMEM;
}
}
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
if (phb->dbgfs) { if (phb->dbgfs) {
debugfs_create_file("err_injct_outbound", 0600, debugfs_create_file("err_injct_outbound", 0600,
@ -630,11 +620,10 @@ static void ioda_eeh_hub_diag_common(struct OpalIoP7IOCErrorData *data)
static void ioda_eeh_hub_diag(struct pci_controller *hose) static void ioda_eeh_hub_diag(struct pci_controller *hose)
{ {
struct pnv_phb *phb = hose->private_data; struct pnv_phb *phb = hose->private_data;
struct OpalIoP7IOCErrorData *data; struct OpalIoP7IOCErrorData *data = &phb->diag.hub_diag;
long rc; long rc;
data = (struct OpalIoP7IOCErrorData *)ioda_eeh_hub_diag; rc = opal_pci_get_hub_diag_data(phb->hub_id, data, sizeof(*data));
rc = opal_pci_get_hub_diag_data(phb->hub_id, data, PAGE_SIZE);
if (rc != OPAL_SUCCESS) { if (rc != OPAL_SUCCESS) {
pr_warning("%s: Failed to get HUB#%llx diag-data (%ld)\n", pr_warning("%s: Failed to get HUB#%llx diag-data (%ld)\n",
__func__, phb->hub_id, rc); __func__, phb->hub_id, rc);

View File

@ -24,25 +24,25 @@ static int opal_lpc_chip_id = -1;
static u8 opal_lpc_inb(unsigned long port) static u8 opal_lpc_inb(unsigned long port)
{ {
int64_t rc; int64_t rc;
uint32_t data; __be32 data;
if (opal_lpc_chip_id < 0 || port > 0xffff) if (opal_lpc_chip_id < 0 || port > 0xffff)
return 0xff; return 0xff;
rc = opal_lpc_read(opal_lpc_chip_id, OPAL_LPC_IO, port, &data, 1); rc = opal_lpc_read(opal_lpc_chip_id, OPAL_LPC_IO, port, &data, 1);
return rc ? 0xff : data; return rc ? 0xff : be32_to_cpu(data);
} }
static __le16 __opal_lpc_inw(unsigned long port) static __le16 __opal_lpc_inw(unsigned long port)
{ {
int64_t rc; int64_t rc;
uint32_t data; __be32 data;
if (opal_lpc_chip_id < 0 || port > 0xfffe) if (opal_lpc_chip_id < 0 || port > 0xfffe)
return 0xffff; return 0xffff;
if (port & 1) if (port & 1)
return (__le16)opal_lpc_inb(port) << 8 | opal_lpc_inb(port + 1); return (__le16)opal_lpc_inb(port) << 8 | opal_lpc_inb(port + 1);
rc = opal_lpc_read(opal_lpc_chip_id, OPAL_LPC_IO, port, &data, 2); rc = opal_lpc_read(opal_lpc_chip_id, OPAL_LPC_IO, port, &data, 2);
return rc ? 0xffff : data; return rc ? 0xffff : be32_to_cpu(data);
} }
static u16 opal_lpc_inw(unsigned long port) static u16 opal_lpc_inw(unsigned long port)
{ {
@ -52,7 +52,7 @@ static u16 opal_lpc_inw(unsigned long port)
static __le32 __opal_lpc_inl(unsigned long port) static __le32 __opal_lpc_inl(unsigned long port)
{ {
int64_t rc; int64_t rc;
uint32_t data; __be32 data;
if (opal_lpc_chip_id < 0 || port > 0xfffc) if (opal_lpc_chip_id < 0 || port > 0xfffc)
return 0xffffffff; return 0xffffffff;
@ -62,7 +62,7 @@ static __le32 __opal_lpc_inl(unsigned long port)
(__le32)opal_lpc_inb(port + 2) << 8 | (__le32)opal_lpc_inb(port + 2) << 8 |
opal_lpc_inb(port + 3); opal_lpc_inb(port + 3);
rc = opal_lpc_read(opal_lpc_chip_id, OPAL_LPC_IO, port, &data, 4); rc = opal_lpc_read(opal_lpc_chip_id, OPAL_LPC_IO, port, &data, 4);
return rc ? 0xffffffff : data; return rc ? 0xffffffff : be32_to_cpu(data);
} }
static u32 opal_lpc_inl(unsigned long port) static u32 opal_lpc_inl(unsigned long port)

View File

@ -96,9 +96,11 @@ static int opal_scom_read(scom_map_t map, u64 reg, u64 *value)
{ {
struct opal_scom_map *m = map; struct opal_scom_map *m = map;
int64_t rc; int64_t rc;
__be64 v;
reg = opal_scom_unmangle(reg); reg = opal_scom_unmangle(reg);
rc = opal_xscom_read(m->chip, m->addr + reg, (uint64_t *)__pa(value)); rc = opal_xscom_read(m->chip, m->addr + reg, (__be64 *)__pa(&v));
*value = be64_to_cpu(v);
return opal_xscom_err_xlate(rc); return opal_xscom_err_xlate(rc);
} }

View File

@ -720,6 +720,7 @@ static void pnv_pci_ioda2_setup_dma_pe(struct pnv_phb *phb,
tbl->it_type = TCE_PCI_SWINV_CREATE | TCE_PCI_SWINV_FREE; tbl->it_type = TCE_PCI_SWINV_CREATE | TCE_PCI_SWINV_FREE;
} }
iommu_init_table(tbl, phb->hose->node); iommu_init_table(tbl, phb->hose->node);
iommu_register_group(tbl, pci_domain_nr(pe->pbus), pe->pe_number);
if (pe->pdev) if (pe->pdev)
set_iommu_table_base_and_group(&pe->pdev->dev, tbl); set_iommu_table_base_and_group(&pe->pdev->dev, tbl);

View File

@ -172,12 +172,14 @@ struct pnv_phb {
} ioda; } ioda;
}; };
/* PHB status structure */ /* PHB and hub status structure */
union { union {
unsigned char blob[PNV_PCI_DIAG_BUF_SIZE]; unsigned char blob[PNV_PCI_DIAG_BUF_SIZE];
struct OpalIoP7IOCPhbErrorData p7ioc; struct OpalIoP7IOCPhbErrorData p7ioc;
struct OpalIoPhb3ErrorData phb3; struct OpalIoPhb3ErrorData phb3;
struct OpalIoP7IOCErrorData hub_diag;
} diag; } diag;
}; };
extern struct pci_ops pnv_pci_ops; extern struct pci_ops pnv_pci_ops;

View File

@ -157,7 +157,7 @@ static void parse_ppp_data(struct seq_file *m)
{ {
struct hvcall_ppp_data ppp_data; struct hvcall_ppp_data ppp_data;
struct device_node *root; struct device_node *root;
const int *perf_level; const __be32 *perf_level;
int rc; int rc;
rc = h_get_ppp(&ppp_data); rc = h_get_ppp(&ppp_data);
@ -201,7 +201,7 @@ static void parse_ppp_data(struct seq_file *m)
perf_level = of_get_property(root, perf_level = of_get_property(root,
"ibm,partition-performance-parameters-level", "ibm,partition-performance-parameters-level",
NULL); NULL);
if (perf_level && (*perf_level >= 1)) { if (perf_level && (be32_to_cpup(perf_level) >= 1)) {
seq_printf(m, seq_printf(m,
"physical_procs_allocated_to_virtualization=%d\n", "physical_procs_allocated_to_virtualization=%d\n",
ppp_data.phys_platform_procs); ppp_data.phys_platform_procs);
@ -435,7 +435,7 @@ static int pseries_lparcfg_data(struct seq_file *m, void *v)
int partition_potential_processors; int partition_potential_processors;
int partition_active_processors; int partition_active_processors;
struct device_node *rtas_node; struct device_node *rtas_node;
const int *lrdrp = NULL; const __be32 *lrdrp = NULL;
rtas_node = of_find_node_by_path("/rtas"); rtas_node = of_find_node_by_path("/rtas");
if (rtas_node) if (rtas_node)
@ -444,7 +444,7 @@ static int pseries_lparcfg_data(struct seq_file *m, void *v)
if (lrdrp == NULL) { if (lrdrp == NULL) {
partition_potential_processors = vdso_data->processorCount; partition_potential_processors = vdso_data->processorCount;
} else { } else {
partition_potential_processors = *(lrdrp + 4); partition_potential_processors = be32_to_cpup(lrdrp + 4);
} }
of_node_put(rtas_node); of_node_put(rtas_node);
@ -654,7 +654,7 @@ static int lparcfg_data(struct seq_file *m, void *v)
const char *model = ""; const char *model = "";
const char *system_id = ""; const char *system_id = "";
const char *tmp; const char *tmp;
const unsigned int *lp_index_ptr; const __be32 *lp_index_ptr;
unsigned int lp_index = 0; unsigned int lp_index = 0;
seq_printf(m, "%s %s\n", MODULE_NAME, MODULE_VERS); seq_printf(m, "%s %s\n", MODULE_NAME, MODULE_VERS);
@ -670,7 +670,7 @@ static int lparcfg_data(struct seq_file *m, void *v)
lp_index_ptr = of_get_property(rootdn, "ibm,partition-no", lp_index_ptr = of_get_property(rootdn, "ibm,partition-no",
NULL); NULL);
if (lp_index_ptr) if (lp_index_ptr)
lp_index = *lp_index_ptr; lp_index = be32_to_cpup(lp_index_ptr);
of_node_put(rootdn); of_node_put(rootdn);
} }
seq_printf(m, "serial_number=%s\n", system_id); seq_printf(m, "serial_number=%s\n", system_id);

View File

@ -130,7 +130,8 @@ static int check_req(struct pci_dev *pdev, int nvec, char *prop_name)
{ {
struct device_node *dn; struct device_node *dn;
struct pci_dn *pdn; struct pci_dn *pdn;
const u32 *req_msi; const __be32 *p;
u32 req_msi;
pdn = pci_get_pdn(pdev); pdn = pci_get_pdn(pdev);
if (!pdn) if (!pdn)
@ -138,19 +139,20 @@ static int check_req(struct pci_dev *pdev, int nvec, char *prop_name)
dn = pdn->node; dn = pdn->node;
req_msi = of_get_property(dn, prop_name, NULL); p = of_get_property(dn, prop_name, NULL);
if (!req_msi) { if (!p) {
pr_debug("rtas_msi: No %s on %s\n", prop_name, dn->full_name); pr_debug("rtas_msi: No %s on %s\n", prop_name, dn->full_name);
return -ENOENT; return -ENOENT;
} }
if (*req_msi < nvec) { req_msi = be32_to_cpup(p);
if (req_msi < nvec) {
pr_debug("rtas_msi: %s requests < %d MSIs\n", prop_name, nvec); pr_debug("rtas_msi: %s requests < %d MSIs\n", prop_name, nvec);
if (*req_msi == 0) /* Be paranoid */ if (req_msi == 0) /* Be paranoid */
return -ENOSPC; return -ENOSPC;
return *req_msi; return req_msi;
} }
return 0; return 0;
@ -171,7 +173,7 @@ static int check_req_msix(struct pci_dev *pdev, int nvec)
static struct device_node *find_pe_total_msi(struct pci_dev *dev, int *total) static struct device_node *find_pe_total_msi(struct pci_dev *dev, int *total)
{ {
struct device_node *dn; struct device_node *dn;
const u32 *p; const __be32 *p;
dn = of_node_get(pci_device_to_OF_node(dev)); dn = of_node_get(pci_device_to_OF_node(dev));
while (dn) { while (dn) {
@ -179,7 +181,7 @@ static struct device_node *find_pe_total_msi(struct pci_dev *dev, int *total)
if (p) { if (p) {
pr_debug("rtas_msi: found prop on dn %s\n", pr_debug("rtas_msi: found prop on dn %s\n",
dn->full_name); dn->full_name);
*total = *p; *total = be32_to_cpup(p);
return dn; return dn;
} }
@ -232,13 +234,13 @@ struct msi_counts {
static void *count_non_bridge_devices(struct device_node *dn, void *data) static void *count_non_bridge_devices(struct device_node *dn, void *data)
{ {
struct msi_counts *counts = data; struct msi_counts *counts = data;
const u32 *p; const __be32 *p;
u32 class; u32 class;
pr_debug("rtas_msi: counting %s\n", dn->full_name); pr_debug("rtas_msi: counting %s\n", dn->full_name);
p = of_get_property(dn, "class-code", NULL); p = of_get_property(dn, "class-code", NULL);
class = p ? *p : 0; class = p ? be32_to_cpup(p) : 0;
if ((class >> 8) != PCI_CLASS_BRIDGE_PCI) if ((class >> 8) != PCI_CLASS_BRIDGE_PCI)
counts->num_devices++; counts->num_devices++;
@ -249,7 +251,7 @@ static void *count_non_bridge_devices(struct device_node *dn, void *data)
static void *count_spare_msis(struct device_node *dn, void *data) static void *count_spare_msis(struct device_node *dn, void *data)
{ {
struct msi_counts *counts = data; struct msi_counts *counts = data;
const u32 *p; const __be32 *p;
int req; int req;
if (dn == counts->requestor) if (dn == counts->requestor)
@ -260,11 +262,11 @@ static void *count_spare_msis(struct device_node *dn, void *data)
req = 0; req = 0;
p = of_get_property(dn, "ibm,req#msi", NULL); p = of_get_property(dn, "ibm,req#msi", NULL);
if (p) if (p)
req = *p; req = be32_to_cpup(p);
p = of_get_property(dn, "ibm,req#msi-x", NULL); p = of_get_property(dn, "ibm,req#msi-x", NULL);
if (p) if (p)
req = max(req, (int)*p); req = max(req, (int)be32_to_cpup(p));
} }
if (req < counts->quota) if (req < counts->quota)

View File

@ -43,8 +43,8 @@ static char nvram_buf[NVRW_CNT]; /* assume this is in the first 4GB */
static DEFINE_SPINLOCK(nvram_lock); static DEFINE_SPINLOCK(nvram_lock);
struct err_log_info { struct err_log_info {
int error_type; __be32 error_type;
unsigned int seq_num; __be32 seq_num;
}; };
struct nvram_os_partition { struct nvram_os_partition {
@ -79,9 +79,9 @@ static const char *pseries_nvram_os_partitions[] = {
}; };
struct oops_log_info { struct oops_log_info {
u16 version; __be16 version;
u16 report_length; __be16 report_length;
u64 timestamp; __be64 timestamp;
} __attribute__((packed)); } __attribute__((packed));
static void oops_to_nvram(struct kmsg_dumper *dumper, static void oops_to_nvram(struct kmsg_dumper *dumper,
@ -291,8 +291,8 @@ int nvram_write_os_partition(struct nvram_os_partition *part, char * buff,
length = part->size; length = part->size;
} }
info.error_type = err_type; info.error_type = cpu_to_be32(err_type);
info.seq_num = error_log_cnt; info.seq_num = cpu_to_be32(error_log_cnt);
tmp_index = part->index; tmp_index = part->index;
@ -364,8 +364,8 @@ int nvram_read_partition(struct nvram_os_partition *part, char *buff,
} }
if (part->os_partition) { if (part->os_partition) {
*error_log_cnt = info.seq_num; *error_log_cnt = be32_to_cpu(info.seq_num);
*err_type = info.error_type; *err_type = be32_to_cpu(info.error_type);
} }
return 0; return 0;
@ -529,9 +529,9 @@ static int zip_oops(size_t text_len)
pr_err("nvram: logging uncompressed oops/panic report\n"); pr_err("nvram: logging uncompressed oops/panic report\n");
return -1; return -1;
} }
oops_hdr->version = OOPS_HDR_VERSION; oops_hdr->version = cpu_to_be16(OOPS_HDR_VERSION);
oops_hdr->report_length = (u16) zipped_len; oops_hdr->report_length = cpu_to_be16(zipped_len);
oops_hdr->timestamp = get_seconds(); oops_hdr->timestamp = cpu_to_be64(get_seconds());
return 0; return 0;
} }
@ -574,9 +574,9 @@ static int nvram_pstore_write(enum pstore_type_id type,
clobbering_unread_rtas_event()) clobbering_unread_rtas_event())
return -1; return -1;
oops_hdr->version = OOPS_HDR_VERSION; oops_hdr->version = cpu_to_be16(OOPS_HDR_VERSION);
oops_hdr->report_length = (u16) size; oops_hdr->report_length = cpu_to_be16(size);
oops_hdr->timestamp = get_seconds(); oops_hdr->timestamp = cpu_to_be64(get_seconds());
if (compressed) if (compressed)
err_type = ERR_TYPE_KERNEL_PANIC_GZ; err_type = ERR_TYPE_KERNEL_PANIC_GZ;
@ -670,16 +670,16 @@ static ssize_t nvram_pstore_read(u64 *id, enum pstore_type_id *type,
size_t length, hdr_size; size_t length, hdr_size;
oops_hdr = (struct oops_log_info *)buff; oops_hdr = (struct oops_log_info *)buff;
if (oops_hdr->version < OOPS_HDR_VERSION) { if (be16_to_cpu(oops_hdr->version) < OOPS_HDR_VERSION) {
/* Old format oops header had 2-byte record size */ /* Old format oops header had 2-byte record size */
hdr_size = sizeof(u16); hdr_size = sizeof(u16);
length = oops_hdr->version; length = be16_to_cpu(oops_hdr->version);
time->tv_sec = 0; time->tv_sec = 0;
time->tv_nsec = 0; time->tv_nsec = 0;
} else { } else {
hdr_size = sizeof(*oops_hdr); hdr_size = sizeof(*oops_hdr);
length = oops_hdr->report_length; length = be16_to_cpu(oops_hdr->report_length);
time->tv_sec = oops_hdr->timestamp; time->tv_sec = be64_to_cpu(oops_hdr->timestamp);
time->tv_nsec = 0; time->tv_nsec = 0;
} }
*buf = kmalloc(length, GFP_KERNEL); *buf = kmalloc(length, GFP_KERNEL);
@ -889,13 +889,13 @@ static void oops_to_nvram(struct kmsg_dumper *dumper,
kmsg_dump_get_buffer(dumper, false, kmsg_dump_get_buffer(dumper, false,
oops_data, oops_data_sz, &text_len); oops_data, oops_data_sz, &text_len);
err_type = ERR_TYPE_KERNEL_PANIC; err_type = ERR_TYPE_KERNEL_PANIC;
oops_hdr->version = OOPS_HDR_VERSION; oops_hdr->version = cpu_to_be16(OOPS_HDR_VERSION);
oops_hdr->report_length = (u16) text_len; oops_hdr->report_length = cpu_to_be16(text_len);
oops_hdr->timestamp = get_seconds(); oops_hdr->timestamp = cpu_to_be64(get_seconds());
} }
(void) nvram_write_os_partition(&oops_log_partition, oops_buf, (void) nvram_write_os_partition(&oops_log_partition, oops_buf,
(int) (sizeof(*oops_hdr) + oops_hdr->report_length), err_type, (int) (sizeof(*oops_hdr) + text_len), err_type,
++oops_count); ++oops_count);
spin_unlock_irqrestore(&lock, flags); spin_unlock_irqrestore(&lock, flags);

View File

@ -113,7 +113,7 @@ int pseries_root_bridge_prepare(struct pci_host_bridge *bridge)
{ {
struct device_node *dn, *pdn; struct device_node *dn, *pdn;
struct pci_bus *bus; struct pci_bus *bus;
const uint32_t *pcie_link_speed_stats; const __be32 *pcie_link_speed_stats;
bus = bridge->bus; bus = bridge->bus;
@ -122,7 +122,7 @@ int pseries_root_bridge_prepare(struct pci_host_bridge *bridge)
return 0; return 0;
for (pdn = dn; pdn != NULL; pdn = of_get_next_parent(pdn)) { for (pdn = dn; pdn != NULL; pdn = of_get_next_parent(pdn)) {
pcie_link_speed_stats = (const uint32_t *) of_get_property(pdn, pcie_link_speed_stats = of_get_property(pdn,
"ibm,pcie-link-speed-stats", NULL); "ibm,pcie-link-speed-stats", NULL);
if (pcie_link_speed_stats) if (pcie_link_speed_stats)
break; break;
@ -135,7 +135,7 @@ int pseries_root_bridge_prepare(struct pci_host_bridge *bridge)
return 0; return 0;
} }
switch (pcie_link_speed_stats[0]) { switch (be32_to_cpup(pcie_link_speed_stats)) {
case 0x01: case 0x01:
bus->max_bus_speed = PCIE_SPEED_2_5GT; bus->max_bus_speed = PCIE_SPEED_2_5GT;
break; break;
@ -147,7 +147,7 @@ int pseries_root_bridge_prepare(struct pci_host_bridge *bridge)
break; break;
} }
switch (pcie_link_speed_stats[1]) { switch (be32_to_cpup(pcie_link_speed_stats)) {
case 0x01: case 0x01:
bus->cur_bus_speed = PCIE_SPEED_2_5GT; bus->cur_bus_speed = PCIE_SPEED_2_5GT;
break; break;

View File

@ -339,7 +339,7 @@ void *ppc4xx_ocm_alloc(phys_addr_t *phys, int size, int align,
if (IS_ERR_VALUE(offset)) if (IS_ERR_VALUE(offset))
continue; continue;
ocm_blk = kzalloc(sizeof(struct ocm_block *), GFP_KERNEL); ocm_blk = kzalloc(sizeof(struct ocm_block), GFP_KERNEL);
if (!ocm_blk) { if (!ocm_blk) {
printk(KERN_ERR "PPC4XX OCM: could not allocate ocm block"); printk(KERN_ERR "PPC4XX OCM: could not allocate ocm block");
rh_free(ocm_reg->rh, offset); rh_free(ocm_reg->rh, offset);

View File

@ -91,6 +91,15 @@ extern boot_infos_t *boot_infos;
#define AVIVO_DC_LUTB_WHITE_OFFSET_GREEN 0x6cd4 #define AVIVO_DC_LUTB_WHITE_OFFSET_GREEN 0x6cd4
#define AVIVO_DC_LUTB_WHITE_OFFSET_RED 0x6cd8 #define AVIVO_DC_LUTB_WHITE_OFFSET_RED 0x6cd8
#define FB_RIGHT_POS(p, bpp) (fb_be_math(p) ? 0 : (32 - (bpp)))
static inline u32 offb_cmap_byteswap(struct fb_info *info, u32 value)
{
u32 bpp = info->var.bits_per_pixel;
return cpu_to_be32(value) >> FB_RIGHT_POS(info, bpp);
}
/* /*
* Set a single color register. The values supplied are already * Set a single color register. The values supplied are already
* rounded down to the hardware's capabilities (according to the * rounded down to the hardware's capabilities (according to the
@ -120,7 +129,7 @@ static int offb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
mask <<= info->var.transp.offset; mask <<= info->var.transp.offset;
value |= mask; value |= mask;
} }
pal[regno] = value; pal[regno] = offb_cmap_byteswap(info, value);
return 0; return 0;
} }
@ -301,7 +310,7 @@ static struct fb_ops offb_ops = {
static void __iomem *offb_map_reg(struct device_node *np, int index, static void __iomem *offb_map_reg(struct device_node *np, int index,
unsigned long offset, unsigned long size) unsigned long offset, unsigned long size)
{ {
const u32 *addrp; const __be32 *addrp;
u64 asize, taddr; u64 asize, taddr;
unsigned int flags; unsigned int flags;
@ -369,7 +378,11 @@ static void offb_init_palette_hacks(struct fb_info *info, struct device_node *dp
} }
of_node_put(pciparent); of_node_put(pciparent);
} else if (dp && of_device_is_compatible(dp, "qemu,std-vga")) { } else if (dp && of_device_is_compatible(dp, "qemu,std-vga")) {
const u32 io_of_addr[3] = { 0x01000000, 0x0, 0x0 }; #ifdef __BIG_ENDIAN
const __be32 io_of_addr[3] = { 0x01000000, 0x0, 0x0 };
#else
const __be32 io_of_addr[3] = { 0x00000001, 0x0, 0x0 };
#endif
u64 io_addr = of_translate_address(dp, io_of_addr); u64 io_addr = of_translate_address(dp, io_of_addr);
if (io_addr != OF_BAD_ADDR) { if (io_addr != OF_BAD_ADDR) {
par->cmap_adr = ioremap(io_addr + 0x3c8, 2); par->cmap_adr = ioremap(io_addr + 0x3c8, 2);
@ -535,7 +548,7 @@ static void __init offb_init_nodriver(struct device_node *dp, int no_real_node)
unsigned int flags, rsize, addr_prop = 0; unsigned int flags, rsize, addr_prop = 0;
unsigned long max_size = 0; unsigned long max_size = 0;
u64 rstart, address = OF_BAD_ADDR; u64 rstart, address = OF_BAD_ADDR;
const u32 *pp, *addrp, *up; const __be32 *pp, *addrp, *up;
u64 asize; u64 asize;
int foreign_endian = 0; int foreign_endian = 0;
@ -551,25 +564,25 @@ static void __init offb_init_nodriver(struct device_node *dp, int no_real_node)
if (pp == NULL) if (pp == NULL)
pp = of_get_property(dp, "depth", &len); pp = of_get_property(dp, "depth", &len);
if (pp && len == sizeof(u32)) if (pp && len == sizeof(u32))
depth = *pp; depth = be32_to_cpup(pp);
pp = of_get_property(dp, "linux,bootx-width", &len); pp = of_get_property(dp, "linux,bootx-width", &len);
if (pp == NULL) if (pp == NULL)
pp = of_get_property(dp, "width", &len); pp = of_get_property(dp, "width", &len);
if (pp && len == sizeof(u32)) if (pp && len == sizeof(u32))
width = *pp; width = be32_to_cpup(pp);
pp = of_get_property(dp, "linux,bootx-height", &len); pp = of_get_property(dp, "linux,bootx-height", &len);
if (pp == NULL) if (pp == NULL)
pp = of_get_property(dp, "height", &len); pp = of_get_property(dp, "height", &len);
if (pp && len == sizeof(u32)) if (pp && len == sizeof(u32))
height = *pp; height = be32_to_cpup(pp);
pp = of_get_property(dp, "linux,bootx-linebytes", &len); pp = of_get_property(dp, "linux,bootx-linebytes", &len);
if (pp == NULL) if (pp == NULL)
pp = of_get_property(dp, "linebytes", &len); pp = of_get_property(dp, "linebytes", &len);
if (pp && len == sizeof(u32) && (*pp != 0xffffffffu)) if (pp && len == sizeof(u32) && (*pp != 0xffffffffu))
pitch = *pp; pitch = be32_to_cpup(pp);
else else
pitch = width * ((depth + 7) / 8); pitch = width * ((depth + 7) / 8);