Add support for eccmemctl
git-svn-id: svn://coreboot.org/openbios/openbios-devel@180 f158a5a8-5612-0410-a976-696ce0be7e32
This commit is contained in:
parent
e1785b5d8d
commit
2a5207fe7e
|
@ -72,9 +72,10 @@ ob_new_obio_device(const char *name, const char *type)
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long
|
static unsigned long
|
||||||
ob_reg(uint64_t base, uint64_t offset, unsigned long size, int map)
|
map_reg(uint64_t base, uint64_t offset, unsigned long size, int map,
|
||||||
|
int phys_hi)
|
||||||
{
|
{
|
||||||
PUSH(0);
|
PUSH(phys_hi);
|
||||||
fword("encode-int");
|
fword("encode-int");
|
||||||
PUSH(offset);
|
PUSH(offset);
|
||||||
fword("encode-int");
|
fword("encode-int");
|
||||||
|
@ -102,6 +103,12 @@ ob_reg(uint64_t base, uint64_t offset, unsigned long size, int map)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned long
|
||||||
|
ob_reg(uint64_t base, uint64_t offset, unsigned long size, int map)
|
||||||
|
{
|
||||||
|
return map_reg(base, offset, size, map, 0);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ob_intr(int intr)
|
ob_intr(int intr)
|
||||||
{
|
{
|
||||||
|
@ -289,6 +296,47 @@ ob_zs_init(uint64_t base, uint64_t offset, int intr, int slave, int keyboard)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ob_eccmemctl_init(void)
|
||||||
|
{
|
||||||
|
uint32_t version, *regs;
|
||||||
|
const char *mc_type;
|
||||||
|
|
||||||
|
push_str("/");
|
||||||
|
fword("find-device");
|
||||||
|
fword("new-device");
|
||||||
|
|
||||||
|
push_str("eccmemctl");
|
||||||
|
fword("device-name");
|
||||||
|
|
||||||
|
PUSH(0x20);
|
||||||
|
fword("encode-int");
|
||||||
|
push_str("width");
|
||||||
|
fword("property");
|
||||||
|
|
||||||
|
regs = map_reg(ECC_BASE, 0, ECC_SIZE, 1, ECC_BASE >> 32);
|
||||||
|
|
||||||
|
version = regs[0];
|
||||||
|
switch (version) {
|
||||||
|
case 0x00000000:
|
||||||
|
mc_type = "MCC";
|
||||||
|
break;
|
||||||
|
case 0x10000000:
|
||||||
|
mc_type = "EMC";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case 0x20000000:
|
||||||
|
mc_type = "SMC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
push_str(mc_type);
|
||||||
|
fword("encode-string");
|
||||||
|
push_str("mc-type");
|
||||||
|
fword("property");
|
||||||
|
|
||||||
|
fword("finish-device");
|
||||||
|
}
|
||||||
|
|
||||||
static unsigned char *nvram;
|
static unsigned char *nvram;
|
||||||
ohwcfg_v3_t nv_info;
|
ohwcfg_v3_t nv_info;
|
||||||
|
|
||||||
|
@ -752,6 +800,7 @@ ob_nvram_init(uint64_t base, uint64_t offset)
|
||||||
fword("encode-string");
|
fword("encode-string");
|
||||||
push_str("name");
|
push_str("name");
|
||||||
fword("property");
|
fword("property");
|
||||||
|
ob_eccmemctl_init();
|
||||||
break;
|
break;
|
||||||
case 0x72:
|
case 0x72:
|
||||||
push_str("SPARCstation 10 (1 X 390Z55)");
|
push_str("SPARCstation 10 (1 X 390Z55)");
|
||||||
|
@ -766,6 +815,7 @@ ob_nvram_init(uint64_t base, uint64_t offset)
|
||||||
fword("encode-string");
|
fword("encode-string");
|
||||||
push_str("name");
|
push_str("name");
|
||||||
fword("property");
|
fword("property");
|
||||||
|
ob_eccmemctl_init();
|
||||||
break;
|
break;
|
||||||
case 0x80:
|
case 0x80:
|
||||||
push_str("SPARCstation 5");
|
push_str("SPARCstation 5");
|
||||||
|
|
|
@ -32,6 +32,9 @@
|
||||||
#define SLAVIO_RESET 0x00f00000ULL
|
#define SLAVIO_RESET 0x00f00000ULL
|
||||||
#define RESET_REGS 1
|
#define RESET_REGS 1
|
||||||
|
|
||||||
|
#define ECC_BASE 0xf00000000ULL
|
||||||
|
#define ECC_SIZE 0x20
|
||||||
|
|
||||||
#define SLAVIO_SIZE 0x01000000
|
#define SLAVIO_SIZE 0x01000000
|
||||||
|
|
||||||
#define SUN4M_NCPUS 16
|
#define SUN4M_NCPUS 16
|
||||||
|
|
Loading…
Reference in New Issue