| .. | .. |
|---|
| 145 | 145 | |
|---|
| 146 | 146 | /* Definitions for features that only exist on 32-bit chips */ |
|---|
| 147 | 147 | #ifdef CONFIG_PPC32 |
|---|
| 148 | | -#define CPU_FTR_601 ASM_CONST(0x00001000) |
|---|
| 149 | 148 | #define CPU_FTR_L2CR ASM_CONST(0x00002000) |
|---|
| 150 | 149 | #define CPU_FTR_SPEC7450 ASM_CONST(0x00004000) |
|---|
| 151 | 150 | #define CPU_FTR_TAU ASM_CONST(0x00008000) |
|---|
| 152 | 151 | #define CPU_FTR_CAN_DOZE ASM_CONST(0x00010000) |
|---|
| 153 | | -#define CPU_FTR_USE_RTC ASM_CONST(0x00020000) |
|---|
| 154 | 152 | #define CPU_FTR_L3CR ASM_CONST(0x00040000) |
|---|
| 155 | 153 | #define CPU_FTR_L3_DISABLE_NAP ASM_CONST(0x00080000) |
|---|
| 156 | 154 | #define CPU_FTR_NAP_DISABLE_L2_PR ASM_CONST(0x00100000) |
|---|
| .. | .. |
|---|
| 160 | 158 | #define CPU_FTR_NEED_COHERENT ASM_CONST(0x01000000) |
|---|
| 161 | 159 | #define CPU_FTR_NO_BTIC ASM_CONST(0x02000000) |
|---|
| 162 | 160 | #define CPU_FTR_PPC_LE ASM_CONST(0x04000000) |
|---|
| 163 | | -#define CPU_FTR_UNIFIED_ID_CACHE ASM_CONST(0x08000000) |
|---|
| 164 | 161 | #define CPU_FTR_SPE ASM_CONST(0x10000000) |
|---|
| 165 | 162 | #define CPU_FTR_NEED_PAIRED_STWCX ASM_CONST(0x20000000) |
|---|
| 166 | 163 | #define CPU_FTR_INDEXED_DCR ASM_CONST(0x40000000) |
|---|
| 167 | 164 | |
|---|
| 168 | 165 | #else /* CONFIG_PPC32 */ |
|---|
| 169 | 166 | /* Define these to 0 for the sake of tests in common code */ |
|---|
| 170 | | -#define CPU_FTR_601 (0) |
|---|
| 171 | 167 | #define CPU_FTR_PPC_LE (0) |
|---|
| 168 | +#define CPU_FTR_SPE (0) |
|---|
| 172 | 169 | #endif |
|---|
| 173 | 170 | |
|---|
| 174 | 171 | /* |
|---|
| .. | .. |
|---|
| 202 | 199 | #define CPU_FTR_STCX_CHECKS_ADDRESS LONG_ASM_CONST(0x0000000080000000) |
|---|
| 203 | 200 | #define CPU_FTR_POPCNTB LONG_ASM_CONST(0x0000000100000000) |
|---|
| 204 | 201 | #define CPU_FTR_POPCNTD LONG_ASM_CONST(0x0000000200000000) |
|---|
| 205 | | -#define CPU_FTR_PKEY LONG_ASM_CONST(0x0000000400000000) |
|---|
| 202 | +/* LONG_ASM_CONST(0x0000000400000000) Free */ |
|---|
| 206 | 203 | #define CPU_FTR_VMX_COPY LONG_ASM_CONST(0x0000000800000000) |
|---|
| 207 | 204 | #define CPU_FTR_TM LONG_ASM_CONST(0x0000001000000000) |
|---|
| 208 | 205 | #define CPU_FTR_CFAR LONG_ASM_CONST(0x0000002000000000) |
|---|
| .. | .. |
|---|
| 216 | 213 | #define CPU_FTR_P9_TLBIE_STQ_BUG LONG_ASM_CONST(0x0000400000000000) |
|---|
| 217 | 214 | #define CPU_FTR_P9_TIDR LONG_ASM_CONST(0x0000800000000000) |
|---|
| 218 | 215 | #define CPU_FTR_P9_TLBIE_ERAT_BUG LONG_ASM_CONST(0x0001000000000000) |
|---|
| 216 | +#define CPU_FTR_P9_RADIX_PREFETCH_BUG LONG_ASM_CONST(0x0002000000000000) |
|---|
| 217 | +#define CPU_FTR_ARCH_31 LONG_ASM_CONST(0x0004000000000000) |
|---|
| 218 | +#define CPU_FTR_DAWR1 LONG_ASM_CONST(0x0008000000000000) |
|---|
| 219 | 219 | |
|---|
| 220 | 220 | #ifndef __ASSEMBLY__ |
|---|
| 221 | 221 | |
|---|
| .. | .. |
|---|
| 295 | 295 | #define CPU_FTR_MAYBE_CAN_NAP 0 |
|---|
| 296 | 296 | #endif |
|---|
| 297 | 297 | |
|---|
| 298 | | -#define CPU_FTRS_PPC601 (CPU_FTR_COMMON | CPU_FTR_601 | \ |
|---|
| 299 | | - CPU_FTR_COHERENT_ICACHE | CPU_FTR_UNIFIED_ID_CACHE | CPU_FTR_USE_RTC) |
|---|
| 300 | 298 | #define CPU_FTRS_603 (CPU_FTR_COMMON | CPU_FTR_MAYBE_CAN_DOZE | \ |
|---|
| 301 | | - CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) |
|---|
| 299 | + CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE | CPU_FTR_NOEXECUTE) |
|---|
| 302 | 300 | #define CPU_FTRS_604 (CPU_FTR_COMMON | CPU_FTR_PPC_LE) |
|---|
| 303 | 301 | #define CPU_FTRS_740_NOTAU (CPU_FTR_COMMON | \ |
|---|
| 304 | 302 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_L2CR | \ |
|---|
| .. | .. |
|---|
| 369 | 367 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ |
|---|
| 370 | 368 | CPU_FTR_SPEC7450 | CPU_FTR_NAP_DISABLE_L2_PR | \ |
|---|
| 371 | 369 | CPU_FTR_PPC_LE | CPU_FTR_NEED_PAIRED_STWCX) |
|---|
| 372 | | -#define CPU_FTRS_82XX (CPU_FTR_COMMON | CPU_FTR_MAYBE_CAN_DOZE) |
|---|
| 370 | +#define CPU_FTRS_82XX (CPU_FTR_COMMON | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_NOEXECUTE) |
|---|
| 373 | 371 | #define CPU_FTRS_G2_LE (CPU_FTR_COMMON | CPU_FTR_MAYBE_CAN_DOZE | \ |
|---|
| 374 | | - CPU_FTR_MAYBE_CAN_NAP) |
|---|
| 372 | + CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_NOEXECUTE) |
|---|
| 375 | 373 | #define CPU_FTRS_E300 (CPU_FTR_MAYBE_CAN_DOZE | \ |
|---|
| 376 | 374 | CPU_FTR_MAYBE_CAN_NAP | \ |
|---|
| 377 | | - CPU_FTR_COMMON) |
|---|
| 375 | + CPU_FTR_COMMON | CPU_FTR_NOEXECUTE) |
|---|
| 378 | 376 | #define CPU_FTRS_E300C2 (CPU_FTR_MAYBE_CAN_DOZE | \ |
|---|
| 379 | 377 | CPU_FTR_MAYBE_CAN_NAP | \ |
|---|
| 380 | | - CPU_FTR_COMMON | CPU_FTR_FPU_UNAVAILABLE) |
|---|
| 378 | + CPU_FTR_COMMON | CPU_FTR_FPU_UNAVAILABLE | CPU_FTR_NOEXECUTE) |
|---|
| 381 | 379 | #define CPU_FTRS_CLASSIC32 (CPU_FTR_COMMON) |
|---|
| 382 | 380 | #define CPU_FTRS_8XX (CPU_FTR_NOEXECUTE) |
|---|
| 383 | 381 | #define CPU_FTRS_40X (CPU_FTR_NODSISRALIGN | CPU_FTR_NOEXECUTE) |
|---|
| .. | .. |
|---|
| 387 | 385 | #define CPU_FTRS_47X (CPU_FTRS_440x6) |
|---|
| 388 | 386 | #define CPU_FTRS_E200 (CPU_FTR_SPE_COMP | \ |
|---|
| 389 | 387 | CPU_FTR_NODSISRALIGN | CPU_FTR_COHERENT_ICACHE | \ |
|---|
| 390 | | - CPU_FTR_UNIFIED_ID_CACHE | CPU_FTR_NOEXECUTE | \ |
|---|
| 388 | + CPU_FTR_NOEXECUTE | \ |
|---|
| 391 | 389 | CPU_FTR_DEBUG_LVL_EXC) |
|---|
| 392 | 390 | #define CPU_FTRS_E500 (CPU_FTR_MAYBE_CAN_DOZE | \ |
|---|
| 393 | 391 | CPU_FTR_SPE_COMP | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_NODSISRALIGN | \ |
|---|
| .. | .. |
|---|
| 439 | 437 | CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_ASYM_SMT | \ |
|---|
| 440 | 438 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ |
|---|
| 441 | 439 | CPU_FTR_CFAR | CPU_FTR_HVMODE | \ |
|---|
| 442 | | - CPU_FTR_VMX_COPY | CPU_FTR_HAS_PPR | CPU_FTR_DABRX | CPU_FTR_PKEY) |
|---|
| 440 | + CPU_FTR_VMX_COPY | CPU_FTR_HAS_PPR | CPU_FTR_DABRX ) |
|---|
| 443 | 441 | #define CPU_FTRS_POWER8 (CPU_FTR_LWSYNC | \ |
|---|
| 444 | 442 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\ |
|---|
| 445 | 443 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
|---|
| .. | .. |
|---|
| 449 | 447 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ |
|---|
| 450 | 448 | CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ |
|---|
| 451 | 449 | CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_DAWR | \ |
|---|
| 452 | | - CPU_FTR_ARCH_207S | CPU_FTR_TM_COMP | CPU_FTR_PKEY) |
|---|
| 450 | + CPU_FTR_ARCH_207S | CPU_FTR_TM_COMP ) |
|---|
| 453 | 451 | #define CPU_FTRS_POWER8E (CPU_FTRS_POWER8 | CPU_FTR_PMAO_BUG) |
|---|
| 454 | 452 | #define CPU_FTRS_POWER9 (CPU_FTR_LWSYNC | \ |
|---|
| 455 | 453 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\ |
|---|
| .. | .. |
|---|
| 460 | 458 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ |
|---|
| 461 | 459 | CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ |
|---|
| 462 | 460 | CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_ARCH_207S | \ |
|---|
| 463 | | - CPU_FTR_TM_COMP | CPU_FTR_ARCH_300 | CPU_FTR_PKEY | \ |
|---|
| 464 | | - CPU_FTR_P9_TLBIE_STQ_BUG | CPU_FTR_P9_TLBIE_ERAT_BUG | CPU_FTR_P9_TIDR) |
|---|
| 465 | | -#define CPU_FTRS_POWER9_DD2_0 CPU_FTRS_POWER9 |
|---|
| 466 | | -#define CPU_FTRS_POWER9_DD2_1 (CPU_FTRS_POWER9 | CPU_FTR_POWER9_DD2_1) |
|---|
| 461 | + CPU_FTR_TM_COMP | CPU_FTR_ARCH_300 | CPU_FTR_P9_TLBIE_STQ_BUG | \ |
|---|
| 462 | + CPU_FTR_P9_TLBIE_ERAT_BUG | CPU_FTR_P9_TIDR) |
|---|
| 463 | +#define CPU_FTRS_POWER9_DD2_0 (CPU_FTRS_POWER9 | CPU_FTR_P9_RADIX_PREFETCH_BUG) |
|---|
| 464 | +#define CPU_FTRS_POWER9_DD2_1 (CPU_FTRS_POWER9 | \ |
|---|
| 465 | + CPU_FTR_P9_RADIX_PREFETCH_BUG | \ |
|---|
| 466 | + CPU_FTR_POWER9_DD2_1) |
|---|
| 467 | 467 | #define CPU_FTRS_POWER9_DD2_2 (CPU_FTRS_POWER9 | CPU_FTR_POWER9_DD2_1 | \ |
|---|
| 468 | 468 | CPU_FTR_P9_TM_HV_ASSIST | \ |
|---|
| 469 | 469 | CPU_FTR_P9_TM_XER_SO_BUG) |
|---|
| 470 | +#define CPU_FTRS_POWER10 (CPU_FTR_LWSYNC | \ |
|---|
| 471 | + CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\ |
|---|
| 472 | + CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
|---|
| 473 | + CPU_FTR_COHERENT_ICACHE | \ |
|---|
| 474 | + CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ |
|---|
| 475 | + CPU_FTR_DSCR | CPU_FTR_SAO | \ |
|---|
| 476 | + CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ |
|---|
| 477 | + CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ |
|---|
| 478 | + CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_ARCH_207S | \ |
|---|
| 479 | + CPU_FTR_ARCH_300 | CPU_FTR_ARCH_31 | \ |
|---|
| 480 | + CPU_FTR_DAWR | CPU_FTR_DAWR1) |
|---|
| 470 | 481 | #define CPU_FTRS_CELL (CPU_FTR_LWSYNC | \ |
|---|
| 471 | 482 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
|---|
| 472 | 483 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
|---|
| .. | .. |
|---|
| 485 | 496 | #define CPU_FTRS_POSSIBLE \ |
|---|
| 486 | 497 | (CPU_FTRS_POWER7 | CPU_FTRS_POWER8E | CPU_FTRS_POWER8 | \ |
|---|
| 487 | 498 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_VSX_COMP | CPU_FTRS_POWER9 | \ |
|---|
| 488 | | - CPU_FTRS_POWER9_DD2_1 | CPU_FTRS_POWER9_DD2_2) |
|---|
| 499 | + CPU_FTRS_POWER9_DD2_1 | CPU_FTRS_POWER9_DD2_2 | CPU_FTRS_POWER10) |
|---|
| 489 | 500 | #else |
|---|
| 490 | 501 | #define CPU_FTRS_POSSIBLE \ |
|---|
| 491 | 502 | (CPU_FTRS_PPC970 | CPU_FTRS_POWER5 | \ |
|---|
| 492 | 503 | CPU_FTRS_POWER6 | CPU_FTRS_POWER7 | CPU_FTRS_POWER8E | \ |
|---|
| 493 | 504 | CPU_FTRS_POWER8 | CPU_FTRS_CELL | CPU_FTRS_PA6T | \ |
|---|
| 494 | 505 | CPU_FTR_VSX_COMP | CPU_FTR_ALTIVEC_COMP | CPU_FTRS_POWER9 | \ |
|---|
| 495 | | - CPU_FTRS_POWER9_DD2_1 | CPU_FTRS_POWER9_DD2_2) |
|---|
| 506 | + CPU_FTRS_POWER9_DD2_1 | CPU_FTRS_POWER9_DD2_2 | CPU_FTRS_POWER10) |
|---|
| 496 | 507 | #endif /* CONFIG_CPU_LITTLE_ENDIAN */ |
|---|
| 497 | 508 | #endif |
|---|
| 498 | 509 | #else |
|---|
| 499 | 510 | enum { |
|---|
| 500 | 511 | CPU_FTRS_POSSIBLE = |
|---|
| 501 | 512 | #ifdef CONFIG_PPC_BOOK3S_32 |
|---|
| 502 | | - CPU_FTRS_PPC601 | CPU_FTRS_603 | CPU_FTRS_604 | CPU_FTRS_740_NOTAU | |
|---|
| 513 | + CPU_FTRS_603 | CPU_FTRS_604 | CPU_FTRS_740_NOTAU | |
|---|
| 503 | 514 | CPU_FTRS_740 | CPU_FTRS_750 | CPU_FTRS_750FX1 | |
|---|
| 504 | 515 | CPU_FTRS_750FX2 | CPU_FTRS_750FX | CPU_FTRS_750GX | |
|---|
| 505 | 516 | CPU_FTRS_7400_NOTAU | CPU_FTRS_7400 | CPU_FTRS_7450_20 | |
|---|
| .. | .. |
|---|
| 573 | 584 | enum { |
|---|
| 574 | 585 | CPU_FTRS_ALWAYS = |
|---|
| 575 | 586 | #ifdef CONFIG_PPC_BOOK3S_32 |
|---|
| 576 | | - CPU_FTRS_PPC601 & CPU_FTRS_603 & CPU_FTRS_604 & CPU_FTRS_740_NOTAU & |
|---|
| 587 | + CPU_FTRS_603 & CPU_FTRS_604 & CPU_FTRS_740_NOTAU & |
|---|
| 577 | 588 | CPU_FTRS_740 & CPU_FTRS_750 & CPU_FTRS_750FX1 & |
|---|
| 578 | 589 | CPU_FTRS_750FX2 & CPU_FTRS_750FX & CPU_FTRS_750GX & |
|---|
| 579 | 590 | CPU_FTRS_7400_NOTAU & CPU_FTRS_7400 & CPU_FTRS_7450_20 & |
|---|
| .. | .. |
|---|
| 606 | 617 | }; |
|---|
| 607 | 618 | #endif /* __powerpc64__ */ |
|---|
| 608 | 619 | |
|---|
| 609 | | -#define HBP_NUM 1 |
|---|
| 620 | +/* |
|---|
| 621 | + * Maximum number of hw breakpoint supported on powerpc. Number of |
|---|
| 622 | + * breakpoints supported by actual hw might be less than this, which |
|---|
| 623 | + * is decided at run time in nr_wp_slots(). |
|---|
| 624 | + */ |
|---|
| 625 | +#define HBP_NUM_MAX 2 |
|---|
| 610 | 626 | |
|---|
| 611 | 627 | #endif /* !__ASSEMBLY__ */ |
|---|
| 612 | 628 | |
|---|