[PATCH v2 3/3] drm/vc4: Notify the firmware when DRM is in charge
nicolas saenz julienne
nsaenz at kernel.org
Fri Dec 10 01:55:12 PST 2021
Hi Maxime,
On Fri, 2021-12-03 at 14:51 +0100, Maxime Ripard wrote:
> 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 | 19 +++++++++++++++++++
> drivers/gpu/drm/vc4/vc4_drv.h | 2 ++
> 2 files changed, 21 insertions(+)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
> index 8ab89f805826..38d55a47c831 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"
> @@ -251,10 +253,27 @@ static int vc4_drm_bind(struct device *dev)
> if (ret)
> return ret;
>
> + node = of_find_compatible_node(NULL, NULL, "raspberrypi,bcm2835-firmware");
> + if (node) {
> + vc4->firmware = devm_rpi_firmware_get(dev, node);
I'm really sorry for contradicting myself, but I think it makes more sense to
do rpi_firmware_get() here...
> + of_node_put(node);
> +
> + if (!vc4->firmware)
> + return -EPROBE_DEFER;
> + }
> +
> ret = drm_aperture_remove_framebuffers(false, &vc4_drm_driver);
> if (ret)
> return ret;
>
> + if (vc4->firmware) {
> + ret = rpi_firmware_property(vc4->firmware,
> + RPI_FIRMWARE_NOTIFY_DISPLAY_DONE,
> + NULL, 0);
> + if (ret)
> + drm_warn(drm, "Couldn't stop firmware display driver: %d\n", ret);
> + }
> +
...and rpi_firmware_put() here. IIUC after this the fw handle isn't needed
anymore.
Other than that, the series looks fine to me.
Regards,
Nicolas
More information about the linux-arm-kernel
mailing list