1 /* 2 * Arm SCP/MCP Software 3 * Copyright (c) 2020-2024, Arm Limited and Contributors. All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 8 #include "config_dvfs.h" 9 #include "juno_alarm_idx.h" 10 #include "juno_scmi.h" 11 #include "software_mmap.h" 12 13 #include <internal/scmi_perf.h> 14 #include <mod_scmi_perf.h> 15 16 #include <fwk_element.h> 17 #include <fwk_id.h> 18 #include <fwk_macros.h> 19 #include <fwk_module.h> 20 #include <fwk_module_idx.h> 21 22 #include <stddef.h> 23 #include <stdint.h> 24 25 #ifdef BUILD_HAS_MOD_STATISTICS 26 # include <mod_stats.h> 27 #endif 28 29 static const struct mod_scmi_perf_domain_config 30 domains[DVFS_ELEMENT_IDX_COUNT] = { 31 [DVFS_ELEMENT_IDX_BIG] = { 32 #ifdef BUILD_HAS_SCMI_PERF_FAST_CHANNELS 33 .fch_config = (struct scmi_perf_fch_config[]) { 34 [MOD_SCMI_PERF_FAST_CHANNEL_LEVEL_SET] = 35 FCH_INIT(JUNO_TRANSPORT_SCMI_PERF_FCH_BIG_LEVEL_SET), 36 [MOD_SCMI_PERF_FAST_CHANNEL_LIMIT_SET] = 37 FCH_INIT(JUNO_TRANSPORT_SCMI_PERF_FCH_BIG_LIMIT_SET), 38 [MOD_SCMI_PERF_FAST_CHANNEL_LEVEL_GET] = 39 FCH_INIT(JUNO_TRANSPORT_SCMI_PERF_FCH_BIG_LEVEL_GET), 40 [MOD_SCMI_PERF_FAST_CHANNEL_LIMIT_GET] = 41 FCH_INIT(JUNO_TRANSPORT_SCMI_PERF_FCH_BIG_LIMIT_GET), 42 }, 43 .supports_fast_channels = true, 44 #endif 45 #ifdef BUILD_HAS_STATISTICS 46 .stats_collected = true, 47 #endif 48 }, 49 [DVFS_ELEMENT_IDX_LITTLE] = { 50 #ifdef BUILD_HAS_SCMI_PERF_FAST_CHANNELS 51 .fch_config = (struct scmi_perf_fch_config[]) { 52 [MOD_SCMI_PERF_FAST_CHANNEL_LEVEL_SET] = 53 FCH_INIT(JUNO_TRANSPORT_SCMI_PERF_FCH_LITTLE_LEVEL_SET), 54 [MOD_SCMI_PERF_FAST_CHANNEL_LIMIT_SET] = 55 FCH_INIT(JUNO_TRANSPORT_SCMI_PERF_FCH_LITTLE_LIMIT_SET), 56 [MOD_SCMI_PERF_FAST_CHANNEL_LEVEL_GET] = 57 FCH_INIT(JUNO_TRANSPORT_SCMI_PERF_FCH_LITTLE_LEVEL_GET), 58 [MOD_SCMI_PERF_FAST_CHANNEL_LIMIT_GET] = 59 FCH_INIT(JUNO_TRANSPORT_SCMI_PERF_FCH_LITTLE_LIMIT_GET), 60 }, 61 .supports_fast_channels = true, 62 #endif 63 #ifdef BUILD_HAS_STATISTICS 64 .stats_collected = true, 65 #endif 66 }, 67 [DVFS_ELEMENT_IDX_GPU] = { 68 #ifdef BUILD_HAS_SCMI_PERF_FAST_CHANNELS 69 .fch_config = (struct scmi_perf_fch_config[]) { 70 [MOD_SCMI_PERF_FAST_CHANNEL_LEVEL_SET] = 71 FCH_INIT(JUNO_TRANSPORT_SCMI_PERF_FCH_GPU_LEVEL_SET), 72 [MOD_SCMI_PERF_FAST_CHANNEL_LIMIT_SET] = 73 FCH_INIT(JUNO_TRANSPORT_SCMI_PERF_FCH_GPU_LIMIT_SET), 74 [MOD_SCMI_PERF_FAST_CHANNEL_LEVEL_GET] = 75 FCH_INIT(JUNO_TRANSPORT_SCMI_PERF_FCH_GPU_LEVEL_GET), 76 [MOD_SCMI_PERF_FAST_CHANNEL_LIMIT_GET] = 77 FCH_INIT(JUNO_TRANSPORT_SCMI_PERF_FCH_GPU_LIMIT_GET), 78 }, 79 .supports_fast_channels = true, 80 # ifdef BUILD_HAS_STATISTICS 81 .stats_collected = true, 82 # endif 83 #endif 84 } 85 }; 86 87 struct fwk_module_config config_scmi_perf = { 88 .data = &((struct mod_scmi_perf_config){ 89 .domains = &domains, 90 .perf_doms_count = FWK_ARRAY_SIZE(domains), 91 #ifdef BUILD_HAS_SCMI_PERF_FAST_CHANNELS 92 .fast_channels_rate_limit = SCMI_PERF_FC_MIN_RATE_LIMIT, 93 #endif 94 #ifdef BUILD_HAS_MOD_STATISTICS 95 .stats_enabled = true, 96 #endif 97 }), 98 }; 99