1*e320a76dSChristophe Leroy /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*e320a76dSChristophe Leroy /* 3*e320a76dSChristophe Leroy * Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org) 4*e320a76dSChristophe Leroy */ 5*e320a76dSChristophe Leroy 6*e320a76dSChristophe Leroy #define COMMON_USER_BOOKE (PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \ 7*e320a76dSChristophe Leroy PPC_FEATURE_BOOKE) 8*e320a76dSChristophe Leroy 9*e320a76dSChristophe Leroy static struct cpu_spec cpu_specs[] __initdata = { 10*e320a76dSChristophe Leroy { 11*e320a76dSChristophe Leroy .pvr_mask = 0xf0000fff, 12*e320a76dSChristophe Leroy .pvr_value = 0x40000850, 13*e320a76dSChristophe Leroy .cpu_name = "440GR Rev. A", 14*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 15*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 16*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 17*e320a76dSChristophe Leroy .icache_bsize = 32, 18*e320a76dSChristophe Leroy .dcache_bsize = 32, 19*e320a76dSChristophe Leroy .machine_check = machine_check_4xx, 20*e320a76dSChristophe Leroy .platform = "ppc440", 21*e320a76dSChristophe Leroy }, 22*e320a76dSChristophe Leroy { /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */ 23*e320a76dSChristophe Leroy .pvr_mask = 0xf0000fff, 24*e320a76dSChristophe Leroy .pvr_value = 0x40000858, 25*e320a76dSChristophe Leroy .cpu_name = "440EP Rev. A", 26*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 27*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, 28*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 29*e320a76dSChristophe Leroy .icache_bsize = 32, 30*e320a76dSChristophe Leroy .dcache_bsize = 32, 31*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_440ep, 32*e320a76dSChristophe Leroy .machine_check = machine_check_4xx, 33*e320a76dSChristophe Leroy .platform = "ppc440", 34*e320a76dSChristophe Leroy }, 35*e320a76dSChristophe Leroy { 36*e320a76dSChristophe Leroy .pvr_mask = 0xf0000fff, 37*e320a76dSChristophe Leroy .pvr_value = 0x400008d3, 38*e320a76dSChristophe Leroy .cpu_name = "440GR Rev. B", 39*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 40*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, 41*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 42*e320a76dSChristophe Leroy .icache_bsize = 32, 43*e320a76dSChristophe Leroy .dcache_bsize = 32, 44*e320a76dSChristophe Leroy .machine_check = machine_check_4xx, 45*e320a76dSChristophe Leroy .platform = "ppc440", 46*e320a76dSChristophe Leroy }, 47*e320a76dSChristophe Leroy { /* Matches both physical and logical PVR for 440EP (logical pvr = pvr | 0x8) */ 48*e320a76dSChristophe Leroy .pvr_mask = 0xf0000ff7, 49*e320a76dSChristophe Leroy .pvr_value = 0x400008d4, 50*e320a76dSChristophe Leroy .cpu_name = "440EP Rev. C", 51*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 52*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, 53*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 54*e320a76dSChristophe Leroy .icache_bsize = 32, 55*e320a76dSChristophe Leroy .dcache_bsize = 32, 56*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_440ep, 57*e320a76dSChristophe Leroy .machine_check = machine_check_4xx, 58*e320a76dSChristophe Leroy .platform = "ppc440", 59*e320a76dSChristophe Leroy }, 60*e320a76dSChristophe Leroy { /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */ 61*e320a76dSChristophe Leroy .pvr_mask = 0xf0000fff, 62*e320a76dSChristophe Leroy .pvr_value = 0x400008db, 63*e320a76dSChristophe Leroy .cpu_name = "440EP Rev. B", 64*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 65*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, 66*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 67*e320a76dSChristophe Leroy .icache_bsize = 32, 68*e320a76dSChristophe Leroy .dcache_bsize = 32, 69*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_440ep, 70*e320a76dSChristophe Leroy .machine_check = machine_check_4xx, 71*e320a76dSChristophe Leroy .platform = "ppc440", 72*e320a76dSChristophe Leroy }, 73*e320a76dSChristophe Leroy { /* 440GRX */ 74*e320a76dSChristophe Leroy .pvr_mask = 0xf0000ffb, 75*e320a76dSChristophe Leroy .pvr_value = 0x200008D0, 76*e320a76dSChristophe Leroy .cpu_name = "440GRX", 77*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 78*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 79*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 80*e320a76dSChristophe Leroy .icache_bsize = 32, 81*e320a76dSChristophe Leroy .dcache_bsize = 32, 82*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_440grx, 83*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 84*e320a76dSChristophe Leroy .platform = "ppc440", 85*e320a76dSChristophe Leroy }, 86*e320a76dSChristophe Leroy { /* Use logical PVR for 440EPx (logical pvr = pvr | 0x8) */ 87*e320a76dSChristophe Leroy .pvr_mask = 0xf0000ffb, 88*e320a76dSChristophe Leroy .pvr_value = 0x200008D8, 89*e320a76dSChristophe Leroy .cpu_name = "440EPX", 90*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 91*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, 92*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 93*e320a76dSChristophe Leroy .icache_bsize = 32, 94*e320a76dSChristophe Leroy .dcache_bsize = 32, 95*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_440epx, 96*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 97*e320a76dSChristophe Leroy .platform = "ppc440", 98*e320a76dSChristophe Leroy }, 99*e320a76dSChristophe Leroy { /* 440GP Rev. B */ 100*e320a76dSChristophe Leroy .pvr_mask = 0xf0000fff, 101*e320a76dSChristophe Leroy .pvr_value = 0x40000440, 102*e320a76dSChristophe Leroy .cpu_name = "440GP Rev. B", 103*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 104*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 105*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 106*e320a76dSChristophe Leroy .icache_bsize = 32, 107*e320a76dSChristophe Leroy .dcache_bsize = 32, 108*e320a76dSChristophe Leroy .machine_check = machine_check_4xx, 109*e320a76dSChristophe Leroy .platform = "ppc440gp", 110*e320a76dSChristophe Leroy }, 111*e320a76dSChristophe Leroy { /* 440GP Rev. C */ 112*e320a76dSChristophe Leroy .pvr_mask = 0xf0000fff, 113*e320a76dSChristophe Leroy .pvr_value = 0x40000481, 114*e320a76dSChristophe Leroy .cpu_name = "440GP Rev. C", 115*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 116*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 117*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 118*e320a76dSChristophe Leroy .icache_bsize = 32, 119*e320a76dSChristophe Leroy .dcache_bsize = 32, 120*e320a76dSChristophe Leroy .machine_check = machine_check_4xx, 121*e320a76dSChristophe Leroy .platform = "ppc440gp", 122*e320a76dSChristophe Leroy }, 123*e320a76dSChristophe Leroy { /* 440GX Rev. A */ 124*e320a76dSChristophe Leroy .pvr_mask = 0xf0000fff, 125*e320a76dSChristophe Leroy .pvr_value = 0x50000850, 126*e320a76dSChristophe Leroy .cpu_name = "440GX Rev. A", 127*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 128*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 129*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 130*e320a76dSChristophe Leroy .icache_bsize = 32, 131*e320a76dSChristophe Leroy .dcache_bsize = 32, 132*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_440gx, 133*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 134*e320a76dSChristophe Leroy .platform = "ppc440", 135*e320a76dSChristophe Leroy }, 136*e320a76dSChristophe Leroy { /* 440GX Rev. B */ 137*e320a76dSChristophe Leroy .pvr_mask = 0xf0000fff, 138*e320a76dSChristophe Leroy .pvr_value = 0x50000851, 139*e320a76dSChristophe Leroy .cpu_name = "440GX Rev. B", 140*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 141*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 142*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 143*e320a76dSChristophe Leroy .icache_bsize = 32, 144*e320a76dSChristophe Leroy .dcache_bsize = 32, 145*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_440gx, 146*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 147*e320a76dSChristophe Leroy .platform = "ppc440", 148*e320a76dSChristophe Leroy }, 149*e320a76dSChristophe Leroy { /* 440GX Rev. C */ 150*e320a76dSChristophe Leroy .pvr_mask = 0xf0000fff, 151*e320a76dSChristophe Leroy .pvr_value = 0x50000892, 152*e320a76dSChristophe Leroy .cpu_name = "440GX Rev. C", 153*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 154*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 155*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 156*e320a76dSChristophe Leroy .icache_bsize = 32, 157*e320a76dSChristophe Leroy .dcache_bsize = 32, 158*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_440gx, 159*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 160*e320a76dSChristophe Leroy .platform = "ppc440", 161*e320a76dSChristophe Leroy }, 162*e320a76dSChristophe Leroy { /* 440GX Rev. F */ 163*e320a76dSChristophe Leroy .pvr_mask = 0xf0000fff, 164*e320a76dSChristophe Leroy .pvr_value = 0x50000894, 165*e320a76dSChristophe Leroy .cpu_name = "440GX Rev. F", 166*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 167*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 168*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 169*e320a76dSChristophe Leroy .icache_bsize = 32, 170*e320a76dSChristophe Leroy .dcache_bsize = 32, 171*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_440gx, 172*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 173*e320a76dSChristophe Leroy .platform = "ppc440", 174*e320a76dSChristophe Leroy }, 175*e320a76dSChristophe Leroy { /* 440SP Rev. A */ 176*e320a76dSChristophe Leroy .pvr_mask = 0xfff00fff, 177*e320a76dSChristophe Leroy .pvr_value = 0x53200891, 178*e320a76dSChristophe Leroy .cpu_name = "440SP Rev. A", 179*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 180*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 181*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 182*e320a76dSChristophe Leroy .icache_bsize = 32, 183*e320a76dSChristophe Leroy .dcache_bsize = 32, 184*e320a76dSChristophe Leroy .machine_check = machine_check_4xx, 185*e320a76dSChristophe Leroy .platform = "ppc440", 186*e320a76dSChristophe Leroy }, 187*e320a76dSChristophe Leroy { /* 440SPe Rev. A */ 188*e320a76dSChristophe Leroy .pvr_mask = 0xfff00fff, 189*e320a76dSChristophe Leroy .pvr_value = 0x53400890, 190*e320a76dSChristophe Leroy .cpu_name = "440SPe Rev. A", 191*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 192*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 193*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 194*e320a76dSChristophe Leroy .icache_bsize = 32, 195*e320a76dSChristophe Leroy .dcache_bsize = 32, 196*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_440spe, 197*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 198*e320a76dSChristophe Leroy .platform = "ppc440", 199*e320a76dSChristophe Leroy }, 200*e320a76dSChristophe Leroy { /* 440SPe Rev. B */ 201*e320a76dSChristophe Leroy .pvr_mask = 0xfff00fff, 202*e320a76dSChristophe Leroy .pvr_value = 0x53400891, 203*e320a76dSChristophe Leroy .cpu_name = "440SPe Rev. B", 204*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 205*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 206*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 207*e320a76dSChristophe Leroy .icache_bsize = 32, 208*e320a76dSChristophe Leroy .dcache_bsize = 32, 209*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_440spe, 210*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 211*e320a76dSChristophe Leroy .platform = "ppc440", 212*e320a76dSChristophe Leroy }, 213*e320a76dSChristophe Leroy { /* 460EX */ 214*e320a76dSChristophe Leroy .pvr_mask = 0xffff0006, 215*e320a76dSChristophe Leroy .pvr_value = 0x13020002, 216*e320a76dSChristophe Leroy .cpu_name = "460EX", 217*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_440x6, 218*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, 219*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 220*e320a76dSChristophe Leroy .icache_bsize = 32, 221*e320a76dSChristophe Leroy .dcache_bsize = 32, 222*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_460ex, 223*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 224*e320a76dSChristophe Leroy .platform = "ppc440", 225*e320a76dSChristophe Leroy }, 226*e320a76dSChristophe Leroy { /* 460EX Rev B */ 227*e320a76dSChristophe Leroy .pvr_mask = 0xffff0007, 228*e320a76dSChristophe Leroy .pvr_value = 0x13020004, 229*e320a76dSChristophe Leroy .cpu_name = "460EX Rev. B", 230*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_440x6, 231*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, 232*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 233*e320a76dSChristophe Leroy .icache_bsize = 32, 234*e320a76dSChristophe Leroy .dcache_bsize = 32, 235*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_460ex, 236*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 237*e320a76dSChristophe Leroy .platform = "ppc440", 238*e320a76dSChristophe Leroy }, 239*e320a76dSChristophe Leroy { /* 460GT */ 240*e320a76dSChristophe Leroy .pvr_mask = 0xffff0006, 241*e320a76dSChristophe Leroy .pvr_value = 0x13020000, 242*e320a76dSChristophe Leroy .cpu_name = "460GT", 243*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_440x6, 244*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, 245*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 246*e320a76dSChristophe Leroy .icache_bsize = 32, 247*e320a76dSChristophe Leroy .dcache_bsize = 32, 248*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_460gt, 249*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 250*e320a76dSChristophe Leroy .platform = "ppc440", 251*e320a76dSChristophe Leroy }, 252*e320a76dSChristophe Leroy { /* 460GT Rev B */ 253*e320a76dSChristophe Leroy .pvr_mask = 0xffff0007, 254*e320a76dSChristophe Leroy .pvr_value = 0x13020005, 255*e320a76dSChristophe Leroy .cpu_name = "460GT Rev. B", 256*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_440x6, 257*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, 258*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 259*e320a76dSChristophe Leroy .icache_bsize = 32, 260*e320a76dSChristophe Leroy .dcache_bsize = 32, 261*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_460gt, 262*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 263*e320a76dSChristophe Leroy .platform = "ppc440", 264*e320a76dSChristophe Leroy }, 265*e320a76dSChristophe Leroy { /* 460SX */ 266*e320a76dSChristophe Leroy .pvr_mask = 0xffffff00, 267*e320a76dSChristophe Leroy .pvr_value = 0x13541800, 268*e320a76dSChristophe Leroy .cpu_name = "460SX", 269*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 270*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 271*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 272*e320a76dSChristophe Leroy .icache_bsize = 32, 273*e320a76dSChristophe Leroy .dcache_bsize = 32, 274*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_460sx, 275*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 276*e320a76dSChristophe Leroy .platform = "ppc440", 277*e320a76dSChristophe Leroy }, 278*e320a76dSChristophe Leroy { /* 464 in APM821xx */ 279*e320a76dSChristophe Leroy .pvr_mask = 0xfffffff0, 280*e320a76dSChristophe Leroy .pvr_value = 0x12C41C80, 281*e320a76dSChristophe Leroy .cpu_name = "APM821XX", 282*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 283*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE | 284*e320a76dSChristophe Leroy PPC_FEATURE_HAS_FPU, 285*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 286*e320a76dSChristophe Leroy .icache_bsize = 32, 287*e320a76dSChristophe Leroy .dcache_bsize = 32, 288*e320a76dSChristophe Leroy .cpu_setup = __setup_cpu_apm821xx, 289*e320a76dSChristophe Leroy .machine_check = machine_check_440A, 290*e320a76dSChristophe Leroy .platform = "ppc440", 291*e320a76dSChristophe Leroy }, 292*e320a76dSChristophe Leroy { /* default match */ 293*e320a76dSChristophe Leroy .pvr_mask = 0x00000000, 294*e320a76dSChristophe Leroy .pvr_value = 0x00000000, 295*e320a76dSChristophe Leroy .cpu_name = "(generic 44x PPC)", 296*e320a76dSChristophe Leroy .cpu_features = CPU_FTRS_44X, 297*e320a76dSChristophe Leroy .cpu_user_features = COMMON_USER_BOOKE, 298*e320a76dSChristophe Leroy .mmu_features = MMU_FTR_TYPE_44x, 299*e320a76dSChristophe Leroy .icache_bsize = 32, 300*e320a76dSChristophe Leroy .dcache_bsize = 32, 301*e320a76dSChristophe Leroy .machine_check = machine_check_4xx, 302*e320a76dSChristophe Leroy .platform = "ppc440", 303*e320a76dSChristophe Leroy } 304*e320a76dSChristophe Leroy }; 305