drm/i915: intel_wait_for_register_fw to uncore
The intel_uncore structure is the owner of register access, so subclass the function to it. While at it, use a local uncore var and switch to the new read/write functions where it makes sense. Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20190325214940.23632-8-daniele.ceraolospurio@intel.com
This commit is contained in:
parent
4319382e9b
commit
d2d551c06f
@ -245,10 +245,12 @@ static int ironlake_do_reset(struct drm_i915_private *dev_priv,
|
||||
unsigned int engine_mask,
|
||||
unsigned int retry)
|
||||
{
|
||||
struct intel_uncore *uncore = &dev_priv->uncore;
|
||||
int ret;
|
||||
|
||||
I915_WRITE_FW(ILK_GDSR, ILK_GRDOM_RENDER | ILK_GRDOM_RESET_ENABLE);
|
||||
ret = __intel_wait_for_register_fw(dev_priv, ILK_GDSR,
|
||||
intel_uncore_write_fw(uncore, ILK_GDSR,
|
||||
ILK_GRDOM_RENDER | ILK_GRDOM_RESET_ENABLE);
|
||||
ret = __intel_wait_for_register_fw(uncore, ILK_GDSR,
|
||||
ILK_GRDOM_RESET_ENABLE, 0,
|
||||
5000, 0,
|
||||
NULL);
|
||||
@ -257,8 +259,9 @@ static int ironlake_do_reset(struct drm_i915_private *dev_priv,
|
||||
goto out;
|
||||
}
|
||||
|
||||
I915_WRITE_FW(ILK_GDSR, ILK_GRDOM_MEDIA | ILK_GRDOM_RESET_ENABLE);
|
||||
ret = __intel_wait_for_register_fw(dev_priv, ILK_GDSR,
|
||||
intel_uncore_write_fw(uncore, ILK_GDSR,
|
||||
ILK_GRDOM_MEDIA | ILK_GRDOM_RESET_ENABLE);
|
||||
ret = __intel_wait_for_register_fw(uncore, ILK_GDSR,
|
||||
ILK_GRDOM_RESET_ENABLE, 0,
|
||||
5000, 0,
|
||||
NULL);
|
||||
@ -268,8 +271,8 @@ static int ironlake_do_reset(struct drm_i915_private *dev_priv,
|
||||
}
|
||||
|
||||
out:
|
||||
I915_WRITE_FW(ILK_GDSR, 0);
|
||||
POSTING_READ_FW(ILK_GDSR);
|
||||
intel_uncore_write_fw(uncore, ILK_GDSR, 0);
|
||||
intel_uncore_posting_read_fw(uncore, ILK_GDSR);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -277,6 +280,7 @@ out:
|
||||
static int gen6_hw_domain_reset(struct drm_i915_private *dev_priv,
|
||||
u32 hw_domain_mask)
|
||||
{
|
||||
struct intel_uncore *uncore = &dev_priv->uncore;
|
||||
int err;
|
||||
|
||||
/*
|
||||
@ -284,10 +288,10 @@ static int gen6_hw_domain_reset(struct drm_i915_private *dev_priv,
|
||||
* for fifo space for the write or forcewake the chip for
|
||||
* the read
|
||||
*/
|
||||
I915_WRITE_FW(GEN6_GDRST, hw_domain_mask);
|
||||
intel_uncore_write_fw(uncore, GEN6_GDRST, hw_domain_mask);
|
||||
|
||||
/* Wait for the device to ack the reset requests */
|
||||
err = __intel_wait_for_register_fw(dev_priv,
|
||||
err = __intel_wait_for_register_fw(uncore,
|
||||
GEN6_GDRST, hw_domain_mask, 0,
|
||||
500, 0,
|
||||
NULL);
|
||||
@ -330,6 +334,7 @@ static int gen6_reset_engines(struct drm_i915_private *i915,
|
||||
static u32 gen11_lock_sfc(struct drm_i915_private *dev_priv,
|
||||
struct intel_engine_cs *engine)
|
||||
{
|
||||
struct intel_uncore *uncore = &dev_priv->uncore;
|
||||
u8 vdbox_sfc_access = RUNTIME_INFO(dev_priv)->vdbox_sfc_access;
|
||||
i915_reg_t sfc_forced_lock, sfc_forced_lock_ack;
|
||||
u32 sfc_forced_lock_bit, sfc_forced_lock_ack_bit;
|
||||
@ -377,10 +382,9 @@ static u32 gen11_lock_sfc(struct drm_i915_private *dev_priv,
|
||||
* ends up being locked to the engine we want to reset, we have to reset
|
||||
* it as well (we will unlock it once the reset sequence is completed).
|
||||
*/
|
||||
I915_WRITE_FW(sfc_forced_lock,
|
||||
I915_READ_FW(sfc_forced_lock) | sfc_forced_lock_bit);
|
||||
intel_uncore_rmw_or_fw(uncore, sfc_forced_lock, sfc_forced_lock_bit);
|
||||
|
||||
if (__intel_wait_for_register_fw(dev_priv,
|
||||
if (__intel_wait_for_register_fw(uncore,
|
||||
sfc_forced_lock_ack,
|
||||
sfc_forced_lock_ack_bit,
|
||||
sfc_forced_lock_ack_bit,
|
||||
@ -389,7 +393,7 @@ static u32 gen11_lock_sfc(struct drm_i915_private *dev_priv,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (I915_READ_FW(sfc_usage) & sfc_usage_bit)
|
||||
if (intel_uncore_read_fw(uncore, sfc_usage) & sfc_usage_bit)
|
||||
return sfc_reset_bit;
|
||||
|
||||
return 0;
|
||||
@ -465,13 +469,13 @@ static int gen11_reset_engines(struct drm_i915_private *i915,
|
||||
|
||||
static int gen8_engine_reset_prepare(struct intel_engine_cs *engine)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = engine->i915;
|
||||
struct intel_uncore *uncore = &engine->i915->uncore;
|
||||
int ret;
|
||||
|
||||
I915_WRITE_FW(RING_RESET_CTL(engine->mmio_base),
|
||||
_MASKED_BIT_ENABLE(RESET_CTL_REQUEST_RESET));
|
||||
intel_uncore_write_fw(uncore, RING_RESET_CTL(engine->mmio_base),
|
||||
_MASKED_BIT_ENABLE(RESET_CTL_REQUEST_RESET));
|
||||
|
||||
ret = __intel_wait_for_register_fw(dev_priv,
|
||||
ret = __intel_wait_for_register_fw(uncore,
|
||||
RING_RESET_CTL(engine->mmio_base),
|
||||
RESET_CTL_READY_TO_RESET,
|
||||
RESET_CTL_READY_TO_RESET,
|
||||
|
@ -383,7 +383,8 @@ static void _bxt_ddi_phy_init(struct drm_i915_private *dev_priv,
|
||||
* The flag should get set in 100us according to the HW team, but
|
||||
* use 1ms due to occasional timeouts observed with that.
|
||||
*/
|
||||
if (intel_wait_for_register_fw(dev_priv, BXT_PORT_CL1CM_DW0(phy),
|
||||
if (intel_wait_for_register_fw(&dev_priv->uncore,
|
||||
BXT_PORT_CL1CM_DW0(phy),
|
||||
PHY_RESERVED | PHY_POWER_GOOD,
|
||||
PHY_POWER_GOOD,
|
||||
1))
|
||||
|
@ -817,20 +817,20 @@ u64 intel_engine_get_last_batch_head(const struct intel_engine_cs *engine)
|
||||
|
||||
int intel_engine_stop_cs(struct intel_engine_cs *engine)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = engine->i915;
|
||||
struct intel_uncore *uncore = &engine->i915->uncore;
|
||||
const u32 base = engine->mmio_base;
|
||||
const i915_reg_t mode = RING_MI_MODE(base);
|
||||
int err;
|
||||
|
||||
if (INTEL_GEN(dev_priv) < 3)
|
||||
if (INTEL_GEN(engine->i915) < 3)
|
||||
return -ENODEV;
|
||||
|
||||
GEM_TRACE("%s\n", engine->name);
|
||||
|
||||
I915_WRITE_FW(mode, _MASKED_BIT_ENABLE(STOP_RING));
|
||||
intel_uncore_write_fw(uncore, mode, _MASKED_BIT_ENABLE(STOP_RING));
|
||||
|
||||
err = 0;
|
||||
if (__intel_wait_for_register_fw(dev_priv,
|
||||
if (__intel_wait_for_register_fw(uncore,
|
||||
mode, MODE_IDLE, MODE_IDLE,
|
||||
1000, 0,
|
||||
NULL)) {
|
||||
@ -839,7 +839,7 @@ int intel_engine_stop_cs(struct intel_engine_cs *engine)
|
||||
}
|
||||
|
||||
/* A final mmio read to let GPU writes be hopefully flushed to memory */
|
||||
POSTING_READ_FW(mode);
|
||||
intel_uncore_posting_read_fw(uncore, mode);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
@ -398,6 +398,7 @@ int intel_guc_send_mmio(struct intel_guc *guc, const u32 *action, u32 len,
|
||||
u32 *response_buf, u32 response_buf_size)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = guc_to_i915(guc);
|
||||
struct intel_uncore *uncore = &dev_priv->uncore;
|
||||
u32 status;
|
||||
int i;
|
||||
int ret;
|
||||
@ -414,12 +415,12 @@ int intel_guc_send_mmio(struct intel_guc *guc, const u32 *action, u32 len,
|
||||
*action != INTEL_GUC_ACTION_DEREGISTER_COMMAND_TRANSPORT_BUFFER);
|
||||
|
||||
mutex_lock(&guc->send_mutex);
|
||||
intel_uncore_forcewake_get(&dev_priv->uncore, guc->send_regs.fw_domains);
|
||||
intel_uncore_forcewake_get(uncore, guc->send_regs.fw_domains);
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
I915_WRITE(guc_send_reg(guc, i), action[i]);
|
||||
intel_uncore_write(uncore, guc_send_reg(guc, i), action[i]);
|
||||
|
||||
POSTING_READ(guc_send_reg(guc, i - 1));
|
||||
intel_uncore_posting_read(uncore, guc_send_reg(guc, i - 1));
|
||||
|
||||
intel_guc_notify(guc);
|
||||
|
||||
@ -427,7 +428,7 @@ int intel_guc_send_mmio(struct intel_guc *guc, const u32 *action, u32 len,
|
||||
* No GuC command should ever take longer than 10ms.
|
||||
* Fast commands should still complete in 10us.
|
||||
*/
|
||||
ret = __intel_wait_for_register_fw(dev_priv,
|
||||
ret = __intel_wait_for_register_fw(uncore,
|
||||
guc_send_reg(guc, 0),
|
||||
INTEL_GUC_MSG_TYPE_MASK,
|
||||
INTEL_GUC_MSG_TYPE_RESPONSE <<
|
||||
@ -454,7 +455,7 @@ int intel_guc_send_mmio(struct intel_guc *guc, const u32 *action, u32 len,
|
||||
ret = INTEL_GUC_MSG_TO_DATA(status);
|
||||
|
||||
out:
|
||||
intel_uncore_forcewake_put(&dev_priv->uncore, guc->send_regs.fw_domains);
|
||||
intel_uncore_forcewake_put(uncore, guc->send_regs.fw_domains);
|
||||
mutex_unlock(&guc->send_mutex);
|
||||
|
||||
return ret;
|
||||
|
@ -106,41 +106,46 @@ static int huc_fw_xfer(struct intel_uc_fw *huc_fw, struct i915_vma *vma)
|
||||
{
|
||||
struct intel_huc *huc = container_of(huc_fw, struct intel_huc, fw);
|
||||
struct drm_i915_private *dev_priv = huc_to_i915(huc);
|
||||
struct intel_uncore *uncore = &dev_priv->uncore;
|
||||
unsigned long offset = 0;
|
||||
u32 size;
|
||||
int ret;
|
||||
|
||||
GEM_BUG_ON(huc_fw->type != INTEL_UC_FW_TYPE_HUC);
|
||||
|
||||
intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);
|
||||
intel_uncore_forcewake_get(uncore, FORCEWAKE_ALL);
|
||||
|
||||
/* Set the source address for the uCode */
|
||||
offset = intel_guc_ggtt_offset(&dev_priv->guc, vma) +
|
||||
huc_fw->header_offset;
|
||||
I915_WRITE(DMA_ADDR_0_LOW, lower_32_bits(offset));
|
||||
I915_WRITE(DMA_ADDR_0_HIGH, upper_32_bits(offset) & 0xFFFF);
|
||||
intel_uncore_write(uncore, DMA_ADDR_0_LOW,
|
||||
lower_32_bits(offset));
|
||||
intel_uncore_write(uncore, DMA_ADDR_0_HIGH,
|
||||
upper_32_bits(offset) & 0xFFFF);
|
||||
|
||||
/* Hardware doesn't look at destination address for HuC. Set it to 0,
|
||||
/*
|
||||
* Hardware doesn't look at destination address for HuC. Set it to 0,
|
||||
* but still program the correct address space.
|
||||
*/
|
||||
I915_WRITE(DMA_ADDR_1_LOW, 0);
|
||||
I915_WRITE(DMA_ADDR_1_HIGH, DMA_ADDRESS_SPACE_WOPCM);
|
||||
intel_uncore_write(uncore, DMA_ADDR_1_LOW, 0);
|
||||
intel_uncore_write(uncore, DMA_ADDR_1_HIGH, DMA_ADDRESS_SPACE_WOPCM);
|
||||
|
||||
size = huc_fw->header_size + huc_fw->ucode_size;
|
||||
I915_WRITE(DMA_COPY_SIZE, size);
|
||||
intel_uncore_write(uncore, DMA_COPY_SIZE, size);
|
||||
|
||||
/* Start the DMA */
|
||||
I915_WRITE(DMA_CTRL, _MASKED_BIT_ENABLE(HUC_UKERNEL | START_DMA));
|
||||
intel_uncore_write(uncore, DMA_CTRL,
|
||||
_MASKED_BIT_ENABLE(HUC_UKERNEL | START_DMA));
|
||||
|
||||
/* Wait for DMA to finish */
|
||||
ret = intel_wait_for_register_fw(dev_priv, DMA_CTRL, START_DMA, 0, 100);
|
||||
ret = intel_wait_for_register_fw(uncore, DMA_CTRL, START_DMA, 0, 100);
|
||||
|
||||
DRM_DEBUG_DRIVER("HuC DMA transfer wait over with ret %d\n", ret);
|
||||
|
||||
/* Disable the bits once DMA is over */
|
||||
I915_WRITE(DMA_CTRL, _MASKED_BIT_DISABLE(HUC_UKERNEL));
|
||||
intel_uncore_write(uncore, DMA_CTRL, _MASKED_BIT_DISABLE(HUC_UKERNEL));
|
||||
|
||||
intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
|
||||
intel_uncore_forcewake_put(uncore, FORCEWAKE_ALL);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -348,7 +348,7 @@ gmbus_wait_idle(struct drm_i915_private *dev_priv)
|
||||
add_wait_queue(&dev_priv->gmbus_wait_queue, &wait);
|
||||
I915_WRITE_FW(GMBUS4, irq_enable);
|
||||
|
||||
ret = intel_wait_for_register_fw(dev_priv,
|
||||
ret = intel_wait_for_register_fw(&dev_priv->uncore,
|
||||
GMBUS2, GMBUS_ACTIVE, 0,
|
||||
10);
|
||||
|
||||
|
@ -9687,7 +9687,7 @@ int sandybridge_pcode_read(struct drm_i915_private *dev_priv, u32 mbox, u32 *val
|
||||
I915_WRITE_FW(GEN6_PCODE_DATA1, 0);
|
||||
I915_WRITE_FW(GEN6_PCODE_MAILBOX, GEN6_PCODE_READY | mbox);
|
||||
|
||||
if (__intel_wait_for_register_fw(dev_priv,
|
||||
if (__intel_wait_for_register_fw(&dev_priv->uncore,
|
||||
GEN6_PCODE_MAILBOX, GEN6_PCODE_READY, 0,
|
||||
500, 0, NULL)) {
|
||||
DRM_ERROR("timeout waiting for pcode read (from mbox %x) to finish for %ps\n",
|
||||
@ -9735,7 +9735,7 @@ int sandybridge_pcode_write_timeout(struct drm_i915_private *dev_priv,
|
||||
I915_WRITE_FW(GEN6_PCODE_DATA1, 0);
|
||||
I915_WRITE_FW(GEN6_PCODE_MAILBOX, GEN6_PCODE_READY | mbox);
|
||||
|
||||
if (__intel_wait_for_register_fw(dev_priv,
|
||||
if (__intel_wait_for_register_fw(&dev_priv->uncore,
|
||||
GEN6_PCODE_MAILBOX, GEN6_PCODE_READY, 0,
|
||||
fast_timeout_us, slow_timeout_ms,
|
||||
NULL)) {
|
||||
|
@ -2051,23 +2051,23 @@ int intel_ring_cacheline_align(struct i915_request *rq)
|
||||
|
||||
static void gen6_bsd_submit_request(struct i915_request *request)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = request->i915;
|
||||
struct intel_uncore *uncore = &request->i915->uncore;
|
||||
|
||||
intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);
|
||||
intel_uncore_forcewake_get(uncore, FORCEWAKE_ALL);
|
||||
|
||||
/* Every tail move must follow the sequence below */
|
||||
|
||||
/* Disable notification that the ring is IDLE. The GT
|
||||
* will then assume that it is busy and bring it out of rc6.
|
||||
*/
|
||||
I915_WRITE_FW(GEN6_BSD_SLEEP_PSMI_CONTROL,
|
||||
_MASKED_BIT_ENABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
|
||||
intel_uncore_write_fw(uncore, GEN6_BSD_SLEEP_PSMI_CONTROL,
|
||||
_MASKED_BIT_ENABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
|
||||
|
||||
/* Clear the context id. Here be magic! */
|
||||
I915_WRITE64_FW(GEN6_BSD_RNCID, 0x0);
|
||||
intel_uncore_write64_fw(uncore, GEN6_BSD_RNCID, 0x0);
|
||||
|
||||
/* Wait for the ring not to be idle, i.e. for it to wake up. */
|
||||
if (__intel_wait_for_register_fw(dev_priv,
|
||||
if (__intel_wait_for_register_fw(uncore,
|
||||
GEN6_BSD_SLEEP_PSMI_CONTROL,
|
||||
GEN6_BSD_SLEEP_INDICATOR,
|
||||
0,
|
||||
@ -2080,10 +2080,10 @@ static void gen6_bsd_submit_request(struct i915_request *request)
|
||||
/* Let the ring send IDLE messages to the GT again,
|
||||
* and so let it sleep to conserve power when idle.
|
||||
*/
|
||||
I915_WRITE_FW(GEN6_BSD_SLEEP_PSMI_CONTROL,
|
||||
_MASKED_BIT_DISABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
|
||||
intel_uncore_write_fw(uncore, GEN6_BSD_SLEEP_PSMI_CONTROL,
|
||||
_MASKED_BIT_DISABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
|
||||
|
||||
intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
|
||||
intel_uncore_forcewake_put(uncore, FORCEWAKE_ALL);
|
||||
}
|
||||
|
||||
static int mi_flush_dw(struct i915_request *rq, u32 flags)
|
||||
|
@ -1759,7 +1759,7 @@ int i915_reg_read_ioctl(struct drm_device *dev,
|
||||
|
||||
/**
|
||||
* __intel_wait_for_register_fw - wait until register matches expected state
|
||||
* @dev_priv: the i915 device
|
||||
* @uncore: the struct intel_uncore
|
||||
* @reg: the register to read
|
||||
* @mask: mask to apply to register value
|
||||
* @value: expected value
|
||||
@ -1783,7 +1783,7 @@ int i915_reg_read_ioctl(struct drm_device *dev,
|
||||
*
|
||||
* Returns 0 if the register matches the desired condition, or -ETIMEOUT.
|
||||
*/
|
||||
int __intel_wait_for_register_fw(struct drm_i915_private *dev_priv,
|
||||
int __intel_wait_for_register_fw(struct intel_uncore *uncore,
|
||||
i915_reg_t reg,
|
||||
u32 mask,
|
||||
u32 value,
|
||||
@ -1792,7 +1792,7 @@ int __intel_wait_for_register_fw(struct drm_i915_private *dev_priv,
|
||||
u32 *out_value)
|
||||
{
|
||||
u32 uninitialized_var(reg_value);
|
||||
#define done (((reg_value = I915_READ_FW(reg)) & mask) == value)
|
||||
#define done (((reg_value = intel_uncore_read_fw(uncore, reg)) & mask) == value)
|
||||
int ret;
|
||||
|
||||
/* Catch any overuse of this function */
|
||||
@ -1850,7 +1850,7 @@ int __intel_wait_for_register(struct drm_i915_private *dev_priv,
|
||||
spin_lock_irq(&uncore->lock);
|
||||
intel_uncore_forcewake_get__locked(uncore, fw);
|
||||
|
||||
ret = __intel_wait_for_register_fw(dev_priv,
|
||||
ret = __intel_wait_for_register_fw(uncore,
|
||||
reg, mask, value,
|
||||
fast_timeout_us, 0, ®_value);
|
||||
|
||||
@ -1858,7 +1858,8 @@ int __intel_wait_for_register(struct drm_i915_private *dev_priv,
|
||||
spin_unlock_irq(&uncore->lock);
|
||||
|
||||
if (ret && slow_timeout_ms)
|
||||
ret = __wait_for(reg_value = I915_READ_NOTRACE(reg),
|
||||
ret = __wait_for(reg_value = intel_uncore_read_notrace(uncore,
|
||||
reg),
|
||||
(reg_value & mask) == value,
|
||||
slow_timeout_ms * 1000, 10, 1000);
|
||||
|
||||
|
@ -220,31 +220,32 @@ int __intel_wait_for_register(struct drm_i915_private *dev_priv,
|
||||
unsigned int fast_timeout_us,
|
||||
unsigned int slow_timeout_ms,
|
||||
u32 *out_value);
|
||||
static inline
|
||||
int intel_wait_for_register(struct drm_i915_private *dev_priv,
|
||||
i915_reg_t reg,
|
||||
u32 mask,
|
||||
u32 value,
|
||||
unsigned int timeout_ms)
|
||||
static inline int
|
||||
intel_wait_for_register(struct drm_i915_private *dev_priv,
|
||||
i915_reg_t reg,
|
||||
u32 mask,
|
||||
u32 value,
|
||||
unsigned int timeout_ms)
|
||||
{
|
||||
return __intel_wait_for_register(dev_priv, reg, mask, value, 2,
|
||||
timeout_ms, NULL);
|
||||
}
|
||||
int __intel_wait_for_register_fw(struct drm_i915_private *dev_priv,
|
||||
|
||||
int __intel_wait_for_register_fw(struct intel_uncore *uncore,
|
||||
i915_reg_t reg,
|
||||
u32 mask,
|
||||
u32 value,
|
||||
unsigned int fast_timeout_us,
|
||||
unsigned int slow_timeout_ms,
|
||||
u32 *out_value);
|
||||
static inline
|
||||
int intel_wait_for_register_fw(struct drm_i915_private *dev_priv,
|
||||
i915_reg_t reg,
|
||||
u32 mask,
|
||||
u32 value,
|
||||
static inline int
|
||||
intel_wait_for_register_fw(struct intel_uncore *uncore,
|
||||
i915_reg_t reg,
|
||||
u32 mask,
|
||||
u32 value,
|
||||
unsigned int timeout_ms)
|
||||
{
|
||||
return __intel_wait_for_register_fw(dev_priv, reg, mask, value,
|
||||
return __intel_wait_for_register_fw(uncore, reg, mask, value,
|
||||
2, timeout_ms, NULL);
|
||||
}
|
||||
|
||||
@ -367,6 +368,13 @@ intel_uncore_read64_2x32(struct intel_uncore *uncore,
|
||||
#define intel_uncore_write64_fw(...) __raw_uncore_write64(__VA_ARGS__)
|
||||
#define intel_uncore_posting_read_fw(...) ((void)intel_uncore_read_fw(__VA_ARGS__))
|
||||
|
||||
static inline void intel_uncore_rmw_or_fw(struct intel_uncore *uncore,
|
||||
i915_reg_t reg, u32 or_val)
|
||||
{
|
||||
intel_uncore_write_fw(uncore, reg,
|
||||
intel_uncore_read_fw(uncore, reg) | or_val);
|
||||
}
|
||||
|
||||
#define raw_reg_read(base, reg) \
|
||||
readl(base + i915_mmio_reg_offset(reg))
|
||||
#define raw_reg_write(base, reg, value) \
|
||||
|
Loading…
Reference in New Issue
Block a user