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