From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
To: Michael Neuling <mikey@neuling.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>,
stewart@linux.vnet.ibm.com, linuxppc-dev@ozlabs.org,
apopple@au1.ibm.com, oohall@gmail.com
Subject: Re: [PATCH v3 01/10] VAS: Define macros, register fields and structures
Date: Fri, 24 Mar 2017 14:30:09 -0700 [thread overview]
Message-ID: <20170324213009.GD8330@us.ibm.com> (raw)
In-Reply-To: <1490329340.28113.57.camel@neuling.org>
Michael Neuling [mikey@neuling.org] wrote:
> On Thu, 2017-03-16 at 20:33 -0700, Sukadev Bhattiprolu wrote:
> > Define macros for the VAS hardware registers and bit-fields as well
> > as couple of data structures needed by the VAS driver.
> >=20
> > > Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
> > ---
> > Changelog[v3]
> > - Rename winctx->pid to winctx->pidr to reflect that its a value
> > =A0=A0from the PID register (SPRN_PID), not the linux process id.
> > - Make it easier to split header into kernel/user parts
> > - To keep user interface simple, use macros rather than enum for
> > =A0=A0the threshold-control modes.
> > - Add a pid field to struct vas_window - needed for user space
> > =A0=A0send windows.
> >=20
> > Changelog[v2]
> > - Add an overview of VAS in vas-internal.h
> > - Get window context parameters from device tree and drop
> > =A0=A0unnecessary macros.
> > ---
> > =A0MAINTAINERS=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0|=A0=A0=A06 +
> > =A0arch/powerpc/include/asm/vas.h=A0=A0|=A0=A043 +++++
> > =A0drivers/misc/vas/vas-internal.h | 392 ++++++++++++++++++++++++++++++=
++++++++++
>=20
> This is going to have to go through gregkh/lkml if it's drivers/misc. yo=
u'll at
> least need gregkh's ack/ok before mpe will take them (which is what we di=
d for
> CAPI).
>=20
> We might want to keep this in arch/powerpc but I'm not sure.
>=20
We will have device nodes accessible to user space so put it here and can
copy Gregkh next time. But let me know if we should move to arch/powerpc.
> > =A03 files changed, 441 insertions(+)
> > =A0create mode 100644 arch/powerpc/include/asm/vas.h
> > =A0create mode 100644 drivers/misc/vas/vas-internal.h
> >=20
> <snip>
> > +
> > +/*
> > + * Overview of Virtual Accelerator Switchboard (VAS).
> > + *
> > + * VAS is a hardware "switchboard" that allows senders and receivers to
> > + * exchange messages with _minimal_ kernel involvment. The receivers a=
re
> > + * typically NX coprocessor engines that perform compression or encryp=
tion
> > + * in hardware, but receivers can also be other software threads.
> > + *
> > + * Senders are user/kernel threads that submit compression/encryption =
or
> > + * other requests to the receivers. Senders must format their messages=
as
> > + * Coprocessor Request Blocks (CRB)s and submit them using the instruc=
tions
> > + * "copy" and "paste" which were introduced in Power9.
> > + *
> > + * A Power node can have (upto?) 8 Power chips. There is one instance =
of
> > + * VAS in each Power9 chip. Each instance of VAS has 64K windows or po=
rts,
> > + * Senders and receivers must each connect to a separate window before=
they
> > + * can exchange messages through the switchboard.
> > + *
> > + * Each window is described by two types of window contexts:
> > + *
> > > + * Hypervisor Window Context (HVWC) of size VAS_HVWC_SIZE bytes
> > + *
> > > + * OS/User Window Context (UWC) of size VAS_UWC_SIZE bytes.
> > + *
> > + * A window context can be viewed as a set of 64-bit registers. The se=
ttings
> > + * in these registers configure/control/determine the behavior of the =
VAS
> > + * hardware when messages are sent/received through the window. The re=
gisters
> > + * in the HVWC are configured by the kernel while the registers in the=
UWC can
> > + * be configured by the kernel or by the user space application that i=
s using
> > + * the window.
> > + *
> > + * The HVWCs for all windows on a specific instance of VAS are in a co=
ntiguous
> > + * range of hardware addresses or Base address region (BAR) referred t=
o as the
> > + * HVWC BAR for the instance. Similarly the UWCs for all windows on an=
instance
> > + * are referred to as the UWC BAR for the instance. The two BARs for e=
ach
> > + * instance are defined Power9 MMIO Ranges spreadsheet and available t=
o the
> > + * kernel the device tree as follows:
> > + *
> > > + * /proc/device-tree/xscom@.../vas@.../hvwc-bar-start
> > > + * /proc/device-tree/xscom@.../vas@.../hvwc-bar-size
> > > + * /proc/device-tree/xscom@.../vas@.../uwc-bar-start
> > + * /proc/device-tree/xscom@.../vas@.../uwc-bar-size
>=20
> should these just be reg properties?
I guess they could. Will try that
>=20
> > + *
> > + * The kernel maps these two hardware address regions into the kernel =
address
> > + * space (hvwc_map and uwc_map) and accesses the window contexts of a =
specific
> > + * window using:
> > + *
> > > + * =A0hvwc =3D hvwc_map + winid * VAS_HVWC_SIZE.
> > > + * =A0uwc =3D uwc_map + winid * VAS_UWC_SIZE.
> > + *
> > + * where winid is the window index (0..64K).
> > + *
> > + * Note that the window contexts are used to "configure" the windows. =
In
> > + * addition to this configuration address, each _send_ window also has=
a
> > + * unique hardware address, referred to as the "paste-address" to whic=
h the
> > + * sender must "paste" the message (CRB) they wish to submit. This har=
dware
> > + * paste address for window can be computed from the following nodes i=
n the
> > + * device tree:
> > + *
> > > + * /proc/device-tree/xscom@.../vas@.../window-base
> > + * /proc/device-tree/xscom@.../vas@.../window-shift
>=20
> Same here with reg properties.
ok
>=20
> <snip>=20
> > +struct vas_winctx {
> <snip>
> > > + int lpid;
> > + int pidr; /* value from SPRN_PID, not linux pid */
>=20
> I'm surprised we have a copy of these here. They should be accessed from=
the
> context we are attaching to, rather than copied here... but I've not look=
ed at
> the rest of the code yet...
struct vas_winctx is just a convenient container for the window context.
It gets initialized based on type/use of window (user/kernel send/receive).
The lpid/pid are set by callers of VAS kernel interfaces.
Sukadev
next prev parent reply other threads:[~2017-03-24 21:30 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-17 3:33 [PATCH v3 00/10] Enable VAS Sukadev Bhattiprolu
2017-03-17 3:33 ` [PATCH v3 01/10] VAS: Define macros, register fields and structures Sukadev Bhattiprolu
2017-03-24 4:22 ` Michael Neuling
2017-03-24 21:30 ` Sukadev Bhattiprolu [this message]
2017-03-30 21:35 ` Sukadev Bhattiprolu
2017-03-17 3:33 ` [PATCH v3 02/10] Move GET_FIELD/SET_FIELD to vas.h Sukadev Bhattiprolu
2017-03-17 16:21 ` Dan Streetman
2017-03-17 3:33 ` [PATCH v3 03/10] VAS: Define vas_init() and vas_exit() Sukadev Bhattiprolu
2017-03-24 4:08 ` Michael Neuling
2017-03-24 4:26 ` Sukadev Bhattiprolu
2017-03-24 4:45 ` Michael Neuling
2017-03-24 21:21 ` Sukadev Bhattiprolu
2017-03-17 3:33 ` [PATCH v3 04/10] VAS: Define helpers for access MMIO regions Sukadev Bhattiprolu
2017-03-24 4:53 ` Michael Neuling
2017-03-24 21:18 ` Sukadev Bhattiprolu
2017-03-17 3:33 ` [PATCH v3 05/10] VAS: Define helpers to init window context Sukadev Bhattiprolu
2017-03-24 5:15 ` Michael Neuling
2017-03-24 21:47 ` Sukadev Bhattiprolu
2017-03-25 3:34 ` Michael Neuling
2017-03-17 3:33 ` [PATCH v3 06/10] VAS: Define helpers to alloc/free windows Sukadev Bhattiprolu
2017-03-24 8:59 ` Michael Neuling
2017-03-24 22:01 ` Sukadev Bhattiprolu
2017-03-17 3:33 ` [PATCH v3 07/10] VAS: Define vas_rx_win_open() interface Sukadev Bhattiprolu
2017-03-17 3:34 ` [PATCH v3 08/10] VAS: Define vas_win_close() interface Sukadev Bhattiprolu
2017-03-17 3:34 ` [PATCH v3 09/10] VAS: Define vas_tx_win_open() Sukadev Bhattiprolu
2017-03-17 3:34 ` [PATCH v3 10/10] VAS: Define copy/paste interfaces Sukadev Bhattiprolu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170324213009.GD8330@us.ibm.com \
--to=sukadev@linux.vnet.ibm.com \
--cc=apopple@au1.ibm.com \
--cc=linuxppc-dev@ozlabs.org \
--cc=mikey@neuling.org \
--cc=mpe@ellerman.id.au \
--cc=oohall@gmail.com \
--cc=stewart@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.