Changeset 0172eba in mainline


Ignore:
Timestamp:
2005-11-11T12:40:45Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
73a4bab
Parents:
59e07c91
Message:

ia64 CPU identification.

Location:
arch/ia64
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/include/cpu.h

    r59e07c91 r0172eba  
    3030#define __ia64_CPU_H__
    3131
     32#include <arch/types.h>
    3233#include <typedefs.h>
     34#include <arch/register.h>
     35
     36#define FAMILY_ITANIUM  0x7
     37#define FAMILY_ITANIUM2 0x1f
    3338
    3439struct cpu_arch {
     40        __u64 cpuid0;
     41        __u64 cpuid1;
     42        cpuid3_t cpuid3;
    3543};
     44
     45/** Read CPUID register.
     46 *
     47 * @param n CPUID register number.
     48 *
     49 * @return Value of CPUID[n] register.
     50 */
     51static inline __u64 cpuid_read(int n)
     52{
     53        __u64 v;
    3654       
     55        __asm__ volatile ("mov %0 = cpuid[%1]\n" : "=r" (v) : "r" (n));
     56       
     57        return v;
     58}
     59
    3760#endif
  • arch/ia64/include/register.h

    r59e07c91 r0172eba  
    179179typedef union cr_isr cr_isr_t;
    180180
     181/** CPUID Register 3 */
     182union cpuid3 {
     183        struct {
     184                __u8 number;
     185                __u8 revision;
     186                __u8 model;
     187                __u8 family;
     188                __u8 archrev;
     189        } __attribute__ ((packed));
     190        __u64 value;
     191};
     192
     193typedef union cpuid3 cpuid3_t;
     194
    181195#endif /* !__ASM__ */
    182196
  • arch/ia64/src/cpu/cpu.c

    r59e07c91 r0172eba  
    2828
    2929#include <cpu.h>
     30#include <arch.h>
     31#include <arch/register.h>
     32#include <print.h>
    3033
    3134void cpu_arch_init(void)
     
    3336}
    3437
     38void cpu_identify(void)
     39{
     40        CPU->arch.cpuid0 = cpuid_read(0);
     41        CPU->arch.cpuid1 = cpuid_read(1);
     42        CPU->arch.cpuid3.value = cpuid_read(3);
     43}
    3544
     45void cpu_print_report(cpu_t *m)
     46{
     47        char *family_str;
     48        char vendor[2*sizeof(__u64)+1];
     49       
     50        *((__u64 *) &vendor[0*sizeof(__u64)]) = CPU->arch.cpuid0;
     51        *((__u64 *) &vendor[1*sizeof(__u64)]) = CPU->arch.cpuid1;
     52        vendor[sizeof(vendor)-1] = '\0';
     53       
     54        switch(m->arch.cpuid3.family) {
     55            case FAMILY_ITANIUM:
     56                family_str = "Itanium";
     57                break;
     58            case FAMILY_ITANIUM2:
     59                family_str = "Itanium 2";
     60                break;
     61            default:
     62                family_str = "Unknown";
     63                break;
     64        }
     65       
     66        printf("cpu%d: %s (%s), archrev=%d, model=%d, revision=%d\n", CPU->id, family_str, vendor, CPU->arch.cpuid3.archrev, CPU->arch.cpuid3.model, CPU->arch.cpuid3.revision);
     67}
  • arch/ia64/src/dummy.s

    r59e07c91 r0172eba  
    3434.global before_thread_runs_arch
    3535.global arch_late_init
    36 .global cpu_identify
    37 .global cpu_print_report
    3836.global cpu_sleep
    3937.global dummy
     
    4745asm_delay_loop:
    4846arch_late_init:
    49 cpu_identify:
    50 cpu_print_report:
    5147cpu_sleep:
    5248fpu_init:
Note: See TracChangeset for help on using the changeset viewer.