Archive for the 'Uncategorized' Category


Installing Windows 10 on a Panasonic Toughbook CF-F9

In general, the installation of Windows 10 on a Toughbook CF-F8 or CF-F9 is unremarkable. Either an upgrade or a fresh install on an empty drive will work. Then install Windows 7 64-bit drivers in a logical order (OS INF, common components, misc driver, other drivers, then the utilities). You can use the driver download manager to download them all beforehand.

There are only a couple of issues, specifically one serious one and one minor one.

The first (serious) issue is about the Intel Dynamic Power Management (ETM) driver, which is blacklisted in Windows 10, saying something along the lines that the driver is broken in Windows 10. First of all that’s a lie – the driver is working perfectly under Windows 10, and secondly, when this driver is absent, the Toughbook is unable to wake up from sleep (the CPU resets during wake-up), and the manual fan control (low/medium/high) isn’t working. This has been an issue in older versions of Windows and is still an issue in Windows 10. Needless to say, it’s quite a problem for a laptop to be unable to sleep properly.

So how do we install a blacklisted driver? The blacklisting is done at MSI level, so we need to install it manually:

  • Uninstall the built-in Intel Dynamic Power Management and/or Thermal Control Device, including the driver (can be found in Device Manager under the System category)
  • Go to DynamicPowerPerfMgmtDriver, right-click on Drivers\Etm.inf, select Install…
  • Copy x64\EtmDevPch.sys to \Windows\System32\Drivers
  • Download and import this reg file: install-etm.reg
  • Now go to the Video driver, right-click on IIPS\lmpcd.inf, select Install…
    (see update for version 1703 below)
  • Reboot
  • Before any major OS upgrade, remove the driver by removing or renaming EtmService.exe and EtmD*.sys files on your system.

Now to the second, minor issue (although I found it quite annoying). The Panasonic touchpad/wheelpad utility (the one that handles circular scrolling) isn’t working in Windows 10 metro apps (Edge browser, Store, etc.). To fix, download and install this patch, which is basically a shim that patches the utility to call SendInput instead of posting WM_MOUSEWHEEL messages.

All done! Enjoy!

===== UPDATE June 2017 =====

Something seems to have been changed in Windows 10 version 1703 – it seems to install the ETM driver automatically and it has an updated Panasonic Hotkey driver (0019). But the ETM driver now indeed isn’t working properly – the fan control works but the driver crashes on wake-up (bugcheck 139 in EtmDrvMgr.sys). I was able to kind of make it work again by uninstalling the Intel Turbo Boost driver (lmpcd).


BMW MRSZ “1 internal ECU error” fix

I lost almost an entire day trying to figure out what went wrong when I was playing with my E36 airbag module coding in an attempt to disable passenger seat occupancy detection.

I didn’t understand why most MRSZ settings were duplicated, such as these two:


I set only one of these to “nicht_aktiv”, after which the module threw an “internal ECU error” and the FS_LOESCHEN command returned ERROR_ECU_REJECTED. Even after I restored all coding settings back to their original values, the error remained.

As it turns out, after digging through 24KB of microcode, the reason to duplicate every setting is very simple – it is a form of EEPROM error detection. The unit periodically checks to see if every setting has the same value in both copies, and when that is not the case, a static error 195 is logged. Every error code above 100 is mapped to the “internal ECU error”, and when that happens the erase function is also blocked.

Fortunately, at the same time I also found a “secret” command to write EEPROM bytes. Not all areas can be written with that command, but at least the area where the errors are stored is writable.

Attached is an EDIABAS script that attempts to “reanimate” an MRSZ unit. Note that you need to restore the coding to a working state before running the script. NCSExpert’s SG_CODIEREN command will end with an error, that is because it tries to erase errors at the end of the process, which fails, the actual coding should in fact be OK.


Note – the script supports only MRSZ units (MRS v06, P/N 8374799), it does not support MRSZ2 (MRS v07, P/N 8372521), MRSZ3 or MRSZ4. The “secret” command simply does not exist in these modules. I do not know if it supports the older ZAE2 (P/N 8374798) units.

The source code of my MRSZ2 attempt can be found here. It includes working support for MRSZ.


Hello world!

Hello world! :p

Sorry, the first few posts will come slightly out of order. Have lots of pre-existing info that needed to be published for a while…