Commit 3177659a authored by Carlos Santa's avatar Carlos Santa Committed by Rodrigo Vivi

drm/i915: Make HWS_NEEDS_PHYSICAL the exception

Make the .hws_needs_physical the exception by switching the flag
on earlier platforms since they are fewer to support. Remove the flag on
later GPUs hardware since they all use GTT hws by default.

Switch the logic as well in the driver to reflect this change
Signed-off-by: default avatarCarlos Santa <carlos.santa@intel.com>
Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 804b8712
...@@ -639,7 +639,7 @@ struct intel_csr { ...@@ -639,7 +639,7 @@ struct intel_csr {
func(is_i915g) sep \ func(is_i915g) sep \
func(is_i945gm) sep \ func(is_i945gm) sep \
func(is_g33) sep \ func(is_g33) sep \
func(need_gfx_hws) sep \ func(hws_needs_physical) sep \
func(is_g4x) sep \ func(is_g4x) sep \
func(is_pineview) sep \ func(is_pineview) sep \
func(is_broadwater) sep \ func(is_broadwater) sep \
...@@ -2748,7 +2748,7 @@ struct drm_i915_cmd_table { ...@@ -2748,7 +2748,7 @@ struct drm_i915_cmd_table {
#define HAS_EDRAM(dev) (!!(__I915__(dev)->edram_cap & EDRAM_ENABLED)) #define HAS_EDRAM(dev) (!!(__I915__(dev)->edram_cap & EDRAM_ENABLED))
#define HAS_WT(dev) ((IS_HASWELL(dev) || IS_BROADWELL(dev)) && \ #define HAS_WT(dev) ((IS_HASWELL(dev) || IS_BROADWELL(dev)) && \
HAS_EDRAM(dev)) HAS_EDRAM(dev))
#define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws) #define HWS_NEEDS_PHYSICAL(dev) (INTEL_INFO(dev)->hws_needs_physical)
#define HAS_HW_CONTEXTS(dev) (INTEL_INFO(dev)->has_hw_contexts) #define HAS_HW_CONTEXTS(dev) (INTEL_INFO(dev)->has_hw_contexts)
#define HAS_LOGICAL_RING_CONTEXTS(dev) (INTEL_INFO(dev)->has_logical_ring_contexts) #define HAS_LOGICAL_RING_CONTEXTS(dev) (INTEL_INFO(dev)->has_logical_ring_contexts)
......
...@@ -1025,7 +1025,7 @@ static void error_record_engine_registers(struct drm_i915_error_state *error, ...@@ -1025,7 +1025,7 @@ static void error_record_engine_registers(struct drm_i915_error_state *error,
if (INTEL_GEN(dev_priv) > 2) if (INTEL_GEN(dev_priv) > 2)
ee->mode = I915_READ_MODE(engine); ee->mode = I915_READ_MODE(engine);
if (I915_NEED_GFX_HWS(dev_priv)) { if (!HWS_NEEDS_PHYSICAL(dev_priv)) {
i915_reg_t mmio; i915_reg_t mmio;
if (IS_GEN7(dev_priv)) { if (IS_GEN7(dev_priv)) {
......
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
.gen = 2, .num_pipes = 1, \ .gen = 2, .num_pipes = 1, \
.has_overlay = 1, .overlay_needs_physical = 1, \ .has_overlay = 1, .overlay_needs_physical = 1, \
.has_gmch_display = 1, \ .has_gmch_display = 1, \
.hws_needs_physical = 1, \
.ring_mask = RENDER_RING, \ .ring_mask = RENDER_RING, \
GEN_DEFAULT_PIPEOFFSETS, \ GEN_DEFAULT_PIPEOFFSETS, \
CURSOR_OFFSETS CURSOR_OFFSETS
...@@ -95,6 +96,7 @@ static const struct intel_device_info intel_i915g_info = { ...@@ -95,6 +96,7 @@ static const struct intel_device_info intel_i915g_info = {
GEN3_FEATURES, GEN3_FEATURES,
.is_i915g = 1, .cursor_needs_physical = 1, .is_i915g = 1, .cursor_needs_physical = 1,
.has_overlay = 1, .overlay_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1,
.hws_needs_physical = 1,
}; };
static const struct intel_device_info intel_i915gm_info = { static const struct intel_device_info intel_i915gm_info = {
GEN3_FEATURES, GEN3_FEATURES,
...@@ -103,11 +105,13 @@ static const struct intel_device_info intel_i915gm_info = { ...@@ -103,11 +105,13 @@ static const struct intel_device_info intel_i915gm_info = {
.has_overlay = 1, .overlay_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1,
.supports_tv = 1, .supports_tv = 1,
.has_fbc = 1, .has_fbc = 1,
.hws_needs_physical = 1,
}; };
static const struct intel_device_info intel_i945g_info = { static const struct intel_device_info intel_i945g_info = {
GEN3_FEATURES, GEN3_FEATURES,
.has_hotplug = 1, .cursor_needs_physical = 1, .has_hotplug = 1, .cursor_needs_physical = 1,
.has_overlay = 1, .overlay_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1,
.hws_needs_physical = 1,
}; };
static const struct intel_device_info intel_i945gm_info = { static const struct intel_device_info intel_i945gm_info = {
GEN3_FEATURES, GEN3_FEATURES,
...@@ -116,6 +120,7 @@ static const struct intel_device_info intel_i945gm_info = { ...@@ -116,6 +120,7 @@ static const struct intel_device_info intel_i945gm_info = {
.has_overlay = 1, .overlay_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1,
.supports_tv = 1, .supports_tv = 1,
.has_fbc = 1, .has_fbc = 1,
.hws_needs_physical = 1,
}; };
#define GEN4_FEATURES \ #define GEN4_FEATURES \
...@@ -130,6 +135,7 @@ static const struct intel_device_info intel_i965g_info = { ...@@ -130,6 +135,7 @@ static const struct intel_device_info intel_i965g_info = {
GEN4_FEATURES, GEN4_FEATURES,
.is_broadwater = 1, .is_broadwater = 1,
.has_overlay = 1, .has_overlay = 1,
.hws_needs_physical = 1,
}; };
static const struct intel_device_info intel_i965gm_info = { static const struct intel_device_info intel_i965gm_info = {
...@@ -138,18 +144,19 @@ static const struct intel_device_info intel_i965gm_info = { ...@@ -138,18 +144,19 @@ static const struct intel_device_info intel_i965gm_info = {
.is_mobile = 1, .has_fbc = 1, .is_mobile = 1, .has_fbc = 1,
.has_overlay = 1, .has_overlay = 1,
.supports_tv = 1, .supports_tv = 1,
.hws_needs_physical = 1,
}; };
static const struct intel_device_info intel_g33_info = { static const struct intel_device_info intel_g33_info = {
GEN3_FEATURES, GEN3_FEATURES,
.is_g33 = 1, .is_g33 = 1,
.need_gfx_hws = 1, .has_hotplug = 1, .has_hotplug = 1,
.has_overlay = 1, .has_overlay = 1,
}; };
static const struct intel_device_info intel_g45_info = { static const struct intel_device_info intel_g45_info = {
GEN4_FEATURES, GEN4_FEATURES,
.is_g4x = 1, .need_gfx_hws = 1, .is_g4x = 1,
.has_pipe_cxsr = 1, .has_pipe_cxsr = 1,
.ring_mask = RENDER_RING | BSD_RING, .ring_mask = RENDER_RING | BSD_RING,
}; };
...@@ -157,7 +164,7 @@ static const struct intel_device_info intel_g45_info = { ...@@ -157,7 +164,7 @@ static const struct intel_device_info intel_g45_info = {
static const struct intel_device_info intel_gm45_info = { static const struct intel_device_info intel_gm45_info = {
GEN4_FEATURES, GEN4_FEATURES,
.is_g4x = 1, .is_g4x = 1,
.is_mobile = 1, .need_gfx_hws = 1, .has_fbc = 1, .is_mobile = 1, .has_fbc = 1,
.has_pipe_cxsr = 1, .has_pipe_cxsr = 1,
.supports_tv = 1, .supports_tv = 1,
.ring_mask = RENDER_RING | BSD_RING, .ring_mask = RENDER_RING | BSD_RING,
...@@ -166,13 +173,13 @@ static const struct intel_device_info intel_gm45_info = { ...@@ -166,13 +173,13 @@ static const struct intel_device_info intel_gm45_info = {
static const struct intel_device_info intel_pineview_info = { static const struct intel_device_info intel_pineview_info = {
GEN3_FEATURES, GEN3_FEATURES,
.is_g33 = 1, .is_pineview = 1, .is_mobile = 1, .is_g33 = 1, .is_pineview = 1, .is_mobile = 1,
.need_gfx_hws = 1, .has_hotplug = 1, .has_hotplug = 1,
.has_overlay = 1, .has_overlay = 1,
}; };
#define GEN5_FEATURES \ #define GEN5_FEATURES \
.gen = 5, .num_pipes = 2, \ .gen = 5, .num_pipes = 2, \
.need_gfx_hws = 1, .has_hotplug = 1, \ .has_hotplug = 1, \
.has_gmbus_irq = 1, \ .has_gmbus_irq = 1, \
.ring_mask = RENDER_RING | BSD_RING, \ .ring_mask = RENDER_RING | BSD_RING, \
GEN_DEFAULT_PIPEOFFSETS, \ GEN_DEFAULT_PIPEOFFSETS, \
...@@ -189,7 +196,7 @@ static const struct intel_device_info intel_ironlake_m_info = { ...@@ -189,7 +196,7 @@ static const struct intel_device_info intel_ironlake_m_info = {
#define GEN6_FEATURES \ #define GEN6_FEATURES \
.gen = 6, .num_pipes = 2, \ .gen = 6, .num_pipes = 2, \
.need_gfx_hws = 1, .has_hotplug = 1, \ .has_hotplug = 1, \
.has_fbc = 1, \ .has_fbc = 1, \
.ring_mask = RENDER_RING | BSD_RING | BLT_RING, \ .ring_mask = RENDER_RING | BSD_RING | BLT_RING, \
.has_llc = 1, \ .has_llc = 1, \
...@@ -211,7 +218,7 @@ static const struct intel_device_info intel_sandybridge_m_info = { ...@@ -211,7 +218,7 @@ static const struct intel_device_info intel_sandybridge_m_info = {
#define GEN7_FEATURES \ #define GEN7_FEATURES \
.gen = 7, .num_pipes = 3, \ .gen = 7, .num_pipes = 3, \
.need_gfx_hws = 1, .has_hotplug = 1, \ .has_hotplug = 1, \
.has_fbc = 1, \ .has_fbc = 1, \
.ring_mask = RENDER_RING | BSD_RING | BLT_RING, \ .ring_mask = RENDER_RING | BSD_RING | BLT_RING, \
.has_llc = 1, \ .has_llc = 1, \
...@@ -250,7 +257,7 @@ static const struct intel_device_info intel_ivybridge_q_info = { ...@@ -250,7 +257,7 @@ static const struct intel_device_info intel_ivybridge_q_info = {
.has_gmbus_irq = 1, \ .has_gmbus_irq = 1, \
.has_hw_contexts = 1, \ .has_hw_contexts = 1, \
.has_gmch_display = 1, \ .has_gmch_display = 1, \
.need_gfx_hws = 1, .has_hotplug = 1, \ .has_hotplug = 1, \
.ring_mask = RENDER_RING | BSD_RING | BLT_RING, \ .ring_mask = RENDER_RING | BSD_RING | BLT_RING, \
.display_mmio_offset = VLV_DISPLAY_BASE, \ .display_mmio_offset = VLV_DISPLAY_BASE, \
GEN_DEFAULT_PIPEOFFSETS, \ GEN_DEFAULT_PIPEOFFSETS, \
...@@ -298,7 +305,7 @@ static const struct intel_device_info intel_broadwell_gt3_info = { ...@@ -298,7 +305,7 @@ static const struct intel_device_info intel_broadwell_gt3_info = {
static const struct intel_device_info intel_cherryview_info = { static const struct intel_device_info intel_cherryview_info = {
.gen = 8, .num_pipes = 3, .gen = 8, .num_pipes = 3,
.need_gfx_hws = 1, .has_hotplug = 1, .has_hotplug = 1,
.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING, .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
.is_cherryview = 1, .is_cherryview = 1,
.has_psr = 1, .has_psr = 1,
...@@ -333,7 +340,7 @@ static const struct intel_device_info intel_skylake_gt3_info = { ...@@ -333,7 +340,7 @@ static const struct intel_device_info intel_skylake_gt3_info = {
static const struct intel_device_info intel_broxton_info = { static const struct intel_device_info intel_broxton_info = {
.is_broxton = 1, .is_broxton = 1,
.gen = 9, .gen = 9,
.need_gfx_hws = 1, .has_hotplug = 1, .has_hotplug = 1,
.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING, .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
.num_pipes = 3, .num_pipes = 3,
.has_ddi = 1, .has_ddi = 1,
......
...@@ -559,10 +559,10 @@ static int init_ring_common(struct intel_engine_cs *engine) ...@@ -559,10 +559,10 @@ static int init_ring_common(struct intel_engine_cs *engine)
} }
} }
if (I915_NEED_GFX_HWS(dev_priv)) if (HWS_NEEDS_PHYSICAL(dev_priv))
intel_ring_setup_status_page(engine);
else
ring_setup_phys_status_page(engine); ring_setup_phys_status_page(engine);
else
intel_ring_setup_status_page(engine);
/* Enforce ordering by reading HEAD register back */ /* Enforce ordering by reading HEAD register back */
I915_READ_HEAD(engine); I915_READ_HEAD(engine);
...@@ -2109,13 +2109,13 @@ static int intel_init_ring_buffer(struct intel_engine_cs *engine) ...@@ -2109,13 +2109,13 @@ static int intel_init_ring_buffer(struct intel_engine_cs *engine)
goto error; goto error;
} }
if (I915_NEED_GFX_HWS(dev_priv)) { if (HWS_NEEDS_PHYSICAL(dev_priv)) {
ret = init_status_page(engine); WARN_ON(engine->id != RCS);
ret = init_phys_status_page(engine);
if (ret) if (ret)
goto error; goto error;
} else { } else {
WARN_ON(engine->id != RCS); ret = init_status_page(engine);
ret = init_phys_status_page(engine);
if (ret) if (ret)
goto error; goto error;
} }
...@@ -2155,11 +2155,11 @@ void intel_engine_cleanup(struct intel_engine_cs *engine) ...@@ -2155,11 +2155,11 @@ void intel_engine_cleanup(struct intel_engine_cs *engine)
if (engine->cleanup) if (engine->cleanup)
engine->cleanup(engine); engine->cleanup(engine);
if (I915_NEED_GFX_HWS(dev_priv)) { if (HWS_NEEDS_PHYSICAL(dev_priv)) {
cleanup_status_page(engine);
} else {
WARN_ON(engine->id != RCS); WARN_ON(engine->id != RCS);
cleanup_phys_status_page(engine); cleanup_phys_status_page(engine);
} else {
cleanup_status_page(engine);
} }
intel_engine_cleanup_common(engine); intel_engine_cleanup_common(engine);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment