Commit 04a357b1 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'mips_6.3_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux

Pull more MIPS updates from Thomas Bogendoerfer:
 "A few more cleanups and fixes"

* tag 'mips_6.3_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux:
  MIPS: Workaround clang inline compat branch issue
  mips: dts: ralink: mt7621: add phandle to system controller node for watchdog
  mips: dts: ralink: mt7621: rename watchdog node from 'wdt' into 'watchdog'
  mips: ralink: make SOC_MT7621 select PINCTRL
  mips: remove SYS_HAS_CPU_MIPS32_R1 from RALINK
  MIPS: cevt-r4k: Offset the value used to clear compare interrupt
  MIPS: smp-cps: Don't rely on CP0_CMGCRBASE
  MIPS: Remove DMA_PERDEV_COHERENT
parents 857f1268 1a2c73f4
...@@ -610,7 +610,6 @@ config RALINK ...@@ -610,7 +610,6 @@ config RALINK
select DMA_NONCOHERENT select DMA_NONCOHERENT
select IRQ_MIPS_CPU select IRQ_MIPS_CPU
select USE_OF select USE_OF
select SYS_HAS_CPU_MIPS32_R1
select SYS_HAS_CPU_MIPS32_R2 select SYS_HAS_CPU_MIPS32_R2
select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_32BIT_KERNEL
select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_SUPPORTS_LITTLE_ENDIAN
...@@ -1080,11 +1079,6 @@ config FW_CFE ...@@ -1080,11 +1079,6 @@ config FW_CFE
config ARCH_SUPPORTS_UPROBES config ARCH_SUPPORTS_UPROBES
bool bool
config DMA_PERDEV_COHERENT
bool
select ARCH_HAS_SETUP_DMA_OPS
select DMA_NONCOHERENT
config DMA_NONCOHERENT config DMA_NONCOHERENT
bool bool
# #
...@@ -3206,6 +3200,10 @@ config CC_HAS_MNO_BRANCH_LIKELY ...@@ -3206,6 +3200,10 @@ config CC_HAS_MNO_BRANCH_LIKELY
def_bool y def_bool y
depends on $(cc-option,-mno-branch-likely) depends on $(cc-option,-mno-branch-likely)
# https://github.com/llvm/llvm-project/issues/61045
config CC_HAS_BROKEN_INLINE_COMPAT_BRANCH
def_bool y if CC_IS_CLANG
menu "Power management options" menu "Power management options"
config ARCH_HIBERNATION_POSSIBLE config ARCH_HIBERNATION_POSSIBLE
......
...@@ -70,9 +70,10 @@ sysc: syscon@0 { ...@@ -70,9 +70,10 @@ sysc: syscon@0 {
"250m", "270m"; "250m", "270m";
}; };
wdt: wdt@100 { wdt: watchdog@100 {
compatible = "mediatek,mt7621-wdt"; compatible = "mediatek,mt7621-wdt";
reg = <0x100 0x100>; reg = <0x100 0x100>;
mediatek,sysctl = <&sysc>;
}; };
gpio: gpio@600 { gpio: gpio@600 {
......
...@@ -336,7 +336,7 @@ symbol = value ...@@ -336,7 +336,7 @@ symbol = value
*/ */
#ifdef CONFIG_WAR_R10000_LLSC #ifdef CONFIG_WAR_R10000_LLSC
# define SC_BEQZ beqzl # define SC_BEQZ beqzl
#elif MIPS_ISA_REV >= 6 #elif !defined(CONFIG_CC_HAS_BROKEN_INLINE_COMPAT_BRANCH) && MIPS_ISA_REV >= 6
# define SC_BEQZ beqzc # define SC_BEQZ beqzc
#else #else
# define SC_BEQZ beqz # define SC_BEQZ beqz
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
#ifndef __MIPS_ASM_SMP_CPS_H__ #ifndef __MIPS_ASM_SMP_CPS_H__
#define __MIPS_ASM_SMP_CPS_H__ #define __MIPS_ASM_SMP_CPS_H__
#define CPS_ENTRY_PATCH_INSNS 6
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
struct vpe_boot_config { struct vpe_boot_config {
...@@ -30,6 +32,8 @@ extern void mips_cps_boot_vpes(struct core_boot_config *cfg, unsigned vpe); ...@@ -30,6 +32,8 @@ extern void mips_cps_boot_vpes(struct core_boot_config *cfg, unsigned vpe);
extern void mips_cps_pm_save(void); extern void mips_cps_pm_save(void);
extern void mips_cps_pm_restore(void); extern void mips_cps_pm_restore(void);
extern void *mips_cps_core_entry_patch_end;
#ifdef CONFIG_MIPS_CPS #ifdef CONFIG_MIPS_CPS
extern bool mips_cps_smp_in_use(void); extern bool mips_cps_smp_in_use(void);
......
...@@ -200,7 +200,7 @@ int c0_compare_int_usable(void) ...@@ -200,7 +200,7 @@ int c0_compare_int_usable(void)
*/ */
if (c0_compare_int_pending()) { if (c0_compare_int_pending()) {
cnt = read_c0_count(); cnt = read_c0_count();
write_c0_compare(cnt); write_c0_compare(cnt - 1);
back_to_back_c0_hazard(); back_to_back_c0_hazard();
while (read_c0_count() < (cnt + COMPARE_INT_SEEN_TICKS)) while (read_c0_count() < (cnt + COMPARE_INT_SEEN_TICKS))
if (!c0_compare_int_pending()) if (!c0_compare_int_pending())
...@@ -228,7 +228,7 @@ int c0_compare_int_usable(void) ...@@ -228,7 +228,7 @@ int c0_compare_int_usable(void)
if (!c0_compare_int_pending()) if (!c0_compare_int_pending())
return 0; return 0;
cnt = read_c0_count(); cnt = read_c0_count();
write_c0_compare(cnt); write_c0_compare(cnt - 1);
back_to_back_c0_hazard(); back_to_back_c0_hazard();
while (read_c0_count() < (cnt + COMPARE_INT_SEEN_TICKS)) while (read_c0_count() < (cnt + COMPARE_INT_SEEN_TICKS))
if (!c0_compare_int_pending()) if (!c0_compare_int_pending())
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <asm/mipsregs.h> #include <asm/mipsregs.h>
#include <asm/mipsmtregs.h> #include <asm/mipsmtregs.h>
#include <asm/pm.h> #include <asm/pm.h>
#include <asm/smp-cps.h>
#define GCR_CPC_BASE_OFS 0x0088 #define GCR_CPC_BASE_OFS 0x0088
#define GCR_CL_COHERENCE_OFS 0x2008 #define GCR_CL_COHERENCE_OFS 0x2008
...@@ -80,25 +81,20 @@ ...@@ -80,25 +81,20 @@
nop nop
.endm .endm
/* Calculate an uncached address for the CM GCRs */
.macro cmgcrb dest
.set push
.set noat
MFC0 $1, CP0_CMGCRBASE
PTR_SLL $1, $1, 4
PTR_LI \dest, UNCAC_BASE
PTR_ADDU \dest, \dest, $1
.set pop
.endm
.balign 0x1000 .balign 0x1000
LEAF(mips_cps_core_entry) LEAF(mips_cps_core_entry)
/* /*
* These first 4 bytes will be patched by cps_smp_setup to load the * These first several instructions will be patched by cps_smp_setup to load the
* CCA to use into register s0. * CCA to use into register s0 and GCR base address to register s1.
*/ */
.word 0 .rept CPS_ENTRY_PATCH_INSNS
nop
.endr
.global mips_cps_core_entry_patch_end
mips_cps_core_entry_patch_end:
/* Check whether we're here due to an NMI */ /* Check whether we're here due to an NMI */
mfc0 k0, CP0_STATUS mfc0 k0, CP0_STATUS
...@@ -121,8 +117,7 @@ not_nmi: ...@@ -121,8 +117,7 @@ not_nmi:
mtc0 t0, CP0_STATUS mtc0 t0, CP0_STATUS
/* Skip cache & coherence setup if we're already coherent */ /* Skip cache & coherence setup if we're already coherent */
cmgcrb v1 lw s7, GCR_CL_COHERENCE_OFS(s1)
lw s7, GCR_CL_COHERENCE_OFS(v1)
bnez s7, 1f bnez s7, 1f
nop nop
...@@ -132,7 +127,7 @@ not_nmi: ...@@ -132,7 +127,7 @@ not_nmi:
/* Enter the coherent domain */ /* Enter the coherent domain */
li t0, 0xff li t0, 0xff
sw t0, GCR_CL_COHERENCE_OFS(v1) sw t0, GCR_CL_COHERENCE_OFS(s1)
ehb ehb
/* Set Kseg0 CCA to that in s0 */ /* Set Kseg0 CCA to that in s0 */
...@@ -305,8 +300,7 @@ LEAF(mips_cps_core_init) ...@@ -305,8 +300,7 @@ LEAF(mips_cps_core_init)
*/ */
LEAF(mips_cps_get_bootcfg) LEAF(mips_cps_get_bootcfg)
/* Calculate a pointer to this cores struct core_boot_config */ /* Calculate a pointer to this cores struct core_boot_config */
cmgcrb t0 lw t0, GCR_CL_ID_OFS(s1)
lw t0, GCR_CL_ID_OFS(t0)
li t1, COREBOOTCFG_SIZE li t1, COREBOOTCFG_SIZE
mul t0, t0, t1 mul t0, t0, t1
PTR_LA t1, mips_cps_core_bootcfg PTR_LA t1, mips_cps_core_bootcfg
...@@ -366,8 +360,9 @@ LEAF(mips_cps_boot_vpes) ...@@ -366,8 +360,9 @@ LEAF(mips_cps_boot_vpes)
has_vp t0, 5f has_vp t0, 5f
/* Find base address of CPC */ /* Find base address of CPC */
cmgcrb t3 PTR_LA t1, mips_gcr_base
PTR_L t1, GCR_CPC_BASE_OFS(t3) PTR_L t1, 0(t1)
PTR_L t1, GCR_CPC_BASE_OFS(t1)
PTR_LI t2, ~0x7fff PTR_LI t2, ~0x7fff
and t1, t1, t2 and t1, t1, t2
PTR_LI t2, UNCAC_BASE PTR_LI t2, UNCAC_BASE
......
...@@ -162,6 +162,8 @@ static void __init cps_prepare_cpus(unsigned int max_cpus) ...@@ -162,6 +162,8 @@ static void __init cps_prepare_cpus(unsigned int max_cpus)
*/ */
entry_code = (u32 *)&mips_cps_core_entry; entry_code = (u32 *)&mips_cps_core_entry;
uasm_i_addiu(&entry_code, 16, 0, cca); uasm_i_addiu(&entry_code, 16, 0, cca);
UASM_i_LA(&entry_code, 17, (long)mips_gcr_base);
BUG_ON((void *)entry_code > (void *)&mips_cps_core_entry_patch_end);
blast_dcache_range((unsigned long)&mips_cps_core_entry, blast_dcache_range((unsigned long)&mips_cps_core_entry,
(unsigned long)entry_code); (unsigned long)entry_code);
bc_wback_inv((unsigned long)&mips_cps_core_entry, bc_wback_inv((unsigned long)&mips_cps_core_entry,
......
...@@ -54,7 +54,7 @@ choice ...@@ -54,7 +54,7 @@ choice
select HAVE_PCI select HAVE_PCI
select PCI_DRIVERS_GENERIC select PCI_DRIVERS_GENERIC
select SOC_BUS select SOC_BUS
select PINCTRL_MT7621 select PINCTRL
help help
The MT7621 system-on-a-chip includes an 880 MHz MIPS1004Kc The MT7621 system-on-a-chip includes an 880 MHz MIPS1004Kc
......
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