Jump to content
chriz74

Asus X55C internal screen only works if HDMI screen plugged in

33 posts in this topic

Recommended Posts

Posted (edited)

Asus laptop X55C with HM76 chipset and HD3000 IGPU, native powermanagent due to unlocked bios. Internal screen works only if HDMI screen is plugged in.
If not then it won't turn on at all, in IOREG I can see if I unplug HDMI also the Internal is unplugged and viceversa.
I am attaching EFI with ACPI origin and patched + ioreg dump.

I also tried to boot from a Sierra installer instead of High Sierra, nothing changes.

It seems the PC thinks the LVDS is unplugged.

 

EFI here https://www.dropbox.com/s/qj20ozndi9towos/EFI.zip?dl=0

 

ioereg at bottom of the post.

 

33651352_ScreenShot2021-01-03at14_42_28.png.49734237d6d140d489e8da2a14a91712.png1035078838_ScreenShot2021-01-03at14_42_58.png.df248066385de9f6ccb4ad9c143b9aed.png

MacBook Pro (1).ioreg

Edited by chriz74
Share this post

You put the DSM method into GFX0 device in DSDT, that was already there in device properties in the plist. What changes did you do to the plist? I can't see any, and what in the DSDT apart that method in GFX0?

Share this post

Posted (edited)

I will try later when I have access to the PC. Anyway the DSDT DSM method in GFX0 and in devices / properties in plist is redundant. There is no need to set inject intel true , we don’t need to inject it. Please check whatevergreen Intel faq. All inject a must be set to NO.
Device is injected through properties. 

The HD3000 is already working with hardware acceleration. It’s not a problem of GPU configuration.  

Edited by chriz74
Share this post

:hysterical: Here's what was injected as _DSM Method in the DSDT:

                Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                {
                    [...]

                    Return (Package (0x06)
                    {
                        "AAPL,snb-platform-id", 
                        Buffer (0x04)
                        {
                             0x00, 0x00, 0x01, 0x00                         
                        }, 

                        "AAPL,ig-platform-id", 
                        Buffer (0x04)
                        {
                             0x03, 0x00, 0x66, 0x01                         
                        }, 

                        "hda-gfx", 
                        Buffer (0x0A)
                        {
                            "onboard-1"
                        }
                    })
                }

:thumbsdown_anim:

 

And, indeed, "InjectIntel" has not been required for years with Lilu + WEG.

 

I'm expecting the answer to be negative but there's no dGPU fitted to this Asus X55C, right?

Share this post

You Know what you don't need whatevegreen Intel HD3000 works without this kext remove it and use a simple config.plist with the patch  DSDT 

Share this post

Yes I know it works however it takes care of other things like second stage screen garble, panel backlight etc.

The DSDT with that patch and injectintel doesn't make any difference.

 

@Hervé, Yep, only IGPU

Share this post

Would be interested to hear what @chris1111 expected as a result of injecting both the SNB platform id 0x00010000 and the Capri platform id 0x01660003... A miracle? :thumbsup_anim:

 

@chriz74, did you try without AsusSMC kext in case it's causing screen to turn off or backlight to be off? You could also try the F5/F6 keys to check any eventual backlight related matter.

Share this post

Yes I just tried. Nothing changes apart Function keys don't work anymore. With the kext F5 F6 and F7 work normally. It doesn't seem to be a backlight problem. As you can see in the pictures the internal display is totally removed from IOREG when I unplug the HDMI one. It gets disconnected. It's almost like LVDS and HDMI are triggered by the HDMI event. I also tried ACPIDebug kext with a patched DSDT with all the methods. Unplugging the DMI screen doesn't log any ACPI event.

Share this post

What you see on disconnecting (or reconnecting) the HDMI display (or any external display) is perfectly normal; there's a general reset of the display outputs and you'd see that on probably all laptops. I certainly do on all mine.

 

If you can, post an IOReg taken remotely (through screen sharing) when your X55C has no external display connected + another IOReg with HDMI connected. Your attachment of post #1 is invalid and triggers a 404 Page Not Found error...

 

The other thing I have in mind is some BIOS option causing this behaviour. May be you can post the list of parameters and their settings.

Share this post

Posted (edited)

here you go. I took 3, first one with no screens, 2nd one after plugging in the external and 3rd after unplugging external.

As you can see the internal is not connected at all. After I unplugged the external the desktop remained extended in remote.

 

Archive.zip

 

screen in remote session after unplugging external:

 

Screenshot 2021-01-05 at 17.56.46.png

 

BIOS: 

Primary Display: IGFX

Internal Graphics: Enabled

GTT Size: 2MB

Aperture Size: 512MB

DVMT Pre-Allocated 64M (32M doesn't make any difference)

DVMT Total Gfx Mem MAX

Gfx Low Power Mode Disabled

Graphics Performance Analyzers Disabled

 

Enable PEG Disabled

 

Edited by chriz74
Share this post

Your EFI is completely wrong you use clover r5127 without Quirks, why not use a old clover revision

Why ask for help if you think you have the truth I can send you 10 HD 3000 laptop config with the same patch and their screen is functional and the HDMI works in addition

Share this post

No you injected device 166003 which is HD4000. The correct patch would be

into method label _DSM parent_adr 0x00020000 remove_entry;
into device name_adr 0x00020000 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "AAPL,snb-platform-id", Buffer() { 0x00, 0x00, 0x01, 0x00 },\n
        "hda-gfx", Buffer() { "onboard-1" },\n
    })\n
}\n
end;

By the way using those quirks produced complete hang at boot.

Share this post

Posted (edited)

I inject this patch

#Maintained by: RehabMan 
#graphics_HD3K_low.txt

 

#Maintained by: RehabMan for: Laptop Patches
#graphics_HD3K_low.txt
#
# Use this patch if your laptop has the standard 1366x768 screen
#
# Use dual-link if you have 1600x900 or have upgraded
# to 1080p screen.
#
#   Inject HDMI info into GFX0/IGPU
into method label _DSM parent_adr 0x00020000 remove_entry;
into device name_adr 0x00020000 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "AAPL,snb-platform-id", Buffer() { 0x00, 0x00, 0x01, 0x00 },\n
        "hda-gfx", Buffer() { "onboard-1" },\n
    })\n
}\n
end;

 

Edited by chris1111
Share this post

nope you injected this, check the DSDT you attached.

Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                {
                    If (LEqual (Arg2, Zero))
                    {
                        Return (Buffer (One)
                        {
                             0x03                                           
                        })
                    }

                    Return (Package (0x06)
                    {
                        "AAPL,snb-platform-id", 
                        Buffer (0x04)
                        {
                             0x00, 0x00, 0x01, 0x00                         
                        }, 

                        "AAPL,ig-platform-id", 
                        Buffer (0x04)
                        {
                             0x03, 0x00, 0x66, 0x01                         
                        }, 

                        "hda-gfx", 
                        Buffer (0x0A)
                        {
                            "onboard-1"
                        }
                    })
                }

 

Share this post

Posted (edited)

If so This is weird !! I deleted weird garbage file

you know what I wanted to do now

 

Spoiler



#Maintained by: RehabMan for: Laptop Patches
#graphics_HD3K_low.txt
#
# Use this patch if your laptop has the standard 1366x768 screen
#
# Use dual-link if you have 1600x900 or have upgraded
# to 1080p screen.
#
#   Inject HDMI info into GFX0/IGPU
into method label _DSM parent_adr 0x00020000 remove_entry;
into device name_adr 0x00020000 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "AAPL,snb-platform-id", Buffer() { 0x00, 0x00, 0x01, 0x00 },\n
        "hda-gfx", Buffer() { "onboard-1" },\n
    })\n
}\n
end;

 

 

Edited by chris1111
I deleted Garbage file
Share this post

@chris1111, I'm relieved the patched DSDT you had proposed was in fact undesirably incorrect. But, you missed the point that chriz74's injected properties sufficed so your proposed patched DSDT and clover config bring absolutely nothing new or that could improve or fix things. This being said, I'd agree that Clover r5127 is probably not the best version to use given its targeted purpose (Big Sur) and that it's been buggy for many systems running previous macOS versions. But, at the same time, r5127 boots this Asus X55C properly so...

 

Anyway, @chriz74 could replace it by proven/validated previous versions such as r5107, r5119 or r5122, latter being the last version before BS-related Quirks were added. r5122 certainly is the last version that worked without any issues whatsoever on all my Hacks. It's a simple matter of installing the older version over r5127.

 

Going back to your posted IORegs, I looked at the graphics data in details and compared them with my own Sandy Bridge/HD3000 Dell Latitude E6220 that runs High Sierra. My findings are as follows:

1) IOReg #1 (no external display connected)

  • IGPU@2
    • All looks perfectly Ok
    • AAPL,snb-platform-id set to 00000100
    • Device-id is 0116
  • FB@0
    • No connected display when we would expect the built-in LCD here!
    • AAPL,DisplayPipe set to FFFF0000 when we would expect 00000000
    • Connector-type set to 02000000 (LVDS/eDP)
    • AAPL,boot-display set to True
    • Port-number set to 00
  • FB@1
    • No connected display as expected
    • AAPL,DisplayPipe set to FFFF000
    • Connector-type set to 00080000 (HDMI)
    • Port-number set to 05
  • FB@2
    • No connected display as expected as expected
    • AAPL,DisplayPipe set to FFFF000
    • Connector-type set to 00080000 (HDMI)
    • Port-number set to 06
  • FB@3
    • No connected display as expected
    • AAPL,DisplayPipe set to FFFF000
    • Connector-type set to 00080000 (HDMI)
    • Port-number set to 07

 

2) IOReg #2 (HDMI display connected)

  • FB@0
    • Connected display (built-in LCD here)
    • AAPL,DisplayPipe set to 01000000
  • FB@1
    • Unchanged, nothing connected
  • FB@2
    • Connected display (HDMI here)
    • AAPL,DisplayPipe set to 00000000
  • FB@3
    • Unchanged, nothing connected

 

3) IOReg #3 (HDMI display disconnected)

  • FB@0
    • No connected display
    • AAPL,DisplayPipe back to FFFF0000
    • back to same as in IOReg #1
  • FB@1
    • Unchanged, nothing connected
  • FB@2
    • No connected display
    • AAPL,DisplayPipe back to FFFF0000
    • back to same as in IOReg #1
  • FB@3
    • Unchanged, nothing connected

 

 

Here is what I observe on my Latitude E6220 with vanilla SNB framebuffer:

1) No external display connected

  • IGPU@2
    • AAPL,snb-platform-id set to 00000100
    • Device-id is 0126 (I can inject device id 0116 and it makes no difference at all)
  • FB@0
    • Connected display (built-in LCD)
    • AAPL,DisplayPipe set to 00000000
    • Connector-type set to 02000000 (LVDS/eDP)
    • AAPL,boot-display set to True
    • Port-number set to 00
  • FB@1
    • No connected display as expected
    • AAPL,DisplayPipe set to FFFF000
    • Connector-type set to 00080000 (HDMI)
    • Port-number set to 05
  • FB@2
    • No connected display as expected as expected
    • AAPL,DisplayPipe set to FFFF000
    • Connector-type set to 00080000 (HDMI)
    • Port-number set to 06
  • FB@3
    • No connected display as expected
    • AAPL,DisplayPipe set to FFFF000
    • Connector-type set to 00080000 (HDMI)
    • Port-number set to 07

 

2) HDMI display connected

  • FB@0
    • Connected display (built-in LCD here)
    • AAPL,DisplayPipe set to 00000000
  • FB@1
    • Connected display (HDMI here)
    • AAPL,DisplayPipe set to 01000000
    • Connector-type set to 00080000 (HDMI)
  • FB@2
    • Unchanged, nothing connected
  • FB@3
    • Unchanged, nothing connected

3) HDMI display disconnected

-> Back to same as 1st situation

 

4) DVI display connected (via Docking Station)

  • FB@0
    • Connected display (built-in LCD here)
    • AAPL,DisplayPipe set to 00000000
  • FB@1
    • Unchanged, nothing connected
  • FB@2
    • Unchanged, nothing connected
  • FB@3
    • Connected display (DVI here)
    • AAPL,DisplayPipe set to 01000000

5) DVI display disconnected (from Docking station)

-> Back to same as 1st situation

 

 And with the SNB framebuffer patched for VGA output (3rd connector 03040000 00040000 patched to 06020000 00010000):

6) VGA display connected

  • FB@0
    • Connected display (built-in LCD here)
    • AAPL,DisplayPipe set to 00000000
  • FB@1
    • Unchanged, nothing connected
  • FB@2
    • Connected display (VGA here)
    • AAPL,DisplayPipe set to 01000000 (already set to that when not connected)
    • Connector-type set to 00010000 (VGA)
  • FB@3
    • Unchanged, nothing connected

7) DVI display disconnected

-> Back to same as initial situation when no external display is connected

 

 

Now, on all the Dell Latitude laptops that I've used (Sandy Bridge E6220, Ivy Bridge E6230, Haswell E6440, Broadwell E7250, Skylake E7270 and Kaby Lake R 7490), all running on the Intel iGPU, HDMI has always and consistently connected to FB@1, not FB@2 as seen on your Asus X55C. HD3000 only supports 2 x simultaneous displays of course but in the case of my E6220, I've always had:

  • con0 -> built-in LCD (OOB)
  • con1 -> HDMI (OOB)
  • con2 -> VGA (with patch)
  • con3 -> DVI (OOB)

Bearing in mind that the vanilla layout 0x00010000 is as follows:

ID: SNB0 0x10000, STOLEN: 0 bytes, FBMEM: 0 bytes, VRAM: 0 bytes, Flags: 0x00000000
TOTAL STOLEN: 0 bytes, TOTAL CURSOR: 1 MB, MAX STOLEN: 0 bytes, MAX OVERALL: 1 MB (1064960 bytes)
Camellia: CamelliaUnsupported (255), Freq: 1808 Hz, FreqMax: 1808 Hz
Mobile: 1, PipeCount: 2, PortCount: 4, FBMemoryCount: 0
[5] busId: 0x03, pipe: 0, type: 0x00000002, flags: 0x00000030 - ConnectorLVDS
[2] busId: 0x05, pipe: 0, type: 0x00000400, flags: 0x00000007 - ConnectorDP
[3] busId: 0x04, pipe: 0, type: 0x00000400, flags: 0x00000009 - ConnectorDP
[4] busId: 0x06, pipe: 0, type: 0x00000400, flags: 0x00000009 - ConnectorDP
05030000 02000000 30000000
02050000 00040000 07000000
03040000 00040000 09000000
04060000 00040000 09000000

We know from your IOReg outputs that, on your Asus X55C:

  • con0 -> built-in LCD (but not active OOB)
  • con2 -> HDMI (OOB) but seems to be prime display (but not boot screen)
  • con1 and con3 remaining to be determined, if at all usable.

So I think the SNB framebuffer connectors must be patched in order to swap the values of the AAPL,DisplayPipe parameter because it's as if value 00000000 is main screen and value 00010000 is 2nd screen which, of course, can only be activated after the 1st one. Now, the easiest way to do this may be to cunningly try and swap out the connectors through the following properties injection for iGPU@2:

AAPL,snb-platform-id        00000100                    DATA
framebuffer-patch-enable    01000000                    DATA
framebuffer-con0-enable     1                           NUMBER
framebuffer-con0-alldata    030400000008000009000000    DATA
framebuffer-con2-enable     1                           NUMBER
framebuffer-con2-alldata    050300000200000030000000    DATA

Give that a try in case the DisplayPipe is attached to the connector #, though it probably isn't. Failing that, you must find another way to set con0's AAPL,DisplayPipe to 0.

Share this post

Thanks I will try tomorrow. Meanwhile in a general guide for hackintool I found you can specify the pipe for connectors like this:

<key>framebuffer-con0-pipe</key> <data> EgAAAA== </data>

 

So maybe it’s just a matter of setting the correct pipe for each connector.

Share this post

No, afaik that's a different thing (the actual pipe value of the connector), not the AAPL,DisplayPipe we see in IOReg. But I'd be happy to be wrong. :-)

ID: SNB0 0x10000, STOLEN: 0 bytes, FBMEM: 0 bytes, VRAM: 0 bytes, Flags: 0x00000000
TOTAL STOLEN: 0 bytes, TOTAL CURSOR: 1 MB, MAX STOLEN: 0 bytes, MAX OVERALL: 1 MB (1064960 bytes)
Camellia: CamelliaUnsupported (255), Freq: 1808 Hz, FreqMax: 1808 Hz
Mobile: 1, PipeCount: 2, PortCount: 4, FBMemoryCount: 0
[5] busId: 0x03, pipe: 0, type: 0x00000002, flags: 0x00000030 - ConnectorLVDS
[2] busId: 0x05, pipe: 0, type: 0x00000400, flags: 0x00000007 - ConnectorDP
[3] busId: 0x04, pipe: 0, type: 0x00000400, flags: 0x00000009 - ConnectorDP
[4] busId: 0x06, pipe: 0, type: 0x00000400, flags: 0x00000009 - ConnectorDP

Index    Connector-type
|| BusId     ||      Flags
|| || Pipe   ||       ||
|| ||  ||    ||       ||
\/ \/  \/    \/       \/
05|03|0000 02000000 30000000
02|05|0000 00040000 07000000
03|04|0000 00040000 09000000
04|06|0000 00040000 09000000

 

Share this post

×