]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - include/ppc_asm.tmpl
Move setting CONFIG_BOOTP_VCI_STRING to before including the vexpress-common header
[karo-tx-uboot.git] / include / ppc_asm.tmpl
index 9f4029f2afca88d35c074f15c37d914b2328a020..ba166ebdd4d62a16ae38234bba269a6e45019b9e 100644 (file)
@@ -2,23 +2,7 @@
  * (C) Copyright 2000-2002
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /*
@@ -28,6 +12,8 @@
 #ifndef        __PPC_ASM_TMPL__
 #define __PPC_ASM_TMPL__
 
+#include <config.h>
+
 /***************************************************************************
  *
  * These definitions simplify the ugly declarations necessary for GOT
@@ -35,7 +21,7 @@
  *
  * Stolen from prepboot/bootldr.h, (C) 1998 Gabriel Paubert, paubert@iram.es
  *
- * Uses r14 to access the GOT
+ * Uses r12 to access the GOT
  */
 
 #define START_GOT                      \
        .text   2               ;       \
 0:     .long   .LCTOC1-1f      ;       \
        .text                   ;       \
-1:     mflr    r14             ;       \
-       lwz     r0,0b-1b(r14)   ;       \
-       add     r14,r0,r14      ;
+1:     mflr    r12             ;       \
+       lwz     r0,0b-1b(r12)   ;       \
+       add     r12,r0,r12      ;
 
 #define GOT_ENTRY(NAME)                .L_ ## NAME = . - .LCTOC1 ; .long NAME
 
-#define GOT(NAME)              .L_ ## NAME (r14)
+#define GOT(NAME)              .L_ ## NAME (r12)
 
 
 /***************************************************************************
@@ -96,7 +82,7 @@
 #define        r31     31
 
 
-#if defined(CONFIG_8xx) || defined(CONFIG_MPC824X)
+#if defined(CONFIG_8xx)
 
 /* Some special registers */
 
 #define LCTRL2 157     /* Load/Store Support       (37-41) */
 #define ICTRL  158
 
-#endif /* CONFIG_8xx, CONFIG_MPC824X */
+#endif /* CONFIG_8xx */
 
 
 #if  defined(CONFIG_5xx)
 
 #define PLPRCR 0x00000284
 
-#elif defined(CONFIG_8260)
+#elif defined(CONFIG_MPC8260)
 
 #define HID2           1011
 
 #define IM_IMMR                (IM_REGBASE+0x01a8)
 #define IM_SCCR                (IM_REGBASE+0x0c80)
 
-#elif defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC8220)
+#elif defined(CONFIG_MPC5xxx)
 
 #define HID0_ICE_BITPOS        16
 #define HID0_DCE_BITPOS        17
        stw     r22,_CTR(r21);  \
        mfspr   r20,XER;        \
        stw     r20,_XER(r21);  \
-       mfspr   r20,DEAR;       \
+       mfspr   r20, DAR_DEAR;  \
        stw     r20,_DAR(r21);  \
        mfspr   r22,reg1;       \
        mfspr   r23,reg2;       \
  * OFFSET values only; they must be relocated first before they can
  * be used!
  */
-#define STD_EXCEPTION(n, label, hdlr)                  \
-       . = n;                                          \
-label:                                                 \
-       EXCEPTION_PROLOG(SRR0, SRR1);                   \
-       lwz     r3,GOT(transfer_to_handler);            \
-       mtlr    r3;                                     \
-       addi    r3,r1,STACK_FRAME_OVERHEAD;             \
-       li      r20,MSR_KERNEL;                         \
+#define COPY_EE(d, s)          rlwimi d,s,0,16,16
+#define NOCOPY(d, s)
+
+#ifdef CONFIG_E500
+#define EXC_XFER_TEMPLATE(n, label, hdlr, msr, copyee) \
+       stw     r22,_NIP(r21);                          \
+       stw     r23,_MSR(r21);                          \
+       li      r23,n;                                  \
+       stw     r23,TRAP(r21);                          \
+       li      r20,msr;                                \
+       copyee(r20,r23);                                \
+       rlwimi  r20,r23,0,25,25;                        \
+       mtmsr   r20;                                    \
+       bl      1f;                                     \
+1:     mflr    r23;                                    \
+       addis   r23,r23,(hdlr - 1b)@ha;                 \
+       addi    r23,r23,(hdlr - 1b)@l;                  \
+       b       transfer_to_handler
+
+#define STD_EXCEPTION(n, label, hdlr)                          \
+label:                                                         \
+       EXCEPTION_PROLOG(SRR0, SRR1);                           \
+       addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
+       EXC_XFER_TEMPLATE(n, label, hdlr, MSR_KERNEL, NOCOPY)   \
+
+#define CRIT_EXCEPTION(n, label, hdlr)                         \
+label:                                                         \
+       EXCEPTION_PROLOG(CSRR0, CSRR1);                         \
+       addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
+       EXC_XFER_TEMPLATE(n, label, hdlr,                       \
+       MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE), NOCOPY)           \
+
+#define MCK_EXCEPTION(n, label, hdlr)                          \
+label:                                                         \
+       EXCEPTION_PROLOG(MCSRR0, MCSRR1);                       \
+       addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
+       EXC_XFER_TEMPLATE(n, label, hdlr,                       \
+       MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE), NOCOPY)           \
+
+#else  /* !E500 */
+
+#define EXC_XFER_TEMPLATE(label, hdlr, msr, copyee)    \
+       bl      1f;                                     \
+1:     mflr    r20;                                    \
+       lwz     r20,(.L_ ## label)-1b+8(r20);           \
+       mtlr    r20;                                    \
+       li      r20,msr;                                \
+       copyee(r20,r23);                                \
        rlwimi  r20,r23,0,25,25;                        \
        blrl;                                           \
 .L_ ## label :                                         \
        .long   hdlr - _start + _START_OFFSET;          \
-       .long   int_return - _start + _START_OFFSET
+       .long   int_return - _start + _START_OFFSET;    \
+       .long   transfer_to_handler - _start + _START_OFFSET
+
+#define STD_EXCEPTION(n, label, hdlr)                          \
+       . = n;                                                  \
+label:                                                         \
+       EXCEPTION_PROLOG(SRR0, SRR1);                           \
+       addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
+       EXC_XFER_TEMPLATE(label, hdlr, MSR_KERNEL, NOCOPY)      \
 
 #define CRIT_EXCEPTION(n, label, hdlr)                         \
        . = n;                                                  \
 label:                                                         \
        EXCEPTION_PROLOG(CSRR0, CSRR1);                         \
-       lwz     r3,GOT(transfer_to_handler);                    \
-       mtlr    r3;                                             \
        addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
-       li      r20,(MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE));     \
-       rlwimi  r20,r23,0,25,25;                                \
-       blrl;                                                   \
-.L_ ## label :                                                 \
-       .long   hdlr - _start + _START_OFFSET;                  \
-       .long   crit_return - _start + _START_OFFSET
-
-#ifdef CONFIG_440
+       EXC_XFER_TEMPLATE(label, hdlr,                          \
+       MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE), NOCOPY)           \
+
 #define MCK_EXCEPTION(n, label, hdlr)                          \
        . = n;                                                  \
 label:                                                         \
        EXCEPTION_PROLOG(MCSRR0, MCSRR1);                       \
-       lwz     r3,GOT(transfer_to_handler);                    \
-       mtlr    r3;                                             \
        addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
-       li      r20,(MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE));     \
-       rlwimi  r20,r23,0,25,25;                                \
-       blrl;                                                   \
-.L_ ## label :                                                 \
-       .long   hdlr - _start + _START_OFFSET;                  \
-       .long   mck_return - _start + _START_OFFSET
-#endif /* CONFIG_440  */
+       EXC_XFER_TEMPLATE(label, hdlr,                          \
+       MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE), NOCOPY)           \
 
+#endif /* !E500 */
 #endif /* __PPC_ASM_TMPL__ */