Hi Tomasz
-----Original Message-----
From: linux-kernel-owner@xxxxxxxxxxxxxxx [mailto:linux-kernel-
owner@xxxxxxxxxxxxxxx] On Behalf Of Tomasz Nowicki
Sent: 22 December 2015 10:20
To: Gabriele Paoloni; bhelgaas@xxxxxxxxxx; arnd@xxxxxxxx;
will.deacon@xxxxxxx; catalin.marinas@xxxxxxx; rjw@xxxxxxxxxxxxx;
hanjun.guo@xxxxxxxxxx; Lorenzo.Pieralisi@xxxxxxx; okaya@xxxxxxxxxxxxxx;
jiang.liu@xxxxxxxxxxxxxxx; Stefano.Stabellini@xxxxxxxxxxxxx
Cc: robert.richter@xxxxxxxxxxxxxxxxxx; mw@xxxxxxxxxxxx;
Liviu.Dudau@xxxxxxx; ddaney@xxxxxxxxxxxxxxxxxx; tglx@xxxxxxxxxxxxx;
Wangyijing; Suravee.Suthikulpanit@xxxxxxx; msalter@xxxxxxxxxx; linux-
pci@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; linux-
acpi@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; linaro-
acpi@xxxxxxxxxxxxxxxx; jchandra@xxxxxxxxxxxx; jcm@xxxxxxxxxx
Subject: Re: [PATCH V2 22/23] pci, acpi: Match PCI config space
accessors against platfrom specific quirks.
On 21.12.2015 12:47, Gabriele Paoloni wrote:
2) In the quirk mechanism you proposed, I see that the callbackfunction
allows to do some preparation work for the host bridge. Forexample in
Hisilicon hip05 case we would need to read some values from theACPI
table (see acpi_pci_root_hisi_add() function in"Packages"
https://lkml.org/lkml/2015/12/3/426).
I am quite new to ACPI and I wonder if it is OK to add such
to the PCI host bridge ACPI device...or maybe we need to declarea new
one...?
I may miss sth so please correct me in that case.
https://lkml.org/lkml/2015/12/3/426 shows that you need special
handling for root->secondary.start bus number only, right? So how about
creating special MCFG region <rc-base:rc-base+rc-size> only for
<segment,bus>.
Like that:
[0008] Base Address : <rc-base>
[0002] Segment Group Number : <segment>
[0001] Start Bus Number : <root->secondary.start>
[0001] End Bus Number : <root->secondary.start>
[0004] Reserved : 00000000
static const struct dmi_system_id hisi_quirk[] = {
{
.ident = "HiSi...",
.matches = {
DMI_MATCH(<whatever you need to match your platform>),
},
},
{ }
};
static struct pci_ops hisi_ecam_pci_ops = {
.map_bus = pci_mcfg_dev_base,
.read = hisi_pcie_cfg_read,
.write = hisi_pcie_cfg_write,
};
DECLARE_ACPI_MCFG_FIXUP(hisi_quirk, &hisi_ecam_pci_ops,
<segment>, <bus>);
With above code you can use your custom PCI config accessor only for
that region.
Let me know if that is not enough for you.
In principle I think it can work...
Liudongdong, Guo Hanjun what is your opinion about?