// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2010-2012, NVIDIA CORPORATION. All rights reserved. */ #include #include #include #include #include #include "../cpu.h" static void enable_cpu_power_rail(void) { struct pmc_ctlr *pmc = (struct pmc_ctlr *)NV_PA_PMC_BASE; u32 reg; reg = readl(&pmc->pmc_cntrl); reg |= CPUPWRREQ_OE; writel(reg, &pmc->pmc_cntrl); /* * The TI PMU65861C needs a 3.75ms delay between enabling * the power rail and enabling the CPU clock. This delay * between SM1EN and SM1 is for switching time + the ramp * up of the voltage to the CPU (VDD_CPU from PMU). */ udelay(3750); } void start_cpu(u32 reset_vector) { /* Enable VDD_CPU */ enable_cpu_power_rail(); /* Hold the CPUs in reset */ reset_A9_cpu(1); /* Disable the CPU clock */ enable_cpu_clock(0); /* Enable CoreSight */ clock_enable_coresight(1); /* * Set the entry point for CPU execution from reset, * if it's a non-zero value. */ if (reset_vector) writel(reset_vector, EXCEP_VECTOR_CPU_RESET_VECTOR); /* Enable the CPU clock */ enable_cpu_clock(1); /* If the CPU doesn't already have power, power it up */ powerup_cpu(); /* Take the CPU out of reset */ reset_A9_cpu(0); }