/* * Copyright (c) 2022, Arm Limited. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include #include #include #include /** * Array mentioning number of SMMUs supported by FVP */ static const uintptr_t fvp_smmus[] = { PLAT_FVP_SMMUV3_BASE, }; bool plat_has_non_host_platforms(void) { /* FVP base platforms typically have GPU, as per FVP Reference guide */ return true; } bool plat_has_unmanaged_dma_peripherals(void) { /* * FVP Reference guide does not show devices that are described as * DMA-capable but not managed by an SMMU in the FVP documentation. * However, the SMMU seems to have only been introduced in the RevC * revision. */ return (arm_config.flags & ARM_CONFIG_FVP_HAS_SMMUV3) == 0; } unsigned int plat_get_total_smmus(void) { if ((arm_config.flags & ARM_CONFIG_FVP_HAS_SMMUV3) != 0U) { return ARRAY_SIZE(fvp_smmus); } else { return 0; } } void plat_enumerate_smmus(const uintptr_t **smmus_out, size_t *smmu_count_out) { if ((arm_config.flags & ARM_CONFIG_FVP_HAS_SMMUV3) != 0U) { *smmus_out = fvp_smmus; *smmu_count_out = ARRAY_SIZE(fvp_smmus); } else { *smmus_out = NULL; *smmu_count_out = 0; } }