|
@@ -274,10 +274,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)
|
|
@@ -381,7 +383,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;
|
|
@@ -401,7 +404,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);
|
|
@@ -414,7 +418,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;
|
|
@@ -433,7 +438,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;
|
|
@@ -451,7 +457,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;
|
|
@@ -468,7 +475,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;
|
|
@@ -485,7 +493,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;
|
|
@@ -502,7 +511,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;
|
|
@@ -519,7 +529,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);
|
|
@@ -530,7 +541,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);
|
|
@@ -541,7 +553,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;
|
|
@@ -560,7 +573,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;
|
|
@@ -582,7 +596,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;
|
|
@@ -604,7 +619,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);
|
|
@@ -741,7 +757,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) { \
|
|
@@ -749,7 +765,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); \
|
|
|
} \
|
|
|
\
|
|
@@ -761,7 +777,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);
|
|
@@ -773,7 +790,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);
|