Task access window assignment

Hello,

We have a system with the MALI G78AE and we are interested on using its virtualization techniques. We are trying to understand the access windows assignment process. In this sense, we have a few questions:

1. How can a driver instance request access for a specific window? For example, consider a task A instance with the GPU driver that wants to use Access Window AW0 and do not want to use Access Window AW1.

2. How can that be specified? Is it something that the API we are using should define (Vulkan, for our case)? if yes, is it shown simply as different queues?

Kind Regards, Luca.

  • Hi Luca, 
    I think we need to break this down slightly. 

    The device driver instance is defined by the platform device tree.
    There will be a separate DT node for each Access Window, resulting in one or more /dev/maliN devices.
    The driver instance can only request GPU access for its specific Access Window - it can not change the AW it is associated with.

    At the process level, it is possible to specify which Mali device is used by a user space application via an environment variable: MALI_INSTANCE=1 (for /dev/mali1).
    For Vulkan, I believe the multiple device nodes are exposed as vkDevices to be used.

    This should answer your direct question; however I am unsure why you would want to virtualise a GPU using Access Windows in a Single OS?
    There is an overhead associated with this approach, which means it is better suited to multiple VMs rather than processes.
    I can see how this might be useful if combined with partitioning and used to have different sized (performance) partitions, but would like to explore the use case further. 

    Kind regards,
    Richard.