Skip to content

Commit 22c73ba

Browse files
committed
Merge tag 'drm-intel-fixes-2022-04-28' of git://anongit.freedesktop.org/drm/drm-intel into drm-fixes
- Fix #5284: Backlight control regression on XMG Core 15 e21 - Fix black display plane on Acer One AO532h - Two smaller display fixes Signed-off-by: Dave Airlie <[email protected]> From: Joonas Lahtinen <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents 43f2c10 + f7e1089 commit 22c73ba

File tree

3 files changed

+30
-12
lines changed

3 files changed

+30
-12
lines changed

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

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@
9797

9898
#define INTEL_EDP_BRIGHTNESS_OPTIMIZATION_1 0x359
9999

100+
enum intel_dp_aux_backlight_modparam {
101+
INTEL_DP_AUX_BACKLIGHT_AUTO = -1,
102+
INTEL_DP_AUX_BACKLIGHT_OFF = 0,
103+
INTEL_DP_AUX_BACKLIGHT_ON = 1,
104+
INTEL_DP_AUX_BACKLIGHT_FORCE_VESA = 2,
105+
INTEL_DP_AUX_BACKLIGHT_FORCE_INTEL = 3,
106+
};
107+
100108
/* Intel EDP backlight callbacks */
101109
static bool
102110
intel_dp_aux_supports_hdr_backlight(struct intel_connector *connector)
@@ -126,6 +134,24 @@ intel_dp_aux_supports_hdr_backlight(struct intel_connector *connector)
126134
return false;
127135
}
128136

137+
/*
138+
* If we don't have HDR static metadata there is no way to
139+
* runtime detect used range for nits based control. For now
140+
* do not use Intel proprietary eDP backlight control if we
141+
* don't have this data in panel EDID. In case we find panel
142+
* which supports only nits based control, but doesn't provide
143+
* HDR static metadata we need to start maintaining table of
144+
* ranges for such panels.
145+
*/
146+
if (i915->params.enable_dpcd_backlight != INTEL_DP_AUX_BACKLIGHT_FORCE_INTEL &&
147+
!(connector->base.hdr_sink_metadata.hdmi_type1.metadata_type &
148+
BIT(HDMI_STATIC_METADATA_TYPE1))) {
149+
drm_info(&i915->drm,
150+
"Panel is missing HDR static metadata. Possible support for Intel HDR backlight interface is not used. If your backlight controls don't work try booting with i915.enable_dpcd_backlight=%d. needs this, please file a _new_ bug report on drm/i915, see " FDO_BUG_URL " for details.\n",
151+
INTEL_DP_AUX_BACKLIGHT_FORCE_INTEL);
152+
return false;
153+
}
154+
129155
panel->backlight.edp.intel.sdr_uses_aux =
130156
tcon_cap[2] & INTEL_EDP_SDR_TCON_BRIGHTNESS_AUX_CAP;
131157

@@ -413,14 +439,6 @@ static const struct intel_panel_bl_funcs intel_dp_vesa_bl_funcs = {
413439
.get = intel_dp_aux_vesa_get_backlight,
414440
};
415441

416-
enum intel_dp_aux_backlight_modparam {
417-
INTEL_DP_AUX_BACKLIGHT_AUTO = -1,
418-
INTEL_DP_AUX_BACKLIGHT_OFF = 0,
419-
INTEL_DP_AUX_BACKLIGHT_ON = 1,
420-
INTEL_DP_AUX_BACKLIGHT_FORCE_VESA = 2,
421-
INTEL_DP_AUX_BACKLIGHT_FORCE_INTEL = 3,
422-
};
423-
424442
int intel_dp_aux_init_backlight_funcs(struct intel_connector *connector)
425443
{
426444
struct drm_device *dev = connector->base.dev;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1037,7 +1037,7 @@ static int intel_fbc_check_plane(struct intel_atomic_state *state,
10371037
struct intel_plane_state *plane_state =
10381038
intel_atomic_get_new_plane_state(state, plane);
10391039
const struct drm_framebuffer *fb = plane_state->hw.fb;
1040-
struct intel_crtc *crtc = to_intel_crtc(plane_state->uapi.crtc);
1040+
struct intel_crtc *crtc = to_intel_crtc(plane_state->hw.crtc);
10411041
const struct intel_crtc_state *crtc_state;
10421042
struct intel_fbc *fbc = plane->fbc;
10431043

drivers/gpu/drm/i915/i915_reg.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4345,12 +4345,12 @@
43454345
#define _DSPAADDR 0x70184
43464346
#define _DSPASTRIDE 0x70188
43474347
#define _DSPAPOS 0x7018C /* reserved */
4348-
#define DISP_POS_Y_MASK REG_GENMASK(31, 0)
4348+
#define DISP_POS_Y_MASK REG_GENMASK(31, 16)
43494349
#define DISP_POS_Y(y) REG_FIELD_PREP(DISP_POS_Y_MASK, (y))
43504350
#define DISP_POS_X_MASK REG_GENMASK(15, 0)
43514351
#define DISP_POS_X(x) REG_FIELD_PREP(DISP_POS_X_MASK, (x))
43524352
#define _DSPASIZE 0x70190
4353-
#define DISP_HEIGHT_MASK REG_GENMASK(31, 0)
4353+
#define DISP_HEIGHT_MASK REG_GENMASK(31, 16)
43544354
#define DISP_HEIGHT(h) REG_FIELD_PREP(DISP_HEIGHT_MASK, (h))
43554355
#define DISP_WIDTH_MASK REG_GENMASK(15, 0)
43564356
#define DISP_WIDTH(w) REG_FIELD_PREP(DISP_WIDTH_MASK, (w))
@@ -5152,7 +5152,7 @@
51525152
#define _SEL_FETCH_PLANE_BASE_6_A 0x70940
51535153
#define _SEL_FETCH_PLANE_BASE_7_A 0x70960
51545154
#define _SEL_FETCH_PLANE_BASE_CUR_A 0x70880
5155-
#define _SEL_FETCH_PLANE_BASE_1_B 0x70990
5155+
#define _SEL_FETCH_PLANE_BASE_1_B 0x71890
51565156

51575157
#define _SEL_FETCH_PLANE_BASE_A(plane) _PICK(plane, \
51585158
_SEL_FETCH_PLANE_BASE_1_A, \

0 commit comments

Comments
 (0)