I should have provided some more explanation on the "universal" patches.
Once decompiled, there are always the same conditions on the problematic declaration blocks that have to be patched. There are some padding bytes between If()
(opcode: A0
) and the conditions (opcodes: 90
and 9232
for &&
and !=
). The content of these bytes can vary from board to board, but as long as the DSDT is not massively rewritten so as to change the number of padding bytes (here two), it's possible to set a mask and have "universal" patches.
With a hex editor one can look for the core parts of the patches (excluding the A00000
part at the beginning):
#1: 90 92934730 30320A03 93473030 3001
#2: 90 92934730 30320A03 90934730 30300192 93473030 340C2210 FA43
#3: 90 92934730 30320A03 93473030 300A02
There should be a single occurence of each of #2 and #3 in the whole DSDT.aml and a single occurence of #1 that is preceded by A0xxxx
(A0 and TWO bytes), plus a few occurences of #1 preceded by A0xxxxxx
(THREE bytes, thus not patched).
I have so far confirmed the pattern in Asus ROG Strix B650E-F (reported working by the user), X670 Hero, X870 Hero, X870E ProArt, and AsRock X870E Taichi Lite, so I'm reasonable confident they are generic enough.