/** * intel_csr_load_program() - write the firmware from memory to register. * @dev_priv: i915 drm device. * * CSR firmware is read from a .bin file and kept in internal memory one time. * Everytime display comes back from low power state this function is called to * copy the firmware from internal memory to registers. */ void intel_csr_load_program(struct drm_i915_private *dev_priv) { u32 *payload = dev_priv->csr.dmc_payload; u32 i, fw_size; if (!HAS_CSR(dev_priv)) { DRM_ERROR("No CSR support available for this platform\n"); return; } if (!dev_priv->csr.dmc_payload) { DRM_ERROR("Tried to program CSR with empty payload\n"); return; } fw_size = dev_priv->csr.dmc_fw_size; assert_rpm_wakelock_held(dev_priv); preempt_disable(); for (i = 0; i < fw_size; i++) I915_WRITE_FW(CSR_PROGRAM(i), payload[i]); preempt_enable(); for (i = 0; i < dev_priv->csr.mmio_count; i++) { I915_WRITE(dev_priv->csr.mmioaddr[i], dev_priv->csr.mmiodata[i]); } dev_priv->csr.dc_state = 0; gen9_set_dc_state_debugmask(dev_priv); }
static void whitelist_apply(struct intel_engine_cs *engine, const struct whitelist *w) { struct drm_i915_private *dev_priv = engine->i915; const u32 base = engine->mmio_base; unsigned int i; if (!w) return; intel_uncore_forcewake_get(engine->i915, FORCEWAKE_ALL); for (i = 0; i < w->count; i++) I915_WRITE_FW(RING_FORCE_TO_NONPRIV(base, i), i915_mmio_reg_offset(w->reg[i])); /* And clear the rest just in case of garbage */ for (; i < RING_MAX_NONPRIV_SLOTS; i++) I915_WRITE_FW(RING_FORCE_TO_NONPRIV(base, i), w->nopid); intel_uncore_forcewake_put(engine->i915, FORCEWAKE_ALL); }