mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
powerpc: Remove core support for 40x
Now that 40x platforms have gone, remove support for 40x in the core of powerpc arch. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://msgid.link/20240628121201.130802-4-mpe@ellerman.id.au
This commit is contained in:
committed by
Michael Ellerman
parent
e939da89d0
commit
732b32daef
@@ -353,7 +353,6 @@ static inline void cpu_feature_keys_init(void) { }
|
||||
CPU_FTR_COMMON | CPU_FTR_FPU_UNAVAILABLE | CPU_FTR_NOEXECUTE)
|
||||
#define CPU_FTRS_CLASSIC32 (CPU_FTR_COMMON)
|
||||
#define CPU_FTRS_8XX (CPU_FTR_NOEXECUTE)
|
||||
#define CPU_FTRS_40X (CPU_FTR_NOEXECUTE)
|
||||
#define CPU_FTRS_44X (CPU_FTR_NOEXECUTE)
|
||||
#define CPU_FTRS_440x6 (CPU_FTR_NOEXECUTE | \
|
||||
CPU_FTR_INDEXED_DCR)
|
||||
@@ -507,9 +506,6 @@ enum {
|
||||
#ifdef CONFIG_PPC_8xx
|
||||
CPU_FTRS_8XX |
|
||||
#endif
|
||||
#ifdef CONFIG_40x
|
||||
CPU_FTRS_40X |
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_47x
|
||||
CPU_FTRS_47X | CPU_FTR_476_DD2 |
|
||||
#elif defined(CONFIG_44x)
|
||||
@@ -582,9 +578,6 @@ enum {
|
||||
#ifdef CONFIG_PPC_8xx
|
||||
CPU_FTRS_8XX &
|
||||
#endif
|
||||
#ifdef CONFIG_40x
|
||||
CPU_FTRS_40X &
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_47x
|
||||
CPU_FTRS_47X &
|
||||
#elif defined(CONFIG_44x)
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
*/
|
||||
#define MMU_FTR_HPTE_TABLE ASM_CONST(0x00000001)
|
||||
#define MMU_FTR_TYPE_8xx ASM_CONST(0x00000002)
|
||||
#define MMU_FTR_TYPE_40x ASM_CONST(0x00000004)
|
||||
#define MMU_FTR_TYPE_44x ASM_CONST(0x00000008)
|
||||
#define MMU_FTR_TYPE_FSL_E ASM_CONST(0x00000010)
|
||||
#define MMU_FTR_TYPE_47x ASM_CONST(0x00000020)
|
||||
@@ -153,9 +152,6 @@ enum {
|
||||
#ifdef CONFIG_PPC_8xx
|
||||
MMU_FTR_TYPE_8xx |
|
||||
#endif
|
||||
#ifdef CONFIG_40x
|
||||
MMU_FTR_TYPE_40x |
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_47x
|
||||
MMU_FTR_TYPE_47x | MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL |
|
||||
#elif defined(CONFIG_44x)
|
||||
@@ -202,9 +198,6 @@ enum {
|
||||
#ifdef CONFIG_PPC_8xx
|
||||
#define MMU_FTRS_ALWAYS MMU_FTR_TYPE_8xx
|
||||
#endif
|
||||
#ifdef CONFIG_40x
|
||||
#define MMU_FTRS_ALWAYS MMU_FTR_TYPE_40x
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_47x
|
||||
#define MMU_FTRS_ALWAYS MMU_FTR_TYPE_47x
|
||||
#elif defined(CONFIG_44x)
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _ASM_POWERPC_MMU_40X_H_
|
||||
#define _ASM_POWERPC_MMU_40X_H_
|
||||
|
||||
/*
|
||||
* PPC40x support
|
||||
*/
|
||||
|
||||
#define PPC40X_TLB_SIZE 64
|
||||
|
||||
/*
|
||||
* TLB entries are defined by a "high" tag portion and a "low" data
|
||||
* portion. On all architectures, the data portion is 32-bits.
|
||||
*
|
||||
* TLB entries are managed entirely under software control by reading,
|
||||
* writing, and searchoing using the 4xx-specific tlbre, tlbwr, and tlbsx
|
||||
* instructions.
|
||||
*/
|
||||
|
||||
#define TLB_LO 1
|
||||
#define TLB_HI 0
|
||||
|
||||
#define TLB_DATA TLB_LO
|
||||
#define TLB_TAG TLB_HI
|
||||
|
||||
/* Tag portion */
|
||||
|
||||
#define TLB_EPN_MASK 0xFFFFFC00 /* Effective Page Number */
|
||||
#define TLB_PAGESZ_MASK 0x00000380
|
||||
#define TLB_PAGESZ(x) (((x) & 0x7) << 7)
|
||||
#define PAGESZ_1K 0
|
||||
#define PAGESZ_4K 1
|
||||
#define PAGESZ_16K 2
|
||||
#define PAGESZ_64K 3
|
||||
#define PAGESZ_256K 4
|
||||
#define PAGESZ_1M 5
|
||||
#define PAGESZ_4M 6
|
||||
#define PAGESZ_16M 7
|
||||
#define TLB_VALID 0x00000040 /* Entry is valid */
|
||||
|
||||
/* Data portion */
|
||||
|
||||
#define TLB_RPN_MASK 0xFFFFFC00 /* Real Page Number */
|
||||
#define TLB_PERM_MASK 0x00000300
|
||||
#define TLB_EX 0x00000200 /* Instruction execution allowed */
|
||||
#define TLB_WR 0x00000100 /* Writes permitted */
|
||||
#define TLB_ZSEL_MASK 0x000000F0
|
||||
#define TLB_ZSEL(x) (((x) & 0xF) << 4)
|
||||
#define TLB_ATTR_MASK 0x0000000F
|
||||
#define TLB_W 0x00000008 /* Caching is write-through */
|
||||
#define TLB_I 0x00000004 /* Caching is inhibited */
|
||||
#define TLB_M 0x00000002 /* Memory is coherent */
|
||||
#define TLB_G 0x00000001 /* Memory is guarded from prefetch */
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
typedef struct {
|
||||
unsigned int id;
|
||||
unsigned int active;
|
||||
void __user *vdso;
|
||||
} mm_context_t;
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#define mmu_virtual_psize MMU_PAGE_4K
|
||||
#define mmu_linear_psize MMU_PAGE_256M
|
||||
|
||||
#endif /* _ASM_POWERPC_MMU_40X_H_ */
|
||||
@@ -118,9 +118,7 @@
|
||||
* (hardware-defined) PowerPC PTE as closely as possible.
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_40x)
|
||||
#include <asm/nohash/32/pte-40x.h>
|
||||
#elif defined(CONFIG_44x)
|
||||
#if defined(CONFIG_44x)
|
||||
#include <asm/nohash/32/pte-44x.h>
|
||||
#elif defined(CONFIG_PPC_85xx) && defined(CONFIG_PTE_64BIT)
|
||||
#include <asm/nohash/pte-e500.h>
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _ASM_POWERPC_NOHASH_32_PTE_40x_H
|
||||
#define _ASM_POWERPC_NOHASH_32_PTE_40x_H
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/*
|
||||
* At present, all PowerPC 400-class processors share a similar TLB
|
||||
* architecture. The instruction and data sides share a unified,
|
||||
* 64-entry, fully-associative TLB which is maintained totally under
|
||||
* software control. In addition, the instruction side has a
|
||||
* hardware-managed, 4-entry, fully-associative TLB which serves as a
|
||||
* first level to the shared TLB. These two TLBs are known as the UTLB
|
||||
* and ITLB, respectively (see "mmu.h" for definitions).
|
||||
*
|
||||
* There are several potential gotchas here. The 40x hardware TLBLO
|
||||
* field looks like this:
|
||||
*
|
||||
* 0 1 2 3 4 ... 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
||||
* RPN..................... 0 0 EX WR ZSEL....... W I M G
|
||||
*
|
||||
* Where possible we make the Linux PTE bits match up with this
|
||||
*
|
||||
* - bits 20 and 21 must be cleared, because we use 4k pages (40x can
|
||||
* support down to 1k pages), this is done in the TLBMiss exception
|
||||
* handler.
|
||||
* - We use only zones 0 (for kernel pages) and 1 (for user pages)
|
||||
* of the 16 available. Bit 24-26 of the TLB are cleared in the TLB
|
||||
* miss handler. Bit 27 is PAGE_USER, thus selecting the correct
|
||||
* zone.
|
||||
* - PRESENT *must* be in the bottom two bits because swap PTEs
|
||||
* use the top 30 bits. Because 40x doesn't support SMP anyway, M is
|
||||
* irrelevant so we borrow it for PAGE_PRESENT. Bit 30
|
||||
* is cleared in the TLB miss handler before the TLB entry is loaded.
|
||||
* - All other bits of the PTE are loaded into TLBLO without
|
||||
* modification, leaving us only the bits 20, 21, 24, 25, 26, 30 for
|
||||
* software PTE bits. We actually use bits 21, 24, 25, and
|
||||
* 30 respectively for the software bits: ACCESSED, DIRTY, RW, and
|
||||
* PRESENT.
|
||||
*/
|
||||
|
||||
#define _PAGE_GUARDED 0x001 /* G: page is guarded from prefetch */
|
||||
#define _PAGE_PRESENT 0x002 /* software: PTE contains a translation */
|
||||
#define _PAGE_NO_CACHE 0x004 /* I: caching is inhibited */
|
||||
#define _PAGE_WRITETHRU 0x008 /* W: caching is write-through */
|
||||
#define _PAGE_READ 0x010 /* software: read permission */
|
||||
#define _PAGE_SPECIAL 0x020 /* software: Special page */
|
||||
#define _PAGE_DIRTY 0x080 /* software: dirty page */
|
||||
#define _PAGE_WRITE 0x100 /* hardware: WR, anded with dirty in exception */
|
||||
#define _PAGE_EXEC 0x200 /* hardware: EX permission */
|
||||
#define _PAGE_ACCESSED 0x400 /* software: R: page referenced */
|
||||
|
||||
/* No page size encoding in the linux PTE */
|
||||
#define _PAGE_PSIZE 0
|
||||
|
||||
/* cache related flags non existing on 40x */
|
||||
#define _PAGE_COHERENT 0
|
||||
|
||||
#define _PMD_PRESENT 0x400 /* PMD points to page of PTEs */
|
||||
#define _PMD_PRESENT_MASK _PMD_PRESENT
|
||||
#define _PMD_BAD 0x802
|
||||
#define _PMD_SIZE_4M 0x0c0
|
||||
#define _PMD_SIZE_16M 0x0e0
|
||||
#define _PMD_USER 0
|
||||
|
||||
#define _PTE_NONE_MASK 0
|
||||
|
||||
#define _PAGE_BASE_NC (_PAGE_PRESENT | _PAGE_ACCESSED)
|
||||
#define _PAGE_BASE (_PAGE_BASE_NC)
|
||||
|
||||
#include <asm/pgtable-masks.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_POWERPC_NOHASH_32_PTE_40x_H */
|
||||
@@ -2,10 +2,7 @@
|
||||
#ifndef _ASM_POWERPC_NOHASH_MMU_H_
|
||||
#define _ASM_POWERPC_NOHASH_MMU_H_
|
||||
|
||||
#if defined(CONFIG_40x)
|
||||
/* 40x-style software loaded TLB */
|
||||
#include <asm/nohash/32/mmu-40x.h>
|
||||
#elif defined(CONFIG_44x)
|
||||
#if defined(CONFIG_44x)
|
||||
/* 44x-style software loaded TLB */
|
||||
#include <asm/nohash/32/mmu-44x.h>
|
||||
#elif defined(CONFIG_PPC_E500)
|
||||
|
||||
@@ -233,14 +233,10 @@
|
||||
|
||||
/* Special Purpose Registers (SPRNs)*/
|
||||
|
||||
#ifdef CONFIG_40x
|
||||
#define SPRN_PID 0x3B1 /* Process ID */
|
||||
#else
|
||||
#define SPRN_PID 0x030 /* Process ID */
|
||||
#ifdef CONFIG_BOOKE
|
||||
#define SPRN_PID0 SPRN_PID/* Process ID Register 0 */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define SPRN_CTR 0x009 /* Count Register */
|
||||
#define SPRN_DSCR 0x11
|
||||
@@ -527,7 +523,7 @@
|
||||
#define SPRN_TSCR 0x399 /* Thread Switch Control Register */
|
||||
|
||||
#define SPRN_DEC 0x016 /* Decrement Register */
|
||||
#define SPRN_PIT 0x3DB /* Programmable Interval Timer (40x/BOOKE) */
|
||||
#define SPRN_PIT 0x3DB /* Programmable Interval Timer (BOOKE) */
|
||||
|
||||
#define SPRN_DER 0x095 /* Debug Enable Register */
|
||||
#define DER_RSTE 0x40000000 /* Reset Interrupt */
|
||||
@@ -1116,15 +1112,6 @@
|
||||
* - SPRG2 indicator that we are in RTAS
|
||||
* - SPRG4 (603 only) pseudo TLB LRU data
|
||||
*
|
||||
* 32-bit 40x:
|
||||
* - SPRG0 scratch for exception vectors
|
||||
* - SPRG1 scratch for exception vectors
|
||||
* - SPRG2 scratch for exception vectors
|
||||
* - SPRG4 scratch for exception vectors (not 403)
|
||||
* - SPRG5 scratch for exception vectors (not 403)
|
||||
* - SPRG6 scratch for exception vectors (not 403)
|
||||
* - SPRG7 scratch for exception vectors (not 403)
|
||||
*
|
||||
* 32-bit 440 and FSL BookE:
|
||||
* - SPRG0 scratch for exception vectors
|
||||
* - SPRG1 scratch for exception vectors (*)
|
||||
@@ -1216,16 +1203,6 @@
|
||||
#define SPRN_SPRG_603_LRU SPRN_SPRG4
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_40x
|
||||
#define SPRN_SPRG_SCRATCH0 SPRN_SPRG0
|
||||
#define SPRN_SPRG_SCRATCH1 SPRN_SPRG1
|
||||
#define SPRN_SPRG_SCRATCH2 SPRN_SPRG2
|
||||
#define SPRN_SPRG_SCRATCH3 SPRN_SPRG4
|
||||
#define SPRN_SPRG_SCRATCH4 SPRN_SPRG5
|
||||
#define SPRN_SPRG_SCRATCH5 SPRN_SPRG6
|
||||
#define SPRN_SPRG_SCRATCH6 SPRN_SPRG7
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BOOKE
|
||||
#define SPRN_SPRG_RSCRATCH0 SPRN_SPRG0
|
||||
#define SPRN_SPRG_WSCRATCH0 SPRN_SPRG0
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Contains register definitions common to the Book E PowerPC
|
||||
* specification. Notice that while the IBM-40x series of CPUs
|
||||
* are not true Book E PowerPCs, they borrowed a number of features
|
||||
* before Book E was finalized, and are included here as well. Unfortunately,
|
||||
* they sometimes used different locations than true Book E CPUs did.
|
||||
* specification.
|
||||
*
|
||||
* Copyright 2009-2010 Freescale Semiconductor, Inc.
|
||||
*/
|
||||
@@ -42,9 +39,6 @@
|
||||
#define MSR_KERNEL (MSR_ | MSR_64BIT)
|
||||
#define MSR_USER32 (MSR_ | MSR_PR | MSR_EE)
|
||||
#define MSR_USER64 (MSR_USER32 | MSR_64BIT)
|
||||
#elif defined (CONFIG_40x)
|
||||
#define MSR_KERNEL (MSR_ME|MSR_RI|MSR_IR|MSR_DR|MSR_CE)
|
||||
#define MSR_USER (MSR_KERNEL|MSR_PR|MSR_EE)
|
||||
#else
|
||||
#define MSR_KERNEL (MSR_ME|MSR_RI|MSR_CE)
|
||||
#define MSR_USER (MSR_KERNEL|MSR_PR|MSR_EE)
|
||||
@@ -157,7 +151,6 @@
|
||||
#define SPRN_TLB3CFG 0x2B3 /* TLB 3 Config Register */
|
||||
#define SPRN_EPR 0x2BE /* External Proxy Register */
|
||||
#define SPRN_CCR1 0x378 /* Core Configuration Register 1 */
|
||||
#define SPRN_ZPR 0x3B0 /* Zone Protection Register (40x) */
|
||||
#define SPRN_MAS7 0x3B0 /* MMU Assist Register 7 */
|
||||
#define SPRN_MMUCR 0x3B2 /* MMU Control Register */
|
||||
#define SPRN_CCR0 0x3B3 /* Core Configuration Register 0 */
|
||||
@@ -166,7 +159,6 @@
|
||||
#define SPRN_SGR 0x3B9 /* Storage Guarded Register */
|
||||
#define SPRN_DCWR 0x3BA /* Data Cache Write-thru Register */
|
||||
#define SPRN_SLER 0x3BB /* Little-endian real mode */
|
||||
#define SPRN_SU0R 0x3BC /* "User 0" real mode (40x) */
|
||||
#define SPRN_DCMP 0x3D1 /* Data TLB Compare Register */
|
||||
#define SPRN_ICDBDR 0x3D3 /* Instruction Cache Debug Data Register */
|
||||
#define SPRN_EVPR 0x3D6 /* Exception Vector Prefix Register */
|
||||
@@ -183,10 +175,8 @@
|
||||
#define SPRN_SVR 0x3FF /* System Version Register */
|
||||
|
||||
/*
|
||||
* SPRs which have conflicting definitions on true Book E versus classic,
|
||||
* or IBM 40x.
|
||||
* SPRs which have conflicting definitions on true Book E versus classic.
|
||||
*/
|
||||
#ifdef CONFIG_BOOKE
|
||||
#define SPRN_CSRR0 0x03A /* Critical Save and Restore Register 0 */
|
||||
#define SPRN_CSRR1 0x03B /* Critical Save and Restore Register 1 */
|
||||
#define SPRN_DEAR 0x03D /* Data Error Address Register */
|
||||
@@ -201,22 +191,6 @@
|
||||
#define SPRN_DAC2 0x13D /* Data Address Compare 2 */
|
||||
#define SPRN_TSR 0x150 /* Timer Status Register */
|
||||
#define SPRN_TCR 0x154 /* Timer Control Register */
|
||||
#endif /* Book E */
|
||||
#ifdef CONFIG_40x
|
||||
#define SPRN_DBCR1 0x3BD /* Debug Control Register 1 */
|
||||
#define SPRN_ESR 0x3D4 /* Exception Syndrome Register */
|
||||
#define SPRN_DEAR 0x3D5 /* Data Error Address Register */
|
||||
#define SPRN_TSR 0x3D8 /* Timer Status Register */
|
||||
#define SPRN_TCR 0x3DA /* Timer Control Register */
|
||||
#define SPRN_SRR2 0x3DE /* Save/Restore Register 2 */
|
||||
#define SPRN_SRR3 0x3DF /* Save/Restore Register 3 */
|
||||
#define SPRN_DBSR 0x3F0 /* Debug Status Register */
|
||||
#define SPRN_DBCR0 0x3F2 /* Debug Control Register 0 */
|
||||
#define SPRN_DAC1 0x3F6 /* Data Address Compare 1 */
|
||||
#define SPRN_DAC2 0x3F7 /* Data Address Compare 2 */
|
||||
#define SPRN_CSRR0 SPRN_SRR2 /* Critical Save and Restore Register 0 */
|
||||
#define SPRN_CSRR1 SPRN_SRR3 /* Critical Save and Restore Register 1 */
|
||||
#endif
|
||||
#define SPRN_HACOP 0x15F /* Hypervisor Available Coprocessor Register */
|
||||
|
||||
/* Bit definitions for CCR1. */
|
||||
@@ -296,10 +270,6 @@
|
||||
#endif
|
||||
|
||||
/* Bit definitions for the DBSR. */
|
||||
/*
|
||||
* DBSR bits which have conflicting definitions on true Book E versus IBM 40x.
|
||||
*/
|
||||
#ifdef CONFIG_BOOKE
|
||||
#define DBSR_IDE 0x80000000 /* Imprecise Debug Event */
|
||||
#define DBSR_MRR 0x30000000 /* Most Recent Reset */
|
||||
#define DBSR_IC 0x08000000 /* Instruction Completion */
|
||||
@@ -319,21 +289,6 @@
|
||||
#define DBSR_CRET 0x00000020 /* Critical Return Debug Event */
|
||||
#define DBSR_IAC12ATS 0x00000002 /* Instr Address Compare 1/2 Toggle */
|
||||
#define DBSR_IAC34ATS 0x00000001 /* Instr Address Compare 3/4 Toggle */
|
||||
#endif
|
||||
#ifdef CONFIG_40x
|
||||
#define DBSR_IC 0x80000000 /* Instruction Completion */
|
||||
#define DBSR_BT 0x40000000 /* Branch taken */
|
||||
#define DBSR_IRPT 0x20000000 /* Exception Debug Event */
|
||||
#define DBSR_TIE 0x10000000 /* Trap Instruction debug Event */
|
||||
#define DBSR_IAC1 0x04000000 /* Instruction Address Compare 1 Event */
|
||||
#define DBSR_IAC2 0x02000000 /* Instruction Address Compare 2 Event */
|
||||
#define DBSR_IAC3 0x00080000 /* Instruction Address Compare 3 Event */
|
||||
#define DBSR_IAC4 0x00040000 /* Instruction Address Compare 4 Event */
|
||||
#define DBSR_DAC1R 0x01000000 /* Data Address Compare 1 Read Event */
|
||||
#define DBSR_DAC1W 0x00800000 /* Data Address Compare 1 Write Event */
|
||||
#define DBSR_DAC2R 0x00400000 /* Data Address Compare 2 Read Event */
|
||||
#define DBSR_DAC2W 0x00200000 /* Data Address Compare 2 Write Event */
|
||||
#endif
|
||||
|
||||
/* Bit definitions related to the ESR. */
|
||||
#define ESR_MCI 0x80000000 /* Machine Check - Instruction */
|
||||
@@ -355,69 +310,6 @@
|
||||
#define ESR_SPV 0x00000080 /* Signal Processing operation */
|
||||
|
||||
/* Bit definitions related to the DBCR0. */
|
||||
#if defined(CONFIG_40x)
|
||||
#define DBCR0_EDM 0x80000000 /* External Debug Mode */
|
||||
#define DBCR0_IDM 0x40000000 /* Internal Debug Mode */
|
||||
#define DBCR0_RST 0x30000000 /* all the bits in the RST field */
|
||||
#define DBCR0_RST_SYSTEM 0x30000000 /* System Reset */
|
||||
#define DBCR0_RST_CHIP 0x20000000 /* Chip Reset */
|
||||
#define DBCR0_RST_CORE 0x10000000 /* Core Reset */
|
||||
#define DBCR0_RST_NONE 0x00000000 /* No Reset */
|
||||
#define DBCR0_IC 0x08000000 /* Instruction Completion */
|
||||
#define DBCR0_ICMP DBCR0_IC
|
||||
#define DBCR0_BT 0x04000000 /* Branch Taken */
|
||||
#define DBCR0_BRT DBCR0_BT
|
||||
#define DBCR0_EDE 0x02000000 /* Exception Debug Event */
|
||||
#define DBCR0_IRPT DBCR0_EDE
|
||||
#define DBCR0_TDE 0x01000000 /* TRAP Debug Event */
|
||||
#define DBCR0_IA1 0x00800000 /* Instr Addr compare 1 enable */
|
||||
#define DBCR0_IAC1 DBCR0_IA1
|
||||
#define DBCR0_IA2 0x00400000 /* Instr Addr compare 2 enable */
|
||||
#define DBCR0_IAC2 DBCR0_IA2
|
||||
#define DBCR0_IA12 0x00200000 /* Instr Addr 1-2 range enable */
|
||||
#define DBCR0_IA12X 0x00100000 /* Instr Addr 1-2 range eXclusive */
|
||||
#define DBCR0_IA3 0x00080000 /* Instr Addr compare 3 enable */
|
||||
#define DBCR0_IAC3 DBCR0_IA3
|
||||
#define DBCR0_IA4 0x00040000 /* Instr Addr compare 4 enable */
|
||||
#define DBCR0_IAC4 DBCR0_IA4
|
||||
#define DBCR0_IA34 0x00020000 /* Instr Addr 3-4 range Enable */
|
||||
#define DBCR0_IA34X 0x00010000 /* Instr Addr 3-4 range eXclusive */
|
||||
#define DBCR0_IA12T 0x00008000 /* Instr Addr 1-2 range Toggle */
|
||||
#define DBCR0_IA34T 0x00004000 /* Instr Addr 3-4 range Toggle */
|
||||
#define DBCR0_FT 0x00000001 /* Freeze Timers on debug event */
|
||||
|
||||
#define dbcr_iac_range(task) ((task)->thread.debug.dbcr0)
|
||||
#define DBCR_IAC12I DBCR0_IA12 /* Range Inclusive */
|
||||
#define DBCR_IAC12X (DBCR0_IA12 | DBCR0_IA12X) /* Range Exclusive */
|
||||
#define DBCR_IAC12MODE (DBCR0_IA12 | DBCR0_IA12X) /* IAC 1-2 Mode Bits */
|
||||
#define DBCR_IAC34I DBCR0_IA34 /* Range Inclusive */
|
||||
#define DBCR_IAC34X (DBCR0_IA34 | DBCR0_IA34X) /* Range Exclusive */
|
||||
#define DBCR_IAC34MODE (DBCR0_IA34 | DBCR0_IA34X) /* IAC 3-4 Mode Bits */
|
||||
|
||||
/* Bit definitions related to the DBCR1. */
|
||||
#define DBCR1_DAC1R 0x80000000 /* DAC1 Read Debug Event */
|
||||
#define DBCR1_DAC2R 0x40000000 /* DAC2 Read Debug Event */
|
||||
#define DBCR1_DAC1W 0x20000000 /* DAC1 Write Debug Event */
|
||||
#define DBCR1_DAC2W 0x10000000 /* DAC2 Write Debug Event */
|
||||
|
||||
#define dbcr_dac(task) ((task)->thread.debug.dbcr1)
|
||||
#define DBCR_DAC1R DBCR1_DAC1R
|
||||
#define DBCR_DAC1W DBCR1_DAC1W
|
||||
#define DBCR_DAC2R DBCR1_DAC2R
|
||||
#define DBCR_DAC2W DBCR1_DAC2W
|
||||
|
||||
/*
|
||||
* Are there any active Debug Events represented in the
|
||||
* Debug Control Registers?
|
||||
*/
|
||||
#define DBCR0_ACTIVE_EVENTS (DBCR0_ICMP | DBCR0_IAC1 | DBCR0_IAC2 | \
|
||||
DBCR0_IAC3 | DBCR0_IAC4)
|
||||
#define DBCR1_ACTIVE_EVENTS (DBCR1_DAC1R | DBCR1_DAC2R | \
|
||||
DBCR1_DAC1W | DBCR1_DAC2W)
|
||||
#define DBCR_ACTIVE_EVENTS(dbcr0, dbcr1) (((dbcr0) & DBCR0_ACTIVE_EVENTS) || \
|
||||
((dbcr1) & DBCR1_ACTIVE_EVENTS))
|
||||
|
||||
#elif defined(CONFIG_BOOKE)
|
||||
#define DBCR0_EDM 0x80000000 /* External Debug Mode */
|
||||
#define DBCR0_IDM 0x40000000 /* Internal Debug Mode */
|
||||
#define DBCR0_RST 0x30000000 /* all the bits in the RST field */
|
||||
@@ -518,7 +410,6 @@
|
||||
|
||||
#define DBCR_ACTIVE_EVENTS(dbcr0, dbcr1) (((dbcr0) & DBCR0_ACTIVE_EVENTS) || \
|
||||
((dbcr1) & DBCR1_ACTIVE_EVENTS))
|
||||
#endif /* #elif defined(CONFIG_BOOKE) */
|
||||
|
||||
/* Bit definitions related to the TCR. */
|
||||
#define TCR_WP(x) (((x)&0x3)<<30) /* WDT Period */
|
||||
|
||||
@@ -58,9 +58,6 @@ static inline u64 get_vtb(void)
|
||||
*/
|
||||
static inline u64 get_dec(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_40x))
|
||||
return mfspr(SPRN_PIT);
|
||||
|
||||
return mfspr(SPRN_DEC);
|
||||
}
|
||||
|
||||
@@ -71,9 +68,7 @@ static inline u64 get_dec(void)
|
||||
*/
|
||||
static inline void set_dec(u64 val)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_40x))
|
||||
mtspr(SPRN_PIT, (u32)val);
|
||||
else if (IS_ENABLED(CONFIG_BOOKE))
|
||||
if (IS_ENABLED(CONFIG_BOOKE))
|
||||
mtspr(SPRN_DEC, val);
|
||||
else
|
||||
mtspr(SPRN_DEC, val - 1);
|
||||
|
||||
@@ -44,7 +44,6 @@ void __init udbg_init_rtas_panel(void);
|
||||
void __init udbg_init_rtas_console(void);
|
||||
void __init udbg_init_btext(void);
|
||||
void __init udbg_init_44x_as1(void);
|
||||
void __init udbg_init_40x_realmode(void);
|
||||
void __init udbg_init_cpm(void);
|
||||
void __init udbg_init_usbgecko(void);
|
||||
void __init udbg_init_memcons(void);
|
||||
|
||||
@@ -123,7 +123,6 @@ obj-$(CONFIG_JUMP_LABEL) += jump_label.o
|
||||
|
||||
obj-$(CONFIG_PPC64) += head_64.o
|
||||
obj-$(CONFIG_PPC_BOOK3S_32) += head_book3s_32.o
|
||||
obj-$(CONFIG_40x) += head_40x.o
|
||||
obj-$(CONFIG_44x) += head_44x.o
|
||||
obj-$(CONFIG_PPC_8xx) += head_8xx.o
|
||||
obj-$(CONFIG_PPC_85xx) += head_85xx.o
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#ifdef CONFIG_40x
|
||||
#include "cpu_specs_40x.h"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC_47x
|
||||
#include "cpu_specs_47x.h"
|
||||
#elif defined(CONFIG_44x)
|
||||
|
||||
@@ -1,280 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
|
||||
*/
|
||||
|
||||
static struct cpu_spec cpu_specs[] __initdata = {
|
||||
{ /* STB 04xxx */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x41810000,
|
||||
.cpu_name = "STB04xxx",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* NP405L */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x41610000,
|
||||
.cpu_name = "NP405L",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* NP4GS3 */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x40B10000,
|
||||
.cpu_name = "NP4GS3",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* NP405H */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x41410000,
|
||||
.cpu_name = "NP405H",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405GPr */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x50910000,
|
||||
.cpu_name = "405GPr",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* STBx25xx */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x51510000,
|
||||
.cpu_name = "STBx25xx",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405LP */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x41F10000,
|
||||
.cpu_name = "405LP",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405EP */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x51210000,
|
||||
.cpu_name = "405EP",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405EX Rev. A/B with Security */
|
||||
.pvr_mask = 0xffff000f,
|
||||
.pvr_value = 0x12910007,
|
||||
.cpu_name = "405EX Rev. A/B",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405EX Rev. C without Security */
|
||||
.pvr_mask = 0xffff000f,
|
||||
.pvr_value = 0x1291000d,
|
||||
.cpu_name = "405EX Rev. C",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405EX Rev. C with Security */
|
||||
.pvr_mask = 0xffff000f,
|
||||
.pvr_value = 0x1291000f,
|
||||
.cpu_name = "405EX Rev. C",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405EX Rev. D without Security */
|
||||
.pvr_mask = 0xffff000f,
|
||||
.pvr_value = 0x12910003,
|
||||
.cpu_name = "405EX Rev. D",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405EX Rev. D with Security */
|
||||
.pvr_mask = 0xffff000f,
|
||||
.pvr_value = 0x12910005,
|
||||
.cpu_name = "405EX Rev. D",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405EXr Rev. A/B without Security */
|
||||
.pvr_mask = 0xffff000f,
|
||||
.pvr_value = 0x12910001,
|
||||
.cpu_name = "405EXr Rev. A/B",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405EXr Rev. C without Security */
|
||||
.pvr_mask = 0xffff000f,
|
||||
.pvr_value = 0x12910009,
|
||||
.cpu_name = "405EXr Rev. C",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405EXr Rev. C with Security */
|
||||
.pvr_mask = 0xffff000f,
|
||||
.pvr_value = 0x1291000b,
|
||||
.cpu_name = "405EXr Rev. C",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405EXr Rev. D without Security */
|
||||
.pvr_mask = 0xffff000f,
|
||||
.pvr_value = 0x12910000,
|
||||
.cpu_name = "405EXr Rev. D",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* 405EXr Rev. D with Security */
|
||||
.pvr_mask = 0xffff000f,
|
||||
.pvr_value = 0x12910002,
|
||||
.cpu_name = "405EXr Rev. D",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{
|
||||
/* 405EZ */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x41510000,
|
||||
.cpu_name = "405EZ",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* APM8018X */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x7ff11432,
|
||||
.cpu_name = "APM8018X",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
},
|
||||
{ /* default match */
|
||||
.pvr_mask = 0x00000000,
|
||||
.pvr_value = 0x00000000,
|
||||
.cpu_name = "(generic 40x PPC)",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU |
|
||||
PPC_FEATURE_HAS_4xxMAC,
|
||||
.mmu_features = MMU_FTR_TYPE_40x,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
.machine_check = machine_check_4xx,
|
||||
.platform = "ppc405",
|
||||
}
|
||||
};
|
||||
@@ -158,9 +158,6 @@ syscall_exit_finish:
|
||||
1: REST_GPR(2, r1)
|
||||
REST_GPR(1, r1)
|
||||
rfi
|
||||
#ifdef CONFIG_40x
|
||||
b . /* Prevent prefetch past rfi */
|
||||
#endif
|
||||
|
||||
3: mtcr r5
|
||||
lwz r4,_CTR(r1)
|
||||
@@ -237,9 +234,6 @@ fast_exception_return:
|
||||
REST_GPR(12, r11)
|
||||
REST_GPR(11, r11)
|
||||
rfi
|
||||
#ifdef CONFIG_40x
|
||||
b . /* Prevent prefetch past rfi */
|
||||
#endif
|
||||
_ASM_NOKPROBE_SYMBOL(fast_exception_return)
|
||||
|
||||
/* aargh, a nonrecoverable interrupt, panic */
|
||||
@@ -296,9 +290,6 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS)
|
||||
REST_GPR(0, r1)
|
||||
REST_GPR(1, r1)
|
||||
rfi
|
||||
#ifdef CONFIG_40x
|
||||
b . /* Prevent prefetch past rfi */
|
||||
#endif
|
||||
|
||||
.Lrestore_nvgprs:
|
||||
REST_NVGPRS(r1)
|
||||
@@ -346,9 +337,6 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS)
|
||||
REST_GPR(0, r1)
|
||||
REST_GPR(1, r1)
|
||||
rfi
|
||||
#ifdef CONFIG_40x
|
||||
b . /* Prevent prefetch past rfi */
|
||||
#endif
|
||||
|
||||
1: /*
|
||||
* Emulate stack store with update. New r1 value was already calculated
|
||||
@@ -375,9 +363,6 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS)
|
||||
mfspr r9, SPRN_SPRG_SCRATCH0
|
||||
#endif
|
||||
rfi
|
||||
#ifdef CONFIG_40x
|
||||
b . /* Prevent prefetch past rfi */
|
||||
#endif
|
||||
_ASM_NOKPROBE_SYMBOL(interrupt_return)
|
||||
|
||||
#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
|
||||
@@ -395,17 +380,6 @@ _ASM_NOKPROBE_SYMBOL(interrupt_return)
|
||||
* time of the critical interrupt.
|
||||
*
|
||||
*/
|
||||
#ifdef CONFIG_40x
|
||||
#define PPC_40x_TURN_OFF_MSR_DR \
|
||||
/* avoid any possible TLB misses here by turning off MSR.DR, we \
|
||||
* assume the instructions here are mapped by a pinned TLB entry */ \
|
||||
li r10,MSR_IR; \
|
||||
mtmsr r10; \
|
||||
isync; \
|
||||
tophys(r1, r1);
|
||||
#else
|
||||
#define PPC_40x_TURN_OFF_MSR_DR
|
||||
#endif
|
||||
|
||||
#define RET_FROM_EXC_LEVEL(exc_lvl_srr0, exc_lvl_srr1, exc_lvl_rfi) \
|
||||
REST_NVGPRS(r1); \
|
||||
@@ -423,7 +397,6 @@ _ASM_NOKPROBE_SYMBOL(interrupt_return)
|
||||
mtlr r11; \
|
||||
lwz r10,_CCR(r1); \
|
||||
mtcrf 0xff,r10; \
|
||||
PPC_40x_TURN_OFF_MSR_DR; \
|
||||
lwz r9,_DEAR(r1); \
|
||||
lwz r10,_ESR(r1); \
|
||||
mtspr SPRN_DEAR,r9; \
|
||||
@@ -471,19 +444,6 @@ _ASM_NOKPROBE_SYMBOL(interrupt_return)
|
||||
#define RESTORE_MMU_REGS
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_40x
|
||||
.globl ret_from_crit_exc
|
||||
ret_from_crit_exc:
|
||||
lis r9,crit_srr0@ha;
|
||||
lwz r9,crit_srr0@l(r9);
|
||||
lis r10,crit_srr1@ha;
|
||||
lwz r10,crit_srr1@l(r10);
|
||||
mtspr SPRN_SRR0,r9;
|
||||
mtspr SPRN_SRR1,r10;
|
||||
RET_FROM_EXC_LEVEL(SPRN_CSRR0, SPRN_CSRR1, PPC_RFCI)
|
||||
_ASM_NOKPROBE_SYMBOL(ret_from_crit_exc)
|
||||
#endif /* CONFIG_40x */
|
||||
|
||||
#ifdef CONFIG_BOOKE
|
||||
.globl ret_from_crit_exc
|
||||
ret_from_crit_exc:
|
||||
|
||||
@@ -21,17 +21,9 @@
|
||||
mtspr SPRN_SPRG_SCRATCH1,r11
|
||||
mfspr r10, SPRN_SPRG_THREAD
|
||||
.if \handle_dar_dsisr
|
||||
#ifdef CONFIG_40x
|
||||
mfspr r11, SPRN_DEAR
|
||||
#else
|
||||
mfspr r11, SPRN_DAR
|
||||
#endif
|
||||
stw r11, DAR(r10)
|
||||
#ifdef CONFIG_40x
|
||||
mfspr r11, SPRN_ESR
|
||||
#else
|
||||
mfspr r11, SPRN_DSISR
|
||||
#endif
|
||||
stw r11, DSISR(r10)
|
||||
.endif
|
||||
mfspr r11, SPRN_SRR0
|
||||
@@ -96,9 +88,7 @@
|
||||
.endif
|
||||
lwz r9, SRR1(r12)
|
||||
lwz r12, SRR0(r12)
|
||||
#ifdef CONFIG_40x
|
||||
rlwinm r9,r9,0,14,12 /* clear MSR_WE (necessary?) */
|
||||
#elif defined(CONFIG_PPC_8xx)
|
||||
#ifdef CONFIG_PPC_8xx
|
||||
mtspr SPRN_EID, r2 /* Set MSR_RI */
|
||||
#else
|
||||
li r10, MSR_KERNEL /* can take exceptions */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -145,10 +145,9 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
|
||||
b transfer_to_syscall /* jump to handler */
|
||||
.endm
|
||||
|
||||
/* To handle the additional exception priority levels on 40x and Book-E
|
||||
/* To handle the additional exception priority levels on Book-E
|
||||
* processors we allocate a stack per additional priority level.
|
||||
*
|
||||
* On 40x critical is the only additional level
|
||||
* On 44x/e500 we have critical and machine check
|
||||
*
|
||||
* Additionally we reserve a SPRG for each priority level so we can free up a
|
||||
|
||||
@@ -176,46 +176,6 @@ _GLOBAL(low_choose_7447a_dfs)
|
||||
|
||||
#endif /* CONFIG_CPU_FREQ_PMAC && CONFIG_PPC_BOOK3S_32 */
|
||||
|
||||
#ifdef CONFIG_40x
|
||||
|
||||
/*
|
||||
* Do an IO access in real mode
|
||||
*/
|
||||
_GLOBAL(real_readb)
|
||||
mfmsr r7
|
||||
rlwinm r0,r7,0,~MSR_DR
|
||||
sync
|
||||
mtmsr r0
|
||||
sync
|
||||
isync
|
||||
lbz r3,0(r3)
|
||||
sync
|
||||
mtmsr r7
|
||||
sync
|
||||
isync
|
||||
blr
|
||||
_ASM_NOKPROBE_SYMBOL(real_readb)
|
||||
|
||||
/*
|
||||
* Do an IO access in real mode
|
||||
*/
|
||||
_GLOBAL(real_writeb)
|
||||
mfmsr r7
|
||||
rlwinm r0,r7,0,~MSR_DR
|
||||
sync
|
||||
mtmsr r0
|
||||
sync
|
||||
isync
|
||||
stb r3,0(r4)
|
||||
sync
|
||||
mtmsr r7
|
||||
sync
|
||||
isync
|
||||
blr
|
||||
_ASM_NOKPROBE_SYMBOL(real_writeb)
|
||||
|
||||
#endif /* CONFIG_40x */
|
||||
|
||||
/*
|
||||
* Copy a whole page. We use the dcbz instruction on the destination
|
||||
* to reduce memory traffic (it eliminates the unnecessary reads of
|
||||
|
||||
@@ -2244,7 +2244,7 @@ void __noreturn unrecoverable_exception(struct pt_regs *regs)
|
||||
;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_BOOKE_WDT) || defined(CONFIG_40x)
|
||||
#ifdef CONFIG_BOOKE_WDT
|
||||
DEFINE_INTERRUPT_HANDLER_NMI(WatchdogException)
|
||||
{
|
||||
printk (KERN_EMERG "PowerPC Book-E Watchdog Exception\n");
|
||||
|
||||
@@ -49,9 +49,6 @@ void __init udbg_early_init(void)
|
||||
#elif defined(CONFIG_PPC_EARLY_DEBUG_44x)
|
||||
/* PPC44x debug */
|
||||
udbg_init_44x_as1();
|
||||
#elif defined(CONFIG_PPC_EARLY_DEBUG_40x)
|
||||
/* PPC40x debug */
|
||||
udbg_init_40x_realmode();
|
||||
#elif defined(CONFIG_PPC_EARLY_DEBUG_CPM)
|
||||
udbg_init_cpm();
|
||||
#elif defined(CONFIG_PPC_EARLY_DEBUG_USBGECKO)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user