Subject: Re: CPU IDs
To: Ben Harris <bjh21@netbsd.org>
From: Richard Earnshaw <rearnsha@arm.com>
List: port-arm32
Date: 01/05/2001 18:42:57
Here's some that are in the ARM ARM that I have
ARM600 0x41560600
ARM610 0x41560610
ARM620 0x41560620

And
ARM810 0x41018100

Neither the 7500 nor the 7500FE data sheets seem to document the CPU id -- 
Odd.

Guessing from the information below, I would suspect the ARM700 has the 
code 0x41007000.

The format of the ID register is quite complex, but it can be decoded with 
care.  Here's what the ARM ARM says (I've tried to summarise a bit, since 
it is quite long)

There are 3 distinct ways in which the number may be formed (to determine 
the format look at bits[15:12]
- if they are 0x0, the processor is pre ARM7
- if they are 0x7, the processor is in the ARM7 family
- otherwise, a more recent processor

Post ARM7 processors

[3:0] Implementation defined revision number
[15:4] Implementation defined representation of primary part number for 
processor (top four bits must *not* be 0x0 or 0x7)
[19:16] Architecture code.  Following values are currently defined, all 
others reserved.
   0x1 ARMv4
   0x2 ARMv4T
   0x3 ARMv5
   0x4 ARMv5T
[23:20] Implemenation defined variant number.  Usually used to distinguish 
two variants of the same basic Core, eg cache size.
[31:24] Implementor code, all unused values reserved to ARM.

   0x41 = A (ARM Ltd)
   0x44 = D (Digital Equipment Corp)
   0x69 = i (Intel Corp)

ARM7 Family procs

Bits [15:12] = 0x7

[3:0] Implementation defined revision number
[15:4] Implementation defined representation of primary part number for 
processor (Top four bits = 0x7)
[22:16] Variant
[23] Type of arm7
   0 => Architecture 3
   1 => Architecture 4T
[31:24] Implementor code as above

Pre-ARM7

Bits [15:12] = 0x0
[3:0] Revision code
[31:4] Processor ID (See top)

> I'm trying to assemble a unified <arm/armreg.h> out of <arm32/cpu.h>,
> <arm26/armreg.h> and all the ARM data sheets I can lay my hands on.  In an
> attempt at documenting the chaos of historical CPU IDs, I'd like to record
> the actual 32-bit CPU ID for each processor (ignoring the bottom four
> bits).  To this end, could anyone provide me with the full CPU ID for any
> of the following?:
> 
> ARM700
> ARM810
> ARM7500
> ARM7500FE
> 
> FWIW, here's the list I've got so far:
> 
> #define CPU_ID_ARM3             0x41560300
> #define CPU_ID_ARM610           0x41560610
> #define CPU_ID_ARM710           0x41007100
> #define CPU_ID_ARM7100          0x41047100 
> #define CPU_ID_ARM710T          0x41807100
> #define CPU_ID_ARM720T          0x41807200
> #define CPU_ID_ARM740T8K        0x41807400 /* XXX no MMU, 8KB cache */
> #define CPU_ID_ARM740T4K        0x41817400 /* XXX no MMU, 4KB cache */
> #define CPU_ID_ARM920T          0x41129200 
> #define CPU_ID_ARM922T          0x41029220 
> #define CPU_ID_ARM940T          0x41029400 /* XXX no MMU */
> #define CPU_ID_ARM946ES         0x41049460 /* XXX no MMU */
> #define CPU_ID_ARM966ES         0x41049660 /* XXX no MMU */
> #define CPU_ID_ARM966ESR1       0x41059660 /* XXX no MMU */
> #define CPU_ID_SA110            0x4401a100
> #define CPU_ID_SA1100           0x4401a110
> #define CPU_ID_SA1110           0x6901b110
> #define CPU_ID_80200            0x69052000
> 
> Obviously, CPU IDs for other ARMs would be nice too.  I'm trying to get a
> fairly complete list, even if NetBSD stands no chance of running on some
> of them.
> 
> -- 
> Ben Harris                                                   <bjh21@netbsd.org>
> Portmaster, NetBSD/arm26               <URL:http://www.netbsd.org/Ports/arm26/>
>