G4 Yikes! and ECC RAM (also, the reported speed and type for all RAM in System Profiler being 'unknown')

MrFahrenheit

Well-known member
I recently picked up a nice PowerMac G4 350Mhz Yikes! model.

It came with a lowly 64MB PC100 DIMM, and I thought I should probably increase it so that I could at least get 10.4 installed on there.

I was lent 2x 128MB ECC DIMMs, and installed them, and it booted up just fine. However, Phipli looked up the schematic for the G4 Yikes! model, and found that the ECC lines for J19 (DIMM slot 1) are reserved for some sort of custom Apple ROM. Which is likely why Apple recommends not using ECC RAM. I immediately shut off the machine, and switched the ECC to being in the other slots, and placed a regular DIMM into J19 (slot 1).

Upon boot, I discovered that the RAM type and speed are reported as 'unknown' in System Profiler under Tiger 10.4. I then swapped out the ECC DIMMs, and it still reports this way. I reset open firmware (just in case) and same thing.

My question to those here is: does yours show a type and speed under System Profiler, or does yours say 'unknown' as well? Did I fubar something?

Lastly, because the first slot seems to reserve the ECC data lines for a custom Apple ROM of some sort, on the Yikes! board, would this also happen on other boards? If so, would it only be the first slot that would do this, or would it be other slots (and not always the first one)?

If anyone knows, I'm rather intrigued with this. I'd like to try these ECC DIMMs in other machines to see if they work, out of morbid curiosity. I don't want to ruin anything, especially considering my G4 now reports type and speed as 'unknown'.

Your thoughts and considerations and experiences welcome!
 

joevt

Well-known member
Use Open Firmware or whatever to read the SPD (Serial Presence Detect) from each of the DIMMs. I think it's 128 bytes each.
https://en.wikipedia.org/wiki/Serial_presence_detect

The I2C addresses for the DIMM slots are 50, 51, 52, and 53 (hex).

Use read-iic ( len offset addr*2 ) in a loop to look for i2c devices
Code:
dev via-cuda
cr 80 0 do 80 0 i 2* read-iic ?dup if cr i . dump cr then loop

For my G3 Yosemite, it finds 3 DIMM slots (50, 51, 52; 53 is empty), and something related to the Sonnet G4 1GHz ZIF is at 54. There's something at 31 but it's all FF.
 

MrFahrenheit

Well-known member
Thanks to MacDat website, I found the specs for many other models.

It looks like the Apple Boot ROM address lines are unique to the G3 blue and White and the G4 Yikes! Likely because those two boards are nearly identical.

It seems like at least the 3 memory slot G4s like the digital audio do not have the Apple boot ROM notation for the first slot.

I haven’t been able to locate schematics for the other models that might be affected, namely Sawtooth and AGP Graphics and Gigabit Ethernet, etc.

I’m thinking it’s likely the 4 slot boards have these address lines for the first memory slot, and the 3 slot boards do not.

If you look at the history, the beige G3 had 3 memory slots and a ROM slot. The blue and white G3 had 4 memory slots and slot 1 shared lines for a custom Apple boot ROM. The Yikes! model is basically a G3 B&W so it shares the same.

The digital audio specs are on MacDat and do not seem to indicate any address lines for the Apple ROM on the 3 memory slots.

My theory is that Apple stopped doing that when not using 4 slots.

So for now it seems it might be a bad idea to use ECC memory in any G3 or G4 memory slot one, on 4 memory slot boards. Unsure if using an ECC DIMM in the slot where lines are used for an Apple boot ROM causes issues or damage.

Thoughts on whether it causes damage? Issues can easily be tested for. I could plop a single ECC DIMM into slot J19 (slot 1) and run a memory test over and over, and leave it running for 24 hours. Just worried about damage.
 

herd

Well-known member
Use Open Firmware or whatever...

That's neat! Do you know of a way besides Open Firmware to do this? What about a way to write to these EEPROMs? Right now I have to remove them, program them, and then re-solder them. There are PC133 RAM sticks that will work fine at CL2, but I don't know of another way to set them for this in a mac.
 

joevt

Well-known member
That's neat! Do you know of a way besides Open Firmware to do this?
There's probably an I2C API to read them. As a last resort, you could translate the Open Firmware code.

What about a way to write to these EEPROMs? Right now I have to remove them, program them, and then re-solder them.
For writing, I suppose you would have to look up the data sheet of the I2C device to see if that is actually possible from I2C.

There are PC133 RAM sticks that will work fine at CL2, but I don't know of another way to set them for this in a mac.
You mean the PC133 doesn't claim CL2 but can use CL2 if used as PC100? Or it works with CL2 as PC133 even though it doesn't claim CL2?
I don't know how Macs deal with the SPD data or if you can change it programatically.
The ERS documentation doesn't say much about SPD.
 

herd

Well-known member
On the Mac, it seems like the memory timings come straight off the SPD. So the only way I know of to try different settings is to reprogram the EEPROM. On old fashioned DOS computers there are usually a bunch of BIOS settings to tinker with for these timings, often with a default to the effect "By SPD" to use settings from the RAM module. There is also a way on DOS to rewrite the EEPROM and in fact I use Virtual PC to run some software to more easily edit the data. But then to program the stick I have to un-solder the chip, etc...

What does the EEPROM on your Sonnet have to say? I would guess it has the settings for the L3 cache.

Some Macs also have temperature sensors on the i2c bus. I wonder if the Mini temperatures could be found there.
 

joevt

Well-known member
What does the EEPROM on your Sonnet have to say? I would guess it has the settings for the L3 cache.

Code:
\ Use read-iic ( len offset addr*2 -- addr len | false ) in a loop to look for i2c devices
dev via-cuda
cr 80 0 do 80 0 i 2* read-iic ?dup if cr i . dump cr then loop

31
ff86b87b: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff :................:
ff86b88b: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff :................:
ff86b89b: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff :................:
ff86b8ab: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff :................:
ff86b8bb: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff :................:
ff86b8cb: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff :................:
ff86b8db: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff :................:
ff86b8eb: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff :................:

50
ff86b87b: 80 08 04 0c 0a 02 40 00 01 75 54 00 80 08 00 01 :......@..uT.....:
ff86b88b: 8f 04 04 01 01 00 0e a0 60 ff ff 14 0f 14 2d 20 :........`.....- :
ff86b89b: 15 08 15 08 ff ff ff ff ff ff ff ff ff ff ff ff :................:
ff86b8ab: ff ff ff ff ff ff ff ff ff ff ff ff ff ff 12 92 :................:
ff86b8bb: 97 61 00 00 00 00 00 00 46 16 64 08 08 00 00 00 :.a......F.d.....:
ff86b8cb: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 :................:
ff86b8db: 00 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 :................:
ff86b8eb: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 ad :..............d.:

51
ff86b87b: 80 08 04 0c 0a 02 40 00 01 75 54 00 80 08 00 01 :......@..uT.....:
ff86b88b: 8f 04 06 01 01 00 0e a0 60 00 00 14 0f 14 2c 20 :........`....., :
ff86b89b: 15 08 15 08 00 00 00 00 00 00 00 00 00 00 00 00 :................:
ff86b8ab: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 af :................:
ff86b8bb: 2c ff ff ff ff ff ff ff 02 31 36 4c 53 44 54 33 :,........16LSDT3:
ff86b8cb: 32 36 34 41 47 2d 31 33 33 42 31 01 00 01 08 33 :264AG-133B1....3:
ff86b8db: 09 f7 95 00 00 00 00 00 00 00 00 00 00 00 00 00 :................:
ff86b8eb: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 ff :..............d.:

52
ff86b87b: 80 08 04 0c 0a 02 40 00 01 75 54 00 80 08 00 01 :......@..uT.....:
ff86b88b: 8f 04 06 01 01 00 0e a0 60 00 00 14 0f 14 2c 20 :........`....., :
ff86b89b: 15 08 15 08 00 00 00 00 00 00 00 00 00 00 00 00 :................:
ff86b8ab: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 af :................:
ff86b8bb: 2c ff ff ff ff ff ff ff 08 31 36 4c 53 44 54 33 :,........16LSDT3:
ff86b8cb: 32 36 34 41 47 2d 31 33 33 42 31 01 00 01 0b 62 :264AG-133B1....b:
ff86b8db: 05 ee 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 :................:
ff86b8eb: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 ff :..............d.:

54
ff86b87b: 80 08 00 00 00 40 00 1e 01 00 00 00 00 00 00 00 :.....@..........:
ff86b88b: 02 00 04 c8 00 00 10 00 00 00 00 00 00 00 00 00 :................:
ff86b89b: 01 e8 03 64 00 00 00 00 00 00 00 00 00 00 00 00 :...d............:
ff86b8ab: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 :................:
ff86b8bb: 53 4f 4e 54 45 47 56 00 00 00 00 00 00 00 00 00 :SONTEGV.........:
ff86b8cb: 00 00 00 00 00 00 00 00 00 00 00 05 37 34 35 35 :............7455:
ff86b8db: 00 00 00 00 65 53 4f 4e 4e 45 54 20 54 45 43 48 :....eSONNET TECH:
ff86b8eb: 4e 4f 4c 4f 47 49 45 53 00 ff ff ff ff ff ff ff :NOLOGIES........:


- SPD (Serial Presence Detect) at 50,51,52, (53 is empty).
  https://en.wikipedia.org/wiki/Serial_presence_detect
- Sonnet G4 ZIF at 54.
- ? at 31.

Some Macs also have temperature sensors on the i2c bus. I wonder if the Mini temperatures could be found there.
I believe the contents of I2C address 54h are described by
https://www.nxp.com/docs/en/data-sheet/MPCPCMEC.pdf
Thanks @LightBulbFun for finding that.
 
Top