From: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: Radhakrishna Sripada <radhakrishna.sripada@intel.com>,
Jani Nikula <jani.nikula@intel.com>
Subject: [PATCH v3 3/6] drm/i915: Move vbt read from firmware to intel_bios.c
Date: Wed, 28 Feb 2024 13:32:32 -0800 [thread overview]
Message-ID: <20240228213235.2495611-4-radhakrishna.sripada@intel.com> (raw)
In-Reply-To: <20240228213235.2495611-1-radhakrishna.sripada@intel.com>
VBT read from firmware is currently nested within opregion vbt read.
Extract it and place it together with other vbt read mechanisms and
dis-associate vbt-firmware from opregion structure.
v2: Return NULL in failure cases and use a null check in
intel_bios_init(Jani)
Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 45 +++++++++++++++++-
drivers/gpu/drm/i915/display/intel_opregion.c | 46 -------------------
2 files changed, 44 insertions(+), 47 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 2723f4319b5f..a66fc79466bd 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -25,6 +25,8 @@
*
*/
+#include <linux/firmware.h>
+
#include <drm/display/drm_dp_helper.h>
#include <drm/display/drm_dsc_helper.h>
#include <drm/drm_edid.h>
@@ -2950,6 +2952,43 @@ bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
return vbt;
}
+static struct vbt_header *firmware_get_vbt(struct drm_i915_private *i915,
+ size_t *size)
+{
+ struct vbt_header *vbt = NULL;
+ const struct firmware *fw = NULL;
+ const char *name = i915->display.params.vbt_firmware;
+ int ret;
+
+ if (!name || !*name)
+ return NULL;
+
+ ret = request_firmware(&fw, name, i915->drm.dev);
+ if (ret) {
+ drm_err(&i915->drm,
+ "Requesting VBT firmware \"%s\" failed (%d)\n",
+ name, ret);
+ return NULL;
+ }
+
+ if (intel_bios_is_valid_vbt(i915, fw->data, fw->size)) {
+ vbt = kmemdup(fw->data, fw->size, GFP_KERNEL);
+ if (vbt) {
+ drm_dbg_kms(&i915->drm,
+ "Found valid VBT firmware \"%s\"\n", name);
+ if (size)
+ *size = fw->size;
+ }
+ } else {
+ drm_dbg_kms(&i915->drm, "Invalid VBT firmware \"%s\"\n",
+ name);
+ }
+
+ release_firmware(fw);
+
+ return vbt;
+}
+
static u32 intel_spi_read(struct intel_uncore *uncore, u32 offset)
{
intel_uncore_write(uncore, PRIMARY_SPI_ADDRESS, offset);
@@ -3102,7 +3141,11 @@ void intel_bios_init(struct drm_i915_private *i915)
init_vbt_defaults(i915);
- vbt = intel_opregion_get_vbt(i915, NULL);
+ oprom_vbt = firmware_get_vbt(i915, NULL);
+ vbt = oprom_vbt;
+
+ if (!vbt)
+ vbt = intel_opregion_get_vbt(i915, NULL);
/*
* If the OpRegion does not have VBT, look in SPI flash through MMIO or
diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
index fcbb083318a7..5d07a002edaa 100644
--- a/drivers/gpu/drm/i915/display/intel_opregion.c
+++ b/drivers/gpu/drm/i915/display/intel_opregion.c
@@ -27,7 +27,6 @@
#include <linux/acpi.h>
#include <linux/dmi.h>
-#include <linux/firmware.h>
#include <acpi/video.h>
#include <drm/drm_edid.h>
@@ -263,7 +262,6 @@ struct intel_opregion {
struct opregion_asle *asle;
struct opregion_asle_ext *asle_ext;
void *rvda;
- void *vbt_firmware;
const void *vbt;
u32 vbt_size;
struct work_struct asle_work;
@@ -869,46 +867,6 @@ static const struct dmi_system_id intel_no_opregion_vbt[] = {
{ }
};
-static int intel_load_vbt_firmware(struct drm_i915_private *dev_priv)
-{
- struct intel_opregion *opregion = dev_priv->display.opregion;
- const struct firmware *fw = NULL;
- const char *name = dev_priv->display.params.vbt_firmware;
- int ret;
-
- if (!name || !*name)
- return -ENOENT;
-
- ret = request_firmware(&fw, name, dev_priv->drm.dev);
- if (ret) {
- drm_err(&dev_priv->drm,
- "Requesting VBT firmware \"%s\" failed (%d)\n",
- name, ret);
- return ret;
- }
-
- if (intel_bios_is_valid_vbt(dev_priv, fw->data, fw->size)) {
- opregion->vbt_firmware = kmemdup(fw->data, fw->size, GFP_KERNEL);
- if (opregion->vbt_firmware) {
- drm_dbg_kms(&dev_priv->drm,
- "Found valid VBT firmware \"%s\"\n", name);
- opregion->vbt = opregion->vbt_firmware;
- opregion->vbt_size = fw->size;
- ret = 0;
- } else {
- ret = -ENOMEM;
- }
- } else {
- drm_dbg_kms(&dev_priv->drm, "Invalid VBT firmware \"%s\"\n",
- name);
- ret = -EINVAL;
- }
-
- release_firmware(fw);
-
- return ret;
-}
-
int intel_opregion_setup(struct drm_i915_private *dev_priv)
{
struct intel_opregion *opregion;
@@ -1006,9 +964,6 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
drm_dbg(&dev_priv->drm, "Mailbox #2 for backlight present\n");
}
- if (intel_load_vbt_firmware(dev_priv) == 0)
- goto out;
-
if (dmi_check_system(intel_no_opregion_vbt))
goto out;
@@ -1312,7 +1267,6 @@ void intel_opregion_cleanup(struct drm_i915_private *i915)
memunmap(opregion->header);
if (opregion->rvda)
memunmap(opregion->rvda);
- kfree(opregion->vbt_firmware);
kfree(opregion);
i915->display.opregion = NULL;
}
--
2.34.1
next prev parent reply other threads:[~2024-02-28 21:34 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-28 21:32 [PATCH v3 0/6] VBT read cleanup Radhakrishna Sripada
2024-02-28 21:32 ` [PATCH v3 1/6] drm/i915: Pass size to oprom_get_vbt Radhakrishna Sripada
2024-02-28 21:32 ` [PATCH v3 2/6] drm/i915: Pass size to spi_oprom_get_vbt Radhakrishna Sripada
2024-02-28 21:32 ` Radhakrishna Sripada [this message]
2024-02-28 21:32 ` [PATCH v3 4/6] drm/i915: Extract opregion vbt presence check Radhakrishna Sripada
2024-03-12 11:05 ` Thomas Weißschuh
2024-03-12 12:01 ` Jani Nikula
2024-02-28 21:32 ` [PATCH v3 5/6] drm/i915: Duplicate opregion vbt memory Radhakrishna Sripada
2024-02-28 21:32 ` [PATCH v3 6/6] drm/i915: Show bios vbt when read from firmware/spi/oprom Radhakrishna Sripada
2024-03-01 3:14 ` [PATCH v4] " Radhakrishna Sripada
2024-03-01 10:06 ` Jani Nikula
2024-03-01 22:12 ` [PATCH v5] " Radhakrishna Sripada
2024-03-04 9:59 ` Jani Nikula
2024-03-04 21:23 ` [PATCH v6] " Radhakrishna Sripada
2024-02-29 3:31 ` ✗ Fi.CI.SPARSE: warning for VBT read cleanup Patchwork
2024-02-29 3:41 ` ✓ Fi.CI.BAT: success " Patchwork
2024-02-29 15:10 ` [PATCH v3 0/6] " Jani Nikula
2024-03-01 0:39 ` ✗ Fi.CI.IGT: failure for " Patchwork
2024-03-01 4:00 ` ✗ Fi.CI.SPARSE: warning for VBT read cleanup (rev2) Patchwork
2024-03-01 4:14 ` ✓ Fi.CI.BAT: success " Patchwork
2024-03-01 22:49 ` ✗ Fi.CI.SPARSE: warning for VBT read cleanup (rev3) Patchwork
2024-03-01 23:08 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-03-02 0:21 ` ✓ Fi.CI.BAT: success for VBT read cleanup (rev4) Patchwork
2024-03-02 0:21 ` ✗ Fi.CI.SPARSE: warning " Patchwork
2024-03-02 1:31 ` ✗ Fi.CI.IGT: failure for VBT read cleanup (rev2) Patchwork
2024-03-02 17:42 ` ✗ Fi.CI.IGT: failure for VBT read cleanup (rev4) Patchwork
2024-03-05 4:40 ` ✗ Fi.CI.SPARSE: warning for VBT read cleanup (rev5) Patchwork
2024-03-05 4:58 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-03-05 7:37 ` ✗ Fi.CI.SPARSE: warning for VBT read cleanup (rev6) Patchwork
2024-03-05 7:54 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-03-08 13:37 ` ✗ Fi.CI.SPARSE: warning for VBT read cleanup (rev7) Patchwork
2024-03-08 13:53 ` ✓ Fi.CI.BAT: success " Patchwork
2024-03-09 3:00 ` ✗ Fi.CI.IGT: failure " Patchwork
2024-03-11 10:44 ` [PATCH v3 0/6] VBT read cleanup Jani Nikula
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240228213235.2495611-4-radhakrishna.sripada@intel.com \
--to=radhakrishna.sripada@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox