* [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal
@ 2025-11-12 16:34 Luca Ceresoli
2025-11-12 16:34 ` [PATCH v3 1/2] drm/bridge: add drm_bridge_unplug() and drm_bridge_enter/exit() Luca Ceresoli
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Luca Ceresoli @ 2025-11-12 16:34 UTC (permalink / raw)
To: Maxime Ripard, Simona Vetter, Andrzej Hajda, Neil Armstrong,
Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Maarten Lankhorst, Thomas Zimmermann, David Airlie
Cc: Hui Pu, Thomas Petazzoni, dri-devel, linux-kernel, Luca Ceresoli,
Dmitry Baryshkov
This is a first attempt at gracefully handling the case of atomic updates
happening concurrently to physical removal of DRM bridges.
This is part of the work to support hotplug of DRM bridges. The grand plan
was discussed in [1].
Here's the work breakdown (➜ marks the current series):
1. … add refcounting to DRM bridges (struct drm_bridge)
(based on devm_drm_bridge_alloc() [0])
A. ✔ add new alloc API and refcounting (v6.16)
B. ✔ convert all bridge drivers to new API (v6.17)
C. ✔ kunit tests (v6.17)
D. ✔ add get/put to drm_bridge_add/remove() + attach/detach()
and warn on old allocation pattern (v6.17)
E. … add get/put on drm_bridge accessors
1. ✔ drm_bridge_chain_get_first_bridge(), add cleanup action (v6.18)
2. ✔ drm_bridge_get_prev_bridge() (v6.18)
3. ✔ drm_bridge_get_next_bridge() (v6.19)
4. ✔ drm_for_each_bridge_in_chain() (v6.19)
5. ✔ drm_bridge_connector_init (v6.19)
6. … protect encoder bridge chain with a mutex
7. of_drm_find_bridge
8. drm_of_find_panel_or_bridge, *_of_get_bridge
9. ✔ enforce drm_bridge_add before drm_bridge_attach (v6.19)
F. ✔ debugfs improvements
1. ✔ add top-level 'bridges' file (v6.16)
2. ✔ show refcount and list lingering bridges (v6.19)
2. ➜ handle gracefully atomic updates during bridge removal
A. ➜ Add drm_dev_enter/exit() to protect device resources
B. … protect private_obj removal from list
3. … DSI host-device driver interaction
4. ✔ removing the need for the "always-disconnected" connector
5. finish the hotplug bridge work, moving code to the core and potentially
removing the hotplug-bridge itself (this needs to be clarified as
points 1-3 are developed)
The idea was proposed by Maxime [1] and is based on the existing
drm_dev_enter/exit() already existing for the DRM device.
This small series implements the core mechanism in drm_bridge.c and uses it
in the ti-sn65dsi83 driver. This prevents usage of device resources by
various code paths that can happen concurrently to unplug of the SN65DSI8x
bridge.
[0] https://lore.kernel.org/lkml/20250206-hotplug-drm-bridge-v6-0-9d6f2c9c3058@bootlin.com/#t
[1] https://lore.kernel.org/all/20250106-vigorous-talented-viper-fa49d9@houat/
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
Changes in v3:
- Call drm_bridge_remove() in drm_bridge_unplug() as suggested by Maxime
- Fix kerneldoc errors (reported here:
https://lore.kernel.org/lkml/202509271654.j3IsjsAJ-lkp@intel.com/)
- Some cleanups in patch 2
- Link to v2: https://lore.kernel.org/r/20250926-drm-bridge-atomic-vs-remove-v2-0-69f7d5ca1a92@bootlin.com
Changes in v2:
- No changes to patch 1, discussion pending
- Use devres instead of a flag in patch 2
- Link to v1: https://lore.kernel.org/r/20250808-drm-bridge-atomic-vs-remove-v1-0-a52e933b08a8@bootlin.com
---
Luca Ceresoli (2):
drm/bridge: add drm_bridge_unplug() and drm_bridge_enter/exit()
drm/bridge: ti-sn65dsi83: protect device resources on unplug
drivers/gpu/drm/bridge/ti-sn65dsi83.c | 86 +++++++++++++++++++++++++++--------
drivers/gpu/drm/drm_bridge.c | 62 +++++++++++++++++++++++++
include/drm/drm_bridge.h | 12 +++++
3 files changed, 140 insertions(+), 20 deletions(-)
---
base-commit: 604046a2d68bf5a67f111579d749a046c3a26669
change-id: 20250808-drm-bridge-atomic-vs-remove-1d7bb202c8ef
Best regards,
--
Luca Ceresoli <luca.ceresoli@bootlin.com>
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v3 1/2] drm/bridge: add drm_bridge_unplug() and drm_bridge_enter/exit() 2025-11-12 16:34 [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal Luca Ceresoli @ 2025-11-12 16:34 ` Luca Ceresoli 2025-11-12 16:34 ` [PATCH v3 2/2] drm/bridge: ti-sn65dsi83: protect device resources on unplug Luca Ceresoli ` (2 subsequent siblings) 3 siblings, 0 replies; 8+ messages in thread From: Luca Ceresoli @ 2025-11-12 16:34 UTC (permalink / raw) To: Maxime Ripard, Simona Vetter, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie Cc: Hui Pu, Thomas Petazzoni, dri-devel, linux-kernel, Luca Ceresoli, Dmitry Baryshkov To allow DRM bridges to be removable, add synchronization functions allowing to tell when a bridge hardware has been physically unplugged and to mark a critical section that should not be entered after that. This is inspired by the drm_dev_unplugged/enter/exit() functions for struct drm_device. Suggested-by: Maxime Ripard <mripard@kernel.org> Link: https://lore.kernel.org/all/20250106-vigorous-talented-viper-fa49d9@houat/ Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com> --- Changes in v3: - call drm_bridge_remove() in drm_bridge_unplug() - Fixed kerneldoc variable names (reported here: https://lore.kernel.org/lkml/202509271654.j3IsjsAJ-lkp@intel.com/) --- drivers/gpu/drm/drm_bridge.c | 62 ++++++++++++++++++++++++++++++++++++++++++++ include/drm/drm_bridge.h | 12 +++++++++ 2 files changed, 74 insertions(+) diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index 8f355df883d8ac8de9d361ec302f4ccbf3bca0d6..db40c26d1cb354f818f12a5a53f9baa6a7fc3574 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -27,6 +27,7 @@ #include <linux/media-bus-format.h> #include <linux/module.h> #include <linux/mutex.h> +#include <linux/srcu.h> #include <drm/drm_atomic_state_helper.h> #include <drm/drm_bridge.h> @@ -202,6 +203,67 @@ static DEFINE_MUTEX(bridge_lock); static LIST_HEAD(bridge_list); static LIST_HEAD(bridge_lingering_list); +DEFINE_STATIC_SRCU(drm_bridge_unplug_srcu); + +/** + * drm_bridge_enter - Enter DRM bridge critical section + * @bridge: DRM bridge + * @idx: Pointer to index that will be passed to the matching drm_bridge_exit() + * + * This function marks and protects the beginning of a section that should not + * be entered after the bridge has been unplugged. The section end is marked + * with drm_bridge_exit(). Calls to this function can be nested. + * + * Returns: + * True if it is OK to enter the section, false otherwise. + */ +bool drm_bridge_enter(struct drm_bridge *bridge, int *idx) +{ + *idx = srcu_read_lock(&drm_bridge_unplug_srcu); + + if (bridge->unplugged) { + srcu_read_unlock(&drm_bridge_unplug_srcu, *idx); + return false; + } + + return true; +} +EXPORT_SYMBOL(drm_bridge_enter); + +/** + * drm_bridge_exit - Exit DRM bridge critical section + * @idx: index returned by drm_bridge_enter() + * + * This function marks the end of a section that should not be entered after + * the bridge has been unplugged. + */ +void drm_bridge_exit(int idx) +{ + srcu_read_unlock(&drm_bridge_unplug_srcu, idx); +} +EXPORT_SYMBOL(drm_bridge_exit); + +/** + * drm_bridge_unplug - declare a DRM bridge was unplugged and remove it + * @bridge: DRM bridge + * + * This tells the bridge has been physically unplugged and no operations on + * device resources must be done anymore. Entry-points can use + * drm_bridge_enter() and drm_bridge_exit() to protect device resources in + * a race free manner. + * + * Also unregisters the bridge. + */ +void drm_bridge_unplug(struct drm_bridge *bridge) +{ + bridge->unplugged = true; + + synchronize_srcu(&drm_bridge_unplug_srcu); + + drm_bridge_remove(bridge); +} +EXPORT_SYMBOL(drm_bridge_unplug); + static void __drm_bridge_free(struct kref *kref) { struct drm_bridge *bridge = container_of(kref, struct drm_bridge, refcount); diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index 0ff7ab4aa8689a022458f935a7ffb23a2b715802..d2683846cc619007f85a6f605b9d23ce971e04b3 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -1143,6 +1143,14 @@ struct drm_bridge { */ struct kref refcount; + /** + * @unplugged: + * + * Flag to tell if the bridge has been unplugged. + * See drm_bridge_enter() and drm_bridge_unplug(). + */ + bool unplugged; + /** @driver_private: pointer to the bridge driver's internal context */ void *driver_private; /** @ops: bitmask of operations supported by the bridge */ @@ -1278,6 +1286,10 @@ drm_priv_to_bridge(struct drm_private_obj *priv) return container_of(priv, struct drm_bridge, base); } +bool drm_bridge_enter(struct drm_bridge *bridge, int *idx); +void drm_bridge_exit(int idx); +void drm_bridge_unplug(struct drm_bridge *bridge); + struct drm_bridge *drm_bridge_get(struct drm_bridge *bridge); void drm_bridge_put(struct drm_bridge *bridge); -- 2.51.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 2/2] drm/bridge: ti-sn65dsi83: protect device resources on unplug 2025-11-12 16:34 [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal Luca Ceresoli 2025-11-12 16:34 ` [PATCH v3 1/2] drm/bridge: add drm_bridge_unplug() and drm_bridge_enter/exit() Luca Ceresoli @ 2025-11-12 16:34 ` Luca Ceresoli 2025-11-27 18:35 ` [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal Maxime Ripard 2025-12-11 14:35 ` Luca Ceresoli 3 siblings, 0 replies; 8+ messages in thread From: Luca Ceresoli @ 2025-11-12 16:34 UTC (permalink / raw) To: Maxime Ripard, Simona Vetter, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie Cc: Hui Pu, Thomas Petazzoni, dri-devel, linux-kernel, Luca Ceresoli, Dmitry Baryshkov To support hot-unplug of this bridge we need to protect access to device resources in case sn65dsi83_remove() happens concurrently to other code. Some care is needed for the case when the unplug happens before sn65dsi83_atomic_disable() has a chance to enter the critical section (i.e. a successful drm_bridge_enter() call), which occurs whenever the hardware is removed while the display is active. When that happens, sn65dsi83_atomic_disable() in unable to release the resources taken by sn65dsi83_atomic_pre_enable(). To ensure those resources are released exactly once on device removal: * move the code to release them to a dedicated function * register that function when the resources are taken in sn65dsi83_atomic_pre_enable() * if sn65dsi83_atomic_disable() happens before sn65dsi83_remove() (typical non-hot-unplug case): * sn65dsi83_atomic_disable() can enter the critical section (drm_bridge_enter() returns 0) -> it releases and executes the devres action * if sn65dsi83_atomic_disable() happens after sn65dsi83_remove() (typical hot-unplug case): * sn65dsi83_remove() -> drm_bridge_unplug() prevents sn65dsi83_atomic_disable() from entering the critical section (drm_bridge_enter() returns nonzero), so sn65dsi83_atomic_disable() cannot release and execute the devres action * the devres action is executed at the end of sn65dsi83_remove() Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com> --- Changes in v3: - Don't call drm_bridge_remove(), it's now in drm_bridge_unplug() - use gotos for error management in sn65dsi83_atomic_pre_enable() - simplify sn65dsi83_release_resources() comment Changes in v2: - Use a devres action instead of a flag --- drivers/gpu/drm/bridge/ti-sn65dsi83.c | 86 +++++++++++++++++++++++++++-------- 1 file changed, 66 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c index 033c44326552ab167d4e8d9b74957c585e4c6fb7..ac74b9e85b97604c95a255fc2c59bd0e7a3137f5 100644 --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c @@ -406,6 +406,10 @@ static void sn65dsi83_reset_work(struct work_struct *ws) { struct sn65dsi83 *ctx = container_of(ws, struct sn65dsi83, reset_work); int ret; + int idx; + + if (!drm_bridge_enter(&ctx->bridge, &idx)) + return; /* Reset the pipe */ ret = sn65dsi83_reset_pipe(ctx); @@ -415,12 +419,18 @@ static void sn65dsi83_reset_work(struct work_struct *ws) } if (ctx->irq) enable_irq(ctx->irq); + + drm_bridge_exit(idx); } static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) { unsigned int irq_stat; int ret; + int idx; + + if (!drm_bridge_enter(&ctx->bridge, &idx)) + return; /* * Schedule a reset in case of: @@ -441,6 +451,8 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) schedule_work(&ctx->reset_work); } + + drm_bridge_exit(idx); } static void sn65dsi83_monitor_work(struct work_struct *work) @@ -463,6 +475,37 @@ static void sn65dsi83_monitor_stop(struct sn65dsi83 *ctx) cancel_delayed_work_sync(&ctx->monitor_work); } +/* + * Release resources taken by sn65dsi83_atomic_pre_enable(). + * + * Invoked by sn65dsi83_atomic_disable() normally, or by devres after + * sn65dsi83_remove() in case this happens befora atomic_disable. + */ +static void sn65dsi83_release_resources(void *data) +{ + struct sn65dsi83 *ctx = (struct sn65dsi83 *)data; + int ret; + + if (ctx->irq) { + /* Disable irq */ + regmap_write(ctx->regmap, REG_IRQ_EN, 0x0); + regmap_write(ctx->regmap, REG_IRQ_GLOBAL, 0x0); + } else { + /* Stop the polling task */ + sn65dsi83_monitor_stop(ctx); + } + + /* Put the chip in reset, pull EN line low, and assure 10ms reset low timing. */ + gpiod_set_value_cansleep(ctx->enable_gpio, 0); + usleep_range(10000, 11000); + + ret = regulator_disable(ctx->vcc); + if (ret) + dev_err(ctx->dev, "Failed to disable vcc: %d\n", ret); + + regcache_mark_dirty(ctx->regmap); +} + static void sn65dsi83_atomic_pre_enable(struct drm_bridge *bridge, struct drm_atomic_state *state) { @@ -478,11 +521,15 @@ static void sn65dsi83_atomic_pre_enable(struct drm_bridge *bridge, __le16 le16val; u16 val; int ret; + int idx; + + if (!drm_bridge_enter(bridge, &idx)) + return; ret = regulator_enable(ctx->vcc); if (ret) { dev_err(ctx->dev, "Failed to enable vcc: %d\n", ret); - return; + goto err_exit; } /* Deassert reset */ @@ -625,7 +672,7 @@ static void sn65dsi83_atomic_pre_enable(struct drm_bridge *bridge, dev_err(ctx->dev, "failed to lock PLL, ret=%i\n", ret); /* On failure, disable PLL again and exit. */ regmap_write(ctx->regmap, REG_RC_PLL_EN, 0x00); - return; + goto err_add_action; } /* Trigger reset after CSR register update. */ @@ -633,6 +680,11 @@ static void sn65dsi83_atomic_pre_enable(struct drm_bridge *bridge, /* Wait for 10ms after soft reset as specified in datasheet */ usleep_range(10000, 12000); + +err_add_action: + devm_add_action(ctx->dev, sn65dsi83_release_resources, ctx); +err_exit: + drm_bridge_exit(idx); } static void sn65dsi83_atomic_enable(struct drm_bridge *bridge, @@ -640,6 +692,10 @@ static void sn65dsi83_atomic_enable(struct drm_bridge *bridge, { struct sn65dsi83 *ctx = bridge_to_sn65dsi83(bridge); unsigned int pval; + int idx; + + if (!drm_bridge_enter(bridge, &idx)) + return; /* Clear all errors that got asserted during initialization. */ regmap_read(ctx->regmap, REG_IRQ_STAT, &pval); @@ -659,32 +715,22 @@ static void sn65dsi83_atomic_enable(struct drm_bridge *bridge, /* Use the polling task */ sn65dsi83_monitor_start(ctx); } + + drm_bridge_exit(idx); } static void sn65dsi83_atomic_disable(struct drm_bridge *bridge, struct drm_atomic_state *state) { struct sn65dsi83 *ctx = bridge_to_sn65dsi83(bridge); - int ret; + int idx; - if (ctx->irq) { - /* Disable irq */ - regmap_write(ctx->regmap, REG_IRQ_EN, 0x0); - regmap_write(ctx->regmap, REG_IRQ_GLOBAL, 0x0); - } else { - /* Stop the polling task */ - sn65dsi83_monitor_stop(ctx); - } - - /* Put the chip in reset, pull EN line low, and assure 10ms reset low timing. */ - gpiod_set_value_cansleep(ctx->enable_gpio, 0); - usleep_range(10000, 11000); + if (!drm_bridge_enter(bridge, &idx)) + return; - ret = regulator_disable(ctx->vcc); - if (ret) - dev_err(ctx->dev, "Failed to disable vcc: %d\n", ret); + devm_release_action(ctx->dev, sn65dsi83_release_resources, ctx); - regcache_mark_dirty(ctx->regmap); + drm_bridge_exit(idx); } static enum drm_mode_status @@ -1005,7 +1051,7 @@ static void sn65dsi83_remove(struct i2c_client *client) { struct sn65dsi83 *ctx = i2c_get_clientdata(client); - drm_bridge_remove(&ctx->bridge); + drm_bridge_unplug(&ctx->bridge); } static const struct i2c_device_id sn65dsi83_id[] = { -- 2.51.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal 2025-11-12 16:34 [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal Luca Ceresoli 2025-11-12 16:34 ` [PATCH v3 1/2] drm/bridge: add drm_bridge_unplug() and drm_bridge_enter/exit() Luca Ceresoli 2025-11-12 16:34 ` [PATCH v3 2/2] drm/bridge: ti-sn65dsi83: protect device resources on unplug Luca Ceresoli @ 2025-11-27 18:35 ` Maxime Ripard 2025-11-28 8:09 ` Luca Ceresoli 2025-12-11 14:35 ` Luca Ceresoli 3 siblings, 1 reply; 8+ messages in thread From: Maxime Ripard @ 2025-11-27 18:35 UTC (permalink / raw) To: Luca Ceresoli Cc: dri-devel, linux-kernel, Andrzej Hajda, David Airlie, Dmitry Baryshkov, Hui Pu, Jernej Skrabec, Jonas Karlman, Laurent Pinchart, Maarten Lankhorst, Maxime Ripard, Neil Armstrong, Robert Foss, Simona Vetter, Thomas Petazzoni, Thomas Zimmermann On Wed, 12 Nov 2025 17:34:33 +0100, Luca Ceresoli wrote: > This is a first attempt at gracefully handling the case of atomic updates > happening concurrently to physical removal of DRM bridges. > > This is part of the work to support hotplug of DRM bridges. The grand plan > was discussed in [1]. > > [ ... ] Reviewed-by: Maxime Ripard <mripard@kernel.org> Thanks! Maxime ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal 2025-11-27 18:35 ` [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal Maxime Ripard @ 2025-11-28 8:09 ` Luca Ceresoli 2025-11-28 10:07 ` Maxime Ripard 0 siblings, 1 reply; 8+ messages in thread From: Luca Ceresoli @ 2025-11-28 8:09 UTC (permalink / raw) To: Maxime Ripard Cc: dri-devel, linux-kernel, Andrzej Hajda, David Airlie, Dmitry Baryshkov, Hui Pu, Jernej Skrabec, Jonas Karlman, Laurent Pinchart, Maarten Lankhorst, Neil Armstrong, Robert Foss, Simona Vetter, Thomas Petazzoni, Thomas Zimmermann, Francesco Dolcini, Emanuele Ghidoli, João Paulo Gonçalves Hi Maxime, +Cc Emanuele, Francesco, João On Thu Nov 27, 2025 at 7:35 PM CET, Maxime Ripard wrote: > On Wed, 12 Nov 2025 17:34:33 +0100, Luca Ceresoli wrote: >> This is a first attempt at gracefully handling the case of atomic updates >> happening concurrently to physical removal of DRM bridges. >> >> This is part of the work to support hotplug of DRM bridges. The grand plan >> was discussed in [1]. >> >> [ ... ] > > Reviewed-by: Maxime Ripard <mripard@kernel.org> Thanks for reviewing! Two alternative patches [0][1] have been sent to address the issue with PLL_UNLOCK, and both would conflict with patch 2 of this series. So I'd keep this series on hold for a while, waiting for a decision to be taken about how the PLL_UNLOCK issue will be handled. I'll then rebase this series as needed. [0] https://lore.kernel.org/lkml/20251127-drm-ti-sn65dsi83-ignore-pll-unlock-v1-1-8a03fdf562e9@bootlin.com/ [1] https://lore.kernel.org/lkml/20251125103900.31750-1-francesco@dolcini.it/ Luca -- Luca Ceresoli, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal 2025-11-28 8:09 ` Luca Ceresoli @ 2025-11-28 10:07 ` Maxime Ripard 2025-12-11 8:28 ` Luca Ceresoli 0 siblings, 1 reply; 8+ messages in thread From: Maxime Ripard @ 2025-11-28 10:07 UTC (permalink / raw) To: Luca Ceresoli Cc: dri-devel, linux-kernel, Andrzej Hajda, David Airlie, Dmitry Baryshkov, Hui Pu, Jernej Skrabec, Jonas Karlman, Laurent Pinchart, Maarten Lankhorst, Neil Armstrong, Robert Foss, Simona Vetter, Thomas Petazzoni, Thomas Zimmermann, Francesco Dolcini, Emanuele Ghidoli, João Paulo Gonçalves [-- Attachment #1: Type: text/plain, Size: 958 bytes --] On Fri, Nov 28, 2025 at 09:09:17AM +0100, Luca Ceresoli wrote: > Hi Maxime, > > +Cc Emanuele, Francesco, João > > On Thu Nov 27, 2025 at 7:35 PM CET, Maxime Ripard wrote: > > On Wed, 12 Nov 2025 17:34:33 +0100, Luca Ceresoli wrote: > >> This is a first attempt at gracefully handling the case of atomic updates > >> happening concurrently to physical removal of DRM bridges. > >> > >> This is part of the work to support hotplug of DRM bridges. The grand plan > >> was discussed in [1]. > >> > >> [ ... ] > > > > Reviewed-by: Maxime Ripard <mripard@kernel.org> > > Thanks for reviewing! > > Two alternative patches [0][1] have been sent to address the issue with > PLL_UNLOCK, and both would conflict with patch 2 of this series. So I'd > keep this series on hold for a while, waiting for a decision to be taken > about how the PLL_UNLOCK issue will be handled. I'll then rebase this > series as needed. Yep, agreed. Maxime [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 273 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal 2025-11-28 10:07 ` Maxime Ripard @ 2025-12-11 8:28 ` Luca Ceresoli 0 siblings, 0 replies; 8+ messages in thread From: Luca Ceresoli @ 2025-12-11 8:28 UTC (permalink / raw) To: Maxime Ripard Cc: dri-devel, linux-kernel, Andrzej Hajda, David Airlie, Dmitry Baryshkov, Hui Pu, Jernej Skrabec, Jonas Karlman, Laurent Pinchart, Maarten Lankhorst, Neil Armstrong, Robert Foss, Simona Vetter, Thomas Petazzoni, Thomas Zimmermann, Francesco Dolcini, Emanuele Ghidoli, João Paulo Gonçalves Hello, On Fri Nov 28, 2025 at 11:07 AM CET, Maxime Ripard wrote: > On Fri, Nov 28, 2025 at 09:09:17AM +0100, Luca Ceresoli wrote: >> Hi Maxime, >> >> +Cc Emanuele, Francesco, João >> >> On Thu Nov 27, 2025 at 7:35 PM CET, Maxime Ripard wrote: >> > On Wed, 12 Nov 2025 17:34:33 +0100, Luca Ceresoli wrote: >> >> This is a first attempt at gracefully handling the case of atomic updates >> >> happening concurrently to physical removal of DRM bridges. >> >> >> >> This is part of the work to support hotplug of DRM bridges. The grand plan >> >> was discussed in [1]. >> >> >> >> [ ... ] >> > >> > Reviewed-by: Maxime Ripard <mripard@kernel.org> >> >> Thanks for reviewing! >> >> Two alternative patches [0][1] have been sent to address the issue with >> PLL_UNLOCK, and both would conflict with patch 2 of this series. So I'd >> keep this series on hold for a while, waiting for a decision to be taken >> about how the PLL_UNLOCK issue will be handled. I'll then rebase this >> series as needed. > > Yep, agreed. Turns out the patch that got applied does not conflict with this series, out of luck with the code layout. So I'm applying this one today. Luca -- Luca Ceresoli, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal 2025-11-12 16:34 [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal Luca Ceresoli ` (2 preceding siblings ...) 2025-11-27 18:35 ` [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal Maxime Ripard @ 2025-12-11 14:35 ` Luca Ceresoli 3 siblings, 0 replies; 8+ messages in thread From: Luca Ceresoli @ 2025-12-11 14:35 UTC (permalink / raw) To: Maxime Ripard, Simona Vetter, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Luca Ceresoli Cc: Hui Pu, Thomas Petazzoni, dri-devel, linux-kernel, Dmitry Baryshkov On Wed, 12 Nov 2025 17:34:33 +0100, Luca Ceresoli wrote: > This is a first attempt at gracefully handling the case of atomic updates > happening concurrently to physical removal of DRM bridges. > > This is part of the work to support hotplug of DRM bridges. The grand plan > was discussed in [1]. > > Here's the work breakdown (➜ marks the current series): > > [...] Applied, thanks! [1/2] drm/bridge: add drm_bridge_unplug() and drm_bridge_enter/exit() commit: d36137085a4aa2d2f039359a0d67d9e07667f2de [2/2] drm/bridge: ti-sn65dsi83: protect device resources on unplug commit: d2e8d1bc840b849fc23d8812995645cc79990e7b Best regards, -- Luca Ceresoli <luca.ceresoli@bootlin.com> ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-12-11 14:35 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-11-12 16:34 [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal Luca Ceresoli 2025-11-12 16:34 ` [PATCH v3 1/2] drm/bridge: add drm_bridge_unplug() and drm_bridge_enter/exit() Luca Ceresoli 2025-11-12 16:34 ` [PATCH v3 2/2] drm/bridge: ti-sn65dsi83: protect device resources on unplug Luca Ceresoli 2025-11-27 18:35 ` [PATCH v3 0/2] drm/bridge: handle gracefully atomic updates during bridge removal Maxime Ripard 2025-11-28 8:09 ` Luca Ceresoli 2025-11-28 10:07 ` Maxime Ripard 2025-12-11 8:28 ` Luca Ceresoli 2025-12-11 14:35 ` Luca Ceresoli
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.