Commit 356948f0 authored by Ralf Baechle's avatar Ralf Baechle

Merge branch '3.11-fixes' into mips-for-linux-next

parents 4d854194 c2882b7f
...@@ -126,12 +126,13 @@ int rtc_mips_set_mmss(unsigned long nowtime) ...@@ -126,12 +126,13 @@ int rtc_mips_set_mmss(unsigned long nowtime)
void __init plat_time_init(void) void __init plat_time_init(void)
{ {
u32 start, end; u32 start, end;
int i = HZ / 10; int i = HZ / 8;
/* Set up the rate of periodic DS1287 interrupts. */ /* Set up the rate of periodic DS1287 interrupts. */
ds1287_set_base_clock(HZ); ds1287_set_base_clock(HZ);
if (cpu_has_counter) { if (cpu_has_counter) {
ds1287_timer_state();
while (!ds1287_timer_state()) while (!ds1287_timer_state())
; ;
...@@ -143,7 +144,7 @@ void __init plat_time_init(void) ...@@ -143,7 +144,7 @@ void __init plat_time_init(void)
end = read_c0_count(); end = read_c0_count();
mips_hpt_frequency = (end - start) * 10; mips_hpt_frequency = (end - start) * 8;
printk(KERN_INFO "MIPS counter frequency %dHz\n", printk(KERN_INFO "MIPS counter frequency %dHz\n",
mips_hpt_frequency); mips_hpt_frequency);
} else if (IOASIC) } else if (IOASIC)
......
...@@ -41,9 +41,9 @@ void __init dec_ioasic_clocksource_init(void) ...@@ -41,9 +41,9 @@ void __init dec_ioasic_clocksource_init(void)
{ {
unsigned int freq; unsigned int freq;
u32 start, end; u32 start, end;
int i = HZ / 10; int i = HZ / 8;
ds1287_timer_state();
while (!ds1287_timer_state()) while (!ds1287_timer_state())
; ;
...@@ -55,7 +55,7 @@ void __init dec_ioasic_clocksource_init(void) ...@@ -55,7 +55,7 @@ void __init dec_ioasic_clocksource_init(void)
end = dec_ioasic_hpt_read(&clocksource_dec); end = dec_ioasic_hpt_read(&clocksource_dec);
freq = (end - start) * 10; freq = (end - start) * 8;
printk(KERN_INFO "I/O ASIC clock frequency %dHz\n", freq); printk(KERN_INFO "I/O ASIC clock frequency %dHz\n", freq);
clocksource_dec.rating = 200 + freq / 10000000; clocksource_dec.rating = 200 + freq / 10000000;
......
...@@ -26,6 +26,12 @@ process_entry: ...@@ -26,6 +26,12 @@ process_entry:
PTR_L s2, (s0) PTR_L s2, (s0)
PTR_ADD s0, s0, SZREG PTR_ADD s0, s0, SZREG
/*
* In case of a kdump/crash kernel, the indirection page is not
* populated as the kernel is directly copied to a reserved location
*/
beqz s2, done
/* destination page */ /* destination page */
and s3, s2, 0x1 and s3, s2, 0x1
beq s3, zero, 1f beq s3, zero, 1f
......
...@@ -552,6 +552,52 @@ static void __init arch_mem_addpart(phys_t mem, phys_t end, int type) ...@@ -552,6 +552,52 @@ static void __init arch_mem_addpart(phys_t mem, phys_t end, int type)
add_memory_region(mem, size, type); add_memory_region(mem, size, type);
} }
#ifdef CONFIG_KEXEC
static inline unsigned long long get_total_mem(void)
{
unsigned long long total;
total = max_pfn - min_low_pfn;
return total << PAGE_SHIFT;
}
static void __init mips_parse_crashkernel(void)
{
unsigned long long total_mem;
unsigned long long crash_size, crash_base;
int ret;
total_mem = get_total_mem();
ret = parse_crashkernel(boot_command_line, total_mem,
&crash_size, &crash_base);
if (ret != 0 || crash_size <= 0)
return;
crashk_res.start = crash_base;
crashk_res.end = crash_base + crash_size - 1;
}
static void __init request_crashkernel(struct resource *res)
{
int ret;
ret = request_resource(res, &crashk_res);
if (!ret)
pr_info("Reserving %ldMB of memory at %ldMB for crashkernel\n",
(unsigned long)((crashk_res.end -
crashk_res.start + 1) >> 20),
(unsigned long)(crashk_res.start >> 20));
}
#else /* !defined(CONFIG_KEXEC) */
static void __init mips_parse_crashkernel(void)
{
}
static void __init request_crashkernel(struct resource *res)
{
}
#endif /* !defined(CONFIG_KEXEC) */
static void __init arch_mem_init(char **cmdline_p) static void __init arch_mem_init(char **cmdline_p)
{ {
extern void plat_mem_setup(void); extern void plat_mem_setup(void);
...@@ -608,6 +654,8 @@ static void __init arch_mem_init(char **cmdline_p) ...@@ -608,6 +654,8 @@ static void __init arch_mem_init(char **cmdline_p)
BOOTMEM_DEFAULT); BOOTMEM_DEFAULT);
} }
#endif #endif
mips_parse_crashkernel();
#ifdef CONFIG_KEXEC #ifdef CONFIG_KEXEC
if (crashk_res.start != crashk_res.end) if (crashk_res.start != crashk_res.end)
reserve_bootmem(crashk_res.start, reserve_bootmem(crashk_res.start,
...@@ -620,52 +668,6 @@ static void __init arch_mem_init(char **cmdline_p) ...@@ -620,52 +668,6 @@ static void __init arch_mem_init(char **cmdline_p)
paging_init(); paging_init();
} }
#ifdef CONFIG_KEXEC
static inline unsigned long long get_total_mem(void)
{
unsigned long long total;
total = max_pfn - min_low_pfn;
return total << PAGE_SHIFT;
}
static void __init mips_parse_crashkernel(void)
{
unsigned long long total_mem;
unsigned long long crash_size, crash_base;
int ret;
total_mem = get_total_mem();
ret = parse_crashkernel(boot_command_line, total_mem,
&crash_size, &crash_base);
if (ret != 0 || crash_size <= 0)
return;
crashk_res.start = crash_base;
crashk_res.end = crash_base + crash_size - 1;
}
static void __init request_crashkernel(struct resource *res)
{
int ret;
ret = request_resource(res, &crashk_res);
if (!ret)
pr_info("Reserving %ldMB of memory at %ldMB for crashkernel\n",
(unsigned long)((crashk_res.end -
crashk_res.start + 1) >> 20),
(unsigned long)(crashk_res.start >> 20));
}
#else /* !defined(CONFIG_KEXEC) */
static void __init mips_parse_crashkernel(void)
{
}
static void __init request_crashkernel(struct resource *res)
{
}
#endif /* !defined(CONFIG_KEXEC) */
static void __init resource_init(void) static void __init resource_init(void)
{ {
int i; int i;
...@@ -678,11 +680,6 @@ static void __init resource_init(void) ...@@ -678,11 +680,6 @@ static void __init resource_init(void)
data_resource.start = __pa_symbol(&_etext); data_resource.start = __pa_symbol(&_etext);
data_resource.end = __pa_symbol(&_edata) - 1; data_resource.end = __pa_symbol(&_edata) - 1;
/*
* Request address space for all standard RAM.
*/
mips_parse_crashkernel();
for (i = 0; i < boot_mem_map.nr_map; i++) { for (i = 0; i < boot_mem_map.nr_map; i++) {
struct resource *res; struct resource *res;
unsigned long start, end; unsigned long start, end;
......
...@@ -254,6 +254,7 @@ void copy_from_user_page(struct vm_area_struct *vma, ...@@ -254,6 +254,7 @@ void copy_from_user_page(struct vm_area_struct *vma,
SetPageDcacheDirty(page); SetPageDcacheDirty(page);
} }
} }
EXPORT_SYMBOL_GPL(copy_from_user_page);
void __init fixrange_init(unsigned long start, unsigned long end, void __init fixrange_init(unsigned long start, unsigned long end,
pgd_t *pgd_base) pgd_t *pgd_base)
......
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