summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu
diff options
context:
space:
mode:
authorMahantesh Kumbar <mkumbar@nvidia.com>2017-06-21 13:24:28 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-06-27 06:57:53 -0400
commit411865675521ee379c3b9016b8c455b412c1f6eb (patch)
tree3022b6a3bc8b935c8636fc4194a83c9465c7df0e /drivers/gpu/nvgpu
parentb7b38d1cd6177dec55de993b4d674948d7c587ef (diff)
gpu: nvgpu: use nvgpu_flcn_copy_from_dmem()
- replace usage of pmu_copy_from_dmem() with nvgpu_flcn_copy_from_dmem() - delete nvgpu_flcn_copy_from_dmem() JIRA NVGPU-99 Change-Id: If0919187078f95a165d6a152f180549ac121beaa Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com> Reviewed-on: https://git-master/r/1506534 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r--drivers/gpu/nvgpu/common/pmu/pmu.c6
-rw-r--r--drivers/gpu/nvgpu/common/pmu/pmu_ipc.c4
-rw-r--r--drivers/gpu/nvgpu/common/pmu/pmu_perfmon.c3
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c51
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.h2
-rw-r--r--drivers/gpu/nvgpu/gp106/pmu_gp106.c2
-rw-r--r--drivers/gpu/nvgpu/gp10b/pmu_gp10b.c2
7 files changed, 12 insertions, 58 deletions
diff --git a/drivers/gpu/nvgpu/common/pmu/pmu.c b/drivers/gpu/nvgpu/common/pmu/pmu.c
index 35422e0d..eb1c83fb 100644
--- a/drivers/gpu/nvgpu/common/pmu/pmu.c
+++ b/drivers/gpu/nvgpu/common/pmu/pmu.c
@@ -193,14 +193,14 @@ int nvgpu_pmu_process_init_msg(struct nvgpu_pmu *pmu,
193 193
194 g->ops.pmu.pmu_msgq_tail(pmu, &tail, QUEUE_GET); 194 g->ops.pmu.pmu_msgq_tail(pmu, &tail, QUEUE_GET);
195 195
196 pmu_copy_from_dmem(pmu, tail, 196 nvgpu_flcn_copy_from_dmem(pmu->flcn, tail,
197 (u8 *)&msg->hdr, PMU_MSG_HDR_SIZE, 0); 197 (u8 *)&msg->hdr, PMU_MSG_HDR_SIZE, 0);
198 if (msg->hdr.unit_id != PMU_UNIT_INIT) { 198 if (msg->hdr.unit_id != PMU_UNIT_INIT) {
199 nvgpu_err(g, "expecting init msg"); 199 nvgpu_err(g, "expecting init msg");
200 return -EINVAL; 200 return -EINVAL;
201 } 201 }
202 202
203 pmu_copy_from_dmem(pmu, tail + PMU_MSG_HDR_SIZE, 203 nvgpu_flcn_copy_from_dmem(pmu->flcn, tail + PMU_MSG_HDR_SIZE,
204 (u8 *)&msg->msg, msg->hdr.size - PMU_MSG_HDR_SIZE, 0); 204 (u8 *)&msg->msg, msg->hdr.size - PMU_MSG_HDR_SIZE, 0);
205 205
206 if (msg->msg.init.msg_type != PMU_INIT_MSG_TYPE_PMU_INIT) { 206 if (msg->msg.init.msg_type != PMU_INIT_MSG_TYPE_PMU_INIT) {
@@ -214,7 +214,7 @@ int nvgpu_pmu_process_init_msg(struct nvgpu_pmu *pmu,
214 init = pv->get_pmu_msg_pmu_init_msg_ptr(&(msg->msg.init)); 214 init = pv->get_pmu_msg_pmu_init_msg_ptr(&(msg->msg.init));
215 if (!pmu->gid_info.valid) { 215 if (!pmu->gid_info.valid) {
216 216
217 pmu_copy_from_dmem(pmu, 217 nvgpu_flcn_copy_from_dmem(pmu->flcn,
218 pv->get_pmu_init_msg_pmu_sw_mg_off(init), 218 pv->get_pmu_init_msg_pmu_sw_mg_off(init),
219 (u8 *)&gid_data, 219 (u8 *)&gid_data,
220 sizeof(struct pmu_sha1_gid_data), 0); 220 sizeof(struct pmu_sha1_gid_data), 0);
diff --git a/drivers/gpu/nvgpu/common/pmu/pmu_ipc.c b/drivers/gpu/nvgpu/common/pmu/pmu_ipc.c
index e45a6182..93687c7b 100644
--- a/drivers/gpu/nvgpu/common/pmu/pmu_ipc.c
+++ b/drivers/gpu/nvgpu/common/pmu/pmu_ipc.c
@@ -129,7 +129,7 @@ static int pmu_queue_tail(struct nvgpu_pmu *pmu, struct pmu_queue *queue,
129static inline void pmu_queue_read(struct nvgpu_pmu *pmu, 129static inline void pmu_queue_read(struct nvgpu_pmu *pmu,
130 u32 offset, u8 *dst, u32 size) 130 u32 offset, u8 *dst, u32 size)
131{ 131{
132 pmu_copy_from_dmem(pmu, offset, dst, size, 0); 132 nvgpu_flcn_copy_from_dmem(pmu->flcn, offset, dst, size, 0);
133} 133}
134 134
135static inline void pmu_queue_write(struct nvgpu_pmu *pmu, 135static inline void pmu_queue_write(struct nvgpu_pmu *pmu,
@@ -673,7 +673,7 @@ static int pmu_response_handle(struct nvgpu_pmu *pmu,
673 } 673 }
674 if (pv->pmu_allocation_get_dmem_size(pmu, 674 if (pv->pmu_allocation_get_dmem_size(pmu,
675 pv->get_pmu_seq_out_a_ptr(seq)) != 0) { 675 pv->get_pmu_seq_out_a_ptr(seq)) != 0) {
676 pmu_copy_from_dmem(pmu, 676 nvgpu_flcn_copy_from_dmem(pmu->flcn,
677 pv->pmu_allocation_get_dmem_offset(pmu, 677 pv->pmu_allocation_get_dmem_offset(pmu,
678 pv->get_pmu_seq_out_a_ptr(seq)), 678 pv->get_pmu_seq_out_a_ptr(seq)),
679 seq->out_payload, 679 seq->out_payload,
diff --git a/drivers/gpu/nvgpu/common/pmu/pmu_perfmon.c b/drivers/gpu/nvgpu/common/pmu/pmu_perfmon.c
index 9f236aa8..750906ce 100644
--- a/drivers/gpu/nvgpu/common/pmu/pmu_perfmon.c
+++ b/drivers/gpu/nvgpu/common/pmu/pmu_perfmon.c
@@ -204,7 +204,8 @@ int nvgpu_pmu_load_update(struct gk20a *g)
204 return 0; 204 return 0;
205 } 205 }
206 206
207 pmu_copy_from_dmem(pmu, pmu->sample_buffer, (u8 *)&load, 2, 0); 207 nvgpu_flcn_copy_from_dmem(pmu->flcn, pmu->sample_buffer,
208 (u8 *)&load, 2, 0);
208 pmu->load_shadow = load / 10; 209 pmu->load_shadow = load / 10;
209 pmu->load_avg = (((9*pmu->load_avg) + pmu->load_shadow) / 10); 210 pmu->load_avg = (((9*pmu->load_avg) + pmu->load_shadow) / 10);
210 211
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
108void 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
152void pmu_copy_to_dmem(struct nvgpu_pmu *pmu, 107void 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
59void pmu_copy_to_dmem(struct nvgpu_pmu *pmu, 59void 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);
61void pmu_copy_from_dmem(struct nvgpu_pmu *pmu,
62 u32 src, u8 *dst, u32 size, u8 port);
63int pmu_bootstrap(struct nvgpu_pmu *pmu); 61int pmu_bootstrap(struct nvgpu_pmu *pmu);
64 62
65void pmu_dump_elpg_stats(struct nvgpu_pmu *pmu); 63void pmu_dump_elpg_stats(struct nvgpu_pmu *pmu);
diff --git a/drivers/gpu/nvgpu/gp106/pmu_gp106.c b/drivers/gpu/nvgpu/gp106/pmu_gp106.c
index 9b169c38..88d68220 100644
--- a/drivers/gpu/nvgpu/gp106/pmu_gp106.c
+++ b/drivers/gpu/nvgpu/gp106/pmu_gp106.c
@@ -265,7 +265,7 @@ void gp106_pmu_elpg_statistics(struct gk20a *g, u32 pg_engine_id,
265 struct nvgpu_pmu *pmu = &g->pmu; 265 struct nvgpu_pmu *pmu = &g->pmu;
266 struct pmu_pg_stats_v2 stats; 266 struct pmu_pg_stats_v2 stats;
267 267
268 pmu_copy_from_dmem(pmu, 268 nvgpu_flcn_copy_from_dmem(pmu->flcn,
269 pmu->stat_dmem_offset[pg_engine_id], 269 pmu->stat_dmem_offset[pg_engine_id],
270 (u8 *)&stats, sizeof(struct pmu_pg_stats_v2), 0); 270 (u8 *)&stats, sizeof(struct pmu_pg_stats_v2), 0);
271 271
diff --git a/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c b/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c
index a113d22e..3d02f475 100644
--- a/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c
@@ -257,7 +257,7 @@ static void gp10b_pmu_elpg_statistics(struct gk20a *g, u32 pg_engine_id,
257 struct nvgpu_pmu *pmu = &g->pmu; 257 struct nvgpu_pmu *pmu = &g->pmu;
258 struct pmu_pg_stats_v1 stats; 258 struct pmu_pg_stats_v1 stats;
259 259
260 pmu_copy_from_dmem(pmu, 260 nvgpu_flcn_copy_from_dmem(pmu->flcn,
261 pmu->stat_dmem_offset[pg_engine_id], 261 pmu->stat_dmem_offset[pg_engine_id],
262 (u8 *)&stats, sizeof(struct pmu_pg_stats_v1), 0); 262 (u8 *)&stats, sizeof(struct pmu_pg_stats_v1), 0);
263 263