summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@twiddle.net>2011-04-27 14:46:50 -0700
committerRichard Henderson <rth@twiddle.net>2011-04-27 14:46:50 -0700
commit2337817db11065e3b70f7c2f4e0859f2fe5e9225 (patch)
treea7f65ef51aedc5d4ba9f76a1d57354527fc6a785
parentea0e38f6bc1e458b34b11b40c1092036db34f548 (diff)
downloadqemu-palcode-2337817db11065e3b70f7c2f4e0859f2fe5e9225.tar.gz
Set max_asn properly for the cpu.
-rw-r--r--init.c58
1 files changed, 24 insertions, 34 deletions
diff --git a/init.c b/init.c
index 535f92b..6badc67 100644
--- a/init.c
+++ b/init.c
@@ -110,39 +110,11 @@ init_page_table(void)
loaded into KSEG. */
}
-static inline unsigned long
-init_cpuid (void)
-{
- unsigned long implver, amask;
-
- implver = __builtin_alpha_implver();
- amask = ~__builtin_alpha_amask(-1);
-
- switch (implver)
- {
- case 0: /* EV4 */
- return EV4_CPU;
-
- case 1: /* EV5 */
- if ((amask & 0x101) == 0x101) /* MAX + BWX */
- return PCA56_CPU;
- if (amask & 1) /* BWX */
- return EV56_CPU;
- return EV5_CPU;
-
- case 2: /* EV6 */
- if (amask & 4) /* CIX */
- return EV67_CPU;
- return EV6_CPU;
- }
- return 0;
-}
-
static void
init_hwrpb (unsigned long memsize)
{
unsigned long pal_pages;
- unsigned long cpu_type;
+ unsigned long amask;
hwrpb.hwrpb.phys_addr = PA(&hwrpb);
@@ -168,16 +140,34 @@ init_hwrpb (unsigned long memsize)
| 'M' << 24);
((int *)hwrpb.hwrpb.ssn)[2] = ( 'U' << 0);
- /* For now, hard-code emulation of sx164. */
- cpu_type = init_cpuid();
- hwrpb.hwrpb.cpuid = cpu_type;
+ amask = ~__builtin_alpha_amask(-1);
+ switch (__builtin_alpha_implver())
+ {
+ case 0: /* EV4 */
+ hwrpb.hwrpb.cpuid = EV4_CPU;
+ hwrpb.hwrpb.max_asn = 63;
+ break;
+
+ case 1: /* EV5 */
+ hwrpb.hwrpb.cpuid
+ = ((amask & 0x101) == 0x101 ? PCA56_CPU /* MAX+BWX */
+ : amask & 1 ? EV56_CPU /* BWX */
+ : EV5_CPU);
+ hwrpb.hwrpb.max_asn = 127;
+ break;
+
+ case 2: /* EV6 */
+ hwrpb.hwrpb.cpuid = (amask & 4 ? EV67_CPU : EV6_CPU); /* CIX */
+ hwrpb.hwrpb.max_asn = 255;
+ break;
+ }
+
hwrpb.hwrpb.pagesize = PAGE_SIZE;
hwrpb.hwrpb.pa_bits = 40;
- hwrpb.hwrpb.max_asn = 127;
hwrpb.hwrpb.sys_type = SYS_TYPE;
hwrpb.hwrpb.sys_variation = SYS_VARIATION;
hwrpb.hwrpb.sys_revision = SYS_REVISION;
- hwrpb.processor.type = cpu_type;
+ hwrpb.processor.type = hwrpb.hwrpb.cpuid;
hwrpb.hwrpb.intr_freq = HZ * 4096;
hwrpb.hwrpb.cycle_freq = 250000000; /* QEMU architects 250MHz. */