Yosemite DP6 with HD4600

I have very little time to explain what I did, but here is one of the framebuffers that works for me – edit the frame buffers for your setup, follow the links under ‘See also’ for additional information.

Note: 0x0d220003 is just an example – my first Haswell boot was done with 0x0c260000 (see also: Intel HD4600 with full resolution) but I changed it to 0x0a160000 the same day (see _DSM method) but now I let RevoBoot inject 0x04120000.

AAPL,ig-platform-id: 0x0d220003 located @ 296688
———————————————————

00486f0: 0300 220d 0003 0303 0000 0002 0000 3001
0048700: 0000 6000 0000 0060 9914 0000 9914 0000
0048710: 0000 0000 0000 0000 0000 0800 0001 0000
0048720: 3000 0000 0105 0800 0008 0000 0600 0000
0048730: 0204 0a00 0002 0000 8700 0000 ff00 0000
0048740: 0100 0000 4000 0000 0f00 0000 0101 0000
0048750: 0400 0000 0000 0000 0000 0000 0000 0000
0048760: 0000 0000 0000 0000 0000 0000 0e00 0000

AAPL,ig-platform-id = 0300 220d
fStolenMemorySize: 00 00 00 02 = 0x2000000 = 32 MB
fFramebufferMemorySize: 00 00 30 01 = 0x1300000 = 19 MB
fCursorBytes: 00 00 60 00 = 0x600000 = 6291456 / 10 = 629145
VRAM: 00 00 00 60 = 1536 MB
fBacklightFrequency = 9914 00 00 = 5273
fBacklightMax = 9914 0000 = 5273
connector-type: three different connector types are being used here:
0001 0000 = VGA
0008 0000 = HDMI
0002 0000 = DVI

Tip: VRAM (Video RAM) is not the (UEFI) BIOS settings. That is ‘fStolenMemorySize’. Representing the amount of pre-allocated DRAM memory to support the IGPU in VGA (non-linear) and Native (linear) modes. Not that you need it, because VGA is disabled.

Update

Still not perfect, but this one is getting close:

00486f0: 0300 220d 0003 0403 0000 0002 0000 3001
0048700: 0000 9000 0000 0060 9914 0000 9914 0000
0048710: 0000 0000 0000 0000 0000 0800 0001 0000
0048720: 3000 0000 0105 0800 0008 0000 0600 0000
0048730: 0204 0a00 0002 0000 8700 0000 0306 0900
0048740: 0004 0000 4000 0000 d600 0000 0505 0000
0048750: 0400 0000 0000 0000 0000 0000 0000 0000
0048760: 0000 0000 0000 0000 0000 0000 0e00 0000

HDMI only (1 active frame buffer)

00486f0: 0300 220d 0103 0103 0000 0002 0000 3001
0048700: 0000 9000 0000 0060 9914 0000 9914 0000
0048710: 0000 0000 0000 0000 0105 0a00 0008 0000
0048720: 0600 0000 ff00 0000 0000 0000 0000 0000
0048730: ff00 0000 0000 0000 0000 0000 ff00 0000
0048740: 0000 0000 4000 0000 d600 0000 0505 0000
0048750: 0400 0000 0000 0000 0000 0000 0000 0000
0048760: 0000 0000 0000 0000 0000 0000 0e00 0000

DVI only (1 active frame buffer)

00486f0: 0300 220d 0103 0103 0000 0002 0000 3001
0048700: 0000 9000 0000 0060 9914 0000 9914 0000
0048710: 0000 0000 0000 0000 0204 0a00 0002 0000
0048720: 8700 0000 ff00 0000 0000 0000 0000 0000
0048730: ff00 0000 0000 0000 0000 0000 ff00 0000
0048740: 0000 0000 4000 0000 d600 0000 0505 0000
0048750: 0400 0000 0000 0000 0000 0000 0000 0000
0048760: 0000 0000 0000 0000 0000 0000 0e00 0000

DP only (1 active frame buffer)

00486f0: 0300 220d 0103 0103 0000 0002 0000 3001
0048700: 0000 9000 0000 0060 9914 0000 9914 0000
0048710: 0000 0000 0000 0000 0306 0a00 0004 0000
0048720: 0000 0000 ff00 0000 0000 0000 0000 0000
0048730: ff00 0000 0000 0000 0000 0000 ff00 0000
0048740: 0000 0000 4000 0000 d600 0000 0505 0000
0048750: 0400 0000 0000 0000 0000 0000 0000 0000
0048760: 0000 0000 0000 0000 0000 0000 0e00 0000

That should get you started:

1.) No boot loader changes!
2.) No reboot.
3.) No frame buffer crashes.
4.) Boot with single DVI/HDMI/DP connector possible.
5.) Connects to pipe 0.
6.) APPL,boot-display property (Boolean) set to True.
7.) IOFBNeedsRefresh property (Boolean) set to False.

Yosemite_AppleIntelFramebufferAzul_DP6

Output of my Intel Register Dumper for OS X:

HSW_PWR_WELL_CTL1 : 0xc0000000
HSW_PWR_WELL_CTL2 : 0x40000000
HSW_PWR_WELL_CTL3 : 0x40000000
HSW_PWR_WELL_CTL4 : 0x40000000
HSW_PWR_WELL_CTL5 : 0x0004050f
HSW_PWR_WELL_CTL6 : 0x00000000
PIPE_DDI_FUNC_CTL_A : 0xa1010200 (enabled, DDIC, DVI, 8 bpc, -VSync, +HSync, EDP A ON, x1)
PIPE_DDI_FUNC_CTL_B : 0x00030000 (disabled, no port, HDMI, 8 bpc, +VSync, +HSync, EDP A ON, x1)
PIPE_DDI_FUNC_CTL_C : 0x00030000 (disabled, no port, HDMI, 8 bpc, +VSync, +HSync, EDP A ON, x1)
PIPE_DDI_FUNC_CTL_EDP: 0x00030000 (disabled, no port, HDMI, 8 bpc, +VSync, +HSync, EDP A ON, x1)
DP_TP_CTL_A : 0x00000000
DP_TP_CTL_B : 0x00000000
DP_TP_CTL_C : 0x00000000
DP_TP_CTL_D : 0x00000000
DP_TP_CTL_E : 0x00000000
DP_TP_STATUS_A : 0x00000000
DP_TP_STATUS_B : 0x00000000
DP_TP_STATUS_C : 0x00000000
DP_TP_STATUS_D : 0x00000000
DP_TP_STATUS_E : 0x00000000
DDI_BUF_CTL_A : 0x00000080 (disabled not reversed x1 not detected)
DDI_BUF_CTL_B : 0x00000000 (disabled not reversed x1 not detected)
DDI_BUF_CTL_C : 0x80000000 (enabled not reversed x1 not detected)
DDI_BUF_CTL_D : 0x00000000 (disabled not reversed x1 not detected)
DDI_BUF_CTL_E : 0x00000000 (disabled not reversed x1 not detected)
SPLL_CTL : 0x00000000
LCPLL_CTL : 0x44000037
WRPLL_CTL1 : 0xb01e0811
WRPLL_CTL2 : 0x00202418
PORT_CLK_SEL_A : 0xe0000000 (None)
PORT_CLK_SEL_B : 0xe0000000 (None)
PORT_CLK_SEL_C : 0x80000000 (WRPLL 1)
PORT_CLK_SEL_D : 0xe0000000 (None)
PORT_CLK_SEL_E : 0xe0000000 (None)
PIPE_CLK_SEL_A : 0x60000000 (DDIC)
PIPE_CLK_SEL_B : 0x00000000 (None)
PIPE_CLK_SEL_C : 0x00000000 (None)
SFUSE_STRAP : 0x00000007 (display enabled, crt no, lane reversal no, port b yes, port c yes, port d yes)
PIPEASRC : 0x068f0419 (1680, 1050)
DSPACNTR : 0xd8000400 (enabled)
DSPASTRIDE : 0x00001c00 (112)
DSPASURF : 0x10261000
DSPATILEOFF : 0x00000000 (0, 0)
PIPEBSRC : 0x00000000 (1, 1)
DSPBCNTR : 0x00000000 (disabled)
DSPBSTRIDE : 0x00000000 (0)
DSPBSURF : 0x00000000
DSPBTILEOFF : 0x00000000 (0, 0)
PIPECSRC : 0x00000000 (1, 1)
DSPCCNTR : 0x00000000 (disabled)
DSPCSTRIDE : 0x00000000 (0)
DSPCSURF : 0x00000000
DSPCTILEOFF : 0x00000000 (0, 0)
PIPEACONF : 0xc0000000 (enabled, active, pf-pd, rotate 0, 8bpc)
HTOTAL_A : 0x072f068f (1680 active, 1840 total)
HBLANK_A : 0x072f068f (1680 start, 1840 end)
HSYNC_A : 0x06df06bf (1728 start, 1760 end)
VTOTAL_A : 0x04370419 (1050 active, 1080 total)
VBLANK_A : 0x04370419 (1050 start, 1080 end)
VSYNC_A : 0x0422041c (1053 start, 1059 end)
VSYNCSHIFT_A : 0x00000000
PIPEA_DATA_M1 : 0x00000000 (TU 1, val 0x0 0)
PIPEA_DATA_N1 : 0x00000000 (val 0x0 0)
PIPEA_LINK_M1 : 0x00000000 (val 0x0 0)
PIPEA_LINK_N1 : 0x00000000 (val 0x0 0)
PIPEBCONF : 0x00000000 (disabled, inactive, pf-pd, rotate 0, 8bpc)
HTOTAL_B : 0x00000000 (1 active, 1 total)
HBLANK_B : 0x00000000 (1 start, 1 end)
HSYNC_B : 0x00000000 (1 start, 1 end)
VTOTAL_B : 0x00000000 (1 active, 1 total)
VBLANK_B : 0x00000000 (1 start, 1 end)
VSYNC_B : 0x00000000 (1 start, 1 end)
VSYNCSHIFT_B : 0x00000000
PIPEB_DATA_M1 : 0x00000000 (TU 1, val 0x0 0)
PIPEB_DATA_N1 : 0x00000000 (val 0x0 0)
PIPEB_LINK_M1 : 0x00000000 (val 0x0 0)
PIPEB_LINK_N1 : 0x00000000 (val 0x0 0)
PIPECCONF : 0x00000000 (disabled, inactive, pf-pd, rotate 0, 8bpc)
HTOTAL_C : 0x00000000 (1 active, 1 total)
HBLANK_C : 0x00000000 (1 start, 1 end)
HSYNC_C : 0x00000000 (1 start, 1 end)
VTOTAL_C : 0x00000000 (1 active, 1 total)
VBLANK_C : 0x00000000 (1 start, 1 end)
VSYNC_C : 0x00000000 (1 start, 1 end)
VSYNCSHIFT_C : 0x00000000
PIPEC_DATA_M1 : 0x00000000 (TU 1, val 0x0 0)
PIPEC_DATA_N1 : 0x00000000 (val 0x0 0)
PIPEC_LINK_M1 : 0x00000000 (val 0x0 0)
PIPEC_LINK_N1 : 0x00000000 (val 0x0 0)
PIPEEDPCONF : 0x00000000 (disabled, inactive, pf-pd, rotate 0, 8bpc)
HTOTAL_EDP : 0x00000000 (1 active, 1 total)
HBLANK_EDP : 0x00000000 (1 start, 1 end)
HSYNC_EDP : 0x00000000 (1 start, 1 end)
VTOTAL_EDP : 0x00000000 (1 active, 1 total)
VBLANK_EDP : 0x00000000 (1 start, 1 end)
VSYNC_EDP : 0x00000000 (1 start, 1 end)
VSYNCSHIFT_EDP : 0x00000000
PIPEEDP_DATA_M1 : 0x00000000 (TU 1, val 0x0 0)
PIPEEDP_DATA_N1 : 0x00000000 (val 0x0 0)
PIPEEDP_LINK_M1 : 0x00000000 (val 0x0 0)
PIPEEDP_LINK_N1 : 0x00000000 (val 0x0 0)
PFA_CTL_1 : 0x00000000 (disable, auto_scale yes, auto_scale_cal no, v_filter enable, vadapt disable, mode least, filter_sel programmed,chroma pre-filter disable, vert3tap auto, v_inter_invert field 1)
PFA_WIN_POS : 0x00000000 (0, 0)
PFA_WIN_SIZE : 0x00000000 (0, 0)
PFB_CTL_1 : 0x00000000 (disable, auto_scale yes, auto_scale_cal no, v_filter enable, vadapt disable, mode least, filter_sel programmed,chroma pre-filter disable, vert3tap auto, v_inter_invert field 1)
PFB_WIN_POS : 0x00000000 (0, 0)
PFB_WIN_SIZE : 0x00000000 (0, 0)
PFC_CTL_1 : 0x00000000 (disable, auto_scale yes, auto_scale_cal no, v_filter enable, vadapt disable, mode least, filter_sel programmed,chroma pre-filter disable, vert3tap auto, v_inter_invert field 1)
PFC_WIN_POS : 0x00000000 (0, 0)
PFC_WIN_SIZE : 0x00000000 (0, 0)
TRANS_HTOTAL_A : 0x00000000 (1 active, 1 total)
TRANS_HBLANK_A : 0x00000000 (1 start, 1 end)
TRANS_HSYNC_A : 0x00000000 (1 start, 1 end)
TRANS_VTOTAL_A : 0x00000000 (1 active, 1 total)
TRANS_VBLANK_A : 0x00000000 (1 start, 1 end)
TRANS_VSYNC_A : 0x00000000 (1 start, 1 end)
TRANS_VSYNCSHIFT_A : 0x00000000
TRANSACONF : 0x00000000 (disable, inactive, progressive)
FDI_RXA_MISC : 0x0a200090 (FDI Delay 144)
FDI_RXA_TUSIZE1 : 0x7e000000
FDI_RXA_IIR : 0x00000000
FDI_RXA_IMR : 0x00000fff
BLC_PWM_CPU_CTL2 : 0x60000000 (enable 0, pipe EDP, blinking 0, granularity 128)
BLC_PWM_CPU_CTL : 0x00000000 (cycle 0, freq 0)
BLC_PWM2_CPU_CTL2 : 0x60000000 (enable 0, pipe EDP, blinking 0, granularity 128)
BLC_PWM2_CPU_CTL : 0x00000000 (cycle 0, freq 0)
BLC_MISC_CTL : 0x00000000 (PWM1-PCH PWM2-CPU)
BLC_PWM_PCH_CTL1 : 0x00000000 (enable 0, override 0, inverted polarity 0)
BLC_PWM_PCH_CTL2 : 0x00000000 (freq 0, cycle 0)
UTIL_PIN_CTL : 0x00000000 (enable 0, transcoder A, mode data, data 0 inverted polarity 0)
PCH_PP_STATUS : 0x00000000 (off, not ready, sequencing idle)
PCH_PP_CONTROL : 0x00000000 (blacklight disabled, do not power down on reset, panel off)
PCH_PP_ON_DELAYS : 0x00000000
PCH_PP_OFF_DELAYS : 0x00000000
PCH_PP_DIVISOR : 0x00186906
PIXCLK_GATE : 0x00000000
SDEISR : 0x00400000 (port d:0, port c:1, port b:0, crt:0)
RC6_RESIDENCY_TIME : 0x338a5d5f

See also:
Haswell CPU/iGPU power management with a GA-Z87M-D3H
AppleIntelFramebufferAzul.kext
AppleIntelFramebufferAzul.kext (part II)
AppleIntelFramebufferAzul.kext (part III)

31 thoughts on “Yosemite DP6 with HD4600

  1. Still no luck for me, system keeps crashing @boot. Screen gets wired followed by a reboot.

    I’ve tried your DP5 and DP6 Framebuffer using your script.

    My Configuration: i4570S = HD4600, GA Z87X-UD3H, Screen on DP (no DVI available)

    thx for your efforts, maybe there is a way I can help you to fix this?

    • Ok. Let me add three frame buffer configurations with a single DVI, HDMI and DP connector setup… Done.

      Are you booting your hardware in single user (-s) mode? If yes remove it to see if that helps.

      Additionally. My frame buffers are setup for the least amount of memory (32 MB) in the (UEFI) BIOS, and you cannot use 64 MB or greater with a 32 MB frame buffer configuration. You have to change the blue value (00 00 00 02) but be aware that doing this also changes some memory locations in the ACPI tables. Just in case the boot loader loads the DSDT.aml 😉

      • No I don’t use single user, with mavericks everything is working fine (using ozmosis uefi and a special dsdt).

        Yes, Framebuffer Size is set to 64MB, but I will try 32MB also. Will be home on monday and check with your newest settings.
        They should work for PB2 I think?!

    • No. I never have and never will share or publish Apple files. Not here not anywhere. What I do here is to share information and scripts that I wrote. That is all what I have to offer. Nothing more. Nothing less.

      More importantly. Your motherboard port configuration is most likely different than what I use, and thus you have to do the work yourself.

      • Okay, I’ve tried again on Yosemite PB2 and it is working now! There are some small glitches while the windows manager starts (not as smooth as on my MBPr) but everything is working.

        Sound seems to be toleda’s business *g* I think we need a new Framebuffer patch for DP audio. The one from Mavericks is not working anymore.

        Have a nice!

    • There are two data sections in the script:

      0x0d220003) FACTORY_PLATFORM_INFO=”0:
      0x0d220003) PATCHED_PLATFORM_INFO=”0:

      And you forgot, apparently, to patch the second one so there is nothing to patch.

  2. How i Use it for my 0x04128086 can you give any example Iused all options but still says Fectory/Patch data match nothing to patch.

    • Sorry. Was busy with another project, but there was a typo/small error in function _dumpConnectorData that I fixed in version 1.8 Please try this version and see if that solves the problem.

      Do you have Xcode installed?

      You only patch the data under 0x0d220003) PATCHED_PLATFORM_INFO=”0: and not the data under 0x0d220003) FACTORY_PLATFORM_INFO=”0: ?

  3. Pingback: New repository for AppleIntelInfo.kext | Pike's Universum

  4. thanks piker alpha , You are the genius ….. Finally patched in Azul Hex by your description and now work …….

    thanks bro. thank you so much ………..

  5. Thanks Pike.
    No more 10.10 reboot now for my NUC when booting from primary display.
    Am using this as patched fb and connecting via HDMI (port 5 FB1) and DP(port 6 FB2) FBs 0 and 3 are not used. Both hdmi/dp Audio works too:
    0300220D 00030403 00000002 00003001 00009000 00000060 99140000 99140000 00000000 00000000 00000800 00010000 30000000 01050800 00080000 06000000 02040A00 00040000 40000000 03060900 00040000 87000000 D6000000 05050000 04000000 00000000 00000000 00000000 00000000 00000000 00000000 0E000000
    Only issues are: 1. slight screen distortion during final boot phase in 10.10 and 2. cannot use this injecting via Clover as it screws up my 10.9 boot

    • Thank you for sharing this here. Can you tell me a little bit more about the ‘slight screen distortion’? Is that at the bottom of the screen or somewhere else, and when is it doing that? When the progress bar is shown or afterwards?

      • It is where the IOGraphicsFamily kext kicks in. A non distorted progress bar appears centrally (without Apple logo) while background distortion is multiple distorted versions of Apple/progress bar distributed horizontally across screen. i.e. same distortion as used to occur just prior to reboot – except there is no reboot now and all continues fine when desktop takes over.

    • Let me start with a pseudo code snippet:

      if (__private->needsInit == 2) {
      // AAPL,boot-display is set and IOFBNeedsRefresh == false
      // Don't clear the screen and skip drawing the logo
      } else {
      // AAPL,boot-display may be set, but IOFBNeedsRefresh == true
      // Clear screen and draw logo
      }

      And what this workaround does is that it makes it skip the first check. Not what I want. I want the frame buffer (binary) to be patched in a way that it meets the conditions required by the IOGraphicsFamily.kext binary. That is also why I haven’t mentioned this workaround, because it doesn’t actually solve the problem, but hides it.

      However. Since there is no such patch at this moment, the workaround works 😉

  6. Piker You putted before info. about Azul

    For fFramebufferMemorySize

    00 00 00 01 = 0x01000000 = 16 MB
    00 00 00 02 = 0x02000000 = 32 MB
    00 00 00 04 = 0x04000000 = 64 MB
    00 00 00 06 = 0x06000000 = 96 MB
    00 00 00 08 = 0x08000000 = 128 MB
    00 00 00 10 = 0x10000000 = 256 MB
    00 00 00 18 = 0x18000000 = 384 MB
    00 00 00 20 = 0x20000000 = 512 MB
    00 00 00 30 = 0x30000000 = 768 MB
    00 00 00 40 = 0x40000000 = 1024 MB
    00 00 00 60 = 0x60000000 = 1536 MB
    00 00 00 80 = 0x80000000 = 2048 MB

    Now can you give me table like this for VRAM ?
    for 10.10 DP6

    And can you tell me how you calculate this ??? Please ……

  7. 00486f0: 0300 220d 0003 0303 0000 0002 0000 3001
    0048700: 0000 6000 0000 0060 9914 0000 9914 0000
    0048710: 0000 0000 0000 0000 0000 0800 0001 0000
    0048720: 3000 0000 0105 0800 0008 0000 0600 0000
    0048730: 0204 0a00 0002 0000 8700 0000 ff00 0000
    0048740: 0100 0000 4000 0000 0f00 0000 0101 0000
    0048750: 0400 0000 0000 0000 0000 0000 0000 0000
    0048760: 0000 0000 0000 0000 0000 0000 0e00 0000

    What is 0f00 0000 ??

    • This property is set to false for your bootscreen only (see IOGraphics.kext). Why do you want this property to be false for all ports?

      Isn’t there a Lilu helper kext for this?

      • From what I see in my “ioreg”, port “0” which is referring to the first Displayport output (miniDP is 2), the “AAPL.boot-display” key exists. But on other non-HDMI ports, they are: The second miniDP, HDMI and DVI-I DL.

        I did a test with port “0” miniDP. I connected a miniDP to DVI to HDD converter cable, my monitor has VGA and DVI-I inputs. I tested it with Mavericks 10.9.5 and for it, it does not have the black screen between the first bootlogo and the second. Fixing Ioreg with Mavericks, the “IOFBNeedsRefresh” keys is set to “False”, so that’s ok.

        But testing the systems above the Mavericks (Yosemite, El Capitan and Sierra), has the black screen between the two bootlogs using the miniDP output. Even though the “IOFBNeedsRefresh” is set to “false”.

        I am wanting to do a test, leaving the other video output ports of my video card all in “False”, even the monitor connected in the miniDP with “AAPL.boot-display”.

        I’ve done a lot of testing by putting the “AAPL.boot-display” key on all ports behind the DSDT patch.

        And yes, I’m using kext “Lilu” plus “WhateverGreen”, both in their latest versions.

        The “WhateverGreen”, I use it because it repairs the wake up mode after the system sleep.

        You want to check out my ioreg: https://www.dropbox.com/s/sdpmruk151wi2c3/iMac%20de%20Jorge.zip?dl=0

        Except that my monitor is currently connected to the DVI-i output of the video card.

Leave a comment