Re: [PATCH v2 3/3] drm/vc4: Notify the firmware when DRM is in charge
From: nicolas saenz julienne <nsaenz@kernel.org>
Date: 2021-12-10 09:55:25
Also in:
dri-devel, linux-arm-kernel
Hi Maxime, On Fri, 2021-12-03 at 14:51 +0100, Maxime Ripard wrote:
quoted hunk ↗ jump to hunk
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 <redacted> --- 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