Commit 6b0a8dfd authored by Tvrtko Ursulin's avatar Tvrtko Ursulin

drm/i915: Stop using I915_READ/WRITE in intel_wopcm_init_hw

More legacy mmio accessor removal. We pass in intel_gt explicitly allowing
code to use new intel_uncore_read/write helpers.
Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190621070811.7006-17-tvrtko.ursulin@linux.intel.com
parent 8649187a
...@@ -1272,7 +1272,7 @@ static int init_hw(struct intel_gt *gt) ...@@ -1272,7 +1272,7 @@ static int init_hw(struct intel_gt *gt)
goto out; goto out;
} }
ret = intel_wopcm_init_hw(&i915->wopcm); ret = intel_wopcm_init_hw(&i915->wopcm, gt);
if (ret) { if (ret) {
DRM_ERROR("Enabling WOPCM failed (%d)\n", ret); DRM_ERROR("Enabling WOPCM failed (%d)\n", ret);
goto out; goto out;
......
...@@ -225,17 +225,18 @@ int intel_wopcm_init(struct intel_wopcm *wopcm) ...@@ -225,17 +225,18 @@ int intel_wopcm_init(struct intel_wopcm *wopcm)
return 0; return 0;
} }
static inline int write_and_verify(struct drm_i915_private *dev_priv, static int
i915_reg_t reg, u32 val, u32 mask, write_and_verify(struct intel_gt *gt,
u32 locked_bit) i915_reg_t reg, u32 val, u32 mask, u32 locked_bit)
{ {
struct intel_uncore *uncore = gt->uncore;
u32 reg_val; u32 reg_val;
GEM_BUG_ON(val & ~mask); GEM_BUG_ON(val & ~mask);
I915_WRITE(reg, val); intel_uncore_write(uncore, reg, val);
reg_val = I915_READ(reg); reg_val = intel_uncore_read(uncore, reg);
return (reg_val & mask) != (val | locked_bit) ? -EIO : 0; return (reg_val & mask) != (val | locked_bit) ? -EIO : 0;
} }
...@@ -250,29 +251,30 @@ static inline int write_and_verify(struct drm_i915_private *dev_priv, ...@@ -250,29 +251,30 @@ static inline int write_and_verify(struct drm_i915_private *dev_priv,
* *
* Return: 0 on success. -EIO if registers were locked with incorrect values. * Return: 0 on success. -EIO if registers were locked with incorrect values.
*/ */
int intel_wopcm_init_hw(struct intel_wopcm *wopcm) int intel_wopcm_init_hw(struct intel_wopcm *wopcm, struct intel_gt *gt)
{ {
struct drm_i915_private *dev_priv = wopcm_to_i915(wopcm); struct drm_i915_private *i915 = wopcm_to_i915(wopcm);
struct intel_uncore *uncore = gt->uncore;
u32 huc_agent; u32 huc_agent;
u32 mask; u32 mask;
int err; int err;
if (!USES_GUC(dev_priv)) if (!USES_GUC(i915))
return 0; return 0;
GEM_BUG_ON(!HAS_GUC(dev_priv)); GEM_BUG_ON(!HAS_GUC(i915));
GEM_BUG_ON(!wopcm->guc.size); GEM_BUG_ON(!wopcm->guc.size);
GEM_BUG_ON(!wopcm->guc.base); GEM_BUG_ON(!wopcm->guc.base);
err = write_and_verify(dev_priv, GUC_WOPCM_SIZE, wopcm->guc.size, err = write_and_verify(gt, GUC_WOPCM_SIZE, wopcm->guc.size,
GUC_WOPCM_SIZE_MASK | GUC_WOPCM_SIZE_LOCKED, GUC_WOPCM_SIZE_MASK | GUC_WOPCM_SIZE_LOCKED,
GUC_WOPCM_SIZE_LOCKED); GUC_WOPCM_SIZE_LOCKED);
if (err) if (err)
goto err_out; goto err_out;
huc_agent = USES_HUC(dev_priv) ? HUC_LOADING_AGENT_GUC : 0; huc_agent = USES_HUC(i915) ? HUC_LOADING_AGENT_GUC : 0;
mask = GUC_WOPCM_OFFSET_MASK | GUC_WOPCM_OFFSET_VALID | huc_agent; mask = GUC_WOPCM_OFFSET_MASK | GUC_WOPCM_OFFSET_VALID | huc_agent;
err = write_and_verify(dev_priv, DMA_GUC_WOPCM_OFFSET, err = write_and_verify(gt, DMA_GUC_WOPCM_OFFSET,
wopcm->guc.base | huc_agent, mask, wopcm->guc.base | huc_agent, mask,
GUC_WOPCM_OFFSET_VALID); GUC_WOPCM_OFFSET_VALID);
if (err) if (err)
...@@ -283,8 +285,9 @@ int intel_wopcm_init_hw(struct intel_wopcm *wopcm) ...@@ -283,8 +285,9 @@ int intel_wopcm_init_hw(struct intel_wopcm *wopcm)
err_out: err_out:
DRM_ERROR("Failed to init WOPCM registers:\n"); DRM_ERROR("Failed to init WOPCM registers:\n");
DRM_ERROR("DMA_GUC_WOPCM_OFFSET=%#x\n", DRM_ERROR("DMA_GUC_WOPCM_OFFSET=%#x\n",
I915_READ(DMA_GUC_WOPCM_OFFSET)); intel_uncore_read(uncore, DMA_GUC_WOPCM_OFFSET));
DRM_ERROR("GUC_WOPCM_SIZE=%#x\n", I915_READ(GUC_WOPCM_SIZE)); DRM_ERROR("GUC_WOPCM_SIZE=%#x\n",
intel_uncore_read(uncore, GUC_WOPCM_SIZE));
return err; return err;
} }
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include <linux/types.h> #include <linux/types.h>
struct intel_gt;
/** /**
* struct intel_wopcm - Overall WOPCM info and WOPCM regions. * struct intel_wopcm - Overall WOPCM info and WOPCM regions.
* @size: Size of overall WOPCM. * @size: Size of overall WOPCM.
...@@ -41,6 +43,6 @@ static inline u32 intel_wopcm_guc_size(struct intel_wopcm *wopcm) ...@@ -41,6 +43,6 @@ static inline u32 intel_wopcm_guc_size(struct intel_wopcm *wopcm)
void intel_wopcm_init_early(struct intel_wopcm *wopcm); void intel_wopcm_init_early(struct intel_wopcm *wopcm);
int intel_wopcm_init(struct intel_wopcm *wopcm); int intel_wopcm_init(struct intel_wopcm *wopcm);
int intel_wopcm_init_hw(struct intel_wopcm *wopcm); int intel_wopcm_init_hw(struct intel_wopcm *wopcm, struct intel_gt *gt);
#endif #endif
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