Merge "msm: ipa3: upgrade reg save to IPAv5"

This commit is contained in:
qctecmdr
2021-08-26 01:30:37 -07:00
کامیت شده توسط Gerrit - the friendly Code Review server
کامیت d2a3698807
17فایلهای تغییر یافته به همراه122802 افزوده شده و 117 حذف شده

مشاهده پرونده

@@ -8,3 +8,5 @@
#define CONFIG_RNDIS_IPA 1
#define CONFIG_IPA_WDI_UNIFIED_API 1
#define CONFIG_ECM_IPA 1
#define CONFIG_IPA3_REGDUMP 1
#define CONFIG_IPA3_REGDUMP_IPA_5_0 1

مشاهده پرونده

@@ -4,3 +4,5 @@ export CONFIG_IPA_WDI_UNIFIED_API=y
export CONFIG_RMNET_IPA3=y
export CONFIG_IPA3_MHI_PRIME_MANAGER=y
export CONFIG_RNDIS_IPA=m
export CONFIG_IPA3_REGDUMP=y
export CONFIG_IPA3_REGDUMP_IPA_5_0=y

مشاهده پرونده

@@ -4,3 +4,5 @@ export CONFIG_IPA_WDI_UNIFIED_API=y
export CONFIG_RMNET_IPA3=y
export CONFIG_RNDIS_IPA=y
export CONFIG_ECM_IPA=y
export CONFIG_IPA3_REGDUMP=y
export CONFIG_IPA3_REGDUMP_IPA_5_0=y

مشاهده پرونده

@@ -9,3 +9,5 @@
#define CONFIG_IPA_WDI_UNIFIED_API 1
#define CONFIG_IPA_VENDOR_DLKM 1
#define CONFIG_IPA3_MHI_PRIME_MANAGER 1
#define CONFIG_IPA3_REGDUMP 1
#define CONFIG_IPA3_REGDUMP_IPA_5_0 1

مشاهده پرونده

@@ -65,6 +65,10 @@ ifneq (,$(filter $(CONFIG_IPA3_REGDUMP_IPA_4_5),y m))
LINUXINCLUDE += -I$(DATAIPADRVTOP)/ipa/ipa_v3/dump/ipa4.5
endif
ifneq (,$(filter $(CONFIG_IPA3_REGDUMP_IPA_5_0),y m))
LINUXINCLUDE += -I$(DATAIPADRVTOP)/ipa/ipa_v3/dump/ipa5.0
endif
obj-$(CONFIG_GSI) += gsi/
obj-$(CONFIG_IPA3) += ipa/

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است Diff را بارگزاری کن

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است Diff را بارگزاری کن

مشاهده پرونده

@@ -0,0 +1,49 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
*/
#if !defined(_IPA_ACCESS_CONTROL_H_)
#define _IPA_ACCESS_CONTROL_H_
#include "ipa_reg_dump.h"
/*
* AA_COMBO - actual read, actual write
* AN_COMBO - actual read, no-op write
* NA_COMBO - no-op read, actual write
* NN_COMBO - no-op read, no-op write
*/
/*
* The following is target specific.
*/
static struct reg_mem_access_map_t mem_access_map[] = {
/*------------------------------------------------------------*/
/* Range Use when Use when */
/* Begin End SD_ENABLED SD_DISABLED */
/*------------------------------------------------------------*/
{ 0x04000, 0x04FFF, { &io_matrix[AN_COMBO], &io_matrix[AN_COMBO] } },
{ 0xA8000, 0xB7FFF, { &io_matrix[AN_COMBO], &io_matrix[AN_COMBO] } },
{ 0x05000, 0x0EFFF, { &io_matrix[AN_COMBO], &io_matrix[AN_COMBO] } },
{ 0x0F000, 0x0FFFF, { &io_matrix[AN_COMBO], &io_matrix[AN_COMBO] } },
{ 0x18000, 0x29FFF, { &io_matrix[AA_COMBO], &io_matrix[AA_COMBO] } },
{ 0x2A000, 0x3BFFF, { &io_matrix[AN_COMBO], &io_matrix[AN_COMBO] } },
{ 0x3C000, 0x4DFFF, { &io_matrix[AN_COMBO], &io_matrix[AN_COMBO] } },
{ 0x10000, 0x10FFF, { &io_matrix[AA_COMBO], &io_matrix[AA_COMBO] } },
{ 0x11000, 0x11FFF, { &io_matrix[NN_COMBO], &io_matrix[NN_COMBO] } },
{ 0x12000, 0x12FFF, { &io_matrix[NN_COMBO], &io_matrix[NN_COMBO] } },
{ 0x14C000, 0x14CFFF, { &io_matrix[AA_COMBO], &io_matrix[AA_COMBO] } },
{ 0x14D000, 0x14DFFF, { &io_matrix[NN_COMBO], &io_matrix[NN_COMBO] } },
{ 0x14E000, 0x14FFFF, { &io_matrix[NN_COMBO], &io_matrix[NN_COMBO] } },
{ 0x140000, 0x147FFF, { &io_matrix[AA_COMBO], &io_matrix[AA_COMBO] } },
{ 0x148000, 0x14BFFF, { &io_matrix[AN_COMBO], &io_matrix[AN_COMBO] } },
{ 0x150000, 0x15FFFF, { &io_matrix[AA_COMBO], &io_matrix[AA_COMBO] } },
{ 0x160000, 0x17FFFF, { &io_matrix[AN_COMBO], &io_matrix[NN_COMBO] } },
{ 0x180000, 0x180FFF, { &io_matrix[NN_COMBO], &io_matrix[NN_COMBO] } },
{ 0x181000, 0x19FFFF, { &io_matrix[AN_COMBO], &io_matrix[AN_COMBO] } },
{ 0x1A0000, 0x1BFFFF, { &io_matrix[AN_COMBO], &io_matrix[NN_COMBO] } },
{ 0x1C0000, 0x1C1FFF, { &io_matrix[NN_COMBO], &io_matrix[NN_COMBO] } },
{ 0x1C2000, 0x1C3FFF, { &io_matrix[AA_COMBO], &io_matrix[AA_COMBO] } },
};
#endif /* #if !defined(_IPA_ACCESS_CONTROL_H_) */

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است Diff را بارگزاری کن

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است Diff را بارگزاری کن

مشاهده پرونده

@@ -0,0 +1,649 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
*/
#if !defined(_IPA_HW_COMMON_EX_H_)
#define _IPA_HW_COMMON_EX_H_
/* VLVL defs are available for 854 */
#define FEATURE_VLVL_DEFS true
#define FEATURE_IPA_HW_VERSION_4_5 true
/* Important Platform Specific Values : IRQ_NUM, IRQ_CNT, BCR */
#define IPA_HW_BAM_IRQ_NUM 639
/* Q6 IRQ number for IPA. */
#define IPA_HW_IRQ_NUM 640
/* Total number of different interrupts that can be enabled */
#define IPA_HW_IRQ_CNT_TOTAL 23
/* IPAv4 spare reg value */
#define IPA_HW_SPARE_1_REG_VAL 0xC0000005
/* Whether to allow setting step mode on IPA when we crash or not */
#define IPA_CFG_HW_IS_STEP_MODE_ALLOWED (false)
/* GSI MHI related definitions */
#define IPA_HW_GSI_MHI_CONSUMER_CHANNEL_NUM 0x0
#define IPA_HW_GSI_MHI_PRODUCER_CHANNEL_NUM 0x1
#define IPA_HW_GSI_MHI_CONSUMER_EP_NUM 0x1
#define IPA_HW_GSI_MHI_PRODUCER_EP_NUM 0x11
/* IPA ZIP WA related Macros */
#define IPA_HW_DCMP_SRC_PIPE 0x8
#define IPA_HW_DCMP_DEST_PIPE 0x4
#define IPA_HW_ACK_MNGR_MASK 0x1D
#define IPA_HW_DCMP_SRC_GRP 0x5
/* IPA Clock resource name */
#define IPA_CLK_RESOURCE_NAME "/clk/pcnoc"
/* IPA Clock Bus Client name */
#define IPA_CLK_BUS_CLIENT_NAME "IPA_PCNOC_BUS_CLIENT"
/* HPS Sequences */
#define IPA_HW_PKT_PROCESS_HPS_DMA 0x0
#define IPA_HW_PKT_PROCESS_HPS_DMA_DECIPH_CIPHE 0x1
#define IPA_HW_PKT_PROCESS_HPS_PKT_PRS_NO_DECIPH_UCP 0x2
#define IPA_HW_PKT_PROCESS_HPS_PKT_PRS_DECIPH_UCP 0x3
#define IPA_HW_PKT_PROCESS_HPS_2_PKT_PRS_NO_DECIPH 0x4
#define IPA_HW_PKT_PROCESS_HPS_2_PKT_PRS_DECIPH 0x5
#define IPA_HW_PKT_PROCESS_HPS_PKT_PRS_NO_DECIPH_NO_UCP 0x6
#define IPA_HW_PKT_PROCESS_HPS_PKT_PRS_DECIPH_NO_UCP 0x7
#define IPA_HW_PKT_PROCESS_HPS_DMA_PARSER 0x8
#define IPA_HW_PKT_PROCESS_HPS_DMA_DECIPH_PARSER 0x9
#define IPA_HW_PKT_PROCESS_HPS_2_PKT_PRS_UCP_TWICE_NO_DECIPH 0xA
#define IPA_HW_PKT_PROCESS_HPS_2_PKT_PRS_UCP_TWICE_DECIPH 0xB
#define IPA_HW_PKT_PROCESS_HPS_3_PKT_PRS_UCP_TWICE_NO_DECIPH 0xC
#define IPA_HW_PKT_PROCESS_HPS_3_PKT_PRS_UCP_TWICE_DECIPH 0xD
/* DPS Sequences */
#define IPA_HW_PKT_PROCESS_DPS_DMA 0x0
#define IPA_HW_PKT_PROCESS_DPS_DMA_WITH_DECIPH 0x1
#define IPA_HW_PKT_PROCESS_DPS_DMA_WITH_DECOMP 0x2
#define IPA_HW_PKT_PROCESS_DPS_DMA_WITH_CIPH 0x3
/* Src RSRC GRP config */
#define IPA_HW_SRC_RSRC_GRP_01_RSRC_TYPE_0 0x0B040803
#define IPA_HW_SRC_RSRC_GRP_01_RSRC_TYPE_1 0x0C0C0909
#define IPA_HW_SRC_RSRC_GRP_01_RSRC_TYPE_2 0x0E0E0909
#define IPA_HW_SRC_RSRC_GRP_01_RSRC_TYPE_3 0x3F003F00
#define IPA_HW_SRC_RSRC_GRP_01_RSRC_TYPE_4 0x10101616
#define IPA_HW_SRC_RSRC_GRP_23_RSRC_TYPE_0 0x01010101
#define IPA_HW_SRC_RSRC_GRP_23_RSRC_TYPE_1 0x02020202
#define IPA_HW_SRC_RSRC_GRP_23_RSRC_TYPE_2 0x04040404
#define IPA_HW_SRC_RSRC_GRP_23_RSRC_TYPE_3 0x3F003F00
#define IPA_HW_SRC_RSRC_GRP_23_RSRC_TYPE_4 0x02020606
#define IPA_HW_SRC_RSRC_GRP_45_RSRC_TYPE_0 0x00000000
#define IPA_HW_SRC_RSRC_GRP_45_RSRC_TYPE_1 0x00000000
#define IPA_HW_SRC_RSRC_GRP_45_RSRC_TYPE_2 0x00000000
#define IPA_HW_SRC_RSRC_GRP_45_RSRC_TYPE_3 0x00003F00
#define IPA_HW_SRC_RSRC_GRP_45_RSRC_TYPE_4 0x00000000
/* Dest RSRC GRP config */
#define IPA_HW_DST_RSRC_GRP_01_RSRC_TYPE_0 0x05051010
#define IPA_HW_DST_RSRC_GRP_01_RSRC_TYPE_1 0x3F013F02
#define IPA_HW_DST_RSRC_GRP_23_RSRC_TYPE_0 0x02020202
#define IPA_HW_DST_RSRC_GRP_23_RSRC_TYPE_1 0x02010201
#define IPA_HW_DST_RSRC_GRP_45_RSRC_TYPE_0 0x00000000
#define IPA_HW_DST_RSRC_GRP_45_RSRC_TYPE_1 0x00000200
#define IPA_HW_RX_HPS_CLIENTS_MIN_DEPTH_0 0x03030303
#define IPA_HW_RX_HPS_CLIENTS_MAX_DEPTH_0 0x03030303
#define IPA_HW_RSRP_GRP_0 0x0
#define IPA_HW_RSRP_GRP_1 0x1
#define IPA_HW_RSRP_GRP_2 0x2
#define IPA_HW_RSRP_GRP_3 0x3
#define IPA_HW_PCIE_SRC_RSRP_GRP IPA_HW_RSRP_GRP_0
#define IPA_HW_PCIE_DEST_RSRP_GRP IPA_HW_RSRP_GRP_0
#define IPA_HW_DDR_SRC_RSRP_GRP IPA_HW_RSRP_GRP_1
#define IPA_HW_DDR_DEST_RSRP_GRP IPA_HW_RSRP_GRP_1
#define IPA_HW_DMA_SRC_RSRP_GRP IPA_HW_RSRP_GRP_2
#define IPA_HW_DMA_DEST_RSRP_GRP IPA_HW_RSRP_GRP_2
#define IPA_HW_SRC_RSRP_TYPE_MAX 0x05
#define IPA_HW_DST_RSRP_TYPE_MAX 0x03
#define GSI_HW_QSB_LOG_MISC_MAX 0x4
/* IPA Clock Bus Client name */
#define IPA_CLK_BUS_CLIENT_NAME "IPA_PCNOC_BUS_CLIENT"
/* Is IPA decompression feature enabled */
#define IPA_HW_IS_DECOMPRESSION_ENABLED (1)
/* Whether to allow setting step mode on IPA when we crash or not */
#define IPA_HW_IS_STEP_MODE_ALLOWED (true)
/* Max number of virtual pipes for UL QBAP provided by HW */
#define IPA_HW_MAX_VP_NUM (32)
/*
* HW specific clock vote freq values in KHz
* (BIMC/SNOC/PCNOC/IPA/Q6 CPU)
*/
enum ipa_hw_clk_freq_e {
/* BIMC */
IPA_HW_CLK_FREQ_BIMC_PEAK = 518400,
IPA_HW_CLK_FREQ_BIMC_NOM_PLUS = 404200,
IPA_HW_CLK_FREQ_BIMC_NOM = 404200,
IPA_HW_CLK_FREQ_BIMC_SVS = 100000,
/* PCNOC */
IPA_HW_CLK_FREQ_PCNOC_PEAK = 133330,
IPA_HW_CLK_FREQ_PCNOC_NOM_PLUS = 100000,
IPA_HW_CLK_FREQ_PCNOC_NOM = 100000,
IPA_HW_CLK_FREQ_PCNOC_SVS = 50000,
/*IPA_HW_CLK_SNOC*/
IPA_HW_CLK_FREQ_SNOC_PEAK = 200000,
IPA_HW_CLK_FREQ_SNOC_NOM_PLUS = 150000,
IPA_HW_CLK_FREQ_SNOC_NOM = 150000,
IPA_HW_CLK_FREQ_SNOC_SVS = 85000,
IPA_HW_CLK_FREQ_SNOC_SVS_2 = 50000,
/* IPA */
IPA_HW_CLK_FREQ_IPA_PEAK = 600000,
IPA_HW_CLK_FREQ_IPA_NOM_PLUS = 500000,
IPA_HW_CLK_FREQ_IPA_NOM = 500000,
IPA_HW_CLK_FREQ_IPA_SVS = 250000,
IPA_HW_CLK_FREQ_IPA_SVS_2 = 150000,
/* Q6 CPU */
IPA_HW_CLK_FREQ_Q6_PEAK = 729600,
IPA_HW_CLK_FREQ_Q6_NOM_PLUS = 729600,
IPA_HW_CLK_FREQ_Q6_NOM = 729600,
IPA_HW_CLK_FREQ_Q6_SVS = 729600,
};
enum ipa_hw_qtimer_gran_e {
IPA_HW_QTIMER_GRAN_0 = 0, /* granularity 0 is 10us */
IPA_HW_QTIMER_GRAN_1 = 1, /* granularity 1 is 100us */
IPA_HW_QTIMER_GRAN_MAX,
};
/* Pipe ID of all the IPA pipes */
enum ipa_hw_pipe_id_e {
IPA_HW_PIPE_ID_0,
IPA_HW_PIPE_ID_1,
IPA_HW_PIPE_ID_2,
IPA_HW_PIPE_ID_3,
IPA_HW_PIPE_ID_4,
IPA_HW_PIPE_ID_5,
IPA_HW_PIPE_ID_6,
IPA_HW_PIPE_ID_7,
IPA_HW_PIPE_ID_8,
IPA_HW_PIPE_ID_9,
IPA_HW_PIPE_ID_10,
IPA_HW_PIPE_ID_11,
IPA_HW_PIPE_ID_12,
IPA_HW_PIPE_ID_13,
IPA_HW_PIPE_ID_14,
IPA_HW_PIPE_ID_15,
IPA_HW_PIPE_ID_16,
IPA_HW_PIPE_ID_17,
IPA_HW_PIPE_ID_18,
IPA_HW_PIPE_ID_19,
IPA_HW_PIPE_ID_20,
IPA_HW_PIPE_ID_21,
IPA_HW_PIPE_ID_22,
IPA_HW_PIPE_ID_23,
IPA_HW_PIPE_ID_24,
IPA_HW_PIPE_ID_25,
IPA_HW_PIPE_ID_26,
IPA_HW_PIPE_ID_27,
IPA_HW_PIPE_ID_28,
IPA_HW_PIPE_ID_29,
IPA_HW_PIPE_ID_30,
IPA_HW_PIPE_ID_31,
IPA_HW_PIPE_ID_32,
IPA_HW_PIPE_ID_33,
IPA_HW_PIPE_ID_34,
IPA_HW_PIPE_ID_35,
IPA_HW_PIPE_ID_MAX
};
/* Pipe ID's of System Bam Endpoints between Q6 & IPA */
enum ipa_hw_q6_pipe_id_e {
/* Pipes used by IPA Q6 driver */
IPA_HW_Q6_DL_CONSUMER_PIPE_ID = IPA_HW_PIPE_ID_5,
IPA_HW_Q6_CTL_CONSUMER_PIPE_ID = IPA_HW_PIPE_ID_6,
IPA_HW_Q6_DL_NLO_CONSUMER_PIPE_ID = IPA_HW_PIPE_ID_8,
IPA_HW_Q6_UL_ACC_ACK_PRODUCER_PIPE_ID = IPA_HW_PIPE_ID_20,
IPA_HW_Q6_UL_PRODUCER_PIPE_ID = IPA_HW_PIPE_ID_21,
IPA_HW_Q6_DL_PRODUCER_PIPE_ID = IPA_HW_PIPE_ID_17,
IPA_HW_Q6_QBAP_STATUS_PRODUCER_PIPE_ID = IPA_HW_PIPE_ID_18,
IPA_HW_Q6_UL_ACC_DATA_PRODUCER_PIPE_ID = IPA_HW_PIPE_ID_19,
IPA_HW_Q6_UL_ACK_PRODUCER_PIPE_ID =
IPA_HW_Q6_UL_ACC_ACK_PRODUCER_PIPE_ID,
IPA_HW_Q6_UL_DATA_PRODUCER_PIPE_ID =
IPA_HW_Q6_UL_ACC_DATA_PRODUCER_PIPE_ID,
IPA_HW_Q6_DMA_ASYNC_CONSUMER_PIPE_ID = IPA_HW_PIPE_ID_4,
IPA_HW_Q6_DMA_ASYNC_PRODUCER_PIPE_ID = IPA_HW_PIPE_ID_29,
/* Test Simulator Pipes */
IPA_HW_Q6_SIM_UL_CONSUMER_PIPE_0_ID = IPA_HW_PIPE_ID_0,
IPA_HW_Q6_SIM_UL_CONSUMER_PIPE_1_ID = IPA_HW_PIPE_ID_1,
/* GSI UT channel SW->IPA */
IPA_HW_Q6_GSI_UT_CONSUMER_PIPE_1_ID = IPA_HW_PIPE_ID_3,
/* GSI UT channel SW->IPA */
IPA_HW_Q6_GSI_UT_CONSUMER_PIPE_2_ID = IPA_HW_PIPE_ID_10,
IPA_HW_Q6_SIM_UL_CONSUMER_PIPE_2_ID = IPA_HW_PIPE_ID_7,
/* GSI UT channel IPA->SW */
IPA_HW_Q6_DIAG_CONSUMER_PIPE_ID = IPA_HW_PIPE_ID_9,
IPA_HW_Q6_SIM_DL_PRODUCER_PIPE_0_ID = IPA_HW_PIPE_ID_23,
IPA_HW_Q6_SIM_DL_PRODUCER_PIPE_1_ID = IPA_HW_PIPE_ID_24,
IPA_HW_Q6_SIM_DL_PRODUCER_PIPE_2_ID = IPA_HW_PIPE_ID_25,
/* GSI UT channel IPA->SW */
IPA_HW_Q6_GSI_UT_PRODUCER_PIPE_1_ID = IPA_HW_PIPE_ID_26,
/* GSI UT channel IPA->SW */
IPA_HW_Q6_GSI_UT_PRODUCER_PIPE_2_ID = IPA_HW_PIPE_ID_27,
IPA_HW_Q6_PIPE_ID_MAX = IPA_HW_PIPE_ID_MAX,
};
enum ipa_hw_q6_pipe_ch_id_e {
/* Channels used by IPA Q6 driver */
IPA_HW_Q6_DL_CONSUMER_PIPE_CH_ID = 0,
IPA_HW_Q6_CTL_CONSUMER_PIPE_CH_ID = 1,
IPA_HW_Q6_DL_NLO_CONSUMER_PIPE_CH_ID = 2,
IPA_HW_Q6_UL_ACC_PATH_ACK_PRODUCER_PIPE_CH_ID = 6,
IPA_HW_Q6_UL_PRODUCER_PIPE_CH_ID = 7,
IPA_HW_Q6_DL_PRODUCER_PIPE_CH_ID = 3,
IPA_HW_Q6_UL_ACC_PATH_DATA_PRODUCER_PIPE_CH_ID = 5,
IPA_HW_Q6_QBAP_STATUS_PRODUCER_PIPE_CH_ID = 4,
IPA_HW_Q6_DMA_ASYNC_CONSUMER_PIPE_CH_ID = 8,
IPA_HW_Q6_DMA_ASYNC_PRODUCER_PIPE_CH_ID = 9,
/* CH_ID 8 and 9 are Q6 SPARE CONSUMERs */
/* Test Simulator Channels */
IPA_HW_Q6_SIM_UL_CONSUMER_PIPE_0_CH_ID = 10,
IPA_HW_Q6_SIM_DL_PRODUCER_PIPE_0_CH_ID = 11,
IPA_HW_Q6_SIM_UL_CONSUMER_PIPE_1_CH_ID = 12,
IPA_HW_Q6_SIM_DL_PRODUCER_PIPE_1_CH_ID = 13,
IPA_HW_Q6_SIM_UL_CONSUMER_PIPE_2_CH_ID = 14,
IPA_HW_Q6_SIM_DL_PRODUCER_PIPE_2_CH_ID = 15,
/* GSI UT channel SW->IPA */
IPA_HW_Q6_GSI_UT_CONSUMER_PIPE_1_CH_ID = 16,
/* GSI UT channel IPA->SW */
IPA_HW_Q6_GSI_UT_PRODUCER_PIPE_1_CH_ID = 17,
/* GSI UT channel SW->IPA */
IPA_HW_Q6_GSI_UT_CONSUMER_PIPE_2_CH_ID = 18,
/* GSI UT channel IPA->SW */
IPA_HW_Q6_GSI_UT_PRODUCER_PIPE_2_CH_ID = 19,
};
/* System Bam Endpoints between Q6 & IPA */
enum ipa_hw_q6_pipe_e {
/* DL Pipe IPA->Q6 */
IPA_HW_Q6_DL_PRODUCER_PIPE = 0,
/* UL Pipe IPA->Q6 */
IPA_HW_Q6_UL_PRODUCER_PIPE = 1,
/* DL Pipe Q6->IPA */
IPA_HW_Q6_DL_CONSUMER_PIPE = 2,
/* CTL Pipe Q6->IPA */
IPA_HW_Q6_CTL_CONSUMER_PIPE = 3,
/* Q6 -> IPA, DL NLO */
IPA_HW_Q6_DL_NLO_CONSUMER_PIPE = 4,
/* DMA ASYNC CONSUMER */
IPA_HW_Q6_DMA_ASYNC_CONSUMER_PIPE = 5,
/* DMA ASYNC PRODUCER */
IPA_HW_Q6_DMA_ASYNC_PRODUCER_PIPE = 6,
/* UL Acc Path Data Pipe IPA->Q6 */
IPA_HW_Q6_UL_ACC_DATA_PRODUCER_PIPE = 7,
/* UL Acc Path ACK Pipe IPA->Q6 */
IPA_HW_Q6_UL_ACC_ACK_PRODUCER_PIPE = 8,
/* UL Acc Path QBAP status Pipe IPA->Q6 */
IPA_HW_Q6_QBAP_STATUS_PRODUCER_PIPE = 9,
/* Diag status pipe IPA->Q6 */
/* Used only when FEATURE_IPA_TEST_PER_SIM is ON */
/* SIM Pipe IPA->Sim */
IPA_HW_Q6_SIM_DL_PRODUCER_PIPE_0 = 10,
/* SIM Pipe Sim->IPA */
IPA_HW_Q6_SIM_DL_PRODUCER_PIPE_1 = 11,
/* SIM Pipe Sim->IPA */
IPA_HW_Q6_SIM_DL_PRODUCER_PIPE_2 = 12,
/* SIM Pipe Sim->IPA */
IPA_HW_Q6_SIM_UL_CONSUMER_PIPE_0 = 13,
/* SIM B2B PROD Pipe */
IPA_HW_Q6_SIM_UL_CONSUMER_PIPE_1 = 14,
/* SIM Pipe IPA->Sim */
IPA_HW_Q6_SIM_UL_CONSUMER_PIPE_2 = 15,
/* End FEATURE_IPA_TEST_PER_SIM */
/* GSI UT channel SW->IPA */
IPA_HW_Q6_GSI_UT_CONSUMER_PIPE_1 = 16,
/* GSI UT channel IPA->SW */
IPA_HW_Q6_GSI_UT_PRODUCER_PIPE_1 = 17,
/* GSI UT channel SW->IPA */
IPA_HW_Q6_GSI_UT_CONSUMER_PIPE_2 = 18,
/* GSI UT channel IPA->SW */
IPA_HW_Q6_GSI_UT_PRODUCER_PIPE_2 = 19,
IPA_HW_Q6_PIPE_TOTAL
};
/* System Bam Endpoints between Q6 & IPA */
enum ipa_hw_q6_gsi_ev_e { /* In Sdx24 0..11 */
/* DL Pipe IPA->Q6 */
IPA_HW_Q6_DL_PRODUCER_PIPE_GSI_EV = 0,
/* UL Pipe IPA->Q6 */
IPA_HW_Q6_UL_PRODUCER_PIPE_GSI_EV = 1,
/* DL Pipe Q6->IPA */
//IPA_HW_Q6_DL_CONSUMER_PIPE_GSI_EV = 2,
/* CTL Pipe Q6->IPA */
//IPA_HW_Q6_CTL_CONSUMER_PIPE_GSI_EV = 3,
/* Q6 -> IPA, LTE DL Optimized path */
//IPA_HW_Q6_LTE_DL_CONSUMER_PIPE_GSI_EV = 4,
/* LWA DL(Wifi to Q6) */
//IPA_HW_Q6_LWA_DL_PRODUCER_PIPE_GSI_EV = 5,
/* Diag status pipe IPA->Q6 */
//IPA_HW_Q6_DIAG_STATUS_PRODUCER_PIPE_GSI_EV = 6,
/* Used only when FEATURE_IPA_TEST_PER_SIM is ON */
/* SIM Pipe IPA->Sim */
IPA_HW_Q6_SIM_DL_PRODUCER_PIPE_0_GSI_EV = 2,
/* SIM Pipe Sim->IPA */
IPA_HW_Q6_SIM_DL_PRODUCER_PIPE_1_GSI_EV = 3,
/* SIM Pipe Sim->IPA */
IPA_HW_Q6_SIM_DL_PRODUCER_PIPE_2_GSI_EV = 4,
/* SIM Pipe Sim->IPA */
IPA_HW_Q6_SIM_1_GSI_EV = 5,
IPA_HW_Q6_SIM_2_GSI_EV = 6,
IPA_HW_Q6_SIM_3_GSI_EV = 7,
IPA_HW_Q6_SIM_4_GSI_EV = 8,
IPA_HW_Q6_PIPE_GSI_EV_TOTAL
};
/*
* All the IRQ's supported by the IPA HW. Use this enum to set IRQ_EN
* register and read IRQ_STTS register
*/
enum ipa_hw_irq_e {
IPA_HW_IRQ_GSI_HWP = (1 << 25),
IPA_HW_IRQ_GSI_IPA_IF_TLV_RCVD = (1 << 24),
IPA_HW_IRQ_GSI_EE_IRQ = (1 << 23),
IPA_HW_IRQ_DCMP_ERR = (1 << 22),
IPA_HW_IRQ_HWP_ERR = (1 << 21),
IPA_HW_IRQ_RED_MARKER_ABOVE = (1 << 20),
IPA_HW_IRQ_YELLOW_MARKER_ABOVE = (1 << 19),
IPA_HW_IRQ_RED_MARKER_BELOW = (1 << 18),
IPA_HW_IRQ_YELLOW_MARKER_BELOW = (1 << 17),
IPA_HW_IRQ_BAM_IDLE_IRQ = (1 << 16),
IPA_HW_IRQ_TX_HOLB_DROP = (1 << 15),
IPA_HW_IRQ_TX_SUSPEND = (1 << 14),
IPA_HW_IRQ_PROC_ERR = (1 << 13),
IPA_HW_IRQ_STEP_MODE = (1 << 12),
IPA_HW_IRQ_TX_ERR = (1 << 11),
IPA_HW_IRQ_DEAGGR_ERR = (1 << 10),
IPA_HW_IRQ_RX_ERR = (1 << 9),
IPA_HW_IRQ_PROC_TO_HW_ACK_Q_NOT_EMPTY = (1 << 8),
IPA_HW_IRQ_HWP_RX_CMD_Q_NOT_FULL = (1 << 7),
IPA_HW_IRQ_HWP_IN_Q_NOT_EMPTY = (1 << 6),
IPA_HW_IRQ_HWP_IRQ_3 = (1 << 5),
IPA_HW_IRQ_HWP_IRQ_2 = (1 << 4),
IPA_HW_IRQ_HWP_IRQ_1 = (1 << 3),
IPA_HW_IRQ_HWP_IRQ_0 = (1 << 2),
IPA_HW_IRQ_EOT_COAL = (1 << 1),
IPA_HW_IRQ_BAD_SNOC_ACCESS = (1 << 0),
IPA_HW_IRQ_NONE = 0,
IPA_HW_IRQ_ALL = 0xFFFFFFFF
};
/*
* All the IRQ sources supported by the IPA HW. Use this enum to set
* IRQ_SRCS register
*/
enum ipa_hw_irq_srcs_e {
IPA_HW_IRQ_SRCS_PIPE_0 = (1 << IPA_HW_PIPE_ID_0),
IPA_HW_IRQ_SRCS_PIPE_1 = (1 << IPA_HW_PIPE_ID_1),
IPA_HW_IRQ_SRCS_PIPE_2 = (1 << IPA_HW_PIPE_ID_2),
IPA_HW_IRQ_SRCS_PIPE_3 = (1 << IPA_HW_PIPE_ID_3),
IPA_HW_IRQ_SRCS_PIPE_4 = (1 << IPA_HW_PIPE_ID_4),
IPA_HW_IRQ_SRCS_PIPE_5 = (1 << IPA_HW_PIPE_ID_5),
IPA_HW_IRQ_SRCS_PIPE_6 = (1 << IPA_HW_PIPE_ID_6),
IPA_HW_IRQ_SRCS_PIPE_7 = (1 << IPA_HW_PIPE_ID_7),
IPA_HW_IRQ_SRCS_PIPE_8 = (1 << IPA_HW_PIPE_ID_8),
IPA_HW_IRQ_SRCS_PIPE_9 = (1 << IPA_HW_PIPE_ID_9),
IPA_HW_IRQ_SRCS_PIPE_10 = (1 << IPA_HW_PIPE_ID_10),
IPA_HW_IRQ_SRCS_PIPE_11 = (1 << IPA_HW_PIPE_ID_11),
IPA_HW_IRQ_SRCS_PIPE_12 = (1 << IPA_HW_PIPE_ID_12),
IPA_HW_IRQ_SRCS_PIPE_13 = (1 << IPA_HW_PIPE_ID_13),
IPA_HW_IRQ_SRCS_PIPE_14 = (1 << IPA_HW_PIPE_ID_14),
IPA_HW_IRQ_SRCS_PIPE_15 = (1 << IPA_HW_PIPE_ID_15),
IPA_HW_IRQ_SRCS_PIPE_16 = (1 << IPA_HW_PIPE_ID_16),
IPA_HW_IRQ_SRCS_PIPE_17 = (1 << IPA_HW_PIPE_ID_17),
IPA_HW_IRQ_SRCS_PIPE_18 = (1 << IPA_HW_PIPE_ID_18),
IPA_HW_IRQ_SRCS_PIPE_19 = (1 << IPA_HW_PIPE_ID_19),
IPA_HW_IRQ_SRCS_PIPE_20 = (1 << IPA_HW_PIPE_ID_20),
IPA_HW_IRQ_SRCS_PIPE_21 = (1 << IPA_HW_PIPE_ID_21),
IPA_HW_IRQ_SRCS_PIPE_22 = (1 << IPA_HW_PIPE_ID_22),
IPA_HW_IRQ_SRCS_NONE = 0,
IPA_HW_IRQ_SRCS_ALL = 0xFFFFFFFF,
};
/*
* Total number of channel contexts that need to be saved for APPS
*/
#define IPA_HW_REG_SAVE_GSI_NUM_CH_CNTXT_A7 20
/*
* Total number of channel contexts that need to be saved for UC
*/
#define IPA_HW_REG_SAVE_GSI_NUM_CH_CNTXT_UC 2
/*
* Total number of channel contexts that need to be saved for Q6
*/
#define IPA_HW_REG_SAVE_GSI_NUM_CH_CNTXT_Q6 11
/*
* Total number of event ring contexts that need to be saved for APPS
*/
#define IPA_HW_REG_SAVE_GSI_NUM_EVT_CNTXT_A7 27
/*
* Total number of event ring contexts that need to be saved for UC
*/
#define IPA_HW_REG_SAVE_GSI_NUM_EVT_CNTXT_UC 2
/*
* Total number of endpoints for which ipa_reg_save.pipes[endp_number]
* are not saved by default (only if ipa_cfg.gen.full_reg_trace =
* true) There is no extra endpoints in Stingray
*/
#define IPA_HW_REG_SAVE_NUM_ENDP_EXTRA 0
/*
* Total number of endpoints for which ipa_reg_save.pipes[endp_number]
* are always saved
*/
#define IPA_HW_REG_SAVE_NUM_ACTIVE_PIPES IPA_HW_PIPE_ID_MAX
/*
* SHRAM Bytes per ch
*/
#define IPA_REG_SAVE_BYTES_PER_CHNL_SHRAM 12
/*
* Total number of rx splt cmdq's see:
* ipa_rx_splt_cmdq_n_cmd[IPA_RX_SPLT_CMDQ_MAX]
*/
#define IPA_RX_SPLT_CMDQ_MAX 4
/*
* Although not necessary for the numbers below, the use of round_up
* is so that future developers know that these particular constants
* have to be a multiple of four bytes, because the IPA memory reads
* that they drive are always 32 bits...
*/
#define IPA_IU_ADDR 0x000A0000
#define IPA_IU_SIZE round_up(40704, sizeof(u32))
#define IPA_SRAM_ADDR 0x00050000
#define IPA_SRAM_SIZE round_up(19232, sizeof(u32))
#define IPA_MBOX_ADDR 0x000C2000
#define IPA_MBOX_SIZE round_up(256, sizeof(u32))
#define IPA_HRAM_ADDR 0x00060000
#define IPA_HRAM_SIZE round_up(47536, sizeof(u32))
#define IPA_SEQ_ADDR 0x00081000
#define IPA_SEQ_SIZE round_up(768, sizeof(u32))
#define IPA_GSI_ADDR 0x00006000
#define IPA_GSI_SIZE round_up(5376, sizeof(u32))
/*
* Macro to define a particular register cfg entry for all pipe
* indexed register
*/
#define IPA_REG_SAVE_CFG_ENTRY_PIPE_ENDP(reg_name, var_name) \
{ GEN_1xVECTOR_REG_OFST(reg_name, 0), \
(u32 *)&ipa_reg_save.ipa.pipes[0].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 1), \
(u32 *)&ipa_reg_save.ipa.pipes[1].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 2), \
(u32 *)&ipa_reg_save.ipa.pipes[2].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 3), \
(u32 *)&ipa_reg_save.ipa.pipes[3].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 4), \
(u32 *)&ipa_reg_save.ipa.pipes[4].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 5), \
(u32 *)&ipa_reg_save.ipa.pipes[5].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 6), \
(u32 *)&ipa_reg_save.ipa.pipes[6].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 7), \
(u32 *)&ipa_reg_save.ipa.pipes[7].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 8), \
(u32 *)&ipa_reg_save.ipa.pipes[8].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 9), \
(u32 *)&ipa_reg_save.ipa.pipes[9].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 10), \
(u32 *)&ipa_reg_save.ipa.pipes[10].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 11), \
(u32 *)&ipa_reg_save.ipa.pipes[11].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 12), \
(u32 *)&ipa_reg_save.ipa.pipes[12].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 13), \
(u32 *)&ipa_reg_save.ipa.pipes[13].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 14), \
(u32 *)&ipa_reg_save.ipa.pipes[14].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 15), \
(u32 *)&ipa_reg_save.ipa.pipes[15].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 16), \
(u32 *)&ipa_reg_save.ipa.pipes[16].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 17), \
(u32 *)&ipa_reg_save.ipa.pipes[17].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 18), \
(u32 *)&ipa_reg_save.ipa.pipes[18].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 19), \
(u32 *)&ipa_reg_save.ipa.pipes[19].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 20), \
(u32 *)&ipa_reg_save.ipa.pipes[20].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 21), \
(u32 *)&ipa_reg_save.ipa.pipes[21].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 22), \
(u32 *)&ipa_reg_save.ipa.pipes[22].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 23), \
(u32 *)&ipa_reg_save.ipa.pipes[23].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 24), \
(u32 *)&ipa_reg_save.ipa.pipes[24].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 25), \
(u32 *)&ipa_reg_save.ipa.pipes[25].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 26), \
(u32 *)&ipa_reg_save.ipa.pipes[26].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 27), \
(u32 *)&ipa_reg_save.ipa.pipes[27].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 28), \
(u32 *)&ipa_reg_save.ipa.pipes[28].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 29), \
(u32 *)&ipa_reg_save.ipa.pipes[29].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 30), \
(u32 *)&ipa_reg_save.ipa.pipes[30].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 31), \
(u32 *)&ipa_reg_save.ipa.pipes[31].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 32), \
(u32 *)&ipa_reg_save.ipa.pipes[32].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 33), \
(u32 *)&ipa_reg_save.ipa.pipes[33].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 34), \
(u32 *)&ipa_reg_save.ipa.pipes[34].endp.var_name, \
GEN_REG_ATTR(reg_name) }, \
{ GEN_1xVECTOR_REG_OFST(reg_name, 35), \
(u32 *)&ipa_reg_save.ipa.pipes[35].endp.var_name, \
GEN_REG_ATTR(reg_name) }
/*
* Macro to define a particular register cfg entry for the remaining
* pipe indexed register. In Stingray case we don't have extra
* endpoints so it is intentially empty
*/
#define IPA_HW_REG_SAVE_CFG_ENTRY_PIPE_ENDP_EXTRA(REG_NAME, VAR_NAME) \
{ 0, 0 }
/*
* Macro to set the active flag for all active pipe indexed register
* In Stingray case we don't have extra endpoints so it is intentially
* empty
*/
#define IPA_HW_REG_SAVE_CFG_ENTRY_PIPE_ENDP_EXTRA_ACTIVE() \
do { \
} while (0)
#endif /* #if !defined(_IPA_HW_COMMON_EX_H_) */

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است Diff را بارگزاری کن

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است Diff را بارگزاری کن

مشاهده پرونده

@@ -0,0 +1,183 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
*/
#if !defined(_IPA_PKT_CNTXT_H_)
#define _IPA_PKT_CNTXT_H_
#define IPA_HW_PKT_CTNTX_MAX 0x10
#define IPA_HW_NUM_SAVE_PKT_CTNTX 0x8
#define IPA_HW_PKT_CTNTX_START_ADDR 0xE434CA00
#define IPA_HW_PKT_CTNTX_SIZE (sizeof(ipa_pkt_ctntx_opcode_state_s) + \
sizeof(ipa_pkt_ctntx_u))
/*
* Packet Context States
*/
enum ipa_hw_pkt_cntxt_state_e {
IPA_HW_PKT_CNTXT_STATE_HFETCHER_INIT = 1,
IPA_HW_PKT_CNTXT_STATE_HFETCHER_DMAR,
IPA_HW_PKT_CNTXT_STATE_HFETCHER_DMAR_REP,
IPA_HW_PKT_CNTXT_STATE_H_DCPH,
IPA_HW_PKT_CNTXT_STATE_PKT_PARSER,
IPA_HW_PKT_CNTXT_STATE_FILTER_NAT,
IPA_HW_PKT_CNTXT_STATE_ROUTER,
IPA_HW_PKT_CNTXT_STATE_HDRI,
IPA_HW_PKT_CNTXT_STATE_UCP,
IPA_HW_PKT_CNTXT_STATE_ENQUEUER,
IPA_HW_PKT_CNTXT_STATE_DFETCHER,
IPA_HW_PKT_CNTXT_STATE_D_DCPH,
IPA_HW_PKT_CNTXT_STATE_DISPATCHER,
IPA_HW_PKT_CNTXT_STATE_TX,
IPA_HW_PKT_CNTXT_STATE_TX_ZLT,
IPA_HW_PKT_CNTXT_STATE_DFETCHER_DMAR,
IPA_HW_PKT_CNTXT_STATE_DCMP,
};
/*
* Packet Context fields as received from VI/Design
*/
struct ipa_pkt_ctntx_s {
u64 opcode : 8;
u64 state : 5;
u64 not_used_1 : 2;
u64 tx_pkt_dma_done : 1;
u64 exc_deagg : 1;
u64 exc_pkt_version : 1;
u64 exc_pkt_len : 1;
u64 exc_threshold : 1;
u64 exc_sw : 1;
u64 exc_nat : 1;
u64 exc_frag_miss : 1;
u64 filter_bypass : 1;
u64 router_bypass : 1;
u64 nat_bypass : 1;
u64 hdri_bypass : 1;
u64 dcph_bypass : 1;
u64 security_credentials_select : 1;
u64 pkt_2nd_pass : 1;
u64 xlat_bypass : 1;
u64 dcph_valid : 1;
u64 ucp_on : 1;
u64 replication : 1;
u64 src_status_en : 1;
u64 dest_status_en : 1;
u64 frag_status_en : 1;
u64 eot_dest : 1;
u64 eot_notif : 1;
u64 prev_eot_dest : 1;
u64 src_hdr_len : 8;
u64 tx_valid_sectors : 8;
u64 rx_flags : 8;
u64 rx_packet_length : 16;
u64 revised_packet_length : 16;
u64 frag_en : 1;
u64 frag_bypass : 1;
u64 frag_process : 1;
u64 notif_pipe : 5;
u64 src_id : 8;
u64 tx_pkt_transferred : 1;
u64 src_pipe : 5;
u64 dest_pipe : 5;
u64 frag_pipe : 5;
u64 ihl_offset : 8;
u64 protocol : 8;
u64 tos : 8;
u64 id : 16;
u64 v6_reserved : 4;
u64 ff : 1;
u64 mf : 1;
u64 pkt_israg : 1;
u64 tx_holb_timer_overflow : 1;
u64 tx_holb_timer_running : 1;
u64 trnseq_0 : 3;
u64 trnseq_1 : 3;
u64 trnseq_2 : 3;
u64 trnseq_3 : 3;
u64 trnseq_4 : 3;
u64 trnseq_ex_length : 8;
u64 trnseq_4_length : 8;
u64 trnseq_4_offset : 8;
u64 dps_tx_pop_cnt : 2;
u64 dps_tx_push_cnt : 2;
u64 vol_ic_dcph_cfg : 1;
u64 vol_ic_tag_stts : 1;
u64 vol_ic_pxkt_init_e : 1;
u64 vol_ic_pkt_init : 1;
u64 tx_holb_counter : 32;
u64 trnseq_0_length : 8;
u64 trnseq_0_offset : 8;
u64 trnseq_1_length : 8;
u64 trnseq_1_offset : 8;
u64 trnseq_2_length : 8;
u64 trnseq_2_offset : 8;
u64 trnseq_3_length : 8;
u64 trnseq_3_offset : 8;
u64 dmar_valid_length : 16;
u64 dcph_valid_length : 16;
u64 frag_hdr_offset : 9;
u64 ip_payload_offset : 9;
u64 frag_rule : 4;
u64 frag_table : 1;
u64 frag_hit : 1;
u64 data_cmdq_ptr : 8;
u64 filter_result : 6;
u64 router_result : 6;
u64 nat_result : 6;
u64 hdri_result : 6;
u64 dcph_result : 6;
u64 dcph_result_valid : 1;
u32 not_used_2 : 4;
u64 tx_pkt_suspended : 1;
u64 tx_pkt_dropped : 1;
u32 not_used_3 : 3;
u64 metadata_valid : 1;
u64 metadata_type : 4;
u64 ul_cs_start_diff : 9;
u64 cs_disable_trlr_vld_bit : 1;
u64 cs_required : 1;
u64 dest_hdr_len : 8;
u64 fr_l : 1;
u64 fl_h : 1;
u64 fr_g : 1;
u64 fr_ret : 1;
u64 fr_rule_id : 10;
u64 rt_l : 1;
u64 rt_h : 1;
u64 rtng_tbl_index : 5;
u64 rt_match : 1;
u64 rt_rule_id : 10;
u64 nat_tbl_index : 13;
u64 nat_type : 2;
u64 hdr_l : 1;
u64 header_offset : 10;
u64 not_used_4 : 1;
u64 filter_result_valid : 1;
u64 router_result_valid : 1;
u64 nat_result_valid : 1;
u64 hdri_result_valid : 1;
u64 not_used_5 : 1;
u64 stream_id : 8;
u64 not_used_6 : 6;
u64 dcph_context_index : 2;
u64 dcph_cfg_size : 16;
u64 dcph_cfg_count : 32;
u64 tag_info : 48;
u64 ucp_cmd_id : 16;
u64 metadata : 32;
u64 ucp_cmd_params : 32;
u64 nat_ip_address : 32;
u64 nat_ip_cs_diff : 16;
u64 frag_dest_pipe : 5;
u64 frag_nat_type : 2;
u64 fragr_ret : 1;
u64 frag_protocol : 8;
u64 src_ip_address : 32;
u64 dest_ip_address : 32;
u64 not_used_7 : 37;
u64 frag_hdr_l : 1;
u64 frag_header_offset : 10;
u64 frag_id : 16;
} __packed;
#endif /* #if !defined(_IPA_PKT_CNTXT_H_) */

مشاهده پرونده

@@ -4,10 +4,13 @@
*/
#include "ipa_reg_dump.h"
#include "ipa_access_control.h"
#include <linux/io.h>
/* Total size required for test bus */
#define IPA_MEM_OVERLAY_SIZE 0x66000
#define CONFIG_IPA3_REGDUMP_NUM_EXTRA_ENDP_REGS 0
/*
* The following structure contains a hierarchy of structures that
* ultimately leads to a series of leafs. The leafs are structures
@@ -34,21 +37,41 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_STATE,
ipa.gen,
ipa_state),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_STATE_RX_ACTIVE,
ipa.gen,
ipa_state_rx_active),
#else
GEN_SRC_DST_ADDR_MAP_ARR(IPA_STATE_RX_ACTIVE_n,
ipa.gen,
ipa_state_rx_active_n),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_STATE_TX_WRAPPER,
ipa.gen,
ipa_state_tx_wrapper),
GEN_SRC_DST_ADDR_MAP(IPA_STATE_TX0,
ipa.gen,
ipa_state_tx0),
#ifdef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_STATE_TX0_MISC,
ipa.gen,
ipa_state_tx0_misc),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_STATE_TX1,
ipa.gen,
ipa_state_tx1),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_STATE_AGGR_ACTIVE,
ipa.gen,
ipa_state_aggr_active),
#else
GEN_SRC_DST_ADDR_MAP(IPA_STATE_TX1_MISC,
ipa.gen,
ipa_state_tx1_misc),
GEN_SRC_DST_ADDR_MAP_ARR(IPA_STATE_AGGR_ACTIVE_n,
ipa.gen,
ipa_state_aggr_active_n),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_STATE_DFETCHER,
ipa.gen,
ipa_state_dfetcher),
@@ -58,18 +81,25 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_STATE_FETCHER_MASK_1,
ipa.gen,
ipa_state_fetcher_mask_1),
#ifdef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_STATE_FETCHER_MASK_2,
ipa.gen,
ipa_state_fetcher_mask_2),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_STATE_GSI_AOS,
ipa.gen,
ipa_state_gsi_aos),
GEN_SRC_DST_ADDR_MAP(IPA_STATE_GSI_IF,
ipa.gen,
ipa_state_gsi_if),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_STATE_GSI_SKIP,
ipa.gen,
ipa_state_gsi_skip),
GEN_SRC_DST_ADDR_MAP(IPA_STATE_GSI_TLV,
ipa.gen,
ipa_state_gsi_tlv),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_DPL_TIMER_LSB,
ipa.gen,
ipa_dpl_timer_lsb),
@@ -85,12 +115,15 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_SPARE_REG_1,
ipa.gen,
ipa_spare_reg_1),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_SPARE_REG_2,
ipa.gen,
ipa_spare_reg_2),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_LOG,
ipa.gen,
ipa_log),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_LOG_BUF_STATUS_CFG,
ipa.gen,
ipa_log_buf_status_cfg),
@@ -103,6 +136,7 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_LOG_BUF_STATUS_RAM_PTR,
ipa.gen,
ipa_log_buf_status_ram_ptr),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_LOG_BUF_HW_CMD_CFG,
ipa.gen,
ipa_log_buf_hw_cmd_cfg),
@@ -121,12 +155,21 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_COMP_HW_VERSION,
ipa.gen,
ipa_comp_hw_version),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_FILT_ROUT_HASH_EN,
ipa.gen,
ipa_filt_rout_hash_en),
GEN_SRC_DST_ADDR_MAP(IPA_FILT_ROUT_HASH_FLUSH,
ipa.gen,
ipa_filt_rout_hash_flush),
#else
GEN_SRC_DST_ADDR_MAP(IPA_FILT_ROUT_CACHE_CFG,
ipa.gen,
ipa_filt_rout_cache_cfg),
GEN_SRC_DST_ADDR_MAP(IPA_FILT_ROUT_CACHE_FLUSH,
ipa.gen,
ipa_filt_rout_cache_flush),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_STATE_FETCHER,
ipa.gen,
ipa_state_fetcher),
@@ -142,9 +185,15 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_IPV6_ROUTE_INIT_VALUES,
ipa.gen,
ipa_ipv6_route_init_values),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_BAM_ACTIVATED_PORTS,
ipa.gen,
ipa_bam_activated_ports),
#else
GEN_SRC_DST_ADDR_MAP_ARR(IPA_BAM_ACTIVATED_PORTS_n,
ipa.gen,
ipa_bam_activated_ports_n),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_TX_COMMANDER_CMDQ_STATUS,
ipa.gen,
ipa_tx_commander_cmdq_status),
@@ -157,6 +206,11 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_LOG_BUF_HW_SNIF_EL_CLI_MUX,
ipa.gen,
ipa_log_buf_hw_snif_el_cli_mux),
#ifdef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_LOG_BUF_HW_CMD_NOC_MASTER_SEL,
ipa.gen,
ipa_log_buf_hw_cmd_noc_master_sel),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_STATE_ACL,
ipa.gen,
ipa_state_acl),
@@ -172,30 +226,59 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_RSRC_GRP_CFG,
ipa.gen,
ipa_rsrc_grp_cfg),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_PIPELINE_DISABLE,
ipa.gen,
ipa_pipeline_disable),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_COMP_CFG,
ipa.gen,
ipa_comp_cfg),
GEN_SRC_DST_ADDR_MAP(IPA_STATE_NLO_AGGR,
ipa.gen,
ipa_state_nlo_aggr),
#ifdef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_STATE_COAL_MASTER,
ipa.gen,
ipa_state_coal_master),
GEN_SRC_DST_ADDR_MAP(IPA_STATE_COAL_MASTER_1,
ipa.gen,
ipa_state_coal_master_1),
GEN_SRC_DST_ADDR_MAP(IPA_COAL_EVICT_LRU,
ipa.gen,
ipa_coal_evict_lru),
GEN_SRC_DST_ADDR_MAP(IPA_COAL_QMAP_CFG,
ipa.gen,
ipa_coal_qmap_cfg),
GEN_SRC_DST_ADDR_MAP(IPA_TAG_TIMER,
ipa.gen,
ipa_tag_timer),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_NLO_PP_CFG1,
ipa.gen,
ipa_nlo_pp_cfg1),
GEN_SRC_DST_ADDR_MAP(IPA_NLO_PP_CFG2,
ipa.gen,
ipa_nlo_pp_cfg2),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_NLO_PP_ACK_LIMIT_CFG,
ipa.gen,
ipa_nlo_pp_ack_limit_cfg),
GEN_SRC_DST_ADDR_MAP(IPA_NLO_PP_DATA_LIMIT_CFG,
ipa.gen,
ipa_nlo_pp_data_limit_cfg),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_NLO_MIN_DSM_CFG,
ipa.gen,
ipa_nlo_min_dsm_cfg),
#ifdef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP_ARR(IPA_NLO_VP_AGGR_CFG_LSB_n,
ipa.gen,
ipa_nlo_vp_aggr_cfg_lsb_n),
GEN_SRC_DST_ADDR_MAP_ARR(IPA_NLO_VP_LIMIT_CFG_n,
ipa.gen,
ipa_nlo_vp_limit_cfg_n),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_NLO_VP_FLUSH_REQ,
ipa.gen,
ipa_nlo_vp_flush_req),
@@ -211,6 +294,38 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_NLO_VP_QBAP_OPEN,
ipa.gen,
ipa_nlo_vp_qbap_open),
#ifdef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_QSB_MAX_READS,
ipa.gen,
ipa_qsb_max_reads),
GEN_SRC_DST_ADDR_MAP(IPA_QSB_MAX_WRITES,
ipa.gen,
ipa_qsb_max_writes),
GEN_SRC_DST_ADDR_MAP(IPA_IDLE_INDICATION_CFG,
ipa.gen,
ipa_idle_indication_cfg),
GEN_SRC_DST_ADDR_MAP(IPA_CLKON_CFG,
ipa.gen,
ipa_clkon_cfg),
GEN_SRC_DST_ADDR_MAP(IPA_TIMERS_XO_CLK_DIV_CFG,
ipa.gen,
ipa_timers_xo_clk_div_cfg),
GEN_SRC_DST_ADDR_MAP(IPA_TIMERS_PULSE_GRAN_CFG,
ipa.gen,
ipa_timers_pulse_gran_cfg),
GEN_SRC_DST_ADDR_MAP(IPA_QTIME_TIMESTAMP_CFG,
ipa.gen,
ipa_qtime_timestamp_cfg),
GEN_SRC_DST_ADDR_MAP(IPA_FLAVOR_0,
ipa.gen,
ipa_flavor_0),
GEN_SRC_DST_ADDR_MAP(IPA_FLAVOR_1,
ipa.gen,
ipa_flavor_1),
GEN_SRC_DST_ADDR_MAP(IPA_FILT_ROUT_CFG,
ipa.gen,
ipa_filt_rout_cfg),
#endif
/* Debug Registers */
GEN_SRC_DST_ADDR_MAP(IPA_DEBUG_DATA,
@@ -255,6 +370,55 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_RX_HPS_CMDQ_CMD,
ipa.dbg,
ipa_rx_hps_cmdq_cmd),
#ifdef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_STAT_FILTER_IPV4_BASE,
ipa.dbg,
ipa_stat_filter_ipv4_base),
GEN_SRC_DST_ADDR_MAP(IPA_STAT_FILTER_IPV6_BASE,
ipa.dbg,
ipa_stat_filter_ipv6_base),
GEN_SRC_DST_ADDR_MAP(IPA_STAT_ROUTER_IPV4_BASE,
ipa.dbg,
ipa_stat_router_ipv4_base),
GEN_SRC_DST_ADDR_MAP(IPA_STAT_ROUTER_IPV6_BASE,
ipa.dbg,
ipa_stat_router_ipv6_base),
GEN_SRC_DST_ADDR_MAP(IPA_RSRC_MNGR_CONTEXTS,
ipa.dbg,
ipa_rsrc_mngr_contexts),
GEN_SRC_DST_ADDR_MAP(IPA_SNOC_MONITORING_CFG,
ipa.dbg,
ipa_snoc_monitoring_cfg),
GEN_SRC_DST_ADDR_MAP(IPA_PCIE_SNOC_MONITOR_CNT,
ipa.dbg,
ipa_pcie_snoc_monitor_cnt),
GEN_SRC_DST_ADDR_MAP(IPA_DDR_SNOC_MONITOR_CNT,
ipa.dbg,
ipa_ddr_snoc_monitor_cnt),
GEN_SRC_DST_ADDR_MAP(IPA_GSI_SNOC_MONITOR_CNT,
ipa.dbg,
ipa_gsi_snoc_monitor_cnt),
GEN_SRC_DST_ADDR_MAP(IPA_RAM_SNIFFER_HW_BASE_ADDR,
ipa.dbg,
ipa_ram_sniffer_hw_base_addr),
GEN_SRC_DST_ADDR_MAP(IPA_BRESP_DB_CFG,
ipa.dbg,
ipa_bresp_db_cfg),
GEN_SRC_DST_ADDR_MAP(IPA_BRESP_DB_DATA,
ipa.dbg,
ipa_bresp_db_data),
GEN_SRC_DST_ADDR_MAP(IPA_ENDP_GSI_CONS_BYTES_TLV,
ipa.dbg,
ipa_endp_gsi_cons_bytes_tlv),
GEN_SRC_DST_ADDR_MAP(IPA_RAM_GSI_TLV_BASE_ADDR,
ipa.dbg,
ipa_ram_gsi_tlv_base_addr),
GEN_SRC_DST_ADDR_MAP(IPA_ACKMNGR_CMDQ_CMD,
ipa.dbg,
ipa_ackmngr_cmdq_cmd),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_RX_HPS_CMDQ_STATUS_EMPTY,
ipa.dbg,
ipa_rx_hps_cmdq_status_empty),
@@ -267,9 +431,15 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_HPS_DPS_CMDQ_CMD,
ipa.dbg,
ipa_hps_dps_cmdq_cmd),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_HPS_DPS_CMDQ_STATUS_EMPTY,
ipa.dbg,
ipa_hps_dps_cmdq_status_empty),
#else
GEN_SRC_DST_ADDR_MAP_ARR(IPA_HPS_DPS_CMDQ_STATUS_EMPTY_n,
ipa.dbg,
ipa_hps_dps_cmdq_status_empty_n),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_DPS_TX_CMDQ_CMD,
ipa.dbg,
ipa_dps_tx_cmdq_cmd),
@@ -279,10 +449,18 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_ACKMNGR_CMDQ_CMD,
ipa.dbg,
ipa_ackmngr_cmdq_cmd),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_ACKMNGR_CMDQ_STATUS_EMPTY,
ipa.dbg,
ipa_ackmngr_cmdq_status_empty),
#else
GEN_SRC_DST_ADDR_MAP_ARR(IPA_ACKMNGR_CMDQ_STATUS_EMPTY_n,
ipa.dbg,
ipa_ackmngr_cmdq_status_empty_n),
GEN_SRC_DST_ADDR_MAP_ARR(IPA_NTF_TX_CMDQ_STATUS_EMPTY_n,
ipa.dbg,
ipa_ntf_tx_cmdq_status_empty_n),
#endif
/*
* NOTE: That GEN_SRC_DST_ADDR_MAP() not used below. This is
* because the following registers are not scaler, rather
@@ -298,12 +476,36 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
ipa_fec_attr_ee_n),
IPA_REG_SAVE_CFG_ENTRY_GEN_EE(IPA_SNOC_FEC_EE_n,
ipa_snoc_fec_ee_n),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
IPA_REG_SAVE_CFG_ENTRY_GEN_EE(IPA_HOLB_DROP_IRQ_INFO_EE_n,
ipa_holb_drop_irq_info_ee_n),
IPA_REG_SAVE_CFG_ENTRY_GEN_EE(IPA_SUSPEND_IRQ_INFO_EE_n,
ipa_suspend_irq_info_ee_n),
IPA_REG_SAVE_CFG_ENTRY_GEN_EE(IPA_SUSPEND_IRQ_EN_EE_n,
ipa_suspend_irq_en_ee_n),
ipa_suspend_irq_en_ee_n),
#else
GEN_SRC_DST_ADDR_MAP_EE_n_REG_k_ARR(IPA_HOLB_DROP_IRQ_INFO_EE_n_REG_k,
ipa.gen_ee, ipa_holb_drop_irq_info_ee_n_reg_k),
GEN_SRC_DST_ADDR_MAP_EE_n_REG_k_ARR(IPA_SUSPEND_IRQ_INFO_EE_n_REG_k,
ipa.gen_ee, ipa_suspend_irq_info_ee_n_reg_k),
GEN_SRC_DST_ADDR_MAP_EE_n_REG_k_ARR(IPA_SUSPEND_IRQ_EN_EE_n_REG_k,
ipa.gen_ee, ipa_suspend_irq_en_ee_n_reg_k),
#endif
#ifdef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP_EE_n_ARR(IPA_STAT_QUOTA_BASE_n,
ipa.stat_ee, ipa_stat_quota_base_n),
GEN_SRC_DST_ADDR_MAP_EE_n_ARR(IPA_STAT_TETHERING_BASE_n,
ipa.stat_ee, ipa_stat_tethering_base_n),
GEN_SRC_DST_ADDR_MAP_EE_n_ARR(IPA_STAT_DROP_CNT_BASE_n,
ipa.stat_ee, ipa_stat_drop_cnt_base_n),
GEN_SRC_DST_ADDR_MAP_EE_n_REG_k_ARR(IPA_STAT_QUOTA_MASK_EE_n_REG_k,
ipa.stat_ee, ipa_stat_quota_mask_ee_n_reg_k),
GEN_SRC_DST_ADDR_MAP_EE_n_REG_k_ARR(IPA_STAT_TETHERING_MASK_EE_n_REG_k,
ipa.stat_ee, ipa_stat_tethering_mask_ee_n_reg_k),
GEN_SRC_DST_ADDR_MAP_EE_n_REG_k_ARR(IPA_STAT_DROP_CNT_MASK_EE_n_REG_k,
ipa.stat_ee, ipa_stat_drop_cnt_mask_ee_n_reg_k),
#endif
/* Pipe Endp Registers */
IPA_REG_SAVE_CFG_ENTRY_PIPE_ENDP(IPA_ENDP_INIT_CTRL_n,
@@ -344,8 +546,15 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
ipa_endp_gsi_cfg_aos_n),
IPA_REG_SAVE_CFG_ENTRY_PIPE_ENDP(IPA_ENDP_GSI_CFG1_n,
ipa_endp_gsi_cfg1_n),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
IPA_REG_SAVE_CFG_ENTRY_PIPE_ENDP(IPA_ENDP_FILTER_ROUTER_HSH_CFG_n,
ipa_endp_filter_router_hsh_cfg_n),
#else
IPA_REG_SAVE_CFG_ENTRY_PIPE_ENDP(IPA_FILTER_CACHE_CFG_n,
ipa_filter_cache_cfg_n),
IPA_REG_SAVE_CFG_ENTRY_PIPE_ENDP(IPA_ROUTER_CACHE_CFG_n,
ipa_router_cache_cfg_n),
#endif
/* Source Resource Group Config Registers */
IPA_REG_SAVE_CFG_ENTRY_SRC_RSRC_GRP(IPA_SRC_RSRC_GRP_01_RSRC_TYPE_n,
@@ -354,6 +563,12 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
ipa_src_rsrc_grp_23_rsrc_type_n),
IPA_REG_SAVE_CFG_ENTRY_SRC_RSRC_GRP(IPA_SRC_RSRC_GRP_45_RSRC_TYPE_n,
ipa_src_rsrc_grp_45_rsrc_type_n),
#ifdef CONFIG_IPA3_REGDUMP_IPA_5_0
IPA_REG_SAVE_CFG_ENTRY_SRC_RSRC_GRP(IPA_SRC_RSRC_GRP_67_RSRC_TYPE_n,
ipa_src_rsrc_grp_67_rsrc_type_n),
IPA_REG_SAVE_CFG_ENTRY_SRC_RSRC_GRP(IPA_SRC_RSRC_TYPE_AMOUNT_n,
ipa_src_rsrc_type_amount),
#endif
/* Destination Resource Group Config Registers */
IPA_REG_SAVE_CFG_ENTRY_DST_RSRC_GRP(IPA_DST_RSRC_GRP_01_RSRC_TYPE_n,
@@ -362,6 +577,12 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
ipa_dst_rsrc_grp_23_rsrc_type_n),
IPA_REG_SAVE_CFG_ENTRY_DST_RSRC_GRP(IPA_DST_RSRC_GRP_45_RSRC_TYPE_n,
ipa_dst_rsrc_grp_45_rsrc_type_n),
#ifdef CONFIG_IPA3_REGDUMP_IPA_5_0
IPA_REG_SAVE_CFG_ENTRY_DST_RSRC_GRP(IPA_DST_RSRC_GRP_67_RSRC_TYPE_n,
ipa_dst_rsrc_grp_67_rsrc_type_n),
IPA_REG_SAVE_CFG_ENTRY_DST_RSRC_GRP(IPA_DST_RSRC_TYPE_AMOUNT_n,
ipa_dst_rsrc_type_amount),
#endif
/* Source Resource Group Count Registers */
IPA_REG_SAVE_CFG_ENTRY_SRC_RSRC_CNT_GRP(
@@ -400,6 +621,7 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_GSI_TOP_GSI_DEBUG_BUSY_REG,
gsi.debug,
ipa_gsi_top_gsi_debug_busy_reg),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_GSI_TOP_GSI_DEBUG_EVENT_PENDING,
gsi.debug,
ipa_gsi_top_gsi_debug_event_pending),
@@ -409,6 +631,7 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_GSI_TOP_GSI_DEBUG_RD_WR_PENDING,
gsi.debug,
ipa_gsi_top_gsi_debug_rd_wr_pending),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_GSI_TOP_GSI_DEBUG_PC_FROM_SW,
gsi.debug,
ipa_gsi_top_gsi_debug_pc_from_sw),
@@ -462,9 +685,15 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_GSI_TOP_GSI_IRAM_PTR_UC_GP_INT,
gsi.debug.gsi_iram_ptrs,
ipa_gsi_top_gsi_iram_ptr_uc_gp_int),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_GSI_TOP_GSI_IRAM_PTR_INT_MOD_STOPPED,
gsi.debug.gsi_iram_ptrs,
ipa_gsi_top_gsi_iram_ptr_int_mod_stopped),
#else
GEN_SRC_DST_ADDR_MAP(IPA_GSI_TOP_GSI_IRAM_PTR_INT_MOD_STOPED,
gsi.debug.gsi_iram_ptrs,
ipa_gsi_top_gsi_iram_ptr_int_mod_stoped),
#endif
/* GSI SHRAM pointers Registers */
GEN_SRC_DST_ADDR_MAP(IPA_GSI_TOP_GSI_SHRAM_PTR_CH_CNTXT_BASE_ADDR,
@@ -501,6 +730,7 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
ee_n_cntxt_type_irq),
IPA_REG_SAVE_CFG_ENTRY_GSI_GENERAL_EE(EE_n_CNTXT_TYPE_IRQ_MSK,
ee_n_cntxt_type_irq_msk),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
IPA_REG_SAVE_CFG_ENTRY_GSI_GENERAL_EE(EE_n_CNTXT_SRC_GSI_CH_IRQ,
ee_n_cntxt_src_gsi_ch_irq),
IPA_REG_SAVE_CFG_ENTRY_GSI_GENERAL_EE(EE_n_CNTXT_SRC_EV_CH_IRQ,
@@ -513,6 +743,26 @@ static struct map_src_dst_addr_s ipa_regs_to_save_array[] = {
ee_n_cntxt_src_ieob_irq),
IPA_REG_SAVE_CFG_ENTRY_GSI_GENERAL_EE(EE_n_CNTXT_SRC_IEOB_IRQ_MSK,
ee_n_cntxt_src_ieob_irq_msk),
#else
GEN_SRC_DST_ADDR_MAP_EE_n_REG_k_ARR(EE_n_CNTXT_SRC_GSI_CH_IRQ_k,
gsi.gen_ee,
ee_n_cntxt_src_gsi_ch_irq_k),
GEN_SRC_DST_ADDR_MAP_EE_n_REG_k_ARR(EE_n_CNTXT_SRC_EV_CH_IRQ_k,
gsi.gen_ee,
ee_n_cntxt_src_ev_ch_irq_k),
GEN_SRC_DST_ADDR_MAP_EE_n_REG_k_ARR(EE_n_CNTXT_SRC_GSI_CH_IRQ_MSK_k,
gsi.gen_ee,
ee_n_cntxt_src_gsi_ch_irq_msk_k),
GEN_SRC_DST_ADDR_MAP_EE_n_REG_k_ARR(EE_n_CNTXT_SRC_EV_CH_IRQ_MSK_k,
gsi.gen_ee,
ee_n_cntxt_src_ev_ch_irq_msk_k),
GEN_SRC_DST_ADDR_MAP_EE_n_REG_k_ARR(EE_n_CNTXT_SRC_IEOB_IRQ_k,
gsi.gen_ee,
ee_n_cntxt_src_ieob_irq_k),
GEN_SRC_DST_ADDR_MAP_EE_n_REG_k_ARR(EE_n_CNTXT_SRC_IEOB_IRQ_MSK_k,
gsi.gen_ee,
ee_n_cntxt_src_ieob_irq_msk_k),
#endif
IPA_REG_SAVE_CFG_ENTRY_GSI_GENERAL_EE(EE_n_CNTXT_GSI_IRQ_STTS,
ee_n_cntxt_gsi_irq_stts),
IPA_REG_SAVE_CFG_ENTRY_GSI_GENERAL_EE(EE_n_CNTXT_GLOB_IRQ_STTS,
@@ -663,6 +913,7 @@ static struct map_src_dst_addr_s ipa_uc_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_UC_QMB_TRIGGER,
ipa.hwp,
ipa_uc_qmb_trigger),
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
GEN_SRC_DST_ADDR_MAP(IPA_UC_QMB_PENDING_TID,
ipa.hwp,
ipa_uc_qmb_pending_tid),
@@ -678,6 +929,7 @@ static struct map_src_dst_addr_s ipa_uc_regs_to_save_array[] = {
GEN_SRC_DST_ADDR_MAP(IPA_UC_QMB_STATUS,
ipa.hwp,
ipa_uc_qmb_status),
#endif
GEN_SRC_DST_ADDR_MAP(IPA_UC_QMB_BUS_ATTRIB,
ipa.hwp,
ipa_uc_qmb_bus_attrib),
@@ -708,35 +960,59 @@ static struct reg_access_funcs_s *get_access_funcs(u32 addr)
}
static u32 in_dword(
u32 addr)
u32 addr,
u8 perm)
{
struct reg_access_funcs_s *io = get_access_funcs(addr);
return io->read(ipa3_ctx->reg_collection_base + addr);
if (perm & REG_READ_PERM) {
if (io->read == nop_read)
IPADBG_LOW("nop read action for address 0x%X\n", addr);
return io->read(ipa3_ctx->reg_collection_base + addr);
} else {
IPADBG_LOW("not permitted to read addr 0x%X\n", addr);
return nop_read(ipa3_ctx->reg_collection_base + addr);
}
}
static u32 in_dword_masked(
u32 addr,
u32 mask)
u32 mask,
u8 perm)
{
struct reg_access_funcs_s *io = get_access_funcs(addr);
u32 val;
val = io->read(ipa3_ctx->reg_collection_base + addr);
if (perm & REG_READ_PERM) {
if (io->read == nop_read)
IPADBG_LOW("nop read action for address 0x%X\n", addr);
if (io->read == act_read)
return val & mask;
val = io->read(ipa3_ctx->reg_collection_base + addr);
if (io->read == act_read)
return val & mask;
} else {
IPADBG_LOW("not permitted to read addr 0x%X\n", addr);
val = nop_read(ipa3_ctx->reg_collection_base + addr);
}
return val;
}
static void out_dword(
u32 addr,
u32 val)
u32 val,
u8 perm)
{
struct reg_access_funcs_s *io = get_access_funcs(addr);
io->write(ipa3_ctx->reg_collection_base + addr, val);
if (perm & REG_WRITE_PERM) {
io->write(ipa3_ctx->reg_collection_base + addr, val);
if (io->write == nop_write)
IPADBG_LOW("nop write action for address 0x%X\n", addr);
} else {
IPADBG_LOW("not permitted to write addr 0x%X\n", addr);
return;
}
}
/*
@@ -752,8 +1028,12 @@ void ipa_save_gsi_ver(void)
if (!ipa3_ctx->do_register_collection_on_crash)
return;
ipa_reg_save.gsi.fw_ver =
if (ipa3_ctx->ipa_hw_type < IPA_HW_v5_0)
ipa_reg_save.gsi.fw_ver =
IPA_READ_1xVECTOR_REG(IPA_GSI_TOP_GSI_INST_RAM_n, 0);
if (ipa3_ctx->ipa_hw_type == IPA_HW_v5_0)
ipa_reg_save.gsi.fw_ver =
IPA_READ_1xVECTOR_REG(IPA_GSI_TOP_GSI_INST_RAM_n, 64);
}
/*
@@ -788,11 +1068,13 @@ void ipa_save_registers(void)
memset(&for_cfg, 0, sizeof(for_cfg));
memset(&for_read, 0, sizeof(for_read));
IPAERR("reading %d registers\n", num_regs);
/* Now save all the configured registers */
for (i = 0; i < num_regs; i++) {
/* Copy reg value to our data struct */
*(ipa_regs_to_save_array[i].dst_addr) =
in_dword(ipa_regs_to_save_array[i].src_addr);
in_dword(ipa_regs_to_save_array[i].src_addr,
ipa_regs_to_save_array[i].perm);
}
/*
@@ -806,7 +1088,8 @@ void ipa_save_registers(void)
IPA_REG_SAVE_NUM_EXTRA_ENDP_REGS); i++) {
/* Copy reg value to our data struct */
*(ipa_regs_to_save_array[num_regs + i].dst_addr) =
in_dword(ipa_regs_to_save_array[num_regs + i].src_addr);
in_dword(ipa_regs_to_save_array[num_regs + i].src_addr,
ipa_regs_to_save_array[num_regs + i].perm);
}
IPA_HW_REG_SAVE_CFG_ENTRY_PIPE_ENDP_EXTRA_ACTIVE();
@@ -830,7 +1113,8 @@ void ipa_save_registers(void)
for (i = 0; i < num_uc_per_regs; i++) {
/* Copy reg value to our data struct */
*(ipa_uc_regs_to_save_array[i].dst_addr) =
in_dword(ipa_uc_regs_to_save_array[i].src_addr);
in_dword(ipa_uc_regs_to_save_array[i].src_addr,
ipa_uc_regs_to_save_array[i].perm);
}
/* Saving CMD Queue registers */
@@ -971,27 +1255,33 @@ void ipa_save_registers(void)
if (ipa3_ctx->do_ram_collection_on_crash) {
for (i = 0; i < IPA_IU_SIZE / sizeof(u32); i++) {
ipa_reg_save.ipa.ipa_iu_ptr[i] =
in_dword(IPA_IU_ADDR + (i * sizeof(u32)));
in_dword(IPA_IU_ADDR + (i * sizeof(u32)),
REG_READ_PERM);
}
for (i = 0; i < IPA_SRAM_SIZE / sizeof(u32); i++) {
ipa_reg_save.ipa.ipa_sram_ptr[i] =
in_dword(IPA_SRAM_ADDR + (i * sizeof(u32)));
in_dword(IPA_SRAM_ADDR + (i * sizeof(u32)),
REG_READ_PERM);
}
for (i = 0; i < IPA_MBOX_SIZE / sizeof(u32); i++) {
ipa_reg_save.ipa.ipa_mbox_ptr[i] =
in_dword(IPA_MBOX_ADDR + (i * sizeof(u32)));
in_dword(IPA_MBOX_ADDR + (i * sizeof(u32)),
REG_READ_PERM);
}
for (i = 0; i < IPA_HRAM_SIZE / sizeof(u32); i++) {
ipa_reg_save.ipa.ipa_hram_ptr[i] =
in_dword(IPA_HRAM_ADDR + (i * sizeof(u32)));
in_dword(IPA_HRAM_ADDR + (i * sizeof(u32)),
REG_READ_PERM);
}
for (i = 0; i < IPA_SEQ_SIZE / sizeof(u32); i++) {
ipa_reg_save.ipa.ipa_seq_ptr[i] =
in_dword(IPA_SEQ_ADDR + (i * sizeof(u32)));
in_dword(IPA_SEQ_ADDR + (i * sizeof(u32)),
REG_READ_PERM);
}
for (i = 0; i < IPA_GSI_SIZE / sizeof(u32); i++) {
ipa_reg_save.ipa.ipa_gsi_ptr[i] =
in_dword(IPA_GSI_ADDR + (i * sizeof(u32)));
in_dword(IPA_GSI_ADDR + (i * sizeof(u32)),
REG_READ_PERM);
}
IPALOG_VnP_ADDRS(ipa_reg_save.ipa.ipa_iu_ptr);
IPALOG_VnP_ADDRS(ipa_reg_save.ipa.ipa_sram_ptr);
@@ -1373,8 +1663,9 @@ static void ipa_hal_save_regs_save_ipa_testbus(void)
sel_internal++) {
testbus_sel.value = 0;
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
testbus_sel.def.pipe_select = 0;
#endif
testbus_sel.def.external_block_select =
sel_external;
testbus_sel.def.internal_block_select =
@@ -1410,8 +1701,9 @@ static void ipa_hal_save_regs_save_ipa_testbus(void)
sel_internal++) {
testbus_sel.value = 0;
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
testbus_sel.def.pipe_select = sel_ep;
#endif
testbus_sel.def.external_block_select =
sel_external;
testbus_sel.def.internal_block_select =
@@ -1610,11 +1902,24 @@ static void ipa_reg_save_anomaly_check(void)
{
if ((ipa_reg_save.ipa.gen.ipa_state.rx_wait != 0)
|| (ipa_reg_save.ipa.gen.ipa_state.rx_idle != 1)) {
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
IPADBG(
"RX ACTIVITY, ipa_state.rx_wait = %d, ipa_state.rx_idle = %d, ipa_state_rx_active.endpoints = %d (bitmask)\n",
ipa_reg_save.ipa.gen.ipa_state.rx_wait,
ipa_reg_save.ipa.gen.ipa_state.rx_idle,
ipa_reg_save.ipa.gen.ipa_state_rx_active.endpoints);
#else
int i = 0;
for (i = 0; i < GEN_MAX_n(IPA_STATE_RX_ACTIVE_n) + 1; i++) {
IPADBG(
"RX ACTIVITY_%d, ipa_state.rx_wait = %d, ipa_state.rx_idle = %d, ipa_state_rx_active.endpoints = %d (bitmask)\n",
i,
ipa_reg_save.ipa.gen.ipa_state.rx_wait,
ipa_reg_save.ipa.gen.ipa_state.rx_idle,
ipa_reg_save.ipa.gen.ipa_state_rx_active_n[i].endpoints);
}
#endif
if (ipa_reg_save.ipa.gen.ipa_state.tx_idle != 1) {
IPADBG(
@@ -1622,11 +1927,12 @@ static void ipa_reg_save_anomaly_check(void)
ipa_reg_save.ipa.gen.ipa_state.tx_idle,
ipa_reg_save.ipa.gen.ipa_state_tx_wrapper.tx0_idle,
ipa_reg_save.ipa.gen.ipa_state_tx_wrapper.tx1_idle);
#ifndef CONFIG_IPA3_REGDUMP_IPA_5_0
IPADBG(
"ipa_state_tx0.last_cmd_pipe = %d, ipa_state_tx1.last_cmd_pipe = %d\n",
ipa_reg_save.ipa.gen.ipa_state_tx0.last_cmd_pipe,
ipa_reg_save.ipa.gen.ipa_state_tx1.last_cmd_pipe);
#endif
}
}
}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است Diff را بارگزاری کن

مشاهده پرونده

@@ -6994,8 +6994,8 @@ static int ipa3_panic_notifier(struct notifier_block *this,
if (res) {
IPAERR("IPA clk off not saving the IPA registers\n");
} else {
ipahal_print_all_regs(false);
ipa_save_registers();
ipahal_print_all_regs(false);
ipa_wigig_save_regs();
}