Commit 8b14e1df authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

powerpc: Remove support for PowerPC 601

PowerPC 601 has been retired.

Remove all associated specific code.

CPU_FTRS_PPC601 has CPU_FTR_COHERENT_ICACHE and CPU_FTR_COMMON.

CPU_FTR_COMMON is already present via other CPU_FTRS.
None of the remaining CPU selects CPU_FTR_COHERENT_ICACHE.

So CPU_FTRS_PPC601 can be removed from the possible features,
hence can be removed completely.
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/60b725d55e21beec3335175c20b77903ff98284f.1601362098.git.christophe.leroy@csgroup.eu
parent f0ed73f3
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
.text .text
/* udelay (on non-601 processors) needs to know the period of the /* udelay needs to know the period of the
* timebase in nanoseconds. This used to be hardcoded to be 60ns * timebase in nanoseconds. This used to be hardcoded to be 60ns
* (period of 66MHz/4). Now a variable is used that is initialized to * (period of 66MHz/4). Now a variable is used that is initialized to
* 60 for backward compatibility, but it can be overridden as necessary * 60 for backward compatibility, but it can be overridden as necessary
...@@ -37,19 +37,6 @@ timebase_period_ns: ...@@ -37,19 +37,6 @@ timebase_period_ns:
*/ */
.globl udelay .globl udelay
udelay: udelay:
mfspr r4,SPRN_PVR
srwi r4,r4,16
cmpwi 0,r4,1 /* 601 ? */
bne .Ludelay_not_601
00: li r0,86 /* Instructions / microsecond? */
mtctr r0
10: addi r0,r0,0 /* NOP */
bdnz 10b
subic. r3,r3,1
bne 00b
blr
.Ludelay_not_601:
mulli r4,r3,1000 /* nanoseconds */ mulli r4,r3,1000 /* nanoseconds */
/* Change r4 to be the number of ticks using: /* Change r4 to be the number of ticks using:
* (nanoseconds + (timebase_period_ns - 1 )) / timebase_period_ns * (nanoseconds + (timebase_period_ns - 1 )) / timebase_period_ns
......
...@@ -295,8 +295,6 @@ static inline void cpu_feature_keys_init(void) { } ...@@ -295,8 +295,6 @@ static inline void cpu_feature_keys_init(void) { }
#define CPU_FTR_MAYBE_CAN_NAP 0 #define CPU_FTR_MAYBE_CAN_NAP 0
#endif #endif
#define CPU_FTRS_PPC601 (CPU_FTR_COMMON | \
CPU_FTR_COHERENT_ICACHE)
#define CPU_FTRS_603 (CPU_FTR_COMMON | CPU_FTR_MAYBE_CAN_DOZE | \ #define CPU_FTRS_603 (CPU_FTR_COMMON | CPU_FTR_MAYBE_CAN_DOZE | \
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE | CPU_FTR_NOEXECUTE) CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE | CPU_FTR_NOEXECUTE)
#define CPU_FTRS_604 (CPU_FTR_COMMON | CPU_FTR_PPC_LE) #define CPU_FTRS_604 (CPU_FTR_COMMON | CPU_FTR_PPC_LE)
...@@ -512,10 +510,8 @@ static inline void cpu_feature_keys_init(void) { } ...@@ -512,10 +510,8 @@ static inline void cpu_feature_keys_init(void) { }
#else #else
enum { enum {
CPU_FTRS_POSSIBLE = CPU_FTRS_POSSIBLE =
#ifdef CONFIG_PPC_BOOK3S_601 #ifdef CONFIG_PPC_BOOK3S_32
CPU_FTRS_PPC601 | CPU_FTRS_603 | CPU_FTRS_604 | CPU_FTRS_740_NOTAU |
#elif defined(CONFIG_PPC_BOOK3S_32)
CPU_FTRS_PPC601 | CPU_FTRS_603 | CPU_FTRS_604 | CPU_FTRS_740_NOTAU |
CPU_FTRS_740 | CPU_FTRS_750 | CPU_FTRS_750FX1 | CPU_FTRS_740 | CPU_FTRS_750 | CPU_FTRS_750FX1 |
CPU_FTRS_750FX2 | CPU_FTRS_750FX | CPU_FTRS_750GX | CPU_FTRS_750FX2 | CPU_FTRS_750FX | CPU_FTRS_750GX |
CPU_FTRS_7400_NOTAU | CPU_FTRS_7400 | CPU_FTRS_7450_20 | CPU_FTRS_7400_NOTAU | CPU_FTRS_7400 | CPU_FTRS_7450_20 |
...@@ -590,9 +586,7 @@ enum { ...@@ -590,9 +586,7 @@ enum {
#else #else
enum { enum {
CPU_FTRS_ALWAYS = CPU_FTRS_ALWAYS =
#ifdef CONFIG_PPC_BOOK3S_601 #ifdef CONFIG_PPC_BOOK3S_32
CPU_FTRS_PPC601 &
#elif defined(CONFIG_PPC_BOOK3S_32)
CPU_FTRS_603 & CPU_FTRS_604 & CPU_FTRS_740_NOTAU & CPU_FTRS_603 & CPU_FTRS_604 & CPU_FTRS_740_NOTAU &
CPU_FTRS_740 & CPU_FTRS_750 & CPU_FTRS_750FX1 & CPU_FTRS_740 & CPU_FTRS_750 & CPU_FTRS_750FX1 &
CPU_FTRS_750FX2 & CPU_FTRS_750FX & CPU_FTRS_750GX & CPU_FTRS_750FX2 & CPU_FTRS_750FX & CPU_FTRS_750GX &
......
...@@ -401,8 +401,7 @@ END_FTR_SECTION_NESTED(CPU_FTR_CELL_TB_BUG, CPU_FTR_CELL_TB_BUG, 96) ...@@ -401,8 +401,7 @@ END_FTR_SECTION_NESTED(CPU_FTR_CELL_TB_BUG, CPU_FTR_CELL_TB_BUG, 96)
#define MFTBU(dest) mfspr dest, SPRN_TBRU #define MFTBU(dest) mfspr dest, SPRN_TBRU
#endif #endif
/* tlbsync is not implemented on 601 */ #ifndef CONFIG_SMP
#if !defined(CONFIG_SMP) || defined(CONFIG_PPC_BOOK3S_601)
#define TLBSYNC #define TLBSYNC
#else #else
#define TLBSYNC tlbsync; sync #define TLBSYNC tlbsync; sync
......
...@@ -243,11 +243,7 @@ static inline void set_trap_norestart(struct pt_regs *regs) ...@@ -243,11 +243,7 @@ static inline void set_trap_norestart(struct pt_regs *regs)
} }
#define arch_has_single_step() (1) #define arch_has_single_step() (1)
#ifndef CONFIG_PPC_BOOK3S_601
#define arch_has_block_step() (true) #define arch_has_block_step() (true)
#else
#define arch_has_block_step() (false)
#endif
#define ARCH_HAS_USER_SINGLE_STEP_REPORT #define ARCH_HAS_USER_SINGLE_STEP_REPORT
/* /*
......
...@@ -39,7 +39,7 @@ struct div_result { ...@@ -39,7 +39,7 @@ struct div_result {
}; };
/* Accessor functions for the timebase (RTC on 601) registers. */ /* Accessor functions for the timebase (RTC on 601) registers. */
#define __USE_RTC() (IS_ENABLED(CONFIG_PPC_BOOK3S_601)) #define __USE_RTC() (0)
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
......
...@@ -17,9 +17,6 @@ typedef unsigned long cycles_t; ...@@ -17,9 +17,6 @@ typedef unsigned long cycles_t;
static inline cycles_t get_cycles(void) static inline cycles_t get_cycles(void)
{ {
if (IS_ENABLED(CONFIG_PPC_BOOK3S_601))
return 0;
return mftb(); return mftb();
} }
......
...@@ -95,18 +95,12 @@ void __init btext_prepare_BAT(void) ...@@ -95,18 +95,12 @@ void __init btext_prepare_BAT(void)
boot_text_mapped = 0; boot_text_mapped = 0;
return; return;
} }
if (PVR_VER(mfspr(SPRN_PVR)) != 1) { {
/* 603, 604, G3, G4, ... */ /* 603, 604, G3, G4, ... */
lowbits = addr & ~0xFF000000UL; lowbits = addr & ~0xFF000000UL;
addr &= 0xFF000000UL; addr &= 0xFF000000UL;
disp_BAT[0] = vaddr | (BL_16M<<2) | 2; disp_BAT[0] = vaddr | (BL_16M<<2) | 2;
disp_BAT[1] = addr | (_PAGE_NO_CACHE | _PAGE_GUARDED | BPP_RW); disp_BAT[1] = addr | (_PAGE_NO_CACHE | _PAGE_GUARDED | BPP_RW);
} else {
/* 601 */
lowbits = addr & ~0xFF800000UL;
addr &= 0xFF800000UL;
disp_BAT[0] = vaddr | (_PAGE_NO_CACHE | PP_RWXX) | 4;
disp_BAT[1] = addr | BL_8M | 0x40;
} }
logicalDisplayBase = (void *) (vaddr + lowbits); logicalDisplayBase = (void *) (vaddr + lowbits);
} }
......
...@@ -811,19 +811,11 @@ _ASM_NOKPROBE_SYMBOL(fast_exception_return) ...@@ -811,19 +811,11 @@ _ASM_NOKPROBE_SYMBOL(fast_exception_return)
1: lis r3,exc_exit_restart_end@ha 1: lis r3,exc_exit_restart_end@ha
addi r3,r3,exc_exit_restart_end@l addi r3,r3,exc_exit_restart_end@l
cmplw r12,r3 cmplw r12,r3
#ifdef CONFIG_PPC_BOOK3S_601
bge 2b
#else
bge 3f bge 3f
#endif
lis r4,exc_exit_restart@ha lis r4,exc_exit_restart@ha
addi r4,r4,exc_exit_restart@l addi r4,r4,exc_exit_restart@l
cmplw r12,r4 cmplw r12,r4
#ifdef CONFIG_PPC_BOOK3S_601
blt 2b
#else
blt 3f blt 3f
#endif
lis r3,fee_restarts@ha lis r3,fee_restarts@ha
tophys(r3,r3) tophys(r3,r3)
lwz r5,fee_restarts@l(r3) lwz r5,fee_restarts@l(r3)
...@@ -840,7 +832,6 @@ fee_restarts: ...@@ -840,7 +832,6 @@ fee_restarts:
/* aargh, a nonrecoverable interrupt, panic */ /* aargh, a nonrecoverable interrupt, panic */
/* aargh, we don't know which trap this is */ /* aargh, we don't know which trap this is */
/* but the 601 doesn't implement the RI bit, so assume it's OK */
3: 3:
li r10,-1 li r10,-1
stw r10,_TRAP(r11) stw r10,_TRAP(r11)
...@@ -1302,19 +1293,11 @@ nonrecoverable: ...@@ -1302,19 +1293,11 @@ nonrecoverable:
lis r10,exc_exit_restart_end@ha lis r10,exc_exit_restart_end@ha
addi r10,r10,exc_exit_restart_end@l addi r10,r10,exc_exit_restart_end@l
cmplw r12,r10 cmplw r12,r10
#ifdef CONFIG_PPC_BOOK3S_601
bgelr
#else
bge 3f bge 3f
#endif
lis r11,exc_exit_restart@ha lis r11,exc_exit_restart@ha
addi r11,r11,exc_exit_restart@l addi r11,r11,exc_exit_restart@l
cmplw r12,r11 cmplw r12,r11
#ifdef CONFIG_PPC_BOOK3S_601
bltlr
#else
blt 3f blt 3f
#endif
lis r10,ee_restarts@ha lis r10,ee_restarts@ha
lwz r12,ee_restarts@l(r10) lwz r12,ee_restarts@l(r10)
addi r12,r12,1 addi r12,r12,1
...@@ -1322,7 +1305,6 @@ nonrecoverable: ...@@ -1322,7 +1305,6 @@ nonrecoverable:
mr r12,r11 /* restart at exc_exit_restart */ mr r12,r11 /* restart at exc_exit_restart */
blr blr
3: /* OK, we can't recover, kill this process */ 3: /* OK, we can't recover, kill this process */
/* but the 601 doesn't implement the RI bit, so assume it's OK */
lwz r3,_TRAP(r1) lwz r3,_TRAP(r1)
andi. r0,r3,1 andi. r0,r3,1
beq 5f beq 5f
......
...@@ -34,16 +34,6 @@ ...@@ -34,16 +34,6 @@
#include "head_32.h" #include "head_32.h"
/* 601 only have IBAT */
#ifdef CONFIG_PPC_BOOK3S_601
#define LOAD_BAT(n, reg, RA, RB) \
li RA,0; \
mtspr SPRN_IBAT##n##U,RA; \
lwz RA,(n*16)+0(reg); \
lwz RB,(n*16)+4(reg); \
mtspr SPRN_IBAT##n##U,RA; \
mtspr SPRN_IBAT##n##L,RB
#else
#define LOAD_BAT(n, reg, RA, RB) \ #define LOAD_BAT(n, reg, RA, RB) \
/* see the comment for clear_bats() -- Cort */ \ /* see the comment for clear_bats() -- Cort */ \
li RA,0; \ li RA,0; \
...@@ -57,7 +47,6 @@ ...@@ -57,7 +47,6 @@
lwz RB,(n*16)+12(reg); \ lwz RB,(n*16)+12(reg); \
mtspr SPRN_DBAT##n##U,RA; \ mtspr SPRN_DBAT##n##U,RA; \
mtspr SPRN_DBAT##n##L,RB mtspr SPRN_DBAT##n##L,RB
#endif
__HEAD __HEAD
.stabs "arch/powerpc/kernel/",N_SO,0,0,0f .stabs "arch/powerpc/kernel/",N_SO,0,0,0f
...@@ -432,7 +421,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_FPU_UNAVAILABLE) ...@@ -432,7 +421,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_FPU_UNAVAILABLE)
SystemCall: SystemCall:
SYSCALL_ENTRY 0xc00 SYSCALL_ENTRY 0xc00
/* Single step - not used on 601 */
EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD) EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD)
EXCEPTION(0xe00, Trap_0e, unknown_exception, EXC_XFER_STD) EXCEPTION(0xe00, Trap_0e, unknown_exception, EXC_XFER_STD)
...@@ -974,8 +962,7 @@ load_up_mmu: ...@@ -974,8 +962,7 @@ load_up_mmu:
lwz r6,_SDR1@l(r6) lwz r6,_SDR1@l(r6)
mtspr SPRN_SDR1,r6 mtspr SPRN_SDR1,r6
/* Load the BAT registers with the values set up by MMU_init. /* Load the BAT registers with the values set up by MMU_init. */
MMU_init takes care of whether we're on a 601 or not. */
lis r3,BATS@ha lis r3,BATS@ha
addi r3,r3,BATS@l addi r3,r3,BATS@l
tophys(r3,r3) tophys(r3,r3)
...@@ -1152,7 +1139,6 @@ EXPORT_SYMBOL(switch_mmu_context) ...@@ -1152,7 +1139,6 @@ EXPORT_SYMBOL(switch_mmu_context)
clear_bats: clear_bats:
li r10,0 li r10,0
#ifndef CONFIG_PPC_BOOK3S_601
mtspr SPRN_DBAT0U,r10 mtspr SPRN_DBAT0U,r10
mtspr SPRN_DBAT0L,r10 mtspr SPRN_DBAT0L,r10
mtspr SPRN_DBAT1U,r10 mtspr SPRN_DBAT1U,r10
...@@ -1161,7 +1147,6 @@ clear_bats: ...@@ -1161,7 +1147,6 @@ clear_bats:
mtspr SPRN_DBAT2L,r10 mtspr SPRN_DBAT2L,r10
mtspr SPRN_DBAT3U,r10 mtspr SPRN_DBAT3U,r10
mtspr SPRN_DBAT3L,r10 mtspr SPRN_DBAT3L,r10
#endif
mtspr SPRN_IBAT0U,r10 mtspr SPRN_IBAT0U,r10
mtspr SPRN_IBAT0L,r10 mtspr SPRN_IBAT0L,r10
mtspr SPRN_IBAT1U,r10 mtspr SPRN_IBAT1U,r10
...@@ -1252,26 +1237,9 @@ mmu_off: ...@@ -1252,26 +1237,9 @@ mmu_off:
sync sync
RFI RFI
/* /* We use one BAT to map up to 256M of RAM at _PAGE_OFFSET */
* On 601, we use 3 BATs to map up to 24M of RAM at _PAGE_OFFSET
* (we keep one for debugging) and on others, we use one 256M BAT.
*/
initial_bats: initial_bats:
lis r11,PAGE_OFFSET@h lis r11,PAGE_OFFSET@h
#ifdef CONFIG_PPC_BOOK3S_601
ori r11,r11,4 /* set up BAT registers for 601 */
li r8,0x7f /* valid, block length = 8MB */
mtspr SPRN_IBAT0U,r11 /* N.B. 601 has valid bit in */
mtspr SPRN_IBAT0L,r8 /* lower BAT register */
addis r11,r11,0x800000@h
addis r8,r8,0x800000@h
mtspr SPRN_IBAT1U,r11
mtspr SPRN_IBAT1L,r8
addis r11,r11,0x800000@h
addis r8,r8,0x800000@h
mtspr SPRN_IBAT2U,r11
mtspr SPRN_IBAT2L,r8
#else
tophys(r8,r11) tophys(r8,r11)
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
ori r8,r8,0x12 /* R/W access, M=1 */ ori r8,r8,0x12 /* R/W access, M=1 */
...@@ -1280,11 +1248,10 @@ initial_bats: ...@@ -1280,11 +1248,10 @@ initial_bats:
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
ori r11,r11,BL_256M<<2|0x2 /* set up BAT registers for 604 */ ori r11,r11,BL_256M<<2|0x2 /* set up BAT registers for 604 */
mtspr SPRN_DBAT0L,r8 /* N.B. 6xx (not 601) have valid */ mtspr SPRN_DBAT0L,r8 /* N.B. 6xx have valid */
mtspr SPRN_DBAT0U,r11 /* bit in upper BAT register */ mtspr SPRN_DBAT0U,r11 /* bit in upper BAT register */
mtspr SPRN_IBAT0L,r8 mtspr SPRN_IBAT0L,r8
mtspr SPRN_IBAT0U,r11 mtspr SPRN_IBAT0U,r11
#endif
isync isync
blr blr
...@@ -1302,13 +1269,8 @@ setup_disp_bat: ...@@ -1302,13 +1269,8 @@ setup_disp_bat:
beqlr beqlr
lwz r11,0(r8) lwz r11,0(r8)
lwz r8,4(r8) lwz r8,4(r8)
#ifndef CONFIG_PPC_BOOK3S_601
mtspr SPRN_DBAT3L,r8 mtspr SPRN_DBAT3L,r8
mtspr SPRN_DBAT3U,r11 mtspr SPRN_DBAT3U,r11
#else
mtspr SPRN_IBAT3L,r8
mtspr SPRN_IBAT3U,r11
#endif
blr blr
#endif /* CONFIG_BOOTX_TEXT */ #endif /* CONFIG_BOOTX_TEXT */
......
...@@ -223,6 +223,6 @@ __init void initialize_cache_info(void) ...@@ -223,6 +223,6 @@ __init void initialize_cache_info(void)
dcache_bsize = cur_cpu_spec->dcache_bsize; dcache_bsize = cur_cpu_spec->dcache_bsize;
icache_bsize = cur_cpu_spec->icache_bsize; icache_bsize = cur_cpu_spec->icache_bsize;
ucache_bsize = 0; ucache_bsize = 0;
if (IS_ENABLED(CONFIG_PPC_BOOK3S_601) || IS_ENABLED(CONFIG_E200)) if (IS_ENABLED(CONFIG_E200))
ucache_bsize = icache_bsize = dcache_bsize; ucache_bsize = icache_bsize = dcache_bsize;
} }
...@@ -529,9 +529,6 @@ void system_reset_exception(struct pt_regs *regs) ...@@ -529,9 +529,6 @@ void system_reset_exception(struct pt_regs *regs)
* Check if the NIP corresponds to the address of a sync * Check if the NIP corresponds to the address of a sync
* instruction for which there is an entry in the exception * instruction for which there is an entry in the exception
* table. * table.
* Note that the 601 only takes a machine check on TEA
* (transfer error ack) signal assertion, and does not
* set any of the top 16 bits of SRR1.
* -- paulus. * -- paulus.
*/ */
static inline int check_io_access(struct pt_regs *regs) static inline int check_io_access(struct pt_regs *regs)
...@@ -796,7 +793,6 @@ int machine_check_generic(struct pt_regs *regs) ...@@ -796,7 +793,6 @@ int machine_check_generic(struct pt_regs *regs)
case 0x80000: case 0x80000:
pr_cont("Machine check signal\n"); pr_cont("Machine check signal\n");
break; break;
case 0: /* for 601 */
case 0x40000: case 0x40000:
case 0x140000: /* 7450 MSS error and TEA */ case 0x140000: /* 7450 MSS error and TEA */
pr_cont("Transfer error ack signal\n"); pr_cont("Transfer error ack signal\n");
......
...@@ -47,7 +47,6 @@ V_FUNCTION_END(__kernel_get_syscall_map) ...@@ -47,7 +47,6 @@ V_FUNCTION_END(__kernel_get_syscall_map)
* *
* returns the timebase frequency in HZ * returns the timebase frequency in HZ
*/ */
#ifndef CONFIG_PPC_BOOK3S_601
V_FUNCTION_BEGIN(__kernel_get_tbfreq) V_FUNCTION_BEGIN(__kernel_get_tbfreq)
.cfi_startproc .cfi_startproc
mflr r12 mflr r12
...@@ -60,4 +59,3 @@ V_FUNCTION_BEGIN(__kernel_get_tbfreq) ...@@ -60,4 +59,3 @@ V_FUNCTION_BEGIN(__kernel_get_tbfreq)
blr blr
.cfi_endproc .cfi_endproc
V_FUNCTION_END(__kernel_get_tbfreq) V_FUNCTION_END(__kernel_get_tbfreq)
#endif
...@@ -144,13 +144,11 @@ VERSION ...@@ -144,13 +144,11 @@ VERSION
__kernel_datapage_offset; __kernel_datapage_offset;
__kernel_get_syscall_map; __kernel_get_syscall_map;
#ifndef CONFIG_PPC_BOOK3S_601
__kernel_gettimeofday; __kernel_gettimeofday;
__kernel_clock_gettime; __kernel_clock_gettime;
__kernel_clock_getres; __kernel_clock_getres;
__kernel_time; __kernel_time;
__kernel_get_tbfreq; __kernel_get_tbfreq;
#endif
__kernel_sync_dicache; __kernel_sync_dicache;
__kernel_sync_dicache_p5; __kernel_sync_dicache_p5;
__kernel_sigtramp32; __kernel_sigtramp32;
......
...@@ -74,14 +74,7 @@ static int find_free_bat(void) ...@@ -74,14 +74,7 @@ static int find_free_bat(void)
{ {
int b; int b;
if (IS_ENABLED(CONFIG_PPC_BOOK3S_601)) { {
for (b = 0; b < 4; b++) {
struct ppc_bat *bat = BATS[b];
if (!(bat[0].batl & 0x40))
return b;
}
} else {
int n = mmu_has_feature(MMU_FTR_USE_HIGH_BATS) ? 8 : 4; int n = mmu_has_feature(MMU_FTR_USE_HIGH_BATS) ? 8 : 4;
for (b = 0; b < n; b++) { for (b = 0; b < n; b++) {
...@@ -97,7 +90,7 @@ static int find_free_bat(void) ...@@ -97,7 +90,7 @@ static int find_free_bat(void)
/* /*
* This function calculates the size of the larger block usable to map the * This function calculates the size of the larger block usable to map the
* beginning of an area based on the start address and size of that area: * beginning of an area based on the start address and size of that area:
* - max block size is 8M on 601 and 256 on other 6xx. * - max block size is 256 on 6xx.
* - base address must be aligned to the block size. So the maximum block size * - base address must be aligned to the block size. So the maximum block size
* is identified by the lowest bit set to 1 in the base address (for instance * is identified by the lowest bit set to 1 in the base address (for instance
* if base is 0x16000000, max size is 0x02000000). * if base is 0x16000000, max size is 0x02000000).
...@@ -106,7 +99,7 @@ static int find_free_bat(void) ...@@ -106,7 +99,7 @@ static int find_free_bat(void)
*/ */
static unsigned int block_size(unsigned long base, unsigned long top) static unsigned int block_size(unsigned long base, unsigned long top)
{ {
unsigned int max_size = IS_ENABLED(CONFIG_PPC_BOOK3S_601) ? SZ_8M : SZ_256M; unsigned int max_size = SZ_256M;
unsigned int base_shift = (ffs(base) - 1) & 31; unsigned int base_shift = (ffs(base) - 1) & 31;
unsigned int block_shift = (fls(top - base) - 1) & 31; unsigned int block_shift = (fls(top - base) - 1) & 31;
...@@ -117,7 +110,6 @@ static unsigned int block_size(unsigned long base, unsigned long top) ...@@ -117,7 +110,6 @@ static unsigned int block_size(unsigned long base, unsigned long top)
* Set up one of the IBAT (block address translation) register pairs. * Set up one of the IBAT (block address translation) register pairs.
* The parameters are not checked; in particular size must be a power * The parameters are not checked; in particular size must be a power
* of 2 between 128k and 256M. * of 2 between 128k and 256M.
* Only for 603+ ...
*/ */
static void setibat(int index, unsigned long virt, phys_addr_t phys, static void setibat(int index, unsigned long virt, phys_addr_t phys,
unsigned int size, pgprot_t prot) unsigned int size, pgprot_t prot)
...@@ -214,9 +206,6 @@ void mmu_mark_initmem_nx(void) ...@@ -214,9 +206,6 @@ void mmu_mark_initmem_nx(void)
unsigned long border = (unsigned long)__init_begin - PAGE_OFFSET; unsigned long border = (unsigned long)__init_begin - PAGE_OFFSET;
unsigned long size; unsigned long size;
if (IS_ENABLED(CONFIG_PPC_BOOK3S_601))
return;
for (i = 0; i < nb - 1 && base < top && top - base > (128 << 10);) { for (i = 0; i < nb - 1 && base < top && top - base > (128 << 10);) {
size = block_size(base, top); size = block_size(base, top);
setibat(i++, PAGE_OFFSET + base, base, size, PAGE_KERNEL_TEXT); setibat(i++, PAGE_OFFSET + base, base, size, PAGE_KERNEL_TEXT);
...@@ -253,9 +242,6 @@ void mmu_mark_rodata_ro(void) ...@@ -253,9 +242,6 @@ void mmu_mark_rodata_ro(void)
int nb = mmu_has_feature(MMU_FTR_USE_HIGH_BATS) ? 8 : 4; int nb = mmu_has_feature(MMU_FTR_USE_HIGH_BATS) ? 8 : 4;
int i; int i;
if (IS_ENABLED(CONFIG_PPC_BOOK3S_601))
return;
for (i = 0; i < nb; i++) { for (i = 0; i < nb; i++) {
struct ppc_bat *bat = BATS[i]; struct ppc_bat *bat = BATS[i];
...@@ -294,8 +280,7 @@ void __init setbat(int index, unsigned long virt, phys_addr_t phys, ...@@ -294,8 +280,7 @@ void __init setbat(int index, unsigned long virt, phys_addr_t phys,
flags &= ~_PAGE_COHERENT; flags &= ~_PAGE_COHERENT;
bl = (size >> 17) - 1; bl = (size >> 17) - 1;
if (!IS_ENABLED(CONFIG_PPC_BOOK3S_601)) { {
/* 603, 604, etc. */
/* Do DBAT first */ /* Do DBAT first */
wimgxpp = flags & (_PAGE_WRITETHRU | _PAGE_NO_CACHE wimgxpp = flags & (_PAGE_WRITETHRU | _PAGE_NO_CACHE
| _PAGE_COHERENT | _PAGE_GUARDED); | _PAGE_COHERENT | _PAGE_GUARDED);
...@@ -312,16 +297,6 @@ void __init setbat(int index, unsigned long virt, phys_addr_t phys, ...@@ -312,16 +297,6 @@ void __init setbat(int index, unsigned long virt, phys_addr_t phys,
bat[0] = bat[1]; bat[0] = bat[1];
else else
bat[0].batu = bat[0].batl = 0; bat[0].batu = bat[0].batl = 0;
} else {
/* 601 cpu */
if (bl > BL_8M)
bl = BL_8M;
wimgxpp = flags & (_PAGE_WRITETHRU | _PAGE_NO_CACHE
| _PAGE_COHERENT);
wimgxpp |= (flags & _PAGE_RW)?
((flags & _PAGE_USER)? PP_RWRW: PP_RWXX): PP_RXRX;
bat->batu = virt | wimgxpp | 4; /* Ks=0, Ku=1 */
bat->batl = phys | bl | 0x40; /* V=1 */
} }
bat_addrs[index].start = virt; bat_addrs[index].start = virt;
...@@ -474,11 +449,7 @@ void setup_initial_memory_limit(phys_addr_t first_memblock_base, ...@@ -474,11 +449,7 @@ void setup_initial_memory_limit(phys_addr_t first_memblock_base,
*/ */
BUG_ON(first_memblock_base != 0); BUG_ON(first_memblock_base != 0);
/* 601 can only access 16MB at the moment */ memblock_set_current_limit(min_t(u64, first_memblock_size, SZ_256M));
if (IS_ENABLED(CONFIG_PPC_BOOK3S_601))
memblock_set_current_limit(min_t(u64, first_memblock_size, 0x01000000));
else /* Anything else has 256M mapped */
memblock_set_current_limit(min_t(u64, first_memblock_size, 0x10000000));
} }
void __init print_system_hash_info(void) void __init print_system_hash_info(void)
......
...@@ -12,62 +12,6 @@ ...@@ -12,62 +12,6 @@
#include "ptdump.h" #include "ptdump.h"
static char *pp_601(int k, int pp)
{
if (pp == 0)
return k ? " " : "rwx";
if (pp == 1)
return k ? "r x" : "rwx";
if (pp == 2)
return "rwx";
return "r x";
}
static void bat_show_601(struct seq_file *m, int idx, u32 lower, u32 upper)
{
u32 blpi = upper & 0xfffe0000;
u32 k = (upper >> 2) & 3;
u32 pp = upper & 3;
phys_addr_t pbn = PHYS_BAT_ADDR(lower);
u32 bsm = lower & 0x3ff;
u32 size = (bsm + 1) << 17;
seq_printf(m, "%d: ", idx);
if (!(lower & 0x40)) {
seq_puts(m, " -\n");
return;
}
seq_printf(m, "0x%08x-0x%08x ", blpi, blpi + size - 1);
#ifdef CONFIG_PHYS_64BIT
seq_printf(m, "0x%016llx ", pbn);
#else
seq_printf(m, "0x%08x ", pbn);
#endif
pt_dump_size(m, size);
seq_printf(m, "Kernel %s User %s", pp_601(k & 2, pp), pp_601(k & 1, pp));
seq_puts(m, lower & _PAGE_WRITETHRU ? "w " : " ");
seq_puts(m, lower & _PAGE_NO_CACHE ? "i " : " ");
seq_puts(m, lower & _PAGE_COHERENT ? "m " : " ");
seq_puts(m, "\n");
}
#define BAT_SHOW_601(_m, _n, _l, _u) bat_show_601(_m, _n, mfspr(_l), mfspr(_u))
static int bats_show_601(struct seq_file *m, void *v)
{
seq_puts(m, "---[ Block Address Translation ]---\n");
BAT_SHOW_601(m, 0, SPRN_IBAT0L, SPRN_IBAT0U);
BAT_SHOW_601(m, 1, SPRN_IBAT1L, SPRN_IBAT1U);
BAT_SHOW_601(m, 2, SPRN_IBAT2L, SPRN_IBAT2U);
BAT_SHOW_601(m, 3, SPRN_IBAT3L, SPRN_IBAT3U);
return 0;
}
static void bat_show_603(struct seq_file *m, int idx, u32 lower, u32 upper, bool is_d) static void bat_show_603(struct seq_file *m, int idx, u32 lower, u32 upper, bool is_d)
{ {
u32 bepi = upper & 0xfffe0000; u32 bepi = upper & 0xfffe0000;
...@@ -146,9 +90,6 @@ static int bats_show_603(struct seq_file *m, void *v) ...@@ -146,9 +90,6 @@ static int bats_show_603(struct seq_file *m, void *v)
static int bats_open(struct inode *inode, struct file *file) static int bats_open(struct inode *inode, struct file *file)
{ {
if (IS_ENABLED(CONFIG_PPC_BOOK3S_601))
return single_open(file, bats_show_601, NULL);
return single_open(file, bats_show_603, NULL); return single_open(file, bats_show_603, NULL);
} }
......
...@@ -284,7 +284,7 @@ static void __init pmac_setup_arch(void) ...@@ -284,7 +284,7 @@ static void __init pmac_setup_arch(void)
/* 604, G3, G4 etc. */ /* 604, G3, G4 etc. */
loops_per_jiffy = *fp / HZ; loops_per_jiffy = *fp / HZ;
else else
/* 601, 603, etc. */ /* 603, etc. */
loops_per_jiffy = *fp / (2 * HZ); loops_per_jiffy = *fp / (2 * HZ);
of_node_put(cpu); of_node_put(cpu);
break; break;
......
...@@ -270,10 +270,6 @@ static void __init smp_psurge_probe(void) ...@@ -270,10 +270,6 @@ static void __init smp_psurge_probe(void)
int i, ncpus; int i, ncpus;
struct device_node *dn; struct device_node *dn;
/* We don't do SMP on the PPC601 -- paulus */
if (PVR_VER(mfspr(SPRN_PVR)) == 1)
return;
/* /*
* The powersurge cpu board can be used in the generation * The powersurge cpu board can be used in the generation
* of powermacs that have a socket for an upgradeable cpu card, * of powermacs that have a socket for an upgradeable cpu card,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment