.. _sys_req:

System Requirements
===================

Xilinx Accelerator Card
-----------------------

1. VCU1525
2. U200
3. Versal CPM5 XCVP1202

Host Platform
-------------

x86_64 host system with at least one Gen 3x16 PCIe slot and minimum 64GB RAM
on same CPU node for 2K queues. For accomodating 4K queues in Versal CPM5 ~256GB RAM would be required.
For VM testing, host system must support virtualization and it must be enabled in the BIOS.


Host System Configuration
-------------------------

Linux QDMA Driver release is verified on following Host system configuration for PF and VF functionality

+--------------------------+-------------------------------------------------------------+
| Host System              | Configuration Details                                       |
+==========================+=============================================================+
| Operating System         | Ubuntu 18.04 LTS                                            |
+--------------------------+-------------------------------------------------------------+
| Linux Kernel             | 4.15.0-23-generic                                           |
+--------------------------+-------------------------------------------------------------+
| RAM                      | 64GB on local NUMA node                                     |
+--------------------------+-------------------------------------------------------------+
| Hypervisor               | KVM                                                         |
+--------------------------+-------------------------------------------------------------+
| Qemu Version             | QEMU emulator version 2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.15)|
+--------------------------+-------------------------------------------------------------+

**Notes**:

- When assigning the 2048 queues to PFs users shall make sure the host system configuration meets the requirement given above. If users want to enable iommu(iommu=on), make sure suffiecient memory available to support the 2048 queues. If the memory is not sufficient, ``dma_alloc_coherent`` kernel call may fail and driver might not work.

- Versal CPM5 design supports 4096 queues. Users shall make sure the host system configuration meets the memory requirements to accomodate 4096 queues.

- QEMU is a hosted virtual machine monitor which emulates the machine's processor through dynamic binary translation and provides a set of different hardware and device models for the machine, enabling it to run a variety of guest operating systems.This is used to emulate the virtual machines and enables the users to attach virtual functions to virtual machines.

Guest System Configuration
--------------------------

Linux QDMA VF Driver release is verified on following Guest system configuration for VF functionality

========================= ==================================
Guest System(VM)          Configuration Details
========================= ==================================
Operating System          Ubuntu 18.04 LTS
Linux Kernel              4.15.1-20-generic
RAM 			          4GB
Cores              	      4
========================= ==================================


Supported Linux Distributions
-----------------------------

Linux QDMA Driver is supported on the following linux distributions


+-------------------------+---------------------+----------------+
| Linux Distribution      | Version             | Kernel Version |
+=========================+=====================+================+
| CentOS                  |7.6-1810 (RHEL 7.6)  |3.10.0-957      |
|                         +---------------------+----------------+
|                         |7.7-1908 (RHEL 7.7)  |3.10.0-1062     |
|                         +---------------------+----------------+
|                         |8.1-1911 (RHEL 8.1)  |4.18.0-348      |
|                         +---------------------+----------------+
|                         |8.3-2011 (RHEL 8.3)  |4.18.0-348      |
|                         +---------------------+----------------+
|                         |9                    |5.14.0-283      |
+-------------------------+---------------------+----------------+
|Fedora                   |30                   |5.0.9-301       |
|                         +---------------------+----------------+
|                         |31                   |5.3.7-301       |
|                         +---------------------+----------------+
|                         |33                   |5.8.15-301      |
|                         +---------------------+----------------+
|                         |36                   |5.17.5-300      |
|                         +---------------------+----------------+
|                         |37                   |6.2.8-200       |
+-------------------------+---------------------+----------------+
|Ubuntu                   |16.04                |4.15.0-101      |
|                         +---------------------+----------------+
|                         |18.04                |4.15.0-20       |
|                         +---------------------+----------------+
|                         |20.04                |5.4.0-31        |
|                         +---------------------+----------------+
|                         |22.04                |5.15.0-41       |
+-------------------------+---------------------+----------------+


Supported Kernel Versions
-------------------------

Linux QDMA Driver is verified on following kernel.org Linux kernel versions

+-------------------------+-----------------+
|Kernel.org               | Kernel Version  |
+=========================+=================+
|                         | 3.16.66         |
|                         +-----------------+
|                         | 4.4.196         |
|                         +-----------------+
|                         | 4.9.174         |
|                         +-----------------+
|                         | 4.14.117        |
|                         +-----------------+
|                         | 5.4             |
|                         +-----------------+
|                         | 5.13            |
|                         +-----------------+
|                         | 5.17            |
+-------------------------+-----------------+

The following kernel functions shall be included in the OS kernel version being used. Make sure that these functions are included in the kernel.

- Timer Functions
- PCIe Functions
- Kernel Memory functions
- Memory and GFP Functions

Notes about GCC versions
-------------------------

**Issue#1**: For Kernel Images > 4.9.199 with CONFIG_STACK_VALIDATION=y and GCC version > 8 compiler throws spurious warnings
related to sibling calls and frame pointer save/setup.

**Solution#1**: To suppress these warnings
enable the OBJECT_FILES_NON_STANDARD option in linux/drv/Makefile

**Issue#2**: Compilation failure on GCC 9

**Solution#2**: GCC 9 release adds the -Wmissing-attributes warnings (enabled by -Wall), which trigger for all the initialization/cleanup_module
aliases in the kernel (defined by the module_init/exit macros), ending up being very noisy.

These aliases point to the __init/__exit functions of a module, which are defined as __cold (among other attributes). However, if
the aliases themselves do not have the __cold attribute, this causes compilation failure for driver if used with Kernel Versions < 3.16.66 mentioned
in the supported kernels list above or if the Kernel Source doesn't have the fix for this which are there in the long term releases.