mirror of https://gitee.com/openkylin/linux.git
powerpc/32s: Make support for 603 and 604+ selectable
book3s/32 has two main families: - CPU with 603 cores that don't have HASH PTE table and perform SW TLB loading. - Other CPUs based on 604+ cores that have HASH PTE table. This leads to some complex logic and additionnal code to support both. This makes sense for distribution kernels that aim at running on any CPU, but when you are fine tuning a kernel for an embedded 603 based board you don't need all the HASH logic. Allow selection of support for each family, in order to opt out unneeded parts of code. At least one must be selected. Note that some of the CPU supporting HASH also support SW TLB loading, however it is not supported by Linux kernel at the time being, because they do not have alternate registers in the TLB miss exception handlers. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/8dde0cdb629a71abc29b0d85a52a86e920376cb6.1603348103.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
ad510e37e4
commit
44e9754d63
|
@ -502,7 +502,7 @@ static inline void cpu_feature_keys_init(void) { }
|
|||
#else
|
||||
enum {
|
||||
CPU_FTRS_POSSIBLE =
|
||||
#ifdef CONFIG_PPC_BOOK3S_32
|
||||
#ifdef CONFIG_PPC_BOOK3S_604
|
||||
CPU_FTRS_604 | CPU_FTRS_740_NOTAU |
|
||||
CPU_FTRS_740 | CPU_FTRS_750 | CPU_FTRS_750FX1 |
|
||||
CPU_FTRS_750FX2 | CPU_FTRS_750FX | CPU_FTRS_750GX |
|
||||
|
@ -511,6 +511,8 @@ enum {
|
|||
CPU_FTRS_7455_20 | CPU_FTRS_7455 | CPU_FTRS_7447_10 |
|
||||
CPU_FTRS_7447 | CPU_FTRS_7447A |
|
||||
CPU_FTRS_CLASSIC32 |
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_BOOK3S_603
|
||||
CPU_FTRS_603 | CPU_FTRS_82XX |
|
||||
CPU_FTRS_G2_LE | CPU_FTRS_E300 | CPU_FTRS_E300C2 |
|
||||
#endif
|
||||
|
@ -572,7 +574,7 @@ enum {
|
|||
#else
|
||||
enum {
|
||||
CPU_FTRS_ALWAYS =
|
||||
#ifdef CONFIG_PPC_BOOK3S_32
|
||||
#ifdef CONFIG_PPC_BOOK3S_604
|
||||
CPU_FTRS_604 & CPU_FTRS_740_NOTAU &
|
||||
CPU_FTRS_740 & CPU_FTRS_750 & CPU_FTRS_750FX1 &
|
||||
CPU_FTRS_750FX2 & CPU_FTRS_750FX & CPU_FTRS_750GX &
|
||||
|
@ -581,6 +583,8 @@ enum {
|
|||
CPU_FTRS_7455_20 & CPU_FTRS_7455 & CPU_FTRS_7447_10 &
|
||||
CPU_FTRS_7447 & CPU_FTRS_7447A &
|
||||
CPU_FTRS_CLASSIC32 &
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_BOOK3S_603
|
||||
CPU_FTRS_603 & CPU_FTRS_82XX &
|
||||
CPU_FTRS_G2_LE & CPU_FTRS_E300 & CPU_FTRS_E300C2 &
|
||||
#endif
|
||||
|
|
|
@ -157,7 +157,7 @@ DECLARE_PER_CPU(int, next_tlbcam_idx);
|
|||
|
||||
enum {
|
||||
MMU_FTRS_POSSIBLE =
|
||||
#ifdef CONFIG_PPC_BOOK3S
|
||||
#if defined(CONFIG_PPC_BOOK3S_64) || defined(CONFIG_PPC_BOOK3S_604)
|
||||
MMU_FTR_HPTE_TABLE |
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_8xx
|
||||
|
@ -206,6 +206,9 @@ enum {
|
|||
0,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_PPC_BOOK3S_604) && !defined(CONFIG_PPC_BOOK3S_603)
|
||||
#define MMU_FTRS_ALWAYS MMU_FTR_HPTE_TABLE
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_8xx
|
||||
#define MMU_FTRS_ALWAYS MMU_FTR_TYPE_8xx
|
||||
#endif
|
||||
|
|
|
@ -612,6 +612,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
|
|||
|
||||
#ifdef CONFIG_PPC32
|
||||
#ifdef CONFIG_PPC_BOOK3S_32
|
||||
#ifdef CONFIG_PPC_BOOK3S_604
|
||||
{ /* 604 */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x00040000,
|
||||
|
@ -1101,6 +1102,8 @@ static struct cpu_spec __initdata cpu_specs[] = {
|
|||
.machine_check = machine_check_generic,
|
||||
.platform = "ppc7450",
|
||||
},
|
||||
#endif /* CONFIG_PPC_BOOK3S_604 */
|
||||
#ifdef CONFIG_PPC_BOOK3S_603
|
||||
{ /* 603 */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x00030000,
|
||||
|
@ -1229,6 +1232,8 @@ static struct cpu_spec __initdata cpu_specs[] = {
|
|||
.platform = "ppc603",
|
||||
},
|
||||
#endif
|
||||
#endif /* CONFIG_PPC_BOOK3S_603 */
|
||||
#ifdef CONFIG_PPC_BOOK3S_604
|
||||
{ /* default match, we assume split I/D cache & TB (non-601)... */
|
||||
.pvr_mask = 0x00000000,
|
||||
.pvr_value = 0x00000000,
|
||||
|
@ -1241,6 +1246,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
|
|||
.machine_check = machine_check_generic,
|
||||
.platform = "ppc603",
|
||||
},
|
||||
#endif /* CONFIG_PPC_BOOK3S_604 */
|
||||
#endif /* CONFIG_PPC_BOOK3S_32 */
|
||||
#ifdef CONFIG_PPC_8xx
|
||||
{ /* 8xx */
|
||||
|
|
|
@ -64,6 +64,22 @@ config 44x
|
|||
|
||||
endchoice
|
||||
|
||||
config PPC_BOOK3S_603
|
||||
bool "Support for 603 SW loaded TLB"
|
||||
depends on PPC_BOOK3S_32
|
||||
default y
|
||||
help
|
||||
Provide support for processors based on the 603 cores. Those
|
||||
processors don't have a HASH MMU and provide SW TLB loading.
|
||||
|
||||
config PPC_BOOK3S_604
|
||||
bool "Support for 604+ HASH MMU" if PPC_BOOK3S_603
|
||||
depends on PPC_BOOK3S_32
|
||||
default y
|
||||
help
|
||||
Provide support for processors not based on the 603 cores.
|
||||
Those processors have a HASH MMU.
|
||||
|
||||
choice
|
||||
prompt "Processor Type"
|
||||
depends on PPC64
|
||||
|
|
Loading…
Reference in New Issue