Adventure in DRMland - Or how to write a FreeBSD ARM64 DRM driver

Emmanuel Vadot · 2019

DRM (Direct Rendering Manager) is today standard for applications like a display server, to talk the the graphical hardware present on a computer or System On a Chip (SoC).It consist of a kernel side API and a userland part (via IOCTLs) that application can use to talk the GPU or con)gure the display modes (resolution, refresh rates etc ...).While support for X86 devices (intel or amd) are now correct on FreeBSD, arm and arm64 hardware support is still lacking.The only DRM driver is for Tegra based SoC, other hardware either have basic framebu2er support (like the RaspberryPi family) or will require the bootloader to have framebu2er support and will use it via EFI framebu2er.While framebu2er might be enough for some use, having a DRM driver brings a lots of possibility, 2D acceleration, changing resolution, hotpluging another monitor etc … And it is also mandatory if we want to support the 3D chip or the Video decoder usualy present on arm/ arm64 SoCs.In this paper the author will describe the DRM subsystem and the anatomy of a modern DRM driver, based on his work on the Allwinner Display Engine 2 present in many SoC of this semiconductor company.

Read the paper · More papers on PaperTik