Blame view

kernel/linux-imx6_3.14.28/firmware/dsp56k/bootstrap.asm 2.86 KB
6b13f685e   김민수   BSP 최초 추가
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
  ; Author: Frederik Noring <noring@nocrew.org>
  ;
  ; This file is subject to the terms and conditions of the GNU General Public
  ; License.  See the file COPYING in the main directory of this archive
  ; for more details.
  
  ; DSP56k loader
  
  ; Host Interface
  M_BCR   EQU     $FFFE           ; Port A Bus Control Register
  M_PBC   EQU     $FFE0           ; Port B Control Register
  M_PBDDR EQU     $FFE2           ; Port B Data Direction Register
  M_PBD   EQU     $FFE4           ; Port B Data Register
  M_PCC   EQU     $FFE1           ; Port C Control Register
  M_PCDDR EQU     $FFE3           ; Port C Data Direction Register
  M_PCD   EQU     $FFE5           ; Port C Data Register
  
  M_HCR   EQU     $FFE8           ; Host Control Register
  M_HSR   EQU     $FFE9           ; Host Status Register
  M_HRX   EQU     $FFEB           ; Host Receive Data Register
  M_HTX   EQU     $FFEB           ; Host Transmit Data Register
  
  ; SSI, Synchronous Serial Interface
  M_RX    EQU     $FFEF           ; Serial Receive Data Register
  M_TX    EQU     $FFEF           ; Serial Transmit Data Register
  M_CRA   EQU     $FFEC           ; SSI Control Register A
  M_CRB   EQU     $FFED           ; SSI Control Register B
  M_SR    EQU     $FFEE           ; SSI Status Register
  M_TSR   EQU     $FFEE           ; SSI Time Slot Register
  
  ; Exception Processing
  M_IPR   EQU     $FFFF           ; Interrupt Priority Register
  
          org     P:$0
  start   jmp     <$40
  
          org     P:$40
  ;       ; Zero 16384 DSP X and Y words
  ;       clr     A #0,r0
  ;       clr     B #0,r4
  ;       do      #64,<_block1
  ;       rep     #256
  ;       move    A,X:(r0)+ B,Y:(r4)+
  ;_block1        ; Zero (32768-512) Program words
  ;       clr     A #512,r0
  ;       do      #126,<_block2
  ;       rep     #256
  ;       move    A,P:(r0)+
  ;_block2
  
          ; Copy DSP program control
          move    #real,r0
          move    #upload,r1
          do      #upload_end-upload,_copy
          movem    P:(r0)+,x0
          movem    x0,P:(r1)+
  _copy   movep   #4,X:<<M_HCR
          movep   #$c00,X:<<M_IPR
          and     #<$fe,mr
          jmp     upload
  
  real
          org     P:$7ea9
  upload
          movep   #1,X:<<M_PBC
          movep   #0,X:<<M_BCR
  
  next    jclr    #0,X:<<M_HSR,*
          movep   X:<<M_HRX,A
          move    #>3,x0
          cmp     x0,A #>1,x0
          jeq     <$0
  _get_address
          jclr    #0,X:<<M_HSR,_get_address
          movep   X:<<M_HRX,r0
  _get_length
          jclr    #0,X:<<M_HSR,_get_length
          movep   X:<<M_HRX,y0
          cmp     x0,A #>2,x0
          jeq     load_X
          cmp     x0,A
          jeq     load_Y
  
  load_P  do      y0,_load_P
          jclr    #0,X:<<M_HSR,*
          movep   X:<<M_HRX,P:(r0)+
  _load_P jmp     next
  load_X  do      y0,_load_X
          jclr    #0,X:<<M_HSR,*
          movep   X:<<M_HRX,X:(r0)+
  _load_X jmp     next
  load_Y  do      y0,_load_Y
          jclr    #0,X:<<M_HSR,*
          movep   X:<<M_HRX,Y:(r0)+
  _load_Y jmp     next
  
  upload_end
          end