From: "Alastair D'Silva" <alastair@d-silva.org> To: "'Dan Williams'" <dan.j.williams@intel.com> Cc: "'Aneesh Kumar K . V'" <aneesh.kumar@linux.ibm.com>, "'Benjamin Herrenschmidt'" <benh@kernel.crashing.org>, "'Paul Mackerras'" <paulus@samba.org>, "'Michael Ellerman'" <mpe@ellerman.id.au>, "'Frederic Barrat'" <fbarrat@linux.ibm.com>, "'Andrew Donnellan'" <ajd@linux.ibm.com>, "'Arnd Bergmann'" <arnd@arndb.de>, "'Greg Kroah-Hartman'" <gregkh@linuxfoundation.org>, "'Andrew Morton'" <akpm@linux-foundation.org>, "'Mauro Carvalho Chehab'" <mchehab+samsung@kernel.org>, "'David S. Miller'" <davem@davemloft.net>, "'Rob Herring'" <robh@kernel.org>, "'Anton Blanchard'" <anton@ozlabs.org>, "'Krzysztof Kozlowski'" <krzk@kernel.org>, "'Mahesh Salgaonkar'" <mahesh@linux.vnet.ibm.com>, "'Madhavan Srinivasan'" <maddy@linux.vnet.ibm.com>, "'Cédric Le Goater'" <clg@kaod.org>, "'Anju T Sudhakar'" <anju@linux.vnet.ibm.com>, "'Hari Bathini'" <hbathini@linux.ibm.com>, "'Thomas Gleixner'" <tglx@linutronix.de>, "'Greg Kurz'" <groug@kaod.org>, "'Nicholas Piggin'" <npiggin@gmail.com>, "'Masahiro Yamada'" <yamada.masahiro@socionex> Subject: RE: [PATCH v4 07/25] ocxl: Add functions to map/unmap LPC memory Date: Fri, 3 Apr 2020 14:50:36 +1100 [thread overview] Message-ID: <303a01d6096b$0ea3e120$2beba360$@d-silva.org> (raw) In-Reply-To: <CAPcyv4gUU4PbQK1YJLfOToLDmFWsWWLySwkqHuoqGDvKZJGQvg@mail.gmail.com> > -----Original Message----- > From: Dan Williams <dan.j.williams@intel.com> > Sent: Wednesday, 1 April 2020 7:49 PM > To: Alastair D'Silva <alastair@d-silva.org> > Cc: Aneesh Kumar K . V <aneesh.kumar@linux.ibm.com>; Oliver O'Halloran > <oohall@gmail.com>; Benjamin Herrenschmidt > <benh@kernel.crashing.org>; Paul Mackerras <paulus@samba.org>; Michael > Ellerman <mpe@ellerman.id.au>; Frederic Barrat <fbarrat@linux.ibm.com>; > Andrew Donnellan <ajd@linux.ibm.com>; Arnd Bergmann > <arnd@arndb.de>; Greg Kroah-Hartman <gregkh@linuxfoundation.org>; > Vishal Verma <vishal.l.verma@intel.com>; Dave Jiang > <dave.jiang@intel.com>; Ira Weiny <ira.weiny@intel.com>; Andrew Morton > <akpm@linux-foundation.org>; Mauro Carvalho Chehab > <mchehab+samsung@kernel.org>; David S. Miller <davem@davemloft.net>; > Rob Herring <robh@kernel.org>; Anton Blanchard <anton@ozlabs.org>; > Krzysztof Kozlowski <krzk@kernel.org>; Mahesh Salgaonkar > <mahesh@linux.vnet.ibm.com>; Madhavan Srinivasan > <maddy@linux.vnet.ibm.com>; Cédric Le Goater <clg@kaod.org>; Anju T > Sudhakar <anju@linux.vnet.ibm.com>; Hari Bathini > <hbathini@linux.ibm.com>; Thomas Gleixner <tglx@linutronix.de>; Greg > Kurz <groug@kaod.org>; Nicholas Piggin <npiggin@gmail.com>; Masahiro > Yamada <yamada.masahiro@socionext.com>; Alexey Kardashevskiy > <aik@ozlabs.ru>; Linux Kernel Mailing List <linux-kernel@vger.kernel.org>; > linuxppc-dev <linuxppc-dev@lists.ozlabs.org>; linux-nvdimm <linux- > nvdimm@lists.01.org>; Linux MM <linux-mm@kvack.org> > Subject: Re: [PATCH v4 07/25] ocxl: Add functions to map/unmap LPC > memory > > On Sun, Mar 29, 2020 at 10:23 PM Alastair D'Silva <alastair@d-silva.org> > wrote: > > > > Add functions to map/unmap LPC memory > > > > "map memory" is an overloaded term. I'm guessing this patch has nothing to > do with mapping memory in the MMU. Is it updating hardware resource > decoders to start claiming address space that was allocated previously? > It's similar to MMIO - these calls end up setting up a BAR which places the LPC memory into a physical memory range addressable by the kernel. > > Signed-off-by: Alastair D'Silva <alastair@d-silva.org> > > Acked-by: Frederic Barrat <fbarrat@linux.ibm.com> > > --- > > drivers/misc/ocxl/core.c | 51 +++++++++++++++++++++++++++++++ > > drivers/misc/ocxl/ocxl_internal.h | 3 ++ > > include/misc/ocxl.h | 21 +++++++++++++ > > 3 files changed, 75 insertions(+) > > > > diff --git a/drivers/misc/ocxl/core.c b/drivers/misc/ocxl/core.c index > > 2531c6cf19a0..75ff14e3882a 100644 > > --- a/drivers/misc/ocxl/core.c > > +++ b/drivers/misc/ocxl/core.c > > @@ -210,6 +210,56 @@ static void unmap_mmio_areas(struct ocxl_afu > *afu) > > release_fn_bar(afu->fn, afu->config.global_mmio_bar); } > > > > +int ocxl_afu_map_lpc_mem(struct ocxl_afu *afu) { > > + struct pci_dev *dev = to_pci_dev(afu->fn->dev.parent); > > + > > + if ((afu->config.lpc_mem_size + afu- > >config.special_purpose_mem_size) == 0) > > + return 0; > > + > > + afu->lpc_base_addr = ocxl_link_lpc_map(afu->fn->link, dev); > > + if (afu->lpc_base_addr == 0) > > + return -EINVAL; > > + > > + if (afu->config.lpc_mem_size > 0) { > > + afu->lpc_res.start = afu->lpc_base_addr + afu- > >config.lpc_mem_offset; > > + afu->lpc_res.end = afu->lpc_res.start + afu->config.lpc_mem_size > - 1; > > + } > > + > > + if (afu->config.special_purpose_mem_size > 0) { > > + afu->special_purpose_res.start = afu->lpc_base_addr + > > + afu->config.special_purpose_mem_offset; > > + afu->special_purpose_res.end = afu->special_purpose_res.start + > > + afu->config.special_purpose_mem_size - 1; > > + } > > + > > + return 0; > > +} > > +EXPORT_SYMBOL_GPL(ocxl_afu_map_lpc_mem); > > + > > +struct resource *ocxl_afu_lpc_mem(struct ocxl_afu *afu) { > > + return &afu->lpc_res; > > +} > > +EXPORT_SYMBOL_GPL(ocxl_afu_lpc_mem); > > + > > +static void unmap_lpc_mem(struct ocxl_afu *afu) { > > + struct pci_dev *dev = to_pci_dev(afu->fn->dev.parent); > > + > > + if (afu->lpc_res.start || afu->special_purpose_res.start) { > > + void *link = afu->fn->link; > > + > > + // only release the link when the the last consumer calls release > > + ocxl_link_lpc_release(link, dev); > > + > > + afu->lpc_res.start = 0; > > + afu->lpc_res.end = 0; > > + afu->special_purpose_res.start = 0; > > + afu->special_purpose_res.end = 0; > > + } > > +} > > + > > static int configure_afu(struct ocxl_afu *afu, u8 afu_idx, struct > > pci_dev *dev) { > > int rc; > > @@ -251,6 +301,7 @@ static int configure_afu(struct ocxl_afu *afu, u8 > > afu_idx, struct pci_dev *dev) > > > > static void deconfigure_afu(struct ocxl_afu *afu) { > > + unmap_lpc_mem(afu); > > unmap_mmio_areas(afu); > > reclaim_afu_pasid(afu); > > reclaim_afu_actag(afu); > > diff --git a/drivers/misc/ocxl/ocxl_internal.h > > b/drivers/misc/ocxl/ocxl_internal.h > > index 2d7575225bd7..7b975a89db7b 100644 > > --- a/drivers/misc/ocxl/ocxl_internal.h > > +++ b/drivers/misc/ocxl/ocxl_internal.h > > @@ -52,6 +52,9 @@ struct ocxl_afu { > > void __iomem *global_mmio_ptr; > > u64 pp_mmio_start; > > void *private; > > + u64 lpc_base_addr; /* Covers both LPC & special purpose memory */ > > + struct resource lpc_res; > > + struct resource special_purpose_res; > > }; > > > > enum ocxl_context_status { > > diff --git a/include/misc/ocxl.h b/include/misc/ocxl.h index > > 357ef1aadbc0..d8b0b4d46bfb 100644 > > --- a/include/misc/ocxl.h > > +++ b/include/misc/ocxl.h > > @@ -203,6 +203,27 @@ int ocxl_irq_set_handler(struct ocxl_context > > *ctx, int irq_id, > > > > // AFU Metadata > > > > +/** > > + * ocxl_afu_map_lpc_mem() - Map the LPC system & special purpose > > +memory for an AFU > > + * Do not call this during device discovery, as there may me multiple > > s/me/be/ > > > > + * devices on a link, and the memory is mapped for the whole link, > > +not > > + * just one device. It should only be called after all devices have > > + * registered their memory on the link. > > + * > > + * @afu: The AFU that has the LPC memory to map > > + * > > + * Returns 0 on success, negative on failure */ int > > +ocxl_afu_map_lpc_mem(struct ocxl_afu *afu); > > + > > +/** > > + * ocxl_afu_lpc_mem() - Get the physical address range of LPC memory > > +for an AFU > > + * @afu: The AFU associated with the LPC memory > > + * > > + * Returns a pointer to the resource struct for the physical address > > +range */ struct resource *ocxl_afu_lpc_mem(struct ocxl_afu *afu); > > + > > /** > > * ocxl_afu_config() - Get a pointer to the config for an AFU > > * @afu: a pointer to the AFU to get the config for > > -- > > 2.24.1 > > -- Alastair D'Silva mob: 0423 762 819 skype: alastair_dsilva msn: alastair@d-silva.org blog: http://alastair.d-silva.org Twitter: @EvilDeece _______________________________________________ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-leave@lists.01.org
WARNING: multiple messages have this Message-ID
From: "Alastair D'Silva" <alastair@d-silva.org> To: "'Dan Williams'" <dan.j.williams@intel.com> Cc: "'Aneesh Kumar K . V'" <aneesh.kumar@linux.ibm.com>, "'Oliver O'Halloran'" <oohall@gmail.com>, "'Benjamin Herrenschmidt'" <benh@kernel.crashing.org>, "'Paul Mackerras'" <paulus@samba.org>, "'Michael Ellerman'" <mpe@ellerman.id.au>, "'Frederic Barrat'" <fbarrat@linux.ibm.com>, "'Andrew Donnellan'" <ajd@linux.ibm.com>, "'Arnd Bergmann'" <arnd@arndb.de>, "'Greg Kroah-Hartman'" <gregkh@linuxfoundation.org>, "'Vishal Verma'" <vishal.l.verma@intel.com>, "'Dave Jiang'" <dave.jiang@intel.com>, "'Ira Weiny'" <ira.weiny@intel.com>, "'Andrew Morton'" <akpm@linux-foundation.org>, "'Mauro Carvalho Chehab'" <mchehab+samsung@kernel.org>, "'David S. Miller'" <davem@davemloft.net>, "'Rob Herring'" <robh@kernel.org>, "'Anton Blanchard'" <anton@ozlabs.org>, "'Krzysztof Kozlowski'" <krzk@kernel.org>, "'Mahesh Salgaonkar'" <mahesh@linux.vnet.ibm.com>, "'Madhavan Srinivasan'" <maddy@linux.vnet.ibm.com>, "'Cédric Le Goater'" <clg@kaod.org>, "'Anju T Sudhakar'" <anju@linux.vnet.ibm.com>, "'Hari Bathini'" <hbathini@linux.ibm.com>, "'Thomas Gleixner'" <tglx@linutronix.de>, "'Greg Kurz'" <groug@kaod.org>, "'Nicholas Piggin'" <npiggin@gmail.com>, "'Masahiro Yamada'" <yamada.masahiro@socionext.com>, "'Alexey Kardashevskiy'" <aik@ozlabs.ru>, "'Linux Kernel Mailing List'" <linux-kernel@vger.kernel.org>, 'linuxppc-dev' <linuxppc-dev@lists.ozlabs.org>, 'linux-nvdimm' <linux-nvdimm@lists.01.org>, "'Linux MM'" <linux-mm@kvack.org> Subject: RE: [PATCH v4 07/25] ocxl: Add functions to map/unmap LPC memory Date: Fri, 3 Apr 2020 14:50:36 +1100 [thread overview] Message-ID: <303a01d6096b$0ea3e120$2beba360$@d-silva.org> (raw) In-Reply-To: <CAPcyv4gUU4PbQK1YJLfOToLDmFWsWWLySwkqHuoqGDvKZJGQvg@mail.gmail.com> > -----Original Message----- > From: Dan Williams <dan.j.williams@intel.com> > Sent: Wednesday, 1 April 2020 7:49 PM > To: Alastair D'Silva <alastair@d-silva.org> > Cc: Aneesh Kumar K . V <aneesh.kumar@linux.ibm.com>; Oliver O'Halloran > <oohall@gmail.com>; Benjamin Herrenschmidt > <benh@kernel.crashing.org>; Paul Mackerras <paulus@samba.org>; Michael > Ellerman <mpe@ellerman.id.au>; Frederic Barrat <fbarrat@linux.ibm.com>; > Andrew Donnellan <ajd@linux.ibm.com>; Arnd Bergmann > <arnd@arndb.de>; Greg Kroah-Hartman <gregkh@linuxfoundation.org>; > Vishal Verma <vishal.l.verma@intel.com>; Dave Jiang > <dave.jiang@intel.com>; Ira Weiny <ira.weiny@intel.com>; Andrew Morton > <akpm@linux-foundation.org>; Mauro Carvalho Chehab > <mchehab+samsung@kernel.org>; David S. Miller <davem@davemloft.net>; > Rob Herring <robh@kernel.org>; Anton Blanchard <anton@ozlabs.org>; > Krzysztof Kozlowski <krzk@kernel.org>; Mahesh Salgaonkar > <mahesh@linux.vnet.ibm.com>; Madhavan Srinivasan > <maddy@linux.vnet.ibm.com>; Cédric Le Goater <clg@kaod.org>; Anju T > Sudhakar <anju@linux.vnet.ibm.com>; Hari Bathini > <hbathini@linux.ibm.com>; Thomas Gleixner <tglx@linutronix.de>; Greg > Kurz <groug@kaod.org>; Nicholas Piggin <npiggin@gmail.com>; Masahiro > Yamada <yamada.masahiro@socionext.com>; Alexey Kardashevskiy > <aik@ozlabs.ru>; Linux Kernel Mailing List <linux-kernel@vger.kernel.org>; > linuxppc-dev <linuxppc-dev@lists.ozlabs.org>; linux-nvdimm <linux- > nvdimm@lists.01.org>; Linux MM <linux-mm@kvack.org> > Subject: Re: [PATCH v4 07/25] ocxl: Add functions to map/unmap LPC > memory > > On Sun, Mar 29, 2020 at 10:23 PM Alastair D'Silva <alastair@d-silva.org> > wrote: > > > > Add functions to map/unmap LPC memory > > > > "map memory" is an overloaded term. I'm guessing this patch has nothing to > do with mapping memory in the MMU. Is it updating hardware resource > decoders to start claiming address space that was allocated previously? > It's similar to MMIO - these calls end up setting up a BAR which places the LPC memory into a physical memory range addressable by the kernel. > > Signed-off-by: Alastair D'Silva <alastair@d-silva.org> > > Acked-by: Frederic Barrat <fbarrat@linux.ibm.com> > > --- > > drivers/misc/ocxl/core.c | 51 +++++++++++++++++++++++++++++++ > > drivers/misc/ocxl/ocxl_internal.h | 3 ++ > > include/misc/ocxl.h | 21 +++++++++++++ > > 3 files changed, 75 insertions(+) > > > > diff --git a/drivers/misc/ocxl/core.c b/drivers/misc/ocxl/core.c index > > 2531c6cf19a0..75ff14e3882a 100644 > > --- a/drivers/misc/ocxl/core.c > > +++ b/drivers/misc/ocxl/core.c > > @@ -210,6 +210,56 @@ static void unmap_mmio_areas(struct ocxl_afu > *afu) > > release_fn_bar(afu->fn, afu->config.global_mmio_bar); } > > > > +int ocxl_afu_map_lpc_mem(struct ocxl_afu *afu) { > > + struct pci_dev *dev = to_pci_dev(afu->fn->dev.parent); > > + > > + if ((afu->config.lpc_mem_size + afu- > >config.special_purpose_mem_size) == 0) > > + return 0; > > + > > + afu->lpc_base_addr = ocxl_link_lpc_map(afu->fn->link, dev); > > + if (afu->lpc_base_addr == 0) > > + return -EINVAL; > > + > > + if (afu->config.lpc_mem_size > 0) { > > + afu->lpc_res.start = afu->lpc_base_addr + afu- > >config.lpc_mem_offset; > > + afu->lpc_res.end = afu->lpc_res.start + afu->config.lpc_mem_size > - 1; > > + } > > + > > + if (afu->config.special_purpose_mem_size > 0) { > > + afu->special_purpose_res.start = afu->lpc_base_addr + > > + afu->config.special_purpose_mem_offset; > > + afu->special_purpose_res.end = afu->special_purpose_res.start + > > + afu->config.special_purpose_mem_size - 1; > > + } > > + > > + return 0; > > +} > > +EXPORT_SYMBOL_GPL(ocxl_afu_map_lpc_mem); > > + > > +struct resource *ocxl_afu_lpc_mem(struct ocxl_afu *afu) { > > + return &afu->lpc_res; > > +} > > +EXPORT_SYMBOL_GPL(ocxl_afu_lpc_mem); > > + > > +static void unmap_lpc_mem(struct ocxl_afu *afu) { > > + struct pci_dev *dev = to_pci_dev(afu->fn->dev.parent); > > + > > + if (afu->lpc_res.start || afu->special_purpose_res.start) { > > + void *link = afu->fn->link; > > + > > + // only release the link when the the last consumer calls release > > + ocxl_link_lpc_release(link, dev); > > + > > + afu->lpc_res.start = 0; > > + afu->lpc_res.end = 0; > > + afu->special_purpose_res.start = 0; > > + afu->special_purpose_res.end = 0; > > + } > > +} > > + > > static int configure_afu(struct ocxl_afu *afu, u8 afu_idx, struct > > pci_dev *dev) { > > int rc; > > @@ -251,6 +301,7 @@ static int configure_afu(struct ocxl_afu *afu, u8 > > afu_idx, struct pci_dev *dev) > > > > static void deconfigure_afu(struct ocxl_afu *afu) { > > + unmap_lpc_mem(afu); > > unmap_mmio_areas(afu); > > reclaim_afu_pasid(afu); > > reclaim_afu_actag(afu); > > diff --git a/drivers/misc/ocxl/ocxl_internal.h > > b/drivers/misc/ocxl/ocxl_internal.h > > index 2d7575225bd7..7b975a89db7b 100644 > > --- a/drivers/misc/ocxl/ocxl_internal.h > > +++ b/drivers/misc/ocxl/ocxl_internal.h > > @@ -52,6 +52,9 @@ struct ocxl_afu { > > void __iomem *global_mmio_ptr; > > u64 pp_mmio_start; > > void *private; > > + u64 lpc_base_addr; /* Covers both LPC & special purpose memory */ > > + struct resource lpc_res; > > + struct resource special_purpose_res; > > }; > > > > enum ocxl_context_status { > > diff --git a/include/misc/ocxl.h b/include/misc/ocxl.h index > > 357ef1aadbc0..d8b0b4d46bfb 100644 > > --- a/include/misc/ocxl.h > > +++ b/include/misc/ocxl.h > > @@ -203,6 +203,27 @@ int ocxl_irq_set_handler(struct ocxl_context > > *ctx, int irq_id, > > > > // AFU Metadata > > > > +/** > > + * ocxl_afu_map_lpc_mem() - Map the LPC system & special purpose > > +memory for an AFU > > + * Do not call this during device discovery, as there may me multiple > > s/me/be/ > > > > + * devices on a link, and the memory is mapped for the whole link, > > +not > > + * just one device. It should only be called after all devices have > > + * registered their memory on the link. > > + * > > + * @afu: The AFU that has the LPC memory to map > > + * > > + * Returns 0 on success, negative on failure */ int > > +ocxl_afu_map_lpc_mem(struct ocxl_afu *afu); > > + > > +/** > > + * ocxl_afu_lpc_mem() - Get the physical address range of LPC memory > > +for an AFU > > + * @afu: The AFU associated with the LPC memory > > + * > > + * Returns a pointer to the resource struct for the physical address > > +range */ struct resource *ocxl_afu_lpc_mem(struct ocxl_afu *afu); > > + > > /** > > * ocxl_afu_config() - Get a pointer to the config for an AFU > > * @afu: a pointer to the AFU to get the config for > > -- > > 2.24.1 > > -- Alastair D'Silva mob: 0423 762 819 skype: alastair_dsilva msn: alastair@d-silva.org blog: http://alastair.d-silva.org Twitter: @EvilDeece
WARNING: multiple messages have this Message-ID
From: "Alastair D'Silva" <alastair@d-silva.org> To: "'Dan Williams'" <dan.j.williams@intel.com> Cc: "'Madhavan Srinivasan'" <maddy@linux.vnet.ibm.com>, "'Alexey Kardashevskiy'" <aik@ozlabs.ru>, "'Masahiro Yamada'" <yamada.masahiro@socionext.com>, "'Oliver O'Halloran'" <oohall@gmail.com>, "'Mauro Carvalho Chehab'" <mchehab+samsung@kernel.org>, "'Ira Weiny'" <ira.weiny@intel.com>, "'Rob Herring'" <robh@kernel.org>, "'Dave Jiang'" <dave.jiang@intel.com>, 'linux-nvdimm' <linux-nvdimm@lists.01.org>, "'Aneesh Kumar K . V'" <aneesh.kumar@linux.ibm.com>, "'Krzysztof Kozlowski'" <krzk@kernel.org>, "'Anju T Sudhakar'" <anju@linux.vnet.ibm.com>, "'Mahesh Salgaonkar'" <mahesh@linux.vnet.ibm.com>, "'Andrew Donnellan'" <ajd@linux.ibm.com>, "'Arnd Bergmann'" <arnd@arndb.de>, "'Greg Kurz'" <groug@kaod.org>, "'Nicholas Piggin'" <npiggin@gmail.com>, "'Cédric Le Goater'" <clg@kaod.org>, "'Thomas Gleixner'" <tglx@linutronix.de>, "'Hari Bathini'" <hbathini@linux.ibm.com>, "'Linux MM'" <linux-mm@kvack.org>, "'Greg Kroah-Hartman'" <gregkh@linuxfoundation.org>, "'Linux Kernel Mailing List'" <linux-kernel@vger.kernel.org>, "'Vishal Verma'" <vishal.l.verma@intel.com>, "'Frederic Barrat'" <fbarrat@linux.ibm.com>, "'Paul Mackerras'" <paulus@samba.org>, "'Andrew Morton'" <akpm@linux-foundation.org>, 'linuxppc-dev' <linuxppc-dev@lists.ozlabs.org>, "'David S. Miller'" <davem@davemloft.net> Subject: RE: [PATCH v4 07/25] ocxl: Add functions to map/unmap LPC memory Date: Fri, 3 Apr 2020 14:50:36 +1100 [thread overview] Message-ID: <303a01d6096b$0ea3e120$2beba360$@d-silva.org> (raw) In-Reply-To: <CAPcyv4gUU4PbQK1YJLfOToLDmFWsWWLySwkqHuoqGDvKZJGQvg@mail.gmail.com> > -----Original Message----- > From: Dan Williams <dan.j.williams@intel.com> > Sent: Wednesday, 1 April 2020 7:49 PM > To: Alastair D'Silva <alastair@d-silva.org> > Cc: Aneesh Kumar K . V <aneesh.kumar@linux.ibm.com>; Oliver O'Halloran > <oohall@gmail.com>; Benjamin Herrenschmidt > <benh@kernel.crashing.org>; Paul Mackerras <paulus@samba.org>; Michael > Ellerman <mpe@ellerman.id.au>; Frederic Barrat <fbarrat@linux.ibm.com>; > Andrew Donnellan <ajd@linux.ibm.com>; Arnd Bergmann > <arnd@arndb.de>; Greg Kroah-Hartman <gregkh@linuxfoundation.org>; > Vishal Verma <vishal.l.verma@intel.com>; Dave Jiang > <dave.jiang@intel.com>; Ira Weiny <ira.weiny@intel.com>; Andrew Morton > <akpm@linux-foundation.org>; Mauro Carvalho Chehab > <mchehab+samsung@kernel.org>; David S. Miller <davem@davemloft.net>; > Rob Herring <robh@kernel.org>; Anton Blanchard <anton@ozlabs.org>; > Krzysztof Kozlowski <krzk@kernel.org>; Mahesh Salgaonkar > <mahesh@linux.vnet.ibm.com>; Madhavan Srinivasan > <maddy@linux.vnet.ibm.com>; Cédric Le Goater <clg@kaod.org>; Anju T > Sudhakar <anju@linux.vnet.ibm.com>; Hari Bathini > <hbathini@linux.ibm.com>; Thomas Gleixner <tglx@linutronix.de>; Greg > Kurz <groug@kaod.org>; Nicholas Piggin <npiggin@gmail.com>; Masahiro > Yamada <yamada.masahiro@socionext.com>; Alexey Kardashevskiy > <aik@ozlabs.ru>; Linux Kernel Mailing List <linux-kernel@vger.kernel.org>; > linuxppc-dev <linuxppc-dev@lists.ozlabs.org>; linux-nvdimm <linux- > nvdimm@lists.01.org>; Linux MM <linux-mm@kvack.org> > Subject: Re: [PATCH v4 07/25] ocxl: Add functions to map/unmap LPC > memory > > On Sun, Mar 29, 2020 at 10:23 PM Alastair D'Silva <alastair@d-silva.org> > wrote: > > > > Add functions to map/unmap LPC memory > > > > "map memory" is an overloaded term. I'm guessing this patch has nothing to > do with mapping memory in the MMU. Is it updating hardware resource > decoders to start claiming address space that was allocated previously? > It's similar to MMIO - these calls end up setting up a BAR which places the LPC memory into a physical memory range addressable by the kernel. > > Signed-off-by: Alastair D'Silva <alastair@d-silva.org> > > Acked-by: Frederic Barrat <fbarrat@linux.ibm.com> > > --- > > drivers/misc/ocxl/core.c | 51 +++++++++++++++++++++++++++++++ > > drivers/misc/ocxl/ocxl_internal.h | 3 ++ > > include/misc/ocxl.h | 21 +++++++++++++ > > 3 files changed, 75 insertions(+) > > > > diff --git a/drivers/misc/ocxl/core.c b/drivers/misc/ocxl/core.c index > > 2531c6cf19a0..75ff14e3882a 100644 > > --- a/drivers/misc/ocxl/core.c > > +++ b/drivers/misc/ocxl/core.c > > @@ -210,6 +210,56 @@ static void unmap_mmio_areas(struct ocxl_afu > *afu) > > release_fn_bar(afu->fn, afu->config.global_mmio_bar); } > > > > +int ocxl_afu_map_lpc_mem(struct ocxl_afu *afu) { > > + struct pci_dev *dev = to_pci_dev(afu->fn->dev.parent); > > + > > + if ((afu->config.lpc_mem_size + afu- > >config.special_purpose_mem_size) == 0) > > + return 0; > > + > > + afu->lpc_base_addr = ocxl_link_lpc_map(afu->fn->link, dev); > > + if (afu->lpc_base_addr == 0) > > + return -EINVAL; > > + > > + if (afu->config.lpc_mem_size > 0) { > > + afu->lpc_res.start = afu->lpc_base_addr + afu- > >config.lpc_mem_offset; > > + afu->lpc_res.end = afu->lpc_res.start + afu->config.lpc_mem_size > - 1; > > + } > > + > > + if (afu->config.special_purpose_mem_size > 0) { > > + afu->special_purpose_res.start = afu->lpc_base_addr + > > + afu->config.special_purpose_mem_offset; > > + afu->special_purpose_res.end = afu->special_purpose_res.start + > > + afu->config.special_purpose_mem_size - 1; > > + } > > + > > + return 0; > > +} > > +EXPORT_SYMBOL_GPL(ocxl_afu_map_lpc_mem); > > + > > +struct resource *ocxl_afu_lpc_mem(struct ocxl_afu *afu) { > > + return &afu->lpc_res; > > +} > > +EXPORT_SYMBOL_GPL(ocxl_afu_lpc_mem); > > + > > +static void unmap_lpc_mem(struct ocxl_afu *afu) { > > + struct pci_dev *dev = to_pci_dev(afu->fn->dev.parent); > > + > > + if (afu->lpc_res.start || afu->special_purpose_res.start) { > > + void *link = afu->fn->link; > > + > > + // only release the link when the the last consumer calls release > > + ocxl_link_lpc_release(link, dev); > > + > > + afu->lpc_res.start = 0; > > + afu->lpc_res.end = 0; > > + afu->special_purpose_res.start = 0; > > + afu->special_purpose_res.end = 0; > > + } > > +} > > + > > static int configure_afu(struct ocxl_afu *afu, u8 afu_idx, struct > > pci_dev *dev) { > > int rc; > > @@ -251,6 +301,7 @@ static int configure_afu(struct ocxl_afu *afu, u8 > > afu_idx, struct pci_dev *dev) > > > > static void deconfigure_afu(struct ocxl_afu *afu) { > > + unmap_lpc_mem(afu); > > unmap_mmio_areas(afu); > > reclaim_afu_pasid(afu); > > reclaim_afu_actag(afu); > > diff --git a/drivers/misc/ocxl/ocxl_internal.h > > b/drivers/misc/ocxl/ocxl_internal.h > > index 2d7575225bd7..7b975a89db7b 100644 > > --- a/drivers/misc/ocxl/ocxl_internal.h > > +++ b/drivers/misc/ocxl/ocxl_internal.h > > @@ -52,6 +52,9 @@ struct ocxl_afu { > > void __iomem *global_mmio_ptr; > > u64 pp_mmio_start; > > void *private; > > + u64 lpc_base_addr; /* Covers both LPC & special purpose memory */ > > + struct resource lpc_res; > > + struct resource special_purpose_res; > > }; > > > > enum ocxl_context_status { > > diff --git a/include/misc/ocxl.h b/include/misc/ocxl.h index > > 357ef1aadbc0..d8b0b4d46bfb 100644 > > --- a/include/misc/ocxl.h > > +++ b/include/misc/ocxl.h > > @@ -203,6 +203,27 @@ int ocxl_irq_set_handler(struct ocxl_context > > *ctx, int irq_id, > > > > // AFU Metadata > > > > +/** > > + * ocxl_afu_map_lpc_mem() - Map the LPC system & special purpose > > +memory for an AFU > > + * Do not call this during device discovery, as there may me multiple > > s/me/be/ > > > > + * devices on a link, and the memory is mapped for the whole link, > > +not > > + * just one device. It should only be called after all devices have > > + * registered their memory on the link. > > + * > > + * @afu: The AFU that has the LPC memory to map > > + * > > + * Returns 0 on success, negative on failure */ int > > +ocxl_afu_map_lpc_mem(struct ocxl_afu *afu); > > + > > +/** > > + * ocxl_afu_lpc_mem() - Get the physical address range of LPC memory > > +for an AFU > > + * @afu: The AFU associated with the LPC memory > > + * > > + * Returns a pointer to the resource struct for the physical address > > +range */ struct resource *ocxl_afu_lpc_mem(struct ocxl_afu *afu); > > + > > /** > > * ocxl_afu_config() - Get a pointer to the config for an AFU > > * @afu: a pointer to the AFU to get the config for > > -- > > 2.24.1 > > -- Alastair D'Silva mob: 0423 762 819 skype: alastair_dsilva msn: alastair@d-silva.org blog: http://alastair.d-silva.org Twitter: @EvilDeece
next prev parent reply other threads:[~2020-04-03 3:50 UTC|newest] Thread overview: 179+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-03-27 7:11 [PATCH v4 00/25] Add support for OpenCAPI Persistent Memory devices Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` [PATCH v4 01/25] powerpc/powernv: Add OPAL calls for LPC memory alloc/release Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-01 8:48 ` Dan Williams 2020-04-01 8:48 ` Dan Williams 2020-04-01 8:48 ` Dan Williams 2020-04-01 22:51 ` Alastair D'Silva 2020-04-01 22:51 ` Alastair D'Silva 2020-04-01 22:51 ` Alastair D'Silva 2020-03-27 7:11 ` [PATCH v4 02/25] mm/memory_hotplug: Allow check_hotplug_memory_addressable to be called from drivers Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-01 8:48 ` Dan Williams 2020-04-01 8:48 ` Dan Williams 2020-04-01 8:48 ` Dan Williams 2020-04-02 4:33 ` Alastair D'Silva 2020-04-02 4:33 ` Alastair D'Silva 2020-04-02 4:33 ` Alastair D'Silva 2020-03-27 7:11 ` [PATCH v4 03/25] powerpc/powernv: Map & release OpenCAPI LPC memory Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-01 8:48 ` Dan Williams 2020-04-01 8:48 ` Dan Williams 2020-04-01 8:48 ` Dan Williams 2020-04-02 4:36 ` Alastair D'Silva 2020-04-02 4:36 ` Alastair D'Silva 2020-04-02 4:36 ` Alastair D'Silva 2020-04-02 10:41 ` Benjamin Herrenschmidt 2020-04-02 10:41 ` Benjamin Herrenschmidt 2020-04-03 4:27 ` Michael Ellerman 2020-04-03 4:27 ` Michael Ellerman 2020-04-03 4:27 ` Michael Ellerman 2020-03-27 7:11 ` [PATCH v4 04/25] ocxl: Remove unnecessary externs Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-01 8:48 ` Dan Williams 2020-04-01 8:48 ` Dan Williams 2020-04-01 8:48 ` Dan Williams 2020-03-27 7:11 ` [PATCH v4 05/25] ocxl: Address kernel doc errors & warnings Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-01 8:49 ` Dan Williams 2020-04-01 8:49 ` Dan Williams 2020-04-01 8:49 ` Dan Williams 2020-03-27 7:11 ` [PATCH v4 06/25] ocxl: Tally up the LPC memory on a link & allow it to be mapped Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-01 8:48 ` Dan Williams 2020-04-01 8:48 ` Dan Williams 2020-04-01 8:48 ` Dan Williams 2020-04-02 6:21 ` Andrew Donnellan 2020-04-02 6:21 ` Andrew Donnellan 2020-04-02 6:21 ` Andrew Donnellan 2020-03-27 7:11 ` [PATCH v4 07/25] ocxl: Add functions to map/unmap LPC memory Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-01 8:49 ` Dan Williams 2020-04-01 8:49 ` Dan Williams 2020-04-01 8:49 ` Dan Williams 2020-04-03 3:50 ` Alastair D'Silva [this message] 2020-04-03 3:50 ` Alastair D'Silva 2020-04-03 3:50 ` Alastair D'Silva 2020-03-27 7:11 ` [PATCH v4 08/25] ocxl: Emit a log message showing how much LPC memory was detected Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-01 8:49 ` Dan Williams 2020-04-01 8:49 ` Dan Williams 2020-04-01 8:49 ` Dan Williams 2020-04-02 1:29 ` Joe Perches 2020-04-02 1:29 ` Joe Perches 2020-04-02 1:29 ` Joe Perches 2020-04-03 3:52 ` Alastair D'Silva 2020-04-03 3:52 ` Alastair D'Silva 2020-04-03 3:52 ` Alastair D'Silva 2020-03-27 7:11 ` [PATCH v4 09/25] ocxl: Save the device serial number in ocxl_fn Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` [PATCH v4 10/25] nvdimm: Add driver for OpenCAPI Persistent Memory Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-29 2:56 ` Matthew Wilcox 2020-03-29 2:56 ` Matthew Wilcox 2020-03-29 2:56 ` Matthew Wilcox 2020-03-29 2:59 ` Matthew Wilcox 2020-03-29 2:59 ` Matthew Wilcox 2020-03-29 2:59 ` Matthew Wilcox 2020-04-01 8:49 ` Dan Williams 2020-04-01 8:49 ` Dan Williams 2020-04-01 8:49 ` Dan Williams 2020-04-01 19:35 ` Dan Williams 2020-04-01 19:35 ` Dan Williams 2020-04-01 19:35 ` Dan Williams 2020-03-27 7:11 ` [PATCH v4 11/25] powerpc: Enable the OpenCAPI Persistent Memory driver for powernv_defconfig Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-01 20:26 ` Dan Williams 2020-04-01 20:26 ` Dan Williams 2020-04-01 20:26 ` Dan Williams 2020-03-27 7:11 ` [PATCH v4 12/25] nvdimm/ocxl: Add register addresses & status values to the header Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-01 20:27 ` Dan Williams 2020-04-01 20:27 ` Dan Williams 2020-04-01 20:27 ` Dan Williams 2020-03-27 7:11 ` [PATCH v4 13/25] nvdimm/ocxl: Read the capability registers & wait for device ready Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-02 0:20 ` Dan Williams 2020-04-02 0:20 ` Dan Williams 2020-04-02 0:20 ` Dan Williams 2020-03-27 7:11 ` [PATCH v4 14/25] nvdimm/ocxl: Add support for Admin commands Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-02 6:41 ` Dan Williams 2020-04-02 6:41 ` Dan Williams 2020-04-02 6:41 ` Dan Williams 2020-03-27 7:11 ` [PATCH v4 15/25] nvdimm/ocxl: Register a character device for userspace to interact with Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-02 0:27 ` Dan Williams 2020-04-02 0:27 ` Dan Williams 2020-04-02 0:27 ` Dan Williams 2020-03-27 7:11 ` [PATCH v4 16/25] nvdimm/ocxl: Implement the Read Error Log command Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-03 0:54 ` Dan Williams 2020-04-03 0:54 ` Dan Williams 2020-04-03 0:54 ` Dan Williams 2020-03-27 7:11 ` [PATCH v4 17/25] nvdimm/ocxl: Add controller dump IOCTLs Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` [PATCH v4 18/25] nvdimm/ocxl: Add an IOCTL to report controller statistics Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` [PATCH v4 19/25] nvdimm/ocxl: Forward events to userspace Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-04-02 2:08 ` Dan Williams 2020-04-02 2:08 ` Dan Williams 2020-04-02 2:08 ` Dan Williams 2020-03-27 7:11 ` [PATCH v4 20/25] nvdimm/ocxl: Add an IOCTL to request controller health & perf data Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` [PATCH v4 21/25] nvdimm/ocxl: Implement the heartbeat command Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` [PATCH v4 22/25] nvdimm/ocxl: Add debug IOCTLs Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:11 ` Alastair D'Silva 2020-03-27 7:12 ` [PATCH v4 23/25] nvdimm/ocxl: Expose SMART data via ndctl Alastair D'Silva 2020-03-27 7:12 ` Alastair D'Silva 2020-03-27 7:12 ` Alastair D'Silva 2020-03-27 7:12 ` [PATCH v4 24/25] nvdimm/ocxl: Expose the serial number & firmware version in sysfs Alastair D'Silva 2020-03-27 7:12 ` Alastair D'Silva 2020-03-27 7:12 ` Alastair D'Silva 2020-03-27 7:12 ` [PATCH v4 25/25] MAINTAINERS: Add myself & nvdimm/ocxl to ocxl Alastair D'Silva 2020-03-27 7:12 ` Alastair D'Silva 2020-03-27 7:12 ` Alastair D'Silva 2020-04-01 8:47 ` [PATCH v4 00/25] Add support for OpenCAPI Persistent Memory devices Dan Williams 2020-04-01 8:47 ` Dan Williams 2020-04-01 8:47 ` Dan Williams 2020-04-01 22:44 ` Alastair D'Silva 2020-04-01 22:44 ` Alastair D'Silva 2020-04-01 22:44 ` Alastair D'Silva 2020-04-02 3:42 ` Michael Ellerman 2020-04-02 3:42 ` Michael Ellerman 2020-04-02 3:42 ` Michael Ellerman 2020-04-02 3:50 ` Oliver O'Halloran 2020-04-02 3:50 ` Oliver O'Halloran 2020-04-02 3:50 ` Oliver O'Halloran 2020-04-02 10:06 ` Michael Ellerman 2020-04-02 10:06 ` Michael Ellerman 2020-04-02 10:06 ` Michael Ellerman 2020-04-02 11:10 ` Greg Kurz 2020-04-02 11:10 ` Greg Kurz 2020-04-02 11:10 ` Greg Kurz
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='303a01d6096b$0ea3e120$2beba360$@d-silva.org' \ --to=alastair@d-silva.org \ --cc=ajd@linux.ibm.com \ --cc=akpm@linux-foundation.org \ --cc=aneesh.kumar@linux.ibm.com \ --cc=anju@linux.vnet.ibm.com \ --cc=anton@ozlabs.org \ --cc=arnd@arndb.de \ --cc=benh@kernel.crashing.org \ --cc=clg@kaod.org \ --cc=dan.j.williams@intel.com \ --cc=davem@davemloft.net \ --cc=fbarrat@linux.ibm.com \ --cc=gregkh@linuxfoundation.org \ --cc=groug@kaod.org \ --cc=hbathini@linux.ibm.com \ --cc=krzk@kernel.org \ --cc=maddy@linux.vnet.ibm.com \ --cc=mahesh@linux.vnet.ibm.com \ --cc=mchehab+samsung@kernel.org \ --cc=mpe@ellerman.id.au \ --cc=npiggin@gmail.com \ --cc=paulus@samba.org \ --cc=robh@kernel.org \ --cc=tglx@linutronix.de \ --cc=yamada.masahiro@socionex \ --subject='RE: [PATCH v4 07/25] ocxl: Add functions to map/unmap LPC memory' \ /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
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.