linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: tomasz.nowicki@linaro.org (Tomasz Nowicki)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 13/17] ARM64 / ACPI: Add GICv2 specific ACPI boot support
Date: Fri, 05 Sep 2014 10:52:19 +0200	[thread overview]
Message-ID: <540979C3.9020806@linaro.org> (raw)
In-Reply-To: <4895927.Zp4WL2AZAF@wuerfel>



On 03.09.2014 16:57, Arnd Bergmann wrote:
> On Wednesday 03 September 2014 11:26:14 Tomasz Nowicki wrote:
>> On 02.09.2014 15:02, Marc Zyngier wrote:
>>> On 02/09/14 12:48, Tomasz Nowicki wrote:
>>>> On 01.09.2014 19:35, Marc Zyngier wrote:
>>>>>> @@ -78,6 +79,10 @@ void __init set_handle_irq(void (*handle_irq)(struct pt_regs *))
>>>>>>     void __init init_IRQ(void)
>>>>>>     {
>>>>>>        irqchip_init();
>>>>>> +
>>>>>> +    if (!handle_arch_irq)
>>>>>> +            acpi_gic_init();
>>>>>> +
>>>>>
>>>>> Why isn't this called from irqchip_init? It would seem like the logical
>>>>> spot to probe an interrupt controller.
>>>>
>>>> irqchip.c is OF dependent, I want to decouple these from the very
>>>> beginning.
>>>
>>> No. irqchip.c is not OF dependent, it is just that DT is the only thing
>>> we support so far. I don't think duplicating the kernel infrastructure
>>> "because we're different" is the right way.
>>>
>>> There is no reason for your probing structure to be artificially
>>> different (you're parsing the same information, at the same time). Just
>>> put in place a similar probing mechanism, and this will look a lot better.
>
>
>>>> Having only GICv2, it would work. Considering we would do the same for
>>>> GICv3 (arm-gic-v3.h) there will be register name conflicts for both
>>>> headers inclusion:
>>>>
>>>> [...]
>>>> #include <linux/irqchip/arm-gic.h>
>>>> #include <linux/irqchip/arm-gic-v3.h>
>>>> [...]
>>>>           err = gic_v3_acpi_init(table);
>>>>           if (err)
>>>>                   err = gic_v2_acpi_init(table);
>>>>           if (err)
>>>>                   pr_err("Failed to initialize GIC IRQ controller");
>>>> [...]
>>>> So instead of changing register names prefix, I choose new header will
>>>> be less painfully.
>>>
>>> Yes, and this is exactly why I pushed back on that last time. I'll
>>> continue saying that interrupt controllers should be self-probing, with
>>> ACPI as they are with DT.
>>>
>>> Even with the restrictions of ACPI and SBSA, we end-up with at least 2
>>> main families of interrupt controllers (GICv2 and GICv3), both with a
>>> number of "interesting" variations (GICv2m and GICv4, to only mention
>>> those I'm directly involved with).
>>>
>>> I can safely predict that the above will become a tangled mess within 18
>>> months, and the idea of littering the arch code with a bunch of
>>> hardcoded "if (blah())" doesn't fill me with joy and confidence.
>>>
>>> In summary: we have the infrastructure already, just use it.
>>
>> We had that discussion but I see we still don't have consensus here. It
>> would be good to know our direction before we prepare next patch
>> version. Arnd any comments on this from you side?
>
> I still prefer being explicit here for the same reason I mentioned earlier:
> I want it to be very clear that we don't support arbitrary irqchips other
> than the ones in the APCI specification. The infrastructure exists on DT
> because we have to support a large number of incompatible irqchips.
>
> In particular, the ACPI tables describing the irqchip have no way to
> identify the GIC at all, if I read the spec correctly, you have to
> parse the tables, ioremap the registers and then read the ID to know
> if you have GICv1/v2/v2m/v3/v4. There doesn't seem to be any "device"
> for the GIC that a hypothetical probe function would be based on.
Yes, it is just one table with bunch of different subtables types. Since 
GIC identification register is at different offset across GICv1/2 and 
GICv3, the probe logic seems to be slightly different. IMO, we should 
look into our MADT and try GICv3 fist and then GICv2, that means 
presence of redistributor entries suggests GICv3/4. Its absence means we 
need to look for GICC subtables and then call GICv2 init.

>
> It does seem wrong to parse the tables in the irq-gic.c file though:
> that part can well be common across the various gic versions and then
> call into either irq-gic.c or irq-gic-v3.c for the version specific
> parts. Whether we put that common code into drivers/irqchip/irqchip.c,
> drivers/irqchip/gic-common.c, drivers/irqchip/irq-acpi-gic.c or
> drivers/acpi/irq-gic.c I don't care at all.

We already had tried making MADT parser common for all GICs in the 
separate file (outside GIC driver), it did not end up well. In the light 
of above comment, the logic will be complex and some GIC local strutures 
need to be exported:
1. Check redistributor entries.
2. If none exist, as fallback, check GICC entries, there are 
redistributor base address assigned to CPU. Unfortunately it has no 
register set size so ioremap only two pages (RD + SGI) check if we 
support VLPI and extend ioremap if true. We cannot operate on GIC 
register outside GIC driver so that requires another exported GICv3 
function.
3. Jump to redistributor part if we are OK so far, if not, then we start 
playing with GICC enries and look for cpu base addresses.

Honestly, apart from distributor parsing logic, there is no common code.

As you can see, current gic_v2_acpi_init() logic is quite easy to 
follow. And gic_v3_acpi_init() inside of GICv3 driver is easy too. I 
might not see other solutions but I am open to other suggestions, so 
please correct me in that case.

Regards,
Tomasz

  reply	other threads:[~2014-09-05  8:52 UTC|newest]

Thread overview: 117+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-01 14:57 [PATCH v3 00/17] Introduce ACPI for ARM64 based on ACPI 5.1 Hanjun Guo
2014-09-01 14:57 ` [PATCH v3 01/17] ARM64: Move the init of cpu_logical_map(0) before unflatten_device_tree() Hanjun Guo
2014-09-01 14:57 ` [PATCH v3 02/17] ARM64 / ACPI: Get RSDP and ACPI boot-time tables Hanjun Guo
2014-09-09 16:26   ` Catalin Marinas
2014-09-09 16:41     ` Jon Masters
2014-09-09 16:44       ` Jon Masters
2014-09-09 17:15       ` Mark Rutland
2014-09-09 17:33         ` Jon Masters
2014-09-09 17:50         ` Lorenzo Pieralisi
2014-09-09 18:05           ` Sudeep Holla
2014-09-09 19:06             ` Jon Masters
2014-09-10 11:13               ` Hanjun Guo
2014-09-10 12:33                 ` Catalin Marinas
2014-09-10 21:51                   ` Grant Likely
2014-09-11 11:01                     ` Catalin Marinas
2014-09-14 15:40                       ` Grant Likely
2014-09-14 21:59                         ` Catalin Marinas
2014-09-15  3:53                           ` Grant Likely
2014-09-16  5:29                     ` Zheng, Lv
2014-09-10 21:41                 ` Grant Likely
2014-09-09 16:54     ` Mark Rutland
2014-09-10  7:30     ` Hanjun Guo
2014-09-10 21:37     ` Grant Likely
2014-09-01 14:57 ` [PATCH v3 03/17] ARM64 / ACPI: Introduce lowlevel suspend function Hanjun Guo
2014-09-09 16:35   ` Catalin Marinas
2014-09-09 22:04     ` Graeme Gregory
2014-09-01 14:57 ` [PATCH v3 04/17] ARM64 / ACPI: Introduce early_param for "acpi" Hanjun Guo
2014-09-09 16:37   ` Catalin Marinas
2014-09-09 17:17   ` Bjorn Helgaas
2014-09-09 22:14     ` Jon Masters
2014-09-10 13:04       ` Will Deacon
2014-09-10 13:21         ` Bjorn Helgaas
2014-09-10 18:30           ` Will Deacon
2014-09-10 21:58           ` Grant Likely
2014-09-01 14:57 ` [PATCH v3 05/17] ARM64 / ACPI: If we chose to boot from acpi then disable FDT Hanjun Guo
2014-09-01 14:57 ` [PATCH v3 06/17] ARM64 / ACPI: Make PCI optional for ACPI on ARM64 Hanjun Guo
2014-09-01 14:57 ` [PATCH v3 07/17] ARM64 / ACPI: Parse FADT table to get PSCI flags for PSCI init Hanjun Guo
2014-09-01 14:57 ` [PATCH v3 08/17] ACPI / table: Print GIC information when MADT is parsed Hanjun Guo
2014-09-01 14:57 ` [PATCH v3 09/17] ARM64 / ACPI: Parse MADT for SMP initialization Hanjun Guo
2014-09-03 17:21   ` Lorenzo Pieralisi
2014-09-04 15:29     ` Hanjun Guo
2014-09-09  4:29       ` Jon Masters
2014-09-09  5:11         ` Hanjun Guo
2014-09-09  5:34           ` Jon Masters
2014-09-09 16:52       ` Lorenzo Pieralisi
2014-09-09 17:00         ` Jon Masters
2014-09-09 17:02         ` Jon Masters
2014-09-09  4:23   ` Jon Masters
2014-09-09  4:57     ` Hanjun Guo
2014-09-09  5:44       ` Jon Masters
2014-09-09 16:00         ` Hanjun Guo
2014-09-09 16:04           ` Jon Masters
2014-09-09 16:14             ` Hanjun Guo
2014-09-11 14:15             ` Will Deacon
2014-09-12 21:30               ` Jon Masters
2014-09-11 10:24   ` Grant Likely
2014-09-01 14:57 ` [PATCH v3 10/17] ACPI / processor: Make it possible to get CPU hardware ID via GICC Hanjun Guo
2014-09-03 16:27   ` Lorenzo Pieralisi
2014-09-08 13:10     ` Hanjun Guo
2014-09-01 14:57 ` [PATCH v3 11/17] ARM64 / ACPI: Introduce ACPI_IRQ_MODEL_GIC and register device's gsi Hanjun Guo
2014-09-11 11:08   ` Grant Likely
2014-09-11 11:34     ` Grant Likely
2014-09-12  9:42     ` Hanjun Guo
2014-09-01 14:57 ` [PATCH v3 12/17] ACPI / table: Add new function to get table entries Hanjun Guo
2014-09-01 14:57 ` [PATCH v3 13/17] ARM64 / ACPI: Add GICv2 specific ACPI boot support Hanjun Guo
2014-09-01 17:35   ` Marc Zyngier
2014-09-02  8:28     ` [Linaro-acpi] " Alexander Spyridakis
2014-09-02 11:48     ` Tomasz Nowicki
2014-09-02 13:02       ` Marc Zyngier
2014-09-02 15:45         ` Hanjun Guo
2014-09-02 15:59           ` Marc Zyngier
2014-09-02 16:11           ` Sudeep Holla
2014-09-03 10:30           ` Marc Zyngier
2014-09-03 11:17             ` Hanjun Guo
2014-09-04 14:03               ` Hanjun Guo
2014-09-09  6:21             ` Jon Masters
2014-09-03  9:26         ` Tomasz Nowicki
2014-09-03 14:57           ` Arnd Bergmann
2014-09-05  8:52             ` Tomasz Nowicki [this message]
2014-09-05  9:47             ` Marc Zyngier
2014-09-05 10:13               ` [Linaro-acpi] " Arnd Bergmann
2014-09-05 10:36                 ` Tomasz Nowicki
2014-09-05 10:39                 ` Marc Zyngier
2014-09-05 10:49                   ` Tomasz Nowicki
2014-09-09  6:27             ` Jon Masters
2014-09-11 13:43         ` Grant Likely
2014-09-02 16:34       ` Catalin Marinas
2014-09-11 11:48       ` Grant Likely
2014-09-11 12:01         ` Marc Zyngier
2014-09-09  6:14     ` Jon Masters
2014-09-03 18:42   ` Arnd Bergmann
2014-09-04 10:10     ` Tomasz Nowicki
2014-09-04 10:14       ` Arnd Bergmann
2014-09-04 10:39         ` Tomasz Nowicki
2014-09-09  6:35     ` Jon Masters
2014-09-01 14:57 ` [PATCH v3 14/17] ARM64 / ACPI: Parse GTDT to initialize arch timer Hanjun Guo
2014-09-01 14:57 ` [PATCH v3 15/17] ARM64 / ACPI: Select ACPI_REDUCED_HARDWARE_ONLY if ACPI is enabled on ARM64 Hanjun Guo
2014-09-01 14:57 ` [PATCH v3 16/17] ARM64 / ACPI: Enable ARM64 in Kconfig Hanjun Guo
2014-09-11 15:18   ` Lorenzo Pieralisi
2014-09-01 14:57 ` [PATCH v3 17/17] Documentation: ACPI for ARM64 Hanjun Guo
2014-09-11 13:29 ` [PATCH v3 00/17] Introduce ACPI for ARM64 based on ACPI 5.1 Grant Likely
2014-09-11 13:49   ` Will Deacon
2014-09-12 21:38     ` Jon Masters
2014-09-12 21:43       ` Jon Masters
2014-09-15  4:21     ` Grant Likely
2014-09-11 14:23   ` Rafael J. Wysocki
2014-09-11 14:04     ` Grant Likely
2014-09-11 15:37   ` Catalin Marinas
2014-09-11 15:57     ` Sudeep Holla
2014-09-11 16:06       ` Graeme Gregory
2014-09-11 16:14         ` Sudeep Holla
2014-09-15  4:31     ` Grant Likely
2014-09-15  9:15       ` Catalin Marinas
2014-09-15 22:48         ` Grant Likely
2014-09-16 10:12           ` Catalin Marinas
2014-09-11 16:05   ` Olof Johansson
2014-09-15  4:37     ` Grant Likely

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=540979C3.9020806@linaro.org \
    --to=tomasz.nowicki@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).