Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * OMAP4 SMP cpu-hotplug support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  * Copyright (C) 2010 Texas Instruments, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6)  * Author:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7)  *      Santosh Shilimkar <santosh.shilimkar@ti.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9)  * Platform file needed for the OMAP4 SMP. This file is based on arm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)  * realview smp platform.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)  * Copyright (c) 2002 ARM Limited.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/errno.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/smp.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <linux/io.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #include "omap-wakeupgen.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #include "common.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #include "powerdomain.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)  * platform-specific code to shutdown a CPU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)  * Called with IRQs disabled
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) void omap4_cpu_die(unsigned int cpu)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 	unsigned int boot_cpu = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	void __iomem *base = omap_get_wakeupgen_base();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 	 * we're ready for shutdown now, so do it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 	if (omap_secure_apis_support()) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 		if (omap_modify_auxcoreboot0(0x0, 0x200) != 0x0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 			pr_err("Secure clear status failed\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	} else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 		writel_relaxed(0, base + OMAP_AUX_CORE_BOOT_0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 	for (;;) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 		/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 		 * Enter into low power state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 		omap4_hotplug_cpu(cpu, PWRDM_POWER_OFF);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 		if (omap_secure_apis_support())
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 			boot_cpu = omap_read_auxcoreboot0() >> 9;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 		else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 			boot_cpu =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 				readl_relaxed(base + OMAP_AUX_CORE_BOOT_0) >> 5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 		if (boot_cpu == smp_processor_id()) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 			/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 			 * OK, proper wakeup, we're done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 			 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 		pr_debug("CPU%u: spurious wakeup call\n", cpu);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) /* Needed by kexec and platform_can_cpu_hotplug() */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) int omap4_cpu_kill(unsigned int cpu)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 	return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) }