1/*  *********************************************************************
2    *  BCM12500 Board Support Package
3    *
4    *  CPU1 test routines			File: CPU1TEST.S
5    *
6    *  This file gives CPU1 something to do.
7    *
8    *  Author:  Mitch Lichtenberg
9    *
10    *********************************************************************
11    *
12    *  Copyright 2000,2001,2002,2003
13    *  Broadcom Corporation. All rights reserved.
14    *
15    *  This software is furnished under license and may be used and
16    *  copied only in accordance with the following terms and
17    *  conditions.  Subject to these conditions, you may download,
18    *  copy, install, use, modify and distribute modified or unmodified
19    *  copies of this software in source and/or binary form.  No title
20    *  or ownership is transferred hereby.
21    *
22    *  1) Any source code used, modified or distributed must reproduce
23    *     and retain this copyright notice and list of conditions
24    *     as they appear in the source file.
25    *
26    *  2) No right is granted to use any trade name, trademark, or
27    *     logo of Broadcom Corporation.  The "Broadcom Corporation"
28    *     name may not be used to endorse or promote products derived
29    *     from this software without the prior written permission of
30    *     Broadcom Corporation.
31    *
32    *  3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR
33    *     IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED
34    *     WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
35    *     PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT
36    *     SHALL BROADCOM BE LIABLE FOR ANY DAMAGES WHATSOEVER, AND IN
37    *     PARTICULAR, BROADCOM SHALL NOT BE LIABLE FOR DIRECT, INDIRECT,
38    *     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
39    *     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
40    *     GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
41    *     BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
42    *     OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
43    *     TORT (INCLUDING NEGLIGENCE OR OTHERWISE), EVEN IF ADVISED OF
44    *     THE POSSIBILITY OF SUCH DAMAGE.
45    ********************************************************************* */
46
47#include "sbmips.h"
48#include "bsp_config.h"
49#include "cpu_config.h"
50#include "mipsmacros.h"
51#include "swarm.h"
52
53		.text
54
55
56
57#define SETLEDS(a,b,c,d)                     \
58       li     a0,(((a)<<24)|((b)<<16)|((c)<<8)|(d)) ;    \
59       JAL(cpu1_setleds)
60
61
62		.text
63
64
65/*  *********************************************************************
66    *  BOARD_SETLEDS(x)
67    *
68    *  Set LEDs for boot-time progress indication.  Not used if
69    *  the board does not have progress LEDs.  This routine
70    *  must not call any other routines, since it may be invoked
71    *  either from KSEG0 or KSEG1 and it may be invoked
72    *  whether or not the icache is operational.
73    *
74    *  Input parameters:
75    *  	   a0 - LED value (8 bits per character, 4 characters)
76    *
77    *  Return value:
78    *  	   nothing
79    *
80    *  Registers used:
81    *  	   t0,t1,t2,t3
82    ********************************************************************* */
83
84
85#define LED_CHAR0	(32+8*3)
86#define LED_CHAR1	(32+8*2)
87#define LED_CHAR2	(32+8*1)
88#define LED_CHAR3	(32+8*0)
89
90LEAF(cpu1_setleds)
91
92		li	t0,PHYS_TO_K1(LEDS_PHYS)
93
94		rol	a0,a0,8
95		and	t1,a0,0xFF
96		sb	t1,LED_CHAR0(t0)
97
98		rol	a0,a0,8
99		and	t1,a0,0xFF
100		sb	t1,LED_CHAR1(t0)
101
102		rol	a0,a0,8
103		and	t1,a0,0xFF
104		sb	t1,LED_CHAR2(t0)
105
106		rol	a0,a0,8
107		and	t1,a0,0xFF
108		sb	t1,LED_CHAR3(t0)
109
110		j	ra
111
112END(cpu1_setleds)
113
114
115/*  *********************************************************************
116    *  CPU1PROC()
117    *
118    *  This routine is started on the secondary processor.  It just
119    *  makes some noise on the LEDs.
120    *
121    *  Input parameters:
122    *  	   nothing
123    *
124    *  Return value:
125    *  	   does not return
126    ********************************************************************* */
127
128#ifdef _FUNCSIM_
129#define WAITCOUNT 100000
130#else
131#define WAITCOUNT 100000000
132#endif
133
134LEAF(cpu1proc)
135
136		li	s0,0x80001000
137		li	s1,0
138		sd	s1,0(s0)
139
140loop:
141
142		SETLEDS('H','i',' ',' ')
143
144		ld      t0,0(s0)
145		bne	t0,s1,fail
146		add	t0,1
147		add	s1,1
148		sd      t0,0(s0)
149
150		mtc0	zero,C0_COUNT
1511:		li	t0,WAITCOUNT
152		mfc0	t1,C0_COUNT
153		blt	t1,t0,1b
154
155		SETLEDS('M','o','m','!')
156
157		ld      t0,0(s0)
158		bne	t0,s1,fail
159		add	t0,1
160		add	s1,1
161		sd      t0,0(s0)
162
163
164		mtc0	zero,C0_COUNT
1651:		li	t0,WAITCOUNT
166		mfc0	t1,C0_COUNT
167		blt	t1,t0,1b
168
169		b	loop
170
171fail:
172		SETLEDS('F','a','i','l')
1731:		b	1b
174
175
176END(cpu1proc)
177