12c7b9b93SAlex Elder // SPDX-License-Identifier: GPL-2.0 22c7b9b93SAlex Elder 32c7b9b93SAlex Elder /* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. 42c7b9b93SAlex Elder * Copyright (C) 2019-2021 Linaro Ltd. 52c7b9b93SAlex Elder */ 62c7b9b93SAlex Elder 72c7b9b93SAlex Elder #include <linux/log2.h> 82c7b9b93SAlex Elder 9*32d00f62SPaolo Abeni #include "../gsi.h" 10*32d00f62SPaolo Abeni #include "../ipa_data.h" 11*32d00f62SPaolo Abeni #include "../ipa_endpoint.h" 12*32d00f62SPaolo Abeni #include "../ipa_mem.h" 132c7b9b93SAlex Elder 142c7b9b93SAlex Elder /** enum ipa_resource_type - IPA resource types for an SoC having IPA v3.1 */ 152c7b9b93SAlex Elder enum ipa_resource_type { 162c7b9b93SAlex Elder /* Source resource types; first must have value 0 */ 172c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_PKT_CONTEXTS = 0, 182c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_HDR_SECTORS, 192c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_HDRI1_BUFFER, 202c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_LISTS, 212c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_BUFF, 222c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_HDRI2_BUFFERS, 232c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_HPS_DMARS, 242c7b9b93SAlex Elder IPA_RESOURCE_TYPE_SRC_ACK_ENTRIES, 252c7b9b93SAlex Elder 262c7b9b93SAlex Elder /* Destination resource types; first must have value 0 */ 272c7b9b93SAlex Elder IPA_RESOURCE_TYPE_DST_DATA_SECTORS = 0, 282c7b9b93SAlex Elder IPA_RESOURCE_TYPE_DST_DATA_SECTOR_LISTS, 292c7b9b93SAlex Elder IPA_RESOURCE_TYPE_DST_DPS_DMARS, 302c7b9b93SAlex Elder }; 312c7b9b93SAlex Elder 322c7b9b93SAlex Elder /* Resource groups used for an SoC having IPA v3.1 */ 332c7b9b93SAlex Elder enum ipa_rsrc_group_id { 342c7b9b93SAlex Elder /* Source resource group identifiers */ 352c7b9b93SAlex Elder IPA_RSRC_GROUP_SRC_UL = 0, 362c7b9b93SAlex Elder IPA_RSRC_GROUP_SRC_DL, 372c7b9b93SAlex Elder IPA_RSRC_GROUP_SRC_DIAG, 382c7b9b93SAlex Elder IPA_RSRC_GROUP_SRC_DMA, 392c7b9b93SAlex Elder IPA_RSRC_GROUP_SRC_UNUSED, 402c7b9b93SAlex Elder IPA_RSRC_GROUP_SRC_UC_RX_Q, 412c7b9b93SAlex Elder IPA_RSRC_GROUP_SRC_COUNT, /* Last in set; not a source group */ 422c7b9b93SAlex Elder 432c7b9b93SAlex Elder /* Destination resource group identifiers */ 442c7b9b93SAlex Elder IPA_RSRC_GROUP_DST_UL = 0, 452c7b9b93SAlex Elder IPA_RSRC_GROUP_DST_DL, 462c7b9b93SAlex Elder IPA_RSRC_GROUP_DST_DIAG_DPL, 472c7b9b93SAlex Elder IPA_RSRC_GROUP_DST_DMA, 482c7b9b93SAlex Elder IPA_RSRC_GROUP_DST_Q6ZIP_GENERAL, 492c7b9b93SAlex Elder IPA_RSRC_GROUP_DST_Q6ZIP_ENGINE, 502c7b9b93SAlex Elder IPA_RSRC_GROUP_DST_COUNT, /* Last; not a destination group */ 512c7b9b93SAlex Elder }; 522c7b9b93SAlex Elder 532c7b9b93SAlex Elder /* QSB configuration data for an SoC having IPA v3.1 */ 542c7b9b93SAlex Elder static const struct ipa_qsb_data ipa_qsb_data[] = { 552c7b9b93SAlex Elder [IPA_QSB_MASTER_DDR] = { 562c7b9b93SAlex Elder .max_writes = 8, 572c7b9b93SAlex Elder .max_reads = 8, 582c7b9b93SAlex Elder }, 592c7b9b93SAlex Elder [IPA_QSB_MASTER_PCIE] = { 602c7b9b93SAlex Elder .max_writes = 2, 612c7b9b93SAlex Elder .max_reads = 8, 622c7b9b93SAlex Elder }, 632c7b9b93SAlex Elder }; 642c7b9b93SAlex Elder 652c7b9b93SAlex Elder /* Endpoint data for an SoC having IPA v3.1 */ 662c7b9b93SAlex Elder static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = { 672c7b9b93SAlex Elder [IPA_ENDPOINT_AP_COMMAND_TX] = { 682c7b9b93SAlex Elder .ee_id = GSI_EE_AP, 692c7b9b93SAlex Elder .channel_id = 6, 702c7b9b93SAlex Elder .endpoint_id = 22, 712c7b9b93SAlex Elder .toward_ipa = true, 722c7b9b93SAlex Elder .channel = { 732c7b9b93SAlex Elder .tre_count = 256, 742c7b9b93SAlex Elder .event_count = 256, 752c7b9b93SAlex Elder .tlv_count = 18, 762c7b9b93SAlex Elder }, 772c7b9b93SAlex Elder .endpoint = { 782c7b9b93SAlex Elder .config = { 792c7b9b93SAlex Elder .resource_group = IPA_RSRC_GROUP_SRC_UL, 802c7b9b93SAlex Elder .dma_mode = true, 812c7b9b93SAlex Elder .dma_endpoint = IPA_ENDPOINT_AP_LAN_RX, 822c7b9b93SAlex Elder .tx = { 832c7b9b93SAlex Elder .seq_type = IPA_SEQ_DMA, 842c7b9b93SAlex Elder }, 852c7b9b93SAlex Elder }, 862c7b9b93SAlex Elder }, 872c7b9b93SAlex Elder }, 882c7b9b93SAlex Elder [IPA_ENDPOINT_AP_LAN_RX] = { 892c7b9b93SAlex Elder .ee_id = GSI_EE_AP, 902c7b9b93SAlex Elder .channel_id = 7, 912c7b9b93SAlex Elder .endpoint_id = 15, 922c7b9b93SAlex Elder .toward_ipa = false, 932c7b9b93SAlex Elder .channel = { 942c7b9b93SAlex Elder .tre_count = 256, 952c7b9b93SAlex Elder .event_count = 256, 962c7b9b93SAlex Elder .tlv_count = 8, 972c7b9b93SAlex Elder }, 982c7b9b93SAlex Elder .endpoint = { 992c7b9b93SAlex Elder .config = { 1002c7b9b93SAlex Elder .resource_group = IPA_RSRC_GROUP_SRC_UL, 1012c7b9b93SAlex Elder .aggregation = true, 1022c7b9b93SAlex Elder .status_enable = true, 1032c7b9b93SAlex Elder .rx = { 1042c7b9b93SAlex Elder .buffer_size = 8192, 1052c7b9b93SAlex Elder .pad_align = ilog2(sizeof(u32)), 1062c7b9b93SAlex Elder .aggr_time_limit = 500, 1072c7b9b93SAlex Elder }, 1082c7b9b93SAlex Elder }, 1092c7b9b93SAlex Elder }, 1102c7b9b93SAlex Elder }, 1112c7b9b93SAlex Elder [IPA_ENDPOINT_AP_MODEM_TX] = { 1122c7b9b93SAlex Elder .ee_id = GSI_EE_AP, 1132c7b9b93SAlex Elder .channel_id = 5, 1142c7b9b93SAlex Elder .endpoint_id = 3, 1152c7b9b93SAlex Elder .toward_ipa = true, 1162c7b9b93SAlex Elder .channel = { 1172c7b9b93SAlex Elder .tre_count = 512, 1182c7b9b93SAlex Elder .event_count = 512, 1192c7b9b93SAlex Elder .tlv_count = 16, 1202c7b9b93SAlex Elder }, 1212c7b9b93SAlex Elder .endpoint = { 1222c7b9b93SAlex Elder .filter_support = true, 1232c7b9b93SAlex Elder .config = { 1242c7b9b93SAlex Elder .resource_group = IPA_RSRC_GROUP_SRC_UL, 1252c7b9b93SAlex Elder .checksum = true, 1262c7b9b93SAlex Elder .qmap = true, 1272c7b9b93SAlex Elder .status_enable = true, 1282c7b9b93SAlex Elder .tx = { 1292c7b9b93SAlex Elder .seq_type = IPA_SEQ_2_PASS_SKIP_LAST_UC, 1302c7b9b93SAlex Elder .status_endpoint = 1312c7b9b93SAlex Elder IPA_ENDPOINT_MODEM_AP_RX, 1322c7b9b93SAlex Elder }, 1332c7b9b93SAlex Elder }, 1342c7b9b93SAlex Elder }, 1352c7b9b93SAlex Elder }, 1362c7b9b93SAlex Elder [IPA_ENDPOINT_AP_MODEM_RX] = { 1372c7b9b93SAlex Elder .ee_id = GSI_EE_AP, 1382c7b9b93SAlex Elder .channel_id = 8, 1392c7b9b93SAlex Elder .endpoint_id = 16, 1402c7b9b93SAlex Elder .toward_ipa = false, 1412c7b9b93SAlex Elder .channel = { 1422c7b9b93SAlex Elder .tre_count = 256, 1432c7b9b93SAlex Elder .event_count = 256, 1442c7b9b93SAlex Elder .tlv_count = 8, 1452c7b9b93SAlex Elder }, 1462c7b9b93SAlex Elder .endpoint = { 1472c7b9b93SAlex Elder .config = { 1482c7b9b93SAlex Elder .resource_group = IPA_RSRC_GROUP_DST_DL, 1492c7b9b93SAlex Elder .checksum = true, 1502c7b9b93SAlex Elder .qmap = true, 1512c7b9b93SAlex Elder .aggregation = true, 1522c7b9b93SAlex Elder .rx = { 1532c7b9b93SAlex Elder .buffer_size = 8192, 1542c7b9b93SAlex Elder .aggr_time_limit = 500, 1552c7b9b93SAlex Elder .aggr_close_eof = true, 1562c7b9b93SAlex Elder }, 1572c7b9b93SAlex Elder }, 1582c7b9b93SAlex Elder }, 1592c7b9b93SAlex Elder }, 1602c7b9b93SAlex Elder [IPA_ENDPOINT_MODEM_LAN_TX] = { 1612c7b9b93SAlex Elder .ee_id = GSI_EE_MODEM, 1622c7b9b93SAlex Elder .channel_id = 4, 1632c7b9b93SAlex Elder .endpoint_id = 9, 1642c7b9b93SAlex Elder .toward_ipa = true, 1652c7b9b93SAlex Elder .endpoint = { 1662c7b9b93SAlex Elder .filter_support = true, 1672c7b9b93SAlex Elder }, 1682c7b9b93SAlex Elder }, 1692c7b9b93SAlex Elder [IPA_ENDPOINT_MODEM_AP_TX] = { 1702c7b9b93SAlex Elder .ee_id = GSI_EE_MODEM, 1712c7b9b93SAlex Elder .channel_id = 0, 1722c7b9b93SAlex Elder .endpoint_id = 5, 1732c7b9b93SAlex Elder .toward_ipa = true, 1742c7b9b93SAlex Elder .endpoint = { 1752c7b9b93SAlex Elder .filter_support = true, 1762c7b9b93SAlex Elder }, 1772c7b9b93SAlex Elder }, 1782c7b9b93SAlex Elder [IPA_ENDPOINT_MODEM_AP_RX] = { 1792c7b9b93SAlex Elder .ee_id = GSI_EE_MODEM, 1802c7b9b93SAlex Elder .channel_id = 5, 1812c7b9b93SAlex Elder .endpoint_id = 18, 1822c7b9b93SAlex Elder .toward_ipa = false, 1832c7b9b93SAlex Elder }, 1842c7b9b93SAlex Elder }; 1852c7b9b93SAlex Elder 1862c7b9b93SAlex Elder /* Source resource configuration data for an SoC having IPA v3.1 */ 1872c7b9b93SAlex Elder static const struct ipa_resource ipa_resource_src[] = { 1882c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_PKT_CONTEXTS] = { 1892c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL] = { 1902c7b9b93SAlex Elder .min = 3, .max = 255, 1912c7b9b93SAlex Elder }, 1922c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DL] = { 1932c7b9b93SAlex Elder .min = 3, .max = 255, 1942c7b9b93SAlex Elder }, 1952c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DIAG] = { 1962c7b9b93SAlex Elder .min = 1, .max = 255, 1972c7b9b93SAlex Elder }, 1982c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DMA] = { 1992c7b9b93SAlex Elder .min = 1, .max = 255, 2002c7b9b93SAlex Elder }, 2012c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = { 2022c7b9b93SAlex Elder .min = 2, .max = 255, 2032c7b9b93SAlex Elder }, 2042c7b9b93SAlex Elder }, 2052c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_HDR_SECTORS] = { 2062c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL] = { 2072c7b9b93SAlex Elder .min = 0, .max = 255, 2082c7b9b93SAlex Elder }, 2092c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DL] = { 2102c7b9b93SAlex Elder .min = 0, .max = 255, 2112c7b9b93SAlex Elder }, 2122c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DIAG] = { 2132c7b9b93SAlex Elder .min = 0, .max = 255, 2142c7b9b93SAlex Elder }, 2152c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DMA] = { 2162c7b9b93SAlex Elder .min = 0, .max = 255, 2172c7b9b93SAlex Elder }, 2182c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = { 2192c7b9b93SAlex Elder .min = 0, .max = 255, 2202c7b9b93SAlex Elder }, 2212c7b9b93SAlex Elder }, 2222c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_HDRI1_BUFFER] = { 2232c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL] = { 2242c7b9b93SAlex Elder .min = 0, .max = 255, 2252c7b9b93SAlex Elder }, 2262c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DL] = { 2272c7b9b93SAlex Elder .min = 0, .max = 255, 2282c7b9b93SAlex Elder }, 2292c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DIAG] = { 2302c7b9b93SAlex Elder .min = 0, .max = 255, 2312c7b9b93SAlex Elder }, 2322c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DMA] = { 2332c7b9b93SAlex Elder .min = 0, .max = 255, 2342c7b9b93SAlex Elder }, 2352c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = { 2362c7b9b93SAlex Elder .min = 0, .max = 255, 2372c7b9b93SAlex Elder }, 2382c7b9b93SAlex Elder }, 2392c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_LISTS] = { 2402c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL] = { 2412c7b9b93SAlex Elder .min = 14, .max = 14, 2422c7b9b93SAlex Elder }, 2432c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DL] = { 2442c7b9b93SAlex Elder .min = 16, .max = 16, 2452c7b9b93SAlex Elder }, 2462c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DIAG] = { 2472c7b9b93SAlex Elder .min = 5, .max = 5, 2482c7b9b93SAlex Elder }, 2492c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DMA] = { 2502c7b9b93SAlex Elder .min = 5, .max = 5, 2512c7b9b93SAlex Elder }, 2522c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = { 2532c7b9b93SAlex Elder .min = 8, .max = 8, 2542c7b9b93SAlex Elder }, 2552c7b9b93SAlex Elder }, 2562c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_BUFF] = { 2572c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL] = { 2582c7b9b93SAlex Elder .min = 19, .max = 19, 2592c7b9b93SAlex Elder }, 2602c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DL] = { 2612c7b9b93SAlex Elder .min = 26, .max = 26, 2622c7b9b93SAlex Elder }, 2632c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DIAG] = { 2642c7b9b93SAlex Elder .min = 5, .max = 5, /* 3 downstream */ 2652c7b9b93SAlex Elder }, 2662c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DMA] = { 2672c7b9b93SAlex Elder .min = 5, .max = 5, /* 7 downstream */ 2682c7b9b93SAlex Elder }, 2692c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = { 2702c7b9b93SAlex Elder .min = 8, .max = 8, 2712c7b9b93SAlex Elder }, 2722c7b9b93SAlex Elder }, 2732c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_HDRI2_BUFFERS] = { 2742c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL] = { 2752c7b9b93SAlex Elder .min = 0, .max = 255, 2762c7b9b93SAlex Elder }, 2772c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DL] = { 2782c7b9b93SAlex Elder .min = 0, .max = 255, 2792c7b9b93SAlex Elder }, 2802c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DIAG] = { 2812c7b9b93SAlex Elder .min = 0, .max = 255, 2822c7b9b93SAlex Elder }, 2832c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DMA] = { 2842c7b9b93SAlex Elder .min = 0, .max = 255, 2852c7b9b93SAlex Elder }, 2862c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = { 2872c7b9b93SAlex Elder .min = 0, .max = 255, 2882c7b9b93SAlex Elder }, 2892c7b9b93SAlex Elder }, 2902c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_HPS_DMARS] = { 2912c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL] = { 2922c7b9b93SAlex Elder .min = 0, .max = 255, 2932c7b9b93SAlex Elder }, 2942c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DL] = { 2952c7b9b93SAlex Elder .min = 0, .max = 255, 2962c7b9b93SAlex Elder }, 2972c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DIAG] = { 2982c7b9b93SAlex Elder .min = 0, .max = 255, 2992c7b9b93SAlex Elder }, 3002c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DMA] = { 3012c7b9b93SAlex Elder .min = 0, .max = 255, 3022c7b9b93SAlex Elder }, 3032c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = { 3042c7b9b93SAlex Elder .min = 0, .max = 255, 3052c7b9b93SAlex Elder }, 3062c7b9b93SAlex Elder }, 3072c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_SRC_ACK_ENTRIES] = { 3082c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UL] = { 3092c7b9b93SAlex Elder .min = 19, .max = 19, 3102c7b9b93SAlex Elder }, 3112c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DL] = { 3122c7b9b93SAlex Elder .min = 26, .max = 26, 3132c7b9b93SAlex Elder }, 3142c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DIAG] = { 3152c7b9b93SAlex Elder .min = 5, .max = 5, 3162c7b9b93SAlex Elder }, 3172c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_DMA] = { 3182c7b9b93SAlex Elder .min = 5, .max = 5, 3192c7b9b93SAlex Elder }, 3202c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_SRC_UC_RX_Q] = { 3212c7b9b93SAlex Elder .min = 8, .max = 8, 3222c7b9b93SAlex Elder }, 3232c7b9b93SAlex Elder }, 3242c7b9b93SAlex Elder }; 3252c7b9b93SAlex Elder 3262c7b9b93SAlex Elder /* Destination resource configuration data for an SoC having IPA v3.1 */ 3272c7b9b93SAlex Elder static const struct ipa_resource ipa_resource_dst[] = { 3282c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_DST_DATA_SECTORS] = { 3292c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_UL] = { 3302c7b9b93SAlex Elder .min = 3, .max = 3, /* 2 downstream */ 3312c7b9b93SAlex Elder }, 3322c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_DL] = { 3332c7b9b93SAlex Elder .min = 3, .max = 3, 3342c7b9b93SAlex Elder }, 3352c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_DIAG_DPL] = { 3362c7b9b93SAlex Elder .min = 1, .max = 1, /* 0 downstream */ 3372c7b9b93SAlex Elder }, 3382c7b9b93SAlex Elder /* IPA_RSRC_GROUP_DST_DMA uses 2 downstream */ 3392c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_Q6ZIP_GENERAL] = { 3402c7b9b93SAlex Elder .min = 3, .max = 3, 3412c7b9b93SAlex Elder }, 3422c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_Q6ZIP_ENGINE] = { 3432c7b9b93SAlex Elder .min = 3, .max = 3, 3442c7b9b93SAlex Elder }, 3452c7b9b93SAlex Elder }, 3462c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_DST_DATA_SECTOR_LISTS] = { 3472c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_UL] = { 3482c7b9b93SAlex Elder .min = 0, .max = 255, 3492c7b9b93SAlex Elder }, 3502c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_DL] = { 3512c7b9b93SAlex Elder .min = 0, .max = 255, 3522c7b9b93SAlex Elder }, 3532c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_DIAG_DPL] = { 3542c7b9b93SAlex Elder .min = 0, .max = 255, 3552c7b9b93SAlex Elder }, 3562c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_DMA] = { 3572c7b9b93SAlex Elder .min = 0, .max = 255, 3582c7b9b93SAlex Elder }, 3592c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_Q6ZIP_GENERAL] = { 3602c7b9b93SAlex Elder .min = 0, .max = 255, 3612c7b9b93SAlex Elder }, 3622c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_Q6ZIP_ENGINE] = { 3632c7b9b93SAlex Elder .min = 0, .max = 255, 3642c7b9b93SAlex Elder }, 3652c7b9b93SAlex Elder }, 3662c7b9b93SAlex Elder [IPA_RESOURCE_TYPE_DST_DPS_DMARS] = { 3672c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_UL] = { 3682c7b9b93SAlex Elder .min = 1, .max = 1, 3692c7b9b93SAlex Elder }, 3702c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_DL] = { 3712c7b9b93SAlex Elder .min = 1, .max = 1, 3722c7b9b93SAlex Elder }, 3732c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_DIAG_DPL] = { 3742c7b9b93SAlex Elder .min = 1, .max = 1, 3752c7b9b93SAlex Elder }, 3762c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_DMA] = { 3772c7b9b93SAlex Elder .min = 1, .max = 1, 3782c7b9b93SAlex Elder }, 3792c7b9b93SAlex Elder .limits[IPA_RSRC_GROUP_DST_Q6ZIP_GENERAL] = { 3802c7b9b93SAlex Elder .min = 1, .max = 1, 3812c7b9b93SAlex Elder }, 3822c7b9b93SAlex Elder }, 3832c7b9b93SAlex Elder }; 3842c7b9b93SAlex Elder 3852c7b9b93SAlex Elder /* Resource configuration data for an SoC having IPA v3.1 */ 3862c7b9b93SAlex Elder static const struct ipa_resource_data ipa_resource_data = { 3872c7b9b93SAlex Elder .rsrc_group_src_count = IPA_RSRC_GROUP_SRC_COUNT, 3882c7b9b93SAlex Elder .rsrc_group_dst_count = IPA_RSRC_GROUP_DST_COUNT, 3892c7b9b93SAlex Elder .resource_src_count = ARRAY_SIZE(ipa_resource_src), 3902c7b9b93SAlex Elder .resource_src = ipa_resource_src, 3912c7b9b93SAlex Elder .resource_dst_count = ARRAY_SIZE(ipa_resource_dst), 3922c7b9b93SAlex Elder .resource_dst = ipa_resource_dst, 3932c7b9b93SAlex Elder }; 3942c7b9b93SAlex Elder 3952c7b9b93SAlex Elder /* IPA-resident memory region data for an SoC having IPA v3.1 */ 3962c7b9b93SAlex Elder static const struct ipa_mem ipa_mem_local_data[] = { 3972c7b9b93SAlex Elder { 3982c7b9b93SAlex Elder .id = IPA_MEM_UC_SHARED, 3992c7b9b93SAlex Elder .offset = 0x0000, 4002c7b9b93SAlex Elder .size = 0x0080, 4012c7b9b93SAlex Elder .canary_count = 0, 4022c7b9b93SAlex Elder }, 4032c7b9b93SAlex Elder { 4042c7b9b93SAlex Elder .id = IPA_MEM_UC_INFO, 4052c7b9b93SAlex Elder .offset = 0x0080, 4062c7b9b93SAlex Elder .size = 0x0200, 4072c7b9b93SAlex Elder .canary_count = 0, 4082c7b9b93SAlex Elder }, 4092c7b9b93SAlex Elder { 4102c7b9b93SAlex Elder .id = IPA_MEM_V4_FILTER_HASHED, 4112c7b9b93SAlex Elder .offset = 0x0288, 4122c7b9b93SAlex Elder .size = 0x0078, 4132c7b9b93SAlex Elder .canary_count = 2, 4142c7b9b93SAlex Elder }, 4152c7b9b93SAlex Elder { 4162c7b9b93SAlex Elder .id = IPA_MEM_V4_FILTER, 4172c7b9b93SAlex Elder .offset = 0x0308, 4182c7b9b93SAlex Elder .size = 0x0078, 4192c7b9b93SAlex Elder .canary_count = 2, 4202c7b9b93SAlex Elder }, 4212c7b9b93SAlex Elder { 4222c7b9b93SAlex Elder .id = IPA_MEM_V6_FILTER_HASHED, 4232c7b9b93SAlex Elder .offset = 0x0388, 4242c7b9b93SAlex Elder .size = 0x0078, 4252c7b9b93SAlex Elder .canary_count = 2, 4262c7b9b93SAlex Elder }, 4272c7b9b93SAlex Elder { 4282c7b9b93SAlex Elder .id = IPA_MEM_V6_FILTER, 4292c7b9b93SAlex Elder .offset = 0x0408, 4302c7b9b93SAlex Elder .size = 0x0078, 4312c7b9b93SAlex Elder .canary_count = 2, 4322c7b9b93SAlex Elder }, 4332c7b9b93SAlex Elder { 4342c7b9b93SAlex Elder .id = IPA_MEM_V4_ROUTE_HASHED, 4352c7b9b93SAlex Elder .offset = 0x0488, 4362c7b9b93SAlex Elder .size = 0x0078, 4372c7b9b93SAlex Elder .canary_count = 2, 4382c7b9b93SAlex Elder }, 4392c7b9b93SAlex Elder { 4402c7b9b93SAlex Elder .id = IPA_MEM_V4_ROUTE, 4412c7b9b93SAlex Elder .offset = 0x0508, 4422c7b9b93SAlex Elder .size = 0x0078, 4432c7b9b93SAlex Elder .canary_count = 2, 4442c7b9b93SAlex Elder }, 4452c7b9b93SAlex Elder { 4462c7b9b93SAlex Elder .id = IPA_MEM_V6_ROUTE_HASHED, 4472c7b9b93SAlex Elder .offset = 0x0588, 4482c7b9b93SAlex Elder .size = 0x0078, 4492c7b9b93SAlex Elder .canary_count = 2, 4502c7b9b93SAlex Elder }, 4512c7b9b93SAlex Elder { 4522c7b9b93SAlex Elder .id = IPA_MEM_V6_ROUTE, 4532c7b9b93SAlex Elder .offset = 0x0608, 4542c7b9b93SAlex Elder .size = 0x0078, 4552c7b9b93SAlex Elder .canary_count = 2, 4562c7b9b93SAlex Elder }, 4572c7b9b93SAlex Elder { 4582c7b9b93SAlex Elder .id = IPA_MEM_MODEM_HEADER, 4592c7b9b93SAlex Elder .offset = 0x0688, 4602c7b9b93SAlex Elder .size = 0x0140, 4612c7b9b93SAlex Elder .canary_count = 2, 4622c7b9b93SAlex Elder }, 4632c7b9b93SAlex Elder { 4642c7b9b93SAlex Elder .id = IPA_MEM_MODEM_PROC_CTX, 4652c7b9b93SAlex Elder .offset = 0x07d0, 4662c7b9b93SAlex Elder .size = 0x0200, 4672c7b9b93SAlex Elder .canary_count = 2, 4682c7b9b93SAlex Elder }, 4692c7b9b93SAlex Elder { 4702c7b9b93SAlex Elder .id = IPA_MEM_AP_PROC_CTX, 4712c7b9b93SAlex Elder .offset = 0x09d0, 4722c7b9b93SAlex Elder .size = 0x0200, 4732c7b9b93SAlex Elder .canary_count = 0, 4742c7b9b93SAlex Elder }, 4752c7b9b93SAlex Elder { 4762c7b9b93SAlex Elder .id = IPA_MEM_MODEM, 4772c7b9b93SAlex Elder .offset = 0x0bd8, 4782c7b9b93SAlex Elder .size = 0x1424, 4792c7b9b93SAlex Elder .canary_count = 0, 4802c7b9b93SAlex Elder }, 4812c7b9b93SAlex Elder { 4822c7b9b93SAlex Elder .id = IPA_MEM_END_MARKER, 4832c7b9b93SAlex Elder .offset = 0x2000, 4842c7b9b93SAlex Elder .size = 0, 4852c7b9b93SAlex Elder .canary_count = 1, 4862c7b9b93SAlex Elder }, 4872c7b9b93SAlex Elder }; 4882c7b9b93SAlex Elder 4892c7b9b93SAlex Elder /* Memory configuration data for an SoC having IPA v3.1 */ 4902c7b9b93SAlex Elder static const struct ipa_mem_data ipa_mem_data = { 4912c7b9b93SAlex Elder .local_count = ARRAY_SIZE(ipa_mem_local_data), 4922c7b9b93SAlex Elder .local = ipa_mem_local_data, 4932c7b9b93SAlex Elder .imem_addr = 0x146bd000, 4942c7b9b93SAlex Elder .imem_size = 0x00002000, 4952c7b9b93SAlex Elder .smem_id = 497, 4962c7b9b93SAlex Elder .smem_size = 0x00002000, 4972c7b9b93SAlex Elder }; 4982c7b9b93SAlex Elder 4992c7b9b93SAlex Elder /* Interconnect bandwidths are in 1000 byte/second units */ 5002c7b9b93SAlex Elder static const struct ipa_interconnect_data ipa_interconnect_data[] = { 5012c7b9b93SAlex Elder { 5022c7b9b93SAlex Elder .name = "memory", 5032c7b9b93SAlex Elder .peak_bandwidth = 640000, /* 640 MBps */ 5042c7b9b93SAlex Elder .average_bandwidth = 80000, /* 80 MBps */ 5052c7b9b93SAlex Elder }, 5062c7b9b93SAlex Elder { 5072c7b9b93SAlex Elder .name = "imem", 5082c7b9b93SAlex Elder .peak_bandwidth = 640000, /* 640 MBps */ 5092c7b9b93SAlex Elder .average_bandwidth = 80000, /* 80 MBps */ 5102c7b9b93SAlex Elder }, 5112c7b9b93SAlex Elder /* Average bandwidth is unused for the next interconnect */ 5122c7b9b93SAlex Elder { 5132c7b9b93SAlex Elder .name = "config", 5142c7b9b93SAlex Elder .peak_bandwidth = 80000, /* 80 MBps */ 5152c7b9b93SAlex Elder .average_bandwidth = 0, /* unused */ 5162c7b9b93SAlex Elder }, 5172c7b9b93SAlex Elder }; 5182c7b9b93SAlex Elder 5192c7b9b93SAlex Elder /* Clock and interconnect configuration data for an SoC having IPA v3.1 */ 5202c7b9b93SAlex Elder static const struct ipa_power_data ipa_power_data = { 5212c7b9b93SAlex Elder .core_clock_rate = 16 * 1000 * 1000, /* Hz */ 5222c7b9b93SAlex Elder .interconnect_count = ARRAY_SIZE(ipa_interconnect_data), 5232c7b9b93SAlex Elder .interconnect_data = ipa_interconnect_data, 5242c7b9b93SAlex Elder }; 5252c7b9b93SAlex Elder 5262c7b9b93SAlex Elder /* Configuration data for an SoC having IPA v3.1 */ 5272c7b9b93SAlex Elder const struct ipa_data ipa_data_v3_1 = { 5282c7b9b93SAlex Elder .version = IPA_VERSION_3_1, 5292c7b9b93SAlex Elder .backward_compat = BCR_CMDQ_L_LACK_ONE_ENTRY_FMASK, 5302c7b9b93SAlex Elder .qsb_count = ARRAY_SIZE(ipa_qsb_data), 5312c7b9b93SAlex Elder .qsb_data = ipa_qsb_data, 5322c7b9b93SAlex Elder .endpoint_count = ARRAY_SIZE(ipa_gsi_endpoint_data), 5332c7b9b93SAlex Elder .endpoint_data = ipa_gsi_endpoint_data, 5342c7b9b93SAlex Elder .resource_data = &ipa_resource_data, 5352c7b9b93SAlex Elder .mem_data = &ipa_mem_data, 5362c7b9b93SAlex Elder .power_data = &ipa_power_data, 5372c7b9b93SAlex Elder }; 538