Background
We can find DrvCeo’s (not advertisement) modded UHD630 driver for some 10th-gen CPU (driver package version 26.20.18.8061). This driver package supports i5-10400 G1 stepping (typical DEV 9BC8) but cannot work on i7-10700 etc.
On my desktop, UHD630 of i7-10700’s DEV is 9BC5. If I use DrvCeo’s driver package, the Device Manager reports error 43 when enabling the adapter. In fact, the driver’s DxgkDdiStartDevice CB returns 0xC00002B9. Then dxgkrnl.sys stops the adapter. The 0xC00002B9 problem should be solved first.
Drivers referenced
- DrvCeo’s driver (version 26.20.18.8061 dated 2021 Feb 06) with igdkmd64_M.sys version 21.20.16.5164. I think this driver is based on Intel’s offical 21.20.16.5164.
Intel’s offical: https://www.intel.com/content/www/us/en/download/18799/29972/intel-graphics-driver-for-windows-15-45.html - Lenovo M930t Intel VGA driver for Windows 10 (version 30.0.101.2079 dated 2022 May 26) with igdkmd64.sys version 30.0.101.2079.
https://newsupport.lenovo.com.cn/driveDownloads_detail.html?driveId=104341 - i915 open source driver for Linux
- drivers in igdlh.inf folder of Windows 7 with igdkmd32.sys version 8.15.10.1749.
PDB can be downloaded from Microsoft Symbol Server. - HD4600 driver (version 10.18.14.5180 dated 2021 Mar 09) with igdkmd32.sys version 10.18.14.5180.
https://www.intel.com/content/www/us/en/download/18424/30382/intel-graphics-driver-for-windows-7-8-1-15-36.html
I tried patching driver 2, loaded it, completed DxgkDdiStartDevice routine, solved DxgkDdiQueryAdapterInterface error, but got a BSOD when VGA monitor is plugged (I can not solve this problem). It provides suitable GuC firmware.
Driver 3 can provide driver routine in source level with a lot of MMIO register addresses.
Driver 4’s PDB provides function names helping understand drivers for Windows.
Driver 5 provides reference for turbo.
Testing desktops
Desktop 1: Lenovo ThinkCentre M930t-N000
CPU: i7-10700
iGPU (B/D/F:0/2/0): 8086-9BC5 316317AA REV_05
Motherboard: Lenovo I470MS (Q470)
PCH (B/D/F:0/31/0): 8086-0687 17AA-3163 REV_00
Discrete GPU: “AMD HD 7000 series” (HDMI, VGA)
Monitor: Lenovo F2014A (VGA max 1600*900@75Hz)
Desktop 2:
CPU: i7-10700
iGPU (B/D/F:0/2/0): 8086-9BC5 86941043 REV_05
Motherboard: ASUS TUF GAMING B460M-PRO (B460)
PCH (B/D/F:0/31/0): 8086-A3C8 1043-8694 REV_00
Discrete GPU: “NVIDIA GTX 960 2G” (DP, HDMI, DVI)
Monitor 1: AOC 27’in (DP max 2560x1440@100Hz) (DP, HDMI)
Monitor 2: TV 50’in (HDMI max 1920x1080@60Hz) (HDMI, VGA)
Modding
Modding test is based on driver 1.
- Replace GuC firmware to solve DxgkDdiStartDevice error.
Add a section on driver 1, copy GuC firmware of driver 2, and update the offset and size. Patch 14018B0B4 to jmp. - Solving turbo cannot work problem
When I finished step 1, the core frequency in GPU-Z fixed at ~350MHz. Turbo cannot work.
The reason is bit 9 cleared here. Patch it. - Solving freeze on wake up
On my desktop 2:
If the iGPU did not connect any monitors before standby, the adapter will not detect monitors plugged after wake up, media function cannot work, and the Device Manager freeze on stopping the adapter. If monitors connected before standby, the system will freeze after wake up (we will get a TDR failure in WinDbg session). The reason is BIT_01 (MAE, Memory Access Enable ) of WORD_04 (PCI Command) of PCI configuration space of iGPU (B/D/F: 0/2/0) is cleared after wake up. Comparing driver 1 and driver 2, we find Driver 2 made MAE bit check between GfxSetSourceVisibility and dmSetAdapterPowerState function calls of DxgkDdiSetPowerState.
Therefore we can patch driver 1 by adding MAE bit check routine here. We need to add a section.
I did this by WinDbg (‘’!edb’’ command) temporarily but the TV got a blank screen after plugged into HDMI interface after wake up. The media function is normal and the iGPU can turbo. - Others
Adding a section increases the PE header above 400 bytes. We need to increase its size to 600 bytes.
Problems
- bcdedit /set {current} testsigning on
- An INSPUR monitor detects no signal when HDMI port connected on my desktop 1. If it is connected to VGA port, the maximum resolution can be 1920x1080@60Hz.
- On my AOC monitor (max 2560x1440@100Hz):
If connect to DP port, there are random dots on the screen and blank video randomly.
If connect to HDMI port, the maximum resolution can be 3840x2160@60Hz.
Effects
Desktop 1: VGA works normal for ~50 days. But an INSPUR monitor with HDMI detects no signal (it works normal with AMD discrete GPU). Turbo, media and standby-wake are normal. Furmark at ~12 fps.
Desktop 2:
Monitor 1 - DP: random dots and random blank screen. 60Hz will be slightly better. 59Hz with much random dots. 75Hz with frequent blank screen. 100Hz with some random dots.
HDMI: OK.
Monitor 2 - HDMI before standby: 1680x1050@60Hz perfect. 1920x1080@60Hz cannot show all pixels (stretching works improperly).
HDMI after wake up: blank screen.
Addendum: HDMI on my Windows 10 with offical driver 31.x, it is also blank screen.
I may provide my modded driver package (not perfect at all) after I finished mod 3.
References:
https://wiki.archlinux.org/title/Intel_graphics