Lenovo M700/M900 BIOS mod to Coffee Lake CPUs

Notice: Page may contain affiliate links for which we may earn a small commission through services like Amazon Affiliates or Skimlinks.

Gabe14

New Member
Sep 24, 2024
1
0
1
Hello eveyone, Ive had my m700 with an i7 6700 for a while, just got a brand new power supply for it. Im planing to move it to a bigger case and put an i7 9700 on it, has anoyone tried it? Also with that verision of the m700 with the modding could I put an i9 9900 on it?
 

wyk72

New Member
Sep 16, 2024
26
5
3
As requested, I'm sharing the coreboot file for M700/M900.

Boots with e2k/TianoCore.

ONLY Skylake/Kabylake CPUs microcode included.


- USE AT YOUR RISK

- FILE IS HIGHLY EXPERIMENTAL

- BACKUP YOUR BIOS WITH A PROGRAMMER FIRST

- WILL TAKE LONG TIME TO BOOT


GOOGLE DRIVE LINK:

**FILE REMOVED** NEW IMPROVED VERSION AVAILABLE SEE NEXT MESSAGE
 
Last edited:

wyk72

New Member
Sep 16, 2024
26
5
3
I have finally figured it out, I think.

I have successfully compiled a coreboot ROM file for M700/M900.

This one is working reasonably well.

Boot is FAST, really FAST as coreboot can do.

Compiled with support for Skylake/Kabylake/Coffelake (not tested since I do not own one).

Tested with Kaby Lake 7400t cpu, 100% working, temps perfect, everything OK, maybe some minor audio quirks (noisy/cracking analog sound sometimes, do not know why).

ASPM L1 disabled to make wifi/sff slot work.

**** VERY IMPORTANT ****

ME status was the reason why this thing was booting SLOWLY before.

I was DISABLING it with ME_DISABLE and the mainboard, being OEM SHIT, locks up/freezes.

ME MUST NOT BE DISABLED AT ALL TIMES and must be in "OK" state.


So the correct "bulletproof" procedure to flash this ROM, in my experiments was:

- UPDATE THE MACHINE TO THE LATEST BIOS FROM LENOVO :


- MAKE SURE THE MACHINE WORKS PROPERLY after the update: boot to windows, then shut down system.

- REMOVE COIN SIZED BATTERY BEFORE FLASHING

- INSTALL CPU (Skylake/Kabylake/Coffeelake)

- CONNECT PROGRAMMER (Neoprogrammer 2.2.0.10 works best with my CH341, but you can of course use ....whatever, a pi3 or anything else you are comfortable with)

- MAKE A FULL BACKUP OF THE BIOS i.e. READ THE CHIP (EXTREMELY IMPORTANT DO NOT SKIP THIS)

- PROGRAM BIOS WITH MY COREBOOT IMAGE (ERASE/WRITE/VERIFY) HERE IS THE LINK:


****IMPORTANT****
in this image I've ripped the ME firmware from a machine with latest LENOVO BIOS, so update it to the version in the link above BEFORE flashing.
I've also ripped the GbE Intel FW with MY MAC ADDRESS burned into it.
You SHOULD rip THE GbE Intel FW from YOUR OWN MACHINE and COMPILE coreboot with it to be 100% OK.

- REINSTALL COIN BATTERY

- TURN SYSTEM ON, after a reboot, you are into e2k/Tianocore!

- PROFIT from this 100% cute little PC !
 
Last edited:

JiksterZ

New Member
Sep 18, 2023
2
1
3
I have finally figured it out, I think.

I have successfully compiled a coreboot ROM file for M700/M900.

This one is working reasonably well.

Boot is FAST, really FAST as coreboot can do.

Compiled with support for Skylake/Kabylake/Coffelake (not tested since I do not own one).

Tested with Kaby Lake 7400t cpu, 100% working, temps perfect, everything OK, maybe some minor audio quirks (noisy/cracking analog sound sometimes, do not know why).

ASPM L1 disabled to make wifi/sff slot work.

**** VERY IMPORTANT ****

ME status was the reason why this thing was booting SLOWLY before.

I was DISABLING it with ME_DISABLE and the mainboard, being OEM SHIT, locks up/freezes.

ME MUST NOT BE DISABLED AT ALL TIMES and must be in "OK" state.


So the correct "bulletproof" procedure to flash this ROM, in my experiments was:

- UPDATE THE MACHINE TO THE LATEST BIOS FROM LENOVO :


- MAKE SURE THE MACHINE WORKS PROPERLY after the update: boot to windows, then shut down system.

- REMOVE COIN SIZED BATTERY BEFORE FLASHING

- INSTALL CPU (Skylake/Kabylake/Coffeelake)

- CONNECT PROGRAMMER (Neoprogrammer 2.2.0.10 works best with my CH341, but you can of course use ....whatever, a pi3 or anything else you are comfortable with)

- MAKE A FULL BACKUP OF THE BIOS i.e. READ THE CHIP (EXTREMELY IMPORTANT DO NOT SKIP THIS)

- PROGRAM BIOS WITH MY COREBOOT IMAGE (ERASE/WRITE/VERIFY) HERE IS THE LINK:


****IMPORTANT****
in this image I've ripped the ME firmware from a machine with latest LENOVO BIOS, so update it to the version in the link above BEFORE flashing.
I've also ripped the GbE Intel FW with MY MAC ADDRESS burned into it.
You SHOULD rip THE GbE Intel FW from YOUR OWN MACHINE and COMPILE coreboot with it to be 100% OK.

- REINSTALL COIN BATTERY

- TURN SYSTEM ON, after a reboot, you are into e2k/Tianocore!

- PROFIT from this 100% cute little PC !
Strange situation. My M700 did not start with i3 9100, it flash screen and nothing more. When I test that bios with my original G4400T, same situation. Maybe some problem with microcodes. With my original bios G4400T works well.
 

wyk72

New Member
Sep 16, 2024
26
5
3
Strange situation. My M700 did not start with i3 9100, it flash screen and nothing more. When I test that bios with my original G4400T, same situation. Maybe some problem with microcodes. With my original bios G4400T works well.
I got it working with the following CPUs:

- Celeron G3900T (Skylake)
- i5 6500 (Skylake)
- i3 7100 (Kaby lake)
- i5 7400T (Kaby lake)

I've compiled it with coffe lake support, but I can't test it (can't find a cheap cpu to make tests, will try).

Sometimes to make it boot the first time can take 20/30 seconds: try removing the battery and keep it removed for all tests.

There are a few caveats with M700 (B150 chipset), I am trying to contact coreboot devs for solving them.
 

JiksterZ

New Member
Sep 18, 2023
2
1
3
I got it working with the following CPUs:

- Celeron G3900T (Skylake)
- i5 6500 (Skylake)
- i3 7100 (Kaby lake)
- i5 7400T (Kaby lake)

I've compiled it with coffe lake support, but I can't test it (can't find a cheap cpu to make tests, will try).

Sometimes to make it boot the first time can take 20/30 seconds: try removing the battery and keep it removed for all tests.

There are a few caveats with M700 (B150 chipset), I am trying to contact coreboot devs for solving them.
Coffee-Lake i3 9100 is working. Same as G4400T. I found that bios doesn't support my monitor 21:9 2560x1080. After I use another with FullHD resolution it works.
 
Last edited:
  • Like
Reactions: wyk72

wyk72

New Member
Sep 16, 2024
26
5
3
With ALL the mods here, (original OEM fw+m710q on second half), the internal wifi sff slot stops working; the slot is not enumerated at all.

This happens with M700.

Coreboot mods too.

It works only with original, untouched LENOVO OEM firmware, for some obscure reason.

It's an M700-only issue I guess.

That's an issue I am trying to push into coreboot devs, we'll see.
 
Last edited:

Magman

New Member
Sep 18, 2024
1
0
1
I’m currently running a QJT1 on the M910q with a modded BIOS. Do you think your Coreboot will work on this? Idk much about it
 

dad1_2_3_4

New Member
Jan 28, 2024
2
1
3
With ALL the mods here, (original OEM fw+m710q on second half), the internal wifi sff slot stops working; the slot is not enumerated at all.

This happens with M700.

Coreboot mods too.

It works only with original, untouched LENOVO OEM firmware, for some obscure reason.

It's an M700-only issue I guess.

That's an issue I am trying to push into coreboot devs, we'll see.
Thanks for all your work. I have the same observation: the wifi slot stops working with original OEM fw+m710q on second half. I tried all bios settings, especially those ASPM related, but I still can not make windows activate the wifi slot. If you get the slightest hint on a solution, please post it here. Thanks.
 

wyk72

New Member
Sep 16, 2024
26
5
3
I’m currently running a QJT1 on the M910q with a modded BIOS. Do you think your Coreboot will work on this? Idk much about it
The port of coreboot to these machines Lenovo Tiny M900/700 was made by guys at DASHARO as far as I can tell.

They plan to port those machines (M920q) on the next coreboot relese, in November.

I have to say it's a strange world this "open firmware" one: lots of confusion between "distros" that basically do the same thing but with a ton of "slight variations", making an already complex subject - as Pc firmware is - even more complex.

There is coreboot, then the Dasharo fork, the IvyRain, Skulls, Heads....
 

wyk72

New Member
Sep 16, 2024
26
5
3
Thanks for all your work. I have the same observation: the wifi slot stops working with original OEM fw+m710q on second half. I tried all bios settings, especially those ASPM related, but I still can not make windows activate the wifi slot. If you get the slightest hint on a solution, please post it here. Thanks.
It's a weird thing, I'm trying to reach the guy who made the port at 3mdeb.com (Dasharo people, very cool guys from Poland), but nobody answers. I'll try buy a subscription for that.

I suspect there's a GPIO "secret" pin to enable the slot, as usual OEMs tweak the boards so it's a hacking game, basically.
 

mkopec

New Member
Oct 8, 2024
15
10
3
It's a weird thing, I'm trying to reach the guy who made the port at 3mdeb.com (Dasharo people, very cool guys from Poland), but nobody answers. I'll try buy a subscription for that.
Hi, I'm the guy who made the port, I see you made a ticket on coreboot.org and I've responded to you there but maybe here it's easier :)

Do note that I'm working on the port in my spare time, it's not a product (yet, at least)

I suspect there's a GPIO "secret" pin to enable the slot, as usual OEMs tweak the boards so it's a hacking game, basically.
I have the schematics and there is a pin M.2_WLAN_DISABLE# but it should be set correctly since I have a working m2 slot in mine.

There's two things that come to mind looking at the board changelog:
- one board revision had dedicated wifi power control circuit. Mine doesn't, it's simply always powered.
- In one board revision they changed the clock request pin

I might also have an outdated schematics. I'll look for a way to check if they changed the clock request pin on your board remotely
 

mkopec

New Member
Oct 8, 2024
15
10
3
Compiled with support for Skylake/Kabylake/Coffelake (not tested since I do not own one).
I think you might want to select `SOC_INTEL_SKYLAKE_LGA1151_V2` in coreboot config, this will compile with Amber Lake FSP that should be compatible with CFL processors. I have an m700 tower with that FSP and an 8100 CPU, works pretty well

ME status was the reason why this thing was booting SLOWLY before.

I was DISABLING it with ME_DISABLE and the mainboard, being OEM SHIT, locks up/freezes.
ah yes, coreboot was probably timing out on some commands to the ME. I'll try to incorporate this to the documentation when I get some time to write it

I'm still baffled by your graphics issue. Maybe try booting with the video module disconnected? Your logs show that a video module is plugged in, sadly I haven't tested any of these so I don't know it they're supposed to work.

Right now it's hard for me to develop and test because the one unit I have is now working as my router :p I found a cheapo m700 tiny unit with a g4400t, this will allow me to work on it again
 
  • Like
Reactions: wyk72

mkopec

New Member
Oct 8, 2024
15
10
3
I also took a look at the ME region from your coreboot binary, it looks like you have a different CLKREQ - CLKOUT mapping than me. Yours is CLKREQ 1 - CLKOUT 1, but my schematics say CLKREQ 11 - CLKOUT 1... This is 99.9% the reason why your wifi is not working.

I'm now comparing what the ME region says and what the schematics say is completely different, awesome. I am now wondering why my wifi slot is working at all. Lenovo UEFI seems to ignore CLKREQ and just leave clocks free-running, I'll do the same then. This will mean a tiny power consumption penalty, but it's not a big deal I think
 
Last edited:
  • Like
Reactions: wyk72

dad1_2_3_4

New Member
Jan 28, 2024
2
1
3
Hi, I'm the guy who made the port, I see you made a ticket on coreboot.org and I've responded to you there but maybe here it's easier :)

Do note that I'm working on the port in my spare time, it's not a product (yet, at least)



I have the schematics and there is a pin M.2_WLAN_DISABLE# but it should be set correctly since I have a working m2 slot in mine.

There's two things that come to mind looking at the board changelog:
- one board revision had dedicated wifi power control circuit. Mine doesn't, it's simply always powered.
- In one board revision they changed the clock request pin

I might also have an outdated schematics. I'll look for a way to check if they changed the clock request pin on your board remotely
Update on my further investigation: I fed pin 56 (M.2_WLAN_DISABLE1#) to the 3.3V line hoping that it will enable the wifi circuitry. Unfortunately no change, the Intel 7265 card is still detecting in Windows only the bluetooth, but no trace of the wifi.
 
  • Like
Reactions: wyk72

wyk72

New Member
Sep 16, 2024
26
5
3
I think you might want to select `SOC_INTEL_SKYLAKE_LGA1151_V2` in coreboot config, this will compile with Amber Lake FSP that should be compatible with CFL processors. I have an m700 tower with that FSP and an 8100 CPU, works pretty well



ah yes, coreboot was probably timing out on some commands to the ME. I'll try to incorporate this to the documentation when I get some time to write it

I'm still baffled by your graphics issue. Maybe try booting with the video module disconnected? Your logs show that a video module is plugged in, sadly I haven't tested any of these so I don't know it they're supposed to work.

Right now it's hard for me to develop and test because the one unit I have is now working as my router :p I found a cheapo m700 tiny unit with a g4400t, this will allow me to work on it again
I'll send you one unit if you want, I have plenty of them, so we can iron out those bugs and make those machines worth using in 2024/2025.

They are far superior to almost any thin client, extremely capable for the size.

And if we feel adventorous, we can fit them with comet lake ES xeons made for notebooks (45W tdp, a bit high but still within margin), and enjoy extremely capable and tiny machines, these cpus are about 55 Euros on aliexpress.
 

wyk72

New Member
Sep 16, 2024
26
5
3
I also took a look at the ME region from your coreboot binary, it looks like you have a different CLKREQ - CLKOUT mapping than me. Yours is CLKREQ 1 - CLKOUT 1, but my schematics say CLKREQ 11 - CLKOUT 1... This is 99.9% the reason why your wifi is not working.

I'm now comparing what the ME region says and what the schematics say is completely different, awesome. I am now wondering why my wifi slot is working at all. Lenovo UEFI seems to ignore CLKREQ and just leave clocks free-running, I'll do the same then. This will mean a tiny power consumption penalty, but it's not a big deal I think
I am checking coreboot code, I think the CLKREQ mapping is here on the "devicetree.cb" file:


Code:
               device ref pcie_rp7 on # M.2 2230 - WLAN
                        register "PcieRpEnable[6]"                      = "1"
                        register "PcieRpClkReqSupport[6]"               = "1"
                        register "PcieRpClkReqNumber[6]"                = "11"
                        register "PcieRpAdvancedErrorReporting[6]"      = "1"
                        register "PcieRpLtrEnable[6]"                   = "1"
                        register "PcieRpClkSrcNumber[6]"                = "1"
                        register "PcieRpHotPlug[6]"                     = "1"
                        chip drivers/wifi/generic
                                register "wake" = "GPE0_PCI_EXP"
                                device generic 0 on end
                        end
The register "PcieRpClkReqNumber[6]" points to "11". I am changing this to "1" and recompiling right now, to see if it's a proper fix.
 
  • Like
Reactions: mkopec

wyk72

New Member
Sep 16, 2024
26
5
3
....no luck, even changing the mapping. Will test again.

edit: after a LOT of tries, still no wifi (PCIe port under chipset port 00:1c.0 ->01:00.0 not enumerated at all; pcie port initialized but nothing found after scan at coreboot time)
 
Last edited:

mkopec

New Member
Oct 8, 2024
15
10
3
@wyk72 Note that clkreq 1 is already assigned to the SSD slot, try setting SSD's clkreq to 11 (so swap them around) for a quick dirty workaround
 
  • Like
Reactions: wyk72

wyk72

New Member
Sep 16, 2024
26
5
3
@wyk72 Note that clkreq 1 is already assigned to the SSD slot, try setting SSD's clkreq to 11 (so swap them around) for a quick dirty workaround
The must be something slightly different, since this unit (M700 tiny) does not have a PCIe NVME slot i.e. the slot is SATA-only (tested and working) .

In coreboot console I read:

Code:
[INFO ]  Found PCIe Root Port #7 at PCI: 00:1c.0.
[NOTE ]  pcie_rp_update_dev: Couldn't find PCIe Root Port #17 (originally PCI: 00:00:1b.0) which was enabled in devicetree, removing and disabling.
[INFO ]  Remapping PCIe Root Port #7 from PCI: 00:00:1c.6 to new function number 0.[INFO ]  Found PCIe Root Port #7 at PCI: 00:1c.0.
[NOTE ]  pcie_rp_update_dev: Couldn't find PCIe Root Port #17 (originally PCI: 00:00:1b.0) which was enabled in devicetree, removing and disabling.
[INFO ]  Remapping PCIe Root Port #7 from PCI: 00:00:1c.6 to new function number 0.
In their infinite wisdom Lenovo has decided to downgrade the board even further, in the usual market segmentation scheme.

Wll try to do as you suggest and report back.

EDIT: still no joy. wifi/pcie slot is not initialized at all.
 
Last edited: