Jump to content

[GUIDE] Catalina, Big Sur, Monterey, Ventura, Sonoma on HP EliteDesk 800 G4/G5 Mini - The perfect MacMini8,1 Hackintosh


deeveedee
872 posts in this topic

Recommended Posts

I have attached a detailed itemization of my HP EliteDesk 800 G4 Mini BIOS configuration to Post #1 in a PDF document titled "HP EliteDesk 800 G4 Mini BIOS Configuration.pdf."

Edited by tonyx86
Fixed broken link
Link to comment
Share on other sites

The real MacMini8,1 ACPI includes Device (PPMC); however, PPMC does not appear to be "loaded" in a real MacMini8,1 IORegistry. I'm not sure what Device (PPMC) does, but the SSDT to inject this device is attached.

 

 

SSDT-PPMC.zip

Edited by tonyx86
Link to comment
Share on other sites

I have updated the EliteDesk800.zip archive attached to Post #1 of this thread. See revision history here for an explanation of the changes.

This continues to be a work in progress. I am doing my best to make sure that my solutions are accurate and complete; however, this solution is not a step-by-step guide for novices and still requires a degree of knowledge and experience to confirm my proposed solutions and configuration files.

Edited by tonyx86
Fixed broken links
Link to comment
Share on other sites

When first configuring my Clover config.plist, I enabled "ResetHDA" (Devices > Audio Properties). It does not appear that this is necessary. This change is included in the EliteDesk.zip archive attached to Post #1.

Edited by tonyx86
Changed to indicate that the update is part of the EliteDesk.zip archive attached to Post #1
Link to comment
Share on other sites

I was experiencing an audio "pop" during macOS startup (before login prompt). Solution is to uninstall CLOVER's AudioDxe.efi driver. This change is included in the EliteDesk.zip archive attached to Post #1.

Edited by tonyx86
Changed to indicate that the update is part of the EliteDesk.zip archive attached to Post #1
Link to comment
Share on other sites

I have started to test the USB 3.1 Type C port using a Type C to standard USB 3 adapter. Attached is the updated SSDT-UIAC.aml with the added USB 3 mappings for the Type C port (HS10 and SS03). This change is included in the EliteDesk.zip archive attached to Post #1.

 

 

 

SSDT-UIAC.zip

Edited by tonyx86
Changed to indicate that the update is part of the EliteDesk.zip archive attached to Post #1
Link to comment
Share on other sites

I have been looking at the IOReg / ACPI dump from a real MacMini8,1 to see if it offers any clues for improving my HackMini8,1 (just playing, since everything appears to be working perfectly). I have found the following IGPU property differences between my HackMini8,1 and a real MacMini8,1.
 

  Real MacMini8,1 HackMini8,1 (HP EliteDesk 800 G4 Mini)
device-id 0x00003e9b (I7-8700B / UHD 630) 0x00003e92 (I7-8700T / UHD 630)
AAPL,ig-platform-id 0x3e9b0007 0x3e920000
compatible pci8086,3e9b pci8086,e392
AAPL,GfxYTile 0x00000001 not defined


If I want my HackMini8,1 to more closely mimic the IGPU device properties of a real MacMini8,1, I have found that the IGPU device properties from a real MacMini8,1 "work" with one exception: my HackMini8,1 boots to black screens if I use AAPL,ig-platform-id = 0x3e9b0007. I must use an AAPL,ig-platform-id that ends in 0x00 (e.g. 0x3e9b0000) which is consistent with what I determined here before.

I am currently running with the IGPU device properties below to see if there are any behavioral differences.
 

  Actual Value Reverse byte order
device-id 0x00003e9b 0x9b3e0000
AAPL,ig-platform-id 0x3e9b0000 0x00009b3e
compatible pci8086,3e9b N/A
AAPL,GfxYTile 0x00000001 0x01000000

 

Interesting observations in Hackintool:  When I configure my CLOVER config.plist with IGPU properties device-id=0x00003e92, AAPL,ig-platform-id=0x3e920000, Hackintool shows the correct connector-types (DigitalDVI) for my patched display ports.  When I configure my IGPU properties as device-id=0x00003e9b, AAPL,ig-platform-id=0x3e9b0000, Hackintool shows that my patched connector-types are not the DigitalDVI types that I have specified in my patched configuration.  See attached screenshots.

 

I'm not certain, but this might offer clues for those who are having difficulty with their IGPU device properties, suggesting that experimentation with different device-ids is critical to achieving the optimal IGPU patch.

 

In my case, using the native device-id for my I7-8700T / UHD 630 (0x3e92) appears to be better than spoofing the device-id as 0x3e9b.

 

 

Spoiler

Screen Shot 2020-06-14 at 11.27.39 AM.png

 

Screen Shot 2020-06-14 at 11.24.19 AM.png

 

Edited by tonyx86
Fixed broken link
Link to comment
Share on other sites

EDIT: The slow NVMe SSD performance was due to the ADATA M.2 NVMe SSD. I swapped it for a WD M.2 NVMe SSD as described here. Leaving this post for historical purposes.
-----------------------------------------------------------------

In This Post I noted that my system boots Catalina 10.15.5 slower from my NVMe SSD than it does from my SATA6 SSD. I found threads that discuss NVMe SSD Controllers detected as "Generic SSD Controller" instead of "Apple SSD Controller."  

As shown in the attached screenshot, both of my NVMeExpress SSD Controllers are detected as Generic. Both NVMe SSD Controllers are reported as "Link Width: x4" and "Link Speed: 8.0 GT/s" with Trim Support.

Could it be that the performance issue is simply because they are detected as Generic SSD Controllers and not Apple SSD Controllers?

 

Spoiler

Screen Shot 2020-06-17 at 9.00.25 PM.png

 

Edited by tonyx86
Fixed broken links
Link to comment
Share on other sites

Big lesson learned...

After experiencing poor NVMe SSD performance, I swapped my ADATA SSD for a WD Black SSD. R/W speeds are awesome (and symmetric) as shown in the attached screenshot. However, the big lesson learned was about the displays. When I cloned my backup to the new NVMe drive (using Carbon Copy), my displays did not work properly after booting from the new NVMe SSD. The only change was the NVMe SSD - no other changes and EFI was identical. My system would start to boot and login normally, but then one display would go black and I'd be left with a single display.

I made a VERY lucky guess and rebuilt kextcache using Hackintool - problem fixed. Displays are back to normal.

Lesson learned: if you're having display problems after cloning a new drive image, rebuild kextcache with Hackintool, manually or your favorite way.

 

NOTE: I install 3rd-party kexts in /Library/Extensions and set CLOVER "Inject Kexts" = "Detect." Rebuilding kextcache may have resolved this problem for me because of my kext installation strategy. If you install your 3rd-party kexts in E/C/k/O and not in /L/E, I'm not sure if this fix applies to you.

Spoiler

Screen Shot 2020-06-20 at 8.41.31 PM.png

Link to comment
Share on other sites

Now that this rig is finished, I have a total cost (USD) for this HackMini8,1:

  • $420.00: Gently used HP EliteDesk 800 G4 Mini 35W: I7-8700T, 16GB DDR4 (1 SO-DIMM), 256GB Samsung NVMe SSD, Intel Wi-Fi / Bluetooth
  • $52.00: 16GB DDR4 SO-DIMM (expanding memory to a total of 32GB DDR4)
  • $70.00: 500 GB Western Digital WD BLACK SN750 NVMe M.2 2280 500GB SSD
  • $72.00: 2TB Seagate 2.5" SATA6 HD

Total Cost: $614.00 USD

Final configuration

  • CPU: I7-8700T: 6-core, UHD 630
  • 3 x Display Port video ports, 6 x USB 3.1 ports, 1 x USB-c 3.1 port
  • 32GB DDR4 RAM
  • 1 x Samsung 256GB NVMe M.2 SSD
  • 1 x Western Digital 500 GB NVMe M.2 SSD
  • 1 x Seagate 2TB 2.5" SATA6 HD
Edited by tonyx86
Link to comment
Share on other sites

*** WARNING *** If you perform this drive caddy modification, make sure that you thoroughly clean the modified drive caddy so that you don't introduce metal fragments into your PC. ***

 

*** SUGGESTION *** Operating with two M.2 storage devices and a SATA storage device will generate extra heat in your EliteDesk Mini. If your rig does not have a SATA caddy fan (which may be the case if you have a 35W Mini), you may want to add a SATA caddy fan to help dissipate the extra heat. ***

 

*** CAUTION *** If you make this modification to an EliteDesk Mini that does not have a vented cover (which may be the case if you have a 35W Mini), your internal device temps may be higher than is advisable.  In my opinion, this modification is best for models that have a vented cover. ***

 

*** SUGGESTION *** If you perform this drive caddy modification to install two NVMe SSDs and one SATA drive and your SATA drive caddy does not include a cooling fan (SATA caddy cooling fans are included with 65W EliteDesk 800 G4 / G5 Minis but may not be included with 35W units), I advise you to add a SATA caddy cooling fan to your rig since the three drives will be generating extra heat.  See the cooling fan in one of the photos below. ***

 

Installing 3 drives in your HP EliteDesk 800 G4 Mini (2 x M.2 2280 NVMe SSDs and 1 x SATA HD / SSD)

The HP EliteDesk 800 G4 Mini specs indicate that the G4 Mini supports two M.2 2280 NVMe SSDs and one SATA6 HD/SSD. Unfortunately, a mechanical design flaw prevents simultaneous use of the second M.2 2280 slot and the SATA drive caddy. As shown here, when the second M.2 2280 slot is populated, the SATA drive caddy sits on top of the M.2 2280 SSD card and the drive caddy cannot be properly installed. If you call HP support, they will admit that you can only install one or the other and not both.

Unmodified SATA Drive Caddy SATA Caddy sits on second M.2 2280 NVMe SSD
 
g4-mini-original-caddy.jpg
 
g4-mini-before-cutout.jpg

My solution was to modify the SATA drive caddy by making a cutout that provides clearance for the second M.2 2280 slot as shown here. A Dremel tool and cutting wheel works perfectly for this modification.

Modified SATA Drive Caddy
Spoiler

g4-mini-caddy-cutout.jpg

 

With this modified SATA drive caddy, the HP EliteDesk 800 G4 Mini easily accommodates two M.2 2280 NVMe SSDs and a SATA HD / SSD in the SATA drive caddy.

 

Spoiler

image.png.3406a2b65f93993d01bdf9912681c086.png

 

HD Fan Assembly in 65W HP EliteDesk 800 G4 Mini
Note that this caddy mod works perfectly with the HD fan in 65W units

 

Spoiler

image.png.28d14e515b16baa42f1e8e58f2bad078.pngimage.png.82b25ee644b4baba8bf89bd2a0913e58.png

 

 

See additonal caddy modification instructions here.

Edited by deeveedee
Added link to additional caddy modification instructions
  • Like 1
  • Thanks 2
Link to comment
Share on other sites

Ever since I figured out the framebuffer patching for the I7-8700T / UHD630 here, I have suspected that I specified device properties that are unnecessary. After a bit of experimentation, I have determined that I don't need to specify pipe properties or any device properties for a 4th "dummy" connector. I do, however, need to specify the indices, busids and flags. My test results are as follows:
 

Actions
Remove busids (framebuffer-conX-busid)
Results
black screens
Remove device-id normal operation (defaults to 0x3e92 which is the detected device-id)
Remove pipes (framebuffer-conX-pipe) normal operation
Remove 4th "dummy" connector (framebuffer-con3) normal operation
Remove indices (framebuffer-conX-index) Single screen, flashing on and off
Remove flags (framebuffer-conX-flags) Black screens after wake from sleep; unable to remotely connect after wake from sleep



I have included these changes in the EFI in the EliteDesk.zip archive attached to Post #1 in this thread:

  • Removed device-id
  • Removed framebuffer-conX-pipe properties
  • Removed 4th "dummy" connector framebuffer-con3 properties

 

My current Clover config.plist is attached.

 

 

config.plist.zip

Edited by tonyx86
Fixed broken links
Link to comment
Share on other sites

Hi @tonyx86 thanks for your updates, I am following your thread more for your discoveries and less by the fact that I have (actually, not) the same PC.

Can I kindly ask you to post a photo/screenshot of Hackintool while you select the different framebuffer options so that we can visualise your choices and learn from it?

Would be really appreciated... everyone posts their ready-config for Clover (or OpenCore) but rarely someone posts screenshots during the making :D

Trying to decipher your config.plist and settings by reverse-engineering e.g. <key>framebuffer-con0-alldata</key> or <key>framebuffer-con1-alldata</key> is an impossible task...

Thanks, mate.

Link to comment
Share on other sites

On 6/30/2020 at 7:18 PM, MacKonsti said:

Can I kindly ask you to post a photo/screenshot of Hackintool while you select the different framebuffer options so that we can visualise your choices and learn from it?

 

I'm not using Hackintool to create / modifiy my framebuffer patches - I'm using XCode and sometimes Clover Configurator.  I have attached my current Clover config.plist to my previous post here.  

Edited by tonyx86
Fixed broken link
Link to comment
Share on other sites

3 hours ago, tonyx86 said:

I'm not using Hackintool to create / modifiy my framebuffer patches - I'm using XCode and sometimes Clover Configurator.  I have attached my current Clover config.plist to my previous post here.  

Thank you mate, so you are using an independent setting for each option, not a combo thing like framebuffer-con0-alldata OK I see now. That is longer but definitely preferred (easier to debug later!) as we can't reverse-find the settings if you combine them in "alldata".

Interesting that you only use <key>AAPL,ig-platform-id</key> and not device-id key as well? How come?

Edited by MacKonsti
Link to comment
Share on other sites

On 7/1/2020 at 11:27 AM, MacKonsti said:

Thank you mate, so you are using an independent setting for each option, not a combo thing like framebuffer-con0-alldata OK I see now. That is longer but definitely preferred (easier to debug later!) as we can't reverse-find the settings if you combine them in "alldata".

Interesting that you only use <key>AAPL,ig-platform-id</key> and not device-id key as well? How come?

 

When not specified, device-id defaults to the macOS-detected device-id (which for my I7-8700T / UHD 630 is 0x3e92) - read here.    0x3e92 is the best device-id for me based on my testing, so no reason to "spoof" a different value.  I could also have defined device-id = 0x3e92 (Reverse Byte Order 0x923e0000), which still leaves the device-id unchanged from its default.  Read this post and this post for further explanation.

 

See attached IORegistry dump and note the value of device-id (without me having to specify a value).

 

Spoiler

Screen Shot 2020-07-01 at 1.23.19 PM.png

 

Edited by tonyx86
Fixed broken links
  • Thanks 1
Link to comment
Share on other sites

EDIT: Many thanks to @headkaze for his thorough explanation here.  I have learned enough about WEG to be dangerous, but won't attempt any more "manual" graphics framebuffer patching.  I'll be sticking with WEG and allowing it to do its magic :)

-------------------------------------------  

After posting this, I have encountered graphics issues following a few reboots.  Specifically, there are display glitches before the login prompt appears and sometimes, the system boots to black screens (with monitors on).  Clearly, there is something that WEG does that I have not captured in these patches.  I am reverting to my WEG baseline and welcome any suggestions for running without WEG.  It's not that I don't like WEG - I just want to fully understand what it is doing.

 

I suspect that WEG is defining additional UHD 630 graphics device attributes that I have not defined with my "manual' patches.

--------------------------------------------------

I was inspired by @Zenith432 's post here to determine a UHD630 graphics solution that does not require WhateverGreen.  My brute force approach duplicates the  WhateverGreen graphics properties that I injected (with Clover) as described here.

 

In addition to removing WhateverGreen.kext, I modified my Clover config.plist to work without WEG as follows

  • Remove all but the AAPL,ig-platform-id graphics device property (0000923E)
  • Enable the following DSDT device renames (WEG was renaming these)
    • change GFX0 to IGPU
    • change HDAS to HDEF
    • change HECI to IMEI
  • Add the following kext patches

Name

Find

Replace

Comment

com.apple.driver.AppleIntelCFLGraphicsFramebuffer

00000800
02000000
98000000

01010800
04000000
C7030000

10.15.5-CFL-3E920000-Con0-LVDS2DVI

com.apple.driver.AppleIntelCFLGraphicsFramebuffer 

01050900
00040000
87010000

02020900
04000000
C7030000

10.15.5-CFL-3E920000-Con1-DP2DVI

com.apple.driver.AppleIntelCFLGraphicsFramebuffer

02040A00 00040000
87010000

03040A00
04000000 C7030000

10.15.5-CFL-3E920000-Con2-DP2DVI

 

The kext patches do the following

  • Add 1 (one) to each connector index (00 -> 01, 01 -> 02, 02 -> 03).  Without this index change, my system would boot to a single display that flashed on and off
  • Change all connector types to DigitalDVI (my system has DP connectors, but I am using DP->DVI adapters.  System booted to black screens without this connector type change and when I change connector types to DP.
  • Change all connector flags to 0x03C7.  Without the change in flag values, displays remained black after sleep/wake and I could not remotely connect after sleep/wake.
  • Change Bus IDs 0, 5, 4 to 1, 2, 4 respectively.  I determined this by trial and error.  There may be other Bus IDs that work, but my system booted to black screens if I did not change the Bus IDs.
Edited by tonyx86
Fixed broken links
  • Like 3
  • Thanks 1
Link to comment
Share on other sites

I'm posting this for those who are curious about VRAM and am not suggesting any changes. My configuration baseline is still running with 1536 MB VRAM which is the UHD 630 default and I don't see any performance benefits when running with 2048 MB VRAM.
------------------------------------------------------
The macOS supported UHD 630 VRAM sizes are 0x40000000 (1024 MB), 0x60000000 (1536 MB) and 0x80000000 (2048 MB). When graphics device property framebuffer-unifiedmem is unspecified, VRAM defaults to 1536 MB. When framebuffer-unifiedmem is set to 0x80000000 (Reverse Byte Order 0x00000080), VRAM is 2048 MB. I tried setting framebuffer-unifiedmem to 2048 MB, but don't notice any difference in graphics performance (as measured by GeekBench 5). The only difference I see is that macOS now sees 2048 MB VRAM.  

*** NOTE *** This guide indicates that patching framebuffer-unifiedmem is not recommended.

 

Spoiler

Screen Shot 2020-07-04 at 9.09.02 AM.png

Link to comment
Share on other sites

EDIT: After posting this, I have been noticing a change in sleep / wake behavior.  Sometimes, my system doesn't sleep and sometimes it wakes to dark screens.  I have removed my injected EDID properties until I get time to test this more thoroughly.  If you inject EDID properties in order to resolve slow display wake from sleep, be prepared to test and confirm proper sleep/wake operation.

-------------------------------------------------------------------------------

My displays wake from sleep even faster (now almost immediate) after injecting EDID (created with Hackintool) for each of my displays.  Thank you @glasgood for his tip here.  I will add this to the config.plist that I include with a future EFI update attached to post #1 in this thread; however, users will need to generate their own EDID patches that are specific to their displays.

 

The EDID for each display is injected with graphics property key AAPL0X,override-no-connect, where X is the display number.

 

EDIT: I prefer my display temperature/color with the unpatched EDID. In order to realize the faster wake benefit without changing my display properties, I copied the detected display EDID (copied EDID from IORegistryExplorer after booting without the AAPL0X,override-no-connect properties) into the AAPL0X,override-no-connect device properties in my config.plist. Now my display color/temps are their default, but the displays wake instantly from sleep.

Edited by tonyx86
Fixed broken link
  • Like 1
Link to comment
Share on other sites

10 hours ago, tonyx86 said:

My displays wake from sleep even faster (now almost immediate) after injecting EDID (created with Hackintool) for each of my displays.  Thank you @glasgood for his tip here.  I will add this to the config.plist that I include with a future EFI update attached to post #1 in this thread; however, users will need to generate their own EDID patches that are specific to their displays.

 

The EDID for each display is injected with graphics property key AAPL0X,override-no-connect, where X is the display number.

 

EDIT: I prefer my display temperature/color with the unpatched EDID. In order to realize the faster wake benefit without changing my display properties, I copied the detected display EDID (copied EDID from IORegistryExplorer after booting without the AAPL0X,override-no-connect properties) into the AAPL0X,override-no-connect device properties in my config.plist. Now my display color/temps are their default, but the displays wake instantly from sleep.

 

 

Great that works for you!  Another small problem is that the WIFI M.2 slot is positioned very close to the edge of the mother board (on my machine ) and as a consequence of that, the Adapter / BCM94360CS2 card length can not fit into the WIFI M2 slot. Any card length larger than 30mm will not fit. 


 

Spoiler


 

683074310_IMG_10352.thumb.JPG.d1aa90a319b756c42d1cf18da86123d2.JPG

 


 

 

 

There are some cards that thats support MacOS and will perfectly into the slot, though I prefer to use actual apple wifi cards and also find it cheaper.

 

My solution around this is to use an >> adapter with flex cable:

 

Spoiler


1256431207_Screenshot2020-07-08at08_19_21.thumb.png.4cbc68f4034e2f74e7c9516ba55fc68e.png

 

 


 

 

 

The HP EliteDesk 800 G4 Mini PC has two NVMe interfaces plus  SATA, so there is an extra options regarding adapter. 

 

 

 

 

 

  • Thanks 1
Link to comment
Share on other sites

5 hours ago, glasgood said:

 

 

Great that works for you!  Another small problem is that the WIFI M.2 slot is positioned very close to the edge of the mother board (on my machine ) and as a consequence of that, the Adapter / BCM94360CS2 card length can not fit into the WIFI M2 slot. Any card length larger than 30mm will not fit. 

 

Have you (or anyone else) looked at the M.2 NGFF WLAN BCM94360NG 802.11ac Bluetooth 4.0 WiFi Card?  I don't need Wi-Fi/Bluetooth in my HackMini8,1 (not yet), so I haven't replaced the factory-installed Intel card.  I'm wondering if the BCM94360NG fits without modification in the Wi-Fi M.2 slot?

Link to comment
Share on other sites

48 minutes ago, tonyx86 said:

 

Have you (or anyone else) looked at the M.2 NGFF WLAN BCM94360NG 802.11ac Bluetooth 4.0 WiFi Card?  I don't need Wi-Fi/Bluetooth in my HackMini8,1 (not yet), so I haven't replaced the factory-installed Intel card.  I'm wondering if the BCM94360NG fits without modification in the Wi-Fi M.2 slot?

 

As far as know, it should work. 

Link to comment
Share on other sites

Hello,

First I would like to thanks tonyx86 for his hard and well documented works (yep, you can succeed but well documented for me it's a next level of knowledge sharing)

I have the EliteDesk 800 G4, but micro. I don't know why, I choose to boot from USB, then nothing happen, event with -v (normally I could see, even some small code line, now nothing), I tried different usb port, I tried USB2, USB3, nothing happen, I tried to switch between displayports, it doesn't work (in my boord I have 1 VGA and 2 DP), and it's the first time it happens to me. I doubt about the Bios settings, however, even with faulty bios settings, you will see something in the screen

I'm out of idea.

If you could spot out a reason, I would take it

Thanks and best regards,

Link to comment
Share on other sites

×
×
  • Create New...