1/*  *********************************************************************
2    *  BCM1480 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 "bcm91480b.h"
52#include "bcm1480_regs.h"
53
54		.text
55
56
57
58#define SETLEDS(a,b,c,d)                     \
59       li     a0,(((a)<<24)|((b)<<16)|((c)<<8)|(d)) ;    \
60       JAL(cpu1_setleds)
61
62
63		.text
64
65
66/*  *********************************************************************
67    *  BOARD_SETLEDS(x)
68    *
69    *  Set LEDs for boot-time progress indication.  Not used if
70    *  the board does not have progress LEDs.  This routine
71    *  must not call any other routines, since it may be invoked
72    *  either from KSEG0 or KSEG1 and it may be invoked
73    *  whether or not the icache is operational.
74    *
75    *  Input parameters:
76    *  	   a0 - LED value (8 bits per character, 4 characters)
77    *
78    *  Return value:
79    *  	   nothing
80    *
81    *  Registers used:
82    *  	   t0,t1,t2,t3
83    ********************************************************************* */
84
85
86#define LED_CHAR0	(8*3)
87#define LED_CHAR1	(8*2)
88#define LED_CHAR2	(8*1)
89#define LED_CHAR3	(8*0)
90
91LEAF(cpu1_setleds)
92
93		li	t0,PHYS_TO_K1(LEDS_PHYS)
94
95		rol	a0,a0,8
96		and	t1,a0,0xFF
97		sb	t1,LED_CHAR0(t0)
98
99		rol	a0,a0,8
100		and	t1,a0,0xFF
101		sb	t1,LED_CHAR1(t0)
102
103		rol	a0,a0,8
104		and	t1,a0,0xFF
105		sb	t1,LED_CHAR2(t0)
106
107		rol	a0,a0,8
108		and	t1,a0,0xFF
109		sb	t1,LED_CHAR3(t0)
110
111		j	ra
112
113END(cpu1_setleds)
114
115
116/*  *********************************************************************
117    *  CPU1PROC()
118    *
119    *  This routine is started on the secondary processor.  It just
120    *  makes some noise on the LEDs.
121    *
122    *  Input parameters:
123    *  	   nothing
124    *
125    *  Return value:
126    *  	   does not return
127    ********************************************************************* */
128
129#ifdef _FUNCSIM_
130#define WAITCOUNT 100000
131#else
132#define WAITCOUNT 300000000
133#endif
134
135delay:
136		mtc0	zero,C0_COUNT
1371:		li	t0,WAITCOUNT
138		mfc0	t1,C0_COUNT
139		blt	t1,t0,1b
140
141		j	ra
142
143
144#define GET_CUR_CPU(reg) \
145		mfc0	reg,C0_PRID ; \
146		srl	reg,reg,25 ; \
147		and	reg,reg,7
148
149LEAF(cpu1proc)
150
151		li	s2,PHYS_TO_K1(LEDS_PHYS+LED_CHAR3+1)
152
153		/* Clear display to spaces */
154		li	t0,' '
155		sb	t0,-1(s2)
156		sb	t0,-2(s2)
157		sb	t0,-3(s2)
158		sb	t0,-4(s2)
159
160		/* Get index based on our processor number */
161		GET_CUR_CPU(t0)
162		beq	t0,0,1f		/* should not happen */
163		sub	t0,t0,1
1641:
165		addi	t2,t0,'1'	/* cpu number */
166		sub	s2,t1		/* s2 points at rightmost char */
167
168
169		/* write processor number and twiddly thingy */
170
171loop:
172
173		li	t3,'/'
174		sb	t3,-1(s2)
175
176		bal	delay
177
178		li	t3,'-'
179		sb	t3,-1(s2)
180
181		bal	delay
182
183		li	t3,'\\'
184		sb	t3,-1(s2)
185
186		bal	delay
187
188		li	t3,'|'
189		sb	t3,-1(s2)
190
191		bal	delay
192
193		b	loop
194
195
196END(cpu1proc)
197
198
199