Initial GT topology support
Reading GT topology (DSS masks and EU masks) from fuse registers is a pre-requisite for several items:
- Proper multicast/replicated (MCR) register handling
- Some GT workarounds
- Proper userspace operation
The topology masks are provided by hardware via one or more 32-bit registers. The DSS masks for future platforms are expected to eventually grow beyond the storage of a u64, so we provide a custom mask type based on the linux/bitmap.h facilities. EU masks (i.e., the mask of EUs available to a single DSS) are not expected to change significantly in the foreseeable future, so we stick with a simpler u64 there.
This MR also includes a possible uapi for userspace to query the topology. Since the other Xe queries are designed as one-shot queries that return all information at once, I've used a similar approach here where all three masks (geometry DSS, compute DSS, and EU) are returned for each GT. The query has not yet been tested.
References: DSS and EU fuse reading (#114 - closed)