Merge tag 'drm-misc-next-2025-02-12' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-next

drm-misc-next for v6.15:

UAPI Changes:

fourcc:
- Add modifiers for MediaTek tiled formats

Cross-subsystem Changes:

bus:
- mhi: Enable image transfer via BHIe in PBL

dma-buf:
- Add fast-path for single-fence merging

Core Changes:

atomic helper:
- Allow full modeset on connector changes
- Clarify semantics of allow_modeset
- Clarify semantics of drm_atomic_helper_check()

buddy allocator:
- Fix multi-root cleanup

ci:
- Update IGT

display:
- dp: Support Extendeds Wake Timeout
- dp_mst: Fix RAD-to-string conversion

panic:
- Encode QR code according to Fido 2.2

probe helper:
- Cleanups

scheduler:
- Cleanups

ttm:
- Refactor pool-allocation code
- Cleanups

Driver Changes:

amdxdma:
- Fix error handling
- Cleanups

ast:
- Refactor detection of transmitter chips
- Refactor support of VBIOS display-mode handling
- astdp: Fix connection status; Filter unsupported display modes

bridge:
- adv7511: Report correct capabilities
- it6505: Fix HDCP V compare
- sn65dsi86: Fix device IDs
- Cleanups

i915:
- Enable Extendeds Wake Timeout

imagination:
- Check job dependencies with DRM-sched helper

ivpu:
- Improve command-queue handling
- Use workqueue for IRQ handling
- Add suport for HW fault injection
- Locking fixes
- Cleanups

mgag200:
- Add support for G200eH5 chips

msm:
- dpu: Add concurrent writeback support for DPU 10.x+

nouveau:
- Move drm_slave_encoder interface into driver
- nvkm: Refactor GSP RPC

omapdrm:
- Cleanups

panel:
- Convert several panels to multi-style functions to improve error
  handling
- edp: Add support for B140UAN04.4, BOE NV140FHM-NZ, CSW MNB601LS1-3,
  LG LP079QX1-SP0V, MNE007QS3-7, STA 116QHD024002, Starry 116KHD024006,
  Lenovo T14s Gen6 Snapdragon
- himax-hx83102: Add support for CSOT PNA957QT1-1, Kingdisplay
  kd110n11-51ie, Starry 2082109qfh040022-50e

panthor:
- Expose sizes of intenral BOs via fdinfo
- Fix race between reset and suspend
- Cleanups

qaic:
- Add support for AIC200
- Cleanups

renesas:
- Fix limits in DT bindings

rockchip:
- rk3576: Add HDMI support
- vop2: Add new display modes on RK3588 HDMI0 up to 4K
- Don't change HDMI reference clock rate
- Fix DT bindings

solomon:
- Set SPI device table to silence warnings
- Fix pixel and scanline encoding

v3d:
- Cleanups

vc4:
- Use drm_exec
- Use dma-resv for wait-BO ioctl
- Remove seqno infrastructure

virtgpu:
- Support partial mappings of GEM objects
- Reserve VGA resources during initialization
- Fix UAF in virtgpu_dma_buf_free_obj()
- Add panic support

vkms:
- Switch to a managed modesetting pipeline
- Add support for ARGB8888

xlnx:
- Set correct DMA segment size
- Fix error handling
- Fix docs

Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20250212090625.GA24865@linux.fritz.box
This commit is contained in:
Dave Airlie
2025-02-14 10:17:26 +10:00
309 changed files with 7951 additions and 3189 deletions

View File

@@ -327,7 +327,7 @@ static int drm_bridge_connector_get_modes(struct drm_connector *connector)
static enum drm_mode_status
drm_bridge_connector_mode_valid(struct drm_connector *connector,
struct drm_display_mode *mode)
const struct drm_display_mode *mode)
{
struct drm_bridge_connector *bridge_connector =
to_drm_bridge_connector(connector);

View File

@@ -459,6 +459,64 @@ void drm_dp_lttpr_link_train_channel_eq_delay(const struct drm_dp_aux *aux,
}
EXPORT_SYMBOL(drm_dp_lttpr_link_train_channel_eq_delay);
/**
* drm_dp_lttpr_wake_timeout_setup() - Grant extended time for sink to wake up
* @aux: The DP AUX channel to use
* @transparent_mode: This is true if lttpr is in transparent mode
*
* This function checks if the sink needs any extended wake time, if it does
* it grants this request. Post this setup the source device can keep trying
* the Aux transaction till the granted wake timeout.
* If this function is not called all Aux transactions are expected to take
* a default of 1ms before they throw an error.
*/
void drm_dp_lttpr_wake_timeout_setup(struct drm_dp_aux *aux, bool transparent_mode)
{
u8 val = 1;
int ret;
if (transparent_mode) {
static const u8 timeout_mapping[] = {
[DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_1_MS] = 1,
[DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS] = 20,
[DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_40_MS] = 40,
[DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_60_MS] = 60,
[DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_80_MS] = 80,
[DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_100_MS] = 100,
};
ret = drm_dp_dpcd_readb(aux, DP_EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_REQUEST, &val);
if (ret != 1) {
drm_dbg_kms(aux->drm_dev,
"Failed to read Extended sleep wake timeout request\n");
return;
}
val = (val < sizeof(timeout_mapping) && timeout_mapping[val]) ?
timeout_mapping[val] : 1;
if (val > 1)
drm_dp_dpcd_writeb(aux,
DP_EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_GRANT,
DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_GRANTED);
} else {
ret = drm_dp_dpcd_readb(aux, DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT, &val);
if (ret != 1) {
drm_dbg_kms(aux->drm_dev,
"Failed to read Extended sleep wake timeout request\n");
return;
}
val = (val & DP_EXTENDED_WAKE_TIMEOUT_REQUEST_MASK) ?
(val & DP_EXTENDED_WAKE_TIMEOUT_REQUEST_MASK) * 10 : 1;
if (val > 1)
drm_dp_dpcd_writeb(aux, DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT,
DP_EXTENDED_WAKE_TIMEOUT_GRANT);
}
}
EXPORT_SYMBOL(drm_dp_lttpr_wake_timeout_setup);
u8 drm_dp_link_rate_to_bw_code(int link_rate)
{
switch (link_rate) {

View File

@@ -171,18 +171,30 @@ static const char *drm_dp_mst_sideband_tx_state_str(int state)
return sideband_reason_str[state];
}
static inline u8
drm_dp_mst_get_ufp_num_at_lct_from_rad(u8 lct, const u8 *rad)
{
int idx = (lct / 2) - 1;
int shift = (lct % 2) ? 0 : 4;
u8 ufp_num;
/* mst_primary, it's rad is unset*/
if (lct == 1)
return 0;
ufp_num = (rad[idx] >> shift) & 0xf;
return ufp_num;
}
static int
drm_dp_mst_rad_to_str(const u8 rad[8], u8 lct, char *out, size_t len)
{
int i;
u8 unpacked_rad[16];
u8 unpacked_rad[16] = {};
for (i = 0; i < lct; i++) {
if (i % 2)
unpacked_rad[i] = rad[i / 2] >> 4;
else
unpacked_rad[i] = rad[i / 2] & BIT_MASK(4);
}
for (i = 0; i < lct; i++)
unpacked_rad[i] = drm_dp_mst_get_ufp_num_at_lct_from_rad(i + 1, rad);
/* TODO: Eventually add something to printk so we can format the rad
* like this: 1.2.3
@@ -2544,9 +2556,8 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_
if (!mstb)
goto out;
for (i = 0; i < lct - 1; i++) {
int shift = (i % 2) ? 0 : 4;
int port_num = (rad[i / 2] >> shift) & 0xf;
for (i = 1; i < lct; i++) {
int port_num = drm_dp_mst_get_ufp_num_at_lct_from_rad(i + 1, rad);
list_for_each_entry(port, &mstb->ports, next) {
if (port->port_num == port_num) {

View File

@@ -542,7 +542,7 @@ EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_check);
*/
enum drm_mode_status
drm_hdmi_connector_mode_valid(struct drm_connector *connector,
struct drm_display_mode *mode)
const struct drm_display_mode *mode)
{
unsigned long long clock;