In order to be able to issue command variants depending on
how broken an ITS is, let's pass the its pointer to all
command building primitives.

Signed-off-by: Marc Zyngier <marc.zyng...@arm.com>
---
 drivers/irqchip/irq-gic-v3-its.c | 58 ++++++++++++++++++++++++++--------------
 1 file changed, 38 insertions(+), 20 deletions(-)

diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 20545241766e..32baec1070b2 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -268,10 +268,12 @@ struct its_cmd_block {
 #define ITS_CMD_QUEUE_SZ               SZ_64K
 #define ITS_CMD_QUEUE_NR_ENTRIES       (ITS_CMD_QUEUE_SZ / sizeof(struct 
its_cmd_block))
 
-typedef struct its_collection *(*its_cmd_builder_t)(struct its_cmd_block *,
+typedef struct its_collection *(*its_cmd_builder_t)(struct its_node *,
+                                                   struct its_cmd_block *,
                                                    struct its_cmd_desc *);
 
-typedef struct its_vpe *(*its_cmd_vbuilder_t)(struct its_cmd_block *,
+typedef struct its_vpe *(*its_cmd_vbuilder_t)(struct its_node *,
+                                             struct its_cmd_block *,
                                              struct its_cmd_desc *);
 
 static void its_mask_encode(u64 *raw_cmd, u64 val, int h, int l)
@@ -375,7 +377,8 @@ static inline void its_fixup_cmd(struct its_cmd_block *cmd)
        cmd->raw_cmd[3] = cpu_to_le64(cmd->raw_cmd[3]);
 }
 
-static struct its_collection *its_build_mapd_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_mapd_cmd(struct its_node *its,
+                                                struct its_cmd_block *cmd,
                                                 struct its_cmd_desc *desc)
 {
        unsigned long itt_addr;
@@ -395,7 +398,8 @@ static struct its_collection *its_build_mapd_cmd(struct 
its_cmd_block *cmd,
        return NULL;
 }
 
-static struct its_collection *its_build_mapc_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_mapc_cmd(struct its_node *its,
+                                                struct its_cmd_block *cmd,
                                                 struct its_cmd_desc *desc)
 {
        its_encode_cmd(cmd, GITS_CMD_MAPC);
@@ -408,7 +412,8 @@ static struct its_collection *its_build_mapc_cmd(struct 
its_cmd_block *cmd,
        return desc->its_mapc_cmd.col;
 }
 
-static struct its_collection *its_build_mapti_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_mapti_cmd(struct its_node *its,
+                                                 struct its_cmd_block *cmd,
                                                  struct its_cmd_desc *desc)
 {
        struct its_collection *col;
@@ -427,7 +432,8 @@ static struct its_collection *its_build_mapti_cmd(struct 
its_cmd_block *cmd,
        return col;
 }
 
-static struct its_collection *its_build_movi_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_movi_cmd(struct its_node *its,
+                                                struct its_cmd_block *cmd,
                                                 struct its_cmd_desc *desc)
 {
        struct its_collection *col;
@@ -445,7 +451,8 @@ static struct its_collection *its_build_movi_cmd(struct 
its_cmd_block *cmd,
        return col;
 }
 
-static struct its_collection *its_build_discard_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_discard_cmd(struct its_node *its,
+                                                   struct its_cmd_block *cmd,
                                                    struct its_cmd_desc *desc)
 {
        struct its_collection *col;
@@ -462,7 +469,8 @@ static struct its_collection *its_build_discard_cmd(struct 
its_cmd_block *cmd,
        return col;
 }
 
-static struct its_collection *its_build_inv_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_inv_cmd(struct its_node *its,
+                                               struct its_cmd_block *cmd,
                                                struct its_cmd_desc *desc)
 {
        struct its_collection *col;
@@ -479,7 +487,8 @@ static struct its_collection *its_build_inv_cmd(struct 
its_cmd_block *cmd,
        return col;
 }
 
-static struct its_collection *its_build_int_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_int_cmd(struct its_node *its,
+                                               struct its_cmd_block *cmd,
                                                struct its_cmd_desc *desc)
 {
        struct its_collection *col;
@@ -496,7 +505,8 @@ static struct its_collection *its_build_int_cmd(struct 
its_cmd_block *cmd,
        return col;
 }
 
-static struct its_collection *its_build_clear_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_clear_cmd(struct its_node *its,
+                                                 struct its_cmd_block *cmd,
                                                  struct its_cmd_desc *desc)
 {
        struct its_collection *col;
@@ -513,7 +523,8 @@ static struct its_collection *its_build_clear_cmd(struct 
its_cmd_block *cmd,
        return col;
 }
 
-static struct its_collection *its_build_invall_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_invall_cmd(struct its_node *its,
+                                                  struct its_cmd_block *cmd,
                                                   struct its_cmd_desc *desc)
 {
        its_encode_cmd(cmd, GITS_CMD_INVALL);
@@ -524,7 +535,8 @@ static struct its_collection *its_build_invall_cmd(struct 
its_cmd_block *cmd,
        return NULL;
 }
 
-static struct its_vpe *its_build_vinvall_cmd(struct its_cmd_block *cmd,
+static struct its_vpe *its_build_vinvall_cmd(struct its_node *its,
+                                            struct its_cmd_block *cmd,
                                             struct its_cmd_desc *desc)
 {
        its_encode_cmd(cmd, GITS_CMD_VINVALL);
@@ -535,7 +547,8 @@ static struct its_vpe *its_build_vinvall_cmd(struct 
its_cmd_block *cmd,
        return desc->its_vinvall_cmd.vpe;
 }
 
-static struct its_vpe *its_build_vmapp_cmd(struct its_cmd_block *cmd,
+static struct its_vpe *its_build_vmapp_cmd(struct its_node *its,
+                                          struct its_cmd_block *cmd,
                                           struct its_cmd_desc *desc)
 {
        unsigned long vpt_addr;
@@ -554,7 +567,8 @@ static struct its_vpe *its_build_vmapp_cmd(struct 
its_cmd_block *cmd,
        return desc->its_vmapp_cmd.vpe;
 }
 
-static struct its_vpe *its_build_vmapti_cmd(struct its_cmd_block *cmd,
+static struct its_vpe *its_build_vmapti_cmd(struct its_node *its,
+                                           struct its_cmd_block *cmd,
                                            struct its_cmd_desc *desc)
 {
        u32 db;
@@ -576,7 +590,8 @@ static struct its_vpe *its_build_vmapti_cmd(struct 
its_cmd_block *cmd,
        return desc->its_vmapti_cmd.vpe;
 }
 
-static struct its_vpe *its_build_vmovi_cmd(struct its_cmd_block *cmd,
+static struct its_vpe *its_build_vmovi_cmd(struct its_node *its,
+                                          struct its_cmd_block *cmd,
                                           struct its_cmd_desc *desc)
 {
        u32 db;
@@ -598,7 +613,8 @@ static struct its_vpe *its_build_vmovi_cmd(struct 
its_cmd_block *cmd,
        return desc->its_vmovi_cmd.vpe;
 }
 
-static struct its_vpe *its_build_vmovp_cmd(struct its_cmd_block *cmd,
+static struct its_vpe *its_build_vmovp_cmd(struct its_node *its,
+                                          struct its_cmd_block *cmd,
                                           struct its_cmd_desc *desc)
 {
        its_encode_cmd(cmd, GITS_CMD_VMOVP);
@@ -735,7 +751,7 @@ void name(struct its_node *its,                             
                \
                raw_spin_unlock_irqrestore(&its->lock, flags);          \
                return;                                                 \
        }                                                               \
-       sync_obj = builder(cmd, desc);                                  \
+       sync_obj = builder(its, cmd, desc);                             \
        its_flush_cmd(its, cmd);                                        \
                                                                        \
        if (sync_obj) {                                                 \
@@ -743,7 +759,7 @@ void name(struct its_node *its,                             
                \
                if (!sync_cmd)                                          \
                        goto post;                                      \
                                                                        \
-               buildfn(sync_cmd, sync_obj);                            \
+               buildfn(its, sync_cmd, sync_obj);                       \
                its_flush_cmd(its, sync_cmd);                           \
        }                                                               \
                                                                        \
@@ -755,7 +771,8 @@ post:                                                       
                \
                pr_err_ratelimited("ITS cmd %ps failed\n", builder);    \
 }
 
-static void its_build_sync_cmd(struct its_cmd_block *sync_cmd,
+static void its_build_sync_cmd(struct its_node *its,
+                              struct its_cmd_block *sync_cmd,
                               struct its_collection *sync_col)
 {
        its_encode_cmd(sync_cmd, GITS_CMD_SYNC);
@@ -767,7 +784,8 @@ static void its_build_sync_cmd(struct its_cmd_block 
*sync_cmd,
 static BUILD_SINGLE_CMD_FUNC(its_send_single_command, its_cmd_builder_t,
                             struct its_collection, its_build_sync_cmd)
 
-static void its_build_vsync_cmd(struct its_cmd_block *sync_cmd,
+static void its_build_vsync_cmd(struct its_node *its,
+                               struct its_cmd_block *sync_cmd,
                                struct its_vpe *sync_vpe)
 {
        its_encode_cmd(sync_cmd, GITS_CMD_VSYNC);
-- 
2.11.0

Reply via email to