linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: hanjun.guo@linaro.org (Hanjun Guo)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 05/11] x86, pci, acpi: Move arch-agnostic MMCONFIG (aka ECAM) and ACPI code out of arch/x86/ directory
Date: Mon, 08 Jun 2015 10:57:38 +0800	[thread overview]
Message-ID: <557504A2.3060203@linaro.org> (raw)
In-Reply-To: <5570447D.3020705@linaro.org>

On 2015?06?04? 20:28, Hanjun Guo wrote:
> On 2015?06?04? 18:22, Lorenzo Pieralisi wrote:
>> Hi Hanjun,
>>
>> On Thu, Jun 04, 2015 at 10:28:17AM +0100, Hanjun Guo wrote:
>>> Hi Lorenzo,
>>>
>>> On 2015???06???02??? 21:32, Lorenzo Pieralisi wrote:
>>>> On Wed, May 27, 2015 at 09:06:26AM +0100, Tomasz Nowicki wrote:
>>>>> On 26.05.2015 19:08, Will Deacon wrote:
>>>>>> On Tue, May 26, 2015 at 01:49:18PM +0100, Hanjun Guo wrote:
>>>>>>> From: Tomasz Nowicki <tomasz.nowicki@linaro.org>
>>>>>>>
>>>>>>> ECAM standard and MCFG table are architecture independent and it
>>>>>>> makes
>>>>>>> sense to share common code across all architectures. Both are
>>>>>>> going to
>>>>>>> corresponding files - ecam.c and mcfg.c
>>>>>>>
>>>>>>> While we are here, rename pci_parse_mcfg to acpi_parse_mcfg.
>>>>>>> We already have acpi_parse_mcfg prototype which is used nowhere.
>>>>>>> At the same time, we need pci_parse_mcfg been global so
>>>>>>> acpi_parse_mcfg
>>>>>>> can be used perfectly here.
>>>>>>>
>>>>>>> Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
>>>>>>> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
>>>>>>> Tested-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
>>>>>>> ---
>>>>>>>     arch/x86/Kconfig               |   3 +
>>>>>>>     arch/x86/include/asm/pci_x86.h |  33 ------
>>>>>>>     arch/x86/pci/acpi.c            |   1 +
>>>>>>>     arch/x86/pci/mmconfig-shared.c | 244
>>>>>>> +---------------------------------------
>>>>>>>     arch/x86/pci/mmconfig_32.c     |   1 +
>>>>>>>     arch/x86/pci/mmconfig_64.c     |   1 +
>>>>>>>     arch/x86/pci/numachip.c        |   1 +
>>>>>>>     drivers/acpi/Makefile          |   1 +
>>>>>>>     drivers/acpi/mcfg.c            |  57 ++++++++++
>>>>>>>     drivers/pci/Kconfig            |   7 ++
>>>>>>>     drivers/pci/Makefile           |   5 +
>>>>>>>     drivers/pci/ecam.c             | 245
>>>>>>> +++++++++++++++++++++++++++++++++++++++++
>>>>>>
>>>>>> Why can't we make use of the ECAM implementation used by
>>>>>> pci-host-generic
>>>>>> and drivers/pci/access.c?
>>>>>
>>>>> We had that question when I had posted MMCFG patch set separately,
>>>>> please see:
>>>>> https://lkml.org/lkml/2015/3/11/492
>>>>
>>>> Yes, but the real question is, why do we need to have PCI config space
>>>> up and running before a bus struct is even created ? I think the
>>>> reason is
>>>> the PCI configuration address space format (ACPI 6.0, Table 5-27, page
>>>> 108):
>>>>
>>>> "PCI Configuration space addresses must be confined to devices on
>>>> PCI Segment Group 0, bus 0. This restriction exists to accommodate
>>>> access to fixed hardware prior to PCI bus enumeration".
>>>>
>>>> On HW reduced platforms I do not even think this is required at all,
>>>> we have to look into this to avoid code duplication that might well
>>>> turn out useless.
>>>
>>> This is only for the fixed hardware, which will be not available for
>>> ARM64 (reduced hardware mode), but in Generic Hardware Programming
>>> Model, we using OEM-provided ACPI Machine Language (AML) code to access
>>> generic hardware registers, this will be available for reduced hardware
>>> too.
>>>
>>> So in ACPI spec, it says: (ACPI 6.0 page 66, last paragraph)
>>>
>>> ACPI defines eight address spaces that may be accessed by generic
>>> hardware implementations. These include:
>>> * System I/O space
>>> * System memory space
>>> * PCI configuration space
>>> * Embedded controller space
>>> * System Management Bus (SMBus) space
>>> * CMOS
>>> * PCI BAR Target
>>> * IPMI space
>>>
>>> So if any device using the PCI address space for control, such
>>> as a system reset control device, its address space can be reside
>>> in PCI configuration space (who can prevent a OEM do that crazy
>>> thing? :) ), and it should be accessible before the PCI bus is
>>> created.
>>
>> Us, by changing attitude and questioning features whose usefulness
>> is questionable. I will look into this and raise the point, I am not
>> thrilled by the idea of adding another set of PCI accessor functions
>> and drivers because we have to access a register through PCI before
>> enumerating the bus (and on arm64 this is totally useless since
>> we are not meant to support fixed HW anyway). Maybe we can make acpica
>> code use a "special" stub (ACPI specific, PCI configuration space address
>> space has restrictions anyway), I have to review this set in its
>> entirety to see how to do that (and I would kindly ask you to do
>> it too, before saying it is not possible to implement it).
>
> I'm willing to do that, actually, if we don't need a mechanism to
> access PCI config space before the bus is created, the code can be
> simplified a lot.

After more investigation on the spec and the ACPI core code, I'm
still not convinced that accessing to PCI config space before PCI
bus creating is impossible, also there is no enough ARM64 hardware
to prove that too. But I think we can go in this way, reuse the
ECAM implementation by pci-host-generic for now, and implement the PCI
accessor functions before enumerating PCI bus when needed in the
future, does it make sense?

Thanks
Hanjun

  reply	other threads:[~2015-06-08  2:57 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-26 12:49 [PATCH 00/11] ARM64 PCI hostbridge init based on ACPI Hanjun Guo
2015-05-26 12:49 ` [PATCH 01/11] ARM64 / PCI: introduce struct pci_controller for ACPI Hanjun Guo
2015-05-26 16:58   ` Liviu Dudau
2015-05-26 17:20     ` Jiang Liu
2015-05-27  8:21       ` Hanjun Guo
2015-09-07  4:14         ` Ganapatrao Kulkarni
2015-09-07  8:45           ` Lorenzo Pieralisi
2015-09-08 13:35             ` Hanjun Guo
2015-05-27  9:47       ` Liviu Dudau
2015-05-27 11:29         ` Jiang Liu
2015-05-26 12:49 ` [PATCH 02/11] x86, pci: Clean up comment about buggy MMIO config space access for AMD Fam10h CPUs Hanjun Guo
2015-08-31 12:04   ` Tomasz Nowicki
2015-05-26 12:49 ` [PATCH 03/11] x86, pci: Abstract PCI config accessors and use AMD Fam10h workaround exclusively Hanjun Guo
2015-05-26 12:49 ` [PATCH 04/11] x86, pci: Reorder logic of pci_mmconfig_insert() function Hanjun Guo
2015-05-26 12:49 ` [PATCH 05/11] x86, pci, acpi: Move arch-agnostic MMCONFIG (aka ECAM) and ACPI code out of arch/x86/ directory Hanjun Guo
2015-05-26 17:08   ` Will Deacon
2015-05-27  8:06     ` Tomasz Nowicki
2015-06-02 13:32       ` Lorenzo Pieralisi
2015-06-04  9:28         ` Hanjun Guo
2015-06-04 10:22           ` Lorenzo Pieralisi
2015-06-04 12:28             ` Hanjun Guo
2015-06-08  2:57               ` Hanjun Guo [this message]
2015-06-08 15:14                 ` Lorenzo Pieralisi
2015-08-31 11:01                   ` Tomasz Nowicki
2015-09-07  9:59                     ` Tomasz Nowicki
2015-09-08 15:07                       ` Lorenzo Pieralisi
2015-09-09 13:47                         ` Tomasz Nowicki
2015-09-11 11:20                           ` Lorenzo Pieralisi
2015-09-11 12:35                             ` Tomasz Nowicki
2015-09-14  9:37                               ` Lorenzo Pieralisi
2015-09-14 11:34                                 ` Tomasz Nowicki
2015-09-14 14:55                             ` Tomasz Nowicki
2015-09-25 16:02                               ` Tomasz Nowicki
2015-09-25 16:19                                 ` Lorenzo Pieralisi
2015-10-15 13:22                               ` Lorenzo Pieralisi
2015-10-15 14:34                                 ` Tomasz Nowicki
2015-10-15 16:26                                   ` Marc Zyngier
2015-10-15 18:51                                     ` Tomasz Nowicki
2015-05-26 12:49 ` [PATCH 06/11] pci, acpi, mcfg: Provide generic implementation of MCFG code initialization Hanjun Guo
2015-05-26 12:49 ` [PATCH 07/11] x86, pci: mmconfig_{32, 64}.c code refactoring - remove code duplication Hanjun Guo
2015-05-26 12:49 ` [PATCH 08/11] x86, pci, ecam: mmconfig_64.c becomes default implementation for ECAM driver Hanjun Guo
2015-05-26 12:49 ` [PATCH 09/11] pci, acpi, mcfg: Share ACPI PCI config space accessors Hanjun Guo
2015-05-26 12:49 ` [PATCH 10/11] XEN / PCI: Remove the dependence on arch x86 when PCI_MMCONFIG=y Hanjun Guo
2015-05-26 13:54   ` Boris Ostrovsky
2015-05-26 14:00     ` Boris Ostrovsky
2015-05-26 14:54       ` Tomasz Nowicki
2015-05-26 15:44         ` Boris Ostrovsky
2015-05-27  3:55           ` Hanjun Guo
2015-05-26 12:49 ` [PATCH 11/11] ARM64 / PCI / ACPI: support for ACPI based PCI hostbridge init Hanjun Guo
2015-05-26 15:12   ` Tomasz Nowicki
2015-05-27  7:31     ` Hanjun Guo
2015-05-26 17:13   ` Will Deacon
2015-05-26 17:24     ` Jiang Liu
2015-05-27  0:30 ` [PATCH 00/11] ARM64 PCI hostbridge init based on ACPI Rafael J. Wysocki
2015-05-27  3:57   ` Hanjun Guo
2015-06-08 12:05     ` Jagan Teki
2015-06-10  2:47       ` Hanjun Guo
2015-10-15 19:15 ` Jon Masters
2015-10-15 23:42   ` Hanjun Guo
2015-10-15 23:49     ` Jon Masters
2015-12-07 20:29 ` Bjorn Helgaas

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=557504A2.3060203@linaro.org \
    --to=hanjun.guo@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).