Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'soc-arm-6.17' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc

Pull ARM SoC code updates from Arnd Bergmann:
"Another small set of code changes for the 32-bit Arm platforms, and a
trivial update to the Kconfig entry for the arm64 TI K3 chip.

Andrew Davis cleans up the system reset handling, which touches a
couple of platforms.

The mediatek platform needs some code changes to support
multiprocessing in the newly added support for the old mt6572 chip"

* tag 'soc-arm-6.17' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc:
ARM: sa110/gpio: convert set_multiple() to returning an integer
ARM: rockchip: fix kernel hang during smp initialization
ARM: mediatek: add MT6572 smp bring up code
ARM: mediatek: add board_dt_compat entry for the MT6572 SoC
ARM: tegra: Use I/O memcpy to write to IRAM
arm: orion: use string choices helper
ARM: Switch to new sys-off handler API
arm64: Kconfig.platforms: remove useless select for ARCH_K3

+35 -22
+5 -3
arch/arm/common/sa1111.c
··· 578 578 return 0; 579 579 } 580 580 581 - static void sa1111_gpio_set_multiple(struct gpio_chip *gc, unsigned long *mask, 582 - unsigned long *bits) 581 + static int sa1111_gpio_set_multiple(struct gpio_chip *gc, unsigned long *mask, 582 + unsigned long *bits) 583 583 { 584 584 struct sa1111 *sachip = gc_to_sa1111(gc); 585 585 unsigned long flags; ··· 597 597 sa1111_gpio_modify(reg + SA1111_GPIO_PCDWR, (msk >> 12) & 255, val >> 12); 598 598 sa1111_gpio_modify(reg + SA1111_GPIO_PCSSR, (msk >> 12) & 255, val >> 12); 599 599 spin_unlock_irqrestore(&sachip->lock, flags); 600 + 601 + return 0; 600 602 } 601 603 602 604 static int sa1111_gpio_to_irq(struct gpio_chip *gc, unsigned offset) ··· 618 616 sachip->gc.direction_output = sa1111_gpio_direction_output; 619 617 sachip->gc.get = sa1111_gpio_get; 620 618 sachip->gc.set_rv = sa1111_gpio_set; 621 - sachip->gc.set_multiple = sa1111_gpio_set_multiple; 619 + sachip->gc.set_multiple_rv = sa1111_gpio_set_multiple; 622 620 sachip->gc.to_irq = sa1111_gpio_to_irq; 623 621 sachip->gc.base = -1; 624 622 sachip->gc.ngpio = 18;
+1 -1
arch/arm/mach-highbank/highbank.c
··· 143 143 sregs_base = of_iomap(np, 0); 144 144 WARN_ON(!sregs_base); 145 145 146 - pm_power_off = highbank_power_off; 146 + register_platform_power_off(highbank_power_off); 147 147 highbank_pm_init(); 148 148 149 149 bus_register_notifier(&platform_bus_type, &highbank_platform_nb);
+4
arch/arm/mach-mediatek/Kconfig
··· 15 15 bool "MediaTek MT2701 SoCs support" 16 16 default ARCH_MEDIATEK 17 17 18 + config MACH_MT6572 19 + bool "MediaTek MT6572 SoCs support" 20 + default ARCH_MEDIATEK 21 + 18 22 config MACH_MT6589 19 23 bool "MediaTek MT6589 SoCs support" 20 24 default ARCH_MEDIATEK
+1
arch/arm/mach-mediatek/mediatek.c
··· 38 38 39 39 static const char * const mediatek_board_dt_compat[] = { 40 40 "mediatek,mt2701", 41 + "mediatek,mt6572", 41 42 "mediatek,mt6589", 42 43 "mediatek,mt6592", 43 44 "mediatek,mt7623",
+7
arch/arm/mach-mediatek/platsmp.c
··· 29 29 { 0x3f8, 0x3f8, 0x3f8 }, 30 30 }; 31 31 32 + static const struct mtk_smp_boot_info mtk_mt6572_boot = { 33 + 0x10001400, 0x08, 34 + { 0x534c4131 }, 35 + { 0x0c }, 36 + }; 37 + 32 38 static const struct mtk_smp_boot_info mtk_mt6589_boot = { 33 39 0x10002000, 0x34, 34 40 { 0x534c4131, 0x4c415332, 0x41534c33 }, ··· 55 49 }; 56 50 57 51 static const struct of_device_id mtk_smp_boot_infos[] __initconst = { 52 + { .compatible = "mediatek,mt6572", .data = &mtk_mt6572_boot }, 58 53 { .compatible = "mediatek,mt6589", .data = &mtk_mt6589_boot }, 59 54 { .compatible = "mediatek,mt7623", .data = &mtk_mt7623_boot }, 60 55 { .compatible = "mediatek,mt7629", .data = &mtk_mt7623_boot },
+1 -1
arch/arm/mach-pxa/spitz.c
··· 1096 1096 software_node_register(&spitz_scoop_2_gpiochip_node); 1097 1097 1098 1098 init_gpio_reset(SPITZ_GPIO_ON_RESET, 1, 0); 1099 - pm_power_off = spitz_poweroff; 1099 + register_platform_power_off(spitz_poweroff); 1100 1100 1101 1101 PMCR = 0x00; 1102 1102
+9 -6
arch/arm/mach-rockchip/platsmp.c
··· 279 279 } 280 280 281 281 if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) { 282 - if (rockchip_smp_prepare_sram(node)) { 283 - of_node_put(node); 284 - return; 285 - } 286 - 287 282 /* enable the SCU power domain */ 288 283 pmu_set_power_domain(PMU_PWRDN_SCU, true); 289 284 ··· 311 316 asm ("mrc p15, 1, %0, c9, c0, 2\n" : "=r" (l2ctlr)); 312 317 ncores = ((l2ctlr >> 24) & 0x3) + 1; 313 318 } 314 - of_node_put(node); 315 319 316 320 /* Make sure that all cores except the first are really off */ 317 321 for (i = 1; i < ncores; i++) 318 322 pmu_set_power_domain(0 + i, false); 323 + 324 + if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) { 325 + if (rockchip_smp_prepare_sram(node)) { 326 + of_node_put(node); 327 + return; 328 + } 329 + } 330 + 331 + of_node_put(node); 319 332 } 320 333 321 334 static void __init rk3036_smp_prepare_cpus(unsigned int max_cpus)
+1 -1
arch/arm/mach-sa1100/generic.c
··· 298 298 static int __init sa1100_init(void) 299 299 { 300 300 struct resource wdt_res = DEFINE_RES_MEM(0x90000000, 0x20); 301 - pm_power_off = sa1100_power_off; 301 + register_platform_power_off(sa1100_power_off); 302 302 303 303 regulator_has_full_constraints(); 304 304
+1 -1
arch/arm/mach-tegra/reset.c
··· 63 63 BUG_ON(is_enabled); 64 64 BUG_ON(tegra_cpu_reset_handler_size > TEGRA_IRAM_RESET_HANDLER_SIZE); 65 65 66 - memcpy(iram_base, (void *)__tegra_cpu_reset_handler_start, 66 + memcpy_toio(iram_base, (void *)__tegra_cpu_reset_handler_start, 67 67 tegra_cpu_reset_handler_size); 68 68 69 69 err = call_firmware_op(set_cpu_boot_addr, 0, reset_address);
+1 -1
arch/arm/mach-vt8500/vt8500.c
··· 141 141 pr_err("%s:ioremap(power_off) failed\n", __func__); 142 142 } 143 143 if (pmc_base) 144 - pm_power_off = &vt8500_power_off; 144 + register_platform_power_off(vt8500_power_off); 145 145 else 146 146 pr_err("%s: PMC Hibernation register could not be remapped, not enabling power off!\n", __func__); 147 147 }
+3 -3
arch/arm/plat-orion/gpio.c
··· 468 468 469 469 if (is_out) { 470 470 seq_printf(s, " out %s %s\n", 471 - out & msk ? "hi" : "lo", 471 + str_hi_lo(out & msk), 472 472 blink & msk ? "(blink )" : ""); 473 473 continue; 474 474 } 475 475 476 476 seq_printf(s, " in %s (act %s) - IRQ", 477 - (data_in ^ in_pol) & msk ? "hi" : "lo", 478 - in_pol & msk ? "lo" : "hi"); 477 + str_hi_lo((data_in ^ in_pol) & msk), 478 + str_lo_hi(in_pol & msk)); 479 479 if (!((edg_msk | lvl_msk) & msk)) { 480 480 seq_puts(s, " disabled\n"); 481 481 continue;
+1 -1
arch/arm/xen/enlighten.c
··· 541 541 if (!xen_domain()) 542 542 return -ENODEV; 543 543 544 - pm_power_off = xen_power_off; 544 + register_platform_power_off(xen_power_off); 545 545 register_restart_handler(&xen_restart_nb); 546 546 if (!xen_initial_domain()) { 547 547 struct timespec64 ts;
-4
arch/arm64/Kconfig.platforms
··· 147 147 148 148 config ARCH_K3 149 149 bool "Texas Instruments Inc. K3 multicore SoC architecture" 150 - select PM_GENERIC_DOMAINS if PM 151 - select MAILBOX 152 150 select SOC_TI 153 - select TI_MESSAGE_MANAGER 154 - select TI_SCI_PROTOCOL 155 151 select TI_K3_SOCINFO 156 152 help 157 153 This enables support for Texas Instruments' K3 multicore SoC