linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* How to "register" a GSI for a non PCI non ISA device
@ 2012-01-24 17:42 Guillaume Knispel
  2012-01-25  5:56 ` Len Brown
  0 siblings, 1 reply; 9+ messages in thread
From: Guillaume Knispel @ 2012-01-24 17:42 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-acpi, Guillaume Knispel, Xavier Carcelle, Noé Rubinstein

Hi,

I'm building a PC platform with additional non-PCI and non-ISA devices:
they are basically simple telecom chipsets connected to an SPI and an
old school parallel bus (Intel LEB bus) and GPIO pins that can be used
as interrupts through the IO APIC which exposes 40 GSI. From the point
of view of the software the SPI, LEB, and GPIO are provided by PCI
devices (in reality they are embedded controllers in an Intel SoC
80579). Anyway I'm not sure the additional GSI are described anywhere
in whatever black magic ACPI / legacy BIOS table they could be
(but I've complete control over the FW, so I can had whatever is
 needed when I know it).

But as my devices are neither PCI nor ISA, I don't know how i can get
access to the custom GSI interrupt from a LKM. acpi_register_gsi() used
to be exported but is not anymore and I guess this is mandatory that
this function is called to prepare internal structures (maybe irq_desc)
and most importantly to configure to level triggering active low.

So I'm thinking about writing black magic DSDT stuffs or whatever,
which i might be able to sort of do after reading the fabulous ACPI
specifications. Any feedback or pointer would be highly welcome.

BTW when Linux devs says that bios writers are writing shit, yeah, they
do, and given the state of complexity of the PC platform, I'm at the
risk to do it too because I'm not supposed to delay the production of
our system by one additional year just to completely learn how the
shitty PC "standards" are supposed to work. From a more personal
point of view when I'm reading the ACPI or other related specs tainted
by MS and their desire to put GUID everywhere and other terrible ideas,
I would rather prefer being high to not endure that much pain.

As more and more x86 systems are directly designed to run Linux and
only tested with it, with some of those (like our own) being built
by people having complete control on the board and firmware (Coreboot),
maybe it is time to define a legacy-free variant of the x86 plateform
(especially on the FW/OS interface) for the free software and free
hardware design world, so that we aren't restricted and slowed down by
retro-compatible technologies dedicated at running MS-DOS and created
with the explicit goal to be hard to use for anything else than
Windows NT.

Cheers!
-- 
Guillaume Knispel
Avencall - 10 bis, rue Lucien Voilin - 92800 Puteaux


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to "register" a GSI for a non PCI non ISA device
  2012-01-24 17:42 How to "register" a GSI for a non PCI non ISA device Guillaume Knispel
@ 2012-01-25  5:56 ` Len Brown
  2012-01-25 17:23   ` Guillaume Knispel
  0 siblings, 1 reply; 9+ messages in thread
From: Len Brown @ 2012-01-25  5:56 UTC (permalink / raw)
  To: Guillaume Knispel
  Cc: linux-kernel, linux-acpi, Guillaume Knispel, Xavier Carcelle,
	Noé Rubinstein

On 01/24/2012 12:42 PM, Guillaume Knispel wrote:

> Hi,
> 
> I'm building a PC platform with additional non-PCI and non-ISA devices:
> they are basically simple telecom chipsets connected to an SPI and an
> old school parallel bus (Intel LEB bus) and GPIO pins that can be used
> as interrupts through the IO APIC which exposes 40 GSI. From the point
> of view of the software the SPI, LEB, and GPIO are provided by PCI
> devices (in reality they are embedded controllers in an Intel SoC
> 80579). Anyway I'm not sure the additional GSI are described anywhere
> in whatever black magic ACPI / legacy BIOS table they could be
> (but I've complete control over the FW, so I can had whatever is
>  needed when I know it).

What is the benefit of implementing ACPI on this custom system?

-Len

> But as my devices are neither PCI nor ISA, I don't know how i can get
> access to the custom GSI interrupt from a LKM. acpi_register_gsi() used
> to be exported but is not anymore and I guess this is mandatory that
> this function is called to prepare internal structures (maybe irq_desc)
> and most importantly to configure to level triggering active low.
> 
> So I'm thinking about writing black magic DSDT stuffs or whatever,
> which i might be able to sort of do after reading the fabulous ACPI
> specifications. Any feedback or pointer would be highly welcome.
> 
> BTW when Linux devs says that bios writers are writing shit, yeah, they
> do, and given the state of complexity of the PC platform, I'm at the
> risk to do it too because I'm not supposed to delay the production of
> our system by one additional year just to completely learn how the
> shitty PC "standards" are supposed to work. From a more personal
> point of view when I'm reading the ACPI or other related specs tainted
> by MS and their desire to put GUID everywhere and other terrible ideas,
> I would rather prefer being high to not endure that much pain.
> 
> As more and more x86 systems are directly designed to run Linux and
> only tested with it, with some of those (like our own) being built
> by people having complete control on the board and firmware (Coreboot),
> maybe it is time to define a legacy-free variant of the x86 plateform
> (especially on the FW/OS interface) for the free software and free
> hardware design world, so that we aren't restricted and slowed down by
> retro-compatible technologies dedicated at running MS-DOS and created
> with the explicit goal to be hard to use for anything else than
> Windows NT.
> 
> Cheers!



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to "register" a GSI for a non PCI non ISA device
  2012-01-25  5:56 ` Len Brown
@ 2012-01-25 17:23   ` Guillaume Knispel
  2012-01-25 19:02     ` Konrad Rzeszutek Wilk
  0 siblings, 1 reply; 9+ messages in thread
From: Guillaume Knispel @ 2012-01-25 17:23 UTC (permalink / raw)
  To: Len Brown
  Cc: Guillaume Knispel, linux-kernel, linux-acpi, Xavier Carcelle,
	Noé Rubinstein

On Wed, 25 Jan 2012 00:56:53 -0500
Len Brown <lenb@kernel.org> wrote:

> On 01/24/2012 12:42 PM, Guillaume Knispel wrote:
> 
> > Hi,
> > 
> > I'm building a PC platform with additional non-PCI and non-ISA devices:
> > they are basically simple telecom chipsets connected to an SPI and an
> > old school parallel bus (Intel LEB bus) and GPIO pins that can be used
> > as interrupts through the IO APIC which exposes 40 GSI. From the point
> > of view of the software the SPI, LEB, and GPIO are provided by PCI
> > devices (in reality they are embedded controllers in an Intel SoC
> > 80579). Anyway I'm not sure the additional GSI are described anywhere
> > in whatever black magic ACPI / legacy BIOS table they could be
> > (but I've complete control over the FW, so I can had whatever is
> >  needed when I know it).
> 
> What is the benefit of implementing ACPI on this custom system?

For our short term project it seems to be more a necessity than a
benefit. ACPI is supported by the SoC, tables are already largely
provided by Coreboot, the whole x86 ecosystem including Linux is more
or less based around ACPI, and my whole interrogation comes from the
fact that *acpi*_register_gsi() seems to be necessary to configure a
GSI in the APIC but is not exported anymore, so my guess is that if I
can't call it explicitly from my LKM, there should better be a way to
make it be called when an ACPI thing is done, or maybe a legacy table
parsed.

As we first target an unmodified (if possible) 2.6.32 kernel from
Debian Squeeze, I can't just re-export acpi_register_gsi() and call it
a day. (If I've no other choice I'll obviously do it, but this would be
quite bad for future maintenance).

Now if we consider the long term / big picture and ask ourselves what
is the benefit of ACPI for x86 systems with completely free designs and
running exclusively free operating systems, I consider it more as a
huge hindrance than as a benefit... Who understands that mess to begin
with? If people dedicated at building only COTS motherboards with
proprietary designs and BIOSes don't get it and repetitively make buggy
DSDT, I doubt than I or other people building complete free systems
with hugely limited resources would do very much better. But to
leverage major Linux distributions that kind of hardware platform
builders can be inclined to target existing kernels, so if there is no
pre-built alternative in them the whole ACPI stack will continue to be
used.

So I'm both looking for pointers to how to configure custom GSI in
existing kernels and if I need to do that through ACPI I'm also
interested in pointers to alternatives in Linux on x86 systems where we
could put that kind of description of the hardware platform in future
kernels (device-tree maybe?), because we are very interested in
contributing upstream to try to make our life easier for our next
products using a modern kernel.

-- 
Guillaume Knispel
Avencall - 10 bis, rue Lucien Voilin - 92800 Puteaux

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to "register" a GSI for a non PCI non ISA device
  2012-01-25 17:23   ` Guillaume Knispel
@ 2012-01-25 19:02     ` Konrad Rzeszutek Wilk
  2012-01-26 15:07       ` Guillaume Knispel
  0 siblings, 1 reply; 9+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-01-25 19:02 UTC (permalink / raw)
  To: Guillaume Knispel
  Cc: Len Brown, linux-kernel, linux-acpi, Xavier Carcelle,
	Noé Rubinstein

On Wed, Jan 25, 2012 at 06:23:14PM +0100, Guillaume Knispel wrote:
> On Wed, 25 Jan 2012 00:56:53 -0500
> Len Brown <lenb@kernel.org> wrote:
> 
> > On 01/24/2012 12:42 PM, Guillaume Knispel wrote:
> > 
> > > Hi,
> > > 
> > > I'm building a PC platform with additional non-PCI and non-ISA devices:
> > > they are basically simple telecom chipsets connected to an SPI and an
> > > old school parallel bus (Intel LEB bus) and GPIO pins that can be used
> > > as interrupts through the IO APIC which exposes 40 GSI. From the point
> > > of view of the software the SPI, LEB, and GPIO are provided by PCI
> > > devices (in reality they are embedded controllers in an Intel SoC
> > > 80579). Anyway I'm not sure the additional GSI are described anywhere
> > > in whatever black magic ACPI / legacy BIOS table they could be
> > > (but I've complete control over the FW, so I can had whatever is
> > >  needed when I know it).
> > 
> > What is the benefit of implementing ACPI on this custom system?
> 
> For our short term project it seems to be more a necessity than a
> benefit. ACPI is supported by the SoC, tables are already largely
> provided by Coreboot, the whole x86 ecosystem including Linux is more
> or less based around ACPI, and my whole interrogation comes from the
> fact that *acpi*_register_gsi() seems to be necessary to configure a
> GSI in the APIC but is not exported anymore, so my guess is that if I

Hm, isn't it __acpi_register_gsi?

> can't call it explicitly from my LKM, there should better be a way to
> make it be called when an ACPI thing is done, or maybe a legacy table
> parsed.

Can you do it the way xen does? Look in arch/x86/xen/pci.c
> 
> As we first target an unmodified (if possible) 2.6.32 kernel from
> Debian Squeeze, I can't just re-export acpi_register_gsi() and call it
> a day. (If I've no other choice I'll obviously do it, but this would be
> quite bad for future maintenance).

Oh wow. That is ancient. 3.2?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to "register" a GSI for a non PCI non ISA device
  2012-01-25 19:02     ` Konrad Rzeszutek Wilk
@ 2012-01-26 15:07       ` Guillaume Knispel
  2012-01-26 15:32         ` Konrad Rzeszutek Wilk
  0 siblings, 1 reply; 9+ messages in thread
From: Guillaume Knispel @ 2012-01-26 15:07 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: Guillaume Knispel, Len Brown, linux-kernel, linux-acpi,
	Xavier Carcelle, Noé Rubinstein

On Wed, 25 Jan 2012 14:02:14 -0500
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> wrote:

> On Wed, Jan 25, 2012 at 06:23:14PM +0100, Guillaume Knispel wrote:
> > On Wed, 25 Jan 2012 00:56:53 -0500
> > Len Brown <lenb@kernel.org> wrote:
> > 
> > > What is the benefit of implementing ACPI on this custom system?
> > 
> > For our short term project it seems to be more a necessity than a
> > benefit. ACPI is supported by the SoC, tables are already largely
> > provided by Coreboot, the whole x86 ecosystem including Linux is more
> > or less based around ACPI, and my whole interrogation comes from the
> > fact that *acpi*_register_gsi() seems to be necessary to configure a
> > GSI in the APIC but is not exported anymore, so my guess is that if I
> 
> Hm, isn't it __acpi_register_gsi?

__acpi_register_gsi exists on recent kernels, it is the pointer to
the underlying implementation of that function depending on the
platform (x86 / xen-x86) and on the variant of the platform (pic/apic).
acpi_register_gsi still exists and it calls __acpi_register_gsi.

> > can't call it explicitly from my LKM, there should better be a way to
> > make it be called when an ACPI thing is done, or maybe a legacy table
> > parsed.
> 
> Can you do it the way xen does? Look in arch/x86/xen/pci.c

Did not found this file. Besides, isn't Xen a separate architecture
from mainline x86, compiled built-in? My goal is to only touch LKM and
system firmware if necessary.

> > As we first target an unmodified (if possible) 2.6.32 kernel from
> > Debian Squeeze, I can't just re-export acpi_register_gsi() and call it
> > a day. (If I've no other choice I'll obviously do it, but this would be
> > quite bad for future maintenance).
> 
> Oh wow. That is ancient. 3.2?

3.2 when a Debian stable will feature 3.2 :)

-- 
Guillaume Knispel
Avencall - 10 bis, rue Lucien Voilin - 92800 Puteaux

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to "register" a GSI for a non PCI non ISA device
  2012-01-26 15:07       ` Guillaume Knispel
@ 2012-01-26 15:32         ` Konrad Rzeszutek Wilk
  2012-01-26 16:22           ` Guillaume Knispel
  0 siblings, 1 reply; 9+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-01-26 15:32 UTC (permalink / raw)
  To: Guillaume Knispel
  Cc: Len Brown, linux-kernel, linux-acpi, Xavier Carcelle,
	Noé Rubinstein

On Thu, Jan 26, 2012 at 04:07:19PM +0100, Guillaume Knispel wrote:
> On Wed, 25 Jan 2012 14:02:14 -0500
> Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> wrote:
> 
> > On Wed, Jan 25, 2012 at 06:23:14PM +0100, Guillaume Knispel wrote:
> > > On Wed, 25 Jan 2012 00:56:53 -0500
> > > Len Brown <lenb@kernel.org> wrote:
> > > 
> > > > What is the benefit of implementing ACPI on this custom system?
> > > 
> > > For our short term project it seems to be more a necessity than a
> > > benefit. ACPI is supported by the SoC, tables are already largely
> > > provided by Coreboot, the whole x86 ecosystem including Linux is more
> > > or less based around ACPI, and my whole interrogation comes from the
> > > fact that *acpi*_register_gsi() seems to be necessary to configure a
> > > GSI in the APIC but is not exported anymore, so my guess is that if I
> > 
> > Hm, isn't it __acpi_register_gsi?
> 
> __acpi_register_gsi exists on recent kernels, it is the pointer to
> the underlying implementation of that function depending on the
> platform (x86 / xen-x86) and on the variant of the platform (pic/apic).
> acpi_register_gsi still exists and it calls __acpi_register_gsi.
> 
> > > can't call it explicitly from my LKM, there should better be a way to
> > > make it be called when an ACPI thing is done, or maybe a legacy table
> > > parsed.
> > 
> > Can you do it the way xen does? Look in arch/x86/xen/pci.c
> 
> Did not found this file. Besides, isn't Xen a separate architecture

Duh! I meant arch/x86/pci/xen.c

> from mainline x86, compiled built-in? My goal is to only touch LKM and

Not anymore. It is dynamically on if the kernel detects its running under the
hypervisor.

I am still unclear what you are trying to do. Is it that
you have _PRT ACPI tables and your want to have your module be called
when those are parsed? If so, then __acpi_register_gsi is your guy - 
and you can over-write it to your platform. Granted at that point that
function parameter should be guarded by some form of locking. Perhaps
provide a acpi_register_gsi_fnc() that can be exported out. Would
that work for you (I can cook up a patch for that)?

But this a bit complicated by the fact that ACPI parsing is done
early in the bootup processes - so your module should be compiled in
- otherwise you might miss the the 'request_irq' calls done by drivers
that are done _before_ your module is loaded.

Unless you want to re-trigger the ACPI _PRT parsing and call your
module once more for all interrupts? But that would imply unload
all existing modules, then reload them once more..

Or is it that you just want to set the APIC parameters differently?
Wouldn't then the be better of implementing an ' struct apic ' which
would have most, of them set to the existing (apic_physflat) and just
over-write the ones you really care about - like write and read?

> system firmware if necessary.
> 
> > > As we first target an unmodified (if possible) 2.6.32 kernel from
> > > Debian Squeeze, I can't just re-export acpi_register_gsi() and call it
> > > a day. (If I've no other choice I'll obviously do it, but this would be
> > > quite bad for future maintenance).
> > 
> > Oh wow. That is ancient. 3.2?
> 
> 3.2 when a Debian stable will feature 3.2 :)

Ah OK.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to "register" a GSI for a non PCI non ISA device
  2012-01-26 15:32         ` Konrad Rzeszutek Wilk
@ 2012-01-26 16:22           ` Guillaume Knispel
  2012-01-26 17:24             ` Bjorn Helgaas
  0 siblings, 1 reply; 9+ messages in thread
From: Guillaume Knispel @ 2012-01-26 16:22 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: Guillaume Knispel, Len Brown, linux-kernel, linux-acpi,
	Xavier Carcelle, Noé Rubinstein

On Thu, 26 Jan 2012 10:32:39 -0500
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> wrote:

> On Thu, Jan 26, 2012 at 04:07:19PM +0100, Guillaume Knispel wrote:
> > On Wed, 25 Jan 2012 14:02:14 -0500
> > Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> wrote:
> > 
> > > On Wed, Jan 25, 2012 at 06:23:14PM +0100, Guillaume Knispel wrote:
> > >
> > > > can't call it explicitly from my LKM, there should better be a way to
> > > > make it be called when an ACPI thing is done, or maybe a legacy table
> > > > parsed.
> > > 
> > > Can you do it the way xen does? Look in arch/x86/xen/pci.c
> > 
> > Did not found this file. Besides, isn't Xen a separate architecture
> 
> Duh! I meant arch/x86/pci/xen.c
> 
> > from mainline x86, compiled built-in? My goal is to only touch LKM and
> 
> Not anymore. It is dynamically on if the kernel detects its running under the
> hypervisor.
> 
> I am still unclear what you are trying to do. Is it that
> you have _PRT ACPI tables and your want to have your module be called
> when those are parsed? If so, then __acpi_register_gsi is your guy - 
> and you can over-write it to your platform. Granted at that point that
> function parameter should be guarded by some form of locking. Perhaps
> provide a acpi_register_gsi_fnc() that can be exported out. Would
> that work for you (I can cook up a patch for that)?

Sorry if I was unclear, I'll try to make things more explicit.

We build the platform which obviously differs a little from a PC (but
just because of the presence of those additional non-ISA non-PCI
devices), but as far as software is concerned we are trying to make the
system run with a standard unmodified Linux kernel already built by
Debian (because rebuilding our own would shift the maintenance of
that kernel on us instead of Debian, and we would not be good at that)

So what we can act on are the LKM and the system firmware, but not the
bzImage.

The problem I'm facing is that I don't know how to setup a GSI, what
used to be done by directly calling acpi_register_gsi(), which was
possible from an LKM when it was exported (for example in 2.6.18,
which was the kernel used by Intel for their dev board).

Because acpi_register_gsi() is not exported anymore, I'm trying to find
a way to make it be called during system startup. My current best guess
is that if I write the right magic spell somewhere in the DSDT or maybe
a kind of legacy BIOS table, the acpi_register_gsi() will be called
during the boot and will configure the GSI with the desired level
triggering, so that the LKM will just have to request_irq() (but on
which irq number? same as gsi number?) and everything will work fine.

I don't think I've to replace acpi_register_gsi() by my own
implementation; the GSI in question is a standard one on the only
IO APIC in the system. So everything looks pretty simple. The only
question is how to make use of that GSI from the software side,
first how to configure it to level trigger active low, then how to
request it from a LKM given that the LKM in question does not drive
a PCI device that makes use of the interrupt we want.

The simplified architecture is the following:

 Intel 80579 System on Chip                | External chip
                                           |
+----------+            +-----+            |  +---------+
| CPU + NB |--- PCI ----| LEB |--- // bus ----| telecom |
+----------+            +-----+            |  |  chip   |
     |                                     |  +---------+
 +--------+                                |   |
 | IOAPIC |----------------- GSI 32 -----------+
 +--------+                                |

The LKM will register as a driver for the PCI enumerable LEB then use
it to drive the telecom chip. GSI 32 is unrelated to the LEB.

> But this a bit complicated by the fact that ACPI parsing is done
> early in the bootup processes - so your module should be compiled in
> - otherwise you might miss the the 'request_irq' calls done by drivers
> that are done _before_ your module is loaded.
> 
> Unless you want to re-trigger the ACPI _PRT parsing and call your
> module once more for all interrupts? But that would imply unload
> all existing modules, then reload them once more..
> 
> Or is it that you just want to set the APIC parameters differently?
> Wouldn't then the be better of implementing an ' struct apic ' which
> would have most, of them set to the existing (apic_physflat) and just
> over-write the ones you really care about - like write and read?
> 
> > system firmware if necessary.
> > 
> > > > As we first target an unmodified (if possible) 2.6.32 kernel from
> > > > Debian Squeeze, I can't just re-export acpi_register_gsi() and call it
> > > > a day. (If I've no other choice I'll obviously do it, but this would be
> > > > quite bad for future maintenance).
> > > 
> > > Oh wow. That is ancient. 3.2?
> > 
> > 3.2 when a Debian stable will feature 3.2 :)
> 
> Ah OK.

-- 
Guillaume Knispel
Avencall - 10 bis, rue Lucien Voilin - 92800 Puteaux

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to "register" a GSI for a non PCI non ISA device
  2012-01-26 16:22           ` Guillaume Knispel
@ 2012-01-26 17:24             ` Bjorn Helgaas
  2012-01-26 17:30               ` Guillaume Knispel
  0 siblings, 1 reply; 9+ messages in thread
From: Bjorn Helgaas @ 2012-01-26 17:24 UTC (permalink / raw)
  To: Guillaume Knispel
  Cc: Konrad Rzeszutek Wilk, Len Brown, linux-kernel, linux-acpi,
	Xavier Carcelle, Noé Rubinstein

On Thu, Jan 26, 2012 at 9:22 AM, Guillaume Knispel
<gknispel@proformatique.com> wrote:
> On Thu, 26 Jan 2012 10:32:39 -0500
> Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> wrote:
>
>> On Thu, Jan 26, 2012 at 04:07:19PM +0100, Guillaume Knispel wrote:
>> > On Wed, 25 Jan 2012 14:02:14 -0500
>> > Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> wrote:
>> >
>> > > On Wed, Jan 25, 2012 at 06:23:14PM +0100, Guillaume Knispel wrote:
>> > >
>> > > > can't call it explicitly from my LKM, there should better be a way to
>> > > > make it be called when an ACPI thing is done, or maybe a legacy table
>> > > > parsed.
>> > >
>> > > Can you do it the way xen does? Look in arch/x86/xen/pci.c
>> >
>> > Did not found this file. Besides, isn't Xen a separate architecture
>>
>> Duh! I meant arch/x86/pci/xen.c
>>
>> > from mainline x86, compiled built-in? My goal is to only touch LKM and
>>
>> Not anymore. It is dynamically on if the kernel detects its running under the
>> hypervisor.
>>
>> I am still unclear what you are trying to do. Is it that
>> you have _PRT ACPI tables and your want to have your module be called
>> when those are parsed? If so, then __acpi_register_gsi is your guy -
>> and you can over-write it to your platform. Granted at that point that
>> function parameter should be guarded by some form of locking. Perhaps
>> provide a acpi_register_gsi_fnc() that can be exported out. Would
>> that work for you (I can cook up a patch for that)?
>
> Sorry if I was unclear, I'll try to make things more explicit.
>
> We build the platform which obviously differs a little from a PC (but
> just because of the presence of those additional non-ISA non-PCI
> devices), but as far as software is concerned we are trying to make the
> system run with a standard unmodified Linux kernel already built by
> Debian (because rebuilding our own would shift the maintenance of
> that kernel on us instead of Debian, and we would not be good at that)
>
> So what we can act on are the LKM and the system firmware, but not the
> bzImage.
>
> The problem I'm facing is that I don't know how to setup a GSI, what
> used to be done by directly calling acpi_register_gsi(), which was
> possible from an LKM when it was exported (for example in 2.6.18,
> which was the kernel used by Intel for their dev board).

A driver should never need to use acpi_register_gsi() directly.  It
sounds like you have a non-PCI device that would be described as an
ACPI device in the DSDT.  In the Device definition, you include a _CRS
method that tells the kernel what GSI it is using.  The PNPACPI
subsystem will parse _CRS and should do the acpi_register_gsi() for
you.  Then your driver would use pnp_register_driver() and pnp_irq()
to learn the IRQ.  drivers/tty/serial/8250_pnp.c is an example.

Bjorn

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to "register" a GSI for a non PCI non ISA device
  2012-01-26 17:24             ` Bjorn Helgaas
@ 2012-01-26 17:30               ` Guillaume Knispel
  0 siblings, 0 replies; 9+ messages in thread
From: Guillaume Knispel @ 2012-01-26 17:30 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Guillaume Knispel, Konrad Rzeszutek Wilk, Len Brown,
	linux-kernel, linux-acpi, Xavier Carcelle, Noé Rubinstein

On Thu, 26 Jan 2012 10:24:31 -0700
Bjorn Helgaas <bhelgaas@google.com> wrote:

> A driver should never need to use acpi_register_gsi() directly.  It
> sounds like you have a non-PCI device that would be described as an
> ACPI device in the DSDT.  In the Device definition, you include a _CRS
> method that tells the kernel what GSI it is using.  The PNPACPI
> subsystem will parse _CRS and should do the acpi_register_gsi() for
> you.  Then your driver would use pnp_register_driver() and pnp_irq()
> to learn the IRQ.  drivers/tty/serial/8250_pnp.c is an example.

Thanks a lot, I'll look into it.

-- 
Guillaume Knispel
Avencall - 10 bis, rue Lucien Voilin - 92800 Puteaux

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2012-01-26 17:30 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-24 17:42 How to "register" a GSI for a non PCI non ISA device Guillaume Knispel
2012-01-25  5:56 ` Len Brown
2012-01-25 17:23   ` Guillaume Knispel
2012-01-25 19:02     ` Konrad Rzeszutek Wilk
2012-01-26 15:07       ` Guillaume Knispel
2012-01-26 15:32         ` Konrad Rzeszutek Wilk
2012-01-26 16:22           ` Guillaume Knispel
2012-01-26 17:24             ` Bjorn Helgaas
2012-01-26 17:30               ` Guillaume Knispel

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).