Fuel Firmware research, with dump-lings!
#1
Information  Fuel Firmware research, with dump-lings!
Hi All,
On to the next big research effort...that I need all your help with... offline Fuel Mainboard PROM firmware flashing (recovering from bad flash or CPU change).

Jumping off of this conversation: https://forums.irixnet.org/thread-2164-p...l#pid22877

I used a damaged Fuel mainboard that had an 800Mhz PIMM on it from jwhat, that was ruined in shipping, originally purchased from Hamei.  I removed three AMD AM29LV160DT-120EC chips from the board,  two (with stickers) above the XIO slot, and a third on the rear side of the board, under the first stickered chip.

The encoding needed to word-flipped to read, I'm not sure of endianness at this time, but I THINK it's Big-endian encoded on the chips.

I have confirmed several things:

The chip labelled with a 1 on it's numerical tag, (closest to the coldfire IC) is the L1 firmware.
The chip across from that is the PROM firmware.
The chip under the L1 firmware (underside of board) has the word BEDROCK in it's firmware several times...but it mostly EMPTY and seems to contain only error messages and small amount of string storage (this is very perplexing).  I expected a lot more, that worries me.

The PROM image contains TWO copies of the partial magic number "ip27config", however one of them appears to match the string and struct for 
ip27config_T @ address 0x60 offset.  It's for an 800Mhz, which matches the two hex struct values on the thread link above from jwhat.  The other partial magic number copy (@ 0x165b00) isn't recognised by myself.

I cannot find any CPU or spec references in the "bedrock" firmware image...I'm calling it that for now, until I know more.  

I need help fully decoding the ip27config_T @ address 0x60 offset back into it's struct.  I having issues keeping it straight..because I've yet to find the cache size. I've not found the the PROM version string either.

So looking back on the other threads when going from a 600Mhz to 800Mhz...All values except for CPU speed and Hub speed are the same...so it seems a SINGLE line change of the firmware may in fact do that much!  A 500Mhz & 900 mhz have unique cache sizes so "altering" firmware from a 600Mhz or higher requires changing more values to get 500Mhz or 900Mhz working.  If I had a research subject (part) that was a 500Mhz, I'd just do that as well..I don't right now.  I might be able to flash one down later...but I have 600Mhz and 700Mhz PIMMs on hand...so I can handle that, at least.

So my biggest concern comes from any synchronize information that is set up between the various firmware's when the Irix flash utility does its work. I don't think the L1 has any real CPU information in it judging from what I've seen and also the fact that the L1 can run even when the CPU specs are totally wrong.  So an L1 offline reflashing recovery seems like a slam dunk (in theory, unknown in practice, at this time). But anyone that has a totally corrupt oh one that constantly crashing and can't use either images, this may be the answer for you so contact me and we can try that.

That just leaves the bedrock and the PROM's relationship. Because I don't think I really found true PROM storage, the possible problem emanates from not synchronizing these two elements when replacing firmware on a fuel mainboard. If I knew what the board had before and it was between 600 MHz and 800 MHz I could probably just hack the PROM firmware for the two aforementioned values and it would probably work fine. But if I'm changing what the board had more radically then it's possible that those values exists somewhere else on the board and now they're out of sync and things will just crash and not work.

So I'd like help on the following:

Please look through these firmware images and see if you can find any additional information that I either haven't mentioned here or that support or don't support my concerns. I have a client with what I believe is a bad PROM flash because of some other aligned symptoms, that I'm going to try a PROM donor on. The board I was going to use as a donor turns out to have a 12V rail short on it. So I need to address that first to see if I can get both boards coming along. 

Both boards are the exact same part revision so they're actually sister boards. They only have their two rightmost numbers off on the serial number as well. So I was hoping that a complete clone of one could overwrite the other and I know it would probably work. But I am obviously concerned with the fact that I may not want to or need to replace all three chips for a board recovery or even a PIMM change.  I have no idea what the original CPU speed was on either board and cannot start L1 to PROM POD to query that! That's what prevents a partial relfash at this time...until I understand the sync issue.

As I summarized before, I have not found the cache size storage yet. And I've not found any of the other values you put in to the flash utility outside of CPU speed and hub speed. As I mentioned several processors share a majority of this information so moving between those subset of processors would likely be fine. But I still don't know where all the info goes and that's where my synchronization worry ties in. So that's what I would like help with so I'm going to post these firmware dumps right now and you can all play with them and tell me what's what. I have no idea what version these are because I never saw the board running that they came from. It be nice if we could figure out where the version numbers are to tell as I collect firmware images what versions I have or potentially what versions I can use. Obviously flashing the very last every PROM firmware would be a good idea (if possible)...else I'll need to get a collection of the firmware to mix and match existing versions on a mainboard under repair.


One incredibly interesting thing I found in the PROM from me just skimming for English language strings was the fact there is a fair amount of coding here and English sentence strings that directly inform you about incorrect L1 versions, obsolete L1 versions, and a warning about running the L1 in what it calls "raw mode". It seems that the production PROMs were designed to put up with a lot of testing or prototype L1 firmware and then had to be plugged with various logic that detects and reacts to "obsolete firmware". I know Jan-Jaap has talked about this in the past and you would assume that the first ever customer/production released L1 firmware for Fuel was obviously not test firmware so you have to wonder why the problem required this level of work to prevent anomalous L1 versions from being installed. But there is more than a few descriptions that directly talk about the L1 being in an unsupported mode or an unsupported firmware or detection of incomplete L1 compatibility. I found that extremely interesting given the restricted releases SGI did.

So there you have it, I've taken the first steps and here are the fruits of that so far. I will need to do a little work so I probably won't revisit this for a few weeks and I've also attempted to order new old stock of this exact chip in order to flash fresh ships and work with them for my upcoming board work. In the meantime the issue of partial copy versus full three chip copy to a like revision mainboard is going to be the hot topic here.

Please help me in tracking down other sections in this firmware that may need calling out or altering for the purposes of messing with existing firmware, if I was doing a partial copy for donor transplant, or just information in general that could be useful to the recovery situation. Obviously this may be like jumpstarting a car or not everything goes correctly. My hope is that it goes correctly enough that we can still jump in to Irix and do a flash of firmware specifying all the values we want and have everything override itself and re-synchronize. As long as it'll start without major crashing or other problems and we can perform a flash after the fact I'd still call that a giant win. 

Also jwhat, could you please fish out your hex files and do a diff for me on the PROM against the irix PROM dumps you did for the above linked thread?  I'd be very interested to see if both the old 800Mhz and your new 800Mhz still are nearly alike or not (what's the difference between systems).



Since I can't upload them to the forum I'll use my Google Drive for now. But it won't be indefinite so get them while you can.

https://drive.google.com/drive/folders/1...sp=sharing

Cheers and don't fill up on dump-lings...you'll spoil your dinner.
(This post was last modified: 07-29-2023, 01:36 AM by weblacky.)
weblacky
I play an SGI Doctor, on daytime TV.

Trade Count: (10)
Posts: 1,716
Threads: 88
Joined: Jan 2019
Location: Seattle, WA
Find Reply
07-29-2023, 12:56 AM
#2
RE: Fuel Firmware research, with dump-lings!
Hi Weblacky,

that is really great progress.

Interesting result on the "mostly empty BEDROCK chip".

I am wondering, if you put a "blanked" PROM chip in, would the machine do some minimal auto initialisation, using code in the BEDROCK chip, like the L1 when you plug in a blank DALLAS.

Personally I would not be surprised if this was the case, as it makes the manufactoring process simpler if you can put "empty" chip in and then run a bootstrapping process on board once manufacture has completed.

BTW, based on the "flash" diagnostics, it seems that the update only applies to one place, but this is something that I expect you will find out once you put a "reprogrammed" chip back into a Fuel with corrupted flash.

I think the number of "corrupted" flash boards is much higher than the number of ex-900 MHZ boards, as there were such low volumes of the "faster" machines to begin with.

Or have most of them been "scrapped" long ago ?

Glad to see that you have put the damaged FUEL board to use.

The damaged board was from an 800 MHZ Fuel BTW and I have the 800 MHZ PIMM in my Fuel, from that board.

Do you have a nice stock of dead Fuel board to revive ? ;-)

Cheers from Oz,

jwhat/John.
(This post was last modified: 07-29-2023, 03:03 AM by jwhat.)
jwhat
Octane/O350/Fuel User

Trade Count: (0)
Posts: 513
Threads: 29
Joined: Jul 2018
Location: Australia
Find Reply
07-29-2023, 02:58 AM
#3
RE: Fuel Firmware research, with dump-lings!
(07-29-2023, 02:58 AM)jwhat Wrote:  The damaged board was from an 800 MHZ Fuel BTW and I have the 800 MHZ PIMM in my Fuel, from that board.

Yes, I remembered that's why I asked if you could please Diff you current PROM dump from the one on my Google drive?  I'm curious if there is a difference of more than the two CPU and Hub speed values.  Since it's not the same board this time.

Also, what tells you that the "based on the "flash" diagnostics, it seems that the update only applies to one place".  The flash output claims to be programmed the BedRock...so what gives you the impression it's one place?  Can you elaborate?

Thanks!
weblacky
I play an SGI Doctor, on daytime TV.

Trade Count: (10)
Posts: 1,716
Threads: 88
Joined: Jan 2019
Location: Seattle, WA
Find Reply
07-29-2023, 03:17 AM
#4
RE: Fuel Firmware research, with dump-lings!
Hi Weblacky,

I had quick look at dump.

The bytes are swapped on your dump so when I get hex conversion it comes out backwards:


00000000 f0 0b 00 01 00 00 00 00 f0 0b 89 04 00 00 00 00 |................|
00000010 f0 0b d0 04 00 00 00 00 f0 0b f3 04 00 00 00 00 |................|
00000020 f0 0b dc 04 00 00 00 00 f0 0b 83 07 00 00 00 00 |................|
00000030 f0 0b ed 08 00 00 00 00 f0 0b d6 04 00 00 00 00 |................|
00000040 f0 0b d8 04 00 00 00 00 f0 0b da 04 00 00 00 00 |................|
00000050 f0 0b f1 04 00 00 00 00 f0 0f b0 08 00 00 00 00 |................|
00000060 00 00 15 00 9b 54 85 af 70 69 37 32 6f 63 66 6e |.....T..pi72ocfn|
00000070 00 00 00 00 af 2f 00 08 00 00 00 00 eb 0b 00 c2 |...../..........|
00000080 00 00 00 00 13 00 d0 12 00 00 01 00 00 00 10 00 |................|
00000090 00 00 02 00 00 00 f9 00 00 00 05 00 00 00 10 00 |................|
000000a0 00 00 06 00 00 00 b4 00 00 00 00 00 00 00 00 00 |................|
000000b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

There are also lots of "gaps" in your dump.

So need to look at how to "flip" the bytes so can do a sensible diff of dumps.

This might take a bit of manual reading ...

Cheers from Oz,

jwhat/John.
(This post was last modified: 07-30-2023, 01:16 AM by jwhat.)
jwhat
Octane/O350/Fuel User

Trade Count: (0)
Posts: 513
Threads: 29
Joined: Jul 2018
Location: Australia
Find Reply
07-30-2023, 01:15 AM
#5
RE: Fuel Firmware research, with dump-lings!
(07-30-2023, 01:15 AM)jwhat Wrote:  Hi Weblacky,

I had quick look at dump.

The bytes are swapped on your dump so when I get hex conversion it comes out backwards:


00000000  f0 0b 00 01 00 00 00 00  f0 0b 89 04 00 00 00 00  |................|
00000010  f0 0b d0 04 00 00 00 00  f0 0b f3 04 00 00 00 00  |................|
00000020  f0 0b dc 04 00 00 00 00  f0 0b 83 07 00 00 00 00  |................|
00000030  f0 0b ed 08 00 00 00 00  f0 0b d6 04 00 00 00 00  |................|
00000040  f0 0b d8 04 00 00 00 00  f0 0b da 04 00 00 00 00  |................|
00000050  f0 0b f1 04 00 00 00 00  f0 0f b0 08 00 00 00 00  |................|
00000060  00 00 15 00 9b 54 85 af  70 69 37 32 6f 63 66 6e  |.....T..pi72ocfn|
00000070  00 00 00 00 af 2f 00 08  00 00 00 00 eb 0b 00 c2  |...../..........|
00000080  00 00 00 00 13 00 d0 12  00 00 01 00 00 00 10 00  |................|
00000090  00 00 02 00 00 00 f9 00  00 00 05 00 00 00 10 00  |................|
000000a0  00 00 06 00 00 00 b4 00  00 00 00 00 00 00 00 00  |................|
000000b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

There are also lots of "gaps" in your dump.

So need to look at how to "flip" the bytes so can do a sensible diff of dumps.

This might take a bit of manual reading ...

Cheers from Oz,

jwhat/John.

Hi Jwhat,
Yes, I mentioned in my original post they are big endian encoded, so I had to word swap sections on little endian platforms to view them.  But I used a shareware app for just this section to word swap.  I didn't find a easy way to do that.

I wanted to see the other variables in the struct compared to yours as well, I knew the CPU frequency and hub speed were the same...was curious about the other things.


Endian Conversion Instructions:
Code:
xxd -e -g2 AM29LV160DT@TSOP48_front_2_fuel_MB_PROM_flash.BIN | xxd -r > PROM_Temp.bin
xxd -e -g1 PROM_Temp.bin temp_Le_prom.hex
(This post was last modified: 07-30-2023, 03:11 AM by weblacky. Edit Reason: instructions updated. )
weblacky
I play an SGI Doctor, on daytime TV.

Trade Count: (10)
Posts: 1,716
Threads: 88
Joined: Jan 2019
Location: Seattle, WA
Find Reply
07-30-2023, 01:38 AM
#6
RE: Fuel Firmware research, with dump-lings!
Hi Weblacky,

thanks for help with byte swap.

Here is diff for start of PROM:

1,6c1,6
< 00000000 0b f0 01 00 00 00 00 00 0b f0 04 e6 00 00 00 00 |................|
< 00000010 0b f0 05 2d 00 00 00 00 0b f0 05 50 00 00 00 00 |...-.......P....|
< 00000020 0b f0 05 39 00 00 00 00 0b f0 07 fb 00 00 00 00 |...9............|
< 00000030 0b f0 09 65 00 00 00 00 0b f0 05 33 00 00 00 00 |...e.......3....|
< 00000040 0b f0 05 35 00 00 00 00 0b f0 05 37 00 00 00 00 |...5.......7....|
< 00000050 0b f0 05 4e 00 00 00 00 0f f0 09 28 00 00 00 00 |...N.......(....|
---
> 00000000 0b f0 01 00 00 00 00 00 0b f0 04 89 00 00 00 00 |................|
> 00000010 0b f0 04 d0 00 00 00 00 0b f0 04 f3 00 00 00 00 |................|
> 00000020 0b f0 04 dc 00 00 00 00 0b f0 07 83 00 00 00 00 |................|
> 00000030 0b f0 08 ed 00 00 00 00 0b f0 04 d6 00 00 00 00 |................|
> 00000040 0b f0 04 d8 00 00 00 00 0b f0 04 da 00 00 00 00 |................|
> 00000050 0b f0 04 f1 00 00 00 00 0f f0 08 b0 00 00 00 00 |................|
10,11c10,11
< 00000090 00 00 00 02 00 00 00 ee 00 00 00 10 00 00 00 10 |................|
< 000000a0 00 00 00 06 00 00 00 d3 00 00 00 00 00 00 00 00 |................|
---
> 00000090 00 00 00 02 00 00 00 f9 00 00 00 05 00 00 00 10 |................|
> 000000a0 00 00 00 06 00 00 00 b4 00 00 00 00 00 00 00 00 |................|

Things to consider:
1. In the header section there should be a difference in the "Flash Count"
2. The actual prom itself will have lots of differences has highly likely that the two machine are not running the same PROM verson

EDIT: Looking more carefully:
- There is difference in flash count: 16 (my 800) , 5 (your 800)
- There is difference in PROM version: 6.221 (my 800), 6.18 (your 800)

here is the original 600/800 diff from my machine:

7,8c7,8
< 00000060 00 00 00 15 54 9b ab 85 69 70 32 37 63 6f 6e 66 |....T...ip27conf|
< 00000070 00 00 00 00 23 c3 46 00 00 00 00 00 0b eb c2 00 |....#.F.........|
---
> 00000060 00 00 00 15 54 9b af 85 69 70 32 37 63 6f 6e 66 |....T...ip27conf|
> 00000070 00 00 00 00 2f af 08 00 00 00 00 00 0b eb c2 00 |..../...........|
10c10
< 00000090 00 00 00 02 00 00 00 ad 00 00 00 0f 00 00 00 10 |................|
---
> 00000090 00 00 00 02 00 00 00 f0 00 00 00 0e 00 00 00 10 |................|

If you look at the diff's between your dump and mine,
- the header section is the same (ie both 800 MHZ machine) (ie no diff found)
- 00000090 section has diff, this is due to flash count (15 & 14)
- Other differences likely result of different PROM versons

Going back to original dump thread to see if I have interpreted correctly...

EDIT #1: Flash count should be in header:

uint flash_count; /* Value incr'd on each PROM flash */
/* 4 bytes 0x10 == 16 (Number of flash counts */

So I would have expected a difference across the machines, what is the likelihood of them being the same ??

EDIT #2: To just see the header difference and not the PROM versions difference I did the following:

1. Do diff of my 600 vs your 800 == both Header and PROM diff
2. Do diff of my 800 vs your 800 == both Header and PROM diff
3. Do diff of diffs == my 600 header vs your 800 header

And now you get pretty much the same as my 600 vs my 800:

% diff ip35-prom-600-800-hex-diff-01.txt ip35-prom-800-hex-diff-01.txt
1c1
< 1,8c1,8
---
> 1,6c1,6
8,9d7
< < 00000060 00 00 00 15 54 9b ab 85 69 70 32 37 63 6f 6e 66 |....T...ip27conf|
< < 00000070 00 00 00 00 23 c3 46 00 00 00 00 00 0b eb c2 00 |....#.F.........|
17,18d14
< > 00000060 00 00 00 15 54 9b af 85 69 70 32 37 63 6f 6e 66 |....T...ip27conf|
< > 00000070 00 00 00 00 2f af 08 00 00 00 00 00 0b eb c2 00 |..../...........|
20c16
< < 00000090 00 00 00 02 00 00 00 ad 00 00 00 0f 00 00 00 10 |................|
---
> < 00000090 00 00 00 02 00 00 00 ee 00 00 00 10 00 00 00 10 |................|

00000090 == My flash count variation...

EDIT #3

Applying the same logic to another 800 MHZ dump with different "flash count"

1. diff my 800 (alt flash cnt) vs weblacky 800 == PROM + Header diffs
2. diff my 800 vs weblackly 800 == PROM + Header diffs
3. Diff of (1) & (2) == Flash Cnt Diff

% diff ip35-prom-800-800-wl-hex-diff-02.txt ip35-prom-800-hex-diff-01.txt

16c16
< < 00000090 00 00 00 02 00 00 00 f0 00 00 00 0e 00 00 00 10 |................|
---
> < 00000090 00 00 00 02 00 00 00 ee 00 00 00 10 00 00 00 10 |................|

This looks like flash count variation only (for my machine)

Cheers from Oz,


jwhat/John.
(This post was last modified: 07-31-2023, 12:08 AM by jwhat.)
jwhat
Octane/O350/Fuel User

Trade Count: (0)
Posts: 513
Threads: 29
Joined: Jul 2018
Location: Australia
Find Reply
07-30-2023, 03:30 AM
#7
RE: Fuel Firmware research, with dump-lings!
Okay, here's the full decode.  I found a cool site online that does a lot of checksum calcs...but I cannot find the one used on this!  

https://www.scadacore.com/tools/programm...alculator/

It's not a 2's complement or simple stuff, that I can see.  MacOS Word doesn't allow me to mix my own highlights, so they are reused every line (same ordering) just to help visually distinguish the different variables.

   

So that's at least the basics...I copied Vvuk's formatting from the post I previously linked to for familiarty and easy comparison: https://forums.irixnet.org/thread-2164-p...l#pid22877

Thanks!

@@@UPDATE@@@
Looking at Jwhat's great posted log here: https://forums.irixnet.org/thread-2164-p...l#pid22578

It shows offtsets.  so far I have tracked flash "magic number" (4a 46 4b 53 57 43 53 4d) to Two locations in my PROM dump!

Offsets: 0x00087ac0. and 0x00165c70


Jwhat: Do you have the full PROM HEX dumps from your 600Mhz to 800Mhz Fuel Reflashing?  Can you give them to me?  I'd like to see any diffs for myself?
(This post was last modified: 07-30-2023, 04:59 AM by weblacky.)
weblacky
I play an SGI Doctor, on daytime TV.

Trade Count: (10)
Posts: 1,716
Threads: 88
Joined: Jan 2019
Location: Seattle, WA
Find Reply
07-30-2023, 04:45 AM
#8
RE: Fuel Firmware research, with dump-lings!
@@@@UPDATE 2@@@@@

Okay I've hit a bit of a wall I could use help with but I found one more interesting tidbit: segments

On this page: https://forums.irixnet.org/thread-2164-p...l#pid23199

Jwhat is in Cac POD, it shows an io7prom marker, that marker is @ 0x87b00 so that segment is there in the PROM image..what is says...?.
weblacky
I play an SGI Doctor, on daytime TV.

Trade Count: (10)
Posts: 1,716
Threads: 88
Joined: Jan 2019
Location: Seattle, WA
Find Reply
07-30-2023, 05:50 AM
#9
RE: Fuel Firmware research, with dump-lings!
Hi Weblacky,

I have sent you google drive link folder with:

1. Binary 600 dump
2. Binary 800 dump
3. Binary 800 dump with alt Flash Count

I can't remember the exact order of flash but if you look at flash counts you can see.

Might be: 800 (14) -> back to 600 (15) -> up to 800 (16) again

As I neglected to do dump on original 600 prom and so went back to get it, then flashed back up.

Cheers from Oz,

jwhat/John
(This post was last modified: 07-30-2023, 11:07 PM by jwhat.)
jwhat
Octane/O350/Fuel User

Trade Count: (0)
Posts: 513
Threads: 29
Joined: Jul 2018
Location: Australia
Find Reply
07-30-2023, 05:54 AM
#10
RE: Fuel Firmware research, with dump-lings!
(07-30-2023, 05:54 AM)jwhat Wrote:  Hi Weblacky,

I have sent you google drive link folder with:

1. Binary 600 dump
2. Binary 800 dump
3. Binary 800 dump with alt Flash Count

I can't remember the exact order of flash but if you look at flash counts you can see.

Might be: 800 -> back to 600 -> up to 800 again

As I neglected to do dump on original 600 prom and so went back to get it, then flashed back up.

Cheers from Oz,

jwhat/John

Got it, thanks!
weblacky
I play an SGI Doctor, on daytime TV.

Trade Count: (10)
Posts: 1,716
Threads: 88
Joined: Jan 2019
Location: Seattle, WA
Find Reply
07-30-2023, 06:19 AM


Forum Jump:


Users browsing this thread: 1 Guest(s)