gpu: host1x: Add syncpoint base support
This patch adds support for hardware syncpoint bases. This creates a simple mechanism to stall the command FIFO until an operation is completed. Signed-off-by: Arto Merilainen <amerilainen@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:

committed by
Thierry Reding

parent
8736fe8153
commit
f5a954fed9
@@ -67,6 +67,22 @@ static void submit_gathers(struct host1x_job *job)
|
||||
}
|
||||
}
|
||||
|
||||
static inline void synchronize_syncpt_base(struct host1x_job *job)
|
||||
{
|
||||
struct host1x *host = dev_get_drvdata(job->channel->dev->parent);
|
||||
struct host1x_syncpt *sp = host->syncpt + job->syncpt_id;
|
||||
u32 id, value;
|
||||
|
||||
value = host1x_syncpt_read_max(sp);
|
||||
id = sp->base->id;
|
||||
|
||||
host1x_cdma_push(&job->channel->cdma,
|
||||
host1x_opcode_setclass(HOST1X_CLASS_HOST1X,
|
||||
HOST1X_UCLASS_LOAD_SYNCPT_BASE, 1),
|
||||
HOST1X_UCLASS_LOAD_SYNCPT_BASE_BASE_INDX_F(id) |
|
||||
HOST1X_UCLASS_LOAD_SYNCPT_BASE_VALUE_F(value));
|
||||
}
|
||||
|
||||
static int channel_submit(struct host1x_job *job)
|
||||
{
|
||||
struct host1x_channel *ch = job->channel;
|
||||
@@ -118,6 +134,10 @@ static int channel_submit(struct host1x_job *job)
|
||||
host1x_syncpt_read_max(sp)));
|
||||
}
|
||||
|
||||
/* Synchronize base register to allow using it for relative waiting */
|
||||
if (sp->base)
|
||||
synchronize_syncpt_base(job);
|
||||
|
||||
syncval = host1x_syncpt_incr_max(sp, user_syncpt_incrs);
|
||||
|
||||
job->syncpt_end = syncval;
|
||||
|
@@ -111,6 +111,12 @@ static inline u32 host1x_uclass_wait_syncpt_base_offset_f(u32 v)
|
||||
}
|
||||
#define HOST1X_UCLASS_WAIT_SYNCPT_BASE_OFFSET_F(v) \
|
||||
host1x_uclass_wait_syncpt_base_offset_f(v)
|
||||
static inline u32 host1x_uclass_load_syncpt_base_r(void)
|
||||
{
|
||||
return 0xb;
|
||||
}
|
||||
#define HOST1X_UCLASS_LOAD_SYNCPT_BASE \
|
||||
host1x_uclass_load_syncpt_base_r()
|
||||
static inline u32 host1x_uclass_load_syncpt_base_base_indx_f(u32 v)
|
||||
{
|
||||
return (v & 0xff) << 24;
|
||||
|
Reference in New Issue
Block a user