Merge branch '3.10-fixes' into mips-for-linux-next
This that should have been fixed but weren't, way to much, intrusive and late.
This commit is contained in:
@@ -25,12 +25,16 @@
|
||||
#define MCOUNT_OFFSET_INSNS 4
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||
|
||||
/* 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);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Check if the address is in kernel space
|
||||
*
|
||||
|
@@ -27,45 +27,6 @@
|
||||
|
||||
#include <kernel-entry-init.h>
|
||||
|
||||
/*
|
||||
* inputs are the text nasid in t1, data nasid in t2.
|
||||
*/
|
||||
.macro MAPPED_KERNEL_SETUP_TLB
|
||||
#ifdef CONFIG_MAPPED_KERNEL
|
||||
/*
|
||||
* This needs to read the nasid - assume 0 for now.
|
||||
* Drop in 0xffffffffc0000000 in tlbhi, 0+VG in tlblo_0,
|
||||
* 0+DVG in tlblo_1.
|
||||
*/
|
||||
dli t0, 0xffffffffc0000000
|
||||
dmtc0 t0, CP0_ENTRYHI
|
||||
li t0, 0x1c000 # Offset of text into node memory
|
||||
dsll t1, NASID_SHFT # Shift text nasid into place
|
||||
dsll t2, NASID_SHFT # Same for data nasid
|
||||
or t1, t1, t0 # Physical load address of kernel text
|
||||
or t2, t2, t0 # Physical load address of kernel data
|
||||
dsrl t1, 12 # 4K pfn
|
||||
dsrl t2, 12 # 4K pfn
|
||||
dsll t1, 6 # Get pfn into place
|
||||
dsll t2, 6 # Get pfn into place
|
||||
li t0, ((_PAGE_GLOBAL|_PAGE_VALID| _CACHE_CACHABLE_COW) >> 6)
|
||||
or t0, t0, t1
|
||||
mtc0 t0, CP0_ENTRYLO0 # physaddr, VG, cach exlwr
|
||||
li t0, ((_PAGE_GLOBAL|_PAGE_VALID| _PAGE_DIRTY|_CACHE_CACHABLE_COW) >> 6)
|
||||
or t0, t0, t2
|
||||
mtc0 t0, CP0_ENTRYLO1 # physaddr, DVG, cach exlwr
|
||||
li t0, 0x1ffe000 # MAPPED_KERN_TLBMASK, TLBPGMASK_16M
|
||||
mtc0 t0, CP0_PAGEMASK
|
||||
li t0, 0 # KMAP_INX
|
||||
mtc0 t0, CP0_INDEX
|
||||
li t0, 1
|
||||
mtc0 t0, CP0_WIRED
|
||||
tlbwi
|
||||
#else
|
||||
mtc0 zero, CP0_WIRED
|
||||
#endif
|
||||
.endm
|
||||
|
||||
/*
|
||||
* For the moment disable interrupts, mark the kernel mode and
|
||||
* set ST0_KX so that the CPU does not spit fire when using
|
||||
|
@@ -93,26 +93,27 @@ static void rm7k_wait_irqoff(void)
|
||||
}
|
||||
|
||||
/*
|
||||
* The Au1xxx wait is available only if using 32khz counter or
|
||||
* external timer source, but specifically not CP0 Counter.
|
||||
* alchemy/common/time.c may override cpu_wait!
|
||||
* Au1 'wait' is only useful when the 32kHz counter is used as timer,
|
||||
* since coreclock (and the cp0 counter) stops upon executing it. Only an
|
||||
* interrupt can wake it, so they must be enabled before entering idle modes.
|
||||
*/
|
||||
static void au1k_wait(void)
|
||||
{
|
||||
unsigned long c0status = read_c0_status() | 1; /* irqs on */
|
||||
|
||||
__asm__(
|
||||
" .set mips3 \n"
|
||||
" cache 0x14, 0(%0) \n"
|
||||
" cache 0x14, 32(%0) \n"
|
||||
" sync \n"
|
||||
" nop \n"
|
||||
" mtc0 %1, $12 \n" /* wr c0status */
|
||||
" wait \n"
|
||||
" nop \n"
|
||||
" nop \n"
|
||||
" nop \n"
|
||||
" nop \n"
|
||||
" .set mips0 \n"
|
||||
: : "r" (au1k_wait));
|
||||
local_irq_enable();
|
||||
: : "r" (au1k_wait), "r" (c0status));
|
||||
}
|
||||
|
||||
static int __initdata nowait;
|
||||
|
@@ -437,7 +437,6 @@ static ssize_t file_write(struct file *file, const char __user * buffer,
|
||||
size_t count, loff_t * ppos)
|
||||
{
|
||||
int minor = iminor(file_inode(file));
|
||||
struct rtlx_channel *rt = &rtlx->channel[minor];
|
||||
|
||||
/* any space left... */
|
||||
if (!rtlx_write_poll(minor)) {
|
||||
|
@@ -1668,7 +1668,6 @@ void *set_vi_handler(int n, vi_handler_t addr)
|
||||
}
|
||||
|
||||
extern void tlb_init(void);
|
||||
extern void flush_tlb_handlers(void);
|
||||
|
||||
/*
|
||||
* Timer interrupt
|
||||
@@ -2006,7 +2005,6 @@ void __init trap_init(void)
|
||||
set_handler(0x080, &except_vec3_generic, 0x80);
|
||||
|
||||
local_flush_icache_range(ebase, ebase + 0x400);
|
||||
flush_tlb_handlers();
|
||||
|
||||
sort_extable(__start___dbe_table, __stop___dbe_table);
|
||||
|
||||
|
@@ -111,6 +111,7 @@ __cpuinit void mips_probe_watch_registers(struct cpuinfo_mips *c)
|
||||
* disable the register.
|
||||
*/
|
||||
write_c0_watchlo0(7);
|
||||
back_to_back_c0_hazard();
|
||||
t = read_c0_watchlo0();
|
||||
write_c0_watchlo0(0);
|
||||
c->watch_reg_masks[0] = t & 7;
|
||||
@@ -121,12 +122,14 @@ __cpuinit void mips_probe_watch_registers(struct cpuinfo_mips *c)
|
||||
c->watch_reg_use_cnt = 1;
|
||||
t = read_c0_watchhi0();
|
||||
write_c0_watchhi0(t | 0xff8);
|
||||
back_to_back_c0_hazard();
|
||||
t = read_c0_watchhi0();
|
||||
c->watch_reg_masks[0] |= (t & 0xff8);
|
||||
if ((t & 0x80000000) == 0)
|
||||
return;
|
||||
|
||||
write_c0_watchlo1(7);
|
||||
back_to_back_c0_hazard();
|
||||
t = read_c0_watchlo1();
|
||||
write_c0_watchlo1(0);
|
||||
c->watch_reg_masks[1] = t & 7;
|
||||
@@ -135,12 +138,14 @@ __cpuinit void mips_probe_watch_registers(struct cpuinfo_mips *c)
|
||||
c->watch_reg_use_cnt = 2;
|
||||
t = read_c0_watchhi1();
|
||||
write_c0_watchhi1(t | 0xff8);
|
||||
back_to_back_c0_hazard();
|
||||
t = read_c0_watchhi1();
|
||||
c->watch_reg_masks[1] |= (t & 0xff8);
|
||||
if ((t & 0x80000000) == 0)
|
||||
return;
|
||||
|
||||
write_c0_watchlo2(7);
|
||||
back_to_back_c0_hazard();
|
||||
t = read_c0_watchlo2();
|
||||
write_c0_watchlo2(0);
|
||||
c->watch_reg_masks[2] = t & 7;
|
||||
@@ -149,12 +154,14 @@ __cpuinit void mips_probe_watch_registers(struct cpuinfo_mips *c)
|
||||
c->watch_reg_use_cnt = 3;
|
||||
t = read_c0_watchhi2();
|
||||
write_c0_watchhi2(t | 0xff8);
|
||||
back_to_back_c0_hazard();
|
||||
t = read_c0_watchhi2();
|
||||
c->watch_reg_masks[2] |= (t & 0xff8);
|
||||
if ((t & 0x80000000) == 0)
|
||||
return;
|
||||
|
||||
write_c0_watchlo3(7);
|
||||
back_to_back_c0_hazard();
|
||||
t = read_c0_watchlo3();
|
||||
write_c0_watchlo3(0);
|
||||
c->watch_reg_masks[3] = t & 7;
|
||||
@@ -163,6 +170,7 @@ __cpuinit void mips_probe_watch_registers(struct cpuinfo_mips *c)
|
||||
c->watch_reg_use_cnt = 4;
|
||||
t = read_c0_watchhi3();
|
||||
write_c0_watchhi3(t | 0xff8);
|
||||
back_to_back_c0_hazard();
|
||||
t = read_c0_watchhi3();
|
||||
c->watch_reg_masks[3] |= (t & 0xff8);
|
||||
if ((t & 0x80000000) == 0)
|
||||
|
Reference in New Issue
Block a user