Commit f8678a33 authored by Dave Airlie's avatar Dave Airlie

Merge tag 'drm-misc-fixes-2023-12-14' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes

drm-misc-fixes for v6.7-rc6:
- Fix regression for checking if FD is master capable.
- Fix uninitialized variables in drm/crtc.
- Fix ivpu w/a.
- Refresh modes correctly when updating EDID.
- Small panel fixes.
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/2d46b68f-c5a4-45e5-beb4-411569f4aac8@linux.intel.com
parents 7beae483 6c9dbee8
...@@ -42,6 +42,8 @@ properties: ...@@ -42,6 +42,8 @@ properties:
- lg,acx467akm-7 - lg,acx467akm-7
# LG Corporation 7" WXGA TFT LCD panel # LG Corporation 7" WXGA TFT LCD panel
- lg,ld070wx3-sl01 - lg,ld070wx3-sl01
# LG Corporation 5" HD TFT LCD panel
- lg,lh500wx1-sd03
# One Stop Displays OSD101T2587-53TS 10.1" 1920x1200 panel # One Stop Displays OSD101T2587-53TS 10.1" 1920x1200 panel
- osddisplays,osd101t2587-53ts - osddisplays,osd101t2587-53ts
# Panasonic 10" WUXGA TFT LCD panel # Panasonic 10" WUXGA TFT LCD panel
......
...@@ -208,8 +208,6 @@ properties: ...@@ -208,8 +208,6 @@ properties:
- lemaker,bl035-rgb-002 - lemaker,bl035-rgb-002
# LG 7" (800x480 pixels) TFT LCD panel # LG 7" (800x480 pixels) TFT LCD panel
- lg,lb070wv8 - lg,lb070wv8
# LG Corporation 5" HD TFT LCD panel
- lg,lh500wx1-sd03
# LG LP079QX1-SP0V 7.9" (1536x2048 pixels) TFT LCD panel # LG LP079QX1-SP0V 7.9" (1536x2048 pixels) TFT LCD panel
- lg,lp079qx1-sp0v - lg,lp079qx1-sp0v
# LG 9.7" (2048x1536 pixels) TFT LCD panel # LG 9.7" (2048x1536 pixels) TFT LCD panel
......
...@@ -53,10 +53,12 @@ ...@@ -53,10 +53,12 @@
#define ICB_0_1_IRQ_MASK ((((u64)ICB_1_IRQ_MASK) << 32) | ICB_0_IRQ_MASK) #define ICB_0_1_IRQ_MASK ((((u64)ICB_1_IRQ_MASK) << 32) | ICB_0_IRQ_MASK)
#define BUTTRESS_IRQ_MASK ((REG_FLD(VPU_37XX_BUTTRESS_INTERRUPT_STAT, FREQ_CHANGE)) | \ #define BUTTRESS_IRQ_MASK ((REG_FLD(VPU_37XX_BUTTRESS_INTERRUPT_STAT, ATS_ERR)) | \
(REG_FLD(VPU_37XX_BUTTRESS_INTERRUPT_STAT, ATS_ERR)) | \
(REG_FLD(VPU_37XX_BUTTRESS_INTERRUPT_STAT, UFI_ERR))) (REG_FLD(VPU_37XX_BUTTRESS_INTERRUPT_STAT, UFI_ERR)))
#define BUTTRESS_ALL_IRQ_MASK (BUTTRESS_IRQ_MASK | \
(REG_FLD(VPU_37XX_BUTTRESS_INTERRUPT_STAT, FREQ_CHANGE)))
#define BUTTRESS_IRQ_ENABLE_MASK ((u32)~BUTTRESS_IRQ_MASK) #define BUTTRESS_IRQ_ENABLE_MASK ((u32)~BUTTRESS_IRQ_MASK)
#define BUTTRESS_IRQ_DISABLE_MASK ((u32)-1) #define BUTTRESS_IRQ_DISABLE_MASK ((u32)-1)
...@@ -74,8 +76,12 @@ static void ivpu_hw_wa_init(struct ivpu_device *vdev) ...@@ -74,8 +76,12 @@ static void ivpu_hw_wa_init(struct ivpu_device *vdev)
vdev->wa.clear_runtime_mem = false; vdev->wa.clear_runtime_mem = false;
vdev->wa.d3hot_after_power_off = true; vdev->wa.d3hot_after_power_off = true;
if (ivpu_device_id(vdev) == PCI_DEVICE_ID_MTL && ivpu_revision(vdev) < 4) REGB_WR32(VPU_37XX_BUTTRESS_INTERRUPT_STAT, BUTTRESS_ALL_IRQ_MASK);
if (REGB_RD32(VPU_37XX_BUTTRESS_INTERRUPT_STAT) == BUTTRESS_ALL_IRQ_MASK) {
/* Writing 1s does not clear the interrupt status register */
vdev->wa.interrupt_clear_with_0 = true; vdev->wa.interrupt_clear_with_0 = true;
REGB_WR32(VPU_37XX_BUTTRESS_INTERRUPT_STAT, 0x0);
}
IVPU_PRINT_WA(punit_disabled); IVPU_PRINT_WA(punit_disabled);
IVPU_PRINT_WA(clear_runtime_mem); IVPU_PRINT_WA(clear_runtime_mem);
......
...@@ -236,7 +236,7 @@ static int ...@@ -236,7 +236,7 @@ static int
drm_master_check_perm(struct drm_device *dev, struct drm_file *file_priv) drm_master_check_perm(struct drm_device *dev, struct drm_file *file_priv)
{ {
if (file_priv->was_master && if (file_priv->was_master &&
rcu_access_pointer(file_priv->pid) == task_pid(current)) rcu_access_pointer(file_priv->pid) == task_tgid(current))
return 0; return 0;
if (!capable(CAP_SYS_ADMIN)) if (!capable(CAP_SYS_ADMIN))
......
...@@ -715,8 +715,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, ...@@ -715,8 +715,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
struct drm_mode_set set; struct drm_mode_set set;
uint32_t __user *set_connectors_ptr; uint32_t __user *set_connectors_ptr;
struct drm_modeset_acquire_ctx ctx; struct drm_modeset_acquire_ctx ctx;
int ret; int ret, i, num_connectors = 0;
int i;
if (!drm_core_check_feature(dev, DRIVER_MODESET)) if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -871,6 +870,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, ...@@ -871,6 +870,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
connector->name); connector->name);
connector_set[i] = connector; connector_set[i] = connector;
num_connectors++;
} }
} }
...@@ -879,7 +879,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, ...@@ -879,7 +879,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
set.y = crtc_req->y; set.y = crtc_req->y;
set.mode = mode; set.mode = mode;
set.connectors = connector_set; set.connectors = connector_set;
set.num_connectors = crtc_req->count_connectors; set.num_connectors = num_connectors;
set.fb = fb; set.fb = fb;
if (drm_drv_uses_atomic_modeset(dev)) if (drm_drv_uses_atomic_modeset(dev))
...@@ -892,7 +892,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, ...@@ -892,7 +892,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
drm_framebuffer_put(fb); drm_framebuffer_put(fb);
if (connector_set) { if (connector_set) {
for (i = 0; i < crtc_req->count_connectors; i++) { for (i = 0; i < num_connectors; i++) {
if (connector_set[i]) if (connector_set[i])
drm_connector_put(connector_set[i]); drm_connector_put(connector_set[i]);
} }
......
...@@ -2309,7 +2309,8 @@ int drm_edid_override_connector_update(struct drm_connector *connector) ...@@ -2309,7 +2309,8 @@ int drm_edid_override_connector_update(struct drm_connector *connector)
override = drm_edid_override_get(connector); override = drm_edid_override_get(connector);
if (override) { if (override) {
num_modes = drm_edid_connector_update(connector, override); if (drm_edid_connector_update(connector, override) == 0)
num_modes = drm_edid_connector_add_modes(connector);
drm_edid_free(override); drm_edid_free(override);
......
...@@ -326,7 +326,7 @@ static const struct drm_display_mode ltk050h3148w_mode = { ...@@ -326,7 +326,7 @@ static const struct drm_display_mode ltk050h3148w_mode = {
static const struct ltk050h3146w_desc ltk050h3148w_data = { static const struct ltk050h3146w_desc ltk050h3148w_data = {
.mode = &ltk050h3148w_mode, .mode = &ltk050h3148w_mode,
.init = ltk050h3148w_init_sequence, .init = ltk050h3148w_init_sequence,
.mode_flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE, .mode_flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_VIDEO_BURST,
}; };
static int ltk050h3146w_init_sequence(struct ltk050h3146w *ctx) static int ltk050h3146w_init_sequence(struct ltk050h3146w *ctx)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment