A few more MIPS fixes:
- Fix a silly typo in virt_addr_valid which led to completely bogus behavior (that happened to stop tripping up hardened usercopy despite being broken). - Fix UART parity setup on AR933x systems. - A build fix for non-Linux build machines. - Have the 'all' make target build DTBs, primarily to fit in with the behavior of scripts/package/builddeb. - Handle an execution hazard in TLB exceptions that use KScratch registers, which could inadvertently clobber the $1 register on some generally higher-end out-of-order CPUs. - A MAINTAINERS update to fix the path to the NAND driver for Ingenic systems. -----BEGIN PGP SIGNATURE----- iIsEABYIADMWIQRgLjeFAZEXQzy86/s+p5+stXUA3QUCXSDJfhUccGF1bC5idXJ0 b25AbWlwcy5jb20ACgkQPqefrLV1AN35ygEA30KckazfjbtmW0EqD+C19sgtbSS3 eCAiweHHwLJoyUUBAJ/HzlZ8ap2X9ilZuFdzKEf1igj5WsLIyrkl6kkauUEA =DRYO -----END PGP SIGNATURE----- Merge tag 'mips_fixes_5.2_2' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux Pull MIPS fixes from Paul Burton: "A few more MIPS fixes: - Fix a silly typo in virt_addr_valid which led to completely bogus behavior (that happened to stop tripping up hardened usercopy despite being broken). - Fix UART parity setup on AR933x systems. - A build fix for non-Linux build machines. - Have the 'all' make target build DTBs, primarily to fit in with the behavior of scripts/package/builddeb. - Handle an execution hazard in TLB exceptions that use KScratch registers, which could inadvertently clobber the $1 register on some generally higher-end out-of-order CPUs. - A MAINTAINERS update to fix the path to the NAND driver for Ingenic systems" * tag 'mips_fixes_5.2_2' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux: MAINTAINERS: Correct path to moved files MIPS: Add missing EHB in mtc0 -> mfc0 sequence. MIPS: have "plain" make calls build dtbs for selected platforms MIPS: fix build on non-linux hosts MIPS: ath79: fix ar933x uart parity mode MIPS: Fix bounds check virt_addr_valid
This commit is contained in:
commit
bcc0e65f47
|
@ -7810,7 +7810,7 @@ INGENIC JZ4780 NAND DRIVER
|
||||||
M: Harvey Hunt <harveyhuntnexus@gmail.com>
|
M: Harvey Hunt <harveyhuntnexus@gmail.com>
|
||||||
L: linux-mtd@lists.infradead.org
|
L: linux-mtd@lists.infradead.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/mtd/nand/raw/jz4780_*
|
F: drivers/mtd/nand/raw/ingenic/
|
||||||
|
|
||||||
INOTIFY
|
INOTIFY
|
||||||
M: Jan Kara <jack@suse.cz>
|
M: Jan Kara <jack@suse.cz>
|
||||||
|
|
|
@ -17,6 +17,7 @@ archscripts: scripts_basic
|
||||||
$(Q)$(MAKE) $(build)=arch/mips/boot/tools relocs
|
$(Q)$(MAKE) $(build)=arch/mips/boot/tools relocs
|
||||||
|
|
||||||
KBUILD_DEFCONFIG := 32r2el_defconfig
|
KBUILD_DEFCONFIG := 32r2el_defconfig
|
||||||
|
KBUILD_DTBS := dtbs
|
||||||
|
|
||||||
#
|
#
|
||||||
# Select the object file format to substitute into the linker script.
|
# Select the object file format to substitute into the linker script.
|
||||||
|
@ -384,7 +385,7 @@ quiet_cmd_64 = OBJCOPY $@
|
||||||
vmlinux.64: vmlinux
|
vmlinux.64: vmlinux
|
||||||
$(call cmd,64)
|
$(call cmd,64)
|
||||||
|
|
||||||
all: $(all-y)
|
all: $(all-y) $(KBUILD_DTBS)
|
||||||
|
|
||||||
# boot
|
# boot
|
||||||
$(boot-y): $(vmlinux-32) FORCE
|
$(boot-y): $(vmlinux-32) FORCE
|
||||||
|
|
|
@ -78,6 +78,8 @@ OBJCOPYFLAGS_piggy.o := --add-section=.image=$(obj)/vmlinux.bin.z \
|
||||||
$(obj)/piggy.o: $(obj)/dummy.o $(obj)/vmlinux.bin.z FORCE
|
$(obj)/piggy.o: $(obj)/dummy.o $(obj)/vmlinux.bin.z FORCE
|
||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
|
|
||||||
|
HOSTCFLAGS_calc_vmlinuz_load_addr.o += $(LINUXINCLUDE)
|
||||||
|
|
||||||
# Calculate the load address of the compressed kernel image
|
# Calculate the load address of the compressed kernel image
|
||||||
hostprogs-y := calc_vmlinuz_load_addr
|
hostprogs-y := calc_vmlinuz_load_addr
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "../../../../include/linux/sizes.h"
|
#include <linux/sizes.h>
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
#define AR933X_UART_CS_PARITY_S 0
|
#define AR933X_UART_CS_PARITY_S 0
|
||||||
#define AR933X_UART_CS_PARITY_M 0x3
|
#define AR933X_UART_CS_PARITY_M 0x3
|
||||||
#define AR933X_UART_CS_PARITY_NONE 0
|
#define AR933X_UART_CS_PARITY_NONE 0
|
||||||
#define AR933X_UART_CS_PARITY_ODD 1
|
#define AR933X_UART_CS_PARITY_ODD 2
|
||||||
#define AR933X_UART_CS_PARITY_EVEN 2
|
#define AR933X_UART_CS_PARITY_EVEN 3
|
||||||
#define AR933X_UART_CS_IF_MODE_S 2
|
#define AR933X_UART_CS_IF_MODE_S 2
|
||||||
#define AR933X_UART_CS_IF_MODE_M 0x3
|
#define AR933X_UART_CS_IF_MODE_M 0x3
|
||||||
#define AR933X_UART_CS_IF_MODE_NONE 0
|
#define AR933X_UART_CS_IF_MODE_NONE 0
|
||||||
|
|
|
@ -203,7 +203,7 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
|
||||||
|
|
||||||
bool __virt_addr_valid(const volatile void *kaddr)
|
bool __virt_addr_valid(const volatile void *kaddr)
|
||||||
{
|
{
|
||||||
unsigned long vaddr = (unsigned long)vaddr;
|
unsigned long vaddr = (unsigned long)kaddr;
|
||||||
|
|
||||||
if ((vaddr < PAGE_OFFSET) || (vaddr >= MAP_BASE))
|
if ((vaddr < PAGE_OFFSET) || (vaddr >= MAP_BASE))
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -391,6 +391,7 @@ static struct work_registers build_get_work_registers(u32 **p)
|
||||||
static void build_restore_work_registers(u32 **p)
|
static void build_restore_work_registers(u32 **p)
|
||||||
{
|
{
|
||||||
if (scratch_reg >= 0) {
|
if (scratch_reg >= 0) {
|
||||||
|
uasm_i_ehb(p);
|
||||||
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
|
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -668,10 +669,12 @@ static void build_restore_pagemask(u32 **p, struct uasm_reloc **r,
|
||||||
uasm_i_mtc0(p, 0, C0_PAGEMASK);
|
uasm_i_mtc0(p, 0, C0_PAGEMASK);
|
||||||
uasm_il_b(p, r, lid);
|
uasm_il_b(p, r, lid);
|
||||||
}
|
}
|
||||||
if (scratch_reg >= 0)
|
if (scratch_reg >= 0) {
|
||||||
|
uasm_i_ehb(p);
|
||||||
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
|
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
|
||||||
else
|
} else {
|
||||||
UASM_i_LW(p, 1, scratchpad_offset(0), 0);
|
UASM_i_LW(p, 1, scratchpad_offset(0), 0);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Reset default page size */
|
/* Reset default page size */
|
||||||
if (PM_DEFAULT_MASK >> 16) {
|
if (PM_DEFAULT_MASK >> 16) {
|
||||||
|
@ -938,10 +941,12 @@ build_get_pgd_vmalloc64(u32 **p, struct uasm_label **l, struct uasm_reloc **r,
|
||||||
uasm_i_jr(p, ptr);
|
uasm_i_jr(p, ptr);
|
||||||
|
|
||||||
if (mode == refill_scratch) {
|
if (mode == refill_scratch) {
|
||||||
if (scratch_reg >= 0)
|
if (scratch_reg >= 0) {
|
||||||
|
uasm_i_ehb(p);
|
||||||
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
|
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
|
||||||
else
|
} else {
|
||||||
UASM_i_LW(p, 1, scratchpad_offset(0), 0);
|
UASM_i_LW(p, 1, scratchpad_offset(0), 0);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
uasm_i_nop(p);
|
uasm_i_nop(p);
|
||||||
}
|
}
|
||||||
|
@ -1258,6 +1263,7 @@ build_fast_tlb_refill_handler (u32 **p, struct uasm_label **l,
|
||||||
UASM_i_MTC0(p, odd, C0_ENTRYLO1); /* load it */
|
UASM_i_MTC0(p, odd, C0_ENTRYLO1); /* load it */
|
||||||
|
|
||||||
if (c0_scratch_reg >= 0) {
|
if (c0_scratch_reg >= 0) {
|
||||||
|
uasm_i_ehb(p);
|
||||||
UASM_i_MFC0(p, scratch, c0_kscratch(), c0_scratch_reg);
|
UASM_i_MFC0(p, scratch, c0_kscratch(), c0_scratch_reg);
|
||||||
build_tlb_write_entry(p, l, r, tlb_random);
|
build_tlb_write_entry(p, l, r, tlb_random);
|
||||||
uasm_l_leave(l, *p);
|
uasm_l_leave(l, *p);
|
||||||
|
@ -1603,15 +1609,17 @@ static void build_setup_pgd(void)
|
||||||
uasm_i_dinsm(&p, a0, 0, 29, 64 - 29);
|
uasm_i_dinsm(&p, a0, 0, 29, 64 - 29);
|
||||||
uasm_l_tlbl_goaround1(&l, p);
|
uasm_l_tlbl_goaround1(&l, p);
|
||||||
UASM_i_SLL(&p, a0, a0, 11);
|
UASM_i_SLL(&p, a0, a0, 11);
|
||||||
uasm_i_jr(&p, 31);
|
|
||||||
UASM_i_MTC0(&p, a0, C0_CONTEXT);
|
UASM_i_MTC0(&p, a0, C0_CONTEXT);
|
||||||
|
uasm_i_jr(&p, 31);
|
||||||
|
uasm_i_ehb(&p);
|
||||||
} else {
|
} else {
|
||||||
/* PGD in c0_KScratch */
|
/* PGD in c0_KScratch */
|
||||||
uasm_i_jr(&p, 31);
|
|
||||||
if (cpu_has_ldpte)
|
if (cpu_has_ldpte)
|
||||||
UASM_i_MTC0(&p, a0, C0_PWBASE);
|
UASM_i_MTC0(&p, a0, C0_PWBASE);
|
||||||
else
|
else
|
||||||
UASM_i_MTC0(&p, a0, c0_kscratch(), pgd_reg);
|
UASM_i_MTC0(&p, a0, c0_kscratch(), pgd_reg);
|
||||||
|
uasm_i_jr(&p, 31);
|
||||||
|
uasm_i_ehb(&p);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
|
@ -1625,13 +1633,16 @@ static void build_setup_pgd(void)
|
||||||
UASM_i_LA_mostly(&p, a2, pgdc);
|
UASM_i_LA_mostly(&p, a2, pgdc);
|
||||||
UASM_i_SW(&p, a0, uasm_rel_lo(pgdc), a2);
|
UASM_i_SW(&p, a0, uasm_rel_lo(pgdc), a2);
|
||||||
#endif /* SMP */
|
#endif /* SMP */
|
||||||
uasm_i_jr(&p, 31);
|
|
||||||
|
|
||||||
/* if pgd_reg is allocated, save PGD also to scratch register */
|
/* if pgd_reg is allocated, save PGD also to scratch register */
|
||||||
if (pgd_reg != -1)
|
if (pgd_reg != -1) {
|
||||||
UASM_i_MTC0(&p, a0, c0_kscratch(), pgd_reg);
|
UASM_i_MTC0(&p, a0, c0_kscratch(), pgd_reg);
|
||||||
else
|
uasm_i_jr(&p, 31);
|
||||||
|
uasm_i_ehb(&p);
|
||||||
|
} else {
|
||||||
|
uasm_i_jr(&p, 31);
|
||||||
uasm_i_nop(&p);
|
uasm_i_nop(&p);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
if (p >= (u32 *)tlbmiss_handler_setup_pgd_end)
|
if (p >= (u32 *)tlbmiss_handler_setup_pgd_end)
|
||||||
panic("tlbmiss_handler_setup_pgd space exceeded");
|
panic("tlbmiss_handler_setup_pgd space exceeded");
|
||||||
|
|
Loading…
Reference in New Issue