Unit VC4

From Ultibo.org
Revision as of 04:32, 27 July 2021 by Ultibo (Talk | contribs)

Jump to: navigation, search

Return to Unit Reference


Description


Ultibo Broadcom VideoCoreIV interface unit

The VideoCore IV (VC4) is the graphics processor (GPU) contained in the Broadcom BCM2835, 2836 and 2837 SoC used in the Raspberry Pi A/B/A+/B+/CM/2B/3B/3A+/3B+/CM3/CM3+. The Broadcom BCM2838 SoC used in the Raspberry Pi 4B/400 uses a new VideoCore VI (VC6) graphics processor however some of the core functionality of this unit such as VCHIQ and DispmanX is still compatible and the functionality provided here for those subsystems still works.

The VC4 is made up of many subsystems that perform functions ranging from 2D and 3D graphics acceleration to hardware audio, video and image encoding and decoding as well as display and camera interfaces.

This unit provides common definitions, imports and support routines needed to enable all of the VC4 functionality for use in Ultibo. In addition to the functionality provided by this unit there are a number of drivers that implement specific parts of the control and communication such as VCHIQ, VCSM and VCCMA.

The majority of the interface between the ARM CPU and the VC4 GPU is contained with the userland libraries which are maintained by both Broadcom and Raspberry Pi. These have been ported to Ultibo and are provided as a series of static libraries that are included as required in order to expose the appropriate parts of the interface.

There is currently no intention to directly port these libraries to Pascal as they represent a vast and actively changing codebase, a direct port would offer no advantages and would require more maintenance than the current form.

For the available documentation of the functions supported by this unit please see:

Building the Userland libraries


Flags:

__DYNAMIC_REENT__


Options:

Raspberry Pi

-mabi=aapcs
-march=armv6
-mcpu=arm1176jzf-s
-mfpu=vfp
-mfloat-abi=hard
  

Raspberry Pi2/3/4 and QEMU VersatilePB (32-bit)

-mabi=aapcs
-marm
-march=armv7-a
-mfpu=vfpv3-d16
-mfloat-abi=hard
 

Raspberry Pi3/4 and QEMU VersatilePB (64-bit)

-mabi=lp64 (Note: Supported only by later versions of GCC)
-march=armv8-a
   


Build:

Download Userland from https://github.com/ultibohub/userland

Unpack to folder $HOME/userland

(or git clone https://github.com/ultibohub/userland.git)


Build ARMv6:

cd
  
cd userland
  
export PATH=$HOME/gcc-arm-none-eabi-5_4-2016q2/bin:$PATH
  
./buildme.armv6-ultibo
 
 

Build ARMv7:

cd
  
cd userland
  
export PATH=$HOME/gcc-arm-none-eabi-5_4-2016q2/bin:$PATH
  
./buildme.armv7-ultibo
  

Build ARMv8:

cd
  
cd userland
  
export PATH=$HOME/gcc-linaro-aarch64-none-elf-4.8-2014.04_linux/bin:$PATH
  
./buildme.armv8-ultibo


Notes:

Building for 64-bit is not currently fully implemented and is not expected to work.

This is not an Ultibo limitation but applies to the original Linux version of the libraries as well.

Constants


Refer to the available documentation links above

Type definitions


Refer to the available documentation links above

Public variables


Refer to the available documentation links above

Function declarations


Refer to the available documentation links above


Return to Unit Reference