[PATCH RESEND v4 v5 4/4] drm/vc4: Notify the firmware when DRM is in charge
Thomas Zimmermann
tzimmermann at suse.de
Tue Jan 11 09:38:36 UTC 2022
Hi
Am 15.12.21 um 10:51 schrieb Maxime Ripard:
> Once the call to drm_fb_helper_remove_conflicting_framebuffers() has
> been made, simplefb has been unregistered and the KMS driver is entirely
> in charge of the display.
>
> Thus, we can notify the firmware it can free whatever resource it was
> using to maintain simplefb functional.
>
> Signed-off-by: Maxime Ripard <maxime at cerno.tech>
> ---
> drivers/gpu/drm/vc4/vc4_drv.c | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
> index 86c61ee120b7..a03053c8e22c 100644
> --- a/drivers/gpu/drm/vc4/vc4_drv.c
> +++ b/drivers/gpu/drm/vc4/vc4_drv.c
> @@ -37,6 +37,8 @@
> #include <drm/drm_fb_helper.h>
> #include <drm/drm_vblank.h>
>
> +#include <soc/bcm2835/raspberrypi-firmware.h>
> +
> #include "uapi/drm/vc4_drm.h"
>
> #include "vc4_drv.h"
> @@ -215,6 +217,7 @@ static void vc4_match_add_drivers(struct device *dev,
> static int vc4_drm_bind(struct device *dev)
> {
> struct platform_device *pdev = to_platform_device(dev);
> + struct rpi_firmware *firmware = NULL;
> struct drm_device *drm;
> struct vc4_dev *vc4;
> struct device_node *node;
> @@ -251,10 +254,29 @@ static int vc4_drm_bind(struct device *dev)
> if (ret)
> return ret;
>
> + node = of_find_compatible_node(NULL, NULL, "raspberrypi,bcm2835-firmware");
> + if (node) {
> + firmware = rpi_firmware_get(node);
> + of_node_put(node);
> +
> + if (!firmware)
> + return -EPROBE_DEFER;
> + }
> +
The code is
Acked-by: Thomas Zimmermann <tzimmermann at suse.de>
Just for my understanding:
You retrieve the firmware before killing simpledrm simply to keep the
display on if it fails, right?
What's the possible error that would justify a retry (via EPROBE_DEFER)?
Best regards
Thomas
> ret = drm_aperture_remove_framebuffers(false, &vc4_drm_driver);
> if (ret)
> return ret;
>
> + if (firmware) {
> + ret = rpi_firmware_property(firmware,
> + RPI_FIRMWARE_NOTIFY_DISPLAY_DONE,
> + NULL, 0);
> + if (ret)
> + drm_warn(drm, "Couldn't stop firmware display driver: %d\n", ret);
> +
> + rpi_firmware_put(firmware);
> + }
> +
> ret = component_bind_all(dev, drm);
> if (ret)
> return ret;
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20220111/b59d9a1d/attachment.sig>
More information about the dri-devel
mailing list