diff options
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | 116 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/fifo_gk20a.h | 5 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/hw_top_gk20a.h | 30 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mc_gk20a.c | 8 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/fifo_gm20b.c | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/hw_top_gm20b.h | 30 |
7 files changed, 134 insertions, 57 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c index cdbb4a6c..6ee73ffe 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | |||
@@ -68,6 +68,20 @@ static inline u32 gk20a_mmu_id_to_engine_id(u32 engine_id) | |||
68 | } | 68 | } |
69 | } | 69 | } |
70 | 70 | ||
71 | int gk20a_fifo_engine_enum_from_type(struct gk20a *g, u32 engine_type) | ||
72 | { | ||
73 | int ret = ENGINE_INVAL_GK20A; | ||
74 | |||
75 | gk20a_dbg_info("engine type %d", engine_type); | ||
76 | if (engine_type == top_device_info_type_enum_graphics_v()) | ||
77 | ret = ENGINE_GR_GK20A; | ||
78 | else if (engine_type == top_device_info_type_enum_copy2_v()) | ||
79 | ret = ENGINE_CE2_GK20A; | ||
80 | else | ||
81 | gk20a_err(g->dev, "unknown engine %d", engine_type); | ||
82 | |||
83 | return ret; | ||
84 | } | ||
71 | 85 | ||
72 | static int init_engine_info(struct fifo_gk20a *f) | 86 | static int init_engine_info(struct fifo_gk20a *f) |
73 | { | 87 | { |
@@ -75,6 +89,12 @@ static int init_engine_info(struct fifo_gk20a *f) | |||
75 | struct device *d = dev_from_gk20a(g); | 89 | struct device *d = dev_from_gk20a(g); |
76 | u32 i; | 90 | u32 i; |
77 | u32 max_info_entries = top_device_info__size_1_v(); | 91 | u32 max_info_entries = top_device_info__size_1_v(); |
92 | u32 engine_enum = ENGINE_INVAL_GK20A; | ||
93 | u32 engine_id = ~0; | ||
94 | u32 runlist_id = ~0; | ||
95 | u32 pbdma_id = ~0; | ||
96 | u32 intr_id = ~0; | ||
97 | u32 reset_id = ~0; | ||
78 | 98 | ||
79 | gk20a_dbg_fn(""); | 99 | gk20a_dbg_fn(""); |
80 | 100 | ||
@@ -83,57 +103,71 @@ static int init_engine_info(struct fifo_gk20a *f) | |||
83 | f->num_engines = 2; | 103 | f->num_engines = 2; |
84 | 104 | ||
85 | for (i = 0; i < max_info_entries; i++) { | 105 | for (i = 0; i < max_info_entries; i++) { |
86 | struct fifo_engine_info_gk20a *info = NULL; | ||
87 | u32 table_entry = gk20a_readl(f->g, top_device_info_r(i)); | 106 | u32 table_entry = gk20a_readl(f->g, top_device_info_r(i)); |
88 | u32 entry = top_device_info_entry_v(table_entry); | 107 | u32 entry = top_device_info_entry_v(table_entry); |
89 | u32 engine_enum; | ||
90 | int pbdma_id; | ||
91 | u32 runlist_bit; | 108 | u32 runlist_bit; |
92 | 109 | ||
93 | if (entry != top_device_info_entry_enum_v()) | 110 | if (entry == top_device_info_entry_enum_v()) { |
94 | continue; | 111 | if (top_device_info_engine_v(table_entry)) { |
112 | engine_id = | ||
113 | top_device_info_engine_enum_v(table_entry); | ||
114 | gk20a_dbg_info("info: engine_id %d", | ||
115 | top_device_info_engine_enum_v(table_entry)); | ||
116 | } | ||
95 | 117 | ||
96 | /* we only care about GR engine here */ | ||
97 | engine_enum = top_device_info_engine_enum_v(table_entry); | ||
98 | if (engine_enum >= ENGINE_INVAL_GK20A) | ||
99 | continue; | ||
100 | 118 | ||
101 | gk20a_dbg_info("info: engine_id %d", | 119 | if (top_device_info_runlist_v(table_entry)) { |
102 | top_device_info_engine_enum_v(table_entry)); | 120 | runlist_id = |
103 | info = &g->fifo.engine_info[engine_enum]; | 121 | top_device_info_runlist_enum_v(table_entry); |
122 | gk20a_dbg_info("gr info: runlist_id %d", runlist_id); | ||
104 | 123 | ||
105 | info->runlist_id = | 124 | runlist_bit = BIT(runlist_id); |
106 | top_device_info_runlist_enum_v(table_entry); | ||
107 | gk20a_dbg_info("gr info: runlist_id %d", info->runlist_id); | ||
108 | 125 | ||
109 | info->engine_id = | 126 | for (pbdma_id = 0; pbdma_id < f->num_pbdma; pbdma_id++) { |
110 | top_device_info_engine_enum_v(table_entry); | 127 | gk20a_dbg_info("gr info: pbdma_map[%d]=%d", |
111 | gk20a_dbg_info("gr info: engine_id %d", info->engine_id); | 128 | pbdma_id, f->pbdma_map[pbdma_id]); |
129 | if (f->pbdma_map[pbdma_id] & runlist_bit) | ||
130 | break; | ||
131 | } | ||
112 | 132 | ||
113 | runlist_bit = 1 << info->runlist_id; | 133 | if (pbdma_id == f->num_pbdma) { |
134 | gk20a_err(d, "busted pbdma map"); | ||
135 | return -EINVAL; | ||
136 | } | ||
137 | } | ||
114 | 138 | ||
115 | for (pbdma_id = 0; pbdma_id < f->num_pbdma; pbdma_id++) { | 139 | if (top_device_info_intr_v(table_entry)) { |
116 | gk20a_dbg_info("gr info: pbdma_map[%d]=%d", | 140 | intr_id = |
117 | pbdma_id, f->pbdma_map[pbdma_id]); | 141 | top_device_info_intr_enum_v(table_entry); |
118 | if (f->pbdma_map[pbdma_id] & runlist_bit) | 142 | gk20a_dbg_info("gr info: intr_id %d", intr_id); |
119 | break; | 143 | } |
120 | } | ||
121 | 144 | ||
122 | if (pbdma_id == f->num_pbdma) { | 145 | if (top_device_info_reset_v(table_entry)) { |
123 | gk20a_err(d, "busted pbmda map"); | 146 | reset_id = |
124 | return -EINVAL; | 147 | top_device_info_reset_enum_v(table_entry); |
148 | gk20a_dbg_info("gr info: reset_id %d", | ||
149 | reset_id); | ||
150 | } | ||
151 | } else if (entry == top_device_info_entry_engine_type_v()) { | ||
152 | u32 engine_type = | ||
153 | top_device_info_type_enum_v(table_entry); | ||
154 | engine_enum = | ||
155 | g->ops.fifo.engine_enum_from_type(g, engine_type); | ||
125 | } | 156 | } |
126 | info->pbdma_id = pbdma_id; | ||
127 | 157 | ||
128 | info->intr_id = | 158 | if (!top_device_info_chain_v(table_entry)) { |
129 | top_device_info_intr_enum_v(table_entry); | 159 | if (engine_enum < ENGINE_INVAL_GK20A) { |
130 | gk20a_dbg_info("gr info: intr_id %d", info->intr_id); | 160 | struct fifo_engine_info_gk20a *info = |
161 | &g->fifo.engine_info[engine_enum]; | ||
131 | 162 | ||
132 | info->reset_id = | 163 | info->intr_mask |= BIT(intr_id); |
133 | top_device_info_reset_enum_v(table_entry); | 164 | info->reset_mask |= BIT(reset_id); |
134 | gk20a_dbg_info("gr info: reset_id %d", | 165 | info->runlist_id = runlist_id; |
135 | info->reset_id); | 166 | info->pbdma_id = pbdma_id; |
136 | 167 | ||
168 | engine_enum = ENGINE_INVAL_GK20A; | ||
169 | } | ||
170 | } | ||
137 | } | 171 | } |
138 | 172 | ||
139 | return 0; | 173 | return 0; |
@@ -145,13 +179,12 @@ u32 gk20a_fifo_engine_interrupt_mask(struct gk20a *g) | |||
145 | int i = 0; | 179 | int i = 0; |
146 | 180 | ||
147 | for (i = 0; i < g->fifo.max_engines; i++) { | 181 | for (i = 0; i < g->fifo.max_engines; i++) { |
148 | u32 intr_id = g->fifo.engine_info[i].intr_id; | 182 | u32 intr_mask = g->fifo.engine_info[i].intr_mask; |
149 | if (i == ENGINE_CE2_GK20A && | 183 | if (i == ENGINE_CE2_GK20A && |
150 | (!g->ops.ce2.isr_stall || !g->ops.ce2.isr_nonstall)) | 184 | (!g->ops.ce2.isr_stall || !g->ops.ce2.isr_nonstall)) |
151 | continue; | 185 | continue; |
152 | 186 | ||
153 | if (intr_id) | 187 | eng_intr_mask |= intr_mask; |
154 | eng_intr_mask |= BIT(intr_id); | ||
155 | } | 188 | } |
156 | 189 | ||
157 | return eng_intr_mask; | 190 | return eng_intr_mask; |
@@ -771,7 +804,7 @@ void gk20a_fifo_reset_engine(struct gk20a *g, u32 engine_id) | |||
771 | { | 804 | { |
772 | gk20a_dbg_fn(""); | 805 | gk20a_dbg_fn(""); |
773 | 806 | ||
774 | if (engine_id == top_device_info_type_enum_graphics_v()) { | 807 | if (engine_id == ENGINE_GR_GK20A) { |
775 | if (support_gk20a_pmu(g->dev) && g->elpg_enabled) | 808 | if (support_gk20a_pmu(g->dev) && g->elpg_enabled) |
776 | gk20a_pmu_disable_elpg(g); | 809 | gk20a_pmu_disable_elpg(g); |
777 | /*HALT_PIPELINE method, halt GR engine*/ | 810 | /*HALT_PIPELINE method, halt GR engine*/ |
@@ -788,7 +821,7 @@ void gk20a_fifo_reset_engine(struct gk20a *g, u32 engine_id) | |||
788 | if (support_gk20a_pmu(g->dev) && g->elpg_enabled) | 821 | if (support_gk20a_pmu(g->dev) && g->elpg_enabled) |
789 | gk20a_pmu_enable_elpg(g); | 822 | gk20a_pmu_enable_elpg(g); |
790 | } | 823 | } |
791 | if (engine_id == top_device_info_type_enum_copy0_v()) | 824 | if (engine_id == ENGINE_CE2_GK20A) |
792 | gk20a_reset(g, mc_enable_ce2_m()); | 825 | gk20a_reset(g, mc_enable_ce2_m()); |
793 | } | 826 | } |
794 | 827 | ||
@@ -2694,4 +2727,5 @@ void gk20a_init_fifo(struct gpu_ops *gops) | |||
2694 | gops->fifo.get_pbdma_signature = gk20a_fifo_get_pbdma_signature; | 2727 | gops->fifo.get_pbdma_signature = gk20a_fifo_get_pbdma_signature; |
2695 | gops->fifo.set_runlist_interleave = gk20a_fifo_set_runlist_interleave; | 2728 | gops->fifo.set_runlist_interleave = gk20a_fifo_set_runlist_interleave; |
2696 | gops->fifo.force_reset_ch = gk20a_fifo_force_reset_ch; | 2729 | gops->fifo.force_reset_ch = gk20a_fifo_force_reset_ch; |
2730 | gops->fifo.engine_enum_from_type = gk20a_fifo_engine_enum_from_type; | ||
2697 | } | 2731 | } |
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h index c95ba71c..e795eba0 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h | |||
@@ -79,8 +79,8 @@ struct fifo_mmu_fault_info_gk20a { | |||
79 | struct fifo_engine_info_gk20a { | 79 | struct fifo_engine_info_gk20a { |
80 | u32 engine_id; | 80 | u32 engine_id; |
81 | u32 runlist_id; | 81 | u32 runlist_id; |
82 | u32 intr_id; | 82 | u32 intr_mask; |
83 | u32 reset_id; | 83 | u32 reset_mask; |
84 | u32 pbdma_id; | 84 | u32 pbdma_id; |
85 | struct fifo_pbdma_exception_info_gk20a pbdma_exception_info; | 85 | struct fifo_pbdma_exception_info_gk20a pbdma_exception_info; |
86 | struct fifo_engine_exception_info_gk20a engine_exception_info; | 86 | struct fifo_engine_exception_info_gk20a engine_exception_info; |
@@ -222,5 +222,6 @@ void gk20a_fifo_debugfs_init(struct device *dev); | |||
222 | 222 | ||
223 | const char *gk20a_fifo_interleave_level_name(u32 interleave_level); | 223 | const char *gk20a_fifo_interleave_level_name(u32 interleave_level); |
224 | 224 | ||
225 | int gk20a_fifo_engine_enum_from_type(struct gk20a *g, u32 engine_type); | ||
225 | 226 | ||
226 | #endif /*__GR_GK20A_H__*/ | 227 | #endif /*__GR_GK20A_H__*/ |
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 5d06a441..d5310b02 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h | |||
@@ -330,6 +330,7 @@ struct gpu_ops { | |||
330 | int (*channel_set_timeslice)(struct channel_gk20a *ch, | 330 | int (*channel_set_timeslice)(struct channel_gk20a *ch, |
331 | u32 timeslice); | 331 | u32 timeslice); |
332 | int (*force_reset_ch)(struct channel_gk20a *ch, bool verbose); | 332 | int (*force_reset_ch)(struct channel_gk20a *ch, bool verbose); |
333 | int (*engine_enum_from_type)(struct gk20a *g, u32 engine_type); | ||
333 | } fifo; | 334 | } fifo; |
334 | struct pmu_v { | 335 | struct pmu_v { |
335 | /*used for change of enum zbc update cmd id from ver 0 to ver1*/ | 336 | /*used for change of enum zbc update cmd id from ver 0 to ver1*/ |
diff --git a/drivers/gpu/nvgpu/gk20a/hw_top_gk20a.h b/drivers/gpu/nvgpu/gk20a/hw_top_gk20a.h index 35d9d347..6981cf71 100644 --- a/drivers/gpu/nvgpu/gk20a/hw_top_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/hw_top_gk20a.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2012-2015, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2012-2016, NVIDIA CORPORATION. All rights reserved. |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
5 | * under the terms and conditions of the GNU General Public License, | 5 | * under the terms and conditions of the GNU General Public License, |
@@ -118,13 +118,29 @@ static inline u32 top_device_info_type_enum_graphics_f(void) | |||
118 | { | 118 | { |
119 | return 0x0; | 119 | return 0x0; |
120 | } | 120 | } |
121 | static inline u32 top_device_info_type_enum_copy0_v(void) | 121 | static inline u32 top_device_info_type_enum_copy2_v(void) |
122 | { | 122 | { |
123 | return 0x00000001; | 123 | return 0x00000003; |
124 | } | ||
125 | static inline u32 top_device_info_type_enum_copy2_f(void) | ||
126 | { | ||
127 | return 0xc; | ||
124 | } | 128 | } |
125 | static inline u32 top_device_info_type_enum_copy0_f(void) | 129 | static inline u32 top_device_info_engine_v(u32 r) |
126 | { | 130 | { |
127 | return 0x4; | 131 | return (r >> 5) & 0x1; |
132 | } | ||
133 | static inline u32 top_device_info_runlist_v(u32 r) | ||
134 | { | ||
135 | return (r >> 4) & 0x1; | ||
136 | } | ||
137 | static inline u32 top_device_info_intr_v(u32 r) | ||
138 | { | ||
139 | return (r >> 3) & 0x1; | ||
140 | } | ||
141 | static inline u32 top_device_info_reset_v(u32 r) | ||
142 | { | ||
143 | return (r >> 2) & 0x1; | ||
128 | } | 144 | } |
129 | static inline u32 top_device_info_entry_v(u32 r) | 145 | static inline u32 top_device_info_entry_v(u32 r) |
130 | { | 146 | { |
@@ -138,6 +154,10 @@ static inline u32 top_device_info_entry_enum_v(void) | |||
138 | { | 154 | { |
139 | return 0x00000002; | 155 | return 0x00000002; |
140 | } | 156 | } |
157 | static inline u32 top_device_info_entry_engine_type_v(void) | ||
158 | { | ||
159 | return 0x00000003; | ||
160 | } | ||
141 | static inline u32 top_fs_status_fbp_r(void) | 161 | static inline u32 top_fs_status_fbp_r(void) |
142 | { | 162 | { |
143 | return 0x00022548; | 163 | return 0x00022548; |
diff --git a/drivers/gpu/nvgpu/gk20a/mc_gk20a.c b/drivers/gpu/nvgpu/gk20a/mc_gk20a.c index fe6448c9..70da7a02 100644 --- a/drivers/gpu/nvgpu/gk20a/mc_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mc_gk20a.c | |||
@@ -84,9 +84,9 @@ irqreturn_t mc_gk20a_intr_thread_stall(struct gk20a *g) | |||
84 | 84 | ||
85 | gk20a_dbg(gpu_dbg_intr, "stall intr %08x\n", mc_intr_0); | 85 | gk20a_dbg(gpu_dbg_intr, "stall intr %08x\n", mc_intr_0); |
86 | 86 | ||
87 | if (mc_intr_0 & BIT(g->fifo.engine_info[ENGINE_GR_GK20A].intr_id)) | 87 | if (mc_intr_0 & g->fifo.engine_info[ENGINE_GR_GK20A].intr_mask) |
88 | gr_gk20a_elpg_protected_call(g, gk20a_gr_isr(g)); | 88 | gr_gk20a_elpg_protected_call(g, gk20a_gr_isr(g)); |
89 | if (mc_intr_0 & BIT(g->fifo.engine_info[ENGINE_CE2_GK20A].intr_id) | 89 | if (mc_intr_0 & g->fifo.engine_info[ENGINE_CE2_GK20A].intr_mask |
90 | && g->ops.ce2.isr_stall) | 90 | && g->ops.ce2.isr_stall) |
91 | g->ops.ce2.isr_stall(g); | 91 | g->ops.ce2.isr_stall(g); |
92 | if (mc_intr_0 & mc_intr_0_pfifo_pending_f()) | 92 | if (mc_intr_0 & mc_intr_0_pfifo_pending_f()) |
@@ -132,9 +132,9 @@ irqreturn_t mc_gk20a_intr_thread_nonstall(struct gk20a *g) | |||
132 | gk20a_fifo_nonstall_isr(g); | 132 | gk20a_fifo_nonstall_isr(g); |
133 | if (mc_intr_1 & mc_intr_0_priv_ring_pending_f()) | 133 | if (mc_intr_1 & mc_intr_0_priv_ring_pending_f()) |
134 | gk20a_priv_ring_isr(g); | 134 | gk20a_priv_ring_isr(g); |
135 | if (mc_intr_1 & BIT(g->fifo.engine_info[ENGINE_GR_GK20A].intr_id)) | 135 | if (mc_intr_1 & g->fifo.engine_info[ENGINE_GR_GK20A].intr_mask) |
136 | gk20a_gr_nonstall_isr(g); | 136 | gk20a_gr_nonstall_isr(g); |
137 | if (mc_intr_1 & BIT(g->fifo.engine_info[ENGINE_CE2_GK20A].intr_id) | 137 | if (mc_intr_1 & g->fifo.engine_info[ENGINE_CE2_GK20A].intr_mask |
138 | && g->ops.ce2.isr_nonstall) | 138 | && g->ops.ce2.isr_nonstall) |
139 | g->ops.ce2.isr_nonstall(g); | 139 | g->ops.ce2.isr_nonstall(g); |
140 | 140 | ||
diff --git a/drivers/gpu/nvgpu/gm20b/fifo_gm20b.c b/drivers/gpu/nvgpu/gm20b/fifo_gm20b.c index e738b1d2..a6d953a4 100644 --- a/drivers/gpu/nvgpu/gm20b/fifo_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/fifo_gm20b.c | |||
@@ -126,4 +126,5 @@ void gm20b_init_fifo(struct gpu_ops *gops) | |||
126 | gops->fifo.get_pbdma_signature = gk20a_fifo_get_pbdma_signature; | 126 | gops->fifo.get_pbdma_signature = gk20a_fifo_get_pbdma_signature; |
127 | gops->fifo.set_runlist_interleave = gk20a_fifo_set_runlist_interleave; | 127 | gops->fifo.set_runlist_interleave = gk20a_fifo_set_runlist_interleave; |
128 | gops->fifo.force_reset_ch = gk20a_fifo_force_reset_ch; | 128 | gops->fifo.force_reset_ch = gk20a_fifo_force_reset_ch; |
129 | gops->fifo.engine_enum_from_type = gk20a_fifo_engine_enum_from_type; | ||
129 | } | 130 | } |
diff --git a/drivers/gpu/nvgpu/gm20b/hw_top_gm20b.h b/drivers/gpu/nvgpu/gm20b/hw_top_gm20b.h index c0ad007d..b0cf6579 100644 --- a/drivers/gpu/nvgpu/gm20b/hw_top_gm20b.h +++ b/drivers/gpu/nvgpu/gm20b/hw_top_gm20b.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2014-2016, NVIDIA CORPORATION. All rights reserved. |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
5 | * under the terms and conditions of the GNU General Public License, | 5 | * under the terms and conditions of the GNU General Public License, |
@@ -138,13 +138,29 @@ static inline u32 top_device_info_type_enum_graphics_f(void) | |||
138 | { | 138 | { |
139 | return 0x0; | 139 | return 0x0; |
140 | } | 140 | } |
141 | static inline u32 top_device_info_type_enum_copy0_v(void) | 141 | static inline u32 top_device_info_type_enum_copy2_v(void) |
142 | { | 142 | { |
143 | return 0x00000001; | 143 | return 0x00000003; |
144 | } | ||
145 | static inline u32 top_device_info_type_enum_copy2_f(void) | ||
146 | { | ||
147 | return 0xc; | ||
144 | } | 148 | } |
145 | static inline u32 top_device_info_type_enum_copy0_f(void) | 149 | static inline u32 top_device_info_engine_v(u32 r) |
146 | { | 150 | { |
147 | return 0x4; | 151 | return (r >> 5) & 0x1; |
152 | } | ||
153 | static inline u32 top_device_info_runlist_v(u32 r) | ||
154 | { | ||
155 | return (r >> 4) & 0x1; | ||
156 | } | ||
157 | static inline u32 top_device_info_intr_v(u32 r) | ||
158 | { | ||
159 | return (r >> 3) & 0x1; | ||
160 | } | ||
161 | static inline u32 top_device_info_reset_v(u32 r) | ||
162 | { | ||
163 | return (r >> 2) & 0x1; | ||
148 | } | 164 | } |
149 | static inline u32 top_device_info_entry_v(u32 r) | 165 | static inline u32 top_device_info_entry_v(u32 r) |
150 | { | 166 | { |
@@ -158,4 +174,8 @@ static inline u32 top_device_info_entry_enum_v(void) | |||
158 | { | 174 | { |
159 | return 0x00000002; | 175 | return 0x00000002; |
160 | } | 176 | } |
177 | static inline u32 top_device_info_entry_engine_type_v(void) | ||
178 | { | ||
179 | return 0x00000003; | ||
180 | } | ||
161 | #endif | 181 | #endif |