Merge tag 'mips_4.16' of git://git.kernel.org/pub/scm/linux/kernel/git/jhogan/mips
Pull MIPS updates from James Hogan: "These are the main MIPS changes for 4.16. Rough overview: (1) Basic support for the Ingenic JZ4770 based GCW Zero open-source handheld video game console (2) Support for the Ranchu board (used by Android emulator) (3) Various cleanups and misc improvements More detailed summary: Fixes: - Fix generic platform's USB_*HCI_BIG_ENDIAN selects (4.9) - Fix vmlinuz default build when ZBOOT selected - Fix clean up of vmlinuz targets - Fix command line duplication (in preparation for Ingenic JZ4770) Miscellaneous: - Allow Processor ID reads to be to be optimised away by the compiler (improves performance when running in guest) - Push ARCH_MIGHT_HAVE_PC_SERIO/PARPORT down to platform level to disable on generic platform with Ranchu board support - Add helpers for assembler macro instructions for older assemblers - Use assembler macro instructions to support VZ, XPA & MSA operations on older assemblers, removing C wrapper duplication - Various improvements to VZ & XPA assembly wrappers - Add drivers/platform/mips/ to MIPS MAINTAINERS entry Minor cleanups: - Misc FPU emulation cleanups (removal of unnecessary include, moving macros to common header, checkpatch and sparse fixes) - Remove duplicate assignment of core in play_dead() - Remove duplication in watchpoint handling - Remove mips_dma_mapping_error() stub - Use NULL instead of 0 in prepare_ftrace_return() - Use proper kernel-doc Return keyword for __compute_return_epc_for_insn() - Remove duplicate semicolon in csum_fold() Platform support: Broadcom: - Enable ZBOOT on BCM47xx Generic platform: - Add Ranchu board support, used by Android emulator - Fix machine compatible string matching for Ranchu - Support GIC in EIC mode Ingenic platforms: - Add DT, defconfig and other support for JZ4770 SoC and GCW Zero - Support dynamnic machine types (i.e. JZ4740 / JZ4770 / JZ4780) - Add Ingenic JZ4770 CGU clocks - General Ingenic clk changes to prepare for JZ4770 SoC support - Use common command line handling code - Add DT vendor prefix to GCW (Game Consoles Worldwide) Loongson: - Add MAINTAINERS entry for Loongson2 and Loongson3 platforms - Drop 32-bit support for Loongson 2E/2F devices - Fix build failures due to multiple use of 'MEM_RESERVED'" * tag 'mips_4.16' of git://git.kernel.org/pub/scm/linux/kernel/git/jhogan/mips: (53 commits) MIPS: Malta: Sanitize mouse and keyboard configuration. MIPS: Update defconfigs after previous patch. MIPS: Push ARCH_MIGHT_HAVE_PC_SERIO down to platform level MIPS: Push ARCH_MIGHT_HAVE_PC_PARPORT down to platform level MIPS: SMP-CPS: Remove duplicate assignment of core in play_dead MIPS: Generic: Support GIC in EIC mode MIPS: generic: Fix Makefile alignment MIPS: generic: Fix ranchu_of_match[] termination MIPS: generic: Fix machine compatible matching MIPS: Loongson fix name confict - MEM_RESERVED MIPS: bcm47xx: enable ZBOOT support MIPS: Fix trailing semicolon MIPS: Watch: Avoid duplication of bits in mips_read_watch_registers MIPS: Watch: Avoid duplication of bits in mips_install_watch_registers. MIPS: MSA: Update helpers to use new asm macros MIPS: XPA: Standardise readx/writex accessors MIPS: XPA: Allow use of $0 (zero) to MTHC0 MIPS: XPA: Use XPA instructions in assembly MIPS: VZ: Pass GC0 register names in $n format MIPS: VZ: Update helpers to use new asm macros ...
Этот коммит содержится в:
@@ -399,7 +399,7 @@ int __MIPS16e_compute_return_epc(struct pt_regs *regs)
|
||||
*
|
||||
* @regs: Pointer to pt_regs
|
||||
* @insn: branch instruction to decode
|
||||
* @returns: -EFAULT on error and forces SIGILL, and on success
|
||||
* Return: -EFAULT on error and forces SIGILL, and on success
|
||||
* returns 0 or BRANCH_LIKELY_TAKEN as appropriate after
|
||||
* evaluating the branch.
|
||||
*
|
||||
|
@@ -361,7 +361,7 @@ void prepare_ftrace_return(unsigned long *parent_ra_addr, unsigned long self_ra,
|
||||
* If fails when getting the stack address of the non-leaf function's
|
||||
* ra, stop function graph tracer and return
|
||||
*/
|
||||
if (parent_ra_addr == 0)
|
||||
if (parent_ra_addr == NULL)
|
||||
goto out;
|
||||
#endif
|
||||
/* *parent_ra_addr = return_hooker; */
|
||||
|
@@ -826,25 +826,6 @@ static void __init arch_mem_init(char **cmdline_p)
|
||||
struct memblock_region *reg;
|
||||
extern void plat_mem_setup(void);
|
||||
|
||||
/* call board setup routine */
|
||||
plat_mem_setup();
|
||||
|
||||
/*
|
||||
* Make sure all kernel memory is in the maps. The "UP" and
|
||||
* "DOWN" are opposite for initdata since if it crosses over
|
||||
* into another memory section you don't want that to be
|
||||
* freed when the initdata is freed.
|
||||
*/
|
||||
arch_mem_addpart(PFN_DOWN(__pa_symbol(&_text)) << PAGE_SHIFT,
|
||||
PFN_UP(__pa_symbol(&_edata)) << PAGE_SHIFT,
|
||||
BOOT_MEM_RAM);
|
||||
arch_mem_addpart(PFN_UP(__pa_symbol(&__init_begin)) << PAGE_SHIFT,
|
||||
PFN_DOWN(__pa_symbol(&__init_end)) << PAGE_SHIFT,
|
||||
BOOT_MEM_INIT_RAM);
|
||||
|
||||
pr_info("Determined physical RAM map:\n");
|
||||
print_memory_map();
|
||||
|
||||
#if defined(CONFIG_CMDLINE_BOOL) && defined(CONFIG_CMDLINE_OVERRIDE)
|
||||
strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
|
||||
#else
|
||||
@@ -872,6 +853,26 @@ static void __init arch_mem_init(char **cmdline_p)
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* call board setup routine */
|
||||
plat_mem_setup();
|
||||
|
||||
/*
|
||||
* Make sure all kernel memory is in the maps. The "UP" and
|
||||
* "DOWN" are opposite for initdata since if it crosses over
|
||||
* into another memory section you don't want that to be
|
||||
* freed when the initdata is freed.
|
||||
*/
|
||||
arch_mem_addpart(PFN_DOWN(__pa_symbol(&_text)) << PAGE_SHIFT,
|
||||
PFN_UP(__pa_symbol(&_edata)) << PAGE_SHIFT,
|
||||
BOOT_MEM_RAM);
|
||||
arch_mem_addpart(PFN_UP(__pa_symbol(&__init_begin)) << PAGE_SHIFT,
|
||||
PFN_DOWN(__pa_symbol(&__init_end)) << PAGE_SHIFT,
|
||||
BOOT_MEM_INIT_RAM);
|
||||
|
||||
pr_info("Determined physical RAM map:\n");
|
||||
print_memory_map();
|
||||
|
||||
strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
|
||||
|
||||
*cmdline_p = command_line;
|
||||
|
@@ -439,8 +439,6 @@ void play_dead(void)
|
||||
pr_debug("CPU%d going offline\n", cpu);
|
||||
|
||||
if (cpu_has_mipsmt || cpu_has_vp) {
|
||||
core = cpu_core(&cpu_data[cpu]);
|
||||
|
||||
/* Look for another online VPE within the core */
|
||||
for_each_online_cpu(cpu_death_sibling) {
|
||||
if (!cpus_are_siblings(cpu, cpu_death_sibling))
|
||||
|
@@ -18,27 +18,24 @@
|
||||
void mips_install_watch_registers(struct task_struct *t)
|
||||
{
|
||||
struct mips3264_watch_reg_state *watches = &t->thread.watch.mips3264;
|
||||
unsigned int watchhi = MIPS_WATCHHI_G | /* Trap all ASIDs */
|
||||
MIPS_WATCHHI_IRW; /* Clear result bits */
|
||||
|
||||
switch (current_cpu_data.watch_reg_use_cnt) {
|
||||
default:
|
||||
BUG();
|
||||
case 4:
|
||||
write_c0_watchlo3(watches->watchlo[3]);
|
||||
/* Write 1 to the I, R, and W bits to clear them, and
|
||||
1 to G so all ASIDs are trapped. */
|
||||
write_c0_watchhi3(MIPS_WATCHHI_G | MIPS_WATCHHI_IRW |
|
||||
watches->watchhi[3]);
|
||||
write_c0_watchhi3(watchhi | watches->watchhi[3]);
|
||||
case 3:
|
||||
write_c0_watchlo2(watches->watchlo[2]);
|
||||
write_c0_watchhi2(MIPS_WATCHHI_G | MIPS_WATCHHI_IRW |
|
||||
watches->watchhi[2]);
|
||||
write_c0_watchhi2(watchhi | watches->watchhi[2]);
|
||||
case 2:
|
||||
write_c0_watchlo1(watches->watchlo[1]);
|
||||
write_c0_watchhi1(MIPS_WATCHHI_G | MIPS_WATCHHI_IRW |
|
||||
watches->watchhi[1]);
|
||||
write_c0_watchhi1(watchhi | watches->watchhi[1]);
|
||||
case 1:
|
||||
write_c0_watchlo0(watches->watchlo[0]);
|
||||
write_c0_watchhi0(MIPS_WATCHHI_G | MIPS_WATCHHI_IRW |
|
||||
watches->watchhi[0]);
|
||||
write_c0_watchhi0(watchhi | watches->watchhi[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,21 +48,19 @@ void mips_read_watch_registers(void)
|
||||
{
|
||||
struct mips3264_watch_reg_state *watches =
|
||||
¤t->thread.watch.mips3264;
|
||||
unsigned int watchhi_mask = MIPS_WATCHHI_MASK | MIPS_WATCHHI_IRW;
|
||||
|
||||
switch (current_cpu_data.watch_reg_use_cnt) {
|
||||
default:
|
||||
BUG();
|
||||
case 4:
|
||||
watches->watchhi[3] = (read_c0_watchhi3() &
|
||||
(MIPS_WATCHHI_MASK | MIPS_WATCHHI_IRW));
|
||||
watches->watchhi[3] = (read_c0_watchhi3() & watchhi_mask);
|
||||
case 3:
|
||||
watches->watchhi[2] = (read_c0_watchhi2() &
|
||||
(MIPS_WATCHHI_MASK | MIPS_WATCHHI_IRW));
|
||||
watches->watchhi[2] = (read_c0_watchhi2() & watchhi_mask);
|
||||
case 2:
|
||||
watches->watchhi[1] = (read_c0_watchhi1() &
|
||||
(MIPS_WATCHHI_MASK | MIPS_WATCHHI_IRW));
|
||||
watches->watchhi[1] = (read_c0_watchhi1() & watchhi_mask);
|
||||
case 1:
|
||||
watches->watchhi[0] = (read_c0_watchhi0() &
|
||||
(MIPS_WATCHHI_MASK | MIPS_WATCHHI_IRW));
|
||||
watches->watchhi[0] = (read_c0_watchhi0() & watchhi_mask);
|
||||
}
|
||||
if (current_cpu_data.watch_reg_use_cnt == 1 &&
|
||||
(watches->watchhi[0] & MIPS_WATCHHI_IRW) == 0) {
|
||||
|
Ссылка в новой задаче
Block a user