/* SPDX-License-Identifier: GPL-2.0-only */ #include <assert.h> #include <console/console.h> #include <program_loading.h> #include <soc/mmu.h> #include <soc/cpucp.h> #include <soc/clock.h> #include <device/mmio.h> #include <timer.h> void cpucp_prepare(void) { /* allow NS access to EPSS memory */ setbits32(&epss_top->access_override, 0x1); /* Enable subsystem clock. Required for CPUCP PDMEM access */ setbits32(&epss_fast->epss_muc_clk_ctrl, 0x1); } void cpucp_fw_load_reset(void) { struct prog cpucp_fw_prog = PROG_INIT(PROG_PAYLOAD, CONFIG_CBFS_PREFIX "/cpucp"); if (!wait_ms(300, (read32(&epss_fast->epss_muc_clk_ctrl) & 0x1) == 0x1)) printk(BIOS_ERR, "%s: cannot get CPUCP PDMEM access.\n", __func__); if (!selfload(&cpucp_fw_prog)) die("SOC image: CPUCP load failed"); printk(BIOS_DEBUG, "SOC:CPUCP image loaded successfully.\n"); }