# KVM-Opencore Opencore Configuration of KVM Hackintosh with tweaks. We propose best practice for KVM users. # Status * OS: tested in Catalina 10.15.x * Opencore: 0.5.6 * NVRAM: native * AppleHotKey: works * FileVault: un-tested * Boot-Audio: works with onboard audio passthrough * OVMF: you can use latest version other than the old way(patched one). see issues. * SMBIOS: iMacPro1,1 * NIC: vmxnet3/e1000-82545em/passthrough * CPU: * Penryn: works, using patches to enable leaf7 support for better performance * Intel Host-Passthrough: works, but with patches and remove topology line * AMD Host-PassThrough: works, but with AMD-Vanilla patches * GPU Passthrough: works * HDMI/DP Audio: works * Metal Support: works * H264 Hardware Decoding: works * H265 Hardware Decoding: works * Handoff: works with specific Wifi/Bluetooth * USB(Passthrough): works * Power Manages * Sleep: works, see details below. * EC: faked one * USB Power: works even with USB3 passthrough * CPU AGPM: wo don't need CPU AGPM because hypervisor handled it well, this is for GPU AGPM * GPU AGPM: works # Usage 1. Download the repository and put the EFI under your EFI disk # Manual ## Libvirt XML See more in [libvirt.xml](https://github.com/Leoyzen/KVM-Opencore/blob/master/libvirt.xml). ## SMBios Comparing with normal hackintosh setup, we have only limited choices here(because we don't have an iGPU). * iMacPro1,1(Prefer) * MacPro7,1 ## CPU ### Models Selection You have three options to choose: Penryn, Passthrough, Emulating Model. #### Penryn Penryn is the safest choice in Hackintosh VM, it is classic, similar with virtualized enviroment, and Apple wrote native code to support it. But we should do something to make it work more than that: 1. You should passthrough some important cpuid features which don't included in Penryn Model, such as: * invtsc: latest MacOS won't boot without it * AVX: latest MacOS won't boot without it * FMA: metal support needs this * AVX2 * BMI1 * BMI2 * kvm=on: QEMU use it to expose Hypervisor leaf node, which MacOS use it to determine the invtsc frequency from hypervisor node. * ~~vmware-cpu-freq=on~~: no more need, QEMU enabled it by default. 2. Add patch(from AMD-Vanilla) to support leaf7 cpuid features support * otherwise Apple won't use some important feature like AVX * can be check with `sysctl -a|grep machdep.cpu.leaf7_features` to see whether AVX/AVX2 is included. #### Passthrough #### Intel If you are using most recent generation Intel CPU(newer than Penryn), then you can just passthrough your cpu type with `mode='host-passthrough'`. ##### AMD You can passthrough amd process too, but with [AMD-Vanilla patches](https://github.com/AMD-OSX/AMD_Vanilla) like bare metal hackintosh. ### Other Notes about CPU #### Irregular Topology If you wanna assign an irregular topology (like 3-cores/6-threads or 5-cores/5-threads), you should fake a topology, otherwise you will get a kernel panic. Details can be found [here](https://github.com/Leoyzen/KVM-Opencore/issues/1). ```xml 8 ``` #### Unknown CPU Name If you find unknown cpu model in you system info, you can change it by specify the ProcessorType in SMBios Section of config.plist. Choices can be found in [here](https://github.com/acidanthera/EfiPkg/blob/master/Include/IndustryStandard/AppleSmBios.h). Example, if you have or emulate a skylake-server processor, you can use 0x0F01(Xeon-W): ``` // <0F01> 08 cores Intel Xeon W Intel Xeon W // <0F01> 10 cores Intel Xeon W Intel Xeon W // <0F01> 14 cores Intel Xeon W Intel Xeon W // <0F01> 18 cores Intel Xeon W Intel Xeon W ``` Notes, the cores should be matched too, or you can fake some disable cores to match the topology. Then you can specify 3841(0x0F01 in decimal) in ProcessorType section. ## GPU GPU passthrough is a good way to gain smooth experience in MacOS.If you do so, make sure you doing things right. __You have to make sure you put the gfx and graphic audio in the same bus but different function, otherwise DP/HDMI audio, Metal Support, HW Accuration won't work__. ```xml
``` If you did it right, then there is no much differeces between VM and normal setup procedure, just adding Lilu/WEG/AppleALC then the Metal/H264/H265 HW/HDMI Audio will work well in most case. ## USB We use EHC/UHC from qemu now(XHCI(nec/qemu) can't be recognized by MacOS now). USB port mapping(EHC) and USB Power injection(with fake EC ioreg) are already included in config.plist. # Known Problems/Help see issues.