Commit aeb8eede authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus

Pull MIPS updates from Ralf Baechle:
 "A number of fixes all across the MIPS tree.  No area is particularly
  standing out and things have cooled down quite nicely for a release."

* 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus:
  MIPS: Function tracer: Fix broken function tracing
  mips: Move __virt_addr_valid() to a place for MIPS 64
  MIPS: Netlogic: Fix UP compilation on XLR
  MIPS: AR71xx: Fix AR71XX_PCI_MEM_SIZE
  MIPS: AR724x: Fix AR724X_PCI_MEM_SIZE
  MIPS: Lantiq: Fix cp0_perfcount_irq mapping
  MIPS: DSP: Fix DSP mask for registers.
  MIPS: Fix build failure by adding definition of pfn_pmd().
  MIPS: Octeon: Fix warning.
  MIPS: delay.c: Check BITS_PER_LONG instead of __SIZEOF_LONG__
  MIPS: PNX833x: Fix comment.
  MIPS: Add struct p_format to union mips_instruction.
  MIPS: Export <asm/break.h>.
  MIPS: BCM47xx: Enable SSB prerequisite SSB_DRIVER_PCICORE.
  MIPS: BCM47xx: Select GPIOLIB for BCMA on bcm47xx platform
  MIPS: vpe.c: Fix null pointer dereference in print arguments.
parents 04c2eee5 58b69401
...@@ -8,8 +8,10 @@ config BCM47XX_SSB ...@@ -8,8 +8,10 @@ config BCM47XX_SSB
select SSB_DRIVER_EXTIF select SSB_DRIVER_EXTIF
select SSB_EMBEDDED select SSB_EMBEDDED
select SSB_B43_PCI_BRIDGE if PCI select SSB_B43_PCI_BRIDGE if PCI
select SSB_DRIVER_PCICORE if PCI
select SSB_PCICORE_HOSTMODE if PCI select SSB_PCICORE_HOSTMODE if PCI
select SSB_DRIVER_GPIO select SSB_DRIVER_GPIO
select GPIOLIB
default y default y
help help
Add support for old Broadcom BCM47xx boards with Sonics Silicon Backplane support. Add support for old Broadcom BCM47xx boards with Sonics Silicon Backplane support.
...@@ -25,6 +27,7 @@ config BCM47XX_BCMA ...@@ -25,6 +27,7 @@ config BCM47XX_BCMA
select BCMA_HOST_PCI if PCI select BCMA_HOST_PCI if PCI
select BCMA_DRIVER_PCI_HOSTMODE if PCI select BCMA_DRIVER_PCI_HOSTMODE if PCI
select BCMA_DRIVER_GPIO select BCMA_DRIVER_GPIO
select GPIOLIB
default y default y
help help
Add support for new Broadcom BCM47xx boards with Broadcom specific Advanced Microcontroller Bus. Add support for new Broadcom BCM47xx boards with Broadcom specific Advanced Microcontroller Bus.
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
* measurement, and debugging facilities. * measurement, and debugging facilities.
*/ */
#include <linux/compiler.h>
#include <linux/irqflags.h> #include <linux/irqflags.h>
#include <asm/octeon/cvmx.h> #include <asm/octeon/cvmx.h>
#include <asm/octeon/cvmx-l2c.h> #include <asm/octeon/cvmx-l2c.h>
...@@ -285,22 +286,22 @@ uint64_t cvmx_l2c_read_perf(uint32_t counter) ...@@ -285,22 +286,22 @@ uint64_t cvmx_l2c_read_perf(uint32_t counter)
*/ */
static void fault_in(uint64_t addr, int len) static void fault_in(uint64_t addr, int len)
{ {
volatile char *ptr; char *ptr;
volatile char dummy;
/* /*
* Adjust addr and length so we get all cache lines even for * Adjust addr and length so we get all cache lines even for
* small ranges spanning two cache lines. * small ranges spanning two cache lines.
*/ */
len += addr & CVMX_CACHE_LINE_MASK; len += addr & CVMX_CACHE_LINE_MASK;
addr &= ~CVMX_CACHE_LINE_MASK; addr &= ~CVMX_CACHE_LINE_MASK;
ptr = (volatile char *)cvmx_phys_to_ptr(addr); ptr = cvmx_phys_to_ptr(addr);
/* /*
* Invalidate L1 cache to make sure all loads result in data * Invalidate L1 cache to make sure all loads result in data
* being in L2. * being in L2.
*/ */
CVMX_DCACHE_INVALIDATE; CVMX_DCACHE_INVALIDATE;
while (len > 0) { while (len > 0) {
dummy += *ptr; ACCESS_ONCE(*ptr);
len -= CVMX_CACHE_LINE_SIZE; len -= CVMX_CACHE_LINE_SIZE;
ptr += CVMX_CACHE_LINE_SIZE; ptr += CVMX_CACHE_LINE_SIZE;
} }
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include <asm/mipsregs.h> #include <asm/mipsregs.h>
#define DSP_DEFAULT 0x00000000 #define DSP_DEFAULT 0x00000000
#define DSP_MASK 0x3ff #define DSP_MASK 0x3f
#define __enable_dsp_hazard() \ #define __enable_dsp_hazard() \
do { \ do { \
......
...@@ -353,6 +353,7 @@ union mips_instruction { ...@@ -353,6 +353,7 @@ union mips_instruction {
struct u_format u_format; struct u_format u_format;
struct c_format c_format; struct c_format c_format;
struct r_format r_format; struct r_format r_format;
struct p_format p_format;
struct f_format f_format; struct f_format f_format;
struct ma_format ma_format; struct ma_format ma_format;
struct b_format b_format; struct b_format b_format;
......
...@@ -21,4 +21,4 @@ ...@@ -21,4 +21,4 @@
#define R10000_LLSC_WAR 0 #define R10000_LLSC_WAR 0
#define MIPS34K_MISSED_ITLB_WAR 0 #define MIPS34K_MISSED_ITLB_WAR 0
#endif /* __ASM_MIPS_MACH_PNX8550_WAR_H */ #endif /* __ASM_MIPS_MACH_PNX833X_WAR_H */
...@@ -230,6 +230,7 @@ static inline void pud_clear(pud_t *pudp) ...@@ -230,6 +230,7 @@ static inline void pud_clear(pud_t *pudp)
#else #else
#define pte_pfn(x) ((unsigned long)((x).pte >> _PFN_SHIFT)) #define pte_pfn(x) ((unsigned long)((x).pte >> _PFN_SHIFT))
#define pfn_pte(pfn, prot) __pte(((pfn) << _PFN_SHIFT) | pgprot_val(prot)) #define pfn_pte(pfn, prot) __pte(((pfn) << _PFN_SHIFT) | pgprot_val(prot))
#define pfn_pmd(pfn, prot) __pmd(((pfn) << _PFN_SHIFT) | pgprot_val(prot))
#endif #endif
#define __pgd_offset(address) pgd_index(address) #define __pgd_offset(address) pgd_index(address)
......
...@@ -3,6 +3,7 @@ include include/uapi/asm-generic/Kbuild.asm ...@@ -3,6 +3,7 @@ include include/uapi/asm-generic/Kbuild.asm
header-y += auxvec.h header-y += auxvec.h
header-y += bitsperlong.h header-y += bitsperlong.h
header-y += break.h
header-y += byteorder.h header-y += byteorder.h
header-y += cachectl.h header-y += cachectl.h
header-y += errno.h header-y += errno.h
......
...@@ -25,6 +25,12 @@ ...@@ -25,6 +25,12 @@
#define MCOUNT_OFFSET_INSNS 4 #define MCOUNT_OFFSET_INSNS 4
#endif #endif
/* Arch override because MIPS doesn't need to run this from stop_machine() */
void arch_ftrace_update_code(int command)
{
ftrace_modify_all_code(command);
}
/* /*
* Check if the address is in kernel space * Check if the address is in kernel space
* *
...@@ -89,6 +95,24 @@ static int ftrace_modify_code(unsigned long ip, unsigned int new_code) ...@@ -89,6 +95,24 @@ static int ftrace_modify_code(unsigned long ip, unsigned int new_code)
return 0; return 0;
} }
#ifndef CONFIG_64BIT
static int ftrace_modify_code_2(unsigned long ip, unsigned int new_code1,
unsigned int new_code2)
{
int faulted;
safe_store_code(new_code1, ip, faulted);
if (unlikely(faulted))
return -EFAULT;
ip += 4;
safe_store_code(new_code2, ip, faulted);
if (unlikely(faulted))
return -EFAULT;
flush_icache_range(ip, ip + 8); /* original ip + 12 */
return 0;
}
#endif
/* /*
* The details about the calling site of mcount on MIPS * The details about the calling site of mcount on MIPS
* *
...@@ -131,8 +155,18 @@ int ftrace_make_nop(struct module *mod, ...@@ -131,8 +155,18 @@ int ftrace_make_nop(struct module *mod,
* needed. * needed.
*/ */
new = in_kernel_space(ip) ? INSN_NOP : INSN_B_1F; new = in_kernel_space(ip) ? INSN_NOP : INSN_B_1F;
#ifdef CONFIG_64BIT
return ftrace_modify_code(ip, new); return ftrace_modify_code(ip, new);
#else
/*
* On 32 bit MIPS platforms, gcc adds a stack adjust
* instruction in the delay slot after the branch to
* mcount and expects mcount to restore the sp on return.
* This is based on a legacy API and does nothing but
* waste instructions so it's being removed at runtime.
*/
return ftrace_modify_code_2(ip, new, INSN_NOP);
#endif
} }
int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
......
...@@ -46,9 +46,8 @@ ...@@ -46,9 +46,8 @@
PTR_L a5, PT_R9(sp) PTR_L a5, PT_R9(sp)
PTR_L a6, PT_R10(sp) PTR_L a6, PT_R10(sp)
PTR_L a7, PT_R11(sp) PTR_L a7, PT_R11(sp)
PTR_ADDIU sp, PT_SIZE
#else #else
PTR_ADDIU sp, (PT_SIZE + 8) PTR_ADDIU sp, PT_SIZE
#endif #endif
.endm .endm
...@@ -69,7 +68,9 @@ NESTED(ftrace_caller, PT_SIZE, ra) ...@@ -69,7 +68,9 @@ NESTED(ftrace_caller, PT_SIZE, ra)
.globl _mcount .globl _mcount
_mcount: _mcount:
b ftrace_stub b ftrace_stub
nop addiu sp,sp,8
/* When tracing is activated, it calls ftrace_caller+8 (aka here) */
lw t1, function_trace_stop lw t1, function_trace_stop
bnez t1, ftrace_stub bnez t1, ftrace_stub
nop nop
......
...@@ -705,7 +705,7 @@ static int vpe_run(struct vpe * v) ...@@ -705,7 +705,7 @@ static int vpe_run(struct vpe * v)
printk(KERN_WARNING printk(KERN_WARNING
"VPE loader: TC %d is already in use.\n", "VPE loader: TC %d is already in use.\n",
t->index); v->tc->index);
return -ENOEXEC; return -ENOEXEC;
} }
} else { } else {
......
...@@ -408,7 +408,7 @@ int __init icu_of_init(struct device_node *node, struct device_node *parent) ...@@ -408,7 +408,7 @@ int __init icu_of_init(struct device_node *node, struct device_node *parent)
#endif #endif
/* tell oprofile which irq to use */ /* tell oprofile which irq to use */
cp0_perfcount_irq = LTQ_PERF_IRQ; cp0_perfcount_irq = irq_create_mapping(ltq_domain, LTQ_PERF_IRQ);
/* /*
* if the timer irq is not one of the mips irqs we need to * if the timer irq is not one of the mips irqs we need to
......
...@@ -21,7 +21,7 @@ void __delay(unsigned long loops) ...@@ -21,7 +21,7 @@ void __delay(unsigned long loops)
" .set noreorder \n" " .set noreorder \n"
" .align 3 \n" " .align 3 \n"
"1: bnez %0, 1b \n" "1: bnez %0, 1b \n"
#if __SIZEOF_LONG__ == 4 #if BITS_PER_LONG == 32
" subu %0, 1 \n" " subu %0, 1 \n"
#else #else
" dsubu %0, 1 \n" " dsubu %0, 1 \n"
......
...@@ -190,9 +190,3 @@ void __iounmap(const volatile void __iomem *addr) ...@@ -190,9 +190,3 @@ void __iounmap(const volatile void __iomem *addr)
EXPORT_SYMBOL(__ioremap); EXPORT_SYMBOL(__ioremap);
EXPORT_SYMBOL(__iounmap); EXPORT_SYMBOL(__iounmap);
int __virt_addr_valid(const volatile void *kaddr)
{
return pfn_valid(PFN_DOWN(virt_to_phys(kaddr)));
}
EXPORT_SYMBOL_GPL(__virt_addr_valid);
...@@ -192,3 +192,9 @@ unsigned long arch_randomize_brk(struct mm_struct *mm) ...@@ -192,3 +192,9 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
return ret; return ret;
} }
int __virt_addr_valid(const volatile void *kaddr)
{
return pfn_valid(PFN_DOWN(virt_to_phys(kaddr)));
}
EXPORT_SYMBOL_GPL(__virt_addr_valid);
...@@ -193,8 +193,11 @@ static void nlm_init_node(void) ...@@ -193,8 +193,11 @@ static void nlm_init_node(void)
void __init prom_init(void) void __init prom_init(void)
{ {
int i, *argv, *envp; /* passed as 32 bit ptrs */ int *argv, *envp; /* passed as 32 bit ptrs */
struct psb_info *prom_infop; struct psb_info *prom_infop;
#ifdef CONFIG_SMP
int i;
#endif
/* truncate to 32 bit and sign extend all args */ /* truncate to 32 bit and sign extend all args */
argv = (int *)(long)(int)fw_arg1; argv = (int *)(long)(int)fw_arg1;
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include <asm/mach-ath79/pci.h> #include <asm/mach-ath79/pci.h>
#define AR71XX_PCI_MEM_BASE 0x10000000 #define AR71XX_PCI_MEM_BASE 0x10000000
#define AR71XX_PCI_MEM_SIZE 0x08000000 #define AR71XX_PCI_MEM_SIZE 0x07000000
#define AR71XX_PCI_WIN0_OFFS 0x10000000 #define AR71XX_PCI_WIN0_OFFS 0x10000000
#define AR71XX_PCI_WIN1_OFFS 0x11000000 #define AR71XX_PCI_WIN1_OFFS 0x11000000
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#define AR724X_PCI_CTRL_SIZE 0x100 #define AR724X_PCI_CTRL_SIZE 0x100
#define AR724X_PCI_MEM_BASE 0x10000000 #define AR724X_PCI_MEM_BASE 0x10000000
#define AR724X_PCI_MEM_SIZE 0x08000000 #define AR724X_PCI_MEM_SIZE 0x04000000
#define AR724X_PCI_REG_RESET 0x18 #define AR724X_PCI_REG_RESET 0x18
#define AR724X_PCI_REG_INT_STATUS 0x4c #define AR724X_PCI_REG_INT_STATUS 0x4c
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment