diff --git a/drivers/platform/msm/gsi/gsi.c b/drivers/platform/msm/gsi/gsi.c index 7aa8fd80c9..2c475b23d6 100644 --- a/drivers/platform/msm/gsi/gsi.c +++ b/drivers/platform/msm/gsi/gsi.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2015-2021, The Linux Foundation. All rights reserved. - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved. */ #include @@ -1240,6 +1240,7 @@ static uint32_t gsi_get_max_event_rings(enum gsi_ver ver) max_ev = hw_param.gsi_ev_ch_num; break; case GSI_VER_3_0: + case GSI_VER_5_2: case GSI_VER_5_5: gsihal_read_reg_n_fields(GSI_EE_n_GSI_HW_PARAM_4, gsi_ctx->per.ee, &hw_param4); diff --git a/drivers/platform/msm/gsi/gsi.h b/drivers/platform/msm/gsi/gsi.h index f0b5814846..4476a37122 100644 --- a/drivers/platform/msm/gsi/gsi.h +++ b/drivers/platform/msm/gsi/gsi.h @@ -2,7 +2,7 @@ /* * Copyright (c) 2015-2021, The Linux Foundation. All rights reserved. * - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved. */ #ifndef GSI_H @@ -114,8 +114,9 @@ enum gsi_ver { GSI_VER_2_9 = 8, GSI_VER_2_11 = 9, GSI_VER_3_0 = 10, - GSI_VER_5_5 = 11, - GSI_VER_6_0 = 12, + GSI_VER_5_2 = 11, + GSI_VER_5_5 = 12, + GSI_VER_6_0 = 13, GSI_VER_MAX, }; diff --git a/drivers/platform/msm/gsi/gsihal/gsihal_reg.c b/drivers/platform/msm/gsi/gsihal/gsihal_reg.c index 0488c8440b..7ef8cc6294 100644 --- a/drivers/platform/msm/gsi/gsihal/gsihal_reg.c +++ b/drivers/platform/msm/gsi/gsihal/gsihal_reg.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved. +* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved. */ #include "gsihal_i.h" @@ -2421,6 +2422,9 @@ unsigned long gsihal_get_inst_ram_size(void) case GSI_VER_3_0: maxn = GSI_V3_0_GSI_INST_RAM_n_MAXn; break; + case GSI_VER_5_2: + maxn = GSI_V5_2_GSI_INST_RAM_n_MAXn; + break; case GSI_VER_ERR: case GSI_VER_MAX: default: diff --git a/drivers/platform/msm/gsi/gsihal/gsihal_reg_i.h b/drivers/platform/msm/gsi/gsihal/gsihal_reg_i.h index 37bde4d219..6196a5986f 100644 --- a/drivers/platform/msm/gsi/gsihal/gsihal_reg_i.h +++ b/drivers/platform/msm/gsi/gsihal/gsihal_reg_i.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2020, The Linux Foundation. All rights reserved. +* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved. */ #ifndef _GSIHAL_REG_I_H_ @@ -25,6 +26,7 @@ #define GSI_V2_7_GSI_INST_RAM_n_MAXn 5119 #define GSI_V2_9_GSI_INST_RAM_n_MAXn 6143 #define GSI_V3_0_GSI_INST_RAM_n_MAXn 8255 +#define GSI_V5_2_GSI_INST_RAM_n_MAXn 6207 /* GSI_EE_n_CNTXT_TYPE_IRQ */ #define GSI_EE_n_CNTXT_TYPE_IRQ_GENERAL_BMSK 0x40 diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa.c b/drivers/platform/msm/ipa/ipa_v3/ipa.c index 73a9869fee..87acdbc54f 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa.c @@ -2,7 +2,7 @@ /* * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. * - * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved. */ #include @@ -7709,6 +7709,9 @@ static enum gsi_ver ipa3_get_gsi_ver(enum ipa_hw_type ipa_hw_type) case IPA_HW_v5_1: gsi_ver = GSI_VER_3_0; break; + case IPA_HW_v5_2: + gsi_ver = GSI_VER_5_2; + break; case IPA_HW_v5_5: gsi_ver = GSI_VER_5_5; break; diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c index d818426812..ed720e1ea3 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved. */ #include @@ -204,6 +204,13 @@ #define IPA_v5_0_DST_GROUP_MAX (7) #define IPA_v5_0_GROUP_MAX (7) +#define IPA_v5_2_GROUP_UL (0) +#define IPA_v5_2_GROUP_DL (1) +#define IPA_v5_2_GROUP_URLLC (2) +#define IPA_v5_2_GROUP_DRB_IP (3) +#define IPA_v5_2_SRC_GROUP_MAX (3) +#define IPA_v5_2_DST_GROUP_MAX (4) + #define IPA_v5_5_GROUP_UL (0) #define IPA_v5_5_GROUP_DL (1) #define IPA_v5_5_GROUP_DMA (2) @@ -322,6 +329,7 @@ enum ipa_ver { IPA_5_0_MHI, IPA_5_1, IPA_5_1_APQ, + IPA_5_2, IPA_5_5, IPA_VER_MAX, }; @@ -598,6 +606,20 @@ static const struct rsrc_min_max ipa3_rsrc_src_grp_config {22, 22}, {16, 16}, {0, 0}, {0, 0}, {16, 16}, {0, 0}, {0, 0}, }, }, + [IPA_5_2] = { + /* what does above comment mean. */ + [IPA_v5_0_RSRC_GRP_TYPE_SRC_PKT_CONTEXTS] = { + {1, 7}, {1, 7}, {0, 5}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, }, + [IPA_v5_0_RSRC_GRP_TYPE_SRC_DESCRIPTOR_LISTS] = { + {8, 8}, {8, 8}, {8, 8}, {0, 0}, {0, 0}, {0, 0}, {0, 0} }, + [IPA_v5_0_RSRC_GRP_TYPE_SRC_DESCRIPTOR_BUFF] = { + {10, 10}, {12, 12}, {12, 12}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, }, + [IPA_v5_0_RSRC_GRP_TYPE_SRC_HPS_DMARS] = { + {0, 63}, {0, 63}, {0, 63}, {0, 0}, {0, 0}, {0, 0}, {0, 0} }, + [IPA_v5_0_RSRC_GRP_TYPE_SRC_ACK_ENTRIES] = { + {15, 15}, {15, 15}, {12, 12}, {0, 0}, {0, 0}, {0, 0}, {0, 0} }, + }, + [IPA_5_5] = { /* UL DL unused unused URLLC UC_RX_Q N/A */ [IPA_v5_0_RSRC_GRP_TYPE_SRC_PKT_CONTEXTS] = { @@ -764,6 +786,17 @@ static const struct rsrc_min_max ipa3_rsrc_dst_grp_config {0, 3}, {0, 3}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, }, }, + [IPA_5_2] = { + /* UL DL unused unused unused UC_RX_Q DRBIP N/A */ + [IPA_v5_0_RSRC_GRP_TYPE_DST_DATA_SECTORS] = { + {3, 3}, {3, 3}, {0, 0}, {23, 23}, {0, 0}, {0, 0}, {0, 0}, }, + + [IPA_v5_0_RSRC_GRP_TYPE_DST_DPS_DMARS] = { + {1, 2}, {1, 2}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, }, + [IPA_v5_0_RSRC_GRP_TYPE_DST_ULSO_SEGMENTS] = { + {1, 63}, {1, 63}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, }, + }, + [IPA_5_5] = { /* UL DL unused unused unused UC_RX_Q DRBIP N/A */ [IPA_v5_0_RSRC_GRP_TYPE_DST_DATA_SECTORS] = { @@ -879,6 +912,11 @@ static const struct rsrc_min_max ipa3_rsrc_rx_grp_config [IPA_RSRC_GRP_TYPE_RX_HPS_CMDQ] = { {3, 3}, {3, 3}, {0, 0}, {0, 0}, {3, 3}, {0, 0} }, }, + [IPA_5_2] = { + /* UL DL unused unused URLLC UC_RX_Q */ + [IPA_RSRC_GRP_TYPE_RX_HPS_CMDQ] = { + {3, 3}, {3, 3}, {3, 3}, {0, 0}, {0, 0}, {0, 0} }, + }, [IPA_5_5] = { /* UL DL unused unused URLLC UC_RX_Q */ @@ -940,6 +978,16 @@ static const struct ipa_rsrc_cfg ipa_rsrc_config[IPA_VER_MAX] = { .src_grp_2nd_prio_index = 1, .src_grp_2nd_prio_valid = 1, }, + [IPA_5_2] = { + .src_grp_index = 2, + .src_grp_valid = 1, + .dst_pipe_index = 0, + .dst_pipe_valid = 0, + .dst_grp_index = 0, + .dst_grp_valid = 0, + .src_grp_2nd_prio_index = 0, + .src_grp_2nd_prio_valid = 0, + }, }; enum ipa_qmb_instance_type { @@ -989,6 +1037,7 @@ static const struct ipa_qmb_outstanding ipa3_qmb_outstanding [IPA_4_7][IPA_QMB_INSTANCE_DDR] = {13, 12, 120}, [IPA_4_9][IPA_QMB_INSTANCE_DDR] = {16, 8, 120}, [IPA_4_11][IPA_QMB_INSTANCE_DDR] = {13, 12, 120}, + [IPA_5_2][IPA_QMB_INSTANCE_DDR] = {13, 13, 0}, [IPA_5_5][IPA_QMB_INSTANCE_DDR] = {16, 12, 0}, [IPA_5_5][IPA_QMB_INSTANCE_PCIE] = {16, 8, 0}, }; @@ -5117,6 +5166,248 @@ static const struct ipa_ep_configuration ipa3_ep_mapping IPA_DPS_HPS_SEQ_TYPE_INVALID, QMB_MASTER_SELECT_DDR, { 36, 36, 8, 8, IPA_EE_AP }, IPA_TX_INSTANCE_NA }, + + /* IPA_5_2 */ + [IPA_5_2][IPA_CLIENT_USB_PROD] = { + true, IPA_v5_2_GROUP_UL, + true, + IPA_DPS_HPS_SEQ_TYPE_2ND_PKT_PROCESS_PASS_NO_DEC_UCP, + QMB_MASTER_SELECT_DDR, + { 0, 0, 8, 16, IPA_EE_AP, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_APPS_WAN_LOW_LAT_PROD] = { + true, IPA_v5_2_GROUP_URLLC, + false, + IPA_DPS_HPS_SEQ_TYPE_DMA_ONLY, + QMB_MASTER_SELECT_DDR, + { 3, 2, 12, 20, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_Q6_DL_NLO_LL_DATA_PROD] = { + true, IPA_v5_2_GROUP_URLLC, + false, + IPA_DPS_HPS_SEQ_TYPE_2ND_PKT_PROCESS_PASS_NO_DEC_UCP, + QMB_MASTER_SELECT_DDR, + { 4, 8, 28, 32, IPA_EE_Q6, GSI_FREE_PRE_FETCH, 3}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_WLAN2_PROD] = { + true, IPA_v5_2_GROUP_UL, + true, + IPA_DPS_HPS_SEQ_TYPE_2ND_PKT_PROCESS_PASS_NO_DEC_UCP, + QMB_MASTER_SELECT_DDR, + { 5, 3, 8, 16, IPA_EE_AP, GSI_SMART_PRE_FETCH, 2}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_APPS_LAN_PROD] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_PKT_PROCESS_NO_DEC_NO_UCP, + QMB_MASTER_SELECT_DDR, + { 6, 4, 26, 32, IPA_EE_AP, GSI_SMART_PRE_FETCH, 4}, IPA_TX_INSTANCE_NA }, + + + [IPA_5_2][IPA_CLIENT_APPS_WAN_PROD] = { + true, IPA_v5_2_GROUP_UL, + true, + IPA_DPS_HPS_SEQ_TYPE_2ND_PKT_PROCESS_PASS_NO_DEC_UCP, + QMB_MASTER_SELECT_DDR, + { 2, 5, 25, 32, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_Q6_WAN_PROD] = { + true, IPA_v5_2_GROUP_DL, + true, + IPA_DPS_HPS_SEQ_TYPE_2ND_PKT_PROCESS_PASS_DEC_UCP, + QMB_MASTER_SELECT_DDR, + { 7, 0, 16, 28, IPA_EE_Q6, GSI_SMART_PRE_FETCH, 2}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_Q6_CMD_PROD] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_PKT_PROCESS_NO_DEC_NO_UCP, + QMB_MASTER_SELECT_DDR, + { 8, 1, 20, 24, IPA_EE_Q6, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_APPS_CMD_PROD] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_DMA_ONLY, + QMB_MASTER_SELECT_DDR, + { 9, 6, 20, 24, IPA_EE_AP, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_NA }, + [IPA_5_2][IPA_CLIENT_Q6_DL_NLO_DATA_PROD] = { + true, IPA_v5_2_GROUP_DL, + true, + IPA_DPS_HPS_SEQ_TYPE_2ND_PKT_PROCESS_PASS_DEC_UCP, + QMB_MASTER_SELECT_DDR, + { 10, 2, 28, 32, IPA_EE_Q6, GSI_FREE_PRE_FETCH, 3}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_APPS_WAN_COAL_CONS] = { + true, IPA_v5_2_GROUP_DL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 17, 8, 8, 11, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_APPS_WAN_CONS] = { + true, IPA_v5_2_GROUP_DL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 18, 9, 9, 9, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_USB_DPL_CONS] = { + true, IPA_v5_2_GROUP_DL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 19, 10, 5, 5, IPA_EE_AP, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_ODL_DPL_CONS] = { + true, IPA_v5_2_GROUP_DL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 20, 11, 5, 5, IPA_EE_AP, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_WLAN2_CONS] = { + true, IPA_v5_2_GROUP_DL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 21, 12, 8, 14, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_WLAN2_CONS1] = { + true, IPA_v5_2_GROUP_DL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 22, 13, 8, 14, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_USB_CONS] = { + true, IPA_v5_2_GROUP_DL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 23, 14, 9, 9, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_UL }, + + + [IPA_5_2][IPA_CLIENT_APPS_WAN_LOW_LAT_CONS] = { + true, IPA_v5_2_GROUP_DL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 24, 15, 9, 9, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_UL }, + + + [IPA_5_2][IPA_CLIENT_APPS_LAN_CONS] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 11, 7, 9, 9, IPA_EE_AP, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_Q6_LAN_CONS] = { + true, IPA_v5_2_GROUP_DL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 12, 3, 9, 9, IPA_EE_Q6, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_Q6_QBAP_STATUS_CONS] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 13, 4, 9, 9, IPA_EE_Q6, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_Q6_UL_NLO_DATA_CONS] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 14, 5, 5, 5, IPA_EE_Q6, GSI_SMART_PRE_FETCH, 2}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_Q6_UL_NLO_ACK_CONS] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 15, 6, 5, 5, IPA_EE_Q6, GSI_SMART_PRE_FETCH, 2}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_Q6_WAN_CONS] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 16, 7, 9, 9, IPA_EE_Q6, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_TEST_PROD] = { + true, IPA_v5_2_GROUP_URLLC, + true, + IPA_DPS_HPS_SEQ_TYPE_2ND_PKT_PROCESS_PASS_NO_DEC_UCP, + QMB_MASTER_SELECT_DDR, + { 3, 2, 12, 20, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_TEST1_PROD] = { + true, IPA_v5_2_GROUP_UL, + true, + IPA_DPS_HPS_SEQ_TYPE_2ND_PKT_PROCESS_PASS_NO_DEC_UCP, + QMB_MASTER_SELECT_DDR, + { 1, 1, 8, 16, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_TEST2_PROD] = { + true, IPA_v5_2_GROUP_UL, + true, + IPA_DPS_HPS_SEQ_TYPE_2ND_PKT_PROCESS_PASS_NO_DEC_UCP, + QMB_MASTER_SELECT_DDR, + { 0, 0, 8, 16, IPA_EE_AP, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_TEST3_PROD] = { + true, IPA_v5_2_GROUP_UL, + true, + IPA_DPS_HPS_SEQ_TYPE_2ND_PKT_PROCESS_PASS_NO_DEC_UCP, + QMB_MASTER_SELECT_DDR, + { 5, 3, 8, 16, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_TEST4_PROD] = { + true, IPA_v5_2_GROUP_UL, + true, + IPA_DPS_HPS_SEQ_TYPE_2ND_PKT_PROCESS_PASS_NO_DEC_UCP, + QMB_MASTER_SELECT_DDR, + { 2, 5, 25, 32, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_NA }, + + [IPA_5_2][IPA_CLIENT_TEST_CONS] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 19, 10, 5, 5, IPA_EE_AP, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_TEST1_CONS] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 21, 12, 8, 14, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_TEST2_CONS] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 22, 13, 8, 14, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3}, IPA_TX_INSTANCE_DL }, + + [IPA_5_2][IPA_CLIENT_TEST3_CONS] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, + { 23, 14, 9, 9, IPA_EE_AP, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_UL }, + + [IPA_5_2][IPA_CLIENT_TEST4_CONS] = { + true, IPA_v5_2_GROUP_UL, + false, + IPA_DPS_HPS_SEQ_TYPE_INVALID, + QMB_MASTER_SELECT_DDR, //UPDATE AS DDR + { 20, 11, 5, 5, IPA_EE_AP, GSI_ESCAPE_BUF_ONLY, 0}, IPA_TX_INSTANCE_UL }, + /* IPA_5_5 */ [IPA_5_5][IPA_CLIENT_USB_PROD] = { true, IPA_v5_5_GROUP_UL, @@ -6309,6 +6600,101 @@ static struct ipa3_mem_partition ipa_5_1_mem_part = { .end_ofst = 0x4fe8, }; +static struct ipa3_mem_partition ipa_5_2_mem_part = { + .uc_ofst = 0x0, + .uc_size = 0x80, + .uc_info_ofst = 0x80, + .uc_info_size = 0x200, + .ofst_start = 0x280, + .v4_flt_hash_ofst = 0x288, + .v4_flt_hash_size = 0x78, + .v4_flt_hash_size_ddr = 0x4000, + .v4_flt_nhash_ofst = 0x308, + .v4_flt_nhash_size = 0x78, + .v4_flt_nhash_size_ddr = 0x4000, + .v6_flt_hash_ofst = 0x388, + .v6_flt_hash_size = 0x78, + .v6_flt_hash_size_ddr = 0x4000, + .v6_flt_nhash_ofst = 0x408, + .v6_flt_nhash_size = 0x78, + .v6_flt_nhash_size_ddr = 0x4000, + .v4_rt_num_index = 0x13, + .v4_modem_rt_index_lo = 0x0, + .v4_modem_rt_index_hi = 0xa, + .v4_apps_rt_index_lo = 0xb, + .v4_apps_rt_index_hi = 0x12, + .v4_rt_hash_ofst = 0x488, + .v4_rt_hash_size = 0x98, + .v4_rt_hash_size_ddr = 0x4000, + .v4_rt_nhash_ofst = 0x528, + .v4_rt_nhash_size = 0x98, + .v4_rt_nhash_size_ddr = 0x4000, + .v6_rt_num_index = 0x13, + .v6_modem_rt_index_lo = 0x0, + .v6_modem_rt_index_hi = 0xa, + .v6_apps_rt_index_lo = 0xb, + .v6_apps_rt_index_hi = 0x12, + .v6_rt_hash_ofst = 0x5c8, + .v6_rt_hash_size = 0x98, + .v6_rt_hash_size_ddr = 0x4000, + .v6_rt_nhash_ofst = 0x668, + .v6_rt_nhash_size = 0x098, + .v6_rt_nhash_size_ddr = 0x4000, + .modem_hdr_ofst = 0x708, + .modem_hdr_size = 0x240, + .apps_hdr_ofst = 0x948, + .apps_hdr_size = 0x1e0, + .apps_hdr_size_ddr = 0x800, + .modem_hdr_proc_ctx_ofst = 0xb40, + .modem_hdr_proc_ctx_size = 0xb20, + .apps_hdr_proc_ctx_ofst = 0x1660, + .apps_hdr_proc_ctx_size = 0x200, + .apps_hdr_proc_ctx_size_ddr = 0x0, + .stats_quota_q6_ofst = 0x1868, + .stats_quota_q6_size = 0x48, + .stats_quota_ap_ofst = 0x18B0, + .stats_quota_ap_size = 0x60, + .stats_tethering_ofst = 0x1910, + .stats_tethering_size = 0x0, + .apps_v4_flt_nhash_ofst = 0x1918, + .apps_v4_flt_nhash_size = 0x188, + .apps_v6_flt_nhash_ofst = 0x1aa0, + .apps_v6_flt_nhash_size = 0x228, + .stats_flt_v4_ofst = 0, + .stats_flt_v4_size = 0, + .stats_flt_v6_ofst = 0, + .stats_flt_v6_size = 0, + .stats_rt_v4_ofst = 0, + .stats_rt_v4_size = 0, + .stats_rt_v6_ofst = 0, + .stats_rt_v6_size = 0, + .stats_fnr_ofst = 0x1cd0, + .stats_fnr_size = 0xba0, + .stats_drop_ofst = 0x2870, + .stats_drop_size = 0x20, + .modem_comp_decomp_ofst = 0x0, + .modem_comp_decomp_size = 0x0, + .modem_ofst = 0x2898, + .modem_size = 0xd48, + .nat_tbl_ofst = 0x35e0, + .nat_tbl_size = 0x900, + .apps_v4_flt_hash_ofst = 0x2718, + .apps_v4_flt_hash_size = 0x0, + .apps_v6_flt_hash_ofst = 0x2718, + .apps_v6_flt_hash_size = 0x0, + .apps_v4_rt_hash_ofst = 0x2718, + .apps_v4_rt_hash_size = 0x0, + .apps_v4_rt_nhash_ofst = 0x2718, + .apps_v4_rt_nhash_size = 0x0, + .apps_v6_rt_hash_ofst = 0x2718, + .apps_v6_rt_hash_size = 0x0, + .apps_v6_rt_nhash_ofst = 0x2718, + .apps_v6_rt_nhash_size = 0x0, + .pdn_config_ofst = 0x3ee8, + .pdn_config_size = 0x100, + .end_ofst = 0x3fe8, +}; + static struct ipa3_mem_partition ipa_5_5_mem_part = { .uc_descriptor_ram_ofst = 0x0, .uc_descriptor_ram_size = 0x1000, @@ -7141,6 +7527,9 @@ u8 ipa3_get_hw_type_index(void) if (ipa3_ctx->platform_type == IPA_PLAT_TYPE_APQ) hw_type_index = IPA_5_1_APQ; break; + case IPA_HW_v5_2: + hw_type_index = IPA_5_2; + break; case IPA_HW_v5_5: hw_type_index = IPA_5_5; break; @@ -9560,6 +9949,9 @@ int ipa3_init_mem_partition(enum ipa_hw_type type) case IPA_HW_v5_1: ipa3_ctx->ctrl->mem_partition = &ipa_5_1_mem_part; break; + case IPA_HW_v5_2: + ipa3_ctx->ctrl->mem_partition = &ipa_5_2_mem_part; + break; case IPA_HW_v5_5: ipa3_ctx->ctrl->mem_partition = &ipa_5_5_mem_part; break; @@ -11373,6 +11765,50 @@ static void ipa3_write_rsrc_grp_type_reg(int group_index, } break; + case IPA_5_2: + if (src) { + switch (group_index) { + case IPA_v5_2_GROUP_UL: + case IPA_v5_2_GROUP_DL: + ipahal_write_reg_n_fields( + IPA_SRC_RSRC_GRP_01_RSRC_TYPE_n, + n, val); + break; + case IPA_v5_2_GROUP_URLLC: + case IPA_v5_2_GROUP_DRB_IP: + ipahal_write_reg_n_fields( + IPA_SRC_RSRC_GRP_23_RSRC_TYPE_n, + n, val); + break; + default: + IPAERR( + " Invalid source resource group,index #%d\n", + group_index); + break; + } + } else { + switch (group_index) { + case IPA_v5_2_GROUP_UL: + case IPA_v5_2_GROUP_DL: + ipahal_write_reg_n_fields( + IPA_DST_RSRC_GRP_01_RSRC_TYPE_n, + n, val); + break; + case IPA_v5_2_GROUP_URLLC: + case IPA_v5_2_GROUP_DRB_IP: + ipahal_write_reg_n_fields( + IPA_DST_RSRC_GRP_23_RSRC_TYPE_n, + n, val); + break; + default: + IPAERR( + " Invalid destination resource group,index #%d\n", + group_index); + break; + } + } + break; + case IPA_5_5: if (src) { switch (group_index) { @@ -11620,6 +12056,12 @@ void ipa3_set_resorce_groups_min_max_limits(void) src_grp_idx_max = IPA_v5_0_SRC_GROUP_MAX; dst_grp_idx_max = IPA_v5_0_DST_GROUP_MAX; break; + case IPA_5_2: + src_rsrc_type_max = IPA_v5_0_RSRC_GRP_TYPE_SRC_MAX; + dst_rsrc_type_max = IPA_v5_0_RSRC_GRP_TYPE_DST_MAX; + src_grp_idx_max = IPA_v5_2_SRC_GROUP_MAX; + dst_grp_idx_max = IPA_v5_2_DST_GROUP_MAX; + break; case IPA_5_5: src_rsrc_type_max = IPA_v5_0_RSRC_GRP_TYPE_SRC_MAX; dst_rsrc_type_max = IPA_v5_0_RSRC_GRP_TYPE_DST_MAX; @@ -12897,6 +13339,7 @@ bool ipa3_is_msm_device(void) case IPA_HW_v4_9: case IPA_HW_v4_11: case IPA_HW_v5_1: + case IPA_HW_v5_2: case IPA_HW_v5_5: return true; default: