irqchip/gic-v3-its: Pass its_node pointer to each command builder
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.zyngier@arm.com>
This commit is contained in:
parent
a19b462f04
commit
67047f90d7
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user