[Discussion] Firmware Update of the Marvell 91xx SATA Controller

Hello all,

I have a Marvell 88SE9235 based sata controller card (SI-PEX40062), which I screwed up by mistakenly flashing a 9230 firmware to it. Now it is in the state that it prevents computer from booting up if installed to a pci-e slot.

Is there anything that can be done to revive it? I’m quite lost with all these Marvell firmware stuffs, image creators etc. I have access to a programmer device, so if the image can be somehow built to be programmed to the SPI flash (my card has Macronix MX25L4006E) probably that could be used to recover it?
Ofcourse I don’t have any backup of the original image that was on the card

Any help from you Marvell gurus is highly appreciated!

I hope you learned the hard way to always backup before flashing. The problem with Marvell firmwares is that, although they are branded as 91xx or 92xx, they target specific IDs. The one component that makes a big difference is the Autoload, even if it is a few bytes long. The other specific component is the OROM (called BIOS in Marvell Firmware), but this one usually has a list of supported IDs, thus it should pick the right ID. The rest of the components seem universal (with 91xx and 92xx distinction), as I have seen them in different images for different controllers. One other problem could arise from mixing components from different firmware versions.

In your case, it would have been difficult, next to impossible, to obtain a working Autoload for 9235, given the missing backup. Luckily, the guys and girls from Station-Drivers had a 92xx firmware released for 9235. It was a crippled firmware (in the sense that it was missing most of the firmware components), but it had the needed Autoload for 9235. I have created and attached 2 images for your card, to be used with programmer. Here are the advices:
- if your card is based on Rev. A0 of Marvell controller, use ImageA0.bin
- if your card is based on Rev. A1 of Marvell controller, use ImageA1.bin
- if you don’t know what Rev. it has, start with ImageA0.bin
- after flashing and if it worked, check the “Current PCIe Speed” with Ctrl+M or in Marvell MSU utility.
- if it is 2.5Gb/s instead of 5Gb/s, you suffer from the same bug as many others. Read <this thread> (all posts) to understand what I mean and to select the best configuration of driver and firmware.
- if you have the speed bug, I will have to assemble a new firmware based on 2.3.0.1058, or even 2.3.0.1055, as I see a suspicious amount of code slacking in 2.3.0.1058 and later. (No, you can’t and you shouldn’t ask for a specific firmware version, unless you experience bugs with the versions I attached. These firmwares don’t fall from the tree, I have to assemble them with consideration for components selection, then double and triple check my work. Not to mention that I had to write my own script to split a firmware into components)

The attached images are based on 2.3.0.1063 Firmware, with Autoload 2001805 for 9235 (you can thank SD for providing it) and BIOS 1.0.0.1024 for 9235 (manual patched from 9230 ID).

Marvell_9235.rar (314 KB)



Oh wow, that was quick support! Thank you so much for taking the time to help me with this!

I will try your images and post back the results. First I need to figure out best way to hook this up to a programmer tough.

I’m not sure about the revision of the controller, as there is heat sink glued on top of it and seems too risky to remove. So I’ll proceed as you recommended.

Okay, got some progress!

First of all thank you lordkag, the card is again alive! Well, sort of…

I managed to program the flash chip with your imageA0.bin and the card is again functioning so as it doesn’t prevent the PC from booting and is detected by Windows. But then there are some problems.

If I’m using general MS AHCI driver for the controller, it gives error in device manager saying the device cannot start (error code 10). If I install latest Marvell driver 1047 it doesn’t give any errors and the device is listed under storage controllers as usual, but no drives attached to it are detected.

MSU detects it as well and the PCI-E link speed is correct:


So I went to try the A1 version image to see if I hadn’t flashed the correct one. Flashed the new binary by using mfg_mag imageA1.bin -newImag command.
Heres the output:


This didn’t make any difference, the card “works”, but still no HDDs detected in Windows using Marvell driver and non working MS AHCI driver.

Any further ideas? I’m willing to try anything.
Also thought of buying a second card and just copying the flash from it. This should work right? Given i get the same controller revision…

Thanks anyway so far!

It would have been helpful to post the entire screen of MSU, to see if all the components are properly detected. It would also have been helpful to post one from Ctrl+M. These are info that you now have access, they might help, whether you (or even me) don’t see anything useful in them. For instance, based on “Chip Revision ID = 11”, we can safely assume you need ImageA1.bin from now on. Other info:

- is MSU or Ctrl+M detecting the HDDs? It might be just a communication or settings problem. Try to clear CMOS and shutdown the system for a few minutes.
- do you remember if the device showed other Sub Device ID before? Or if Windows is showing something else in subsystem field (SUBSYS_ in Hardware IDs)? The Autoload has a section for subsystem ID. If it had other subsystem ID, it is now replaced with a generic ID, but you can find the old one in ghost devices or in DriverStore. Try GhostBuster or DriverStore Explorer.
- your card is not supporting RAID, based on the usage of 9235 controller, thus no RAID modes in MSU. But this also means that it might require a custom firmware. Do you remember if the fields in MSU were the same before the bad flash?

Since I don’t know which component is impending card functionality, I will try to go to lower firmware versions, with as few modifications as possible. Try 2.3.0.1058 and then 2.3.0.1055 from attached archives. Use ImageA1.bin, always shutdown and reset to defaults before testing the image. You better use the automatic flasher, type “go -fdid 9235” from DOS. Make screenshots from Ctrl+M and MSU, check Device Manager, upload screenshots and give valuable feedback. If one works, then we might try to upgrade one component at a time.

Marvell_9235_2.3.0.1055.rar (427 KB)

Marvell_9235_2.3.0.1058.rar (412 KB)

That pic I posted was actually the whole Device/adapter0 page of MSU, it doesn’t show any BIOS etc. version info I’ve seen on others pics. Don’t know why, perhaps not supported on 9235? Or then is related to the issue. Cannot say for sure, as I never used MSU before this problem.

Other thing is that I don’t get any Ctrl+M prompt at boot, not with any of these image versions. Tested on an UEFI system with CSM enabled and on older native BIOS system. Again, can’t tell if the prompt was there originally or not, as the card was in UEFI only system that doesn’t care about add-in boot ROMs. Considering this is a non-RAID controller, I suppose it doesn’t necessarily need to have any boot time config utility.

I tested the two new image versions you provided, but sadly neither of them made the disks visible. They both however introduced about 7 minutes long delay at boot, right where the possible option ROM message should appear. Only black screen is displayed while it hangs there. Eventually it continues the boot after the wait.
I noticed the 1055 and 1058 images are smaller in size than the original 1063 you provided, perhaps something to do with it? Or is it just some of the image’s module is smaller (loader, bios etc.)?


Managed to dig through Win logs and found the original event when card was first installed (untampered & working):

1
 
Device PCI\VEN_1B4B&DEV_9235&SUBSYS_92351B4B&REV_11\4&e9f8bba&0&0008 was configured.
 


And this is later with your image 1063 on a different system:
1
 
Device PCI\VEN_1B4B&DEV_9235&SUBSYS_92351B4B&REV_11\4&f2959ff&0&0018 was configured.
 


So only the last part differs, don't know what it means but could be just something system specific.

And about detecting the HDDs, no, MSU doesn't detect them.
I've also tried in Win10 install utility booted from USB, with and without Marvell driver loaded. And Ultimate Boot CD Live (USB) Linux, which also sees the controller but no drives.


So there are today's findings, sorry if I missed something important to report. It's 2 AM here so better to continue tomorrow :)

Yes, the absence of Firmware details in MSU and Ctrl+M could be determined by non-RAID controller. But, on the other hand, 9120 and 9123 do have those details while being just AHCI. It could be a Marvell thing or the indication that this relates to your bug. On top of that, some of the new firmwares show Ctrl+M message only when there are drive connected to Marvell controller. Which in your case is the same as having no drives connected.

Weird thing that these images have a delay, there is nothing changed in assembly, other than lowering the version of components. What was the method of flashing them, did it completed with successful message? The size is not that important, the first images had padding to fill the chip for programming use (to not receive size warnings), while these ones are at the normal size for flasher. In fact, it is the other way around: the components are bigger in these older versions, I hoped it had something to do with your problem. The SUSBSYS ID is the same, the last part is irrelevant.

I have another idea: what if the image posted at Station-Drivers was not crippled as I suspected, but a normal image for 9235? The link is <here>, if you want to try it before I can assemble a new image. The content is: Autoload 9235 2001805 + Bios 9235 1.0.0.1021 + Desc.txt + HW_Config.txt. I must warn you that it is missing all inner Firmware components (yes, Marvell is calling the whole image a Firmware and also an internal component as Firmware), which might not be important for non-RAID controllers, but it is also missing the Loader, which is a component present in all other Firmwares. Until then, I will try to assemble new images, leaving out the internal Firmware.

@lordkag I understand if you prefer not to reveal your sources, but, where would one look for updated fw/bios and bootloader for the 91xx

The method I used to flash was the go.bat in your packages. It showed the incoming end existing FW component versions and the successful message after the flash. Also tried direct mvf_mag command to flash, but it made no difference.

Tried that station drivers 9235 image and it behaves exactly the same as you 1055 and 1058 images. There is the delay at boot and controller detected in OS but no drives. So it seems those extra components in your images have no effect at all or are not getting loaded properly for some reason. Its weird though that your 1063 image makes the delay always not to appear at boot when flashed to the card.

FYI, I’ve ordered a second card of the same type that will hopefully offer the ultimate solution to this problem. It is still probably a month away though as it’s shipping from China, so I have good time to try something if there’s further ideas.
I make sure to share the ROM as soon as I get hold on the new card, to be inspected and to help others in the future. I’m quite curious now about what it is supposed to contain to make this thing work.

I am running out of ideas and you should definitely backup the firmware from your new card, for your own personal safety, but also for my research. Only thing I can think of is that your card needs a special Autoload or a special Loader, which I’m unable to find in my collection or elsewhere. Sadly, no one is backing up those firmwares, when they ask for help it is usually too late, the original firmware is gone. Here are my latest thoughts:
- try to flash 2.3.0.1063 again (if you haven’t already). It is the latest firmware and it makes no difference to your problem, but at least you don’t have that delay. Make sure you shutdown after flashing.
- remove the card and boot without it, revert BIOS setting to default, boot into Windows. Shutdown.
- add the card, boot into Windows, remove Marvell driver (also select “Deleted the driver software for this device”), reboot.
- repeat the above step until you are left with the Marvell Windows default driver, make sure you uninstall that as well (without selecting “Delete …”, which should be missing either way on system default drivers). Reboot.
- check if the problem persists, install latest Marvell driver, reboot. Check again.
- backup the last flashed image with “go -ra” and upload it here. I will check if the flashing was done properly.

I will try to make new images of 1055, 1058 and 1063, this time without the inner Firmware, which is useless either way on 9235. Not much hope of fixing it, but to give it a shot. One last thing I want to ask, the model and BIOS version of your mainboard, to check for conflicts with other Marvell modules.

Hi!
I have got an ASRock P55 Deluxe3 motherboard with the infamous Marvell SE9128 controller. I have never updated the firmware and it appears to be a pretty old one:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
BIOS Version 	        1.0.0.1014
Firmware Version 2.1.0.1410
Boot Loader Version 1.0.1.0002
Driver Version 1.2.0.1047
Chip Revision ID B1
Vendor ID 1B4B
Sub Vendor ID 1849
Device ID 9123
Sub Device ID 9123
Port Count 2
Max PCIe Speed 5Gb/s
Current PCIe Speed 5Gb/s
Max PCIe Link 1X
Current PCIe Link 1X
Supported RAID Modes RAID0, RAID1
Supported Stripe Size 32K 64K
Maximum PD per Adapter 16
Supported VD Cache None
Maximum VD per Adapter 2
Maximum PD per VD 2
Maximum Port Multiplier 1
 

I would like to find out a bit more about the controller. For example there is the mess with the Device IDs which I have described in this post: I still don't understand when the Device ID will actually changed to 9128, or if it will at all, since there is no "RAID Mode" option in the BIOS to set.
Here is an interesting from a SE9128 that pic I have found on the internet. As you see the Device ID shows 9128. I wonder how and when this can be triggered..


[quote="lordkag"]

It comes from the images I have, the content can change from user to user, due to Firmware's modularity. If anyone will upload a dump of his firmware, I can run that instead through my script. [/quote]
This looks pretty interesting, but what does your script actually show? What does "Rename Marvell Components" in the title mean?

I would really like to upload a dump of my firmware. What is the easiest way to achieve this and which tool to use? I tried it using the command "go -r" under DOS but I have been unsuccessful so far (some versions seem to dump nothing at all, while other versions make it look like they want to flash my chip - so I aborted).

Thanks in advance!
Nuc!eoN

@ NucleoN:
Since your questions are Firmware and not driver related, I have moved your post into this thread.
Furthermore you may have this way a better chance to get a reply from our Marvell Controller Guru lordkag.

@ lordkag:
I have renamed the title of this thread to open it for all users with a Marvell 91xx SATA Controller.
Furthermore I have stickied this topic, because it seems to be quite pupular.

@Nuc_eoN

The ID change was already known, if you had searched before. Look <here>, <there> and <elsewhere>. The confirmation first came from <here and surrounding posts>. The RAID mode can be selected from the same screen, from “Configure SATA as:” field, by playing with Tab/Enter or by reading the bottom suggestions. I wouldn’t take that screen as a representative sample. It is an OEM release (based on hotfix = 2), it is missing ROM/BIOS (ID is taken from controller), it was released as an IDE image. I actually have that image in my collection.

IMG.png



My script runs in two stages: extract the components from small or dump image, while saving them with general names - if I want to do a quick comparison with other images; then renames the components - for storage or complex comparisons. It is the result of many hours of hex comparison and disassembly, I can detect almost all useful informations. Even so, I still scratch my head with every Marvell topic I encounter. For dumping you should use the latest package from here (SP1813 - courtesy of Gaudi, he received it from ASRock, need to search for it) or this link. The command is “go -r”, it should work if you have a 9128 controller. More than that, this is the image you want to flash for 9128 controller, but a backup and a confirmation is always better.

I dont know if it is good place to put the post (@Fernando ) but I found method to recover from failed update/bricked the marvell chipset here is the link: http://netkas.org/?p=1182, look at comments…


Yeah I know, I had noticed this ID change back then in feburary 2012 (link).


Yeah, the issue is that I cannot find any "RAID Mode" for my Marvell controller in the BIOS. It is only possible to set it to IDE or AHCI mode, or enter the Marvel config utility.


Thanks, I have used Gaudi’s package from this post. It seems the content is the same package as the one from station-drivers, only that it contains an additional "Image_Creator" folder. What is it for?

Anyways, here’s the result:


I have attached the corresponding firmware file.

IMAG_RB.rar (104 KB)

When I mentioned that the ID change was known, I didn’t implied that it was an exclusive discovery, but rather that it was already posted here numerous times. But with this Marvell headache, I suppose it doesn’t hurt to bring it up front from time to time. If you don’t have a Marvell controller setting under Intel controller in main BIOS, then using Marvell’s Ctrl+M is the only way. Although I doubt that they will put a Marvell RAID controller without adding some related settings: either is placed in another section (read the manual), or it has something to do with the current Marvell firmware. To change it from Ctrl+M screen, use Arrows or Tab or Enter until you highlight “Configure SATA as:”. By reading your second line, I can assume you did all the above, but the actual RAID mode is missing as an option. This comes from the flashed firmware:

Marv_Dump.png



As you can see from the screen, you have the so called IDE firmware, RAID is disabled. Yes, you might say that you can switch to AHCI mode, but this is Marvell’s way of complicating even the most simplest things. More than that, you have some leftovers from a previous 2.1.0.1407 firmware. To fix both issues, I suggest you flash the image from the package you used for dumping, it was released for an onboard 9128 controller. You can see the components on the right section from <this screen>. If you are wondering about _extcard on Autoload, it means that the Autoload supports external cards with Marvell controller. Until this version, there were separate releases of the same Autoload, one for onboard and another for external. Marvell addressed this nonsense with a common Autoload, or they screwed up again. Since there haven’t been any reports and I vaguely remember that someone used this firmware on an external card, let’s hope it is the former.

Edit:

You should check your board and its specifications, maybe you don’t have 9128 or you have some limitations in selecting RAID mode. Second warning is for the PATA connector: if it is controlled by Marvell, it might became unavailable with the new Firmware, as you can see from Gaudi tests.

Wow this info is really crucial to me. The thing is that I do not actually remember what I did nearly 4 years ago, but I definately remember that I wanted to update the firmware. However I have doubted that I have actually done so.

If you say there are some remnants of an older firmware, it looks like I had actually attempted an update on the firmware. This would also explain my statement in the mentioned post:


Translation:


It is something I did not understand when I read this post yesterday, again after many years. But now it does make sense: I have actually been able to set my Marvell controler to RAID, but my attempted flash must have screwed this up and I left it at the state that it is today.
Btw it is 100% sure that I have an SE9128; that’s what the official ASRock specs say (link), SATA3 RAID feature was advertized for this mobo, too and addtitionally I checked the text on the chip itself. I dont think my PATA gets controlled by Marvell EDIT: It actually does get controlled by the Marvell chip, but I dont use it anyways so no big deal.

Think I will try to flash the firmware then.

Btw do you know what the comment under the download on station-drivers means:


Seems somebody had an issue flashing it onto an 9128??

That report is missing a few details, like what type of controller (onboard/external), the way it determined it truly was 9128, the preparations for flashing. I’m guessing the card must be in AHCI mode when flashing, or that the user had different conditions then what he suspected. You can go <here> and <here> to see that the firmware worked on an external card, which supports my first claim that this latest Autoload is compatible with both onboard and external controllers. Then you can start <here> and read the next page, especially <one>, <two> and <three>. Please note that around that time I wasn’t yet sure about the ID change. Then there is the report from Gaudi, the original tester of this new firmware and also the provider. I’m sure you can also find other reports, if you search for tags “9128” or “2.3.0.1007”. What I’m trying to say is that this firmware has been tested before.

Just have your Marvell controller in AHCI mode (which is already acomplished) and flash it with “go” and confirmations or “go -y” without confirmations. A full shutdown is needed. Test the result against your expectations, also test the IDE connector, in case it was something specific to Gaudi’s board. Please provide feedback of your tests, others will benefit from them.

Hi Lordkag, it seems the flash has not gone very well. The proccess ended with the message "Flash successful!!" and without any errors, however I am not able to enter the Marvel configuration utility through BIOS anymore (when I try to enter it the computer just restarts). Fortunately the controller is still alive and recognized by Windows - well apart from the PATA ports which indeed seem to be dead now. Marvell… what is wrong with you.

My MSU utility now reports:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
BIOS Version 	        1.0.0.1038
Firmware Version 2.3.0.1007
Boot Loader Version 1.0.1.0002
Driver Version 1.2.0.1047
Chip Revision ID B1
Vendor ID 1B4B
Sub Vendor ID 1849
Device ID 9123
Sub Device ID 9123
Port Count 2
Max PCIe Speed 5Gb/s
Current PCIe Speed 5Gb/s
Max PCIe Link 1X
Current PCIe Link 1X
Supported RAID Modes RAID0, RAID1
Supported Stripe Size 32K 64K
Maximum PD per Adapter 6
Supported VD Cache None
Maximum VD per Adapter 2
Maximum PD per VD 2
Maximum Port Multiplier 1
 
Apart from the changed version numbers of course, I have noticed one additional change: Maximum PD per Adapter (PD = Physical Devices btw) is now at the value "6" while it has been at "16" before. Any idea why?

I have also uploaded the current dump of my firmware. Maybe it helps in analysing.

Thanks in advance and merry Christmas! :)
Nuc!eoN

IMAG_RB.rar (139 KB)



Sorry for the late response, been mostly away from computers for the holidays.

Anyway I already got the new card before christmas! Wasn’t really expecting that fast shipping. And I’m happy to report that copying the FW to the old card fixed it!

Also can report now that there’s no Ctrl+M option for this card and only modules contained in the image seem to be:
Autoload: 200016
BIOS: 1.0.0.1013

Those are the same versions as in the Station-drivers 9235 image, but there is some differences in image structure when comparing in hex editor.
You can find my backup image attached to this post. It was taken using your 1063 image package (with go.bat -ra).

Big thanks to you lordkag again for all your efforts at this! Hopefully there is something useful in this 9235 image that can help in the future.
(For the record: it is from IO Crest SI-PEX40062, these are also sold under the brand Syba, if it makes any difference).


Happy new year to all, and flash carefully! And always backup!

BKIMG0.zip (20.8 KB)