1*08d3df8cSArnd Bergmann /* SPDX-License-Identifier: GPL-2.0-only */ 2*08d3df8cSArnd Bergmann /* 3*08d3df8cSArnd Bergmann * Author: Nicolas Pitre 4*08d3df8cSArnd Bergmann * Created: Jun 15, 2001 5*08d3df8cSArnd Bergmann * Copyright: MontaVista Software Inc. 6*08d3df8cSArnd Bergmann */ 7*08d3df8cSArnd Bergmann 8*08d3df8cSArnd Bergmann #ifndef __SOC_PXA_CPU_H 9*08d3df8cSArnd Bergmann #define __SOC_PXA_CPU_H 10*08d3df8cSArnd Bergmann 11*08d3df8cSArnd Bergmann #ifdef CONFIG_ARM 12*08d3df8cSArnd Bergmann #include <asm/cputype.h> 13*08d3df8cSArnd Bergmann #endif 14*08d3df8cSArnd Bergmann 15*08d3df8cSArnd Bergmann /* 16*08d3df8cSArnd Bergmann * CPU Stepping CPU_ID JTAG_ID 17*08d3df8cSArnd Bergmann * 18*08d3df8cSArnd Bergmann * PXA210 B0 0x69052922 0x2926C013 19*08d3df8cSArnd Bergmann * PXA210 B1 0x69052923 0x3926C013 20*08d3df8cSArnd Bergmann * PXA210 B2 0x69052924 0x4926C013 21*08d3df8cSArnd Bergmann * PXA210 C0 0x69052D25 0x5926C013 22*08d3df8cSArnd Bergmann * 23*08d3df8cSArnd Bergmann * PXA250 A0 0x69052100 0x09264013 24*08d3df8cSArnd Bergmann * PXA250 A1 0x69052101 0x19264013 25*08d3df8cSArnd Bergmann * PXA250 B0 0x69052902 0x29264013 26*08d3df8cSArnd Bergmann * PXA250 B1 0x69052903 0x39264013 27*08d3df8cSArnd Bergmann * PXA250 B2 0x69052904 0x49264013 28*08d3df8cSArnd Bergmann * PXA250 C0 0x69052D05 0x59264013 29*08d3df8cSArnd Bergmann * 30*08d3df8cSArnd Bergmann * PXA255 A0 0x69052D06 0x69264013 31*08d3df8cSArnd Bergmann * 32*08d3df8cSArnd Bergmann * PXA26x A0 0x69052903 0x39264013 33*08d3df8cSArnd Bergmann * PXA26x B0 0x69052D05 0x59264013 34*08d3df8cSArnd Bergmann * 35*08d3df8cSArnd Bergmann * PXA27x A0 0x69054110 0x09265013 36*08d3df8cSArnd Bergmann * PXA27x A1 0x69054111 0x19265013 37*08d3df8cSArnd Bergmann * PXA27x B0 0x69054112 0x29265013 38*08d3df8cSArnd Bergmann * PXA27x B1 0x69054113 0x39265013 39*08d3df8cSArnd Bergmann * PXA27x C0 0x69054114 0x49265013 40*08d3df8cSArnd Bergmann * PXA27x C5 0x69054117 0x79265013 41*08d3df8cSArnd Bergmann * 42*08d3df8cSArnd Bergmann * PXA30x A0 0x69056880 0x0E648013 43*08d3df8cSArnd Bergmann * PXA30x A1 0x69056881 0x1E648013 44*08d3df8cSArnd Bergmann * PXA31x A0 0x69056890 0x0E649013 45*08d3df8cSArnd Bergmann * PXA31x A1 0x69056891 0x1E649013 46*08d3df8cSArnd Bergmann * PXA31x A2 0x69056892 0x2E649013 47*08d3df8cSArnd Bergmann * PXA32x B1 0x69056825 0x5E642013 48*08d3df8cSArnd Bergmann * PXA32x B2 0x69056826 0x6E642013 49*08d3df8cSArnd Bergmann * 50*08d3df8cSArnd Bergmann * PXA930 B0 0x69056835 0x5E643013 51*08d3df8cSArnd Bergmann * PXA930 B1 0x69056837 0x7E643013 52*08d3df8cSArnd Bergmann * PXA930 B2 0x69056838 0x8E643013 53*08d3df8cSArnd Bergmann * 54*08d3df8cSArnd Bergmann * PXA935 A0 0x56056931 0x1E653013 55*08d3df8cSArnd Bergmann * PXA935 B0 0x56056936 0x6E653013 56*08d3df8cSArnd Bergmann * PXA935 B1 0x56056938 0x8E653013 57*08d3df8cSArnd Bergmann */ 58*08d3df8cSArnd Bergmann #ifdef CONFIG_PXA25x 59*08d3df8cSArnd Bergmann #define __cpu_is_pxa210(id) \ 60*08d3df8cSArnd Bergmann ({ \ 61*08d3df8cSArnd Bergmann unsigned int _id = (id) & 0xf3f0; \ 62*08d3df8cSArnd Bergmann _id == 0x2120; \ 63*08d3df8cSArnd Bergmann }) 64*08d3df8cSArnd Bergmann 65*08d3df8cSArnd Bergmann #define __cpu_is_pxa250(id) \ 66*08d3df8cSArnd Bergmann ({ \ 67*08d3df8cSArnd Bergmann unsigned int _id = (id) & 0xf3ff; \ 68*08d3df8cSArnd Bergmann _id <= 0x2105; \ 69*08d3df8cSArnd Bergmann }) 70*08d3df8cSArnd Bergmann 71*08d3df8cSArnd Bergmann #define __cpu_is_pxa255(id) \ 72*08d3df8cSArnd Bergmann ({ \ 73*08d3df8cSArnd Bergmann unsigned int _id = (id) & 0xffff; \ 74*08d3df8cSArnd Bergmann _id == 0x2d06; \ 75*08d3df8cSArnd Bergmann }) 76*08d3df8cSArnd Bergmann 77*08d3df8cSArnd Bergmann #define __cpu_is_pxa25x(id) \ 78*08d3df8cSArnd Bergmann ({ \ 79*08d3df8cSArnd Bergmann unsigned int _id = (id) & 0xf300; \ 80*08d3df8cSArnd Bergmann _id == 0x2100; \ 81*08d3df8cSArnd Bergmann }) 82*08d3df8cSArnd Bergmann #else 83*08d3df8cSArnd Bergmann #define __cpu_is_pxa210(id) (0) 84*08d3df8cSArnd Bergmann #define __cpu_is_pxa250(id) (0) 85*08d3df8cSArnd Bergmann #define __cpu_is_pxa255(id) (0) 86*08d3df8cSArnd Bergmann #define __cpu_is_pxa25x(id) (0) 87*08d3df8cSArnd Bergmann #endif 88*08d3df8cSArnd Bergmann 89*08d3df8cSArnd Bergmann #ifdef CONFIG_PXA27x 90*08d3df8cSArnd Bergmann #define __cpu_is_pxa27x(id) \ 91*08d3df8cSArnd Bergmann ({ \ 92*08d3df8cSArnd Bergmann unsigned int _id = (id) >> 4 & 0xfff; \ 93*08d3df8cSArnd Bergmann _id == 0x411; \ 94*08d3df8cSArnd Bergmann }) 95*08d3df8cSArnd Bergmann #else 96*08d3df8cSArnd Bergmann #define __cpu_is_pxa27x(id) (0) 97*08d3df8cSArnd Bergmann #endif 98*08d3df8cSArnd Bergmann 99*08d3df8cSArnd Bergmann #ifdef CONFIG_CPU_PXA300 100*08d3df8cSArnd Bergmann #define __cpu_is_pxa300(id) \ 101*08d3df8cSArnd Bergmann ({ \ 102*08d3df8cSArnd Bergmann unsigned int _id = (id) >> 4 & 0xfff; \ 103*08d3df8cSArnd Bergmann _id == 0x688; \ 104*08d3df8cSArnd Bergmann }) 105*08d3df8cSArnd Bergmann #else 106*08d3df8cSArnd Bergmann #define __cpu_is_pxa300(id) (0) 107*08d3df8cSArnd Bergmann #endif 108*08d3df8cSArnd Bergmann 109*08d3df8cSArnd Bergmann #ifdef CONFIG_CPU_PXA310 110*08d3df8cSArnd Bergmann #define __cpu_is_pxa310(id) \ 111*08d3df8cSArnd Bergmann ({ \ 112*08d3df8cSArnd Bergmann unsigned int _id = (id) >> 4 & 0xfff; \ 113*08d3df8cSArnd Bergmann _id == 0x689; \ 114*08d3df8cSArnd Bergmann }) 115*08d3df8cSArnd Bergmann #else 116*08d3df8cSArnd Bergmann #define __cpu_is_pxa310(id) (0) 117*08d3df8cSArnd Bergmann #endif 118*08d3df8cSArnd Bergmann 119*08d3df8cSArnd Bergmann #ifdef CONFIG_CPU_PXA320 120*08d3df8cSArnd Bergmann #define __cpu_is_pxa320(id) \ 121*08d3df8cSArnd Bergmann ({ \ 122*08d3df8cSArnd Bergmann unsigned int _id = (id) >> 4 & 0xfff; \ 123*08d3df8cSArnd Bergmann _id == 0x603 || _id == 0x682; \ 124*08d3df8cSArnd Bergmann }) 125*08d3df8cSArnd Bergmann #else 126*08d3df8cSArnd Bergmann #define __cpu_is_pxa320(id) (0) 127*08d3df8cSArnd Bergmann #endif 128*08d3df8cSArnd Bergmann 129*08d3df8cSArnd Bergmann #ifdef CONFIG_CPU_PXA930 130*08d3df8cSArnd Bergmann #define __cpu_is_pxa930(id) \ 131*08d3df8cSArnd Bergmann ({ \ 132*08d3df8cSArnd Bergmann unsigned int _id = (id) >> 4 & 0xfff; \ 133*08d3df8cSArnd Bergmann _id == 0x683; \ 134*08d3df8cSArnd Bergmann }) 135*08d3df8cSArnd Bergmann #else 136*08d3df8cSArnd Bergmann #define __cpu_is_pxa930(id) (0) 137*08d3df8cSArnd Bergmann #endif 138*08d3df8cSArnd Bergmann 139*08d3df8cSArnd Bergmann #ifdef CONFIG_CPU_PXA935 140*08d3df8cSArnd Bergmann #define __cpu_is_pxa935(id) \ 141*08d3df8cSArnd Bergmann ({ \ 142*08d3df8cSArnd Bergmann unsigned int _id = (id) >> 4 & 0xfff; \ 143*08d3df8cSArnd Bergmann _id == 0x693; \ 144*08d3df8cSArnd Bergmann }) 145*08d3df8cSArnd Bergmann #else 146*08d3df8cSArnd Bergmann #define __cpu_is_pxa935(id) (0) 147*08d3df8cSArnd Bergmann #endif 148*08d3df8cSArnd Bergmann 149*08d3df8cSArnd Bergmann #define cpu_is_pxa210() \ 150*08d3df8cSArnd Bergmann ({ \ 151*08d3df8cSArnd Bergmann __cpu_is_pxa210(read_cpuid_id()); \ 152*08d3df8cSArnd Bergmann }) 153*08d3df8cSArnd Bergmann 154*08d3df8cSArnd Bergmann #define cpu_is_pxa250() \ 155*08d3df8cSArnd Bergmann ({ \ 156*08d3df8cSArnd Bergmann __cpu_is_pxa250(read_cpuid_id()); \ 157*08d3df8cSArnd Bergmann }) 158*08d3df8cSArnd Bergmann 159*08d3df8cSArnd Bergmann #define cpu_is_pxa255() \ 160*08d3df8cSArnd Bergmann ({ \ 161*08d3df8cSArnd Bergmann __cpu_is_pxa255(read_cpuid_id()); \ 162*08d3df8cSArnd Bergmann }) 163*08d3df8cSArnd Bergmann 164*08d3df8cSArnd Bergmann #define cpu_is_pxa25x() \ 165*08d3df8cSArnd Bergmann ({ \ 166*08d3df8cSArnd Bergmann __cpu_is_pxa25x(read_cpuid_id()); \ 167*08d3df8cSArnd Bergmann }) 168*08d3df8cSArnd Bergmann 169*08d3df8cSArnd Bergmann #define cpu_is_pxa27x() \ 170*08d3df8cSArnd Bergmann ({ \ 171*08d3df8cSArnd Bergmann __cpu_is_pxa27x(read_cpuid_id()); \ 172*08d3df8cSArnd Bergmann }) 173*08d3df8cSArnd Bergmann 174*08d3df8cSArnd Bergmann #define cpu_is_pxa300() \ 175*08d3df8cSArnd Bergmann ({ \ 176*08d3df8cSArnd Bergmann __cpu_is_pxa300(read_cpuid_id()); \ 177*08d3df8cSArnd Bergmann }) 178*08d3df8cSArnd Bergmann 179*08d3df8cSArnd Bergmann #define cpu_is_pxa310() \ 180*08d3df8cSArnd Bergmann ({ \ 181*08d3df8cSArnd Bergmann __cpu_is_pxa310(read_cpuid_id()); \ 182*08d3df8cSArnd Bergmann }) 183*08d3df8cSArnd Bergmann 184*08d3df8cSArnd Bergmann #define cpu_is_pxa320() \ 185*08d3df8cSArnd Bergmann ({ \ 186*08d3df8cSArnd Bergmann __cpu_is_pxa320(read_cpuid_id()); \ 187*08d3df8cSArnd Bergmann }) 188*08d3df8cSArnd Bergmann 189*08d3df8cSArnd Bergmann #define cpu_is_pxa930() \ 190*08d3df8cSArnd Bergmann ({ \ 191*08d3df8cSArnd Bergmann __cpu_is_pxa930(read_cpuid_id()); \ 192*08d3df8cSArnd Bergmann }) 193*08d3df8cSArnd Bergmann 194*08d3df8cSArnd Bergmann #define cpu_is_pxa935() \ 195*08d3df8cSArnd Bergmann ({ \ 196*08d3df8cSArnd Bergmann __cpu_is_pxa935(read_cpuid_id()); \ 197*08d3df8cSArnd Bergmann }) 198*08d3df8cSArnd Bergmann 199*08d3df8cSArnd Bergmann 200*08d3df8cSArnd Bergmann 201*08d3df8cSArnd Bergmann /* 202*08d3df8cSArnd Bergmann * CPUID Core Generation Bit 203*08d3df8cSArnd Bergmann * <= 0x2 for pxa21x/pxa25x/pxa26x/pxa27x 204*08d3df8cSArnd Bergmann */ 205*08d3df8cSArnd Bergmann #if defined(CONFIG_PXA25x) || defined(CONFIG_PXA27x) 206*08d3df8cSArnd Bergmann #define __cpu_is_pxa2xx(id) \ 207*08d3df8cSArnd Bergmann ({ \ 208*08d3df8cSArnd Bergmann unsigned int _id = (id) >> 13 & 0x7; \ 209*08d3df8cSArnd Bergmann _id <= 0x2; \ 210*08d3df8cSArnd Bergmann }) 211*08d3df8cSArnd Bergmann #else 212*08d3df8cSArnd Bergmann #define __cpu_is_pxa2xx(id) (0) 213*08d3df8cSArnd Bergmann #endif 214*08d3df8cSArnd Bergmann 215*08d3df8cSArnd Bergmann #ifdef CONFIG_PXA3xx 216*08d3df8cSArnd Bergmann #define __cpu_is_pxa3xx(id) \ 217*08d3df8cSArnd Bergmann ({ \ 218*08d3df8cSArnd Bergmann __cpu_is_pxa300(id) \ 219*08d3df8cSArnd Bergmann || __cpu_is_pxa310(id) \ 220*08d3df8cSArnd Bergmann || __cpu_is_pxa320(id) \ 221*08d3df8cSArnd Bergmann || __cpu_is_pxa93x(id); \ 222*08d3df8cSArnd Bergmann }) 223*08d3df8cSArnd Bergmann #else 224*08d3df8cSArnd Bergmann #define __cpu_is_pxa3xx(id) (0) 225*08d3df8cSArnd Bergmann #endif 226*08d3df8cSArnd Bergmann 227*08d3df8cSArnd Bergmann #if defined(CONFIG_CPU_PXA930) || defined(CONFIG_CPU_PXA935) 228*08d3df8cSArnd Bergmann #define __cpu_is_pxa93x(id) \ 229*08d3df8cSArnd Bergmann ({ \ 230*08d3df8cSArnd Bergmann __cpu_is_pxa930(id) \ 231*08d3df8cSArnd Bergmann || __cpu_is_pxa935(id); \ 232*08d3df8cSArnd Bergmann }) 233*08d3df8cSArnd Bergmann #else 234*08d3df8cSArnd Bergmann #define __cpu_is_pxa93x(id) (0) 235*08d3df8cSArnd Bergmann #endif 236*08d3df8cSArnd Bergmann 237*08d3df8cSArnd Bergmann #define cpu_is_pxa2xx() \ 238*08d3df8cSArnd Bergmann ({ \ 239*08d3df8cSArnd Bergmann __cpu_is_pxa2xx(read_cpuid_id()); \ 240*08d3df8cSArnd Bergmann }) 241*08d3df8cSArnd Bergmann 242*08d3df8cSArnd Bergmann #define cpu_is_pxa3xx() \ 243*08d3df8cSArnd Bergmann ({ \ 244*08d3df8cSArnd Bergmann __cpu_is_pxa3xx(read_cpuid_id()); \ 245*08d3df8cSArnd Bergmann }) 246*08d3df8cSArnd Bergmann 247*08d3df8cSArnd Bergmann #define cpu_is_pxa93x() \ 248*08d3df8cSArnd Bergmann ({ \ 249*08d3df8cSArnd Bergmann __cpu_is_pxa93x(read_cpuid_id()); \ 250*08d3df8cSArnd Bergmann }) 251*08d3df8cSArnd Bergmann 252*08d3df8cSArnd Bergmann #endif 253