diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 51 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/pmu_gk20a.h | 2 |
2 files changed, 3 insertions, 50 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c index 7fe25190..ce965992 100644 --- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | |||
@@ -104,51 +104,6 @@ static void printtrace(struct nvgpu_pmu *pmu) | |||
104 | nvgpu_kfree(g, tracebuffer); | 104 | nvgpu_kfree(g, tracebuffer); |
105 | } | 105 | } |
106 | 106 | ||
107 | |||
108 | void pmu_copy_from_dmem(struct nvgpu_pmu *pmu, | ||
109 | u32 src, u8 *dst, u32 size, u8 port) | ||
110 | { | ||
111 | struct gk20a *g = gk20a_from_pmu(pmu); | ||
112 | u32 i, words, bytes; | ||
113 | u32 data, addr_mask; | ||
114 | u32 *dst_u32 = (u32*)dst; | ||
115 | |||
116 | if (size == 0) { | ||
117 | nvgpu_err(g, "size is zero"); | ||
118 | return; | ||
119 | } | ||
120 | |||
121 | if (src & 0x3) { | ||
122 | nvgpu_err(g, "src (0x%08x) not 4-byte aligned", src); | ||
123 | return; | ||
124 | } | ||
125 | |||
126 | nvgpu_mutex_acquire(&pmu->pmu_copy_lock); | ||
127 | |||
128 | words = size >> 2; | ||
129 | bytes = size & 0x3; | ||
130 | |||
131 | addr_mask = pwr_falcon_dmemc_offs_m() | | ||
132 | pwr_falcon_dmemc_blk_m(); | ||
133 | |||
134 | src &= addr_mask; | ||
135 | |||
136 | gk20a_writel(g, pwr_falcon_dmemc_r(port), | ||
137 | src | pwr_falcon_dmemc_aincr_f(1)); | ||
138 | |||
139 | for (i = 0; i < words; i++) | ||
140 | dst_u32[i] = gk20a_readl(g, pwr_falcon_dmemd_r(port)); | ||
141 | |||
142 | if (bytes > 0) { | ||
143 | data = gk20a_readl(g, pwr_falcon_dmemd_r(port)); | ||
144 | for (i = 0; i < bytes; i++) { | ||
145 | dst[(words << 2) + i] = ((u8 *)&data)[i]; | ||
146 | } | ||
147 | } | ||
148 | nvgpu_mutex_release(&pmu->pmu_copy_lock); | ||
149 | return; | ||
150 | } | ||
151 | |||
152 | void pmu_copy_to_dmem(struct nvgpu_pmu *pmu, | 107 | void pmu_copy_to_dmem(struct nvgpu_pmu *pmu, |
153 | u32 dst, u8 *src, u32 size, u8 port) | 108 | u32 dst, u8 *src, u32 size, u8 port) |
154 | { | 109 | { |
@@ -812,7 +767,7 @@ void pmu_dump_elpg_stats(struct nvgpu_pmu *pmu) | |||
812 | struct gk20a *g = gk20a_from_pmu(pmu); | 767 | struct gk20a *g = gk20a_from_pmu(pmu); |
813 | struct pmu_pg_stats stats; | 768 | struct pmu_pg_stats stats; |
814 | 769 | ||
815 | pmu_copy_from_dmem(pmu, | 770 | nvgpu_flcn_copy_from_dmem(pmu->flcn, |
816 | pmu->stat_dmem_offset[PMU_PG_ELPG_ENGINE_ID_GRAPHICS], | 771 | pmu->stat_dmem_offset[PMU_PG_ELPG_ENGINE_ID_GRAPHICS], |
817 | (u8 *)&stats, sizeof(struct pmu_pg_stats), 0); | 772 | (u8 *)&stats, sizeof(struct pmu_pg_stats), 0); |
818 | 773 | ||
@@ -845,7 +800,7 @@ void pmu_dump_elpg_stats(struct nvgpu_pmu *pmu) | |||
845 | Turn on PG_DEBUG in ucode and locate symbol "ElpgLog" offset | 800 | Turn on PG_DEBUG in ucode and locate symbol "ElpgLog" offset |
846 | in .nm file, e.g. 0x1000066c. use 0x66c. | 801 | in .nm file, e.g. 0x1000066c. use 0x66c. |
847 | u32 i, val[20]; | 802 | u32 i, val[20]; |
848 | pmu_copy_from_dmem(pmu, 0x66c, | 803 | nvgpu_flcn_copy_from_dmem(pmu->flcn, 0x66c, |
849 | (u8 *)val, sizeof(val), 0); | 804 | (u8 *)val, sizeof(val), 0); |
850 | gk20a_dbg_pmu("elpg log begin"); | 805 | gk20a_dbg_pmu("elpg log begin"); |
851 | for (i = 0; i < 20; i++) | 806 | for (i = 0; i < 20; i++) |
@@ -1150,7 +1105,7 @@ void gk20a_pmu_elpg_statistics(struct gk20a *g, u32 pg_engine_id, | |||
1150 | struct nvgpu_pmu *pmu = &g->pmu; | 1105 | struct nvgpu_pmu *pmu = &g->pmu; |
1151 | struct pmu_pg_stats stats; | 1106 | struct pmu_pg_stats stats; |
1152 | 1107 | ||
1153 | pmu_copy_from_dmem(pmu, | 1108 | nvgpu_flcn_copy_from_dmem(pmu->flcn, |
1154 | pmu->stat_dmem_offset[pg_engine_id], | 1109 | pmu->stat_dmem_offset[pg_engine_id], |
1155 | (u8 *)&stats, sizeof(struct pmu_pg_stats), 0); | 1110 | (u8 *)&stats, sizeof(struct pmu_pg_stats), 0); |
1156 | 1111 | ||
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h index 147458af..8f337855 100644 --- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h | |||
@@ -58,8 +58,6 @@ void gk20a_init_pmu_ops(struct gpu_ops *gops); | |||
58 | 58 | ||
59 | void pmu_copy_to_dmem(struct nvgpu_pmu *pmu, | 59 | void pmu_copy_to_dmem(struct nvgpu_pmu *pmu, |
60 | u32 dst, u8 *src, u32 size, u8 port); | 60 | u32 dst, u8 *src, u32 size, u8 port); |
61 | void pmu_copy_from_dmem(struct nvgpu_pmu *pmu, | ||
62 | u32 src, u8 *dst, u32 size, u8 port); | ||
63 | int pmu_bootstrap(struct nvgpu_pmu *pmu); | 61 | int pmu_bootstrap(struct nvgpu_pmu *pmu); |
64 | 62 | ||
65 | void pmu_dump_elpg_stats(struct nvgpu_pmu *pmu); | 63 | void pmu_dump_elpg_stats(struct nvgpu_pmu *pmu); |