ctich Posted January 12, 2020 Share Posted January 12, 2020 1 hour ago, Mike Ranger said: Thanks all for clarifying. I can confirm that the new Super I/O is really working great. All is missing is the link to the well known Apps like Istat for example. The question is really if I understood you correctly: How to close that bridge from the raw data Super I/O to, for example IStat, which most Mac/Hack users have installed and using. I think the main reason that not more users have switched to VirtualSMC is exactly that reason.... and sorry for stating that in this thread....hope it is not off-topic. If I officially submit that as a request, where would that go.... into the VirtualSMC one? Thanks again, Mike to support sensors in iStat Menus you need to write help@bjango.zendesk.com, maybe they will agree to consider this possibility. Link to comment Share on other sites More sharing options...
Mike Ranger Posted January 12, 2020 Share Posted January 12, 2020 Quote to support sensors in iStat Menus you need to write help@bjango.zendesk.com, maybe they will agree to consider this possibility. I am pretty certain they will not. The FakeSMC Sensor Kexts are programmed so that Apps like Istat can work with the data. I wanted to share my perspective that the main reason VirtualSMC together with the provided Sensor-Kexts is not used by more users due to the lack of providing sensor information that can be used by e.g. Istat. I tried to communicate here what I have read in numerous forums why people stick with FakeSMC plus Sensors. For me this is working perfectly fine and also the reason why I have not switched to VirtualSMC. My point is what currently hinders adoption of VirtualSMC plus Sensor.kexts it that missing link to Istat. And there seems no appetite by any developers to start implementing any drivers. For this reason, VirtualSMC will probably not be used by many Hackintosh users for the time being, until that changes. Link to comment Share on other sites More sharing options...
vit9696 Posted January 12, 2020 Share Posted January 12, 2020 iStat implements support for HWSensors sensors by explicitly detecting FakeSMC kext presence and using a dedicated SMC key mapping for it. It is up to them whether to also add support for Acidanthera sensors, but for obvious reasons we will not create a FakeSMC service in I/O Registry or add HWSensors SMC keys. 1 1 Link to comment Share on other sites More sharing options...
Mike Ranger Posted January 12, 2020 Share Posted January 12, 2020 @vit9696: gotcha..... I think you will agree that adoption of VirtualSMC&Sensors will not really happen unless happy Istat users (like myself) have a solution. I am not proposing who should implement this solution, just saying that FakeSMC will remain most Hack-Users choice for that reason. Link to comment Share on other sites More sharing options...
MacKonsti Posted January 13, 2020 Share Posted January 13, 2020 On 1/8/2020 at 8:44 AM, Mike Ranger said: So I can confirm that everything works.... In order to get more functionality, I would have to create a DSDT for the LCP sensors. The problem I have however is, that looking through my DSDT, I have no good idea how to translate this info correctly. I will try to better understand. Hi @Mike Ranger if you manage to create a working SSDT-xxx for LCP sensors, please can you share it? I would also need to create one and I also do not know where to start from nor how to structure the ACPI code inside... thank you! Link to comment Share on other sites More sharing options...
Rodion2010 Posted January 13, 2020 Share Posted January 13, 2020 I have SuperIO chip (Winbond) registers in DSDT and yes, it is possible to read Voltages, FANs and Temps from here but this part of code is not available in all the DSDTs OperationRegion (HWRE, SystemIO, IOHW, 0x0A) Field (HWRE, ByteAcc, NoLock, Preserve) { Offset (0x05), HIDX, 8, HDAT, 8 } IndexField (HIDX, HDAT, ByteAcc, NoLock, Preserve) { Offset (0x04), CHNM, 1, CFNM, 1, CHNS, 2, CFNS, 2, Offset (0x05), SYST, 8, TRGT, 8, Offset (0x08), SSDN, 8, CSDN, 8, SSUP, 8, CSUP, 8, Offset (0x20), VCOR, 8, V12V, 8, Offset (0x23), V33V, 8, Offset (0x25), V50V, 8, Offset (0x27), MBTE, 8, FAN1, 8, FAN2, 8, FAN3, 8, Offset (0x3F), CFN3, 8, Offset (0x47), FDR1, 8, Offset (0x4B), FD13, 8, FD15, 8, Offset (0x4E), BSEL, 3, Offset (0x4F), Offset (0x50), TSR1, 8, , 7, TSR2, 1, Offset (0x53), FAN4, 8, Offset (0x59), FND4, 8, Offset (0x5D), FD21, 8 } } Link to comment Share on other sites More sharing options...
Mike Ranger Posted January 14, 2020 Share Posted January 14, 2020 @MacKonsti: I have a working solution with FakeSMC and Sensors. I would gladly switch to VirtualSMC but however I understand too little how to implement a solution that would work with Istat. Link to comment Share on other sites More sharing options...
Mike Ranger Posted January 14, 2020 Share Posted January 14, 2020 @Rodion2010 Can you give more context for your DSDT? What do you achieve with it? Thanks, Mike Link to comment Share on other sites More sharing options...
Rodion2010 Posted January 14, 2020 Share Posted January 14, 2020 1 hour ago, Mike Ranger said: @Rodion2010 Can you give more context for your DSDT? What do you achieve with it? Thanks, Mike Sample SSDT to read from SuperIO for ACPI.kext (HWsensors3) /* * Intel ACPI Component Architecture * AML/ASL+ Disassembler version 20200110 (64-bit version) * Copyright (c) 2000 - 2020 Intel Corporation * * Disassembling to symbolic ASL+ operators * * Disassembly of iASLrFLzrb.aml, Tue Jan 14 11:57:21 2020 * * Original Table Header: * Signature "SSDT" * Length 0x00000CCA (3274) * Revision 0x01 * Checksum 0x19 * OEM ID "APPLE" * OEM Table ID "SSDT-MON" * OEM Revision 0x00000001 (1) * Compiler ID "INTL" * Compiler Version 0x20190509 (538510601) */ DefinitionBlock ("", "SSDT", 1, "APPLE", "SSDT-MON", 0x00000001) { External (_SB_.PCI0.LPCB, DeviceObj) Name (IOHW, 0x0290) Scope (_SB.PCI0.LPCB) { Device (SIOR) { Name (_HID, EisaId ("PNP0C02") /* PNP Motherboard Resources */) // _HID: Hardware ID Method (HWV0, 0, NotSerialized) { Return ((VCOR * 0x08)) } Method (HWV1, 0, NotSerialized) { Return ((V12V * 0x08)) } Method (HWV3, 0, NotSerialized) { Return ((V33V * 0x08)) } Method (HWV5, 0, NotSerialized) { Return ((V50V * 0x08)) } Method (HWT0, 0, NotSerialized) { Local1 = MBTE /* \_SB_.PCI0.LPCB.SIOR.MBTE */ Local1 *= 0x0A Return (Local1) } Method (HWT1, 0, NotSerialized) { BSEL = One Local1 = TSR1 /* \_SB_.PCI0.LPCB.SIOR.TSR1 */ Local1 *= 0x0A Local2 = TSR2 /* \_SB_.PCI0.LPCB.SIOR.TSR2 */ Local2 *= 0x05 Local1 += Local2 Return (Local1) } Method (HWF0, 0, NotSerialized) { Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */ BSEL = Zero Local1 = (FD21 & 0x20) Local1 >>= 0x05 Local1 *= 0x04 Local2 = (FDR1 & 0x30) Local2 >>= 0x04 Local1 += Local2 If (((Local1 > 0x05) || (Local1 < 0x02))) { If ((Local0 > 0xF0)) { Local1 = 0x02 } ElseIf ((Local0 < 0x1E)) { Local1 = 0x05 } Else { Local1 = 0x03 } Divide (Local1, 0x04, Local2, Local3) Local3 <<= 0x05 Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */ Local4 &= 0xDF FD21 = (Local3 | Local4) Local4 = FDR1 /* \_SB_.PCI0.LPCB.SIOR.FDR1 */ Local4 &= 0xCF Local2 <<= 0x04 Local4 |= One FDR1 = (Local4 | Local2) } While ((((Local0 > 0xF0) && (Local1 < 0x05)) || ((Local0 < 0x1E) && (Local1 > 0x02)))) { If (((Local0 > 0xF0) && (Local1 < 0x05))) { Local1 += One Divide (Local1, 0x04, Local2, Local3) BSEL = Zero Local3 <<= 0x05 Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */ Local4 &= 0xDF FD21 = (Local3 | Local4) Local4 = FDR1 /* \_SB_.PCI0.LPCB.SIOR.FDR1 */ Local4 &= 0xCF Local2 <<= 0x04 Local4 |= One FDR1 = (Local4 | Local2) Sleep (0x32) Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */ Sleep (0x32) Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */ Sleep (0x32) Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */ } Else { Local1 -= One Divide (Local1, 0x04, Local2, Local3) BSEL = Zero Local3 <<= 0x05 Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */ Local4 &= 0xDF FD21 = (Local3 | Local4) Local4 = FDR1 /* \_SB_.PCI0.LPCB.SIOR.FDR1 */ Local4 &= 0xCF Local2 <<= 0x04 Local4 |= One FDR1 = (Local4 | Local2) Sleep (0x32) Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */ Sleep (0x32) Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */ Sleep (0x32) Local0 = FAN1 /* \_SB_.PCI0.LPCB.SIOR.FAN1 */ } } If (((Local0 == 0xFF) && (Local1 == 0x05))) { Return (Zero) } If (((Local0 == Zero) && (Local1 == 0x02))) { Return (0xFFFF) } Local2 = One While (Local1) { Local2 *= 0x02 Local1-- } Local0 *= Local2 Divide (0x00149970, Local0, Local1, Local0) Return (Local0) } Method (HWF1, 0, NotSerialized) { BSEL = Zero Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */ Local1 = (FD21 & 0x40) Local1 >>= 0x06 Local1 *= 0x04 Local2 = (FDR1 & 0xC0) Local2 >>= 0x06 Local1 += Local2 If (((Local1 > 0x05) || (Local1 < 0x02))) { If ((Local0 > 0xF0)) { Local1 = 0x02 } ElseIf ((Local0 < 0x1E)) { Local1 = 0x05 } Else { Local1 = 0x03 } Divide (Local1, 0x04, Local2, Local3) Local3 <<= 0x06 Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */ Local4 &= 0xBF FD21 = (Local3 | Local4) Local4 = FDR1 /* \_SB_.PCI0.LPCB.SIOR.FDR1 */ Local4 &= 0x3F Local2 <<= 0x06 Local4 |= One FDR1 = (Local4 | Local2) } While ((((Local0 > 0xF0) && (Local1 < 0x05)) || ((Local0 < 0x1E) && (Local1 > 0x02)))) { If (((Local0 < 0x1E) && (Local1 > 0x02))) { Local1 -= One Divide (Local1, 0x04, Local2, Local3) BSEL = Zero Local3 <<= 0x06 Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */ Local4 &= 0xBF FD21 = (Local3 | Local4) Local4 = FDR1 /* \_SB_.PCI0.LPCB.SIOR.FDR1 */ Local4 &= 0x3F Local2 <<= 0x06 Local4 |= One FDR1 = (Local4 | Local2) Sleep (0x32) BSEL = Zero Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */ Sleep (0x32) Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */ Sleep (0x32) Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */ } Else { Local1 += One Divide (Local1, 0x04, Local2, Local3) BSEL = Zero Local3 <<= 0x06 Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */ Local4 &= 0xBF FD21 = (Local3 | Local4) Local4 = FDR1 /* \_SB_.PCI0.LPCB.SIOR.FDR1 */ Local4 &= 0x3F Local2 <<= 0x06 Local4 |= One FDR1 = (Local4 | Local2) Sleep (0x32) BSEL = Zero Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */ Sleep (0x32) Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */ Sleep (0x32) Local0 = FAN2 /* \_SB_.PCI0.LPCB.SIOR.FAN2 */ } } If (((Local0 == 0xFF) && (Local1 == 0x05))) { Return (Zero) } If (((Local0 == Zero) && (Local1 == 0x02))) { Return (0xFFFF) } Local2 = One While (Local1) { Local2 *= 0x02 Local1-- } Local0 *= Local2 Divide (0x00149970, Local0, Local1, Local0) Return (Local0) } Method (HWF2, 0, NotSerialized) { Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */ BSEL = Zero Local1 = (FD21 & 0x80) Local1 >>= 0x07 Local1 *= 0x04 Divide (FD13, 0x40, Local2, Local3) Local1 += Local3 If (((Local1 > 0x05) || (Local1 < 0x02))) { If ((Local0 > 0xF0)) { Local1 = 0x02 } ElseIf ((Local0 < 0x1E)) { Local1 = 0x05 } Else { Local1 = 0x03 } Divide (Local1, 0x04, Local2, Local3) Local3 <<= 0x07 Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */ Local4 &= 0x7F FD21 = (Local3 | Local4) Local3 = FD13 /* \_SB_.PCI0.LPCB.SIOR.FD13 */ Local3 &= 0x3F Local2 *= 0x40 Local2 += Local3 FD13 = Local2 } While ((((Local0 > 0xF0) && (Local1 < 0x05)) || ((Local0 < 0x1E) && (Local1 > 0x02)))) { If (((Local0 > 0xF0) && (Local1 < 0x05))) { If ((Local0 == 0xFF)) { Local1 = 0x05 } Else { Local1 += One } Divide (Local1, 0x04, Local2, Local3) BSEL = Zero Local3 <<= 0x07 Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */ Local4 &= 0x7F FD21 = (Local3 | Local4) Local3 = FD13 /* \_SB_.PCI0.LPCB.SIOR.FD13 */ Local3 &= 0x3F Local2 *= 0x40 Local2 += Local3 FD13 = Local2 If ((Local0 != 0xFF)) { Sleep (0x32) } Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */ Sleep (0x32) Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */ Sleep (0x32) Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */ } Else { Local1 -= One Divide (Local1, 0x04, Local2, Local3) BSEL = Zero Local3 <<= 0x07 Local4 = FD21 /* \_SB_.PCI0.LPCB.SIOR.FD21 */ Local4 &= 0x7F FD21 = (Local3 | Local4) Local3 = FD13 /* \_SB_.PCI0.LPCB.SIOR.FD13 */ Local3 &= 0x3F Local2 *= 0x40 Local2 += Local3 FD13 = Local2 Sleep (0x32) Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */ Sleep (0x32) Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */ Sleep (0x32) Local0 = FAN3 /* \_SB_.PCI0.LPCB.SIOR.FAN3 */ } } If (((Local0 == 0xFF) && (Local1 == 0x05))) { Return (Zero) } If (((Local0 == Zero) && (Local1 == 0x02))) { Return (0xFFFF) } Local2 = One While (Local1) { Local2 *= 0x02 Local1-- } Local0 *= Local2 Divide (0x00149970, Local0, Local1, Local0) Return (Local0) } Method (HWF4, 0, NotSerialized) { BSEL = 0x05 Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */ BSEL = Zero Local1 = (FND4 & 0x80) Local1 >>= 0x08 Local1 *= 0x04 Local2 = (FND4 & 0x0C) Local2 >>= 0x02 Local1 += Local2 If (((Local1 > 0x05) || (Local1 < 0x02))) { If ((Local0 > 0xF0)) { Local1 = 0x02 } ElseIf ((Local0 < 0x1E)) { Local1 = 0x05 } Else { Local1 = 0x03 } Divide (Local1, 0x04, Local2, Local3) Local3 <<= 0x08 Local2 <<= 0x02 Local4 = FND4 /* \_SB_.PCI0.LPCB.SIOR.FND4 */ Local4 &= 0x73 Local3 |= Local2 FND4 = (Local3 | Local4) } While ((((Local0 > 0xF0) && (Local1 < 0x05)) || ((Local0 < 0x1E) && (Local1 > 0x02)))) { If (((Local0 > 0xF0) && (Local1 < 0x05))) { Local1 += One Divide (Local1, 0x04, Local2, Local3) BSEL = Zero Local3 <<= 0x08 Local2 <<= 0x02 Local4 = FND4 /* \_SB_.PCI0.LPCB.SIOR.FND4 */ Local4 &= 0x73 Local3 |= Local2 FND4 = (Local3 | Local4) If ((Local0 != 0xFF)) { Sleep (0x32) } BSEL = 0x05 Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */ Sleep (0x32) Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */ Sleep (0x32) Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */ BSEL = Zero } Else { Local1 -= One Divide (Local1, 0x04, Local2, Local3) BSEL = Zero Local3 <<= 0x08 Local2 <<= 0x02 Local4 = FND4 /* \_SB_.PCI0.LPCB.SIOR.FND4 */ Local4 &= 0x73 Local3 |= Local2 FND4 = (Local3 | Local4) Sleep (0x32) BSEL = 0x05 Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */ Sleep (0x32) Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */ Sleep (0x32) Local0 = FAN4 /* \_SB_.PCI0.LPCB.SIOR.FAN4 */ BSEL = Zero } } If (((Local0 == 0xFF) && (Local1 == 0x05))) { Return (Zero) } If (((Local0 == Zero) && (Local1 == 0x02))) { Return (0xFFFF) } Local2 = One While (Local1) { Local2 *= 0x02 Local1-- } Local0 *= Local2 Divide (0x00149970, Local0, Local1, Local0) Return (Local0) } Name (FNDT, Package (0x08) { One, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }) Method (HWF3, 0, NotSerialized) { BSEL = Zero Local0 = CFN3 /* \_SB_.PCI0.LPCB.SIOR.CFN3 */ Local1 = (FD15 & 0x80) Local1 >>= 0x05 Local2 = (FND4 & 0x03) Local1 |= Local2 If (((Local1 > 0x05) || (Local1 < 0x02))) { If ((Local0 > 0xF0)) { Local1 = 0x02 } ElseIf ((Local0 < 0x1E)) { Local1 = 0x05 } Else { Local1 = 0x03 } Local2 = (Local1 << 0x05) Local2 &= 0x80 Local3 = (FD15 & 0x7F) Local3 |= Local2 FD15 = Local3 Local2 = (Local1 & 0x03) Local3 = (FND4 & 0xFC) Local3 |= Local2 FND4 = Local3 } While ((((Local0 > 0xF0) && (Local1 < 0x05)) || ((Local0 < 0x1E) && (Local1 > 0x02)))) { If (((Local0 > 0xF0) && (Local1 < 0x05))) { Local1++ } Else { Local1-- } Local2 = (Local1 << 0x05) Local2 &= 0x80 Local3 = (FD15 & 0x7F) Local3 |= Local2 FD15 = Local3 Local2 = (Local1 & 0x03) Local3 = (FND4 & 0xFC) Local3 |= Local2 FND4 = Local3 Sleep (0x32) Local0 = CFN3 /* \_SB_.PCI0.LPCB.SIOR.CFN3 */ Sleep (0x32) Local0 = CFN3 /* \_SB_.PCI0.LPCB.SIOR.CFN3 */ Sleep (0x32) Local0 = CFN3 /* \_SB_.PCI0.LPCB.SIOR.CFN3 */ } If (((Local0 == 0xFF) && (Local1 == 0x05))) { Return (Zero) } If (((Local0 == Zero) && (Local1 == 0x02))) { Return (0xFFFF) } Local2 = DerefOf (FNDT [Local1]) Local0 *= Local2 Divide (0x00149970, Local0, Local1, Local0) Return (Local0) } OperationRegion (HWRE, SystemIO, IOHW, 0x0A) Field (HWRE, ByteAcc, NoLock, Preserve) { Offset (0x05), HIDX, 8, HDAT, 8 } IndexField (HIDX, HDAT, ByteAcc, NoLock, Preserve) { Offset (0x04), CHNM, 1, CFNM, 1, CHNS, 2, CFNS, 2, Offset (0x05), SYST, 8, TRGT, 8, Offset (0x08), SSDN, 8, CSDN, 8, SSUP, 8, CSUP, 8, Offset (0x20), VCOR, 8, V12V, 8, Offset (0x23), V33V, 8, Offset (0x25), V50V, 8, Offset (0x27), MBTE, 8, FAN1, 8, FAN2, 8, FAN3, 8, Offset (0x3F), CFN3, 8, Offset (0x47), FDR1, 8, Offset (0x4B), FD13, 8, FD15, 8, Offset (0x4E), BSEL, 3, Offset (0x4F), Offset (0x50), TSR1, 8, , 7, TSR2, 1, Offset (0x53), FAN4, 8, Offset (0x59), FND4, 8, Offset (0x5D), FD21, 8 } } Device (ASOC) { Name (_HID, "ATK0110") // _HID: Hardware ID Name (VPAR, Package (0x04) { Package (0x03) { Zero, One, Zero }, Package (0x03) { 0x22, 0x22, Zero }, Package (0x03) { 0x14, 0x0A, Zero }, Package (0x03) { 0x3C, 0x0A, Zero } }) Method (VGET, 1, NotSerialized) { If ((Arg0 == Zero)) { Return (^^SIOR.HWV0 ()) } If ((Arg0 == One)) { Return (^^SIOR.HWV3 ()) } If ((Arg0 == 0x02)) { Return (^^SIOR.HWV5 ()) } If ((Arg0 == 0x03)) { Return (^^SIOR.HWV1 ()) } Return (Zero) } Method (TGET, 1, NotSerialized) { If ((Arg0 == Zero)) { Return (^^SIOR.HWT1 ()) } If ((Arg0 == One)) { Return (^^SIOR.HWT0 ()) } Return (Zero) } Method (FGET, 1, NotSerialized) { If ((Arg0 == Zero)) { Return (^^SIOR.HWF1 ()) } If ((Arg0 == One)) { Return (^^SIOR.HWF2 ()) } If ((Arg0 == 0x02)) { Return (^^SIOR.HWF4 ()) } If ((Arg0 == 0x03)) { Return (^^SIOR.HWF0 ()) } If ((Arg0 == 0x04)) { Return (^^SIOR.HWF3 ()) } Return (Zero) } Method (RVLT, 1, NotSerialized) { Local0 = (Arg0 & 0xFFFF) Local1 = VGET (Local0) Local2 = DerefOf (DerefOf (VPAR [Local0]) [Zero]) Local3 = DerefOf (DerefOf (VPAR [Local0]) [One]) Local4 = DerefOf (DerefOf (VPAR [Local0]) [0x02]) Local5 = (Local1 * (Local2 + Local3)) Local5 /= Local3 Local5 += Local4 Return (Local5) } Method (RTMP, 1, NotSerialized) { Local0 = (Arg0 & 0xFFFF) Local1 = TGET (Local0) Return (Local1) } Method (RFAN, 1, NotSerialized) { Local0 = (Arg0 & 0xFFFF) Local1 = FGET (Local0) Return (Local1) } } Device (FSAM) { Name (_HID, EisaId ("APP0111")) // _HID: Hardware ID Name (_CID, "monitor") // _CID: Compatible ID Method (TSYS, 0, NotSerialized) { Local1 = \_SB.PCI0.LPCB.ASOC.RTMP (One) Return ((Local1 / 0x0A)) } Method (TCPU, 0, NotSerialized) { Local1 = \_SB.PCI0.LPCB.ASOC.RTMP (Zero) Return ((Local1 / 0x0A)) } Method (VCPU, 0, NotSerialized) { Return (\_SB.PCI0.LPCB.ASOC.RVLT (Zero)) } Method (VP0R, 0, NotSerialized) { Return (\_SB.PCI0.LPCB.ASOC.RVLT (0x03)) } Method (VSN3, 0, NotSerialized) { Return (\_SB.PCI0.LPCB.ASOC.RVLT (One)) } Method (VSN1, 0, NotSerialized) { Return (\_SB.PCI0.LPCB.ASOC.RVLT (0x02)) } Method (FAN0, 0, NotSerialized) { Return (\_SB.PCI0.LPCB.ASOC.RFAN (Zero)) } Method (FAN1, 0, NotSerialized) { Return (\_SB.PCI0.LPCB.ASOC.RFAN (One)) } Method (FAN2, 0, NotSerialized) { Return (\_SB.PCI0.LPCB.ASOC.RFAN (0x02)) } } } } Link to comment Share on other sites More sharing options...
Mike Ranger Posted January 14, 2020 Share Posted January 14, 2020 @Rodion2010 It would help, if you could provide the following information: - FakeSMC or VirtualSMC? - Does this work with Istat as well? I have a perfect solution for FakeSMC plus Sensors.... So I am looking for options around that utilize VirtualSMC, particularly with IStat, since I moved from Clover to OpenCore. If that is what you provided, how to tweak your SSDT for other systems? Regards, Mike Link to comment Share on other sites More sharing options...
Rodion2010 Posted January 15, 2020 Share Posted January 15, 2020 19 hours ago, Mike Ranger said: @Rodion2010 It would help, if you could provide the following information: - FakeSMC or VirtualSMC? - Does this work with Istat as well? I have a perfect solution for FakeSMC plus Sensors.... So I am looking for options around that utilize VirtualSMC, particularly with IStat, since I moved from Clover to OpenCore. If that is what you provided, how to tweak your SSDT for other systems? Regards, Mike 1 FakeSMC + ACPIMonitor from here https://github.com/CloverHackyColor/FakeSMC3_with_plugins 2 yes There is no ACPIMonitor for VSMC yet Link to comment Share on other sites More sharing options...
Mike Ranger Posted January 15, 2020 Share Posted January 15, 2020 yes... the current strategy seems the SuperIO. I am looking for a solution for the SuperIO because I am using OpenCore. OpenCore officially does not support FakeSMC anymore. SuperIO seems to provide the raw-data.... drivers are missing... so only HWSensors apps are fully working. Regards, Mike Link to comment Share on other sites More sharing options...
Rodion2010 Posted January 15, 2020 Share Posted January 15, 2020 6 hours ago, Mike Ranger said: OpenCore officially does not support FakeSMC anymore. Where is this info from? FakeSMC can be loaded by OpenCore exactly as any other kext 1 Link to comment Share on other sites More sharing options...
iCanaro Posted January 15, 2020 Share Posted January 15, 2020 FakeSMC+w386x+AMDCpuMonitor VirtualSMC+SMCSuperIO+SMCProcessor Nuvoton NCT6779D-R and NCT67970-M Link to comment Share on other sites More sharing options...
Mike Ranger Posted January 15, 2020 Share Posted January 15, 2020 5 hours ago, Rodion2010 said: Where is this info from? FakeSMC can be loaded by OpenCore exactly as any other kext Well.... if you read the documentation, it tells me that everything around FakeSMC might work but then it might not. The use of FakeSMC is certainly not encouraged.... so.... with further development of OpenCore, things might actually break with FakeSMC. Link to comment Share on other sites More sharing options...
Rodion2010 Posted January 15, 2020 Share Posted January 15, 2020 (edited) 1 hour ago, Mike Ranger said: ... if you read the documentation, what , more exactly, " tells me that everything around FakeSMC might work but then it might not." https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/Configuration.pdf SmcRevisionType: plist data, 6 bytesFailsafe: Not installedDescription: Sets REV in gEfiMiscSubClassGuid. Custom property read by VirtualSMC or FakeSMC to generate SMC REV key. SmcBranchType: plist data, 8 bytesFailsafe: Not installedDescription: Sets RBr in gEfiMiscSubClassGuid. Custom property read by VirtualSMC or FakeSMC to generate SMC RBr key. SmcPlatformType: plist data, 8 bytesFailsafe: Not installedDescription: Sets RPlt in gEfiMiscSubClassGuid. Custom property read by VirtualSMC or FakeSMC to generate SMC RPlt key. AppleSmcIoType: plist boolean Description: Reinstalls Apple SMC I/O protocol with a builtin version. This protocol replaces legacy VirtualSmc UEFI driver, and is compatible with any SMC kernel extension. However, in case FakeSMC kernel extension is used, manual NVRAM key variable addition may be needed. no more results for FakeSMC and we may use any of them What documentation do you read? Edited January 15, 2020 by Rodion2010 Link to comment Share on other sites More sharing options...
Rodion2010 Posted January 16, 2020 Share Posted January 16, 2020 (edited) 18 hours ago, Mike Ranger said: Well.... if you read the documentation, it tells me that everything around FakeSMC might work but then it might not. answer from the author: "There are no compatibility restrictions with Apple SMC / FakeSMC / VirtualSMC." I think he knows better )) Edited January 16, 2020 by Rodion2010 Link to comment Share on other sites More sharing options...
jinbingmao Posted January 23, 2020 Share Posted January 23, 2020 @joedmru, Is there a plan to add the temperature sensor of the main board. Link to comment Share on other sites More sharing options...
Andrey1970 Posted January 23, 2020 Share Posted January 23, 2020 6 hours ago, jinbingmao said: @joedmru, Is there a plan to add the temperature sensor of the main board. He said: will do in the future. 1 Link to comment Share on other sites More sharing options...
moozuki Posted February 16, 2020 Share Posted February 16, 2020 6 hours ago, vector sigma said: Care to update your bootloader as is not showing the motherboard name? Say that because without OEM informations the configuration will not be automatically detected. I'm using the OpenCore 0.5.5 bootloader, not sure what I need to do? Link to comment Share on other sites More sharing options...
Andrey1970 Posted February 16, 2020 Share Posted February 16, 2020 2 hours ago, moozuki said: I'm using the OpenCore 0.5.5 bootloader, not sure what I need to do? 1 Link to comment Share on other sites More sharing options...
moozuki Posted February 16, 2020 Share Posted February 16, 2020 1 hour ago, Andrey1970 said: Thanks! Read up on that and now I get it :-) Link to comment Share on other sites More sharing options...
moozuki Posted February 16, 2020 Share Posted February 16, 2020 (edited) Ok vector sigma, I got it this time! Z170M-D3H-CF.zip Edited February 16, 2020 by moozuki spelling Link to comment Share on other sites More sharing options...
fryysyd Posted February 19, 2020 Share Posted February 19, 2020 On 2/18/2020 at 4:40 AM, vector sigma said: Thanks to had taken the time to ensure fans connectors are right. The file is identical on what it's already on Github.. @vector sigma Please take a look. My motherboard is MSI B360M BAZOOKA PlUS, Clover boot, VirtualSMC.kext and its sensors. Now the name of the motherboard is correctly identified, but each voltage value is wrong. Use AIDA64 to check the sensor model is Nuvoton NCT6797D-M , What should I do to get the correct voltage value and fans value? Link to comment Share on other sites More sharing options...
iCanaro Posted February 24, 2020 Share Posted February 24, 2020 sorry for OT kext virtualsmc plugin for temp. CPU AMD + app AMD Power gadget developer https://github.com/trulyspinach/SMCAMDProcessor 1 Link to comment Share on other sites More sharing options...
Recommended Posts