Commit e58bd49d authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'mips-fixes-5.17_4' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux

Pull MIPS fixes from Thomas Bogendoerfer:

 - Fix memory detection for MT7621 devices

 - Fix setnocoherentio kernel option

 - Fix warning when CONFIG_SCHED_CORE is enabled

* tag 'mips-fixes-5.17_4' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux:
  MIPS: ralink: mt7621: use bitwise NOT instead of logical
  mips: setup: fix setnocoherentio() boolean setting
  MIPS: smp: fill in sibling and core maps earlier
  MIPS: ralink: mt7621: do memory detection on KSEG1
parents 4d5ae234 5d896570
...@@ -803,7 +803,7 @@ early_param("coherentio", setcoherentio); ...@@ -803,7 +803,7 @@ early_param("coherentio", setcoherentio);
static int __init setnocoherentio(char *str) static int __init setnocoherentio(char *str)
{ {
dma_default_coherent = true; dma_default_coherent = false;
pr_info("Software DMA cache coherency (command line)\n"); pr_info("Software DMA cache coherency (command line)\n");
return 0; return 0;
} }
......
...@@ -351,6 +351,9 @@ asmlinkage void start_secondary(void) ...@@ -351,6 +351,9 @@ asmlinkage void start_secondary(void)
cpu = smp_processor_id(); cpu = smp_processor_id();
cpu_data[cpu].udelay_val = loops_per_jiffy; cpu_data[cpu].udelay_val = loops_per_jiffy;
set_cpu_sibling_map(cpu);
set_cpu_core_map(cpu);
cpumask_set_cpu(cpu, &cpu_coherent_mask); cpumask_set_cpu(cpu, &cpu_coherent_mask);
notify_cpu_starting(cpu); notify_cpu_starting(cpu);
...@@ -362,9 +365,6 @@ asmlinkage void start_secondary(void) ...@@ -362,9 +365,6 @@ asmlinkage void start_secondary(void)
/* The CPU is running and counters synchronised, now mark it online */ /* The CPU is running and counters synchronised, now mark it online */
set_cpu_online(cpu, true); set_cpu_online(cpu, true);
set_cpu_sibling_map(cpu);
set_cpu_core_map(cpu);
calculate_cpu_foreign_map(); calculate_cpu_foreign_map();
/* /*
......
...@@ -22,7 +22,9 @@ ...@@ -22,7 +22,9 @@
#include "common.h" #include "common.h"
static void *detect_magic __initdata = detect_memory_region; #define MT7621_MEM_TEST_PATTERN 0xaa5555aa
static u32 detect_magic __initdata;
int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge) int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
{ {
...@@ -58,24 +60,32 @@ phys_addr_t mips_cpc_default_phys_base(void) ...@@ -58,24 +60,32 @@ phys_addr_t mips_cpc_default_phys_base(void)
panic("Cannot detect cpc address"); panic("Cannot detect cpc address");
} }
static bool __init mt7621_addr_wraparound_test(phys_addr_t size)
{
void *dm = (void *)KSEG1ADDR(&detect_magic);
if (CPHYSADDR(dm + size) >= MT7621_LOWMEM_MAX_SIZE)
return true;
__raw_writel(MT7621_MEM_TEST_PATTERN, dm);
if (__raw_readl(dm) != __raw_readl(dm + size))
return false;
__raw_writel(~MT7621_MEM_TEST_PATTERN, dm);
return __raw_readl(dm) == __raw_readl(dm + size);
}
static void __init mt7621_memory_detect(void) static void __init mt7621_memory_detect(void)
{ {
void *dm = &detect_magic;
phys_addr_t size; phys_addr_t size;
for (size = 32 * SZ_1M; size < 256 * SZ_1M; size <<= 1) { for (size = 32 * SZ_1M; size <= 256 * SZ_1M; size <<= 1) {
if (!__builtin_memcmp(dm, dm + size, sizeof(detect_magic))) if (mt7621_addr_wraparound_test(size)) {
break; memblock_add(MT7621_LOWMEM_BASE, size);
return;
}
} }
if ((size == 256 * SZ_1M) && memblock_add(MT7621_LOWMEM_BASE, MT7621_LOWMEM_MAX_SIZE);
(CPHYSADDR(dm + size) < MT7621_LOWMEM_MAX_SIZE) && memblock_add(MT7621_HIGHMEM_BASE, MT7621_HIGHMEM_SIZE);
__builtin_memcmp(dm, dm + size, sizeof(detect_magic))) {
memblock_add(MT7621_LOWMEM_BASE, MT7621_LOWMEM_MAX_SIZE);
memblock_add(MT7621_HIGHMEM_BASE, MT7621_HIGHMEM_SIZE);
} else {
memblock_add(MT7621_LOWMEM_BASE, size);
}
} }
void __init ralink_of_remap(void) void __init ralink_of_remap(void)
......
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