Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915: Remove duplicate golden render state init from execlists

Now that we use the same vfuncs for emitting the batch buffer in both
execlists and legacy, the golden render state initialisation is
identical between both.

v2: gcc wants so.ggtt_offset initialised (even though it is not used)

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1469432687-22756-28-git-send-email-chris@chris-wilson.co.uk
Link: http://patchwork.freedesktop.org/patch/msgid/1470174640-18242-19-git-send-email-chris@chris-wilson.co.uk

+28 -63
+16 -7
drivers/gpu/drm/i915/i915_gem_render_state.c
··· 28 28 #include "i915_drv.h" 29 29 #include "intel_renderstate.h" 30 30 31 + struct render_state { 32 + const struct intel_renderstate_rodata *rodata; 33 + struct drm_i915_gem_object *obj; 34 + u64 ggtt_offset; 35 + int gen; 36 + u32 aux_batch_size; 37 + u32 aux_batch_offset; 38 + }; 39 + 31 40 static const struct intel_renderstate_rodata * 32 41 render_state_get_rodata(const int gen) 33 42 { ··· 60 51 int ret; 61 52 62 53 so->gen = INTEL_GEN(dev_priv); 54 + so->ggtt_offset = 0; /* keep gcc quiet */ 63 55 so->rodata = render_state_get_rodata(so->gen); 64 56 if (so->rodata == NULL) 65 57 return 0; ··· 202 192 203 193 #undef OUT_BATCH 204 194 205 - void i915_gem_render_state_fini(struct render_state *so) 195 + static void render_state_fini(struct render_state *so) 206 196 { 207 197 i915_gem_object_ggtt_unpin(so->obj); 208 198 i915_gem_object_put(so->obj); 209 199 } 210 200 211 - int i915_gem_render_state_prepare(struct intel_engine_cs *engine, 212 - struct render_state *so) 201 + static int render_state_prepare(struct intel_engine_cs *engine, 202 + struct render_state *so) 213 203 { 214 204 int ret; 215 205 ··· 225 215 226 216 ret = render_state_setup(so); 227 217 if (ret) { 228 - i915_gem_render_state_fini(so); 218 + render_state_fini(so); 229 219 return ret; 230 220 } 231 221 ··· 237 227 struct render_state so; 238 228 int ret; 239 229 240 - ret = i915_gem_render_state_prepare(req->engine, &so); 230 + ret = render_state_prepare(req->engine, &so); 241 231 if (ret) 242 232 return ret; 243 233 ··· 261 251 } 262 252 263 253 i915_vma_move_to_active(i915_gem_obj_to_ggtt(so.obj), req); 264 - 265 254 out: 266 - i915_gem_render_state_fini(&so); 255 + render_state_fini(&so); 267 256 return ret; 268 257 }
-18
drivers/gpu/drm/i915/i915_gem_render_state.h
··· 26 26 27 27 #include <linux/types.h> 28 28 29 - struct intel_renderstate_rodata { 30 - const u32 *reloc; 31 - const u32 *batch; 32 - const u32 batch_items; 33 - }; 34 - 35 - struct render_state { 36 - const struct intel_renderstate_rodata *rodata; 37 - struct drm_i915_gem_object *obj; 38 - u64 ggtt_offset; 39 - int gen; 40 - u32 aux_batch_size; 41 - u32 aux_batch_offset; 42 - }; 43 - 44 29 int i915_gem_render_state_init(struct drm_i915_gem_request *req); 45 - void i915_gem_render_state_fini(struct render_state *so); 46 - int i915_gem_render_state_prepare(struct intel_engine_cs *engine, 47 - struct render_state *so); 48 30 49 31 #endif /* _I915_GEM_RENDER_STATE_H_ */
+1 -33
drivers/gpu/drm/i915/intel_lrc.c
··· 1796 1796 return intel_logical_ring_advance(request); 1797 1797 } 1798 1798 1799 - static int intel_lr_context_render_state_init(struct drm_i915_gem_request *req) 1800 - { 1801 - struct render_state so; 1802 - int ret; 1803 - 1804 - ret = i915_gem_render_state_prepare(req->engine, &so); 1805 - if (ret) 1806 - return ret; 1807 - 1808 - if (so.rodata == NULL) 1809 - return 0; 1810 - 1811 - ret = req->engine->emit_bb_start(req, so.ggtt_offset, 1812 - so.rodata->batch_items * 4, 1813 - I915_DISPATCH_SECURE); 1814 - if (ret) 1815 - goto out; 1816 - 1817 - ret = req->engine->emit_bb_start(req, 1818 - (so.ggtt_offset + so.aux_batch_offset), 1819 - so.aux_batch_size, 1820 - I915_DISPATCH_SECURE); 1821 - if (ret) 1822 - goto out; 1823 - 1824 - i915_vma_move_to_active(i915_gem_obj_to_ggtt(so.obj), req); 1825 - 1826 - out: 1827 - i915_gem_render_state_fini(&so); 1828 - return ret; 1829 - } 1830 - 1831 1799 static int gen8_init_rcs_context(struct drm_i915_gem_request *req) 1832 1800 { 1833 1801 int ret; ··· 1812 1844 if (ret) 1813 1845 DRM_ERROR("MOCS failed to program: expect performance issues.\n"); 1814 1846 1815 - return intel_lr_context_render_state_init(req); 1847 + return i915_gem_render_state_init(req); 1816 1848 } 1817 1849 1818 1850 /**
+11 -5
drivers/gpu/drm/i915/intel_renderstate.h
··· 24 24 #ifndef _INTEL_RENDERSTATE_H 25 25 #define _INTEL_RENDERSTATE_H 26 26 27 - #include "i915_drv.h" 27 + #include <linux/types.h> 28 28 29 - extern const struct intel_renderstate_rodata gen6_null_state; 30 - extern const struct intel_renderstate_rodata gen7_null_state; 31 - extern const struct intel_renderstate_rodata gen8_null_state; 32 - extern const struct intel_renderstate_rodata gen9_null_state; 29 + struct intel_renderstate_rodata { 30 + const u32 *reloc; 31 + const u32 *batch; 32 + const u32 batch_items; 33 + }; 33 34 34 35 #define RO_RENDERSTATE(_g) \ 35 36 const struct intel_renderstate_rodata gen ## _g ## _null_state = { \ ··· 38 37 .batch = gen ## _g ## _null_state_batch, \ 39 38 .batch_items = sizeof(gen ## _g ## _null_state_batch)/4, \ 40 39 } 40 + 41 + extern const struct intel_renderstate_rodata gen6_null_state; 42 + extern const struct intel_renderstate_rodata gen7_null_state; 43 + extern const struct intel_renderstate_rodata gen8_null_state; 44 + extern const struct intel_renderstate_rodata gen9_null_state; 41 45 42 46 #endif /* INTEL_RENDERSTATE_H */