/* SPDX-License-Identifier: GPL-2.0-only */ #include #include #include #include #include #include #include #include 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"); }