Jump to content

daniel_k

Member
  • Posts

    144
  • Joined

  • Days Won

    2
  • Donations

    0.00 USD 
  • Country

    Brazil

Posts posted by daniel_k

  1. On 12/11/2022 at 10:56 PM, Mov AX, 0xDEAD said:

    Hi Daniel,

    Just for extreme fun, i will try run QEMU or Bochs with max 32 cores :)

    Yes, please. :worship:

    Noticed something interesting that may be related.
    CPU name reported by CPUID is longer for 11th gen and later processors when compared to 10th gen:

          Intel(R) Core(TM) i9-10900 CPU @ 2.80GHz
    11th Gen Intel(R) Core(TM) i7-11900K @ 3.50GHz

    Can you spoof the CPU name?
    Maybe longer name and increased number of cores break something?

    Would be nice if you could try to load XP x64 Setup to see if it hangs.

  2. 3 hours ago, Mov AX, 0xDEAD said:

    OK, seems issue doesn't depend on multicores run. I asked to test because when i played with last acpi.sys in debugger, breakpoint was triggered on same asm opcode from different threads, so i thinked this may be "race condition" problem in patch

    Probablly the same issue I have with XP x64, the difference it's that x86 always runs, while x64 hangs randomly during boot.

    It's a long shot, but I think the issue may be related to where Windows stores processor definitions (limited size)?
    Vista and later versions are not affected by this too many cores issue.

  3. Regarding Windows XP, even with the source code of acpi.sys, support for Processor Aggregator device won't even happen because you'd need to rewrite processor power management support entirely.

    acpi.sys properly parses Processor object, then Intelppm.sys / amdk8.sys / Processr.sys use _CST, _PCT, _PSS and _PPC methods to manage power management / performance states.

    So it's "easier" to fix the ACPI tables.

  4. @canonkong

    Your mod is correct.

    The problem is that the Processor Aggregator device (ACPI000C) treats the cores as ACPI devices.
    As you've seen from your tests, it's only supported by Windows 8.0 or later (ACPI 5.0+).

    From what I've read, this was created for ARM, but was "ported" to x86.

    XP supports ACPI 1.0 plus 2.0 processor support
    Vista/7 supports ACPI 2.0 plus 3.0 processor support

    Interesting doc about Processor Power Management in Windows 7:
    https://download.microsoft.com/download/3/0/2/3027D574-C433-412A-A8B6-5E0A75D5B237/ProcPowerMgmtWin7.docx

    For Ryzen, maybe can be fixed by porting processor related code from working boards.

    For Alder Lake, maybe can be fixed by looking at Hackintosh patches.

  5. 6 hours ago, Damnation said:

    @Dietmar@Mov AX, 0xDEAD

    Yes!! :cheerleader::thumbup

    Using grub2 I did a DSDT and SSDT ACPI table modification and I can now confirm with 100% certainty that this ACPI0010 "ACPI Processor Container" Device is the cause of the issue!

    https://imgbb.com/ZLJWbfH

    spacer.png

    I know you're not motivated at all @Mov AX, 0xDEAD but a permanent fix implemented through acpi.sys would still be very much appreciated.

     

    Seriously, stop! How old are you?
    Do yourself a favor and seek help.

    It's not the first time you ask @Dietmar to buy some hardware just to (try to) fix something for you.
    Do you even think before asking such questions?

    Now you're trying to persuade @Mov AX, 0xDEAD to fix your Processor power management issue.
    Your screenshot is so fake. You didn't accomplish anything because I know you can't.

    Here is a real screenshot from VirtualBox:
    spacer.png

    Notice the CPU model in every enumerated processor?

  6. On 7/7/2022 at 3:12 PM, Mov AX, 0xDEAD said:

    @daniel_k

    no IFR setting -> to hard to 1) find exact uefi module 2) find inject place inside module

    in old leaked AMI UEFI sources, tolud used in NBPEI.c/NBPEIBoard.c, i dont know name of final module

    Thanks, I've found the probable module, but I'll just leave it as is.
    Don't have much time to mess with these things and I use this computer to work.

  7. @Mov AX, 0xDEAD

    I have two questions for you.

    For x86, unfortunately, Gigabyte removed the TOLUD (Top of Low Usable DRAM) setting, there is nothing hidden that I can change regarding reserved memory.
    Any ideas of how to find the module responsible for this?

    For x64, we don't have a ported Win8 LAN debug. Can you please try to add these 20 processors to your VM testing and see if XP x64 (setup) fails to boot?
    Or please explain what software (hypervisor) you use and how to mod the ACPI tables?

  8. @Mov AX, 0xDEAD

    Sorry for the delay, I was really busy.

    The board was defective and I was doing a mess with the acpi.sys versions. :crazy:
    Fortunately, Amazon gives a whole month to return the board, so got a working replacement.

    Specs:

    • i7-11700K
    • 16 GB
    • Gigabyte Z490 AORUS PRO AX

    You latest acpi.sys works perfectly,
    Surprisingly, even standby works on this board!

    Sadly, don't know if because of SLI/Crossfire or Thunderbolt support, reserved memory eats almost all of my RAM, only 916 MB available. :(

    For x64, there is a strange behavior, text mode setup hangs unless it is in UniProcessor mode (disable HT and only one core enabled in BIOS).
    After install, XP x64 also hangs when loading (logo) if I reenable HT and all cores.

    My processor has 8 cores/16 threads, so I did a test and "removed" support for additional cores (11900K has 10 cores/20 threads) from all ACPI tables.

    DSDT:
     

    Quote

    From 20 "cores/threads"
     

            Processor (PR00, 0x01, 0x00001810, 0x06) {}
            Processor (PR01, 0x02, 0x00001810, 0x06) {}
            Processor (PR02, 0x03, 0x00001810, 0x06) {}
            Processor (PR03, 0x04, 0x00001810, 0x06) {}
            Processor (PR04, 0x05, 0x00001810, 0x06) {}
            Processor (PR05, 0x06, 0x00001810, 0x06) {}
            Processor (PR06, 0x07, 0x00001810, 0x06) {}
            Processor (PR07, 0x08, 0x00001810, 0x06) {}
            Processor (PR08, 0x09, 0x00001810, 0x06) {}
            Processor (PR09, 0x0A, 0x00001810, 0x06) {}
            Processor (PR10, 0x0B, 0x00001810, 0x06) {}
            Processor (PR11, 0x0C, 0x00001810, 0x06) {}
            Processor (PR12, 0x0D, 0x00001810, 0x06) {}
            Processor (PR13, 0x0E, 0x00001810, 0x06) {}
            Processor (PR14, 0x0F, 0x00001810, 0x06) {}
            Processor (PR15, 0x10, 0x00001810, 0x06) {}
            Processor (PR16, 0x11, 0x00001810, 0x06) {}
            Processor (PR17, 0x12, 0x00001810, 0x06) {}
            Processor (PR18, 0x13, 0x00001810, 0x06) {}
            Processor (PR19, 0x14, 0x00001810, 0x06) {}

    To 16 "cores/threads"
     

            Processor (PR00, 0x01, 0x00001810, 0x06) {}
            Processor (PR01, 0x02, 0x00001810, 0x06) {}
            Processor (PR02, 0x03, 0x00001810, 0x06) {}
            Processor (PR03, 0x04, 0x00001810, 0x06) {}
            Processor (PR04, 0x05, 0x00001810, 0x06) {}
            Processor (PR05, 0x06, 0x00001810, 0x06) {}
            Processor (PR06, 0x07, 0x00001810, 0x06) {}
            Processor (PR07, 0x08, 0x00001810, 0x06) {}
            Processor (PR08, 0x09, 0x00001810, 0x06) {}
            Processor (PR09, 0x0A, 0x00001810, 0x06) {}
            Processor (PR10, 0x0B, 0x00001810, 0x06) {}
            Processor (PR11, 0x0C, 0x00001810, 0x06) {}
            Processor (PR12, 0x0D, 0x00001810, 0x06) {}
            Processor (PR13, 0x0E, 0x00001810, 0x06) {}
            Processor (PR14, 0x0F, 0x00001810, 0x06) {}
            Processor (PR15, 0x10, 0x00001810, 0x06) {}

     

    Also removed references to PR16~PR19 from other SSDT tables.
    With these changes, sometimes it restarts but eventually XP x64 loads properly with all cores / HT enabled.

     

  9. @Mov AX, 0xDEAD

    Enabled Trace, but top of log is cut off and it ends with Stop 0x7E @ ACPI.sys ( ACPI!ConPrintf+2d)

    So sad.

    Any ideas?

    PS: Do you still have your original source of XP SP3 acpi.sys without the ACPI2+ fixes?
    If you do, can you please build a debug version of it for me, please? Maybe it doesn't crash like the checked version from MS.

    Z490Trace.7z

  10. @Mov AX, 0xDEAD

    Can you help me, please?

    How do I know the ACPI code/opcode that causes the crash? I want to learn.

    I've run a kernel debug session with the checked version of acpi.sys SP3.

    It runs AsyncEvalObject on all Devices.

    AsyncEvalObject(\_SB.AWAC._STA) seems to succeed, but something happen before showing processing device, which should be DSC0?

    f6d60283: Device(AWAC)OSNotifyCreate: 850EF760 (AWAC) = 00000103
    ...
    f6d6222f: Device(DSC0)OSNotifyCreate: 850F4344 (DSC0) = 00000103

    Z490.7z

  11. 1 hour ago, Dietmar said:

    Seems to be a problem with hdaudbus.sys in XP SP3 and this version of the Realtek device.

    Unfortunately, I'm almost 100% sure it's not.

    Probably related to GPIO, again.

    Related code in DSDT, HDA device:
     

    Quote

            Device (HDEF)
            {
                Name (_ADR, 0x001B0000)  // _ADR: Address
                OperationRegion (HDAR, PCI_Config, 0x4C, 0x10)
                Field (HDAR, WordAcc, NoLock, Preserve)
                {
                    DCKA,   1, 
                    Offset (0x01), 
                    DCKM,   1, 
                        ,   6, 
                    DCKS,   1, 
                    Offset (0x08), 
                    Offset (0x09), 
                    PMEE,   1, 
                        ,   6, 
                    PMES,   1
                }

                Method (_STA, 0, NotSerialized)  // _STA: Status
                {
                    If (LEqual (HDAD, Zero))
                    {
                        Return (0x0F)
                    }

                    Return (Zero)
                }

                Method (_DSW, 3, NotSerialized)  // _DSW: Device Sleep Wake
                {
                }
            }


    Virtual GPIO Controller may change HDAD variable:

    Quote

            Device (GPED)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Name (_HID, "INT0002" /* Virtual GPIO Controller */)  // _HID: Hardware ID
                Name (_CID, "INT0002" /* Virtual GPIO Controller */)  // _CID: Compatible ID
                Name (_DDN, "Virtual GPIO controller")  // _DDN: DOS Device Name
                Name (_UID, One)  // _UID: Unique ID
                Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings
                {
                    Name (RBUF, ResourceTemplate ()
                    {
                        Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, )
                        {
                            0x00000009,
                        }
                    })
                    Return (RBUF) /* \_SB_.GPED._CRS.RBUF */
                }

                Method (_STA, 0, NotSerialized)  // _STA: Status
                {
                    Return (Zero)
                }

                Method (_AEI, 0, Serialized)  // _AEI: ACPI Event Interrupts
                {
                    Name (RBUF, ResourceTemplate ()
                    {
                        GpioInt (Edge, ActiveHigh, ExclusiveAndWake, PullDown, 0x0000,
                            "\\_SB.GPED", 0x00, ResourceConsumer, ,
                            )
                            {   // Pin list
                                0x0002
                            }
                    })
                    Return (RBUF) /* \_SB_.GPED._AEI.RBUF */
                }

                Method (_E02, 0, NotSerialized)  // _Exx: Edge-Triggered GPE
                {
                    If (LEqual (PWBS, One))
                    {
                        Store (One, PWBS) /* \PWBS */
                    }

                    If (LEqual (PMEB, One))
                    {
                        Store (One, PMEB) /* \PMEB */
                    }

                    If (LEqual (^^PCI0.SATA.PMES, One))
                    {
                        Store (One, ^^PCI0.SATA.PMES) /* \_SB_.PCI0.SATA.PMES */
                        Notify (^^PCI0.SATA, 0x02) // Device Wake
                    }

                    If (LAnd (LEqual (^^PCI0.EM41.PMES, One), LEqual (PCIM, One)))
                    {
                        Store (One, ^^PCI0.EM41.PMES) /* \_SB_.PCI0.EM41.PMES */
                        Notify (^^PCI0.EM41, 0x02) // Device Wake
                    }

                    If (LAnd (LEqual (^^PCI0.EM45.PMES, One), LEqual (PCIM, One)))
                    {
                        Store (One, ^^PCI0.EM45.PMES) /* \_SB_.PCI0.EM45.PMES */
                        Notify (^^PCI0.EM45, 0x02) // Device Wake
                    }

                    If (LEqual (HDAD, Zero))
                    {
                        If (LEqual (^^PCI0.HDEF.PMES, One)) >>> IF THIS CHECK FAILS, WILL NOT WAKE HDA CONTROLLER
                        {
                            Store (One, ^^PCI0.HDEF.PMES) /* \_SB_.PCI0.HDEF.PMES */
                            Notify (^^PCI0.HDEF, 0x02) // Device Wake
                        }
                    }

                    If (LEqual (^^PCI0.EHC1.PMES, One))
                    {
                        Store (One, ^^PCI0.EHC1.PMES) /* \_SB_.PCI0.EHC1.PMES */
                        Notify (^^PCI0.EHC1, 0x02) // Device Wake
                    }

                    If (LEqual (^^PCI0.XHC1.PMES, One))
                    {
                        Store (One, ^^PCI0.XHC1.PMES) /* \_SB_.PCI0.XHC1.PMES */
                        Notify (^^PCI0.XHC1, 0x02) // Device Wake
                    }

                    If (LEqual (^^PCI0.SEC0.PMES, One))
                    {
                        Or (^^PCI0.SEC0.PMES, Zero, ^^PCI0.SEC0.PMES) /* \_SB_.PCI0.SEC0.PMES */
                        Notify (^^PCI0.SEC0, 0x02) // Device Wake
                    }
                }
            }

    As GPIO code is not properly parsed, may result in malfunctional devices.

    Hmm, it seems that Method (_E02, 0, NotSerialized)  // _Exx: Edge-Triggered GPE may not be executed at all?
    Can't find any document saying that XP supports this?

  12. 1 hour ago, Dietmar said:

    EDIT: How do you modd DSDT for Enable IO MWAIT Redirection (fixes CPU C states) ?

    This I dont have.

    Can you upload here your original DSDT from Gigabyte together with the modded DSDT?

    It's not a DSDT modification.
    You need to change default BIOS settings (EFI Setup variables, AMI default setting and IFR default setting) because Enable IO MWAIT Redirection it's not visible in BIOS Setup.

    The same way with Enable TCO Timer (fixes ACPI timer), don't need to patch FACP table.

    I'll send you the files later.

  13. 15 minutes ago, Dietmar said:

    PS: So, when the same happens again for another unknown >acpi2.0 word,

    you only need to do the same patch in parse.c again via its special byte code.

    Yes, but you need to read ACPI specs (pdf) to understand the number of fields of the structure, their size etc.

    You can't just copy and paste.

    Quote

        // Connection Field
        if (*pctxt->pbOp == 0x02) {
            PUCHAR pbOp = pctxt->pbOp + 1;

            if (*pbOp == 0x11) {                            // Buffer()
                ULONG dwcbBits;
                pbOp++;
                dwcbBits = ParsePackageLen(&pbOp, NULL);
                pctxt->pbOp += dwcbBits;
                pctxt->pbOp += 2;   //  0x02, 0x11, [...] -> skips 2 bytes
            } else {                                        // Name()
                pctxt->pbOp += 4;   //  name len -> skips 4 bytes
                pctxt->pbOp += 1;   //  0x02, name -> skips 1 byte
            }
        }

     

×
×
  • Create New...