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