From: Tomasz Nowicki <tn@semihalf.com>
To: Mark Salter <msalter@redhat.com>,
helgaas@kernel.org, arnd@arndb.de, will.deacon@arm.com,
catalin.marinas@arm.com, rafael@kernel.org,
hanjun.guo@linaro.org, Lorenzo.Pieralisi@arm.com,
okaya@codeaurora.org, jiang.liu@linux.intel.com,
jchandra@broadcom.com, Stefano.Stabellini@eu.citrix.com
Cc: robert.richter@caviumnetworks.com, mw@semihalf.com,
Liviu.Dudau@arm.com, ddaney@caviumnetworks.com,
wangyijing@huawei.com, Suravee.Suthikulpanit@amd.com,
linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org,
linaro-acpi@lists.linaro.org, jcm@redhat.com
Subject: Re: [PATCH V5 13/15] pci, acpi: Match PCI config space accessors against platfrom specific quirks.
Date: Tue, 22 Mar 2016 11:26:49 +0100 [thread overview]
Message-ID: <56F11DE9.2030302@semihalf.com> (raw)
In-Reply-To: <1458316194.23434.104.camel@redhat.com>
On 18.03.2016 16:49, Mark Salter wrote:
> On Tue, 2016-02-16 at 14:53 +0100, Tomasz Nowicki wrote:
>> Some platforms may not be fully compliant with generic set of PCI config
>> accessors. For these cases we implement the way to overwrite accessors
>> set prior to PCI buses enumeration. Algorithm traverses available quirk
>> list, matches against <platform ID (DMI), domain, bus number> tuple and
>> returns corresponding accessors. All quirks can be defined using:
>> DECLARE_ACPI_MCFG_FIXUP() and kept self contained. Example,
>>
>> static const struct dmi_system_id foo_dmi[] = {
>> {
>> .ident = "<Platform ident string>",
>> .callback = <handler>,
>> .matches = {
>> DMI_MATCH(DMI_SYS_VENDOR, "<system vendor>"),
>> DMI_MATCH(DMI_PRODUCT_NAME, "<product name>"),
>> DMI_MATCH(DMI_PRODUCT_VERSION, "product version"),
>> },
>> },
>> { }
>> };
>>
>> static struct pci_ops foo_ecam_pci_ops = {
>> .map_bus = pci_mcfg_dev_base,
>> .read = foo_ecam_config_read,
>> .write = foo_ecam_config_write,
>> };
>> DECLARE_ACPI_MCFG_FIXUP(foo_dmi, NULL, &foo_ecam_pci_ops, <domain_nr>, <bus_nr>);
>>
>> More custom (non-DMI) matching can be done via an extra call.
>> Note that there is possibility to assign quirk related private data to
>> root->sysdata which will be available along read/wriate accessor, example:
>>
>> static int boo_match(struct pci_mcfg_fixup *fixup, struct acpi_pci_root *root)
>> {
>> return [condition] ? 1 : 0;
>> }
>>
>> int boo_ecam_config_read(struct pci_bus *bus, unsigned int devfn,
>> int where, int size, u32 *val)
>> {
>> struct acpi_pci_root *root = bus->sysdata;
>> struct boo_priv_data *boo_data = root->sysdata;
>>
>> [..]
>> }
>>
>> static struct pci_ops boo_ecam_pci_ops = {
>> .map_bus = pci_mcfg_dev_base,
>> .read = boo_ecam_config_read,
>> .write = boo_ecam_config_write,
>> };
>> DECLARE_ACPI_MCFG_FIXUP(NULL, boo_match, &boo_ecam_pci_ops, <domain_nr>, <bus_nr>);
>>
>> Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
>> Tested-by: Duc Dang <dhdang@apm.com>
>> Tested-by: Dongdong Liu <liudongdong3@huawei.com>
>> Tested-by: Hanjun Guo <hanjun.guo@linaro.org>
>> Tested-by: Graeme Gregory <graeme.gregory@linaro.org>
>> Tested-by: Sinan Kaya <okaya@codeaurora.org>
>> ---
>> drivers/acpi/pci_mcfg.c | 32 ++++++++++++++++++++++++++++++--
>> include/acpi/acpi_bus.h | 1 +
>> include/asm-generic/vmlinux.lds.h | 7 +++++++
>> include/linux/pci-acpi.h | 18 ++++++++++++++++++
>> 4 files changed, 56 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c
>> index 0062257..b343547 100644
>> --- a/drivers/acpi/pci_mcfg.c
>> +++ b/drivers/acpi/pci_mcfg.c
>> @@ -41,6 +41,29 @@ int __weak raw_pci_write(unsigned int domain, unsigned int bus,
>> return PCIBIOS_DEVICE_NOT_FOUND;
>> }
>>
>> +extern struct pci_mcfg_fixup __start_acpi_mcfg_fixups[];
>> +extern struct pci_mcfg_fixup __end_acpi_mcfg_fixups[];
>> +
>> +static struct pci_ops *pci_mcfg_check_quirks(struct acpi_pci_root *root)
>> +{
>> + struct pci_mcfg_fixup *f;
>> + int bus_num = root->secondary.start;
>> + int domain = root->segment;
>> +
>> + /*
>> + * First match against PCI topology <domain:bus> then use DMI or
>> + * custom match handler.
>> + */
>> + for (f = __start_acpi_mcfg_fixups; f < __end_acpi_mcfg_fixups; f++) {
>> + if ((f->domain == domain || f->domain == PCI_MCFG_DOMAIN_ANY) &&
>> + (f->bus_num == bus_num || f->bus_num == PCI_MCFG_BUS_ANY) &&
>> + (f->system ? dmi_check_system(f->system) : 1 &&
>> + f->match ? f->match(f, root) : 1))
>
> The parens are not quite right here ^^^^
> If dmi_check_system() returns true, f->match won't get called.
>
> This should be:
> (f->system ? dmi_check_system(f->system) : 1) &&
> f->match ? f->match(f, root) : 1)
Well spotted. Thanks!
Tomasz
WARNING: multiple messages have this Message-ID (diff)
From: tn@semihalf.com (Tomasz Nowicki)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V5 13/15] pci, acpi: Match PCI config space accessors against platfrom specific quirks.
Date: Tue, 22 Mar 2016 11:26:49 +0100 [thread overview]
Message-ID: <56F11DE9.2030302@semihalf.com> (raw)
In-Reply-To: <1458316194.23434.104.camel@redhat.com>
On 18.03.2016 16:49, Mark Salter wrote:
> On Tue, 2016-02-16 at 14:53 +0100, Tomasz Nowicki wrote:
>> Some platforms may not be fully compliant with generic set of PCI config
>> accessors. For these cases we implement the way to overwrite accessors
>> set prior to PCI buses enumeration. Algorithm traverses available quirk
>> list, matches against <platform ID (DMI), domain, bus number> tuple and
>> returns corresponding accessors. All quirks can be defined using:
>> DECLARE_ACPI_MCFG_FIXUP() and kept self contained. Example,
>>
>> static const struct dmi_system_id foo_dmi[] = {
>> {
>> .ident = "<Platform ident string>",
>> .callback = <handler>,
>> .matches = {
>> DMI_MATCH(DMI_SYS_VENDOR, "<system vendor>"),
>> DMI_MATCH(DMI_PRODUCT_NAME, "<product name>"),
>> DMI_MATCH(DMI_PRODUCT_VERSION, "product version"),
>> },
>> },
>> { }
>> };
>>
>> static struct pci_ops foo_ecam_pci_ops = {
>> .map_bus = pci_mcfg_dev_base,
>> .read = foo_ecam_config_read,
>> .write = foo_ecam_config_write,
>> };
>> DECLARE_ACPI_MCFG_FIXUP(foo_dmi, NULL, &foo_ecam_pci_ops, <domain_nr>, <bus_nr>);
>>
>> More custom (non-DMI) matching can be done via an extra call.
>> Note that there is possibility to assign quirk related private data to
>> root->sysdata which will be available along read/wriate accessor, example:
>>
>> static int boo_match(struct pci_mcfg_fixup *fixup, struct acpi_pci_root *root)
>> {
>> return [condition] ? 1 : 0;
>> }
>>
>> int boo_ecam_config_read(struct pci_bus *bus, unsigned int devfn,
>> int where, int size, u32 *val)
>> {
>> struct acpi_pci_root *root = bus->sysdata;
>> struct boo_priv_data *boo_data = root->sysdata;
>>
>> [..]
>> }
>>
>> static struct pci_ops boo_ecam_pci_ops = {
>> .map_bus = pci_mcfg_dev_base,
>> .read = boo_ecam_config_read,
>> .write = boo_ecam_config_write,
>> };
>> DECLARE_ACPI_MCFG_FIXUP(NULL, boo_match, &boo_ecam_pci_ops, <domain_nr>, <bus_nr>);
>>
>> Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
>> Tested-by: Duc Dang <dhdang@apm.com>
>> Tested-by: Dongdong Liu <liudongdong3@huawei.com>
>> Tested-by: Hanjun Guo <hanjun.guo@linaro.org>
>> Tested-by: Graeme Gregory <graeme.gregory@linaro.org>
>> Tested-by: Sinan Kaya <okaya@codeaurora.org>
>> ---
>> drivers/acpi/pci_mcfg.c | 32 ++++++++++++++++++++++++++++++--
>> include/acpi/acpi_bus.h | 1 +
>> include/asm-generic/vmlinux.lds.h | 7 +++++++
>> include/linux/pci-acpi.h | 18 ++++++++++++++++++
>> 4 files changed, 56 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c
>> index 0062257..b343547 100644
>> --- a/drivers/acpi/pci_mcfg.c
>> +++ b/drivers/acpi/pci_mcfg.c
>> @@ -41,6 +41,29 @@ int __weak raw_pci_write(unsigned int domain, unsigned int bus,
>> return PCIBIOS_DEVICE_NOT_FOUND;
>> }
>>
>> +extern struct pci_mcfg_fixup __start_acpi_mcfg_fixups[];
>> +extern struct pci_mcfg_fixup __end_acpi_mcfg_fixups[];
>> +
>> +static struct pci_ops *pci_mcfg_check_quirks(struct acpi_pci_root *root)
>> +{
>> + struct pci_mcfg_fixup *f;
>> + int bus_num = root->secondary.start;
>> + int domain = root->segment;
>> +
>> + /*
>> + * First match against PCI topology <domain:bus> then use DMI or
>> + * custom match handler.
>> + */
>> + for (f = __start_acpi_mcfg_fixups; f < __end_acpi_mcfg_fixups; f++) {
>> + if ((f->domain == domain || f->domain == PCI_MCFG_DOMAIN_ANY) &&
>> + (f->bus_num == bus_num || f->bus_num == PCI_MCFG_BUS_ANY) &&
>> + (f->system ? dmi_check_system(f->system) : 1 &&
>> + f->match ? f->match(f, root) : 1))
>
> The parens are not quite right here ^^^^
> If dmi_check_system() returns true, f->match won't get called.
>
> This should be:
> (f->system ? dmi_check_system(f->system) : 1) &&
> f->match ? f->match(f, root) : 1)
Well spotted. Thanks!
Tomasz
next prev parent reply other threads:[~2016-03-22 10:26 UTC|newest]
Thread overview: 140+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-16 13:53 [PATCH V5 00/15] MMCONFIG refactoring and support for ARM64 PCI hostbridge init based on ACPI Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` [PATCH V5 01/15] ACPI: MCFG: Move mmcfg_list management to drivers/acpi Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-17 11:00 ` Lorenzo Pieralisi
2016-02-17 11:00 ` Lorenzo Pieralisi
2016-02-18 12:25 ` [Linaro-acpi] " liudongdong (C)
2016-02-18 12:25 ` liudongdong (C)
2016-02-18 12:25 ` liudongdong (C)
2016-02-18 13:20 ` Lorenzo Pieralisi
2016-02-18 13:20 ` Lorenzo Pieralisi
2016-03-03 22:51 ` Bjorn Helgaas
2016-03-03 22:51 ` Bjorn Helgaas
2016-03-04 8:35 ` Jayachandran Chandrashekaran Nair
2016-03-04 8:35 ` Jayachandran Chandrashekaran Nair
2016-03-05 4:14 ` Bjorn Helgaas
2016-03-05 4:14 ` Bjorn Helgaas
2016-03-09 9:13 ` Tomasz Nowicki
2016-03-09 9:13 ` Tomasz Nowicki
2016-03-09 9:14 ` Tomasz Nowicki
2016-03-09 9:14 ` Tomasz Nowicki
2016-03-09 10:10 ` Jayachandran Chandrashekaran Nair
2016-03-09 10:10 ` Jayachandran Chandrashekaran Nair
2016-03-09 10:50 ` Tomasz Nowicki
2016-03-09 10:50 ` Tomasz Nowicki
2016-03-10 13:08 ` Jayachandran Chandrashekaran Nair
2016-03-10 13:08 ` Jayachandran Chandrashekaran Nair
2016-03-17 20:18 ` [RFC PATCH 0/4] ACPI based PCI host driver with generic ECAM Jayachandran C
2016-03-17 20:18 ` Jayachandran C
2016-03-17 20:18 ` Jayachandran C
2016-03-18 17:47 ` Jayachandran C
2016-03-18 17:47 ` Jayachandran C
2016-03-23 10:22 ` Gabriele Paoloni
2016-03-23 10:22 ` Gabriele Paoloni
2016-03-23 10:22 ` Gabriele Paoloni
2016-03-23 10:22 ` Gabriele Paoloni
2016-03-28 13:42 ` Sinan Kaya
2016-03-28 13:42 ` Sinan Kaya
2016-03-28 13:42 ` Sinan Kaya
2016-03-28 18:01 ` Jayachandran C
2016-03-28 18:01 ` Jayachandran C
2016-03-28 18:01 ` Jayachandran C
2016-03-17 20:18 ` [RFC PATCH 1/4] PCI: Provide generic ECAM mapping functions Jayachandran C
2016-03-17 20:18 ` Jayachandran C
2016-03-17 20:18 ` Jayachandran C
2016-03-17 20:18 ` [RFC PATCH 2/4] PCI: generic,thunder: Use generic config functions Jayachandran C
2016-03-17 20:18 ` Jayachandran C
2016-03-17 20:18 ` Jayachandran C
2016-03-17 20:18 ` [RFC PATCH 3/4] ACPI: PCI: Add generic PCI host controller Jayachandran C
2016-03-17 20:18 ` Jayachandran C
2016-03-17 20:18 ` Jayachandran C
2016-03-17 20:18 ` [RFC PATCH 4/4] ACPI: PCI: Add raw_pci_read/write operations Jayachandran C
2016-03-17 20:18 ` Jayachandran C
2016-03-17 20:18 ` Jayachandran C
2016-04-05 14:11 ` [PATCH V5 01/15] ACPI: MCFG: Move mmcfg_list management to drivers/acpi Tomasz Nowicki
2016-04-05 14:11 ` Tomasz Nowicki
2016-04-05 16:41 ` Bjorn Helgaas
2016-04-05 16:41 ` Bjorn Helgaas
2016-04-05 18:07 ` Tomasz Nowicki
2016-04-05 18:07 ` Tomasz Nowicki
2016-04-05 18:50 ` Jayachandran C
2016-04-05 18:50 ` Jayachandran C
2016-03-04 9:27 ` Tomasz Nowicki
2016-03-04 9:27 ` Tomasz Nowicki
2016-02-16 13:53 ` [PATCH V5 02/15] acpi, pci, mcfg: Provide default RAW ACPI PCI config space accessors Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-17 12:39 ` Lorenzo Pieralisi
2016-02-17 12:39 ` Lorenzo Pieralisi
2016-02-16 13:53 ` [PATCH V5 03/15] arm64, acpi: Use MCFG library and empty PCI config space accessors from pci_mcfg.c file Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` [PATCH V5 04/15] pci, acpi, ecam: Add flag to indicate whether ECAM region was hot added or not Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-18 12:32 ` Lorenzo Pieralisi
2016-02-18 12:32 ` Lorenzo Pieralisi
2016-02-16 13:53 ` [PATCH V5 05/15] x86, pci: Cleanup platform specific MCFG data by using ECAM hot_added flag Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` [PATCH V5 06/15] pci, acpi, x86, ia64: Move ACPI host bridge device companion assignment to core code Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` [PATCH V5 07/15] pci, acpi: Provide generic way to assign bus domain number Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-17 13:44 ` Jayachandran Chandrashekaran Nair
2016-02-17 13:44 ` Jayachandran Chandrashekaran Nair
2016-02-17 14:07 ` Tomasz Nowicki
2016-02-17 14:07 ` Tomasz Nowicki
2016-02-17 14:21 ` Jayachandran Chandrashekaran Nair
2016-02-17 14:21 ` Jayachandran Chandrashekaran Nair
2016-02-17 15:05 ` Tomasz Nowicki
2016-02-17 15:05 ` Tomasz Nowicki
2016-02-17 15:21 ` Jayachandran Chandrashekaran Nair
2016-02-17 15:21 ` Jayachandran Chandrashekaran Nair
2016-02-17 15:35 ` Tomasz Nowicki
2016-02-17 15:35 ` Tomasz Nowicki
2016-02-17 17:45 ` Lorenzo Pieralisi
2016-02-17 17:45 ` Lorenzo Pieralisi
2016-02-16 13:53 ` [PATCH V5 08/15] x86, ia64: Include acpi_pci_{add|remove}_bus to the default pcibios_{add|remove}_bus implementation Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` [PATCH V5 09/15] acpi, mcfg: Add default PCI config accessors implementation and initial support for related quirks Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-17 18:39 ` Lorenzo Pieralisi
2016-02-17 18:39 ` Lorenzo Pieralisi
2016-02-16 13:53 ` [PATCH V5 10/15] pci, of: Move the PCI I/O space management to PCI core code Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` [PATCH V5 11/15] drivers: pci: add generic code to claim bus resources Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` [PATCH V5 12/15] pci, acpi: Support for ACPI based generic PCI host controller initialization Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-16 13:53 ` [PATCH V5 13/15] pci, acpi: Match PCI config space accessors against platfrom specific quirks Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-03-18 15:49 ` Mark Salter
2016-03-18 15:49 ` Mark Salter
2016-03-18 15:49 ` Mark Salter
2016-03-22 10:26 ` Tomasz Nowicki [this message]
2016-03-22 10:26 ` Tomasz Nowicki
2016-02-16 13:53 ` [PATCH V5 14/15] arm64, pci, acpi: Assign legacy IRQs once device is enable Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-17 18:18 ` Lorenzo Pieralisi
2016-02-17 18:18 ` Lorenzo Pieralisi
2016-02-16 13:53 ` [PATCH V5 15/15] arm64, pci, acpi: Start using ACPI based PCI host bridge driver for ARM64 Tomasz Nowicki
2016-02-16 13:53 ` Tomasz Nowicki
2016-02-18 12:59 ` [PATCH V5 00/15] MMCONFIG refactoring and support for ARM64 PCI hostbridge init based on ACPI Lorenzo Pieralisi
2016-02-18 12:59 ` Lorenzo Pieralisi
2016-02-29 19:03 ` Sinan Kaya
2016-02-29 19:03 ` Sinan Kaya
2016-03-03 11:23 ` Lorenzo Pieralisi
2016-03-03 11:23 ` Lorenzo Pieralisi
2016-03-03 14:24 ` Sinan Kaya
2016-03-03 14:24 ` Sinan Kaya
2016-03-04 10:55 ` Lorenzo Pieralisi
2016-03-04 10:55 ` Lorenzo Pieralisi
2016-03-04 12:01 ` Tomasz Nowicki
2016-03-04 12:01 ` Tomasz Nowicki
2016-03-04 14:52 ` Sinan Kaya
2016-03-04 14:52 ` Sinan Kaya
2016-03-04 17:37 ` Lorenzo Pieralisi
2016-03-04 17:37 ` Lorenzo Pieralisi
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=56F11DE9.2030302@semihalf.com \
--to=tn@semihalf.com \
--cc=Liviu.Dudau@arm.com \
--cc=Lorenzo.Pieralisi@arm.com \
--cc=Stefano.Stabellini@eu.citrix.com \
--cc=Suravee.Suthikulpanit@amd.com \
--cc=arnd@arndb.de \
--cc=catalin.marinas@arm.com \
--cc=ddaney@caviumnetworks.com \
--cc=hanjun.guo@linaro.org \
--cc=helgaas@kernel.org \
--cc=jchandra@broadcom.com \
--cc=jcm@redhat.com \
--cc=jiang.liu@linux.intel.com \
--cc=linaro-acpi@lists.linaro.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=msalter@redhat.com \
--cc=mw@semihalf.com \
--cc=okaya@codeaurora.org \
--cc=rafael@kernel.org \
--cc=robert.richter@caviumnetworks.com \
--cc=wangyijing@huawei.com \
--cc=will.deacon@arm.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.