Skip to content

Commit 37e2100

Browse files
committed
drm/i915/opregion: abstract getting the opregion VBT
Add a function to get the opregion VBT instead of accessing the opregion structures directly. Cc: Radhakrishna Sripada <radhakrishna.sripada@intel.com> Reviewed-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/8205b8fa724f98bbf1f76c59e661909d874e843e.1704992868.git.jani.nikula@intel.com
1 parent bb94644 commit 37e2100

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

drivers/gpu/drm/i915/display/intel_bios.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3073,7 +3073,7 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915)
30733073
*/
30743074
void intel_bios_init(struct drm_i915_private *i915)
30753075
{
3076-
const struct vbt_header *vbt = i915->display.opregion.vbt;
3076+
const struct vbt_header *vbt;
30773077
struct vbt_header *oprom_vbt = NULL;
30783078
const struct bdb_header *bdb;
30793079

@@ -3088,6 +3088,8 @@ void intel_bios_init(struct drm_i915_private *i915)
30883088

30893089
init_vbt_defaults(i915);
30903090

3091+
vbt = intel_opregion_get_vbt(i915, NULL);
3092+
30913093
/*
30923094
* If the OpRegion does not have VBT, look in SPI flash through MMIO or
30933095
* PCI mapping
@@ -3305,7 +3307,7 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
33053307
* additional data. Trust that if the VBT was written into
33063308
* the OpRegion then they have validated the LVDS's existence.
33073309
*/
3308-
if (i915->display.opregion.vbt)
3310+
if (intel_opregion_get_vbt(i915, NULL))
33093311
return true;
33103312
}
33113313

@@ -3660,14 +3662,16 @@ void intel_bios_for_each_encoder(struct drm_i915_private *i915,
36603662
static int intel_bios_vbt_show(struct seq_file *m, void *unused)
36613663
{
36623664
struct drm_i915_private *i915 = m->private;
3663-
struct intel_opregion *opregion = &i915->display.opregion;
3665+
const void *vbt;
3666+
size_t vbt_size;
36643667

36653668
/*
36663669
* FIXME: VBT might originate from other places than opregion, and then
36673670
* this would be incorrect.
36683671
*/
3669-
if (opregion->vbt)
3670-
seq_write(m, opregion->vbt, opregion->vbt_size);
3672+
vbt = intel_opregion_get_vbt(i915, &vbt_size);
3673+
if (vbt)
3674+
seq_write(m, vbt, vbt_size);
36713675

36723676
return 0;
36733677
}

drivers/gpu/drm/i915/display/intel_opregion.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,6 +1132,19 @@ const struct drm_edid *intel_opregion_get_edid(struct intel_connector *intel_con
11321132
return drm_edid;
11331133
}
11341134

1135+
const void *intel_opregion_get_vbt(struct drm_i915_private *i915, size_t *size)
1136+
{
1137+
struct intel_opregion *opregion = &i915->display.opregion;
1138+
1139+
if (!opregion->vbt)
1140+
return NULL;
1141+
1142+
if (size)
1143+
*size = opregion->vbt_size;
1144+
1145+
return opregion->vbt;
1146+
}
1147+
11351148
bool intel_opregion_headless_sku(struct drm_i915_private *i915)
11361149
{
11371150
struct intel_opregion *opregion = &i915->display.opregion;

drivers/gpu/drm/i915/display/intel_opregion.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv,
7777
int intel_opregion_get_panel_type(struct drm_i915_private *dev_priv);
7878
const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector);
7979

80+
const void *intel_opregion_get_vbt(struct drm_i915_private *i915, size_t *size);
81+
8082
bool intel_opregion_headless_sku(struct drm_i915_private *i915);
8183

8284
void intel_opregion_debugfs_register(struct drm_i915_private *i915);
@@ -136,6 +138,12 @@ intel_opregion_get_edid(struct intel_connector *connector)
136138
return NULL;
137139
}
138140

141+
static inline const void *
142+
intel_opregion_get_vbt(struct drm_i915_private *i915, size_t *size)
143+
{
144+
return NULL;
145+
}
146+
139147
static inline bool intel_opregion_headless_sku(struct drm_i915_private *i915)
140148
{
141149
return false;

0 commit comments

Comments
 (0)