root/arch/c6x/kernel/head.S

/* [<][>][^][v][top][bottom][index][help] */
   1 ; SPDX-License-Identifier: GPL-2.0-only
   2 ;
   3 ;  Port on Texas Instruments TMS320C6x architecture
   4 ;
   5 ;  Copyright (C) 2004, 2009, 2010, 2011 Texas Instruments Incorporated
   6 ;  Author: Aurelien Jacquiot (aurelien.jacquiot@jaluna.com)
   7 ;
   8 #include <linux/linkage.h>
   9 #include <linux/of_fdt.h>
  10 #include <asm/asm-offsets.h>
  11 
  12         __HEAD
  13 ENTRY(_c_int00)
  14         ;; Save magic and pointer
  15         MV      .S1     A4,A10
  16         MV      .S2     B4,B10
  17         MVKL    .S2     __bss_start,B5
  18         MVKH    .S2     __bss_start,B5
  19         MVKL    .S2     __bss_stop,B6
  20         MVKH    .S2     __bss_stop,B6
  21         SUB     .L2     B6,B5,B6 ; bss size
  22 
  23         ;; Set the stack pointer
  24         MVKL    .S2     current_ksp,B0
  25         MVKH    .S2     current_ksp,B0
  26         LDW     .D2T2   *B0,B15
  27 
  28         ;; clear bss
  29         SHR     .S2     B6,3,B0   ; number of dwords to clear
  30         ZERO    .L2     B13
  31         ZERO    .L2     B12
  32 bss_loop:
  33         BDEC    .S2     bss_loop,B0
  34         NOP     3
  35         CMPLT   .L2     B0,0,B1
  36  [!B1]  STDW    .D2T2   B13:B12,*B5++[1]
  37 
  38         NOP     4
  39         AND     .D2     ~7,B15,B15
  40 
  41         ;; Clear GIE and PGIE
  42         MVC     .S2     CSR,B2
  43         CLR     .S2     B2,0,1,B2
  44         MVC     .S2     B2,CSR
  45         MVC     .S2     TSR,B2
  46         CLR     .S2     B2,0,1,B2
  47         MVC     .S2     B2,TSR
  48         MVC     .S2     ITSR,B2
  49         CLR     .S2     B2,0,1,B2
  50         MVC     .S2     B2,ITSR
  51         MVC     .S2     NTSR,B2
  52         CLR     .S2     B2,0,1,B2
  53         MVC     .S2     B2,NTSR
  54 
  55         ;; pass DTB pointer to machine_init (or zero if none)
  56         MVKL    .S1     OF_DT_HEADER,A0
  57         MVKH    .S1     OF_DT_HEADER,A0
  58         CMPEQ   .L1     A10,A0,A0
  59   [A0]  MV      .S1X    B10,A4
  60   [!A0] MVK     .S1     0,A4
  61 
  62 #ifdef CONFIG_C6X_BIG_KERNEL
  63         MVKL    .S1     machine_init,A0
  64         MVKH    .S1     machine_init,A0
  65         B       .S2X    A0
  66         ADDKPC  .S2     0f,B3,4
  67 0:
  68 #else
  69         CALLP   .S2     machine_init,B3
  70 #endif
  71 
  72         ;; Jump to Linux init
  73 #ifdef CONFIG_C6X_BIG_KERNEL
  74         MVKL    .S1     start_kernel,A0
  75         MVKH    .S1     start_kernel,A0
  76         B       .S2X    A0
  77 #else
  78         B       .S2     start_kernel
  79 #endif
  80         NOP     5
  81 L1:     BNOP    .S2     L1,5

/* [<][>][^][v][top][bottom][index][help] */