[Discussion] TPM 2.0 on unsupported motherboards

I have a lot of TPM 2 Supported boards from X99 to Z170.

I also have a Z97 UD5h that apparrently has TPM 2 support on an experimental Beta bios for the black bin edition.

I’ll need to contact Gigabyte for that link though, since they don’t share the bios link here.

Let me know where I might need to dig for that - some nice low hanging fruit to be found here.

I’ve soldered on a TPM 9665 from infineon for a HP motherboard running H81 or something, but that doesn’t seem to work whatsoever under windows - despite being an identical pinout to the 1.2 spec.

So the idea is, if I can somehow get the TPM firmware into the bios, which I’ve found somewhere in the DXE’s and the further sections at the end of the bios, which contain them, maybe we can port them straight in via DXE and otherwise injection methods in the same way.

I’ve got quite the board collection too - A ton of Asus maximus boards of the Z87 and Z97 and Z77 eras. Some of those might support TPM 2, but I’m not sure atm

PS: I am looking for a way to modify the Q150 chipset from HP, (unprotected by surestart) but the intel tool doesn’t compile the end bios :confused: - any way to do it outside of linux to add all xeon 6 gen support?

@Wingklip You’d have to swap/insert the DXE/PEI modules with ones from a similar TPM 2.0 board and also change the DSDT section I mentioned to be from that board.

The DSDT section tells the OS how to call the SMI handler (which is setup by SMI handler DXE)

1 Like

Care to explain part 2? I can drag in all the PEI and DXE modules, but I’m unfamiliar with the modding the DSDT side of things and the SMI handler.

I think I’m meant to replace the existing ones, and put them in the same order

@Wingklip SMI handlers are just DXE drivers labeled as SMI in UEFITool. To modify DSDT you have to use AmiBoardInfoTool to extract/rebuild and iasl to decompile/recompile. Or you can just make Windows load modified DSDT but it will be test mode then

god that sounds a bit out of depth
Where do I even download these/do I have to force myself to learn linux to run the scripts?
Might be easier to pay you some australian dollars XD

I’m thinking we could drag and drop the SMI handlers as well for the appropriate TPM modules? Or is this really requiring mod only?

@Wingklip the method to extract, decompile and rebuild dsdt in amiboardinfo is described here

I can provide the bioses for testing :sweat_smile: for now – I might need a demonstration XD

I wonder if the Superio is uniquely addressed in the DSDT/SMI handler section for TPM? Since all the pinouts come off the Superio

I’ve got the elusive z97x ud5h black edition bios, where can I send or attach it?

It contains TPM 2 code and DXE’s, so we can strip it for that and maybe port it to 2-5th gen

Can’t u just upload it to the forum after compressing?

I don’t have a BIOS flasher or TPM module so can’t really mess with it

@Wingklip

Z97XUD5HBK.F9d.zip (9.3 MB)
Here’s the file, it’s for 4th and 5th gen and I still retain the motherboard for potential testing.

I have the UD5h which doesn’t have TPM capable bios let alone the BK edition betas.
Apparently people were able to cross flash this across to that board at the cost of XMP.

Own a Z97X-UD5H, wondering if there are any updates on getting the tpm 2.0 support ported over. @Wingklip Thank you for the bk bios.

Did you get your board to work with a TPM 2 module? I happen to have a pin compatible TPM 2 module + a Gigabyte B75M-D3H and I was curious if you’d be able to share your modified bios (if you got it to work). Thanks.

@samuel.allred No I didn’t even try a TPM module yet. You could try module swapping in TPM 2 modules and DSDT edit or something. Look at TPM 2 motherboard DSDT for reference

Would love to see this happen.

Got a bit bored this morning and looked at what would be needed for DSDT edits.

If you didn’t care about keeping 1.2 support, some of the logic can be ripped out/replaced.

Untested, of course, but this patch seems to be all that’s needed on my board (at least with the ACPI tables). The resources and device specific methods appear to be same/similar.

2736,2744c2736,2745
<                 Method (_STA, 0, NotSerialized)  // _STA: Status
<                 {
<                     If (TPMF)
<                     {
<                         Return (Zero)
<                     }
< 
<                     Return (0x0F)
<                 }
---
> 				// Causes the system to assume TPM is *always* enabled
>                 //Method (_STA, 0, NotSerialized)  // _STA: Status
>                 //{
>                 //    If (TPMF)
>                 //    {
>                 //        Return (Zero)
>                 //    }
> 				//
>                 //    Return (0x0F)
>                 //}
11645c11646,11647
<                 Return (0x0201D824)
---
>                 //Return (0x0201D824)
> 				Return ("MSFT0101") // https://bugzilla.kernel.org/show_bug.cgi?id=98181#c25
11650c11652,11653
<         Name (_STR, Unicode ("TPM 1.2 Device"))  // _STR: Description String
---
>         //Name (_STR, Unicode ("TPM 1.2 Device"))  // _STR: Description String
> 		Name (_STR, Unicode ("TPM 2.0 Device")) // Seems to be optional according to spec, but identify it here
11713c11716,11717
<                     Return ("1.2")
---
>                     //Return ("1.2")
> 					Return ("1.3")

@whatnot I do think there are several DXE/PEI modules that have to swapped too. Only way to know is by testing tho

I was going to try enabling TPM 2.0 on my P9X79-Pro, but for some reason the pro version does not have a TPM connector while the non pro version of this motherboard does have.

Take a look at Asus H97M-E 2702 BIOS and on any BIOS before that, you can spot in the DSDT changes they have made to support TPM 2.0 modules on top of the support for TPM 1.2 that already existed.


Seems a lot like the changes you have made (there are more TPM changes that were not shown in this picture).

Thought I’d share if anyone else wants to give it a go. Might even try myself sometime.

Hi there,
I’ve just registered to summarize my experiances with adding TPM 2.0 support to the Z97X-UD5H Motherboard. Unfortunately there is no official BIOS for this MB to support TPM 2.0 but there is a development BIOS for Z97X-UD5HBK (as already mentioned by @Wingklip) which does exactly that. Those boards are almost exactly the same and I can confirm, that cross flashing the F9d for BK Version on the Z97X-UD5H works at the cost of XMP. The TPM 2.0 works as expected then. Nevertheless I’ve tried to modify the F10 and F11d BIOS for the Z97X-UD5H to see if it can be forced to support TPM 2.0.

I’ve swapped out all the PEI and DXE Modules that seemed to have any connection to TPM. I’ve also added some missing PEI/DXE Modules, such as Tpm20PlatformDxe, TrEEDxe, Tpm20Acpi, AmiTpm20PlatformPei. Then I compared the differences in DSDT. It seems that the only difference was the added support for TPM 2.0. So I just took the DSDT from UD5HBK, recompiled it and replaced it in UD5. After it didn’t seem to work I also tried to swap out the whole AmiBoardInfo DXE.
Unfortunately all of those changes didn’t seem to work. The only change, that I could see was that in the TPM Subsection of the BIOS it said “Reset Required” instead of “TPM SUPPORT TURNED OFF”. Then I just gave up and tried to modify the Z97XUD5HBK.F9d to support XMP on Z97X-UD5H, also without success :(.
Now I just cross flashed the original Z97XUD5HBK.F9d and left it at that for now.

If someone has an idea what I did wrong or what I can try next, I would appreciate it. If not I’m just going to stick with Z97XUD5HBK.F9d…

Just inserting missing PEI DXE modules won’t work.
I try to do this on my P8Z77-V.
But until now no test was made, still in phase of looking what modules need to be inserted and replaced.
Why I say just inserting-replacing modules won’t work.
Some of them check for Setup variables (TPM enabled-disabled, TPM version 1.2 or 2.0, and few others) but so called “donor” BIOS have other config of Setup as result on original BIOS reading Setup value for TPM enabled which is for example at 0x76 is OK but in ported BIOS at 0x76 it may be something else like Network Boot .
Also some DXE modules read write on some ports, in my case P8Z77 read-write to some ports, in case of some Asrock board from where I get modules readig-writes are at other ports.
All this things need to be fixed, patched to get something working.

Hi everyone

Bringing this thread back to life as I wonder if we can drive a bit more interest in it seeing as Win10 will be EOL this year?

I have an Asus P8Z77-M PRO / 3770k (already modded for NVMe boot support) which I’d like to keep alive for a while longer as it’s still a capable setup.

I bought a 20+1 TPM 2.0 AIB a while back, the BIOS recognises it’s got a TPM in there but it won’t enable, It’s tantalisingly close so I’m sure this could be done, I just don’t have the necessary understanding to work it out myself!

I previously used code from the Asus Z97 Pro BIOS to enable NVMe boot support (following a guide), but after reading a related reddit thread
https://www.reddit.com/r/ASUS/comments/o7auys/is_there_a_tpm_20_module_for_the_asus_z97/?rdt=52199
and seeing as my TPM card has the MC0410 part number I wonder if the donor BIOS would have to be a X99 board.

Any help/guidance would be appreciated!

Not fused in ME 8.x FW and only TPM 20+1 v1.x works, TPM v2.x modules are not compatible in Intel 7 Series, only in some 9 Series and 100 up.