12c7b9b93SAlex Elder // SPDX-License-Identifier: GPL-2.0 22c7b9b93SAlex Elder 3ff39eefdSAlex Elder /* Copyright (C) 2019-2024 Linaro Ltd. */ 42c7b9b93SAlex Elder 5ff39eefdSAlex Elder #include <linux/array_size.h> 62c7b9b93SAlex Elder #include <linux/log2.h> 72c7b9b93SAlex Elder 832d00f62SPaolo Abeni #include "../ipa_data.h" 932d00f62SPaolo Abeni #include "../ipa_endpoint.h" 1032d00f62SPaolo Abeni #include "../ipa_mem.h" 11*f60e5fb6SAlex Elder #include "../ipa_version.h" 122c7b9b93SAlex Elder 132c7b9b93SAlex Elder /** enum ipa_resource_type - IPA resource types for an SoC having IPA v4.2 */ 142c7b9b93SAlex Elder enum ipa_resource_type { 152c7b9b93SAlex Elder /* Source resource types; first must have value 0 */ 162c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_PKT_CONTEXTS = 0, 172c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_LISTS, 182c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_BUFF, 192c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_HPS_DMARS, 202c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_ACK_ENTRIES, 212c7b9b93SAlex Elder 222c7b9b93SAlex Elder /* Destination resource types; first must have value 0 */ 232c7b9b93SAlex Elder IPA_RESOURCE_TYPE_DST_DATA_SECTORS = 0, 242c7b9b93SAlex Elder IPA_RESOURCE_TYPE_DST_DPS_DMARS, 252c7b9b93SAlex Elder }; 262c7b9b93SAlex Elder 272c7b9b93SAlex Elder /* Resource groups used for an SoC having IPA v4.2 */ 282c7b9b93SAlex Elder enum ipa_rsrc_group_id { 292c7b9b93SAlex Elder /* Source resource group identifiers */ 302c7b9b93SAlex Elder IPA_RSRC_GROUP_SRC_UL_DL = 0, 312c7b9b93SAlex Elder IPA_RSRC_GROUP_SRC_COUNT, /* Last in set; not a source group */ 322c7b9b93SAlex Elder 332c7b9b93SAlex Elder /* Destination resource group identifiers */ 342c7b9b93SAlex Elder IPA_RSRC_GROUP_DST_UL_DL_DPL = 0, 352c7b9b93SAlex Elder IPA_RSRC_GROUP_DST_COUNT, /* Last; not a destination group */ 362c7b9b93SAlex Elder }; 372c7b9b93SAlex Elder 382c7b9b93SAlex Elder /* QSB configuration data for an SoC having IPA v4.2 */ 392c7b9b93SAlex Elder static const struct ipa_qsb_data ipa_qsb_data[] = { 402c7b9b93SAlex Elder [IPA_QSB_MASTER_DDR] = { 412c7b9b93SAlex Elder .max_writes = 8, 422c7b9b93SAlex Elder .max_reads = 12, 432c7b9b93SAlex Elder /* no outstanding read byte (beat) limit */ 442c7b9b93SAlex Elder }, 452c7b9b93SAlex Elder }; 462c7b9b93SAlex Elder 472c7b9b93SAlex Elder /* Endpoint configuration data for an SoC having IPA v4.2 */ 482c7b9b93SAlex Elder static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = { 492c7b9b93SAlex Elder [IPA_ENDPOINT_AP_COMMAND_TX] = { 502c7b9b93SAlex Elder .ee_id = GSI_EE_AP, 512c7b9b93SAlex Elder .channel_id = 1, 522c7b9b93SAlex Elder .endpoint_id = 6, 532c7b9b93SAlex Elder .toward_ipa = true, 542c7b9b93SAlex Elder .channel = { 552c7b9b93SAlex Elder .tre_count = 256, 562c7b9b93SAlex Elder .event_count = 256, 572c7b9b93SAlex Elder .tlv_count = 20, 582c7b9b93SAlex Elder }, 592c7b9b93SAlex Elder .endpoint = { 602c7b9b93SAlex Elder .config = { 612c7b9b93SAlex Elder .resource_group = IPA_RSRC_GROUP_SRC_UL_DL, 622c7b9b93SAlex Elder .dma_mode = true, 632c7b9b93SAlex Elder .dma_endpoint = IPA_ENDPOINT_AP_LAN_RX, 642c7b9b93SAlex Elder .tx = { 652c7b9b93SAlex Elder .seq_type = IPA_SEQ_DMA, 662c7b9b93SAlex Elder }, 672c7b9b93SAlex Elder }, 682c7b9b93SAlex Elder }, 692c7b9b93SAlex Elder }, 702c7b9b93SAlex Elder [IPA_ENDPOINT_AP_LAN_RX] = { 712c7b9b93SAlex Elder .ee_id = GSI_EE_AP, 722c7b9b93SAlex Elder .channel_id = 2, 732c7b9b93SAlex Elder .endpoint_id = 8, 742c7b9b93SAlex Elder .toward_ipa = false, 752c7b9b93SAlex Elder .channel = { 762c7b9b93SAlex Elder .tre_count = 256, 772c7b9b93SAlex Elder .event_count = 256, 782c7b9b93SAlex Elder .tlv_count = 6, 792c7b9b93SAlex Elder }, 802c7b9b93SAlex Elder .endpoint = { 812c7b9b93SAlex Elder .config = { 822c7b9b93SAlex Elder .resource_group = IPA_RSRC_GROUP_DST_UL_DL_DPL, 832c7b9b93SAlex Elder .aggregation = true, 842c7b9b93SAlex Elder .status_enable = true, 852c7b9b93SAlex Elder .rx = { 862c7b9b93SAlex Elder .buffer_size = 8192, 872c7b9b93SAlex Elder .pad_align = ilog2(sizeof(u32)), 882c7b9b93SAlex Elder .aggr_time_limit = 500, 892c7b9b93SAlex Elder }, 902c7b9b93SAlex Elder }, 912c7b9b93SAlex Elder }, 922c7b9b93SAlex Elder }, 932c7b9b93SAlex Elder [IPA_ENDPOINT_AP_MODEM_TX] = { 942c7b9b93SAlex Elder .ee_id = GSI_EE_AP, 952c7b9b93SAlex Elder .channel_id = 0, 962c7b9b93SAlex Elder .endpoint_id = 1, 972c7b9b93SAlex Elder .toward_ipa = true, 982c7b9b93SAlex Elder .channel = { 992c7b9b93SAlex Elder .tre_count = 512, 1002c7b9b93SAlex Elder .event_count = 512, 1012c7b9b93SAlex Elder .tlv_count = 8, 1022c7b9b93SAlex Elder }, 1032c7b9b93SAlex Elder .endpoint = { 1042c7b9b93SAlex Elder .filter_support = true, 1052c7b9b93SAlex Elder .config = { 1062c7b9b93SAlex Elder .resource_group = IPA_RSRC_GROUP_SRC_UL_DL, 1072c7b9b93SAlex Elder .checksum = true, 1082c7b9b93SAlex Elder .qmap = true, 1092c7b9b93SAlex Elder .status_enable = true, 1102c7b9b93SAlex Elder .tx = { 1112c7b9b93SAlex Elder .seq_type = IPA_SEQ_1_PASS_SKIP_LAST_UC, 1122c7b9b93SAlex Elder .seq_rep_type = IPA_SEQ_REP_DMA_PARSER, 1132c7b9b93SAlex Elder .status_endpoint = 1142c7b9b93SAlex Elder IPA_ENDPOINT_MODEM_AP_RX, 1152c7b9b93SAlex Elder }, 1162c7b9b93SAlex Elder }, 1172c7b9b93SAlex Elder }, 1182c7b9b93SAlex Elder }, 1192c7b9b93SAlex Elder [IPA_ENDPOINT_AP_MODEM_RX] = { 1202c7b9b93SAlex Elder .ee_id = GSI_EE_AP, 1212c7b9b93SAlex Elder .channel_id = 3, 1222c7b9b93SAlex Elder .endpoint_id = 9, 1232c7b9b93SAlex Elder .toward_ipa = false, 1242c7b9b93SAlex Elder .channel = { 1252c7b9b93SAlex Elder .tre_count = 256, 1262c7b9b93SAlex Elder .event_count = 256, 1272c7b9b93SAlex Elder .tlv_count = 6, 1282c7b9b93SAlex Elder }, 1292c7b9b93SAlex Elder .endpoint = { 1302c7b9b93SAlex Elder .config = { 1312c7b9b93SAlex Elder .resource_group = IPA_RSRC_GROUP_DST_UL_DL_DPL, 1322c7b9b93SAlex Elder .checksum = true, 1332c7b9b93SAlex Elder .qmap = true, 1342c7b9b93SAlex Elder .aggregation = true, 1352c7b9b93SAlex Elder .rx = { 1362c7b9b93SAlex Elder .buffer_size = 8192, 1372c7b9b93SAlex Elder .aggr_time_limit = 500, 1382c7b9b93SAlex Elder .aggr_close_eof = true, 1392c7b9b93SAlex Elder }, 1402c7b9b93SAlex Elder }, 1412c7b9b93SAlex Elder }, 1422c7b9b93SAlex Elder }, 1432c7b9b93SAlex Elder [IPA_ENDPOINT_MODEM_COMMAND_TX] = { 1442c7b9b93SAlex Elder .ee_id = GSI_EE_MODEM, 1452c7b9b93SAlex Elder .channel_id = 1, 1462c7b9b93SAlex Elder .endpoint_id = 5, 1472c7b9b93SAlex Elder .toward_ipa = true, 1482c7b9b93SAlex Elder }, 1492c7b9b93SAlex Elder [IPA_ENDPOINT_MODEM_LAN_RX] = { 1502c7b9b93SAlex Elder .ee_id = GSI_EE_MODEM, 1512c7b9b93SAlex Elder .channel_id = 3, 1522c7b9b93SAlex Elder .endpoint_id = 11, 1532c7b9b93SAlex Elder .toward_ipa = false, 1542c7b9b93SAlex Elder }, 1552c7b9b93SAlex Elder [IPA_ENDPOINT_MODEM_AP_TX] = { 1562c7b9b93SAlex Elder .ee_id = GSI_EE_MODEM, 1572c7b9b93SAlex Elder .channel_id = 0, 1582c7b9b93SAlex Elder .endpoint_id = 4, 1592c7b9b93SAlex Elder .toward_ipa = true, 1602c7b9b93SAlex Elder .endpoint = { 1612c7b9b93SAlex Elder .filter_support = true, 1622c7b9b93SAlex Elder }, 1632c7b9b93SAlex Elder }, 1642c7b9b93SAlex Elder [IPA_ENDPOINT_MODEM_AP_RX] = { 1652c7b9b93SAlex Elder .ee_id = GSI_EE_MODEM, 1662c7b9b93SAlex Elder .channel_id = 2, 1672c7b9b93SAlex Elder .endpoint_id = 10, 1682c7b9b93SAlex Elder .toward_ipa = false, 1692c7b9b93SAlex Elder }, 1702c7b9b93SAlex Elder }; 1712c7b9b93SAlex Elder 1722c7b9b93SAlex Elder /* Source resource configuration data for an SoC having IPA v4.2 */ 1732c7b9b93SAlex Elder static const struct ipa_resource ipa_resource_src[] = { 1742c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_PKT_CONTEXTS] = { 1752c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL_DL] = { 1762c7b9b93SAlex Elder .min = 3, .max = 63, 1772c7b9b93SAlex Elder }, 1782c7b9b93SAlex Elder }, 1792c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_LISTS] = { 1802c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL_DL] = { 1812c7b9b93SAlex Elder .min = 3, .max = 3, 1822c7b9b93SAlex Elder }, 1832c7b9b93SAlex Elder }, 1842c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_BUFF] = { 1852c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL_DL] = { 1862c7b9b93SAlex Elder .min = 10, .max = 10, 1872c7b9b93SAlex Elder }, 1882c7b9b93SAlex Elder }, 1892c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_HPS_DMARS] = { 1902c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL_DL] = { 1912c7b9b93SAlex Elder .min = 1, .max = 1, 1922c7b9b93SAlex Elder }, 1932c7b9b93SAlex Elder }, 1942c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_ACK_ENTRIES] = { 1952c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL_DL] = { 1962c7b9b93SAlex Elder .min = 5, .max = 5, 1972c7b9b93SAlex Elder }, 1982c7b9b93SAlex Elder }, 1992c7b9b93SAlex Elder }; 2002c7b9b93SAlex Elder 2012c7b9b93SAlex Elder /* Destination resource configuration data for an SoC having IPA v4.2 */ 2022c7b9b93SAlex Elder static const struct ipa_resource ipa_resource_dst[] = { 2032c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_DST_DATA_SECTORS] = { 2042c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_UL_DL_DPL] = { 2052c7b9b93SAlex Elder .min = 3, .max = 3, 2062c7b9b93SAlex Elder }, 2072c7b9b93SAlex Elder }, 2082c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_DST_DPS_DMARS] = { 2092c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_UL_DL_DPL] = { 2102c7b9b93SAlex Elder .min = 1, .max = 63, 2112c7b9b93SAlex Elder }, 2122c7b9b93SAlex Elder }, 2132c7b9b93SAlex Elder }; 2142c7b9b93SAlex Elder 2152c7b9b93SAlex Elder /* Resource configuration data for an SoC having IPA v4.2 */ 2162c7b9b93SAlex Elder static const struct ipa_resource_data ipa_resource_data = { 2172c7b9b93SAlex Elder .rsrc_group_src_count = IPA_RSRC_GROUP_SRC_COUNT, 2182c7b9b93SAlex Elder .rsrc_group_dst_count = IPA_RSRC_GROUP_DST_COUNT, 2192c7b9b93SAlex Elder .resource_src_count = ARRAY_SIZE(ipa_resource_src), 2202c7b9b93SAlex Elder .resource_src = ipa_resource_src, 2212c7b9b93SAlex Elder .resource_dst_count = ARRAY_SIZE(ipa_resource_dst), 2222c7b9b93SAlex Elder .resource_dst = ipa_resource_dst, 2232c7b9b93SAlex Elder }; 2242c7b9b93SAlex Elder 2252c7b9b93SAlex Elder /* IPA-resident memory region data for an SoC having IPA v4.2 */ 2262c7b9b93SAlex Elder static const struct ipa_mem ipa_mem_local_data[] = { 2272c7b9b93SAlex Elder { 2282c7b9b93SAlex Elder .id = IPA_MEM_UC_SHARED, 2292c7b9b93SAlex Elder .offset = 0x0000, 2302c7b9b93SAlex Elder .size = 0x0080, 2312c7b9b93SAlex Elder .canary_count = 0, 2322c7b9b93SAlex Elder }, 2332c7b9b93SAlex Elder { 2342c7b9b93SAlex Elder .id = IPA_MEM_UC_INFO, 2352c7b9b93SAlex Elder .offset = 0x0080, 2362c7b9b93SAlex Elder .size = 0x0200, 2372c7b9b93SAlex Elder .canary_count = 0, 2382c7b9b93SAlex Elder }, 2392c7b9b93SAlex Elder { 2402c7b9b93SAlex Elder .id = IPA_MEM_V4_FILTER_HASHED, 2412c7b9b93SAlex Elder .offset = 0x0288, 2422c7b9b93SAlex Elder .size = 0, 2432c7b9b93SAlex Elder .canary_count = 2, 2442c7b9b93SAlex Elder }, 2452c7b9b93SAlex Elder { 2462c7b9b93SAlex Elder .id = IPA_MEM_V4_FILTER, 2472c7b9b93SAlex Elder .offset = 0x0290, 2482c7b9b93SAlex Elder .size = 0x0078, 2492c7b9b93SAlex Elder .canary_count = 2, 2502c7b9b93SAlex Elder }, 2512c7b9b93SAlex Elder { 2522c7b9b93SAlex Elder .id = IPA_MEM_V6_FILTER_HASHED, 2532c7b9b93SAlex Elder .offset = 0x0310, 2542c7b9b93SAlex Elder .size = 0, 2552c7b9b93SAlex Elder .canary_count = 2, 2562c7b9b93SAlex Elder }, 2572c7b9b93SAlex Elder { 2582c7b9b93SAlex Elder .id = IPA_MEM_V6_FILTER, 2592c7b9b93SAlex Elder .offset = 0x0318, 2602c7b9b93SAlex Elder .size = 0x0078, 2612c7b9b93SAlex Elder .canary_count = 2, 2622c7b9b93SAlex Elder }, 2632c7b9b93SAlex Elder { 2642c7b9b93SAlex Elder .id = IPA_MEM_V4_ROUTE_HASHED, 2652c7b9b93SAlex Elder .offset = 0x0398, 2662c7b9b93SAlex Elder .size = 0, 2672c7b9b93SAlex Elder .canary_count = 2, 2682c7b9b93SAlex Elder }, 2692c7b9b93SAlex Elder { 2702c7b9b93SAlex Elder .id = IPA_MEM_V4_ROUTE, 2712c7b9b93SAlex Elder .offset = 0x03a0, 2722c7b9b93SAlex Elder .size = 0x0078, 2732c7b9b93SAlex Elder .canary_count = 2, 2742c7b9b93SAlex Elder }, 2752c7b9b93SAlex Elder { 2762c7b9b93SAlex Elder .id = IPA_MEM_V6_ROUTE_HASHED, 2772c7b9b93SAlex Elder .offset = 0x0420, 2782c7b9b93SAlex Elder .size = 0, 2792c7b9b93SAlex Elder .canary_count = 2, 2802c7b9b93SAlex Elder }, 2812c7b9b93SAlex Elder { 2822c7b9b93SAlex Elder .id = IPA_MEM_V6_ROUTE, 2832c7b9b93SAlex Elder .offset = 0x0428, 2842c7b9b93SAlex Elder .size = 0x0078, 2852c7b9b93SAlex Elder .canary_count = 2, 2862c7b9b93SAlex Elder }, 2872c7b9b93SAlex Elder { 2882c7b9b93SAlex Elder .id = IPA_MEM_MODEM_HEADER, 2892c7b9b93SAlex Elder .offset = 0x04a8, 2902c7b9b93SAlex Elder .size = 0x0140, 2912c7b9b93SAlex Elder .canary_count = 2, 2922c7b9b93SAlex Elder }, 2932c7b9b93SAlex Elder { 2942c7b9b93SAlex Elder .id = IPA_MEM_MODEM_PROC_CTX, 2952c7b9b93SAlex Elder .offset = 0x05f0, 2962c7b9b93SAlex Elder .size = 0x0200, 2972c7b9b93SAlex Elder .canary_count = 2, 2982c7b9b93SAlex Elder }, 2992c7b9b93SAlex Elder { 3002c7b9b93SAlex Elder .id = IPA_MEM_AP_PROC_CTX, 3012c7b9b93SAlex Elder .offset = 0x07f0, 3022c7b9b93SAlex Elder .size = 0x0200, 3032c7b9b93SAlex Elder .canary_count = 0, 3042c7b9b93SAlex Elder }, 3052c7b9b93SAlex Elder { 3062c7b9b93SAlex Elder .id = IPA_MEM_PDN_CONFIG, 3072c7b9b93SAlex Elder .offset = 0x09f8, 3082c7b9b93SAlex Elder .size = 0x0050, 3092c7b9b93SAlex Elder .canary_count = 2, 3102c7b9b93SAlex Elder }, 3112c7b9b93SAlex Elder { 3122c7b9b93SAlex Elder .id = IPA_MEM_STATS_QUOTA_MODEM, 3132c7b9b93SAlex Elder .offset = 0x0a50, 3142c7b9b93SAlex Elder .size = 0x0060, 3152c7b9b93SAlex Elder .canary_count = 2, 3162c7b9b93SAlex Elder }, 3172c7b9b93SAlex Elder { 3182c7b9b93SAlex Elder .id = IPA_MEM_STATS_TETHERING, 3192c7b9b93SAlex Elder .offset = 0x0ab0, 3202c7b9b93SAlex Elder .size = 0x0140, 3212c7b9b93SAlex Elder .canary_count = 0, 3222c7b9b93SAlex Elder }, 3232c7b9b93SAlex Elder { 3242c7b9b93SAlex Elder .id = IPA_MEM_MODEM, 3252c7b9b93SAlex Elder .offset = 0x0bf0, 3262c7b9b93SAlex Elder .size = 0x140c, 3272c7b9b93SAlex Elder .canary_count = 0, 3282c7b9b93SAlex Elder }, 3292c7b9b93SAlex Elder { 3302c7b9b93SAlex Elder .id = IPA_MEM_END_MARKER, 3312c7b9b93SAlex Elder .offset = 0x2000, 3322c7b9b93SAlex Elder .size = 0, 3332c7b9b93SAlex Elder .canary_count = 1, 3342c7b9b93SAlex Elder }, 3352c7b9b93SAlex Elder }; 3362c7b9b93SAlex Elder 3372c7b9b93SAlex Elder /* Memory configuration data for an SoC having IPA v4.2 */ 3382c7b9b93SAlex Elder static const struct ipa_mem_data ipa_mem_data = { 3392c7b9b93SAlex Elder .local_count = ARRAY_SIZE(ipa_mem_local_data), 3402c7b9b93SAlex Elder .local = ipa_mem_local_data, 3412c7b9b93SAlex Elder .imem_addr = 0x146a8000, 3422c7b9b93SAlex Elder .imem_size = 0x00002000, 3432c7b9b93SAlex Elder .smem_id = 497, 3442c7b9b93SAlex Elder .smem_size = 0x00002000, 3452c7b9b93SAlex Elder }; 3462c7b9b93SAlex Elder 3472c7b9b93SAlex Elder /* Interconnect rates are in 1000 byte/second units */ 3482c7b9b93SAlex Elder static const struct ipa_interconnect_data ipa_interconnect_data[] = { 3492c7b9b93SAlex Elder { 3502c7b9b93SAlex Elder .name = "memory", 3512c7b9b93SAlex Elder .peak_bandwidth = 465000, /* 465 MBps */ 3522c7b9b93SAlex Elder .average_bandwidth = 80000, /* 80 MBps */ 3532c7b9b93SAlex Elder }, 3542c7b9b93SAlex Elder /* Average bandwidth is unused for the next two interconnects */ 3552c7b9b93SAlex Elder { 3562c7b9b93SAlex Elder .name = "imem", 3572c7b9b93SAlex Elder .peak_bandwidth = 68570, /* 68.570 MBps */ 3582c7b9b93SAlex Elder .average_bandwidth = 0, /* unused */ 3592c7b9b93SAlex Elder }, 3602c7b9b93SAlex Elder { 3612c7b9b93SAlex Elder .name = "config", 3622c7b9b93SAlex Elder .peak_bandwidth = 30000, /* 30 MBps */ 3632c7b9b93SAlex Elder .average_bandwidth = 0, /* unused */ 3642c7b9b93SAlex Elder }, 3652c7b9b93SAlex Elder }; 3662c7b9b93SAlex Elder 3672c7b9b93SAlex Elder /* Clock and interconnect configuration data for an SoC having IPA v4.2 */ 3682c7b9b93SAlex Elder static const struct ipa_power_data ipa_power_data = { 3692c7b9b93SAlex Elder .core_clock_rate = 100 * 1000 * 1000, /* Hz */ 3702c7b9b93SAlex Elder .interconnect_count = ARRAY_SIZE(ipa_interconnect_data), 3712c7b9b93SAlex Elder .interconnect_data = ipa_interconnect_data, 3722c7b9b93SAlex Elder }; 3732c7b9b93SAlex Elder 3742c7b9b93SAlex Elder /* Configuration data for an SoC having IPA v4.2 */ 3752c7b9b93SAlex Elder const struct ipa_data ipa_data_v4_2 = { 3762c7b9b93SAlex Elder .version = IPA_VERSION_4_2, 3772c7b9b93SAlex Elder /* backward_compat value is 0 */ 3782c7b9b93SAlex Elder .qsb_count = ARRAY_SIZE(ipa_qsb_data), 3792c7b9b93SAlex Elder .qsb_data = ipa_qsb_data, 3808defab8bSAlex Elder .modem_route_count = 8, 3812c7b9b93SAlex Elder .endpoint_count = ARRAY_SIZE(ipa_gsi_endpoint_data), 3822c7b9b93SAlex Elder .endpoint_data = ipa_gsi_endpoint_data, 3832c7b9b93SAlex Elder .resource_data = &ipa_resource_data, 3842c7b9b93SAlex Elder .mem_data = &ipa_mem_data, 3852c7b9b93SAlex Elder .power_data = &ipa_power_data, 3862c7b9b93SAlex Elder }; 387