Ravi Kumar Bokka | b0d48ed | 2021-01-21 02:54:48 +0530 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
| 2 | |
| 3 | #include <assert.h> |
Ravi Kumar Bokka | b0d48ed | 2021-01-21 02:54:48 +0530 | [diff] [blame] | 4 | #include <console/console.h> |
Elyes HAOUAS | 3272782 | 2022-01-12 13:56:47 +0100 | [diff] [blame] | 5 | #include <program_loading.h> |
Ravi Kumar Bokka | b0d48ed | 2021-01-21 02:54:48 +0530 | [diff] [blame] | 6 | #include <soc/mmu.h> |
| 7 | #include <soc/cpucp.h> |
| 8 | #include <soc/clock.h> |
| 9 | #include <device/mmio.h> |
| 10 | #include <timer.h> |
| 11 | |
| 12 | void cpucp_prepare(void) |
| 13 | { |
Sudheer Kumar Amrabadi | dfe817e | 2022-03-22 20:00:29 +0530 | [diff] [blame] | 14 | /* allow NS access to EPSS memory */ |
Ravi Kumar Bokka | b0d48ed | 2021-01-21 02:54:48 +0530 | [diff] [blame] | 15 | setbits32(&epss_top->access_override, 0x1); |
| 16 | |
Sudheer Kumar Amrabadi | dfe817e | 2022-03-22 20:00:29 +0530 | [diff] [blame] | 17 | /* Enable subsystem clock. Required for CPUCP PDMEM access */ |
Ravi Kumar Bokka | b0d48ed | 2021-01-21 02:54:48 +0530 | [diff] [blame] | 18 | setbits32(&epss_fast->epss_muc_clk_ctrl, 0x1); |
Ravi Kumar Bokka | b0d48ed | 2021-01-21 02:54:48 +0530 | [diff] [blame] | 19 | } |
| 20 | |
| 21 | void cpucp_fw_load_reset(void) |
| 22 | { |
| 23 | struct prog cpucp_fw_prog = |
| 24 | PROG_INIT(PROG_PAYLOAD, CONFIG_CBFS_PREFIX "/cpucp"); |
| 25 | |
Sudheer Kumar Amrabadi | dfe817e | 2022-03-22 20:00:29 +0530 | [diff] [blame] | 26 | if (!wait_ms(300, (read32(&epss_fast->epss_muc_clk_ctrl) & 0x1) == 0x1)) |
| 27 | printk(BIOS_ERR, "%s: cannot get CPUCP PDMEM access.\n", __func__); |
Ravi Kumar Bokka | b0d48ed | 2021-01-21 02:54:48 +0530 | [diff] [blame] | 28 | |
| 29 | if (!selfload(&cpucp_fw_prog)) |
| 30 | die("SOC image: CPUCP load failed"); |
| 31 | |
| 32 | printk(BIOS_DEBUG, "SOC:CPUCP image loaded successfully.\n"); |
| 33 | } |