xref: /rk3399_ARM-atf/plat/ti/k3low/common/am62l_bl31_setup.c (revision 324d8975d11e9ade61834db51f7158e4cd06bda7)
121b14fd2SDhruva Gole /*
221b14fd2SDhruva Gole  * Copyright (C) 2025 Texas Instruments Incorporated - http://www.ti.com/
38853eba6SDhruva Gole  * k3low SoC specific bl31_setup
421b14fd2SDhruva Gole  *
521b14fd2SDhruva Gole  * SPDX-License-Identifier: BSD-3-Clause
621b14fd2SDhruva Gole  */
721b14fd2SDhruva Gole 
821b14fd2SDhruva Gole #include <common/debug.h>
921b14fd2SDhruva Gole #include <ti_sci.h>
10*879fdd07SVignesh Raghavendra #include <ti_sci_protocol.h>
1121b14fd2SDhruva Gole #include <ti_sci_transport.h>
1221b14fd2SDhruva Gole 
13*879fdd07SVignesh Raghavendra #include <board_def.h>
1421b14fd2SDhruva Gole #include <plat_private.h>
1521b14fd2SDhruva Gole 
1621b14fd2SDhruva Gole /* Table of regions to map using the MMU */
1721b14fd2SDhruva Gole const mmap_region_t plat_k3_mmap[] = {
188853eba6SDhruva Gole 	K3_MAP_REGION_FLAT(K3_USART_BASE,       K3_USART_SIZE,       MT_DEVICE | MT_RW | MT_SECURE),
198853eba6SDhruva Gole 	K3_MAP_REGION_FLAT(K3_GIC_BASE,         K3_GIC_SIZE,         MT_DEVICE | MT_RW | MT_SECURE),
208853eba6SDhruva Gole 	K3_MAP_REGION_FLAT(K3_GTC_BASE,         K3_GTC_SIZE,         MT_DEVICE | MT_RW | MT_SECURE),
218853eba6SDhruva Gole 	K3_MAP_REGION_FLAT(TI_MAILBOX_TX_BASE,  TI_MAILBOX_RX_TX_SIZE, MT_DEVICE | MT_RW | MT_SECURE),
228853eba6SDhruva Gole 	K3_MAP_REGION_FLAT(WKUP_CTRL_MMR0_BASE, WKUP_CTRL_MMR0_SIZE, MT_DEVICE | MT_RW | MT_SECURE),
238853eba6SDhruva Gole 	K3_MAP_REGION_FLAT(MAILBOX_SHMEM_REGION_BASE, MAILBOX_SHMEM_REGION_SIZE, MT_DEVICE | MT_RW | MT_SECURE),
2421b14fd2SDhruva Gole 	{ /* sentinel */ }
2521b14fd2SDhruva Gole };
2621b14fd2SDhruva Gole 
ti_soc_init(void)2721b14fd2SDhruva Gole int ti_soc_init(void)
2821b14fd2SDhruva Gole {
29987c9b04SDhruva Gole 	struct ti_sci_msg_version version;
30987c9b04SDhruva Gole 	int ret;
31987c9b04SDhruva Gole 
32a5cf0ba4SDhruva Gole 	generic_delay_timer_init();
33987c9b04SDhruva Gole 
34987c9b04SDhruva Gole 	ret = ti_sci_boot_notification();
35987c9b04SDhruva Gole 	if (ret != 0) {
36987c9b04SDhruva Gole 		ERROR("%s: Failed to receive boot notification (%d)\n", __func__, ret);
37987c9b04SDhruva Gole 		return ret;
38987c9b04SDhruva Gole 	}
39987c9b04SDhruva Gole 
40987c9b04SDhruva Gole 	ret = ti_sci_get_revision(&version);
41987c9b04SDhruva Gole 	if (ret != 0) {
42987c9b04SDhruva Gole 		ERROR("%s: Failed to get revision (%d)\n", __func__, ret);
43987c9b04SDhruva Gole 		return ret;
44987c9b04SDhruva Gole 	}
45987c9b04SDhruva Gole 
46987c9b04SDhruva Gole 	NOTICE("SYSFW ABI: %d.%d (firmware rev 0x%04x '%s')\n",
47987c9b04SDhruva Gole 	       version.abi_major, version.abi_minor,
48987c9b04SDhruva Gole 	       version.firmware_revision,
49987c9b04SDhruva Gole 	       version.firmware_description);
50987c9b04SDhruva Gole 
51*879fdd07SVignesh Raghavendra 	ret = ti_sci_proc_request(PLAT_PROC_START_ID);
52*879fdd07SVignesh Raghavendra 	if (ret != 0) {
53*879fdd07SVignesh Raghavendra 		ERROR("Unable to request host (%d)\n", ret);
54*879fdd07SVignesh Raghavendra 		return ret;
55*879fdd07SVignesh Raghavendra 	}
56*879fdd07SVignesh Raghavendra 
57*879fdd07SVignesh Raghavendra 	/* Enable ACP interface */
58*879fdd07SVignesh Raghavendra 	ret = ti_sci_proc_set_boot_ctrl(PLAT_PROC_START_ID, 0,
59*879fdd07SVignesh Raghavendra 					PROC_BOOT_CTRL_FLAG_ARMV8_AINACTS);
60*879fdd07SVignesh Raghavendra 	if (ret != 0) {
61*879fdd07SVignesh Raghavendra 		ERROR("Unable to set boot control (%d)\n", ret);
62*879fdd07SVignesh Raghavendra 		return ret;
63*879fdd07SVignesh Raghavendra 	}
64*879fdd07SVignesh Raghavendra 
6521b14fd2SDhruva Gole 	return 0;
6621b14fd2SDhruva Gole }
67