Hi Mika > -----Original Message----- > From: Mika Westerberg [mailto:mika.westerberg@xxxxxxxxxxxxxxx] > Sent: 13 June 2017 09:49 > To: Lorenzo Pieralisi > Cc: Gabriele Paoloni; rafael@xxxxxxxxxx; Rafael J. Wysocki; > catalin.marinas@xxxxxxx; will.deacon@xxxxxxx; robh+dt@xxxxxxxxxx; > frowand.list@xxxxxxxxx; bhelgaas@xxxxxxxxxx; arnd@xxxxxxxx; linux-arm- > kernel@xxxxxxxxxxxxxxxxxxx; mark.rutland@xxxxxxx; > brian.starkey@xxxxxxx; olof@xxxxxxxxx; benh@xxxxxxxxxxxxxxxxxxx; linux- > kernel@xxxxxxxxxxxxxxx; linux-acpi@xxxxxxxxxxxxxxx; Linuxarm; linux- > pci@xxxxxxxxxxxxxxx; minyard@xxxxxxx; John Garry; xuwei (O) > Subject: Re: [PATCH v9 5/7] ACPI: Translate the I/O range of non-MMIO > devices before scanning > > On Mon, Jun 12, 2017 at 04:57:00PM +0100, Lorenzo Pieralisi wrote: > > I had a more in-depth look at this series and from my understanding > > the problem are the following to manage the LPC bindings in ACPI. > > > > (1) Child devices of an LPC controller require special handling when > > filling their resources (ie they need to be translated - in DT > > that's guaranteed by the "isa" binding, in ACPI it has to be > > done by new code) > > (2) In DT systems, LPC child devices are created by the LPC bus > > controller driver through an of_platform_populate() call with > > the LPC controller node as the fwnode root. For ACPI to work > > the same way there must be a way to prevent LPC children to > > be enumerated in acpi_default_enumeration() something like > > I2C does (and then the LPC driver would enumerate its children as > > DT does) > > > > I am not sure how (1) and (2) can be managed with current ACPI > bindings > > and kernel code - I suspect it may be done by mirroring what's done > > for I2C but I am not sure, that's why I CC'ed Mika (ie the LPC > adapter > > is matched as a platform device and it takes care of enumerating its > > children - problem though is preventing enumeration from core ACPI > code). > > Is there an example ASL showing how these LPC devices are > currently presented in ACPI? Please find below the asl sketch for our LPC and IPMI // // LPC // Scope(_SB) { Device (LPC0) { Name (_HID, "HISI0191") // HiSi LPC Name (_CRS, ResourceTemplate () { Memory32Fixed (ReadWrite, 0xa01b0000, 0x1000) }) } Device (LPC0.IPMI) { Name (_HID, "IPI0001") Method (_IFT) { Return (0x03) } Name (LORS, ResourceTemplate() { QWordIO ( ResourceConsumer, MinNotFixed, // _MIF MaxNotFixed, // _MAF PosDecode, EntireRange, 0x0, // _GRA 0xe4, // _MIN 0x3fff, // _MAX 0x0, // _TRA 0x04, // _LEN , , BTIO ) }) CreateQWordField (LORS, BTIO._MIN, CMIN) CreateQWordField (LORS, BTIO._MAX, CMAX) CreateQWordField (LORS, BTIO._LEN, CLEN) Method (_PRS, 0) { Return (LORS) } Method (_CRS, 0) { Return (LORS) } Method (_SRS, 1) { CreateQWordField (Arg0, \_SB.LPC0.IPMI.BTIO._MIN, IMIN) Store (IMIN, CMIN) CreateQWordField (Arg0, \_SB.LPC0.IPMI.BTIO._MAX, IMAX) Store (IMAX, CMAX) } } [...] } Many thanks Gab