From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755836AbbIBRul (ORCPT ); Wed, 2 Sep 2015 13:50:41 -0400 Received: from mga01.intel.com ([192.55.52.88]:16623 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755265AbbIBRuj (ORCPT ); Wed, 2 Sep 2015 13:50:39 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,455,1437462000"; d="scan'208";a="796859714" Date: Wed, 2 Sep 2015 10:46:12 -0700 From: "Sean O. Stalley" To: Yinghai Lu Cc: Bjorn Helgaas , Rajat Jain , "Michael S. Tsirkin" , =?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= , "gong.chen@linux.intel.com" , "linux-pci@vger.kernel.org" , Linux Kernel Mailing List , linux-api@vger.kernel.org Subject: Re: [PATCH 2/2] PCI: Add support for Enhanced Allocation devices Message-ID: <20150902174612.GA2700@sean.stalley.intel.com> References: <1440089947-2839-1-git-send-email-sean.stalley@intel.com> <1440089947-2839-3-git-send-email-sean.stalley@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Thanks for taking a look Yinghai. On Tue, Sep 01, 2015 at 04:14:08PM -0700, Yinghai Lu wrote: > On Thu, Aug 20, 2015 at 9:59 AM, Sean O. Stalley wrote: > > Add support for devices using Enhanced Allocation entries instead of BARs. > > This patch allows the kernel to parse the EA Extended Capability structure > > in PCI configspace and claim the BAR-equivalent resources. > > > > Signed-off-by: Sean O. Stalley > > --- > > drivers/pci/pci.c | 219 ++++++++++++++++++++++++++++++++++++++++++++++++++++ > > drivers/pci/pci.h | 1 + > > drivers/pci/probe.c | 3 + > > 3 files changed, 223 insertions(+) > > > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > > index 0008c95..c8217a8 100644 > > --- a/drivers/pci/pci.c > > +++ b/drivers/pci/pci.c > ... > > + > > +/* Read an Enhanced Allocation (EA) entry */ > > +static int pci_ea_read(struct pci_dev *dev, int offset) > > +{ > ... > > + res->name = pci_name(dev); > > + res->start = start; > > + res->end = end; > > + res->flags = flags; > > + > > + pci_ea_claim_resource(dev, res); > > + > > +out: > > + return offset + ent_size; > > +} > > + > > +/* Enhanced Allocation Initalization */ > > +void pci_ea_init(struct pci_dev *dev) > > +{ > ... > > + > > + for (i = 0; i < num_ent; ++i) { > > + /* parse each EA entry */ > > + dev_dbg(&dev->dev, "%s: parsing entry %i...\n", __func__, i); > > + offset = pci_ea_read(dev, offset); > > + } > > +} > > + > > static void pci_add_saved_cap(struct pci_dev *pci_dev, > > struct pci_cap_saved_state *new_cap) > > { > > > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c > > index cefd636..4cadf35 100644 > > --- a/drivers/pci/probe.c > > +++ b/drivers/pci/probe.c > > @@ -1522,6 +1522,9 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn) > > > > static void pci_init_capabilities(struct pci_dev *dev) > > { > > + /* Enhanced Allocation */ > > + pci_ea_init(dev); > > + > > /* MSI/MSI-X list */ > > pci_msi_init_pci_dev(dev); > > > > Should not call pci_ea_claim_resource() that early. Out of curiosity, why shouldn't resources be claimed that early? EA resources are fixed by hardware. They are always there & will never move. > > For x86 and other arches, we call > pcibios_resource_survey/pcibios_allocate_bus_resouce/pcibios_allocate_resources > quite late. Would it be better to modify pci_claim_resource() to support EA instead of adding pci_ea_claim_resource()? That way, EA entries would be claimed at the same time as traditional BARs. -Sean From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Sean O. Stalley" Subject: Re: [PATCH 2/2] PCI: Add support for Enhanced Allocation devices Date: Wed, 2 Sep 2015 10:46:12 -0700 Message-ID: <20150902174612.GA2700@sean.stalley.intel.com> References: <1440089947-2839-1-git-send-email-sean.stalley@intel.com> <1440089947-2839-3-git-send-email-sean.stalley@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: Sender: linux-api-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Yinghai Lu Cc: Bjorn Helgaas , Rajat Jain , "Michael S. Tsirkin" , =?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= , "gong.chen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org" , "linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Linux Kernel Mailing List , linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: linux-api@vger.kernel.org Thanks for taking a look Yinghai. On Tue, Sep 01, 2015 at 04:14:08PM -0700, Yinghai Lu wrote: > On Thu, Aug 20, 2015 at 9:59 AM, Sean O. Stalley wrote: > > Add support for devices using Enhanced Allocation entries instead of BARs. > > This patch allows the kernel to parse the EA Extended Capability structure > > in PCI configspace and claim the BAR-equivalent resources. > > > > Signed-off-by: Sean O. Stalley > > --- > > drivers/pci/pci.c | 219 ++++++++++++++++++++++++++++++++++++++++++++++++++++ > > drivers/pci/pci.h | 1 + > > drivers/pci/probe.c | 3 + > > 3 files changed, 223 insertions(+) > > > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > > index 0008c95..c8217a8 100644 > > --- a/drivers/pci/pci.c > > +++ b/drivers/pci/pci.c > ... > > + > > +/* Read an Enhanced Allocation (EA) entry */ > > +static int pci_ea_read(struct pci_dev *dev, int offset) > > +{ > ... > > + res->name = pci_name(dev); > > + res->start = start; > > + res->end = end; > > + res->flags = flags; > > + > > + pci_ea_claim_resource(dev, res); > > + > > +out: > > + return offset + ent_size; > > +} > > + > > +/* Enhanced Allocation Initalization */ > > +void pci_ea_init(struct pci_dev *dev) > > +{ > ... > > + > > + for (i = 0; i < num_ent; ++i) { > > + /* parse each EA entry */ > > + dev_dbg(&dev->dev, "%s: parsing entry %i...\n", __func__, i); > > + offset = pci_ea_read(dev, offset); > > + } > > +} > > + > > static void pci_add_saved_cap(struct pci_dev *pci_dev, > > struct pci_cap_saved_state *new_cap) > > { > > > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c > > index cefd636..4cadf35 100644 > > --- a/drivers/pci/probe.c > > +++ b/drivers/pci/probe.c > > @@ -1522,6 +1522,9 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn) > > > > static void pci_init_capabilities(struct pci_dev *dev) > > { > > + /* Enhanced Allocation */ > > + pci_ea_init(dev); > > + > > /* MSI/MSI-X list */ > > pci_msi_init_pci_dev(dev); > > > > Should not call pci_ea_claim_resource() that early. Out of curiosity, why shouldn't resources be claimed that early? EA resources are fixed by hardware. They are always there & will never move. > > For x86 and other arches, we call > pcibios_resource_survey/pcibios_allocate_bus_resouce/pcibios_allocate_resources > quite late. Would it be better to modify pci_claim_resource() to support EA instead of adding pci_ea_claim_resource()? That way, EA entries would be claimed at the same time as traditional BARs. -Sean