diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2015-02-05 13:05:56 -0500 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-04-04 21:05:22 -0400 |
commit | 24ddf71b9009291b829e6c30eb1b22e8838f7367 (patch) | |
tree | 0a2816a1f813c17c32c51390f1d9311f7e95cc4d /drivers/gpu/nvgpu/gk20a/mc_gk20a.c | |
parent | 5b6e8995b2a3d399a8cc7fd249301122053666e1 (diff) |
gpu: nvgpu: Use busy looping on memory ops
Use busy looping on L2 and TLB maintenance operations. This speeds
them up by an order of magnitude.
Add also trace points to measure performance for memory ops and
interrupt processing.
Change-Id: Ic4a8525d3d946b2b8f57b4b8ddcfc61605619399
Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-on: http://git-master/r/681640
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mc_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mc_gk20a.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mc_gk20a.c b/drivers/gpu/nvgpu/gk20a/mc_gk20a.c index 9f9e756b..86fea3a1 100644 --- a/drivers/gpu/nvgpu/gk20a/mc_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mc_gk20a.c | |||
@@ -14,6 +14,7 @@ | |||
14 | */ | 14 | */ |
15 | 15 | ||
16 | #include <linux/types.h> | 16 | #include <linux/types.h> |
17 | #include <trace/events/gk20a.h> | ||
17 | 18 | ||
18 | #include "gk20a.h" | 19 | #include "gk20a.h" |
19 | #include "mc_gk20a.h" | 20 | #include "mc_gk20a.h" |
@@ -23,6 +24,8 @@ irqreturn_t mc_gk20a_isr_stall(struct gk20a *g) | |||
23 | { | 24 | { |
24 | u32 mc_intr_0; | 25 | u32 mc_intr_0; |
25 | 26 | ||
27 | trace_mc_gk20a_intr_stall(g->dev->name); | ||
28 | |||
26 | if (!g->power_on) | 29 | if (!g->power_on) |
27 | return IRQ_NONE; | 30 | return IRQ_NONE; |
28 | 31 | ||
@@ -37,6 +40,8 @@ irqreturn_t mc_gk20a_isr_stall(struct gk20a *g) | |||
37 | /* flush previous write */ | 40 | /* flush previous write */ |
38 | gk20a_readl(g, mc_intr_en_0_r()); | 41 | gk20a_readl(g, mc_intr_en_0_r()); |
39 | 42 | ||
43 | trace_mc_gk20a_intr_stall_done(g->dev->name); | ||
44 | |||
40 | return IRQ_WAKE_THREAD; | 45 | return IRQ_WAKE_THREAD; |
41 | } | 46 | } |
42 | 47 | ||
@@ -67,6 +72,8 @@ irqreturn_t mc_gk20a_intr_thread_stall(struct gk20a *g) | |||
67 | 72 | ||
68 | gk20a_dbg(gpu_dbg_intr, "interrupt thread launched"); | 73 | gk20a_dbg(gpu_dbg_intr, "interrupt thread launched"); |
69 | 74 | ||
75 | trace_mc_gk20a_intr_thread_stall(g->dev->name); | ||
76 | |||
70 | mc_intr_0 = gk20a_readl(g, mc_intr_0_r()); | 77 | mc_intr_0 = gk20a_readl(g, mc_intr_0_r()); |
71 | 78 | ||
72 | gk20a_dbg(gpu_dbg_intr, "stall intr %08x\n", mc_intr_0); | 79 | gk20a_dbg(gpu_dbg_intr, "stall intr %08x\n", mc_intr_0); |
@@ -92,6 +99,8 @@ irqreturn_t mc_gk20a_intr_thread_stall(struct gk20a *g) | |||
92 | /* flush previous write */ | 99 | /* flush previous write */ |
93 | gk20a_readl(g, mc_intr_en_0_r()); | 100 | gk20a_readl(g, mc_intr_en_0_r()); |
94 | 101 | ||
102 | trace_mc_gk20a_intr_thread_stall_done(g->dev->name); | ||
103 | |||
95 | return IRQ_HANDLED; | 104 | return IRQ_HANDLED; |
96 | } | 105 | } |
97 | 106 | ||