forked from Minki/linux
ARC updates for 3.20
Some fixes, nothing too exciting this time as well... -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJU4cZEAAoJEGnX8d3iisJeBCUQAI1nYhR3tMZzYdotCPIFdFHM KYHx+9fyrVqg1S4clyp6rLMICAlhLOsiYDmJ8/i2rileZGFdmHQqZXLm7GzRSZ6X ZPLolJ0ETlbRhLf91jz/3s2A2rr32aw+oHpIZ1HAgmIUB3mwpcrpNqNVNLmzcyg/ 3NkPFxlmFwrX/NPLOx9v9/RpKRd5EGF9MvSaxJ7NT6R3qvGfDFRtzieFugCbhz85 SUW/V0jGIfVyj+eB4NTs1jxZeNEPuAKguRkWcdE9+98fLMaticOvuFZ4pvVS4zwQ ziNGY2XngZCl0GjAIijwG730f6SeEF2VxrDGco2CgAxwKr/lm2cRubgULzEBZlyr SzH1a8oixIEg4il59ZvvqnI5iouBBz+ykXe7TD4B1HLaMvQGhrXg2kRj7O80t8UA CpuuskyTWBBLZR7ypIG93UNbe64I8L7Xd5bCQsXx5sIDVXIvdeIDvM9PbK9LNg+7 Qkm1ONepdSkFdpayzXjEowjfADAZjSmJcvybGZQ4lT3+0dh0hIJiKUk25eA4oV6y Ue1T/yvJXh0Xlso4Oo8Xp8qsVe8oM3FrorTYKwvhKegN5Gd61mUob31tHMQnvRjO O3aEF2Pe+r3qUxI7tTyFXBXDmCjay/uRLa7ltOyfP4aZXrgI3aEVpk12OEf5S3G1 10p/ofrH9+KJ47rWNCOz =8o17 -----END PGP SIGNATURE----- Merge tag 'arc-3.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc Pull ARC updates from Vineet Gupta: "Some fixes, nothing too exciting this time as well..." * tag 'arc-3.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc: ARC: fix page address calculation if PAGE_OFFSET != LINUX_LINK_BASE ARC: Fix earlycon build breakage ARC: Dynamically determine BASE_BAUD from DeviceTree arc: Remove unused prepare_to_copy() ARC: use ACCESS_ONCE in cmpxchg loop ARC: add some more comments to ret_from_fork ARC: fix /proc/cpuinfo for offline cpus
This commit is contained in:
commit
a68fb48380
@ -257,7 +257,8 @@ static inline void pmd_set(pmd_t *pmdp, pte_t *ptep)
|
||||
#define pmd_clear(xp) do { pmd_val(*(xp)) = 0; } while (0)
|
||||
|
||||
#define pte_page(x) (mem_map + \
|
||||
(unsigned long)(((pte_val(x) - PAGE_OFFSET) >> PAGE_SHIFT)))
|
||||
(unsigned long)(((pte_val(x) - CONFIG_LINUX_LINK_BASE) >> \
|
||||
PAGE_SHIFT)))
|
||||
|
||||
#define mk_pte(page, pgprot) \
|
||||
({ \
|
||||
|
@ -56,9 +56,6 @@ unsigned long thread_saved_pc(struct task_struct *t);
|
||||
/* Free all resources held by a thread */
|
||||
#define release_thread(thread) do { } while (0)
|
||||
|
||||
/* Prepare to copy thread state - unlazy all lazy status */
|
||||
#define prepare_to_copy(tsk) do { } while (0)
|
||||
|
||||
/*
|
||||
* A lot of busy-wait loops in SMP are based off of non-volatile data otherwise
|
||||
* get optimised away by gcc
|
||||
|
@ -10,26 +10,13 @@
|
||||
#define _ASM_ARC_SERIAL_H
|
||||
|
||||
/*
|
||||
* early-8250 requires BASE_BAUD to be defined and includes this header.
|
||||
* We put in a typical value:
|
||||
* (core clk / 16) - i.e. UART samples 16 times per sec.
|
||||
* Athough in multi-platform-image this might not work, specially if the
|
||||
* clk driving the UART is different.
|
||||
* We can't use DeviceTree as this is typically for early serial.
|
||||
* early 8250 (now earlycon) requires BASE_BAUD to be defined in this header.
|
||||
* However to still determine it dynamically (for multi-platform images)
|
||||
* we do this in a helper by parsing the FDT early
|
||||
*/
|
||||
|
||||
#include <asm/clk.h>
|
||||
extern unsigned int __init arc_early_base_baud(void);
|
||||
|
||||
#define BASE_BAUD (arc_get_core_freq() / 16)
|
||||
|
||||
/*
|
||||
* This is definitely going to break early 8250 consoles on multi-platform
|
||||
* images but hey, it won't add any code complexity for a debug feature of
|
||||
* one broken driver.
|
||||
*/
|
||||
#ifdef CONFIG_ARC_PLAT_TB10X
|
||||
#undef BASE_BAUD
|
||||
#define BASE_BAUD (arc_get_core_freq() / 16 / 3)
|
||||
#endif
|
||||
#define BASE_BAUD arc_early_base_baud()
|
||||
|
||||
#endif /* _ASM_ARC_SERIAL_H */
|
||||
|
@ -17,6 +17,28 @@
|
||||
#include <asm/clk.h>
|
||||
#include <asm/mach_desc.h>
|
||||
|
||||
#ifdef CONFIG_SERIAL_EARLYCON
|
||||
|
||||
static unsigned int __initdata arc_base_baud;
|
||||
|
||||
unsigned int __init arc_early_base_baud(void)
|
||||
{
|
||||
return arc_base_baud/16;
|
||||
}
|
||||
|
||||
static void __init arc_set_early_base_baud(unsigned long dt_root)
|
||||
{
|
||||
unsigned int core_clk = arc_get_core_freq();
|
||||
|
||||
if (of_flat_dt_is_compatible(dt_root, "abilis,arc-tb10x"))
|
||||
arc_base_baud = core_clk/3;
|
||||
else
|
||||
arc_base_baud = core_clk;
|
||||
}
|
||||
#else
|
||||
#define arc_set_early_base_baud(dt_root)
|
||||
#endif
|
||||
|
||||
static const void * __init arch_get_next_mach(const char *const **match)
|
||||
{
|
||||
static const struct machine_desc *mdesc = __arch_info_begin;
|
||||
@ -56,5 +78,7 @@ const struct machine_desc * __init setup_machine_fdt(void *dt)
|
||||
if (clk)
|
||||
arc_set_core_freq(of_read_ulong(clk, len/4));
|
||||
|
||||
arc_set_early_base_baud(dt_root);
|
||||
|
||||
return mdesc;
|
||||
}
|
||||
|
@ -736,16 +736,20 @@ ENTRY(ret_from_fork)
|
||||
; put last task in scheduler queue
|
||||
bl @schedule_tail
|
||||
|
||||
; If kernel thread, jump to its entry-point
|
||||
ld r9, [sp, PT_status32]
|
||||
brne r9, 0, 1f
|
||||
|
||||
jl.d [r14]
|
||||
mov r0, r13 ; arg to payload
|
||||
jl.d [r14] ; kernel thread entry point
|
||||
mov r0, r13 ; (see PF_KTHREAD block in copy_thread)
|
||||
|
||||
1:
|
||||
; special case of kernel_thread entry point returning back due to
|
||||
; kernel_execve() - pretend return from syscall to ret to userland
|
||||
; Return to user space
|
||||
; 1. Any forked task (Reach here via BRne above)
|
||||
; 2. First ever init task (Reach here via return from JL above)
|
||||
; This is the historic "kernel_execve" use-case, to return to init
|
||||
; user mode, in a round about way since that is always done from
|
||||
; a kernel thread which is executed via JL above but always returns
|
||||
; out whenever kernel_execve (now inline do_fork()) is involved
|
||||
b ret_from_exception
|
||||
END(ret_from_fork)
|
||||
|
||||
|
@ -412,6 +412,11 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
||||
char *str;
|
||||
int cpu_id = ptr_to_cpu(v);
|
||||
|
||||
if (!cpu_online(cpu_id)) {
|
||||
seq_printf(m, "processor [%d]\t: Offline\n", cpu_id);
|
||||
goto done;
|
||||
}
|
||||
|
||||
str = (char *)__get_free_page(GFP_TEMPORARY);
|
||||
if (!str)
|
||||
goto done;
|
||||
@ -429,7 +434,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
||||
|
||||
free_page((unsigned long)str);
|
||||
done:
|
||||
seq_printf(m, "\n\n");
|
||||
seq_printf(m, "\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -221,7 +221,7 @@ static void ipi_send_msg_one(int cpu, enum ipi_msg_type msg)
|
||||
* and read back old value
|
||||
*/
|
||||
do {
|
||||
new = old = *ipi_data_ptr;
|
||||
new = old = ACCESS_ONCE(*ipi_data_ptr);
|
||||
new |= 1U << msg;
|
||||
} while (cmpxchg(ipi_data_ptr, old, new) != old);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user