> On Mon, 2015-10-26 at 08:51 +0000, Zha, Qipeng wrote: > > > So the ASL you provided was not what the Linux kernel is seeing, > > > correct? > > > > > Can you please provide a DSDT disassembly from the running Linux > > > system please, such as: > > > > > # cp /sys/firmware/acpi/tables/DSDT DSDT.dat # iasl -d DSDT.dat > > > > > Then find this device in DSDT.dsl and paste it here please. > > > > Sorry for late feedback, got dsdt from lab machine since my board > > got broken, Please check. > > > > Scope (\_SB) > > { > > Device (IPC1) > > { > > Name (_ADR, Zero) // _ADR: Address > > Name (_HID, "INT34D2") // _HID: Hardware ID > > Name (_CID, "INT34D2") // _CID: Compatible ID > > Name (_DDN, "Intel(R) IPCI controller ") // _DDN: > > DOS Device Name > > Name (_UID, One) // _UID: Unique ID > > Name (RBUF, ResourceTemplate () > > { > > Memory32Fixed (ReadWrite, > > 0x00000000, // Address Base > > 0x00002000, // Address Length > > _Y08) > > Memory32Fixed (ReadWrite, > > 0x00000000, // Address Base > > 0x00000004, // Address Length > > _Y09) > > Memory32Fixed (ReadWrite, > > 0x00000000, // Address Base > > 0x00000040, // Address Length > > _Y0A) > > IO (Decode16, > > 0x0400, // Range Minimum > > 0x0480, // Range Maximum > > 0x04, // Alignment > > 0x80, // Length > > ) > > Memory32Fixed (ReadWrite, > > 0x00000000, // Address Base > > 0x00002000, // Address Length > > _Y0B) > > Interrupt (ResourceConsumer, Level, ActiveLow, > > Exclusive, ,, ) > > { > > 0x00000028, > > } > > }) > > Method (_CRS, 0, NotSerialized) // _CRS: Current > > Resource Settings > > { > > CreateDWordField (RBUF, \_SB.IPC1._Y08._BAS, > > B0BA) // _BAS: Base Address > > CreateDWordField (RBUF, \_SB.IPC1._Y08._LEN, > > B0LN) // _LEN: Length > > Store (DD1A, B0BA) > > Store (DD1L, B0LN) > > dd1a, dd1l has been stored to Resource 0 > > > CreateDWordField (RBUF, \_SB.IPC1._Y09._BAS, > > BM01) // _BAS: Base Address > > CreateDWordField (RBUF, \_SB.IPC1._Y09._LEN, > > BML1) // _LEN: Length > > CreateDWordField (RBUF, \_SB.IPC1._Y0A._BAS, > > BM02) // _BAS: Base Address > > CreateDWordField (RBUF, \_SB.IPC1._Y0A._LEN, > > BML2) // _LEN: Length > > Store (BMDA, BM01) > > Store (0x04, BML1) > > Store (BMIA, BM02) > > Store (0x40, BML2) > > bmda, 0x04 -> Resource 1 > bmia, 0x40 -> Resource 2 > > > CreateDWordField (RBUF, \_SB.IPC1._Y0B._BAS, > > B1BA) // _BAS: Base Address > > CreateDWordField (RBUF, \_SB.IPC1._Y0B._LEN, > > B1LN) // _LEN: Length > > Store (DD3A, B1BA) > > Store (DD3L, B1LN) > > dd3a, dd3l -> Resource 3 > > > Can you create a temporary method in the ->probe() of this driver to > iterate over resources and print them out? Or tell the values BIOS set > per values dd1a, dd1l, dd3a, dd3l, bmda, bmia. > > AFAIU you are using only resources 0 and 1. Can you put here small > description of what each resource is meant for? (I guess couple of > them to P-Unit, and couple related to what you are trying to get, > right?) >While the driver code merges the ranges of res0 and res1: >line 244-245: addr = ioremap_nocache(res0->start, resource_size(res0) + resource_size(res1)); >It appears that we're using very little of this: > punit_ipcdev->base[BIOS_IPC] = addr; > addr += MAILBOX_REGISTER_SPACE; > punit_ipcdev->base[GTDRIVER_IPC] = addr; > addr += MAILBOX_REGISTER_SPACE; > punit_ipcdev->base[ISPDRIVER_IPC] = addr; >MAILBOX_REGISTER_SPACE is 0x10, but I don't know how long ISPDRIVER_IPC is expected to be, but it apears to be 4 bytes. This would mean we're using a total of 0x24 starting res0->start. res0 has a length of 0x2000 per the ASL above, and we're only referencing 0x24 of it. >Why, then, do we merge the lengths of res0 and res1, presumably to 0x2004, when we only use 0x24? >Or, am I misreading this? >Also, Qipeng, you mentioned earlier that the firmware reported a length of 0x4B I believe? I don't see that in this ASL. Memory32Fixed (ReadWrite, 0x00000000, // Address Base 0x00002000, // Address Length _Y08) dd1a, dd1l -> Resource 0 This is PMC controller memory space, not related to Punit. bmda, 0x04 -> Resource 1 bmia, 0x40 -> Resource 2 These two are for Punit memory space, and bmia = bmda + 4, They are mapped to res0,res1 in Punit driver, size of res0 is set as 4B(Store (0x04, BML1)). Other resource are for other PMC functions, not related to Punit either. -- To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html