xref: /rk3399_ARM-atf/plat/ti/k3/common/k3_bl31_setup.c (revision 7147732a78852034972b93b87f17838f6aa0f9e5)
11841c533SNishanth Menon /*
273d772d8SManorit Chawdhry  * Copyright (c) 2017-2024, Arm Limited and Contributors. All rights reserved.
3*26605cddSDhruva Gole  * Copyright (C) 2025 Texas Instruments Incorporated - https://www.ti.com/
4*26605cddSDhruva Gole  * K3 SOC specific bl31_setup
51841c533SNishanth Menon  *
61841c533SNishanth Menon  * SPDX-License-Identifier: BSD-3-Clause
71841c533SNishanth Menon  */
81841c533SNishanth Menon 
909d40e0eSAntonio Nino Diaz #include <common/debug.h>
10b5c2e1c4SAndrew F. Davis #include <ti_sci.h>
11*26605cddSDhruva Gole #include <ti_sci_transport.h>
121841c533SNishanth Menon 
13*26605cddSDhruva Gole #include <plat_private.h>
1453a868f6SAndrew Davis 
15e67bfcf3SNishanth Menon /* Table of regions to map using the MMU */
16ef202857SAndrew F. Davis const mmap_region_t plat_k3_mmap[] = {
1753a868f6SAndrew Davis 	K3_MAP_REGION_FLAT(K3_USART_BASE,       K3_USART_SIZE,       MT_DEVICE | MT_RW | MT_SECURE),
1853a868f6SAndrew Davis 	K3_MAP_REGION_FLAT(K3_GIC_BASE,         K3_GIC_SIZE,         MT_DEVICE | MT_RW | MT_SECURE),
1953a868f6SAndrew Davis 	K3_MAP_REGION_FLAT(K3_GTC_BASE,         K3_GTC_SIZE,         MT_DEVICE | MT_RW | MT_SECURE),
2053a868f6SAndrew Davis 	K3_MAP_REGION_FLAT(SEC_PROXY_RT_BASE,   SEC_PROXY_RT_SIZE,   MT_DEVICE | MT_RW | MT_SECURE),
2153a868f6SAndrew Davis 	K3_MAP_REGION_FLAT(SEC_PROXY_SCFG_BASE, SEC_PROXY_SCFG_SIZE, MT_DEVICE | MT_RW | MT_SECURE),
2253a868f6SAndrew Davis 	K3_MAP_REGION_FLAT(SEC_PROXY_DATA_BASE, SEC_PROXY_DATA_SIZE, MT_DEVICE | MT_RW | MT_SECURE),
23e67bfcf3SNishanth Menon 	{ /* sentinel */ }
24e67bfcf3SNishanth Menon };
25e67bfcf3SNishanth Menon 
ti_soc_init(void)26*26605cddSDhruva Gole int ti_soc_init(void)
271841c533SNishanth Menon {
2873d772d8SManorit Chawdhry 	struct ti_sci_msg_version version;
2973d772d8SManorit Chawdhry 	int ret;
3073d772d8SManorit Chawdhry 
3173d772d8SManorit Chawdhry 	ret = ti_sci_get_revision(&version);
3273d772d8SManorit Chawdhry 	if (ret) {
3373d772d8SManorit Chawdhry 		ERROR("Unable to communicate with the control firmware (%d)\n", ret);
34*26605cddSDhruva Gole 		return ret;
3573d772d8SManorit Chawdhry 	}
3673d772d8SManorit Chawdhry 
3773d772d8SManorit Chawdhry 	INFO("SYSFW ABI: %d.%d (firmware rev 0x%04x '%s')\n",
3873d772d8SManorit Chawdhry 	     version.abi_major, version.abi_minor,
3973d772d8SManorit Chawdhry 	     version.firmware_revision,
4073d772d8SManorit Chawdhry 	     version.firmware_description);
4173d772d8SManorit Chawdhry 
42a53d1377SManorit Chawdhry 	/*
43a53d1377SManorit Chawdhry 	 * Older firmware have a timing issue with DM that crashes few TF-A
44a53d1377SManorit Chawdhry 	 * lite devices while trying to make calls to DM. Since there is no way
45a53d1377SManorit Chawdhry 	 * to detect what current DM version we are running - we rely on the
46a53d1377SManorit Chawdhry 	 * corresponding TIFS versioning to handle this check and ensure that
47a53d1377SManorit Chawdhry 	 * the platform boots up
48a53d1377SManorit Chawdhry 	 *
49a53d1377SManorit Chawdhry 	 * Upgrading to TIFS version 9.1.7 along with the corresponding DM from
50a53d1377SManorit Chawdhry 	 * ti-linux-firmware will enable this functionality.
51a53d1377SManorit Chawdhry 	 */
52a53d1377SManorit Chawdhry 	if (version.firmware_revision > 9 ||
53a53d1377SManorit Chawdhry 	    (version.firmware_revision == 9 && version.sub_version > 1) ||
54a53d1377SManorit Chawdhry 	    (version.firmware_revision == 9 && version.sub_version == 1 &&
55a53d1377SManorit Chawdhry 		 version.patch_version >= 7)
56a53d1377SManorit Chawdhry 	) {
57a53d1377SManorit Chawdhry 		if (ti_sci_device_get(PLAT_BOARD_DEVICE_ID)) {
58a53d1377SManorit Chawdhry 			WARN("Unable to take system power reference\n");
59a53d1377SManorit Chawdhry 		}
60a53d1377SManorit Chawdhry 	} else {
61a53d1377SManorit Chawdhry 		NOTICE("Upgrade Firmwares for Power off functionality\n");
62a53d1377SManorit Chawdhry 	}
63*26605cddSDhruva Gole 	return 0;
641841c533SNishanth Menon }
65