]> git.itanic.dy.fi Git - linux-stable/commitdiff
net: ipa: introduce GSI register IDs
authorAlex Elder <elder@linaro.org>
Fri, 10 Feb 2023 19:36:49 +0000 (13:36 -0600)
committerDavid S. Miller <davem@davemloft.net>
Mon, 13 Feb 2023 09:56:16 +0000 (09:56 +0000)
Create a new gsi_reg_id enumerated type, which identifies each GSI
register with a symbolic identifier.

Create a function that indicates whether a register ID is valid.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ipa/gsi_reg.c
drivers/net/ipa/gsi_reg.h

index 48f81fc24f39d1f6524d328e64edbd3c94bfeded..c20b3bcdd41510a86e8ad580841aad701b56e8e4 100644 (file)
  */
 #define GSI_EE_REG_ADJUST      0x0000d000                      /* IPA v4.5+ */
 
+/* Is this register ID valid for the current GSI version? */
+static bool gsi_reg_id_valid(struct gsi *gsi, enum gsi_reg_id reg_id)
+{
+       switch (reg_id) {
+       case INTER_EE_SRC_CH_IRQ_MSK:
+       case INTER_EE_SRC_EV_CH_IRQ_MSK:
+       case CH_C_CNTXT_0:
+       case CH_C_CNTXT_1:
+       case CH_C_CNTXT_2:
+       case CH_C_CNTXT_3:
+       case CH_C_QOS:
+       case CH_C_SCRATCH_0:
+       case CH_C_SCRATCH_1:
+       case CH_C_SCRATCH_2:
+       case CH_C_SCRATCH_3:
+       case EV_CH_E_CNTXT_0:
+       case EV_CH_E_CNTXT_1:
+       case EV_CH_E_CNTXT_2:
+       case EV_CH_E_CNTXT_3:
+       case EV_CH_E_CNTXT_4:
+       case EV_CH_E_CNTXT_8:
+       case EV_CH_E_CNTXT_9:
+       case EV_CH_E_CNTXT_10:
+       case EV_CH_E_CNTXT_11:
+       case EV_CH_E_CNTXT_12:
+       case EV_CH_E_CNTXT_13:
+       case EV_CH_E_SCRATCH_0:
+       case EV_CH_E_SCRATCH_1:
+       case CH_C_DOORBELL_0:
+       case EV_CH_E_DOORBELL_0:
+       case GSI_STATUS:
+       case CH_CMD:
+       case EV_CH_CMD:
+       case GENERIC_CMD:
+       case HW_PARAM_2:
+       case CNTXT_TYPE_IRQ:
+       case CNTXT_TYPE_IRQ_MSK:
+       case CNTXT_SRC_CH_IRQ:
+       case CNTXT_SRC_CH_IRQ_MSK:
+       case CNTXT_SRC_CH_IRQ_CLR:
+       case CNTXT_SRC_EV_CH_IRQ:
+       case CNTXT_SRC_EV_CH_IRQ_MSK:
+       case CNTXT_SRC_EV_CH_IRQ_CLR:
+       case CNTXT_SRC_IEOB_IRQ:
+       case CNTXT_SRC_IEOB_IRQ_MSK:
+       case CNTXT_SRC_IEOB_IRQ_CLR:
+       case CNTXT_GLOB_IRQ_STTS:
+       case CNTXT_GLOB_IRQ_EN:
+       case CNTXT_GLOB_IRQ_CLR:
+       case CNTXT_GSI_IRQ_STTS:
+       case CNTXT_GSI_IRQ_EN:
+       case CNTXT_GSI_IRQ_CLR:
+       case CNTXT_INTSET:
+       case ERROR_LOG:
+       case ERROR_LOG_CLR:
+       case CNTXT_SCRATCH_0:
+               return true;
+
+       default:
+               return false;
+       }
+}
+
 /* Sets gsi->virt_raw and gsi->virt, and I/O maps the "gsi" memory range */
 int gsi_reg_init(struct gsi *gsi, struct platform_device *pdev)
 {
@@ -30,6 +93,8 @@ int gsi_reg_init(struct gsi *gsi, struct platform_device *pdev)
        resource_size_t size;
        u32 adjust;
 
+       (void)gsi_reg_id_valid; /* Avoid a warning */
+
        /* Get GSI memory range and map it */
        res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "gsi");
        if (!res) {
index 60071b6a4d32ee4c7317806e62a7323dabe042a9..1f613cd677b01793eb79b71093d86360fcae716a 100644 (file)
  * (though the actual limit is hardware-dependent).
  */
 
+/* enum gsi_reg_id - GSI register IDs */
+enum gsi_reg_id {
+       INTER_EE_SRC_CH_IRQ_MSK,                        /* IPA v3.5+ */
+       INTER_EE_SRC_EV_CH_IRQ_MSK,                     /* IPA v3.5+ */
+       CH_C_CNTXT_0,
+       CH_C_CNTXT_1,
+       CH_C_CNTXT_2,
+       CH_C_CNTXT_3,
+       CH_C_QOS,
+       CH_C_SCRATCH_0,
+       CH_C_SCRATCH_1,
+       CH_C_SCRATCH_2,
+       CH_C_SCRATCH_3,
+       EV_CH_E_CNTXT_0,
+       EV_CH_E_CNTXT_1,
+       EV_CH_E_CNTXT_2,
+       EV_CH_E_CNTXT_3,
+       EV_CH_E_CNTXT_4,
+       EV_CH_E_CNTXT_8,
+       EV_CH_E_CNTXT_9,
+       EV_CH_E_CNTXT_10,
+       EV_CH_E_CNTXT_11,
+       EV_CH_E_CNTXT_12,
+       EV_CH_E_CNTXT_13,
+       EV_CH_E_SCRATCH_0,
+       EV_CH_E_SCRATCH_1,
+       CH_C_DOORBELL_0,
+       EV_CH_E_DOORBELL_0,
+       GSI_STATUS,
+       CH_CMD,
+       EV_CH_CMD,
+       GENERIC_CMD,
+       HW_PARAM_2,                                     /* IPA v3.5.1+ */
+       CNTXT_TYPE_IRQ,
+       CNTXT_TYPE_IRQ_MSK,
+       CNTXT_SRC_CH_IRQ,
+       CNTXT_SRC_CH_IRQ_MSK,
+       CNTXT_SRC_CH_IRQ_CLR,
+       CNTXT_SRC_EV_CH_IRQ,
+       CNTXT_SRC_EV_CH_IRQ_MSK,
+       CNTXT_SRC_EV_CH_IRQ_CLR,
+       CNTXT_SRC_IEOB_IRQ,
+       CNTXT_SRC_IEOB_IRQ_MSK,
+       CNTXT_SRC_IEOB_IRQ_CLR,
+       CNTXT_GLOB_IRQ_STTS,
+       CNTXT_GLOB_IRQ_EN,
+       CNTXT_GLOB_IRQ_CLR,
+       CNTXT_GSI_IRQ_STTS,
+       CNTXT_GSI_IRQ_EN,
+       CNTXT_GSI_IRQ_CLR,
+       CNTXT_INTSET,
+       ERROR_LOG,
+       ERROR_LOG_CLR,
+       CNTXT_SCRATCH_0,
+       GSI_REG_ID_COUNT,                               /* Last; not an ID */
+};
+
 /* The inter-EE IRQ registers are relative to gsi->virt_raw (IPA v3.5+) */
 
 #define GSI_INTER_EE_SRC_CH_IRQ_MSK_OFFSET \