mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-20 14:13:16 +00:00
6be0da90a1
Removed upstreamed/solved elsewhere upstream: - 0001-MIPS-ralink-Add-rt3352-SPI_CS1-pinmux.patch - 0002-MIPS-pci-rt2880-set-pci-controller-of_node.patch - 0004-MIPS-ralink-add-MT7621-pcie-driver.patch - 0009-PCI-MIPS-enable-PCIe-on-MT7688.patch - 0025-pinctrl-ralink-add-pinctrl-driver.patch - 0028-GPIO-ralink-add-mt7621-gpio-controller.patch - 0043-spi-add-mt7621-support.patch - 0045-i2c-add-mt7621-driver.patch - 0047-DMA-ralink-add-rt2880-dma-engine.patch - 0053-mtd-spi-nor-add-w25q256-3b-mode-switch.patch - 0054-mtd-spi-nor-w25q256-respect-default-mode.patch - 0099-pci-mt7620.patch - 304-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch Removed because of the new NAND driver: - 0038-Revert-mtd-nand-Remove-unused-chip-write_page-hook.patch - 0039-mtd-add-mt7621-nand-support.patch - 0040-nand-hack.patch Remove patch that no longer applies (needs rework): - 0034-NET-multi-phy-support.patch Signed-off-by: DENG Qingfang <dengqf6@mail2.sysu.edu.cn>
62 lines
1.6 KiB
Diff
62 lines
1.6 KiB
Diff
There is a variant of MT7621 which contains only one CPU core instead of 2.
|
|
This is not reflected in the config register, so the kernel detects more
|
|
physical cores, which leads to a hang on SMP bringup.
|
|
Add a hack to detect missing cores.
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
|
|
--- a/arch/mips/kernel/smp-cps.c
|
|
+++ b/arch/mips/kernel/smp-cps.c
|
|
@@ -43,6 +43,11 @@ static unsigned core_vpe_count(unsigned
|
|
return mips_cps_numvps(cluster, core);
|
|
}
|
|
|
|
+bool __weak plat_cpu_core_present(int core)
|
|
+{
|
|
+ return true;
|
|
+}
|
|
+
|
|
static void __init cps_smp_setup(void)
|
|
{
|
|
unsigned int nclusters, ncores, nvpes, core_vpes;
|
|
@@ -60,6 +65,8 @@ static void __init cps_smp_setup(void)
|
|
|
|
ncores = mips_cps_numcores(cl);
|
|
for (c = 0; c < ncores; c++) {
|
|
+ if (!plat_cpu_core_present(c))
|
|
+ continue;
|
|
core_vpes = core_vpe_count(cl, c);
|
|
|
|
if (c > 0)
|
|
--- a/arch/mips/ralink/mt7621.c
|
|
+++ b/arch/mips/ralink/mt7621.c
|
|
@@ -13,6 +13,7 @@
|
|
#include <asm/mips-cps.h>
|
|
#include <asm/mach-ralink/ralink_regs.h>
|
|
#include <asm/mach-ralink/mt7621.h>
|
|
+#include <asm/mips-boards/launch.h>
|
|
|
|
#include <pinmux.h>
|
|
|
|
@@ -160,6 +161,20 @@ void __init ralink_of_remap(void)
|
|
panic("Failed to remap core resources");
|
|
}
|
|
|
|
+bool plat_cpu_core_present(int core)
|
|
+{
|
|
+ struct cpulaunch *launch = (struct cpulaunch *)CKSEG0ADDR(CPULAUNCH);
|
|
+
|
|
+ if (!core)
|
|
+ return true;
|
|
+ launch += core * 2; /* 2 VPEs per core */
|
|
+ if (!(launch->flags & LAUNCH_FREADY))
|
|
+ return false;
|
|
+ if (launch->flags & (LAUNCH_FGO | LAUNCH_FGONE))
|
|
+ return false;
|
|
+ return true;
|
|
+}
|
|
+
|
|
void prom_soc_init(struct ralink_soc_info *soc_info)
|
|
{
|
|
void __iomem *sysc = (void __iomem *) KSEG1ADDR(MT7621_SYSC_BASE);
|