There are multiple VCU modules. The VCU Init(xlnx_vcu) which is part of Linux Kernel and which handles PL Registers such as VCU Gasket and the clocking. The other three kernel drivers (al5e, al5d, allegro) together are the core VCU driver. The decoder driver is called al5d and encoder driver is called al5e. The common driver is called allegro.
The allegro driver has the following responsibilities:
- Loading the MCU firmware
- Initiating the MCU boot sequence.
- Writing mailbox messages into memory shared between APU and MCU.
- Providing notification of new mailbox messages.
The VCU Init driver source code is at https://github.com/Xilinx/linux-xlnx/blob/xlnx_rebase_v4.19/drivers/soc/xilinx/
The VCU modules (allegro, al5e, al5d) source code is at: https://github.com/Xilinx/vcu-modules
All VCU driver modules (xlnx_vcu, allegro, al5e, al5d) are compiled as runtime kernel modules and are loaded once kernel boot-up. Modules load in the following sequence.
- The VCU Init driver is loaded (xlnx_vcu).
- The VCU Init driver loads the Allegro modules.
- Allegro modules are loaded in the following order:
- allegro
- al5e
- al5d
You can use the
lsmod
command to verify whether the VCU modules were loaded properly. To load the modules, use themodprobe<driver name>
command and load the drivers in the above mentioned sequence.