Commit 5fa576d7 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'drm-fixes-2022-05-06' of git://anongit.freedesktop.org/drm/drm

Pull drm fixes from Dave Airlie:
 "A pretty quiet week, one fbdev, msm, kconfig, and two amdgpu fixes,
  about what I'd expect for rc6.

  fbdev:

   - hotunplugging fix

  amdgpu:

   - Fix a xen dom0 regression on APUs

   - Fix a potential array overflow if a receiver were to send an
     erroneous audio channel count

  msm:

   - lockdep fix.

  it6505:

   - kconfig fix"

* tag 'drm-fixes-2022-05-06' of git://anongit.freedesktop.org/drm/drm:
  drm/amd/display: Avoid reading audio pattern past AUDIO_CHANNELS_COUNT
  drm/amdgpu: do not use passthrough mode in Xen dom0
  drm/bridge: ite-it6505: add missing Kconfig option select
  fbdev: Make fb_release() return -ENODEV if fbdev was unregistered
  drm/msm/dp: remove fail safe mode related code
parents fe27d189 57273752
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <drm/drm_drv.h> #include <drm/drm_drv.h>
#include <xen/xen.h>
#include "amdgpu.h" #include "amdgpu.h"
#include "amdgpu_ras.h" #include "amdgpu_ras.h"
...@@ -710,7 +711,8 @@ void amdgpu_detect_virtualization(struct amdgpu_device *adev) ...@@ -710,7 +711,8 @@ void amdgpu_detect_virtualization(struct amdgpu_device *adev)
adev->virt.caps |= AMDGPU_SRIOV_CAPS_ENABLE_IOV; adev->virt.caps |= AMDGPU_SRIOV_CAPS_ENABLE_IOV;
if (!reg) { if (!reg) {
if (is_virtual_machine()) /* passthrough mode exclus sriov mod */ /* passthrough mode exclus sriov mod */
if (is_virtual_machine() && !xen_initial_domain())
adev->virt.caps |= AMDGPU_PASSTHROUGH_MODE; adev->virt.caps |= AMDGPU_PASSTHROUGH_MODE;
} }
......
...@@ -4440,7 +4440,7 @@ static void dp_test_get_audio_test_data(struct dc_link *link, bool disable_video ...@@ -4440,7 +4440,7 @@ static void dp_test_get_audio_test_data(struct dc_link *link, bool disable_video
&dpcd_pattern_type.value, &dpcd_pattern_type.value,
sizeof(dpcd_pattern_type)); sizeof(dpcd_pattern_type));
channel_count = dpcd_test_mode.bits.channel_count + 1; channel_count = min(dpcd_test_mode.bits.channel_count + 1, AUDIO_CHANNELS_COUNT);
// read pattern periods for requested channels when sawTooth pattern is requested // read pattern periods for requested channels when sawTooth pattern is requested
if (dpcd_pattern_type.value == AUDIO_TEST_PATTERN_SAWTOOTH || if (dpcd_pattern_type.value == AUDIO_TEST_PATTERN_SAWTOOTH ||
......
...@@ -78,6 +78,7 @@ config DRM_ITE_IT6505 ...@@ -78,6 +78,7 @@ config DRM_ITE_IT6505
tristate "ITE IT6505 DisplayPort bridge" tristate "ITE IT6505 DisplayPort bridge"
depends on OF depends on OF
select DRM_KMS_HELPER select DRM_KMS_HELPER
select DRM_DP_HELPER
select EXTCON select EXTCON
help help
ITE IT6505 DisplayPort bridge chip driver. ITE IT6505 DisplayPort bridge chip driver.
......
...@@ -580,12 +580,6 @@ static int dp_hpd_plug_handle(struct dp_display_private *dp, u32 data) ...@@ -580,12 +580,6 @@ static int dp_hpd_plug_handle(struct dp_display_private *dp, u32 data)
dp->dp_display.connector_type, state); dp->dp_display.connector_type, state);
mutex_unlock(&dp->event_mutex); mutex_unlock(&dp->event_mutex);
/*
* add fail safe mode outside event_mutex scope
* to avoid potiential circular lock with drm thread
*/
dp_panel_add_fail_safe_mode(dp->dp_display.connector);
/* uevent will complete connection part */ /* uevent will complete connection part */
return 0; return 0;
}; };
......
...@@ -151,15 +151,6 @@ static int dp_panel_update_modes(struct drm_connector *connector, ...@@ -151,15 +151,6 @@ static int dp_panel_update_modes(struct drm_connector *connector,
return rc; return rc;
} }
void dp_panel_add_fail_safe_mode(struct drm_connector *connector)
{
/* fail safe edid */
mutex_lock(&connector->dev->mode_config.mutex);
if (drm_add_modes_noedid(connector, 640, 480))
drm_set_preferred_mode(connector, 640, 480);
mutex_unlock(&connector->dev->mode_config.mutex);
}
int dp_panel_read_sink_caps(struct dp_panel *dp_panel, int dp_panel_read_sink_caps(struct dp_panel *dp_panel,
struct drm_connector *connector) struct drm_connector *connector)
{ {
...@@ -215,8 +206,6 @@ int dp_panel_read_sink_caps(struct dp_panel *dp_panel, ...@@ -215,8 +206,6 @@ int dp_panel_read_sink_caps(struct dp_panel *dp_panel,
rc = -ETIMEDOUT; rc = -ETIMEDOUT;
goto end; goto end;
} }
dp_panel_add_fail_safe_mode(connector);
} }
if (panel->aux_cfg_update_done) { if (panel->aux_cfg_update_done) {
......
...@@ -59,7 +59,6 @@ int dp_panel_init_panel_info(struct dp_panel *dp_panel); ...@@ -59,7 +59,6 @@ int dp_panel_init_panel_info(struct dp_panel *dp_panel);
int dp_panel_deinit(struct dp_panel *dp_panel); int dp_panel_deinit(struct dp_panel *dp_panel);
int dp_panel_timing_cfg(struct dp_panel *dp_panel); int dp_panel_timing_cfg(struct dp_panel *dp_panel);
void dp_panel_dump_regs(struct dp_panel *dp_panel); void dp_panel_dump_regs(struct dp_panel *dp_panel);
void dp_panel_add_fail_safe_mode(struct drm_connector *connector);
int dp_panel_read_sink_caps(struct dp_panel *dp_panel, int dp_panel_read_sink_caps(struct dp_panel *dp_panel,
struct drm_connector *connector); struct drm_connector *connector);
u32 dp_panel_get_mode_bpp(struct dp_panel *dp_panel, u32 mode_max_bpp, u32 dp_panel_get_mode_bpp(struct dp_panel *dp_panel, u32 mode_max_bpp,
......
...@@ -1434,7 +1434,10 @@ fb_release(struct inode *inode, struct file *file) ...@@ -1434,7 +1434,10 @@ fb_release(struct inode *inode, struct file *file)
__acquires(&info->lock) __acquires(&info->lock)
__releases(&info->lock) __releases(&info->lock)
{ {
struct fb_info * const info = file->private_data; struct fb_info * const info = file_fb_info(file);
if (!info)
return -ENODEV;
lock_fb_info(info); lock_fb_info(info);
if (info->fbops->fb_release) if (info->fbops->fb_release)
......
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