Display verbose messages about L2 cache.

This commit is contained in:
tsubai 1999-06-30 16:34:19 +00:00
parent 33104934d9
commit 654e155756
1 changed files with 118 additions and 18 deletions

View File

@ -1,7 +1,7 @@
/* $NetBSD: cpu.c,v 1.3 1999/02/16 15:20:51 tsubai Exp $ */
/* $NetBSD: cpu.c,v 1.4 1999/06/30 16:34:19 tsubai Exp $ */
/*-
* Copyright (C) 1998 Internet Research Institute, Inc.
* Copyright (C) 1998, 1999 Internet Research Institute, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -41,14 +41,15 @@
static int cpumatch __P((struct device *, struct cfdata *, void *));
static void cpuattach __P((struct device *, struct device *, void *));
static void ohare_init __P((void));
static void display_l2cr __P((void));
struct cfattach cpu_ca = {
sizeof(struct device), cpumatch, cpuattach
};
extern struct cfdriver cpu_cd;
extern void *mapiodev();
int
cpumatch(parent, cf, aux)
struct device *parent;
@ -63,27 +64,55 @@ cpumatch(parent, cf, aux)
return 1;
}
#define MPC601 1
#define MPC603 3
#define MPC604 4
#define MPC603e 6
#define MPC603ev 7
#define MPC750 8
#define HID0_DOZE 0x00800000
#define HID0_NAP 0x00400000
#define HID0_SLEEP 0x00200000
#define HID0_DPM 0x00100000 /* 1: DPM enable */
void
cpuattach(parent, self, aux)
struct device *parent, *self;
void *aux;
{
u_int x;
u_int *cache_reg;
u_int node;
int addr = -1;
int hid0, pvr;
node = OF_finddevice("/hammerhead");
OF_getprop(node, "reg", &addr, sizeof(addr));
if (addr == -1) {
printf("\n");
return;
__asm __volatile ("mfpvr %0" : "=r"(pvr));
switch (pvr >> 16) {
case MPC603:
case MPC603e:
case MPC603ev:
case MPC750:
/* Select DOZE power-save mode. */
__asm __volatile ("mfspr %0,1008" : "=r"(hid0));
hid0 &= ~(HID0_DOZE | HID0_NAP | HID0_SLEEP);
hid0 |= HID0_DOZE | HID0_DPM;
__asm __volatile ("mtspr 1008,%0" :: "r"(hid0));
}
#if 0
if ((pvr >> 16) == MPC750)
display_l2cr();
else if (OF_finddevice("/bandit/ohare") != -1)
ohare_init();
else
printf("\n");
}
#define CACHE_REG 0xf8000000
void
ohare_init()
{
u_int *cache_reg, x;
/* enable L2 cache */
cache_reg = mapiodev(addr, NBPG);
cache_reg = mapiodev(CACHE_REG, NBPG);
if (((cache_reg[2] >> 24) & 0x0f) >= 3) {
x = cache_reg[4];
if ((x & 0x10) == 0)
@ -92,9 +121,80 @@ cpuattach(parent, self, aux)
x |= 0x04000020;
cache_reg[4] = x;
printf(": L2 cache enabled");
printf(": ohare L2 cache enabled\n");
}
#endif
}
#define L2CR 1017
#define L2CR_L2E 0x80000000 /* 0: L2 enable */
#define L2CR_L2PE 0x40000000 /* 1: L2 data parity enable */
#define L2CR_L2SIZ 0x30000000 /* 2-3: L2 size */
#define L2SIZ_RESERVED 0x00000000
#define L2SIZ_256K 0x10000000
#define L2SIZ_512K 0x20000000
#define L2SIZ_1M 0x30000000
#define L2CR_L2CLK 0x0e000000 /* 4-6 */
#define L2CR_L2RAM 0x01800000 /* 7-8: L2 RAM type */
#define L2RAM_FLOWTHRU_BURST 0x00000000
#define L2RAM_PIPELINE_BURST 0x01000000
#define L2RAM_PIPELINE_LATE 0x01800000
#define L2CR_L2DO 0x00400000 /* 9: L2 data-only.
Setting this bit disables instruction
caching. */
#define L2CR_L2I 0x00200000 /* 10: L2 global invalidate. */
#define L2CR_L2CTL 0x00100000 /* 11: L2 RAM control (ZZ enable).
Enables automatic operation of the
L2ZZ (low-power mode) signal. */
#define L2CR_L2WT 0x00080000 /* 12: L2 write-through. */
#define L2CR_L2TS 0x00040000 /* 13: L2 test support. */
#define L2CR_L2OH 0x00030000 /* 14-15: L2 output hold. */
#define L2CR_L2SL 0x00008000 /* 16: L2 DLL slow. */
#define L2CR_L2DF 0x00004000 /* 17: L2 differential clock. */
#define L2CR_L2BYP 0x00002000 /* 18: L2 DLL bypass. */
#define L2CR_L2IP 0x00000001 /* 31: L2 global invalidate in progress
(read only). */
void
display_l2cr()
{
u_int l2cr;
__asm __volatile ("mfspr %0, 1017" : "=r"(l2cr));
if (l2cr & L2CR_L2E) {
switch (l2cr & L2CR_L2SIZ) {
case L2SIZ_256K:
printf(": 256KB");
break;
case L2SIZ_512K:
printf(": 512KB");
break;
case L2SIZ_1M:
printf(": 1MB");
break;
default:
printf(": unknown size");
}
#if 0
switch (l2cr & L2CR_L2RAM) {
case L2RAM_FLOWTHRU_BURST:
printf(" Flow-through synchronous burst SRAM");
break;
case L2RAM_PIPELINE_BURST:
printf(" Pipelined synchronous burst SRAM");
break;
case L2RAM_PIPELINE_LATE:
printf(" Pipelined synchronous late-write SRAM");
break;
default:
printf(" unknown type");
}
if (l2cr & L2CR_L2PE)
printf(" with parity");
#endif
printf(" backside cache enabled");
}
printf("\n");
}