static void gk20a_debug_show_channel(struct gk20a *g, struct gk20a_debug_output *o, struct channel_gk20a *ch) { u32 channel = gk20a_readl(g, ccsr_channel_r(ch->hw_chid)); u32 status = ccsr_channel_status_v(channel); u32 syncpointa, syncpointb; void *inst_ptr; inst_ptr = ch->inst_block.cpuva; if (!inst_ptr) return; syncpointa = gk20a_mem_rd32(inst_ptr, ram_fc_syncpointa_w()); syncpointb = gk20a_mem_rd32(inst_ptr, ram_fc_syncpointb_w()); gk20a_debug_output(o, "%d-%s, pid %d: ", ch->hw_chid, ch->g->dev->name, ch->pid); gk20a_debug_output(o, "%s in use %s %s\n", ccsr_channel_enable_v(channel) ? "" : "not", ccsr_chan_status_str[status], ccsr_channel_busy_v(channel) ? "busy" : "not busy"); gk20a_debug_output(o, "TOP: %016llx PUT: %016llx GET: %016llx " "FETCH: %016llx\nHEADER: %08x COUNT: %08x\n" "SYNCPOINT %08x %08x SEMAPHORE %08x %08x %08x %08x\n", (u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_top_level_get_w()) + ((u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_top_level_get_hi_w()) << 32ULL), (u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_put_w()) + ((u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_put_hi_w()) << 32ULL), (u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_get_w()) + ((u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_get_hi_w()) << 32ULL), (u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_fetch_w()) + ((u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_fetch_hi_w()) << 32ULL), gk20a_mem_rd32(inst_ptr, ram_fc_pb_header_w()), gk20a_mem_rd32(inst_ptr, ram_fc_pb_count_w()), syncpointa, syncpointb, gk20a_mem_rd32(inst_ptr, ram_fc_semaphorea_w()), gk20a_mem_rd32(inst_ptr, ram_fc_semaphoreb_w()), gk20a_mem_rd32(inst_ptr, ram_fc_semaphorec_w()), gk20a_mem_rd32(inst_ptr, ram_fc_semaphored_w())); #ifdef CONFIG_TEGRA_GK20A if ((pbdma_syncpointb_op_v(syncpointb) == pbdma_syncpointb_op_wait_v()) && (pbdma_syncpointb_wait_switch_v(syncpointb) == pbdma_syncpointb_wait_switch_en_v())) gk20a_debug_output(o, "%s on syncpt %u (%s) val %u\n", (status == 3 || status == 8) ? "Waiting" : "Waited", pbdma_syncpointb_syncpt_index_v(syncpointb), nvhost_syncpt_get_name(g->host1x_dev, pbdma_syncpointb_syncpt_index_v(syncpointb)), pbdma_syncpointa_payload_v(syncpointa)); #endif gk20a_debug_output(o, "\n"); }
/* Displays the current value of the sync point via sysfs */ static ssize_t syncpt_name_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { struct nvhost_syncpt_attr *syncpt_attr = container_of(attr, struct nvhost_syncpt_attr, attr); if (syncpt_attr->id < 0) return snprintf(buf, PAGE_SIZE, "\n"); return snprintf(buf, PAGE_SIZE, "%s\n", nvhost_syncpt_get_name(syncpt_attr->host->dev, syncpt_attr->id)); }