From: Greg Kroah-Hartman Date: Tue, 14 Sep 2021 16:28:26 +0000 (+0200) Subject: drop some sn65dsi86 patches from 5.14 queue X-Git-Tag: v5.4.146~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=650231d94b35447d31c46b9dd3c18c226f118425;p=thirdparty%2Fkernel%2Fstable-queue.git drop some sn65dsi86 patches from 5.14 queue --- diff --git a/queue-5.14/devlink-break-parameter-notification-sequence-to-be-.patch b/queue-5.14/devlink-break-parameter-notification-sequence-to-be-.patch deleted file mode 100644 index abd6193df94..00000000000 --- a/queue-5.14/devlink-break-parameter-notification-sequence-to-be-.patch +++ /dev/null @@ -1,260 +0,0 @@ -From 4728066867a2376366be8d627b5147870456556d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 29 Jul 2021 20:19:24 +0300 -Subject: devlink: Break parameter notification sequence to be before/after - unload/load driver - -From: Leon Romanovsky - -[ Upstream commit 05a7f4a8dff19999ca8a83a35ff4782689de7bfc ] - -The change of namespaces during devlink reload calls to driver unload -before it accesses devlink parameters. The commands below causes to -use-after-free bug when trying to get flow steering mode. - - * ip netns add n1 - * devlink dev reload pci/0000:00:09.0 netns n1 - - ================================================================== - BUG: KASAN: use-after-free in mlx5_devlink_fs_mode_get+0x96/0xa0 [mlx5_core] - Read of size 4 at addr ffff888009d04308 by task devlink/275 - - CPU: 6 PID: 275 Comm: devlink Not tainted 5.12.0-rc2+ #2853 - Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014 - Call Trace: - dump_stack+0x93/0xc2 - print_address_description.constprop.0+0x18/0x140 - ? mlx5_devlink_fs_mode_get+0x96/0xa0 [mlx5_core] - ? mlx5_devlink_fs_mode_get+0x96/0xa0 [mlx5_core] - kasan_report.cold+0x7c/0xd8 - ? mlx5_devlink_fs_mode_get+0x96/0xa0 [mlx5_core] - mlx5_devlink_fs_mode_get+0x96/0xa0 [mlx5_core] - devlink_nl_param_fill+0x1c8/0xe80 - ? __free_pages_ok+0x37a/0x8a0 - ? devlink_flash_update_timeout_notify+0xd0/0xd0 - ? lock_acquire+0x1a9/0x6d0 - ? fs_reclaim_acquire+0xb7/0x160 - ? lock_is_held_type+0x98/0x110 - ? 0xffffffff81000000 - ? lock_release+0x1f9/0x6c0 - ? fs_reclaim_release+0xa1/0xf0 - ? lock_downgrade+0x6d0/0x6d0 - ? lock_is_held_type+0x98/0x110 - ? lock_is_held_type+0x98/0x110 - ? memset+0x20/0x40 - ? __build_skb_around+0x1f8/0x2b0 - devlink_param_notify+0x6d/0x180 - devlink_reload+0x1c3/0x520 - ? devlink_remote_reload_actions_performed+0x30/0x30 - ? mutex_trylock+0x24b/0x2d0 - ? devlink_nl_cmd_reload+0x62b/0x1070 - devlink_nl_cmd_reload+0x66d/0x1070 - ? devlink_reload+0x520/0x520 - ? devlink_get_from_attrs+0x1bc/0x260 - ? devlink_nl_pre_doit+0x64/0x4d0 - genl_family_rcv_msg_doit+0x1e9/0x2f0 - ? mutex_lock_io_nested+0x1130/0x1130 - ? genl_family_rcv_msg_attrs_parse.constprop.0+0x240/0x240 - ? security_capable+0x51/0x90 - genl_rcv_msg+0x27f/0x4a0 - ? genl_get_cmd+0x3c0/0x3c0 - ? lock_acquire+0x1a9/0x6d0 - ? devlink_reload+0x520/0x520 - ? lock_release+0x6c0/0x6c0 - netlink_rcv_skb+0x11d/0x340 - ? genl_get_cmd+0x3c0/0x3c0 - ? netlink_ack+0x9f0/0x9f0 - ? lock_release+0x1f9/0x6c0 - genl_rcv+0x24/0x40 - netlink_unicast+0x433/0x700 - ? netlink_attachskb+0x730/0x730 - ? _copy_from_iter_full+0x178/0x650 - ? __alloc_skb+0x113/0x2b0 - netlink_sendmsg+0x6f1/0xbd0 - ? netlink_unicast+0x700/0x700 - ? lock_is_held_type+0x98/0x110 - ? netlink_unicast+0x700/0x700 - sock_sendmsg+0xb0/0xe0 - __sys_sendto+0x193/0x240 - ? __x64_sys_getpeername+0xb0/0xb0 - ? do_sys_openat2+0x10b/0x370 - ? __up_read+0x1a1/0x7b0 - ? do_user_addr_fault+0x219/0xdc0 - ? __x64_sys_openat+0x120/0x1d0 - ? __x64_sys_open+0x1a0/0x1a0 - __x64_sys_sendto+0xdd/0x1b0 - ? syscall_enter_from_user_mode+0x1d/0x50 - do_syscall_64+0x2d/0x40 - entry_SYSCALL_64_after_hwframe+0x44/0xae - RIP: 0033:0x7fc69d0af14a - Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 76 c3 0f 1f 44 00 00 55 48 83 ec 30 44 89 4c - RSP: 002b:00007ffc1d8292f8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c - RAX: ffffffffffffffda RBX: 0000000000000005 RCX: 00007fc69d0af14a - RDX: 0000000000000038 RSI: 0000555f57c56440 RDI: 0000000000000003 - RBP: 0000555f57c56410 R08: 00007fc69d17b200 R09: 000000000000000c - R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 - R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 - - Allocated by task 146: - kasan_save_stack+0x1b/0x40 - __kasan_kmalloc+0x99/0xc0 - mlx5_init_fs+0xf0/0x1c50 [mlx5_core] - mlx5_load+0xd2/0x180 [mlx5_core] - mlx5_init_one+0x2f6/0x450 [mlx5_core] - probe_one+0x47d/0x6e0 [mlx5_core] - pci_device_probe+0x2a0/0x4a0 - really_probe+0x20a/0xc90 - driver_probe_device+0xd8/0x380 - device_driver_attach+0x1df/0x250 - __driver_attach+0xff/0x240 - bus_for_each_dev+0x11e/0x1a0 - bus_add_driver+0x309/0x570 - driver_register+0x1ee/0x380 - 0xffffffffa06b8062 - do_one_initcall+0xd5/0x410 - do_init_module+0x1c8/0x760 - load_module+0x6d8b/0x9650 - __do_sys_finit_module+0x118/0x1b0 - do_syscall_64+0x2d/0x40 - entry_SYSCALL_64_after_hwframe+0x44/0xae - - Freed by task 275: - kasan_save_stack+0x1b/0x40 - kasan_set_track+0x1c/0x30 - kasan_set_free_info+0x20/0x30 - __kasan_slab_free+0x102/0x140 - slab_free_freelist_hook+0x74/0x1b0 - kfree+0xd7/0x2a0 - mlx5_unload+0x16/0xb0 [mlx5_core] - mlx5_unload_one+0xae/0x120 [mlx5_core] - mlx5_devlink_reload_down+0x1bc/0x380 [mlx5_core] - devlink_reload+0x141/0x520 - devlink_nl_cmd_reload+0x66d/0x1070 - genl_family_rcv_msg_doit+0x1e9/0x2f0 - genl_rcv_msg+0x27f/0x4a0 - netlink_rcv_skb+0x11d/0x340 - genl_rcv+0x24/0x40 - netlink_unicast+0x433/0x700 - netlink_sendmsg+0x6f1/0xbd0 - sock_sendmsg+0xb0/0xe0 - __sys_sendto+0x193/0x240 - __x64_sys_sendto+0xdd/0x1b0 - do_syscall_64+0x2d/0x40 - entry_SYSCALL_64_after_hwframe+0x44/0xae - - The buggy address belongs to the object at ffff888009d04300 - which belongs to the cache kmalloc-128 of size 128 - The buggy address is located 8 bytes inside of - 128-byte region [ffff888009d04300, ffff888009d04380) - The buggy address belongs to the page: - page:0000000086a64ecc refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff888009d04000 pfn:0x9d04 - head:0000000086a64ecc order:1 compound_mapcount:0 - flags: 0x4000000000010200(slab|head) - raw: 4000000000010200 ffffea0000203980 0000000200000002 ffff8880050428c0 - raw: ffff888009d04000 000000008020001d 00000001ffffffff 0000000000000000 - page dumped because: kasan: bad access detected - - Memory state around the buggy address: - ffff888009d04200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb - ffff888009d04280: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc - >ffff888009d04300: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb - ^ - ffff888009d04380: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc - ffff888009d04400: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb - ================================================================== - -The right solution to devlink reload is to notify about deletion of -parameters, unload driver, change net namespaces, load driver and notify -about addition of parameters. - -Fixes: 070c63f20f6c ("net: devlink: allow to change namespaces during reload") -Reviewed-by: Parav Pandit -Signed-off-by: Leon Romanovsky -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - net/core/devlink.c | 32 ++++++++++++++++++++------------ - 1 file changed, 20 insertions(+), 12 deletions(-) - -diff --git a/net/core/devlink.c b/net/core/devlink.c -index 85032626de24..3963b1bc1e59 100644 ---- a/net/core/devlink.c -+++ b/net/core/devlink.c -@@ -3801,10 +3801,12 @@ static void devlink_param_notify(struct devlink *devlink, - struct devlink_param_item *param_item, - enum devlink_command cmd); - --static void devlink_reload_netns_change(struct devlink *devlink, -- struct net *dest_net) -+static void devlink_ns_change_notify(struct devlink *devlink, -+ struct net *dest_net, struct net *curr_net, -+ bool new) - { - struct devlink_param_item *param_item; -+ enum devlink_command cmd; - - /* Userspace needs to be notified about devlink objects - * removed from original and entering new network namespace. -@@ -3812,17 +3814,18 @@ static void devlink_reload_netns_change(struct devlink *devlink, - * reload process so the notifications are generated separatelly. - */ - -- list_for_each_entry(param_item, &devlink->param_list, list) -- devlink_param_notify(devlink, 0, param_item, -- DEVLINK_CMD_PARAM_DEL); -- devlink_notify(devlink, DEVLINK_CMD_DEL); -+ if (!dest_net || net_eq(dest_net, curr_net)) -+ return; - -- __devlink_net_set(devlink, dest_net); -+ if (new) -+ devlink_notify(devlink, DEVLINK_CMD_NEW); - -- devlink_notify(devlink, DEVLINK_CMD_NEW); -+ cmd = new ? DEVLINK_CMD_PARAM_NEW : DEVLINK_CMD_PARAM_DEL; - list_for_each_entry(param_item, &devlink->param_list, list) -- devlink_param_notify(devlink, 0, param_item, -- DEVLINK_CMD_PARAM_NEW); -+ devlink_param_notify(devlink, 0, param_item, cmd); -+ -+ if (!new) -+ devlink_notify(devlink, DEVLINK_CMD_DEL); - } - - static bool devlink_reload_supported(const struct devlink_ops *ops) -@@ -3902,6 +3905,7 @@ static int devlink_reload(struct devlink *devlink, struct net *dest_net, - u32 *actions_performed, struct netlink_ext_ack *extack) - { - u32 remote_reload_stats[DEVLINK_RELOAD_STATS_ARRAY_SIZE]; -+ struct net *curr_net; - int err; - - if (!devlink->reload_enabled) -@@ -3909,18 +3913,22 @@ static int devlink_reload(struct devlink *devlink, struct net *dest_net, - - memcpy(remote_reload_stats, devlink->stats.remote_reload_stats, - sizeof(remote_reload_stats)); -+ -+ curr_net = devlink_net(devlink); -+ devlink_ns_change_notify(devlink, dest_net, curr_net, false); - err = devlink->ops->reload_down(devlink, !!dest_net, action, limit, extack); - if (err) - return err; - -- if (dest_net && !net_eq(dest_net, devlink_net(devlink))) -- devlink_reload_netns_change(devlink, dest_net); -+ if (dest_net && !net_eq(dest_net, curr_net)) -+ __devlink_net_set(devlink, dest_net); - - err = devlink->ops->reload_up(devlink, action, limit, actions_performed, extack); - devlink_reload_failed_set(devlink, !!err); - if (err) - return err; - -+ devlink_ns_change_notify(devlink, dest_net, curr_net, true); - WARN_ON(!(*actions_performed & BIT(action))); - /* Catch driver on updating the remote action within devlink reload */ - WARN_ON(memcmp(remote_reload_stats, devlink->stats.remote_reload_stats, --- -2.30.2 - diff --git a/queue-5.14/devlink-clear-whole-devlink_flash_notify-struct.patch b/queue-5.14/devlink-clear-whole-devlink_flash_notify-struct.patch index 9845b1cd1d6..022dc1bae8f 100644 --- a/queue-5.14/devlink-clear-whole-devlink_flash_notify-struct.patch +++ b/queue-5.14/devlink-clear-whole-devlink_flash_notify-struct.patch @@ -20,14 +20,12 @@ Signed-off-by: Leon Romanovsky Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- - net/core/devlink.c | 4 ++-- + net/core/devlink.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -diff --git a/net/core/devlink.c b/net/core/devlink.c -index 3963b1bc1e59..5a85a7b0feb2 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c -@@ -4125,7 +4125,7 @@ out_free_msg: +@@ -4117,7 +4117,7 @@ out_free_msg: static void devlink_flash_update_begin_notify(struct devlink *devlink) { @@ -36,7 +34,7 @@ index 3963b1bc1e59..5a85a7b0feb2 100644 __devlink_flash_update_notify(devlink, DEVLINK_CMD_FLASH_UPDATE, -@@ -4134,7 +4134,7 @@ static void devlink_flash_update_begin_notify(struct devlink *devlink) +@@ -4126,7 +4126,7 @@ static void devlink_flash_update_begin_n static void devlink_flash_update_end_notify(struct devlink *devlink) { @@ -45,6 +43,3 @@ index 3963b1bc1e59..5a85a7b0feb2 100644 __devlink_flash_update_notify(devlink, DEVLINK_CMD_FLASH_UPDATE_END, --- -2.30.2 - diff --git a/queue-5.14/drm-bridge-ti-sn65dsi86-add-some-100-us-delays.patch b/queue-5.14/drm-bridge-ti-sn65dsi86-add-some-100-us-delays.patch deleted file mode 100644 index 6daae739092..00000000000 --- a/queue-5.14/drm-bridge-ti-sn65dsi86-add-some-100-us-delays.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 4230a0fce84545a6e08a1348d584eae6f1ca7476 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 30 Jul 2021 08:46:02 -0700 -Subject: drm/bridge: ti-sn65dsi86: Add some 100 us delays - -From: Douglas Anderson - -[ Upstream commit e183bf31cf0d3a05162e633e428350ed176ce926 ] - -The manual has always said that we need 100 us delays in a few -places. Though it hasn't seemed to be a big deal to skip these, let's -add them in case it makes something happier. - -NOTE: this fixes no known issues but it seems good to make it right. - -Fixes: a095f15c00e2 ("drm/bridge: add support for sn65dsi86 bridge driver") -Signed-off-by: Douglas Anderson -Acked-by: Robert Foss -Reviewed-by: Sean Paul -Signed-off-by: Sam Ravnborg -Link: https://patchwork.freedesktop.org/patch/msgid/20210730084534.v2.3.I842d483139531aa4651da8338512fdf0171ff23c@changeid -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/ti-sn65dsi86.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c -index ecd4fa3a9a1d..c9cddf317c72 100644 ---- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c -+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c -@@ -304,6 +304,9 @@ static int __maybe_unused ti_sn65dsi86_resume(struct device *dev) - return ret; - } - -+ /* td2: min 100 us after regulators before enabling the GPIO */ -+ usleep_range(100, 110); -+ - gpiod_set_value(pdata->enable_gpio, 1); - - /* -@@ -886,6 +889,9 @@ static void ti_sn_bridge_pre_enable(struct drm_bridge *bridge) - - if (!pdata->refclk) - ti_sn65dsi86_enable_comms(pdata); -+ -+ /* td7: min 100 us after enable before DSI data */ -+ usleep_range(100, 110); - } - - static void ti_sn_bridge_post_disable(struct drm_bridge *bridge) --- -2.30.2 - diff --git a/queue-5.14/drm-bridge-ti-sn65dsi86-avoid-creating-multiple-conn.patch b/queue-5.14/drm-bridge-ti-sn65dsi86-avoid-creating-multiple-conn.patch deleted file mode 100644 index be1678833b7..00000000000 --- a/queue-5.14/drm-bridge-ti-sn65dsi86-avoid-creating-multiple-conn.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 8017943ec390b61b5dca817252a59aa51296aeac Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 11 Aug 2021 16:52:47 -0700 -Subject: drm/bridge: ti-sn65dsi86: Avoid creating multiple connectors - -From: Rob Clark - -[ Upstream commit c7782443a88926a4f938f0193041616328cf2db2 ] - -If we created our own connector because the driver does not support the -NO_CONNECTOR flag, we don't want the downstream bridge to *also* create -a connector. And if this driver did pass the NO_CONNECTOR flag (and we -supported that mode) this would change nothing. - -Fixes: 4e5763f03e10 ("drm/bridge: ti-sn65dsi86: Wrap panel with panel-bridge") -Reported-by: Stephen Boyd -Signed-off-by: Rob Clark -Tested-by: Stephen Boyd -Reviewed-by: Laurent Pinchart -Reviewed-by: Douglas Anderson -Tested-by: Douglas Anderson -Signed-off-by: Douglas Anderson -Link: https://patchwork.freedesktop.org/patch/msgid/20210811235253.924867-2-robdclark@gmail.com -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/ti-sn65dsi86.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c -index c9cddf317c72..3aeed2731945 100644 ---- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c -+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c -@@ -531,6 +531,9 @@ static int ti_sn_bridge_attach(struct drm_bridge *bridge, - } - pdata->dsi = dsi; - -+ /* We never want the next bridge to *also* create a connector: */ -+ flags |= DRM_BRIDGE_ATTACH_NO_CONNECTOR; -+ - /* Attach the next bridge */ - ret = drm_bridge_attach(bridge->encoder, pdata->next_bridge, - &pdata->bridge, flags); --- -2.30.2 - diff --git a/queue-5.14/drm-bridge-ti-sn65dsi86-don-t-read-edid-blob-over-dd.patch b/queue-5.14/drm-bridge-ti-sn65dsi86-don-t-read-edid-blob-over-dd.patch deleted file mode 100644 index 3cfd9748854..00000000000 --- a/queue-5.14/drm-bridge-ti-sn65dsi86-don-t-read-edid-blob-over-dd.patch +++ /dev/null @@ -1,115 +0,0 @@ -From c2b53f68f51e671442e2d75e0afbc8e49364f3b1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 11 Jun 2021 10:17:45 -0700 -Subject: drm/bridge: ti-sn65dsi86: Don't read EDID blob over DDC - -From: Douglas Anderson - -[ Upstream commit a70e558c151043ce46a5e5999f4310e0b3551f57 ] - -This is really just a revert of commit 58074b08c04a ("drm/bridge: -ti-sn65dsi86: Read EDID blob over DDC"), resolving conflicts. - -The old code failed to read the EDID properly in a very important -case: before the bridge's pre_enable() was called. The way things need -to work: -1. Read the EDID. -2. Based on the EDID, decide on video settings and pixel clock. -3. Enable the bridge w/ the desired settings. - -The way things were working: -1. Try to read the EDID but fail; fall back to hardcoded values. -2. Based on hardcoded values, decide on video settings and pixel clock. -3. Enable the bridge w/ the desired settings. -4. Try again to read the EDID, it works now! -5. Realize that the hardcoded settings weren't quite right. -6. Disable / reenable the bridge w/ the right settings. - -The reasons for the failures were twofold: -a) Since we never ran the bridge chip's pre-enable then we never set - the bit to ignore HPD. This meant the bridge chip didn't even _try_ - to go out on the bus and communicate with the panel. -b) Even if we fixed things to ignore HPD, the EDID still wouldn't read - if the panel wasn't on. - -Instead of reverting the code, we could fix it to set the HPD bit and -also power on the panel. However, it also works nicely to just let the -panel code read the EDID. Now that we've split the driver up we can -expose the DDC AUX channel bus to the panel node. The panel can take -charge of reading the EDID. - -NOTE: in order for things to work, anyone that needs to read the EDID -will need to instantiate their panel using the new DP AUX bus (AKA by -listing their panel under the "aux-bus" node of the bridge chip in the -device tree). - -In the future if we want to use the bridge chip to provide a full -external DP port (which won't have a panel) then we will have to -conditinally add EDID reading back in. - -Suggested-by: Andrzej Hajda -Signed-off-by: Douglas Anderson -Reviewed-by: Bjorn Andersson -Link: https://patchwork.freedesktop.org/patch/msgid/20210611101711.v10.9.I9330684c25f65bb318eff57f0616500f83eac3cc@changeid -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/ti-sn65dsi86.c | 22 ---------------------- - 1 file changed, 22 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c -index 45a2969afb2b..aef850296756 100644 ---- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c -+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c -@@ -124,7 +124,6 @@ - * @connector: Our connector. - * @host_node: Remote DSI node. - * @dsi: Our MIPI DSI source. -- * @edid: Detected EDID of eDP panel. - * @refclk: Our reference clock. - * @panel: Our panel. - * @enable_gpio: The GPIO we toggle to enable the bridge. -@@ -154,7 +153,6 @@ struct ti_sn65dsi86 { - struct drm_dp_aux aux; - struct drm_bridge bridge; - struct drm_connector connector; -- struct edid *edid; - struct device_node *host_node; - struct mipi_dsi_device *dsi; - struct clk *refclk; -@@ -403,24 +401,6 @@ connector_to_ti_sn65dsi86(struct drm_connector *connector) - static int ti_sn_bridge_connector_get_modes(struct drm_connector *connector) - { - struct ti_sn65dsi86 *pdata = connector_to_ti_sn65dsi86(connector); -- struct edid *edid = pdata->edid; -- int num, ret; -- -- if (!edid) { -- pm_runtime_get_sync(pdata->dev); -- edid = pdata->edid = drm_get_edid(connector, &pdata->aux.ddc); -- pm_runtime_put_autosuspend(pdata->dev); -- } -- -- if (edid && drm_edid_is_valid(edid)) { -- ret = drm_connector_update_edid_property(connector, edid); -- if (!ret) { -- num = drm_add_edid_modes(connector, edid); -- if (num) -- return num; -- } -- } -- - return drm_panel_get_modes(pdata->panel, connector); - } - -@@ -1358,8 +1338,6 @@ static void ti_sn_bridge_remove(struct auxiliary_device *adev) - mipi_dsi_device_unregister(pdata->dsi); - } - -- kfree(pdata->edid); -- - drm_bridge_remove(&pdata->bridge); - - of_node_put(pdata->host_node); --- -2.30.2 - diff --git a/queue-5.14/drm-bridge-ti-sn65dsi86-fix-power-off-sequence.patch b/queue-5.14/drm-bridge-ti-sn65dsi86-fix-power-off-sequence.patch deleted file mode 100644 index ad211ce93c8..00000000000 --- a/queue-5.14/drm-bridge-ti-sn65dsi86-fix-power-off-sequence.patch +++ /dev/null @@ -1,81 +0,0 @@ -From b462a15bc3fc90a1e05d0f30da78353d1dc81b66 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 30 Jul 2021 08:46:01 -0700 -Subject: drm/bridge: ti-sn65dsi86: Fix power off sequence - -From: Douglas Anderson - -[ Upstream commit acb06210b096830e28e9ffd2c6501fe99bdb10fd ] - -When testing with a panel that's apparently a little more persnickety -about the correct power sequence (specifically Samsung ATNA33XC20), we -found that the ti-sn65dsi86 was doing things just slightly wrong. - -Looking closely at the ti-sn65dsi86's datasheet, the power off -sequence is supposed to be: -1. Clear VSTREAM_ENABLE bit -2. Stop DSI stream from GPU. DSI lanes must be placed in LP11 state. -3. Program the ML_TX_MODE to 0x0 (OFF) -4. Program the DP_NUM_LANES register to 0x0 -5. Clear the DP_PLL_EN bit. -6. Deassert the EN pin. -7. Remove power from supply pins - -Since we were doing the whole sequence in the "disable", I believe -that step #2 (stopping the DSI stream from the GPU) wasn't -happening. We also weren't setting DP_NUM_LANES to 0. - -Let's fix this. - -NOTE: things are a little asymmetric now. For instance, we turn the -PLL on in "enable" but now we're not turning it off until -"post_disable". It would seem to make sense to move the PLL turning on -to "pre_enable" to match. Unfortunately, I don't believe that's -allowed. It looks as if (in the non-refclk mode which probably nobody -is using) we have to wait until the MIPI clock is there before we can -enable the PLL. In any case, the way it is here won't really -hurt--it'll just leave the PLL on a little longer. - -Fixes: a095f15c00e2 ("drm/bridge: add support for sn65dsi86 bridge driver") -Signed-off-by: Douglas Anderson -Acked-by: Robert Foss -Reviewed-by: Sean Paul -Signed-off-by: Sam Ravnborg -Link: https://patchwork.freedesktop.org/patch/msgid/20210730084534.v2.2.If8a8ec3bf1855cf0dbb62c005a71d6698c99c125@changeid -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/ti-sn65dsi86.c | 11 +++++++---- - 1 file changed, 7 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c -index 970a4859eea3..ecd4fa3a9a1d 100644 ---- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c -+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c -@@ -558,10 +558,6 @@ static void ti_sn_bridge_disable(struct drm_bridge *bridge) - - /* disable video stream */ - regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, VSTREAM_ENABLE, 0); -- /* semi auto link training mode OFF */ -- regmap_write(pdata->regmap, SN_ML_TX_MODE_REG, 0); -- /* disable DP PLL */ -- regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 0); - } - - static void ti_sn_bridge_set_dsi_rate(struct ti_sn65dsi86 *pdata) -@@ -896,6 +892,13 @@ static void ti_sn_bridge_post_disable(struct drm_bridge *bridge) - { - struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge); - -+ /* semi auto link training mode OFF */ -+ regmap_write(pdata->regmap, SN_ML_TX_MODE_REG, 0); -+ /* Num lanes to 0 as per power sequencing in data sheet */ -+ regmap_update_bits(pdata->regmap, SN_SSC_CONFIG_REG, DP_NUM_LANES_MASK, 0); -+ /* disable DP PLL */ -+ regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 0); -+ - if (!pdata->refclk) - ti_sn65dsi86_disable_comms(pdata); - --- -2.30.2 - diff --git a/queue-5.14/drm-bridge-ti-sn65dsi86-improve-probe-errors-with-de.patch b/queue-5.14/drm-bridge-ti-sn65dsi86-improve-probe-errors-with-de.patch deleted file mode 100644 index ef12f7481ee..00000000000 --- a/queue-5.14/drm-bridge-ti-sn65dsi86-improve-probe-errors-with-de.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 98c53541766506c492cd97408ed6f2b1f7b1744a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 11 Jun 2021 10:17:46 -0700 -Subject: drm/bridge: ti-sn65dsi86: Improve probe errors with dev_err_probe() - -From: Douglas Anderson - -[ Upstream commit 4c1b3d94bf632c1420a5d4108199f55a5655831d ] - -As I was testing to make sure that the DEFER path worked well with my -patch series, I got tired of seeing this scary message in my logs just -because the panel needed to defer: - [drm:ti_sn_bridge_probe] *ERROR* could not find any panel node - -Let's use dev_err_probe() which nicely quiets this error and also -simplifies the code a tiny bit. We'll also update other places in the -file which can use dev_err_probe(). - -Signed-off-by: Douglas Anderson -Reviewed-by: Linus Walleij -Link: https://patchwork.freedesktop.org/patch/msgid/20210611101711.v10.10.I24bba069e63b1eea84443eef0c8535fd032a6311@changeid -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/ti-sn65dsi86.c | 31 +++++++++++---------------- - 1 file changed, 13 insertions(+), 18 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c -index aef850296756..4d1483cf7b58 100644 ---- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c -+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c -@@ -1302,10 +1302,9 @@ static int ti_sn_bridge_probe(struct auxiliary_device *adev, - int ret; - - ret = drm_of_find_panel_or_bridge(np, 1, 0, &pdata->panel, NULL); -- if (ret) { -- DRM_ERROR("could not find any panel node\n"); -- return ret; -- } -+ if (ret) -+ return dev_err_probe(&adev->dev, ret, -+ "could not find any panel node\n"); - - ti_sn_bridge_parse_lanes(pdata, np); - -@@ -1432,27 +1431,23 @@ static int ti_sn65dsi86_probe(struct i2c_client *client, - - pdata->regmap = devm_regmap_init_i2c(client, - &ti_sn65dsi86_regmap_config); -- if (IS_ERR(pdata->regmap)) { -- DRM_ERROR("regmap i2c init failed\n"); -- return PTR_ERR(pdata->regmap); -- } -+ if (IS_ERR(pdata->regmap)) -+ return dev_err_probe(dev, PTR_ERR(pdata->regmap), -+ "regmap i2c init failed\n"); - - pdata->enable_gpio = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW); -- if (IS_ERR(pdata->enable_gpio)) { -- DRM_ERROR("failed to get enable gpio from DT\n"); -- ret = PTR_ERR(pdata->enable_gpio); -- return ret; -- } -+ if (IS_ERR(pdata->enable_gpio)) -+ return dev_err_probe(dev, PTR_ERR(pdata->enable_gpio), -+ "failed to get enable gpio from DT\n"); - - ret = ti_sn65dsi86_parse_regulators(pdata); -- if (ret) { -- DRM_ERROR("failed to parse regulators\n"); -- return ret; -- } -+ if (ret) -+ return dev_err_probe(dev, ret, "failed to parse regulators\n"); - - pdata->refclk = devm_clk_get_optional(dev, "refclk"); - if (IS_ERR(pdata->refclk)) -- return PTR_ERR(pdata->refclk); -+ return dev_err_probe(dev, PTR_ERR(pdata->refclk), -+ "failed to get reference clock\n"); - - pm_runtime_enable(dev); - ret = devm_add_action_or_reset(dev, ti_sn65dsi86_runtime_disable, dev); --- -2.30.2 - diff --git a/queue-5.14/drm-bridge-ti-sn65dsi86-wrap-panel-with-panel-bridge.patch b/queue-5.14/drm-bridge-ti-sn65dsi86-wrap-panel-with-panel-bridge.patch deleted file mode 100644 index 25faf734ceb..00000000000 --- a/queue-5.14/drm-bridge-ti-sn65dsi86-wrap-panel-with-panel-bridge.patch +++ /dev/null @@ -1,134 +0,0 @@ -From 0b42df64275a74e911144b697763fe60729970a1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 24 Jun 2021 03:03:02 +0300 -Subject: drm/bridge: ti-sn65dsi86: Wrap panel with panel-bridge - -From: Laurent Pinchart - -[ Upstream commit 4e5763f03e105fedfcd7a83bec1dccae96e334dd ] - -To simplify interfacing with the panel, wrap it in a panel-bridge and -let the DRM bridge helpers handle chaining of operations. - -This also prepares for support of DRM_BRIDGE_ATTACH_NO_CONNECTOR, which -requires all components in the display pipeline to be represented by -bridges. - -Signed-off-by: Laurent Pinchart -Reviewed-by: Jagan Teki -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20210624000304.16281-5-laurent.pinchart+renesas@ideasonboard.com -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/ti-sn65dsi86.c | 32 +++++++++++++++++---------- - 1 file changed, 20 insertions(+), 12 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c -index 4d1483cf7b58..970a4859eea3 100644 ---- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c -+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c -@@ -125,7 +125,7 @@ - * @host_node: Remote DSI node. - * @dsi: Our MIPI DSI source. - * @refclk: Our reference clock. -- * @panel: Our panel. -+ * @next_bridge: The bridge on the eDP side. - * @enable_gpio: The GPIO we toggle to enable the bridge. - * @supplies: Data for bulk enabling/disabling our regulators. - * @dp_lanes: Count of dp_lanes we're using. -@@ -156,7 +156,7 @@ struct ti_sn65dsi86 { - struct device_node *host_node; - struct mipi_dsi_device *dsi; - struct clk *refclk; -- struct drm_panel *panel; -+ struct drm_bridge *next_bridge; - struct gpio_desc *enable_gpio; - struct regulator_bulk_data supplies[SN_REGULATOR_SUPPLY_NUM]; - int dp_lanes; -@@ -401,7 +401,8 @@ connector_to_ti_sn65dsi86(struct drm_connector *connector) - static int ti_sn_bridge_connector_get_modes(struct drm_connector *connector) - { - struct ti_sn65dsi86 *pdata = connector_to_ti_sn65dsi86(connector); -- return drm_panel_get_modes(pdata->panel, connector); -+ -+ return drm_bridge_get_modes(pdata->next_bridge, connector); - } - - static enum drm_mode_status -@@ -527,8 +528,16 @@ static int ti_sn_bridge_attach(struct drm_bridge *bridge, - } - pdata->dsi = dsi; - -+ /* Attach the next bridge */ -+ ret = drm_bridge_attach(bridge->encoder, pdata->next_bridge, -+ &pdata->bridge, flags); -+ if (ret < 0) -+ goto err_dsi_detach; -+ - return 0; - -+err_dsi_detach: -+ mipi_dsi_detach(dsi); - err_dsi_attach: - mipi_dsi_device_unregister(dsi); - err_dsi_host: -@@ -547,8 +556,6 @@ static void ti_sn_bridge_disable(struct drm_bridge *bridge) - { - struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge); - -- drm_panel_disable(pdata->panel); -- - /* disable video stream */ - regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, VSTREAM_ENABLE, 0); - /* semi auto link training mode OFF */ -@@ -873,8 +880,6 @@ static void ti_sn_bridge_enable(struct drm_bridge *bridge) - /* enable video stream */ - regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, VSTREAM_ENABLE, - VSTREAM_ENABLE); -- -- drm_panel_enable(pdata->panel); - } - - static void ti_sn_bridge_pre_enable(struct drm_bridge *bridge) -@@ -885,16 +890,12 @@ static void ti_sn_bridge_pre_enable(struct drm_bridge *bridge) - - if (!pdata->refclk) - ti_sn65dsi86_enable_comms(pdata); -- -- drm_panel_prepare(pdata->panel); - } - - static void ti_sn_bridge_post_disable(struct drm_bridge *bridge) - { - struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge); - -- drm_panel_unprepare(pdata->panel); -- - if (!pdata->refclk) - ti_sn65dsi86_disable_comms(pdata); - -@@ -1299,13 +1300,20 @@ static int ti_sn_bridge_probe(struct auxiliary_device *adev, - { - struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent); - struct device_node *np = pdata->dev->of_node; -+ struct drm_panel *panel; - int ret; - -- ret = drm_of_find_panel_or_bridge(np, 1, 0, &pdata->panel, NULL); -+ ret = drm_of_find_panel_or_bridge(np, 1, 0, &panel, NULL); - if (ret) - return dev_err_probe(&adev->dev, ret, - "could not find any panel node\n"); - -+ pdata->next_bridge = devm_drm_panel_bridge_add(pdata->dev, panel); -+ if (IS_ERR(pdata->next_bridge)) { -+ DRM_ERROR("failed to create panel bridge\n"); -+ return PTR_ERR(pdata->next_bridge); -+ } -+ - ti_sn_bridge_parse_lanes(pdata, np); - - ret = ti_sn_bridge_parse_dsi_host(pdata); --- -2.30.2 - diff --git a/queue-5.14/series b/queue-5.14/series index 5a8d8562f3b..479dd7f159d 100644 --- a/queue-5.14/series +++ b/queue-5.14/series @@ -143,12 +143,6 @@ lib-test_scanf-handle-n_bits-0-in-random-tests.patch libbpf-return-non-null-error-on-failures-in-libbpf_f.patch tools-free-btf-objects-at-various-locations.patch arm64-dts-renesas-hihope-rzg2-ex-add-etheravb-intern.patch -devlink-break-parameter-notification-sequence-to-be-.patch -drm-bridge-ti-sn65dsi86-don-t-read-edid-blob-over-dd.patch -drm-bridge-ti-sn65dsi86-improve-probe-errors-with-de.patch -drm-bridge-ti-sn65dsi86-wrap-panel-with-panel-bridge.patch -drm-bridge-ti-sn65dsi86-fix-power-off-sequence.patch -drm-bridge-ti-sn65dsi86-add-some-100-us-delays.patch net-mlx5-fix-missing-return-value-in-mlx5_devlink_es.patch i2c-highlander-add-irq-check.patch leds-lgm-sso-put-fwnode-in-any-case-during-probe.patch @@ -195,7 +189,6 @@ drm-msm-dsi-fix-some-reference-counted-resource-leak.patch drm-msm-dp-replug-event-is-converted-into-an-unplug-.patch net-mlx5-fix-unpublish-devlink-parameters.patch asoc-rt5682-properly-turn-off-regulators-if-wrong-de.patch -drm-bridge-ti-sn65dsi86-avoid-creating-multiple-conn.patch usb-dwc3-meson-g12a-add-irq-check.patch usb-dwc3-qcom-add-irq-check.patch usb-gadget-udc-at91-add-irq-check.patch