Skip to content

Commit

Permalink
drm/vc4: Notify the firmware when DRM is in charge
Browse files Browse the repository at this point in the history
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@cerno.tech>
  • Loading branch information
mripard authored and pelwell committed Jul 2, 2021
1 parent ba2c078 commit 30606f3
Showing 1 changed file with 19 additions and 0 deletions.
19 changes: 19 additions & 0 deletions drivers/gpu/drm/vc4/vc4_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,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"
Expand Down Expand Up @@ -305,8 +307,25 @@ static int vc4_drm_bind(struct device *dev)
if (ret)
return ret;

node = of_parse_phandle(dev->of_node, "raspberrypi,firmware", 0);
if (node) {
vc4->firmware = rpi_firmware_get(dev->of_node);
of_node_put(node);

if (!vc4->firmware)
return -EPROBE_DEFER;
}

drm_fb_helper_remove_conflicting_framebuffers(NULL, "vc4drmfb", false);

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);
}

ret = component_bind_all(dev, drm);
if (ret)
return ret;
Expand Down

0 comments on commit 30606f3

Please sign in to comment.