Jump to content

E6420: Brightness keys though ACPI patching


noname33

Recommended Posts

Hi, Sorry my English.

 

It's true this is a old topic, but for my, never worked properly. With the help of some kexts I could middle-solve the problem, but never ended for work fine 100% stable.

Well, now I have a few of free time, and I searched in the dsdt all the code related with the BRT6. And what a found, gives me a clear explanation to what happen here.

 

There are two post related with this. One is here: https://osxlatitude.com/forums/topic/19433-latitude-e6420-dsdt-review/#comment-120052.

The other is the code showed by Hervé about the brightness (here:

 

And this is the code of mi Latitude E6420 

  Method (SMEE, 1, NotSerialized)
    {
        Store (Arg0, Local0)
        Store (GENS (0x11, 0x00, 0x00), Local0)
        If (LGreaterEqual (\_SB.OSID (), 0x20))
        {
            If (And (Local0, 0x04))
            {
                \EV13 (0x01, 0x00)
            }
            If (And (Local0, 0x02))
            {
                \EV13 (0x02, 0x00)
            }
        }
        If (And (Local0, 0x08))
        {
            Store (GENS (0x1D, 0x00, 0x00), Local0)
            \EV14 (Local0, 0x00)
        }
    }


If we follow a bit the code, we will have this:

Method (SMEE, 1, NotSerialized)
    {
        Store (Arg0, Local0)
        Store (GENS (0x11, Zero, Zero), Local0)
        If (And (Local0, 0x04))
        {
            \_SB.PCI0.PEG0.VID.BRT6 (One, Zero)
            \_SB.PCI0.VID.BRT6 (One, Zero)
        }
        Else
        {
            If (And (Local0, 0x02))
            {
                \_SB.PCI0.PEG0.VID.BRT6 (0x02, Zero)
                \_SB.PCI0.VID.BRT6 (0x02, Zero)
            }
        }
        If (And (Local0, 0x08))
        {
            \_SB.PCI0.IGPU.IBL1 (GENS (0x1D, Zero, Zero), Zero)
        }
    }

 

Then you can see this: Store (GENS (0x11, Zero, Zero), Local0)

And GENS is the 'manager' of the SNVP, SNVG, SNWB, SNRB, SNVC, etc functions what we already know.  (see the first link). And know come the spectacle.

Method (GENS,3)
{
//here arg0 = 17, arg1=0, and arg2=0, then:
        Store (Arg1, Local0)//<-- well, Local0 is 0 now.
    if type of Arg1 is equal to number
    {
        //we enter here, because 0 is a number type
        Store (SMBI (Arg0, Arg1), Local0)

 

Now, we go to see 'Store (SMBI (Arg0, Arg1), Local0)' to know which value takes Local0.

        Method (SMBI, 2, NotSerialized)
        {
            SNVC (Arg0) //<-- we already know snvc
            Add (SMIB, 0x04, Local0)
            OperationRegion (WWPR, SystemMemory, Local0, 0x04) //we already know this Region
            Field (WWPR, ByteAcc, Lock, Preserve)
            {
                SDW0,   32
            }
            Store (Arg1, SDW0)
            ASMI ()
            Return (SDW0)
        }     


Then:

    //1
        SNVC (Arg0) => Method (SNVC, 1, NotSerialized)
        {
            OperationRegion (WWPR, SystemMemory, SMIB, 0x04)
            Field (WWPR, DWordAcc, Lock, Preserve)
            {
                SCDW,   32
            }
            Store (Arg0, SCDW)//<-- here we store 00 00 00 11 (0x11 in Dword)in SMIB pos
        }
    //2
          OperationRegion (WWPR, SystemMemory, Local0, 0x04) //we already know this Reg
          Field (WWPR, ByteAcc, Lock, Preserve)
          {
              SDW0,   32
          }
       Store (Arg1, SDW0)//<-- here we store 00 00 00 00 in SMIB + 4 position
    //3
    ASMI() => OperationRegion (SMIR, SystemIO, PSMI, 0x01)
            Field (SMIR, ByteAcc, Lock, Preserve)
            {
                SCMD,   8
            }
           Store (0x04, SCMD)// here we store 0x04 always and nothing more
    //4, The surprise!
         Return (SDW0) //<-- we two steep before, did something like Store (Arg1, SDW0), and Arg1 was 0.

    //this means return 0x00000000


 Well, now we know that inside of GENS ' Store (SMBI (Arg0, Arg1), Local0) ' assign 0 to that Local0 when GENS is called, and GENS always return its Local0 to the Local0 of SMME, and you can see at the start of this mess-up that SMME expects three valid values, 2, 4, or 8.

 

What happen?, well, Local0 of SMME always is 0 since GENS always return 0, and in this case, the call for BRT6 never will be triggered. In conclusion, the brightness never will can work. I don't say could work good or bad, it's more simple still, never will can work. 
 

Link to comment
Share on other sites

Well, then I think, so, I go to try remove the GENS and make the evaluation directly with Arg0 instead of Local0, but is not easy even do that.

 

how you can see here in other post by Hervé again:

 

 

That function called SMME is called once from SMIE, and SMIE start by:

 

        Store (GENS (0x10, 0x00, 0x00), Local0) //<--- we already learned this return 0 alway while arg0 is a number and arg1 is 0


And later make a evaluation If Else, of Local0, where it expect Local0 will take the value of 0x02, 0x08, 0x10, 0x40 or 0x80, but never 0x00, and then, no one of the clause in this function works.

 

It enter, and exit, without doing any single thing more.

 

Link to comment
Share on other sites

  • Administrators

The brightness keys ACPI patch I posted does not apply to the Sandy Bridge Latitude E6x20 as is. I tried it to no avail on my E6220, whether BIOS operating in legacy of UEFI mode. Instead, I called on a different patch I had found on the web that I adapted for my E6220. I posted the details in my E6220 Mojave guide; look it up.

 

It's a simple ACPI renaming patch in the Clover config file + a patched SSDT-Q66 table. With Mojave, I completely moved away from a patched DSDT to a simple and basic set of a few patched SSDTs + associated ACPI patches in the bootloader's config file. It's very minimal and very efficient.

 

In a nutshell, all you do is replace the original _Q66 event handling method:

            Method (_Q66, 0, NotSerialized)  // _Qxx: EC Query
            {
                If (LNotEqual (ECRD, One))
                {
                    Return (Zero)
                }
                NEVT ()
                Return (Zero)
            }

by this revised code:

        Method (_Q66, 0, NotSerialized)  // _Qxx: EC Query
        {
            If (LNotEqual (\ECRD, One))
            {
                Return (Zero)
            }
            NEVT ()
            \_SB.AMW0.WED0 (One)
            Mid (\_SB.AMW0._WED (0xD0), Zero, 0x06, Local2)
            If (LEqual (Local2, Buffer (0x06)
                    {
                         0x02, 0x00, 0x10, 0x00, 0x50, 0x00             
                    }))
            {
                Notify (\_SB.PCI0.LPCB.PS2K, 0x0365)
            }
            If (LEqual (Local2, Buffer (0x06)
                    {
                         0x02, 0x00, 0x10, 0x00, 0x48, 0x00             
                    }))
            {
                Notify (\_SB.PCI0.LPCB.PS2K, 0x0366)
            }
            Return (Zero)
        }

making sure not to forget the ACPI renaming in your config file which is necessary to bypass the original _Q66 method of the (native) DSDT table and inject its replacement through SSDT:

Find: 5F513636 (="_Q66")
Replace: 5F583636 (="_X66")

 

And that's it.

Link to comment
Share on other sites

For end the Story, I would swore that I remember get different result inside of BRT6 according to the order that I put LCD and PS2K notification. So in the other hand we can see a lot of event that never will execute via DSDT. 

 

Then I guess BRT6 is called from the BIOS directly like _SB.PCI0.VID.BRT6, and skip SMME and SMIE. Then probably this would be an aware bug for try to make difficult install other OS that Windows. I bought this laptop over 2012 and over 2017 the BIOS A24 was release, so I don't believe the people of Dell don't Know that all these functions don't works via AML ACPI.

Link to comment
Share on other sites

  • Administrators

in 2023, it's kind of irrelevant... There are many PCs with bugged BIOS tables (DSDT and/or otherwise), Dell is not a unique actor in that respect. Yet, Dell laptops remain ideal platforms by far and large (especially Latitude laptops) when it comes to running OS X/macOS on them.

Link to comment
Share on other sites

Yes you are right I think, even I believe in 2013 already should be irrelevant for them. The principal reason why I believe that is because my eyes can see that code, so of course they knew what thy made, and of course I don't go to enter to evaluate their corporation motivates.

 

We were who decided bought Dell, I don't go to blame anybody for my decision.

 

 

Link to comment
Share on other sites

I put your provided code in my DSDT, and nothing happened. It seem a good code, thank you.

 

But it doesn't work to me, and at this moment, I hesitate seriously about that code gets work in any Dell.

 

Well, the code seem to be good, at least I think so, but the issue is that the method _Q66 never is triggered!. This method's _Qxx, are called from the BIOS or embedded controller, and, I thought your code should work, fine or bad, but it should work in some way because it's under the unique _Q that exist ion this DSDT.

 

Then, because it's doesn't work, I made a script, which add a debug store inside every thing, and I run it. The result was very very disappointed, but in the other hand this help me to understand better what happen here.

 

This is a example of the debug code that I added almost in every line:

Spoiler
        Method (ECM8, 1, NotSerialized)
        {
            Store("myACPIDebug In root.Scope.ECM8 (Method) [id:7736]", Debug) // add for debug
            ECWB (0x04, Arg0)
            Name (LBUF, Buffer (0x21) {})
            Store (Zero, Local0)
            While (LLess (Local0, 0x20))
            {
                If(LNotEqual(ZZZZ, One))// add for debug
                {// add for debug
                    Store("myACPIDebug In root.Scope.ECM8.While [id:7741]", Debug)// add for debug
                    Store(One, ZZZZ)// add for debug
                }// add for debug

                Store (ECRB (0x2A), Local1)
                Store (Local1, Index (LBUF, Local0))
                If (LEqual (Local1, Zero))
                {
                    Store("myACPIDebug In root.Scope.ECM8.While.If [id:7745]", Debug)// add for debug
                    Break
                }
                Increment (Local0)
            }

            If(LEqual(ZZZZ , One))// add for debug
            {// add for debug
                Store("myACPIDebug Out While [id:31]", Debug)// add for debug
                Store(Zero, ZZZZ)// add for debug
            }// add for debug
            Else// add for debug
            {// add for debug
                Store("myACPIDebug Avoid While [id:31]", Debug)// add for debug
            }// add for debug
            
            If (LNotEqual (Local1, Zero))
            {
                Store("myACPIDebug In root.Scope.ECM8.If [id:7753]", Debug)// add for debug
                Store (Zero, Index (LBUF, Local0))
                Increment (Local0)
                Store("myACPIDebug Out If [id:7753]", Debug)// add for debug
            }
            
            Increment (Local0)
            Name (OBUF, Buffer (Local0) {})
            Store (LBUF, OBUF)
            Store("myACPIDebug Return Method.ECM8 [id:7736]", Debug)// add for debug
            Return (OBUF)
        }

 

And this is the poor result I got:

Spoiler
311779 In root._SB.PCI0._BBN (Method) [id:2195]
324245 Return from Method._BBN [id:2195]
336921 In root._SB.PCI0.^BN00 (Method) [id:2190]
349860 Return from Method.^BN00 [id:2190]
365498 _INI root.Scope [id:5572]
378128 _INI root._SB (Scope) [id:147]
575106 In root._SB.PCI0._INI (Method) [id:12711]
591916 In root.EV1 (Method) [id:12767]
608947 In root._SB.PCI0.IINI (Method) [id:5494]
626394 In root._SB.PCI0.IINI.If [id:5502]
643716 In root._SB.PCI0.IINI.If.Else [id:5508]
661361 In root._SB.PCI0.IINI.If.Else.Else [id:5514]
679450 In root._SB.PCI0.IINI.If.Else.Else.Else [id:5520]
697965 In root._SB.PCI0.IINI.If.Else.Else.Else.Else [id:5526]
715619 Out Else [id:5526]
732116 Out Else [id:5520]
748562 Out Else [id:5514]
764905 Out Else [id:5508]
781231 Out If [id:5502]
797807 Return from Method.IINI [id:5494]
815340 In root._SB.PCI0.LPCB.EINI (Method) [id:8120]
833457 In root._SB.PCI0.LPCB.EINI.If [id:8122]
851582 In root.ECG5 (Method) [id:7685]
869618 Return from Method.ECG5 [id:7685]
887876 In root.ECRB (Method) [id:7650]
906424 Return from Method.ECRB [id:7650]
925618 In root._SB.PCI0.LPCB.EC.ECR1 (Method) [id:7123]
945590 In root._SB.PCI0.LPCB.EC.ECR1.If [id:7125]
964910 Return If [id:7125]
984249 In root.EISC (Method) [id:7614]
004298 In root.GENS (Method) [id:10100]
024196 In root.GENS.Else [id:10108]
043963 In root.GENS.Else.If [id:10110]
063840 In root.SMBF (Method) [id:10135]
083749 In root.SNVC (Method) [id:10039]
103211 Out Method.SNVC [id:10039]
121894 Avoid While [id:10150]
140613 In root.SMBF.While [id:10156]
159915 In root.SNVP (Method) [id:10075]
179141 Out Method.SNVP [id:10075]
197837 Out While [id:10156]
216964 In root.ASMI (Method) [id:10179]
236544 Out Method.ASMI [id:10179]
255437 Avoid While [id:10164]

 

Then I traced that log in the dsdt, and this is the result. ( You can follow the steps, they are ordered by //number_step, there are only 32  )

Spoiler
        Device (PCI0)
        {
            Method (^BN00, 0, NotSerialized) // 1
            {
                Return (Zero)
            }
            
            Method (_BBN, 0, NotSerialized) // 0
            {
                Return (BN00 ())
            }
    Scope (\) 
    {
        Method(_INI,0) // 2
    Scope (_SB)
    {
        Method(_INI,0){ // 3
    SSDT-cpu // 4
    Scope (_SB.PCI0)
    {
        Method (_INI, 0, NotSerialized) // 5
        {
            EV1 (0x02, Zero) // 6
    Method (EV1, 2, NotSerialized) // 7
    {
        \_SB.PCI0.IINI (Arg0, Arg1) // (0x02, Zero) // 8
        \_SB.PCI0.LPCB.EINI (Arg0, Arg1) // 11

        Method (IINI, 2, NotSerialized) // 9
        {
            If (LNotEqual (Arg0, 0x02)){Return (Zero)} //Arg0 = 0x02 
            Store (0x07D0, OSYS) // 10
        Method (EINI, 2, NotSerialized) // 12
        {
            If (LEqual (Arg0, 0x02)) //Arg0 = 0x02 
            {
                Store (ECG5 (), APRE) // 13
                And (APRE, 0x2B, APRE)
        Method (ECG5, 0, NotSerialized) // 14
        {
            Return (ECRB (0x06)) // 15

        Method (ECRB, 1, NotSerialized) // 16
        {
            Return (\_SB.PCI0.LPCB.EC.ECR1 (Arg0)) //Arg0 = 0x06// 17
            Method (ECR1, 1, NotSerialized) // 18
            {
                If (LEqual (ECRD, Zero)) // Name (ECRD, 0x00), enter here
                {
                    Return (EISC (0x80, Arg0, Zero)) // 19

    Method (EISC, 3, NotSerialized) // 20
        {
            Acquire (ECSX, 0xFFFF)//acquire 1
            Name (ECIB, Buffer (0x04) {})
            CreateByteField (ECIB, Zero, ECIC)
            CreateByteField (ECIB, One, ECP1)
            CreateByteField (ECIB, 0x02, ECP2)
            Store (Arg0, ECIC) //<— here ECIB[0]=0x80
            Store (Arg1, ECP1)//<— here ECIB[1]=0x06
            Store (Arg2, ECP2)//<— here ECIB[2]=0x00
            Store (GENS (0x08, ECIB, SizeOf (ECIB)), ECIB) // 21 //<-- Never return here
      
    Method (GENS, 3, NotSerialized) // 22
        {
        Acquire (SMIX, 0xFFFF)//acquire 2
        Store (Arg1, Local0)
            If (LEqual (ObjectType (Arg1), 0x03)) //<— obj type 3. Enter here
            {
                Store (SMBF (Arg0, Arg1, Arg2), Local0) // 23

        Method (SMBF, 3, NotSerialized) //24
        {
            SNVC (Arg0) // 25
            Divide (Arg2, 0x04, Local0, Local1)//Arg2=4, then l0=0,l1=1
            Store (Zero, Local1)
            While (LLess (Local1, Local0))//not
            {
                SNWB (Arg1, Local1)
                Increment (Local1)
            }            
            While (LLess (Local1, Arg2))//enter here
            {
                SNVP (Arg1, Local1) // 27
                Add (Local1, 0x04, Local1)
            }            
            ASMI () // 29
            Store (Zero, Local1)
            While (LLess (Local1, Local0))
            {
                Store (SNRB (Arg1, Local1), Arg1)
                Increment (Local1)
            }
            // 31. Here is the last debug store written, here it's alive still <------ 
            
            While (LLess (Local1, Arg2))
            {
                // here there is a debug store which is not written
                // any case here 'LLess (Local1, Arg2)' is false
                // any case it doesn't  should enter here 
                Store (SNVG (Arg1, Local1), Arg1)
                Add (Local1, 0x04, Local1)
            }
            // 32. END HERE, here doesn't write anything more. <--------- Here is dead

        Method (SNVC, 1, NotSerialized) // 26
        {
            OperationRegion (WWPR, SystemMemory, SMIB, 0x04)
            Field (WWPR, DWordAcc, Lock, Preserve){SCDW,   32}
            Store (Arg0, SCDW) // store 00 00 00 08  In smib
        }

        Method (SNVP, 2, NotSerialized) // 28
        {
            OperationRegion (WWPR, SystemMemory, Add (Add (SMIB, Arg1), 0x04), 0x04)
            Field (WWPR, ByteAcc, Lock, Preserve){SDW0,   32}
            CreateDWordField (Arg0, Arg1, SVAL)
            Store (SVAL, SDW0)
        }
        Method (ASMI, 0, NotSerialized) // 30
        {
            OperationRegion (SMIR, SystemIO, PSMI, One)
            Field (SMIR, ByteAcc, Lock, Preserve){SCMD,   8}
            Store (0x04, SCMD)
        }

 

And that is all. It's like the aliens do something. It stooping abruptly without a clear reason and disappears in the middle of code execution. No longer will back to work anything of the ACPI. No longer a line of ACPI debug is written.

 

The ACPI dead there, and you can connect or disconnect what you want, usb, display, etc.. but the ACPI doesn't work anymore.

 

In this point, I can see the ACPI code is used for the OS (not Windows) like a schedule of the hardware tree, but given the conditions, the OS do not used that ACPI code anymore.  And the BIOS neither, simply the ACPI doesn't exist because doesn't work, and nobody use it. Before that, you don't back to get a debug line about the ACPI. Of course that include the _Q66 method, which never is called.

 

I made some progress about the topic, by adding a ECDT table which achieve that the _Q66 works in the ACPI events, and now I'm rebuilding the .dsl for make it works, and also I had to change the method PCI0._INI  for avoid it works beyond of OSYS=0x2710. Now I have a big load of ACPI methods that are loaded in the logs, and when the display turn off or on, and when I plug and play any usb, the logs show the ACPI works.

 

This is very short log of the log that now I got from the ACPI when plug and USB (The _Q66 works activated by the BIOS):

Spoiler
2023-08-09 05:44:40.797572+0200  localhost kernel[0]: (AppleACPIPlatform) "myACPIDebug In root._SB.PCI0.IGPU.GNOT.If [id:4589]"
2023-08-09 05:44:40.797612+0200  localhost kernel[0]: (AppleACPIPlatform) "myACPIDebug Return If [id:4589]"
2023-08-09 05:44:40.797686+0200  localhost kernel[0]: (AppleACPIPlatform) "myACPIDebug Out If [id:10319]"
2023-08-09 05:44:40.797731+0200  localhost kernel[0]: (AppleACPIPlatform) "myACPIDebug Out Method.NEVT [id:10228]"
2023-08-09 05:44:40.797783+0200  localhost kernel[0]: (AppleACPIPlatform) "myACPIDebug Return from Method._Q66 [id:9515]"
2023-08-09 05:46:58.864790+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 23:{ICWiredBrowser.m} (USB Device first match)
2023-08-09 05:46:58.866111+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 388:{ICWiredBrowser.m} (7 USB Descriptions Managed)
2023-08-09 05:46:58.868117+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 457:{ICDDMessageCenter.m} (+Add IOUSBHostDevice - 0x0/0x0/0x0 - 0x1d140000 - ICDeviceDescriptionSUQuery)
2023-08-09 05:46:58.868384+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 205:{ICResourceManager.m} (00000000-0000-0000-3534-443045313346|IOUSBHostDevice|(null)|SW=FALSE|)
2023-08-09 05:46:58.869830+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 457:{ICDDMessageCenter.m} (+Add IOUSBHostDevice - 0x0/0x0/0x0 - 0x1d140000 - ICDeviceDescriptionAdded)
2023-08-09 05:47:05.151705+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 37:{ICWiredBrowser.m} (USB Interface first match)
2023-08-09 05:47:05.152405+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 388:{ICWiredBrowser.m} (8 USB Descriptions Managed)
2023-08-09 05:47:05.153706+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 457:{ICDDMessageCenter.m} (+Add IOUSBHostDevice - 0x8/0x6/0x50 - 0x1d140000 - ICDeviceDescriptionSUQuery)
2023-08-09 05:47:05.153730+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 205:{ICResourceManager.m} (00000000-0000-0000-0000-0000058F6387|IOUSBHostDevice|(null)|SW=FALSE|)
2023-08-09 05:47:05.155862+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 457:{ICDDMessageCenter.m} (+Add IOUSBHostDevice - 0x8/0x6/0x50 - 0x1d140000 - ICDeviceDescriptionUndefined)
2023-08-09 05:47:11.356712+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 178:{ICDiskBrowser.m} (Disk Appeared)
2023-08-09 05:47:11.363424+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 178:{ICDiskBrowser.m} (Disk Appeared)
2023-08-09 05:47:11.877030+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 119:{ICDiskBrowser.m} (Disk Changed)
2023-08-09 05:47:11.877054+0200  localhost icdd[520]: (ICALogging) [com.apple.imagecapture:icdd] #ICDebug - 178:{ICDiskBrowser.m} (Disk Appeared)

 

Well, now you know your Dell DSDT does't work anything, and it's readed by the OS like a 'boot component' for have some idea of the hardware system, but the ACPI Dell computer, are designed aware for it doesn't work, and probably after running, if you don't use windows and you use Linux, BSD, Mac , you don't have ACPI anymore, because Dell think you are Idiot and they know what is the better for you, and what OS can you use and what you can not use. 

Link to comment
Share on other sites

Definitely I abandon Hackintosh. 

 

Well, I tried to fix it, but it is highly designed for not working out of the OEM OS.

 

For example this a short list of the GNVS. The GNVS take values different according to the combination ACOS-OSYS. The worse case is given when you select OSYS=0x2710. If you write 2710 in the OSYS reg, the fields of the IGDM, GNVS, and others OperationRegion, will take at least 3 values before 'crash' and corrupt all the OperationsRegion fields.

 

The next are 3 logs of the same boot with OSYS=0x2710.

The first is the value of several fields of GNVS before make any other thing, the first thing that the dsdt do is take the fields value.

The second logs, are the same, but the values are read just after running the OS.

And the 3, is the same, but the values were read 5 min after run.

(There is a lot of fields, so I omit a lot, but the changes are similar some other hundred of fields)

 

This is before Write any thing (OSYS yet hasn't written, It's the default values):

Spoiler
  1. OSYS: 0000000000003A29
    SMIF: 000000000000000D
    PRM0: 0000000000000049
    PRM1: 0000000000000066
    SCIF: 00000000000000C7
    PRM2: 000000000000001E
    PRM3: 000000000000004E
    LCKF: 00000000000000E5
    PRM4: 00000000000000D1
    PRM5: 00000000000000EB
    P80D: 00000000673D95BC
    LIDS: 00000000000000B3
    PWRS: 00000000000000BD
    DBGS: 000000000000004F
    THOF: 0000000000000032
    ACT1: 000000000000007B
    ACTT: 00000000000000CA
    PSVT: 0000000000000053
    TC1V: 0000000000000091
    TC2V: 0000000000000082
    TSPV: 00000000000000A7
    CRTT: 000000000000004C
    DTSE: 000000000000004A
    DTS1: 0000000000000072
    DTS2: 00000000000000C5
    DTSF: 000000000000009A
    REVN: 0000000000000014
    APIC: 00000000000000DD
    TCNT: 00000000000000C5
    PCP0: 0000000000000032
    PCP1: 000000000000009C
    PPCM: 000000000000006C
    PPMF: 000000000F2FC441 

     

 

Now, is just running the OS, OSYS is 2710 how you can see. Also all the values of GNVS have take changes:

Spoiler
OSYS: 0000000000002710
SMIF: 00000000000000C0
PRM0: 0000000000000032
PRM1: 00000000000000CC
SCIF: 0000000000000048
PRM2: 0000000000000092
PRM3: 0000000000000068
LCKF: 0000000000000096
PRM4: 0000000000000001
PRM5: 0000000000000061
P80D: 0000000032CB9C14
LIDS: 0000000000000021
PWRS: 000000000000007C
DBGS: 00000000000000CC
THOF: 00000000000000E9
ACT1: 00000000000000EF
ACTT: 00000000000000EB
PSVT: 000000000000006B
TC1V: 0000000000000090
TC2V: 00000000000000FF
TSPV: 00000000000000A7
CRTT: 00000000000000BF
DTSE: 00000000000000F0
DTS1: 000000000000005E
DTS2: 00000000000000DC
DTSF: 000000000000003E
REVN: 0000000000000099
APIC: 000000000000001A
TCNT: 0000000000000053
PCP0: 000000000000002E
PCP1: 00000000000000C6
PPCM: 000000000000006C
PPMF: 00000000E705F1D9

 


And this is over 5 min after running the OS. All fields are corrupt:

Spoiler
OSYS: 000000000000F0F0
SMIF: 00000000000000F0
PRM0: 00000000000000FF
PRM1: 00000000000000F0
SCIF: 00000000000000F0
PRM2: 00000000000000F0
PRM3: 00000000000000FF
LCKF: 00000000000000F0
PRM4: 00000000000000F0
PRM5: 00000000000000F0
P80D: 00000000F0F0F0FF
LIDS: 00000000000000FF
PWRS: 00000000000000F0
DBGS: 00000000000000F0
THOF: 00000000000000F0
ACT1: 00000000000000FF
ACTT: 00000000000000F0
PSVT: 00000000000000F0
TC1V: 00000000000000F0
TC2V: 00000000000000FF
TSPV: 00000000000000F0
CRTT: 00000000000000F0
DTSE: 00000000000000F0
DTS1: 00000000000000FF
DTS2: 00000000000000F0
DTSF: 00000000000000F0
REVN: 00000000000000F0
APIC: 00000000000000F0
TCNT: 00000000000000F0
PCP0: 00000000000000F0
PCP1: 00000000000000FF
PPCM: 00000000000000F0
PPMF: 00000000F0FFF0F0

 

 

And this still is worse with the long field, for example it's a show other simple comparative example of some fields in the IGDM (Intel Graphics Device):

Before running:

Spoiler
ASLC:00000000FADE87F4
TCHE:000000009F7A6119
ALSI:000000005364DCDF
BCLP:000000008FE4E25E
PFIT:00000000A5F26445
CBLV:0000000076BFE5AC
BCLM:B84A222F8F32F9A646B47E2590A324EDE9AEBE19887940CE514A5AD82CD9A79BB4D12C5B7F746007
CPFM:00000000593C4AD5
EPFM:00000000A04A9437
PLUT:43FB06A77C535A47E1F1CA20F4CA13885FFDCF2CEC77922882ECE71E9AAD6F509FD3400039EFDEBE194E77FE471EBFEB1CDD0DE9DAA9F5EA09188F3BA93BC3FE6CFA16AC72AA28251C0C
PFMB:00000000EAFC8E54
CCDV:000000009A531000
PCFT:00000000690A8EC4
SROT:00000000E88A4228

 

 

the same, little time after running:

Spoiler
ASLC:00000000FFFFFFFF
TCHE:00000000FFFFFFFF
ALSI:00000000FFFFFFFF
BCLP:00000000FFFFFFFF
PFIT:00000000FFFFFFFF
CBLV:00000000FFFFFFFF
BCLM:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
CPFM:00000000FFFFFFFF
EPFM:00000000FFFFFFFF
PLUT:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
PFMB:00000000FFFFFFFF
CCDV:00000000FFFFFFFF
PCFT:00000000FFFFFFFF
SROT:00000000FFFFFFFF

 

 

And, at least for my, the best case is when I select OSYS=Windows 2006 and ACOS 0x20. 

If I try OSYS=Linux and ACOS 0x40, the fields are corrupt in the same way, but with C0 instead of FF,. Almost all the fields take C0C0C0 etc as its value.

If try OSYS=WinXP, then all the digits becomes to 0 and F.

 

So, Ok, it's no viable, and I rather abandon because it could works very fine, but it's designed highly to it not work if the OS is not a Windows, and ok, I can see the display and I can use other OS, but none will work properly, and well, it's all :)

 

Link to comment
Share on other sites

×
×
  • Create New...