[Skiboot] [PATCH v5 0/7] Enable VAS
Sukadev Bhattiprolu
sukadev at linux.vnet.ibm.com
Fri Mar 31 16:41:03 AEDT 2017
Sukadev Bhattiprolu [sukadev at linux.vnet.ibm.com] wrote:
> Power9 introduces a hardware subsystem referred to as the Virtual
> Accelerator Switchboard (VAS). VAS allows kernel subsystems and user
> space processes to directly access the Nest Accelerator (NX) engines
> which implement compression and encryption algorithms in the hardware.
>
> NX has been in Power processors since Power7+, but access to the NX
> engines was through the 'icswx' instruction which is only available
> to the kernel/hypervisor. Starting with Power9, access to the NX
> engines is provided to both kernel and user space processes through
> VAS.
>
> The switchboard (i.e VAS) multiplexes accesses between "receivers" and
> "senders", where the "receivers" are typically the NX engines and
> "senders" are the kernel subsystems and user processors that wish to
> access the receivers (NX engines). Once a sender is "connected" to
> a receiver through the switchboard, the sender can submit compression/
> encryption requests to the hardware using the new (in PowerISA 3.0)
> "copy" and "paste" instructions.
>
> In the initial OPAL and PowerNV kernel patchsets, the "senders" can
> only be kernel subsystems (i.e NX-842 driver). A follow-on patch set
> will allow senders to be user-space processes.
>
> This OPAL patch set initializes the VAS registers and makes the VAS
> hardware available to the NX-842 driver in the kernel. It also provides
> some interfaces that the NX-842 subsystem in OPAL needs to initialize
> the NX hardware in Power9.
>
> This patchset has been tested in a Simics Power9 environment using:
> - the corresponding VAS kernel patchset [1]
> - modified NX-842 OPAL and kernel drivers, and
> - a compression self-test module from Power8.
>
> A newer version of the VAS kernel patchset, as well as the OPAL and
> kernel patchsets for NX-842 driver will be posted separately. All four
> are needed to effectively use VAS/NX in Power9.
>
> Thanks to Haren Myneni for the NX-842 modifications and help with
> testing, Ben Herrenschmidt, Michael Ellerman and Michael Neuling for
> input on working with the hardware and Oliver O'Halloran and Balbir
> Singh for review comments.
>
> [1] RFC version of VAS kernel patch set:
> https://lists.ozlabs.org/pipermail/linuxppc-dev/2016-November/150854.html
Updated, [v4] of the kernel patch set is at:
https://lists.ozlabs.org/pipermail/linuxppc-dev/2017-March/156078.html
>
> Changelog[v5]
> - Create device tree entries for HVWC, UWC and Paste address; drop
> the vas-#windows entries as number of windows are constant
> - Assign an unique vas-id to each instance and export it in DT.
> - Drop the patch to read FIR. Will include it in a follow-on patchset.
>
> Changelog[v4]
> - Comments from Balbir: Made some functions inline; added some device
> tree nodes
> - Dropped the patch to allocate/return IRQ ports for now. Will
> repost the patch later.
>
> Changelog[v3]
> - [Oliver O'Halloran] Fold changes to vas.c and Makefile.inc from
> patch 1 into current patch; use constant 'true' for the
> (unnecessary) macros that were removed by earlier patch;
> free wcbs memory if any chip fails initialization;use
> prolog()/prerror() instead of printf; Use out_be64() to
> write to the MMIO address
>
> - [Oliver O'Halloran, Alistair Popple] Use proc_gen to check for P9
>
> Changelog[v2]
> - Drop BenH's patch (interface to retrieve IPI trigger port) from
> this set since it has been merged into skiboot.
> - Minor code reorg to address Alistair Popple's comment (Patch 5).
>
>
>
> Sukadev Bhattiprolu (7):
> Define helpers to extract P9 node/chip ids
> vas: Define macros of constants and register fields
> vas: Initialize VAS registers
> vas: Define helper to compute window paste address
> vas: Create device tree node
> vas: Define vas_get_hvwc_mmio_bar interface
> vas: Define vas_get_wcbs_bar interface
>
> core/Makefile.inc | 2 +-
> core/init.c | 4 +
> core/vas.c | 375 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> include/chip.h | 7 +
> include/vas.h | 158 +++++++++++++++++++++++
> 5 files changed, 545 insertions(+), 1 deletion(-)
> create mode 100644 core/vas.c
> create mode 100644 include/vas.h
>
> --
> 2.7.4
>
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot
More information about the Skiboot
mailing list