qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 5/9] CoreDUO CPU


From: Dan Kenigsberg
Subject: Re: [Qemu-devel] [PATCH 5/9] CoreDUO CPU
Date: Fri, 11 Jan 2008 12:47:21 +0200
User-agent: Mutt/1.5.17 (2007-11-01)

On Tue, Jan 08, 2008 at 04:22:52PM +0100, Alexander Graf wrote:
> Mac OS X as is has a condition to only run on family 13 Intel CPUs, so
> this adds a definition for a CoreDuo CPU.
> Furthermore it adds the MSR Mac OS X uses to read the CPU multiplier and
> the CPUID used to read the cache information.

> Index: qemu-snapshot-2008-01-08_05/target-i386/cpu.h
> ===================================================================
> --- qemu-snapshot-2008-01-08_05.orig/target-i386/cpu.h
> +++ qemu-snapshot-2008-01-08_05/target-i386/cpu.h
> @@ -232,6 +232,8 @@
>  #define MSR_MCG_STATUS                  0x17a
>  #define MSR_MCG_CTL                     0x17b
>  
> +#define MSR_IA32_PERF_STS               0x198
> +
>  #define MSR_PAT                         0x277
>  
>  #define MSR_EFER                        0xc0000080
> Index: qemu-snapshot-2008-01-08_05/target-i386/helper.c
> ===================================================================
> --- qemu-snapshot-2008-01-08_05.orig/target-i386/helper.c
> +++ qemu-snapshot-2008-01-08_05/target-i386/helper.c
> @@ -1710,6 +1710,79 @@ void helper_cpuid(void)
>          ECX = 0;
>          EDX = 0x2c307d;
>          break;
> +    case 4:
> +        /* cache info: needed for Core Duo compatibility */
> +/* From the Intel documentation:
> +EAX: 
> + Bits 4-0: Cache Type** 
> + Bits 7-5: Cache Level (starts at 1) 
> + Bits 8: Self Initializing cache level (does not need SW initialization)
> + Bits 9: Fully Associative cache Bits
> +  13-10: Reserved Bits 
> +  25-14: Number of threads sharing this cache* Bits
> +  31-26: Number of processor cores on this die (Multicore)*
> +EBX:
> + Bits 11-0: L = System Coherency Line Size*
> + Bits 21-12: P = Physical Line partitions*
> + Bits 31-22: W = Ways of associativity*
> +ECX:
> + Bits 31-0: S = Number of Sets*
> +EDX: Reserved
> + * Add one to the value in the register file to get the number. For example, 
> the number
> +   of processor cores is EAX[31:26]+1.
> +** Cache Types fields
> +     0 = Null - No more caches
> +     1 = Data Cache
> +     2 = Instruction Cache
> +     3 = Unified Cache
> +  31-4 = Reserved
> +*/
> +
> +        switch (ECX) {
> +            case 0: // L1 cache info
> +/*                EAX = 3            // Unified Cache 
> +                    | (1 << 5)     // L1 Cache
> +                    | (1 << 8);    // Self Initializing
> +                EBX = 63           // Line size = 64 bytes
> +                    | (1022 << 12) // Partitions = 1024 bytes
> +                    | (0 << 22);   // Ways = 2
> +                ECX = 0x3f;           // One L1 Cache
> +                EDX = 0;*/
> +                EAX = 0x0000123;
> +                EBX = 0x1c0003f;
> +                ECX = 0x000003f;
> +                EDX = 0x0000001;
> +                break;
> +            case 1: // L2 cache info
> +/*                EAX = 3            // Unified Cache 
> +                    | (2 << 5)     // L2 Cache
> +                    | (1 << 8);    // Self Initializing
> +                EBX = 63           // Line size = 64 bytes
> +                    | (1023 << 12) // Partitions = 1024 bytes
> +                    | (0 << 22);   // Ways = 512
> +                ECX = 0;           // One L2 Cache
> +                EDX = 0;
> +*/
> +                EAX = 0x0000122;
> +                EBX = 0x1c0003f;
> +                ECX = 0x000003f;
> +                EDX = 0x0000001;
> +                break;

Why do you explain one set of values, and actually use something
different? It confuses the untrained reader (me).

Dan.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]