Interleaved memory

Apple's motherboard design for the 7x00/8x00 and 9x00 series of PowerMac Computers includes the hammerhead memory controller. This controller has the advantage of being able to drive memory in an interleaved fashion, creating virtually a 128-bit wide memory bus for accessing RAM.

You can actually measure the effect of interleaved memory. In order to verify that interleaving is on under Linux/PPC, I have written a small kernel-loadable module that creates a /proc filesystem entry that displays the current memory configuration. The source and a precompiled binary is here (compiled with egcs-1.1 on a kernel 2.1.102 -- it should work with any 2.1.x kernel).

Update 20030126: There is a new release, now supporting 2.4 kernels and autodetecting memory size and machine type (thanks Andreas!). You can find it here. Thanks to Eddie Bindt, it also now supports the Apple Network Server nachines (ANS).

Here's what I get on my 7600:

[[email protected] ~]# insmod ./hammerhead.o

[[email protected] ~]# cat /proc/hammerhead 
Machine detected = PowerMac 7500 
Model Type = 16 
Total available Memory = 112 MB in slot config:
Motherboard Row-> not implemented
A1/B1 (row 0) ->   0/  0  --- 
A1/B1 (row 1) ->   0/  0  --- 
A2/B2 (row 0) ->   8/  8 Interleaved
A2/B2 (row 1) ->   8/  8 Interleaved
A3/B3 (row 0) ->  32/ 32 Interleaved
A3/B3 (row 1) ->   0/  0  --- 
A4/B4 (row 0) ->   8/  8 Interleaved
A4/B4 (row 1) ->   0/  0  --- 

Some source code of the module (specifically the configuration check routine and the display routine) is from Apple. You can find the complete package on their Developer Support FTP site, under the tools hierarchy.

Please use this module under your own reponsibility. It doesn't break my system; but it might break yours! You have been warned ;-).

Enjoy, and have fun!

Michel Lanners, 20030126