From: "Alastair D'Silva" <alastair@au1.ibm.com> To: "Alastair D'Silva" <alastair@au1.ibm.com> Cc: "Madhavan Srinivasan" <maddy@linux.vnet.ibm.com>, "Andrew Donnellan" <ajd@linux.ibm.com>, "Arnd Bergmann" <arnd@arndb.de>, "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>, "Alexey Kardashevskiy" <aik@ozlabs.ru>, linux-kernel@vger.kernel.org, "Nicholas Piggin" <npiggin@gmail.com>, "Mahesh Salgaonkar" <mahesh@linux.vnet.ibm.com>, "Masahiro Yamada" <yamada.masahiro@socionext.com>, "Anju T Sudhakar" <anju@linux.vnet.ibm.com>, "Paul Mackerras" <paulus@samba.org>, "Cédric Le Goater" <clg@kaod.org>, "Frederic Barrat" <fbarrat@linux.ibm.com>, "Vaibhav Jain" <vaibhav@linux.ibm.com>, "Thomas Gleixner" <tglx@linutronix.de>, linuxppc-dev@lists.ozlabs.org, "David Gibson" <david@gibson.dropbear.id.au> Subject: Re: [PATCH 5/5] ocxl: Provide additional metadata to userspace Date: Tue, 17 Sep 2019 16:35:04 +1000 [thread overview] Message-ID: <832772dd7c22e100bfa81f77993f6cda5e40bfc4.camel@au1.ibm.com> (raw) In-Reply-To: <20190917014307.30485-6-alastair@au1.ibm.com> On Tue, 2019-09-17 at 11:43 +1000, Alastair D'Silva wrote: > From: Alastair D'Silva <alastair@d-silva.org> > > This patch exposes the OpenCAPI device serial number to > userspace. > > It also includes placeholders for the LPC & special purpose > memory information (which will be populated in a subsequent patch) > to avoid creating excessive versions of the IOCTL. > I think it makes more sense to fold in the population of LPC & special purpose memory into this patch, I'll address this in the next spin. > Signed-off-by: Alastair D'Silva <alastair@d-silva.org> > --- > drivers/misc/ocxl/config.c | 46 > ++++++++++++++++++++++++++++++++++++++ > drivers/misc/ocxl/file.c | 3 ++- > include/misc/ocxl.h | 1 + > include/uapi/misc/ocxl.h | 9 +++++++- > 4 files changed, 57 insertions(+), 2 deletions(-) > > diff --git a/drivers/misc/ocxl/config.c b/drivers/misc/ocxl/config.c > index fb0c3b6f8312..a9203c309365 100644 > --- a/drivers/misc/ocxl/config.c > +++ b/drivers/misc/ocxl/config.c > @@ -71,6 +71,51 @@ static int find_dvsec_afu_ctrl(struct pci_dev > *dev, u8 afu_idx) > return 0; > } > > +/** > + * Find a related PCI device (function 0) > + * @device: PCI device to match > + * > + * Returns a pointer to the related device, or null if not found > + */ > +static struct pci_dev *get_function_0(struct pci_dev *dev) > +{ > + unsigned int devfn = PCI_DEVFN(PCI_SLOT(dev->devfn), 0); // > Look for function 0 > + > + return pci_get_domain_bus_and_slot(pci_domain_nr(dev->bus), > + dev->bus->number, devfn); > +} > + > +static void read_serial(struct pci_dev *dev, struct ocxl_fn_config > *fn) > +{ > + u32 low, high; > + int pos; > + > + pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_DSN); > + if (pos) { > + pci_read_config_dword(dev, pos + 0x04, &low); > + pci_read_config_dword(dev, pos + 0x08, &high); > + > + fn->serial = low | ((u64)high) << 32; > + > + return; > + } > + > + if (PCI_FUNC(dev->devfn) != 0) { > + struct pci_dev *related = get_function_0(dev); > + > + if (!related) { > + fn->serial = 0; > + return; > + } > + > + read_serial(related, fn); > + pci_dev_put(related); > + return; > + } > + > + fn->serial = 0; > +} > + > static void read_pasid(struct pci_dev *dev, struct ocxl_fn_config > *fn) > { > u16 val; > @@ -208,6 +253,7 @@ int ocxl_config_read_function(struct pci_dev > *dev, struct ocxl_fn_config *fn) > int rc; > > read_pasid(dev, fn); > + read_serial(dev, fn); > > rc = read_dvsec_tl(dev, fn); > if (rc) { > diff --git a/drivers/misc/ocxl/file.c b/drivers/misc/ocxl/file.c > index 2870c25da166..08f6f594a11d 100644 > --- a/drivers/misc/ocxl/file.c > +++ b/drivers/misc/ocxl/file.c > @@ -98,13 +98,14 @@ static long afu_ioctl_get_metadata(struct > ocxl_context *ctx, > > memset(&arg, 0, sizeof(arg)); > > - arg.version = 0; > + arg.version = 1; > > arg.afu_version_major = ctx->afu->config.version_major; > arg.afu_version_minor = ctx->afu->config.version_minor; > arg.pasid = ctx->pasid; > arg.pp_mmio_size = ctx->afu->config.pp_mmio_stride; > arg.global_mmio_size = ctx->afu->config.global_mmio_size; > + arg.serial = ctx->afu->fn->config.serial; > > if (copy_to_user(uarg, &arg, sizeof(arg))) > return -EFAULT; > diff --git a/include/misc/ocxl.h b/include/misc/ocxl.h > index a1897737908d..da75db149e6c 100644 > --- a/include/misc/ocxl.h > +++ b/include/misc/ocxl.h > @@ -46,6 +46,7 @@ struct ocxl_fn_config { > int dvsec_afu_info_pos; /* offset of the AFU information DVSEC > */ > s8 max_pasid_log; > s8 max_afu_index; > + u64 serial; > }; > > enum ocxl_endian { > diff --git a/include/uapi/misc/ocxl.h b/include/uapi/misc/ocxl.h > index 6d29a60a896a..d4c6bf10580c 100644 > --- a/include/uapi/misc/ocxl.h > +++ b/include/uapi/misc/ocxl.h > @@ -45,7 +45,14 @@ struct ocxl_ioctl_metadata { > > /* End version 0 fields */ > > - __u64 reserved[13]; /* Total of 16*u64 */ > + // Version 1 fields > + __u64 lpc_mem_size; > + __u64 special_purpose_mem_size; > + __u64 serial; // Device serial number > + > + // End version 1 fields > + > + __u64 reserved[10]; // Total of 16*u64 > }; > > struct ocxl_ioctl_p9_wait { > -- > 2.21.0 -- Alastair D'Silva Open Source Developer Linux Technology Centre, IBM Australia mob: 0423 762 819
WARNING: multiple messages have this Message-ID (diff)
From: "Alastair D'Silva" <alastair@au1.ibm.com> To: "Alastair D'Silva" <alastair@au1.ibm.com> Cc: "Madhavan Srinivasan" <maddy@linux.vnet.ibm.com>, "Andrew Donnellan" <ajd@linux.ibm.com>, "Arnd Bergmann" <arnd@arndb.de>, "Alexey Kardashevskiy" <aik@ozlabs.ru>, "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>, linux-kernel@vger.kernel.org, "Nicholas Piggin" <npiggin@gmail.com>, "Masahiro Yamada" <yamada.masahiro@socionext.com>, "Anju T Sudhakar" <anju@linux.vnet.ibm.com>, "Paul Mackerras" <paulus@samba.org>, "Cédric Le Goater" <clg@kaod.org>, "Mahesh Salgaonkar" <mahesh@linux.vnet.ibm.com>, "Frederic Barrat" <fbarrat@linux.ibm.com>, "Vaibhav Jain" <vaibhav@linux.ibm.com>, "Thomas Gleixner" <tglx@linutronix.de>, linuxppc-dev@lists.ozlabs.org, "David Gibson" <david@gibson.dropbear.id.au> Subject: Re: [PATCH 5/5] ocxl: Provide additional metadata to userspace Date: Tue, 17 Sep 2019 16:35:04 +1000 [thread overview] Message-ID: <832772dd7c22e100bfa81f77993f6cda5e40bfc4.camel@au1.ibm.com> (raw) In-Reply-To: <20190917014307.30485-6-alastair@au1.ibm.com> On Tue, 2019-09-17 at 11:43 +1000, Alastair D'Silva wrote: > From: Alastair D'Silva <alastair@d-silva.org> > > This patch exposes the OpenCAPI device serial number to > userspace. > > It also includes placeholders for the LPC & special purpose > memory information (which will be populated in a subsequent patch) > to avoid creating excessive versions of the IOCTL. > I think it makes more sense to fold in the population of LPC & special purpose memory into this patch, I'll address this in the next spin. > Signed-off-by: Alastair D'Silva <alastair@d-silva.org> > --- > drivers/misc/ocxl/config.c | 46 > ++++++++++++++++++++++++++++++++++++++ > drivers/misc/ocxl/file.c | 3 ++- > include/misc/ocxl.h | 1 + > include/uapi/misc/ocxl.h | 9 +++++++- > 4 files changed, 57 insertions(+), 2 deletions(-) > > diff --git a/drivers/misc/ocxl/config.c b/drivers/misc/ocxl/config.c > index fb0c3b6f8312..a9203c309365 100644 > --- a/drivers/misc/ocxl/config.c > +++ b/drivers/misc/ocxl/config.c > @@ -71,6 +71,51 @@ static int find_dvsec_afu_ctrl(struct pci_dev > *dev, u8 afu_idx) > return 0; > } > > +/** > + * Find a related PCI device (function 0) > + * @device: PCI device to match > + * > + * Returns a pointer to the related device, or null if not found > + */ > +static struct pci_dev *get_function_0(struct pci_dev *dev) > +{ > + unsigned int devfn = PCI_DEVFN(PCI_SLOT(dev->devfn), 0); // > Look for function 0 > + > + return pci_get_domain_bus_and_slot(pci_domain_nr(dev->bus), > + dev->bus->number, devfn); > +} > + > +static void read_serial(struct pci_dev *dev, struct ocxl_fn_config > *fn) > +{ > + u32 low, high; > + int pos; > + > + pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_DSN); > + if (pos) { > + pci_read_config_dword(dev, pos + 0x04, &low); > + pci_read_config_dword(dev, pos + 0x08, &high); > + > + fn->serial = low | ((u64)high) << 32; > + > + return; > + } > + > + if (PCI_FUNC(dev->devfn) != 0) { > + struct pci_dev *related = get_function_0(dev); > + > + if (!related) { > + fn->serial = 0; > + return; > + } > + > + read_serial(related, fn); > + pci_dev_put(related); > + return; > + } > + > + fn->serial = 0; > +} > + > static void read_pasid(struct pci_dev *dev, struct ocxl_fn_config > *fn) > { > u16 val; > @@ -208,6 +253,7 @@ int ocxl_config_read_function(struct pci_dev > *dev, struct ocxl_fn_config *fn) > int rc; > > read_pasid(dev, fn); > + read_serial(dev, fn); > > rc = read_dvsec_tl(dev, fn); > if (rc) { > diff --git a/drivers/misc/ocxl/file.c b/drivers/misc/ocxl/file.c > index 2870c25da166..08f6f594a11d 100644 > --- a/drivers/misc/ocxl/file.c > +++ b/drivers/misc/ocxl/file.c > @@ -98,13 +98,14 @@ static long afu_ioctl_get_metadata(struct > ocxl_context *ctx, > > memset(&arg, 0, sizeof(arg)); > > - arg.version = 0; > + arg.version = 1; > > arg.afu_version_major = ctx->afu->config.version_major; > arg.afu_version_minor = ctx->afu->config.version_minor; > arg.pasid = ctx->pasid; > arg.pp_mmio_size = ctx->afu->config.pp_mmio_stride; > arg.global_mmio_size = ctx->afu->config.global_mmio_size; > + arg.serial = ctx->afu->fn->config.serial; > > if (copy_to_user(uarg, &arg, sizeof(arg))) > return -EFAULT; > diff --git a/include/misc/ocxl.h b/include/misc/ocxl.h > index a1897737908d..da75db149e6c 100644 > --- a/include/misc/ocxl.h > +++ b/include/misc/ocxl.h > @@ -46,6 +46,7 @@ struct ocxl_fn_config { > int dvsec_afu_info_pos; /* offset of the AFU information DVSEC > */ > s8 max_pasid_log; > s8 max_afu_index; > + u64 serial; > }; > > enum ocxl_endian { > diff --git a/include/uapi/misc/ocxl.h b/include/uapi/misc/ocxl.h > index 6d29a60a896a..d4c6bf10580c 100644 > --- a/include/uapi/misc/ocxl.h > +++ b/include/uapi/misc/ocxl.h > @@ -45,7 +45,14 @@ struct ocxl_ioctl_metadata { > > /* End version 0 fields */ > > - __u64 reserved[13]; /* Total of 16*u64 */ > + // Version 1 fields > + __u64 lpc_mem_size; > + __u64 special_purpose_mem_size; > + __u64 serial; // Device serial number > + > + // End version 1 fields > + > + __u64 reserved[10]; // Total of 16*u64 > }; > > struct ocxl_ioctl_p9_wait { > -- > 2.21.0 -- Alastair D'Silva Open Source Developer Linux Technology Centre, IBM Australia mob: 0423 762 819
next prev parent reply other threads:[~2019-09-17 6:35 UTC|newest] Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-09-17 1:42 [PATCH 0/5] ocxl: Allow external drivers to access LPC memory Alastair D'Silva 2019-09-17 1:42 ` Alastair D'Silva 2019-09-17 1:42 ` [PATCH 1/5] powerpc: Add OPAL calls for LPC memory alloc/release Alastair D'Silva 2019-09-17 1:42 ` Alastair D'Silva 2019-09-25 11:41 ` Andrew Donnellan 2019-09-25 11:41 ` Andrew Donnellan 2019-09-17 1:42 ` [PATCH 2/5] powerpc: Map & release OpenCAPI LPC memory Alastair D'Silva 2019-09-17 1:42 ` Alastair D'Silva 2019-09-17 4:22 ` kbuild test robot 2019-09-17 4:22 ` kbuild test robot 2019-09-18 14:03 ` Frederic Barrat 2019-09-18 14:03 ` Frederic Barrat 2019-09-19 0:58 ` Alastair D'Silva 2019-09-19 0:58 ` Alastair D'Silva 2019-09-19 8:38 ` Frederic Barrat 2019-09-19 8:38 ` Frederic Barrat 2019-09-17 1:42 ` [PATCH 3/5] ocxl: Tally up the LPC memory on a link & allow it to be mapped Alastair D'Silva 2019-09-17 1:42 ` Alastair D'Silva 2019-09-18 14:02 ` Frederic Barrat 2019-09-18 14:02 ` Frederic Barrat 2019-09-19 4:55 ` Alastair D'Silva 2019-09-19 4:55 ` Alastair D'Silva 2019-09-19 8:41 ` Frederic Barrat 2019-09-19 8:41 ` Frederic Barrat 2019-09-17 1:43 ` [PATCH 4/5] ocxl: Add functions to map/unmap LPC memory Alastair D'Silva 2019-09-17 1:43 ` Alastair D'Silva 2019-09-17 7:36 ` Christoph Hellwig 2019-09-17 7:36 ` Christoph Hellwig 2019-09-18 14:03 ` Frederic Barrat 2019-09-18 14:03 ` Frederic Barrat 2019-09-19 1:19 ` Alastair D'Silva 2019-09-19 1:19 ` Alastair D'Silva 2019-09-19 1:24 ` Alastair D'Silva 2019-09-19 1:24 ` Alastair D'Silva 2019-09-23 11:39 ` Frederic Barrat 2019-09-23 11:39 ` Frederic Barrat 2019-09-26 2:59 ` Alastair D'Silva 2019-09-26 2:59 ` Alastair D'Silva 2019-09-17 1:43 ` [PATCH 5/5] ocxl: Provide additional metadata to userspace Alastair D'Silva 2019-09-17 1:43 ` Alastair D'Silva 2019-09-17 6:35 ` Alastair D'Silva [this message] 2019-09-17 6:35 ` Alastair D'Silva 2019-09-17 11:30 ` kbuild test robot 2019-09-17 11:30 ` kbuild test robot
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=832772dd7c22e100bfa81f77993f6cda5e40bfc4.camel@au1.ibm.com \ --to=alastair@au1.ibm.com \ --cc=aik@ozlabs.ru \ --cc=ajd@linux.ibm.com \ --cc=anju@linux.vnet.ibm.com \ --cc=arnd@arndb.de \ --cc=clg@kaod.org \ --cc=david@gibson.dropbear.id.au \ --cc=fbarrat@linux.ibm.com \ --cc=gregkh@linuxfoundation.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=maddy@linux.vnet.ibm.com \ --cc=mahesh@linux.vnet.ibm.com \ --cc=npiggin@gmail.com \ --cc=paulus@samba.org \ --cc=tglx@linutronix.de \ --cc=vaibhav@linux.ibm.com \ --cc=yamada.masahiro@socionext.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: linkBe 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.