-
Notifications
You must be signed in to change notification settings - Fork 8
Description
Hi there!
Your firmware customizer has been a godsend to get rid of that very annoying 4K emulation setting that would render those cheap JMicron bridges useless otherwise. However, there are many generic JMicron firmware dumps/files out there, and your tool focuses on a very specific release. This is important to know because the NVRAM settings seems to be consistent, but the firmware features aren't (some firmwares do TRIM, others don't, for example).
It would be great to document those EEPROM/NVRAM flags (which are at the last 512 bytes of the firmware dumps) to research exactly what each bit/section does. I've been reading your code and managed to understand things like that the 4K emulation flag lives at bit 5 on offset 0xE0 within the NVRAM section (for the JMS578), but not all the bits of that offset are known on what they toggle. Finding JMicron documentation regarding firmware/NVRAM on the JMS57x series (or any other chipset) has been impossible so far to me... except for the JM20337, which looks like it shares a common ancestry with the entire lineup of JMicron SATA to USB bridges. The datasheet for that one is 15 pages long, and on the very final page it details the layout for the contents of an optional 9346 EEPROM (128 bytes!). Comparing that layout with the 512 byte NVRAM area of the JMS578 DOES yield some resemblance:
- The NVRAM area has quadruplicated in size (128 -> 512 bytes)
- The 20337 EEPROM only contains USB descriptor strings, and a few reserved/unused bytes. The 57x NVRAM now repurposed some of that unused area for bridge configuration, but large parts of it remain unused
- Signature for the NVRAM ("JM") is at the very end of the EEPROM for the 20337, but right at the middle (first 256 bytes) for the 57x. The second half seems to have exactly the same content for every generic firmware I've found out there, including the dump I made from my very own JMS578 dongle - the exact same garbage. Or is it garbage?
- Unfortunately the EEPROM area on the 20337 seems to be undumpable using the known tools out there, including JMicron's own "JM2033x firmware update tool" (that doesn't even recognize that chip on their most recent releases)
Ideally this could be used to document the NVRAM contents, to make a more powerful generic customizer, where one can upload their own NVRAM (or full firmware dump) to customize everything - from the USB vendor strings to every single tunable parameter on those adapters. Maybe even extend it to other JMicron chips once we understand how to dump, flash, and layout their NVRAMs. The ultimate goal could even be a multiplatform flasher + customizer tool for those very popular and dirt cheap chips.