Subject: Re: L2 and L3 caches on 7455 CPU card
To: Monroe Williams <monroe@pobox.com>
From: Monroe Williams <monroe@pobox.com>
List: port-macppc
Date: 02/25/2003 23:57:27
on 2/25/03 2:16 AM, Monroe Williams at monroe@pobox.com wrote:

[cross-posted to port-powerpc since the changes are in arch/powerpc]

Okay, I now have code that can enable the L3 cache on a 745x-class CPU.
This works similarly to the existing L2CR_CONFIG option that can be added to
a kernel config.  Lacking much imagination, I called the new option
L3CR_CONFIG.

The changes consist of some new code in cpu_config_l2cr() in
arch/powerpc/oea/cpu_subr.c, a bunch of L3CR definitions to
arch/powerpc/include/spr.h, and the addition of L3CR_CONFIG alongside
L2CR_CONFIG in arch/powerpc/conf/files.powerpc.  The patches are available
at:

http://users.easystreet.com/monroe/l3setup.patch

The system I've seen this work on is a Power Macintosh 7500 with one of
these:

http://sonnettech.com/product/crescendo_pci.html

Specifically the 700MHz G4 model.

The options I added to my kernel config are:

# Sonnet Crescendo/PCI G4/700 cache setup
options L2CR_CONFIG="(L2CR_L2E)"
options L3CR_CONFIG="(L3CLK_40|L3CKSP_4|L3PSP_0|L3RT_PB2_SRAM)"

which corresponds to a 1M L3 cache running at a 4:1 ratio.  (For the record,
this was derived by booting the machine under Mac OS X, installing the
Sonnet software and capturing a value of 0x8f020300 from L3CR.)  According
to the marketing specs on the upgrade, the cache should run at 200MHz (or
3.5:1), but I haven't tried that yet.

-----
NetBSD 1.6N (INDIRECT) #47: Tue Feb 25 22:58:49 PST 2003
    
monroe@xxxxxx.xxxxxxxx.xxx:/usr/local/netbsd/src/sys/arch/macppc/compile/IND
IRECT
total memory = 1024 MB
avail memory = 934 MB
using 3072 buffers containing 52528 KB of memory
mainbus0 (root)
cpu0 at mainbus0: 7450 (Revision 2.1), ID 0 (primary)
cpu0: HID0 8450c284<EMCP,TBEN,NAP,DPM,ICE,DCE,SPD,SGE,BHT>
cpu0: 700.00 MHz
cpu0: 256KB L2 cache, 1MB L3 backside cache at 4:1 ratio
bandit0 at mainbus0
...
-----

Could someone please review this patch?  If it passes inspection, what do I
need to do to get it committed?

Thanks,
-- monroe

> on 2/25/03 1:00 AM, John Klos at john@ziaspace.com wrote:
> 
>> Hi,
>> 
>> I just got my new Sonnet 700 MHz G4 upgrade for my 9600. It's nice - it
>> looks well built, runs very cool, and doesn't require special memory like
>> the NewerTech accelerators did.
>> 
>> The chip is a 7455 with 256k of CPU speed L2 cache; the board has one meg
>> of L3 cache running at 200 MHz (cpu/3.5).
>> 
>> So, next, I'd like to configure a kernel for this. On boot, it says:
>> 
>> cpu0 at mainbus0: 7450 (Revision 2.1), ID 0 (primary)
>> cpu0: HID0 8450c0a4<EMCP,TBEN,NAP,DPM,ICE,DCE,SGE,BTIC,BHT>
>> cpu0: 700.00 MHz
>> cpu0: L2 cache not enabled
>> 
>> Then I added the following lines to my config file:
>> options         L3CR_CONFIG="(L3CR_L3E)"
>> options         L2CR_CONFIG="(L2CR_L2E)"
>> 
>> which gave me:
>> 
>> cpu0 at mainbus0: 7450 (Revision 2.1), ID 0 (primary)
>> cpu0: HID0 8450c0a4<EMCP,TBEN,NAP,DPM,ICE,DCE,SGE,BTIC,BHT>
>> cpu0: 700.00 MHz
>> cpu0: 256KB L2 cache
>> 
>> Now, even though this board is significantly faster than the one it is
>> replacing, I'd really love to use the L3 cache, too. However, reading
>> spr.h implies that adding the option L3CR_L3SIZ should only be done for 2
>> meg L3 cache sizes, so I left that out (L3 size (0=1MB, 1=2MB)).
>> 
>> So does anyone know how I might go about getting both the L2 and L3 cache
>> to work at the same time? Also, where is the speed divisor set? I have a
>> feeling I should be bugging Matt...
> 
> I don't have a short answer, but I also recently bought one of these cards
> for my 7500, and I'd like to get it working.  I've already built a kernel
> that enables the L2 cache, and looked into the L3 issue a bit.
> 
> I think we'll have to start by finding out what value the card needs in
> L3CR, probably by booting into Mac OS and setting up the Sonnet software.
> (There are some settings in there that appear to depend strongly on the
> hardware design of the CPU card -- something about "clock sample points",
> whatever that means -- so I don't think we can just make something up.)
> I've tried this a couple of times with Mac OS 9, but the 9 utility I have
> that dumps the L2CR (which I modified to try and dump L3CR) just crashes.  I
> think the best bet will be to use XPostFacto to set up a Mac OS X
> installation and install the Sonnet software for X.  (I should be able to do
> this given a free evening or two.)  There are decent tools available that
> can read L3CR on Mac OS X.
> 
> Once we figure out what the proper value is, we will need to add code to set
> up L3CR.  According to the Motorola book on the 7450 family, this is
> non-trivial, but the procedure they give doesn't look _too_ much more
> complex than the existing code to set up L2CR (in
> arch/powerpc/oea/cpu_subr.c).
> 
> It doesn't appear that anyone has added many of the field definitions in
> L3CR to src/sys/arch/powerpc/include/spr.h.  The only ones there are the
> bits for L3CR_L3E and L3CR_L3SIZ, whereas the book specifies most of the
> bits in the register.  A little bit of time spent doing data entry should
> solve this problem.
> 
> For anyone following along at home, the book I'm referencing (MPC7450UM) is
> available as a PDF from the Motorola site here:
> 
> http://e-www.motorola.com/brdata/PDFDB/docs/MPC7450UM.pdf
> 
> The procedure for setting up the L3 cache is in section 3.7.3.1, and the
> bitfields in L3CR are described in section 2.1.5.5.2.

------------------------------------------------------------------------
Monroe Williams                                         monroe@pobox.com