| From dc9f9eec6450197fc129ffa3676b6cf98d0fe398 Mon Sep 17 00:00:00 2001 |
| From: Marc Herbert <marc.herbert@intel.com> |
| Date: Mon, 20 Jun 2016 16:07:40 -0700 |
| Subject: [PATCH] CHROMIUM: drm/i915/gen9: wait until SYSTEM_RUNNING before |
| loading DMC firmware. |
| |
| The Linux kernel has no generic support for built-in driver + firmware(s) |
| located on the root filesystem. |
| This is an interim workaround until a final solution is decided upstream. |
| Acked by the i915 maintainer at: |
| http://lists.freedesktop.org/archives/intel-gfx/2015-July/071606.html |
| |
| Signed-off-by: Marc Herbert <marc.herbert@intel.com> |
| Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> |
| |
| Conflicts: |
| drivers/gpu/drm/i915/intel_csr.c |
| Fixed context delta. |
| |
| FIX for chromeos-4.4: _wait_for(milliseconds) became _wait_for(microseconds) |
| https://chromium-review.googlesource.com/#/c/344986/2/drivers/gpu/drm/i915/intel_drv.h |
| |
| BACKPORT for chromeos-4.14: slight context change, request_firmware is implemented, wait |
| for rootfs before request. |
| |
| As of Dec. 2017 conversation upstream about this feature has stalled. |
| |
| BUG=None |
| TEST=cat /sys/kernel/debug/dri/*/i915_dmc_info |
| TEST=kernel logs show "Finished loading i915/XXX_dmc_verNNN.bin" |
| TEST=No graphics regressions |
| |
| 5.4 uprev - fixup patch context - jsbarnes |
| |
| Originally-Reviewed-on: https://chromium-review.googlesource.com/315865 |
| (cherry picked from commit 2e70b26e64f6 in chromeos-3.18) |
| Change-Id: I7ded154b4ae6003d32e87d3a620245a54fcde532 |
| Reviewed-on: https://chromium-review.googlesource.com/354089 |
| Commit-Ready: Wayne Boyer <wayne.boyer@intel.com> |
| Tested-by: Tarun Vyas <tarun.vyas@intel.com> |
| Reviewed-by: Dmitry Torokhov <dtor@chromium.org> |
| Reviewed-by: Guenter Roeck <groeck@chromium.org> |
| Reviewed-by: Haridhar Kalvala <haridhar.kalvala@intel.com> |
| Reviewed-by: Kees Cook <keescook@chromium.org> |
| Reviewed-on: https://chromium-review.googlesource.com/782262 |
| Commit-Ready: Matthew S Atwood <matthew.s.atwood@intel.corp-partner.google.com> |
| Tested-by: Casey G Bowman <casey.g.bowman@intel.com> |
| Reviewed-by: Benson Leung <bleung@chromium.org> |
| |
| [rebase419(groeck): _wait_for() has an additional parameter] |
| Signed-off-by: Guenter Roeck <groeck@chromium.org> |
| Change-Id: I00e48c3cb72d7b679cd14787f363dc7234059ddb |
| --- |
| drivers/gpu/drm/i915/display/intel_dmc.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| diff --git a/drivers/gpu/drm/i915/display/intel_dmc.c b/drivers/gpu/drm/i915/display/intel_dmc.c |
| index 97308da28059..9b8bca7940aa 100644 |
| --- a/drivers/gpu/drm/i915/display/intel_dmc.c |
| +++ b/drivers/gpu/drm/i915/display/intel_dmc.c |
| @@ -649,6 +649,7 @@ static void intel_dmc_runtime_pm_put(struct drm_i915_private *dev_priv) |
| |
| static void dmc_load_work_fn(struct work_struct *work) |
| { |
| + static const unsigned rootfs_timeout_ms = 60 * 1000; |
| struct drm_i915_private *dev_priv; |
| struct intel_dmc *dmc; |
| const struct firmware *fw = NULL; |
| @@ -656,6 +657,13 @@ static void dmc_load_work_fn(struct work_struct *work) |
| dev_priv = container_of(work, typeof(*dev_priv), dmc.work); |
| dmc = &dev_priv->dmc; |
| |
| + /* Wait until root filesystem is loaded in case the firmware |
| + * is not built-in but in /lib/firmware */ |
| + WARN(_wait_for(system_state == SYSTEM_RUNNING, |
| + rootfs_timeout_ms * 1000, 10 * 1000, 100 * 1000), |
| + "Timing out after waiting %dms for SYSTEM_RUNNING", |
| + rootfs_timeout_ms); |
| + |
| request_firmware(&fw, dev_priv->dmc.fw_path, dev_priv->drm.dev); |
| parse_dmc_fw(dev_priv, fw); |
| |
| -- |
| 2.17.1 |
| |