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