gpu: nvgpu: Remove extra g field in pmu_gk20a

pmu_gk20a has a pointer to struct gk20a *. As pmu_gk20a is part of
gk20a, there's no need to have the circular dependency.

Bug 200006956

Change-Id: I6d5d10a93b2fba4a26a1e28b3c5206506dc6cc04
Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-on: http://git-master/r/424767
This commit is contained in:
Terje Bergstrom
2014-06-18 14:22:44 +03:00
committed by Dan Willemsen
parent ee66559a0b
commit d46c8e4003
4 changed files with 41 additions and 39 deletions

View File

@@ -522,6 +522,11 @@ static inline struct gk20a *gk20a_from_as(struct gk20a_as *as)
{ {
return container_of(as, struct gk20a, as); return container_of(as, struct gk20a, as);
} }
static inline struct gk20a *gk20a_from_pmu(struct pmu_gk20a *pmu)
{
return container_of(pmu, struct gk20a, pmu);
}
static inline u32 u64_hi32(u64 n) static inline u32 u64_hi32(u64 n)
{ {
return (u32)((n >> 32) & ~(u32)0); return (u32)((n >> 32) & ~(u32)0);

View File

@@ -486,7 +486,7 @@ static void *get_pmu_sequence_out_alloc_ptr_v0(struct pmu_sequence *seq)
int gk20a_init_pmu(struct pmu_gk20a *pmu) int gk20a_init_pmu(struct pmu_gk20a *pmu)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
switch (pmu->desc->app_version) { switch (pmu->desc->app_version) {
case APP_VERSION_GM20B_1: case APP_VERSION_GM20B_1:
case APP_VERSION_GM20B: case APP_VERSION_GM20B:
@@ -626,7 +626,7 @@ int gk20a_init_pmu(struct pmu_gk20a *pmu)
get_pmu_sequence_out_alloc_ptr_v0; get_pmu_sequence_out_alloc_ptr_v0;
break; break;
default: default:
gk20a_err(dev_from_gk20a(pmu->g), gk20a_err(dev_from_gk20a(gk20a_from_pmu(pmu)),
"PMU code version not supported version: %d\n", "PMU code version not supported version: %d\n",
pmu->desc->app_version); pmu->desc->app_version);
return -EINVAL; return -EINVAL;
@@ -638,7 +638,7 @@ int gk20a_init_pmu(struct pmu_gk20a *pmu)
void pmu_copy_from_dmem(struct pmu_gk20a *pmu, void pmu_copy_from_dmem(struct pmu_gk20a *pmu,
u32 src, u8 *dst, u32 size, u8 port) u32 src, u8 *dst, u32 size, u8 port)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
u32 i, words, bytes; u32 i, words, bytes;
u32 data, addr_mask; u32 data, addr_mask;
u32 *dst_u32 = (u32*)dst; u32 *dst_u32 = (u32*)dst;
@@ -684,7 +684,7 @@ void pmu_copy_from_dmem(struct pmu_gk20a *pmu,
void pmu_copy_to_dmem(struct pmu_gk20a *pmu, void pmu_copy_to_dmem(struct pmu_gk20a *pmu,
u32 dst, u8 *src, u32 size, u8 port) u32 dst, u8 *src, u32 size, u8 port)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
u32 i, words, bytes; u32 i, words, bytes;
u32 data, addr_mask; u32 data, addr_mask;
u32 *src_u32 = (u32*)src; u32 *src_u32 = (u32*)src;
@@ -737,7 +737,7 @@ void pmu_copy_to_dmem(struct pmu_gk20a *pmu,
static int pmu_idle(struct pmu_gk20a *pmu) static int pmu_idle(struct pmu_gk20a *pmu)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
unsigned long end_jiffies = jiffies + unsigned long end_jiffies = jiffies +
msecs_to_jiffies(2000); msecs_to_jiffies(2000);
u32 idle_stat; u32 idle_stat;
@@ -766,7 +766,7 @@ static int pmu_idle(struct pmu_gk20a *pmu)
static void pmu_enable_irq(struct pmu_gk20a *pmu, bool enable) static void pmu_enable_irq(struct pmu_gk20a *pmu, bool enable)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
gk20a_dbg_fn(""); gk20a_dbg_fn("");
@@ -831,7 +831,7 @@ static void pmu_enable_irq(struct pmu_gk20a *pmu, bool enable)
static int pmu_enable_hw(struct pmu_gk20a *pmu, bool enable) static int pmu_enable_hw(struct pmu_gk20a *pmu, bool enable)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
gk20a_dbg_fn(""); gk20a_dbg_fn("");
@@ -863,7 +863,7 @@ static int pmu_enable_hw(struct pmu_gk20a *pmu, bool enable)
static int pmu_enable(struct pmu_gk20a *pmu, bool enable) static int pmu_enable(struct pmu_gk20a *pmu, bool enable)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
u32 pmc_enable; u32 pmc_enable;
int err; int err;
@@ -922,7 +922,7 @@ int pmu_reset(struct pmu_gk20a *pmu)
static int pmu_bootstrap(struct pmu_gk20a *pmu) static int pmu_bootstrap(struct pmu_gk20a *pmu)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct gk20a_platform *platform = platform_get_drvdata(g->dev); struct gk20a_platform *platform = platform_get_drvdata(g->dev);
struct mm_gk20a *mm = &g->mm; struct mm_gk20a *mm = &g->mm;
struct pmu_ucode_desc *desc = pmu->desc; struct pmu_ucode_desc *desc = pmu->desc;
@@ -1023,7 +1023,7 @@ void pmu_seq_init(struct pmu_gk20a *pmu)
static int pmu_seq_acquire(struct pmu_gk20a *pmu, static int pmu_seq_acquire(struct pmu_gk20a *pmu,
struct pmu_sequence **pseq) struct pmu_sequence **pseq)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_sequence *seq; struct pmu_sequence *seq;
u32 index; u32 index;
@@ -1049,7 +1049,7 @@ static int pmu_seq_acquire(struct pmu_gk20a *pmu,
static void pmu_seq_release(struct pmu_gk20a *pmu, static void pmu_seq_release(struct pmu_gk20a *pmu,
struct pmu_sequence *seq) struct pmu_sequence *seq)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
seq->state = PMU_SEQ_STATE_FREE; seq->state = PMU_SEQ_STATE_FREE;
seq->desc = PMU_INVALID_SEQ_DESC; seq->desc = PMU_INVALID_SEQ_DESC;
seq->callback = NULL; seq->callback = NULL;
@@ -1067,7 +1067,7 @@ static void pmu_seq_release(struct pmu_gk20a *pmu,
static int pmu_queue_init(struct pmu_gk20a *pmu, static int pmu_queue_init(struct pmu_gk20a *pmu,
u32 id, union pmu_init_msg_pmu *init) u32 id, union pmu_init_msg_pmu *init)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_queue *queue = &pmu->queue[id]; struct pmu_queue *queue = &pmu->queue[id];
queue->id = id; queue->id = id;
g->ops.pmu_ver.get_pmu_init_msg_pmu_queue_params(queue, id, init); g->ops.pmu_ver.get_pmu_init_msg_pmu_queue_params(queue, id, init);
@@ -1084,7 +1084,7 @@ static int pmu_queue_init(struct pmu_gk20a *pmu,
static int pmu_queue_head(struct pmu_gk20a *pmu, struct pmu_queue *queue, static int pmu_queue_head(struct pmu_gk20a *pmu, struct pmu_queue *queue,
u32 *head, bool set) u32 *head, bool set)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
BUG_ON(!head); BUG_ON(!head);
@@ -1117,7 +1117,7 @@ static int pmu_queue_head(struct pmu_gk20a *pmu, struct pmu_queue *queue,
static int pmu_queue_tail(struct pmu_gk20a *pmu, struct pmu_queue *queue, static int pmu_queue_tail(struct pmu_gk20a *pmu, struct pmu_queue *queue,
u32 *tail, bool set) u32 *tail, bool set)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
BUG_ON(!tail); BUG_ON(!tail);
@@ -1161,7 +1161,7 @@ static inline void pmu_queue_write(struct pmu_gk20a *pmu,
int pmu_mutex_acquire(struct pmu_gk20a *pmu, u32 id, u32 *token) int pmu_mutex_acquire(struct pmu_gk20a *pmu, u32 id, u32 *token)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_mutex *mutex; struct pmu_mutex *mutex;
u32 data, owner, max_retry; u32 data, owner, max_retry;
@@ -1230,7 +1230,7 @@ int pmu_mutex_acquire(struct pmu_gk20a *pmu, u32 id, u32 *token)
int pmu_mutex_release(struct pmu_gk20a *pmu, u32 id, u32 *token) int pmu_mutex_release(struct pmu_gk20a *pmu, u32 id, u32 *token)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_mutex *mutex; struct pmu_mutex *mutex;
u32 owner, data; u32 owner, data;
@@ -1355,7 +1355,7 @@ static int pmu_queue_push(struct pmu_gk20a *pmu,
gk20a_dbg_fn(""); gk20a_dbg_fn("");
if (!queue->opened && queue->oflag == OFLAG_WRITE){ if (!queue->opened && queue->oflag == OFLAG_WRITE){
gk20a_err(dev_from_gk20a(pmu->g), gk20a_err(dev_from_gk20a(gk20a_from_pmu(pmu)),
"queue not opened for write"); "queue not opened for write");
return -EINVAL; return -EINVAL;
} }
@@ -1374,7 +1374,7 @@ static int pmu_queue_pop(struct pmu_gk20a *pmu,
*bytes_read = 0; *bytes_read = 0;
if (!queue->opened && queue->oflag == OFLAG_READ){ if (!queue->opened && queue->oflag == OFLAG_READ){
gk20a_err(dev_from_gk20a(pmu->g), gk20a_err(dev_from_gk20a(gk20a_from_pmu(pmu)),
"queue not opened for read"); "queue not opened for read");
return -EINVAL; return -EINVAL;
} }
@@ -1391,7 +1391,7 @@ static int pmu_queue_pop(struct pmu_gk20a *pmu,
used = queue->offset + queue->size - tail; used = queue->offset + queue->size - tail;
if (size > used) { if (size > used) {
gk20a_warn(dev_from_gk20a(pmu->g), gk20a_warn(dev_from_gk20a(gk20a_from_pmu(pmu)),
"queue size smaller than request read"); "queue size smaller than request read");
size = used; size = used;
} }
@@ -1410,7 +1410,7 @@ static void pmu_queue_rewind(struct pmu_gk20a *pmu,
gk20a_dbg_fn(""); gk20a_dbg_fn("");
if (!queue->opened) { if (!queue->opened) {
gk20a_err(dev_from_gk20a(pmu->g), gk20a_err(dev_from_gk20a(gk20a_from_pmu(pmu)),
"queue not opened"); "queue not opened");
return; return;
} }
@@ -1462,7 +1462,7 @@ static int pmu_queue_open_write(struct pmu_gk20a *pmu,
BUG(); BUG();
if (!pmu_queue_has_room(pmu, queue, size, &rewind)) { if (!pmu_queue_has_room(pmu, queue, size, &rewind)) {
gk20a_err(dev_from_gk20a(pmu->g), "queue full"); gk20a_err(dev_from_gk20a(gk20a_from_pmu(pmu)), "queue full");
return -EAGAIN; return -EAGAIN;
} }
@@ -1795,7 +1795,7 @@ static void pmu_setup_hw_enable_elpg(struct gk20a *g);
void pmu_setup_hw(struct work_struct *work) void pmu_setup_hw(struct work_struct *work)
{ {
struct pmu_gk20a *pmu = container_of(work, struct pmu_gk20a, pg_init); struct pmu_gk20a *pmu = container_of(work, struct pmu_gk20a, pg_init);
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
switch (pmu->pmu_state) { switch (pmu->pmu_state) {
case PMU_STATE_ELPG_BOOTED: case PMU_STATE_ELPG_BOOTED:
@@ -1991,8 +1991,6 @@ int gk20a_init_pmu_support(struct gk20a *g)
if (pmu->initialized) if (pmu->initialized)
return 0; return 0;
pmu->g = g;
err = gk20a_init_pmu_reset_enable_hw(g); err = gk20a_init_pmu_reset_enable_hw(g);
if (err) if (err)
return err; return err;
@@ -2071,7 +2069,7 @@ static void pmu_handle_pg_stat_msg(struct gk20a *g, struct pmu_msg *msg,
static int pmu_init_powergating(struct pmu_gk20a *pmu) static int pmu_init_powergating(struct pmu_gk20a *pmu)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_cmd cmd; struct pmu_cmd cmd;
u32 seq; u32 seq;
@@ -2141,7 +2139,7 @@ static int pmu_init_powergating(struct pmu_gk20a *pmu)
static int pmu_init_perfmon(struct pmu_gk20a *pmu) static int pmu_init_perfmon(struct pmu_gk20a *pmu)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_v *pv = &g->ops.pmu_ver; struct pmu_v *pv = &g->ops.pmu_ver;
struct pmu_cmd cmd; struct pmu_cmd cmd;
struct pmu_payload payload; struct pmu_payload payload;
@@ -2244,7 +2242,7 @@ static int pmu_init_perfmon(struct pmu_gk20a *pmu)
static int pmu_process_init_msg(struct pmu_gk20a *pmu, static int pmu_process_init_msg(struct pmu_gk20a *pmu,
struct pmu_msg *msg) struct pmu_msg *msg)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_v *pv = &g->ops.pmu_ver; struct pmu_v *pv = &g->ops.pmu_ver;
union pmu_init_msg_pmu *init; union pmu_init_msg_pmu *init;
struct pmu_sha1_gid_data gid_data; struct pmu_sha1_gid_data gid_data;
@@ -2313,7 +2311,7 @@ static int pmu_process_init_msg(struct pmu_gk20a *pmu,
static bool pmu_read_message(struct pmu_gk20a *pmu, struct pmu_queue *queue, static bool pmu_read_message(struct pmu_gk20a *pmu, struct pmu_queue *queue,
struct pmu_msg *msg, int *status) struct pmu_msg *msg, int *status)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
u32 read_size, bytes_read; u32 read_size, bytes_read;
int err; int err;
@@ -2393,7 +2391,7 @@ clean_up:
static int pmu_response_handle(struct pmu_gk20a *pmu, static int pmu_response_handle(struct pmu_gk20a *pmu,
struct pmu_msg *msg) struct pmu_msg *msg)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_sequence *seq; struct pmu_sequence *seq;
struct pmu_v *pv = &g->ops.pmu_ver; struct pmu_v *pv = &g->ops.pmu_ver;
int ret = 0; int ret = 0;
@@ -2500,7 +2498,7 @@ void gk20a_pmu_save_zbc(struct gk20a *g, u32 entries)
static int pmu_perfmon_start_sampling(struct pmu_gk20a *pmu) static int pmu_perfmon_start_sampling(struct pmu_gk20a *pmu)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_v *pv = &g->ops.pmu_ver; struct pmu_v *pv = &g->ops.pmu_ver;
struct pmu_cmd cmd; struct pmu_cmd cmd;
struct pmu_payload payload; struct pmu_payload payload;
@@ -2544,7 +2542,7 @@ static int pmu_perfmon_start_sampling(struct pmu_gk20a *pmu)
static int pmu_perfmon_stop_sampling(struct pmu_gk20a *pmu) static int pmu_perfmon_stop_sampling(struct pmu_gk20a *pmu)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_cmd cmd; struct pmu_cmd cmd;
u32 seq; u32 seq;
@@ -2646,7 +2644,7 @@ static int pmu_process_message(struct pmu_gk20a *pmu)
static int pmu_wait_message_cond(struct pmu_gk20a *pmu, u32 timeout, static int pmu_wait_message_cond(struct pmu_gk20a *pmu, u32 timeout,
u32 *var, u32 val) u32 *var, u32 val)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
unsigned long end_jiffies = jiffies + msecs_to_jiffies(timeout); unsigned long end_jiffies = jiffies + msecs_to_jiffies(timeout);
unsigned long delay = GR_IDLE_CHECK_DEFAULT; unsigned long delay = GR_IDLE_CHECK_DEFAULT;
@@ -2667,7 +2665,7 @@ static int pmu_wait_message_cond(struct pmu_gk20a *pmu, u32 timeout,
static void pmu_dump_elpg_stats(struct pmu_gk20a *pmu) static void pmu_dump_elpg_stats(struct pmu_gk20a *pmu)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_pg_stats stats; struct pmu_pg_stats stats;
pmu_copy_from_dmem(pmu, pmu->stat_dmem_offset, pmu_copy_from_dmem(pmu, pmu->stat_dmem_offset,
@@ -2739,7 +2737,7 @@ static void pmu_dump_elpg_stats(struct pmu_gk20a *pmu)
void pmu_dump_falcon_stats(struct pmu_gk20a *pmu) void pmu_dump_falcon_stats(struct pmu_gk20a *pmu)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
int i; int i;
gk20a_err(dev_from_gk20a(g), "pwr_falcon_os_r : %d", gk20a_err(dev_from_gk20a(g), "pwr_falcon_os_r : %d",
@@ -2918,7 +2916,7 @@ static bool pmu_validate_cmd(struct pmu_gk20a *pmu, struct pmu_cmd *cmd,
struct pmu_msg *msg, struct pmu_payload *payload, struct pmu_msg *msg, struct pmu_payload *payload,
u32 queue_id) u32 queue_id)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_queue *queue; struct pmu_queue *queue;
u32 in_size, out_size; u32 in_size, out_size;
@@ -2987,7 +2985,7 @@ invalid_cmd:
static int pmu_write_cmd(struct pmu_gk20a *pmu, struct pmu_cmd *cmd, static int pmu_write_cmd(struct pmu_gk20a *pmu, struct pmu_cmd *cmd,
u32 queue_id, unsigned long timeout) u32 queue_id, unsigned long timeout)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct pmu_queue *queue; struct pmu_queue *queue;
unsigned long end_jiffies = jiffies + unsigned long end_jiffies = jiffies +
msecs_to_jiffies(timeout); msecs_to_jiffies(timeout);

View File

@@ -997,9 +997,8 @@ struct pmu_pg_stats {
#define PMU_STATE_LOADING_ZBC 4 /* Loading ZBC buf */ #define PMU_STATE_LOADING_ZBC 4 /* Loading ZBC buf */
#define PMU_STATE_STARTED 5 /* Fully unitialized */ #define PMU_STATE_STARTED 5 /* Fully unitialized */
struct pmu_gk20a {
struct gk20a *g; struct pmu_gk20a {
struct pmu_ucode_desc *desc; struct pmu_ucode_desc *desc;
struct pmu_mem_desc ucode; struct pmu_mem_desc ucode;

View File

@@ -1082,7 +1082,7 @@ acr_ucode_patch_sig(struct gk20a *g,
static int bl_bootstrap(struct pmu_gk20a *pmu, static int bl_bootstrap(struct pmu_gk20a *pmu,
struct flcn_bl_dmem_desc *pbl_desc, u32 bl_sz) struct flcn_bl_dmem_desc *pbl_desc, u32 bl_sz)
{ {
struct gk20a *g = pmu->g; struct gk20a *g = gk20a_from_pmu(pmu);
struct mm_gk20a *mm = &g->mm; struct mm_gk20a *mm = &g->mm;
struct pmu_ucode_desc *desc = pmu->desc; struct pmu_ucode_desc *desc = pmu->desc;
u32 imem_dst_blk = 0; u32 imem_dst_blk = 0;