Alder Lake N平台修改ACPI/DSDT设置GPIO默认值求助
关于Zspace Z4Pro NAS硬盘仓默认供电的DSDT修改求助
我买了一款仅面向国内市场的小众NAS(Zspace Z4Pro),它基于Intel i3-N305(Alder Lake N)平台,打算更换ESXi/Proxmox这类第三方系统。目前系统能正常启动运行,但硬盘仓没有供电。
从厂商拿到恢复镜像分析后,发现硬盘仓供电是由OS层的内核模块gpio-z4pro-sata-power.ko通过GPIO控制的(LED同理,暂时不处理)。
已经完成GPIO映射(这些GPIO属于Intel侧,不是SuperIO):
sata0_power_gpio = pin 17 (GPPC_B_17): (MUX UNCLAIMED) INTC1057:00:681 GPIO 0x04000200 0x00000029 0x00000100 sata1_power_gpio = pin 16 (GPPC_B_16): (MUX UNCLAIMED) INTC1057:00:680 GPIO 0x04000200 0x00000028 0x00000100 sata2_power_gpio = pin 8 (GPPC_B_8): (MUX UNCLAIMED) INTC1057:00:672 GPIO 0x04000200 0x00000020 0x00000100 sata3_power_gpio = pin 7 (GPPC_B_7): (MUX UNCLAIMED) INTC1057:00:671 GPIO 0x04000200 0x0000001f 0x00000100
拉低电平就能开启供电:
echo 0 > /sys/class/gpio/gpio681/value
我希望把这个设置改成默认状态,不用依赖OS控制。觉得可以通过修改DSDT实现,已经导出了DSDT,找到了唯一和INTC1057相关的部分,但不知道怎么改:
Scope (_SB) { Device (GPI0) { Method (_HID, 0, NotSerialized) // _HID: Hardware ID { If ((GPHD == One)) { Return ("PNP0C02") } If ((PCHS == 0x03)) { Return ("INTC1057") } Else { Return ("INTC1055") } } Name (LINK, "\_SB.GPI0") Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings { Name (RBFL, ResourceTemplate () { Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, _Y41) { 0x0000000E, } Memory32Fixed (ReadWrite, 0x00000000, // Address Base 0x00010000, // Address Length _Y42) Memory32Fixed (ReadWrite, 0x00000000, // Address Base 0x00010000, // Address Length _Y43) Memory32Fixed (ReadWrite, 0x00000000, // Address Base 0x00010000, // Address Length _Y44) Memory32Fixed (ReadWrite, 0x00000000, // Address Base 0x00010000, // Address Length _Y45) }) CreateDWordField (RBFL, \_SB.GPI0._CRS._Y41._INT, INTL) // _INT: Interrupts INTL = SGIR /* \SGIR */ CreateDWordField (RBFL, \_SB.GPI0._CRS._Y42._BAS, CML0) // _BAS: Base Address CML0 = (SBRG + 0x006E0000) CreateDWordField (RBFL, \_SB.GPI0._CRS._Y43._BAS, CML1) // _BAS: Base Address CML1 = (SBRG + 0x006D0000) CreateDWordField (RBFL, \_SB.GPI0._CRS._Y44._BAS, CML4) // _BAS: Base Address CML4 = (SBRG + 0x006A0000) CreateDWordField (RBFL, \_SB.GPI0._CRS._Y45._BAS, CML5) // _BAS: Base Address CML5 = (SBRG + 0x00690000) Return (RBFL) /* \_SB_.GPI0._CRS.RBFL */ } Method (_STA, 0, NotSerialized) // _STA: Status { If ((GPHD == One)) { Return (0x08) } Return (0x0F) } } }
希望能得到修改建议或指导。我打算先通过grub覆盖DSDT测试修改效果,之后再更新BIOS实现永久生效。
内容的提问来源于stack exchange,提问作者Whiterat
相关产品推荐
相关产品推荐

