1206721Sjmallett/*- 2206721Sjmallett * Copyright (c) 2004-2010 Juli Mallett <jmallett@FreeBSD.org> 3206721Sjmallett * All rights reserved. 4203130Simp * 5206721Sjmallett * Redistribution and use in source and binary forms, with or without 6206721Sjmallett * modification, are permitted provided that the following conditions 7206721Sjmallett * are met: 8206721Sjmallett * 1. Redistributions of source code must retain the above copyright 9206721Sjmallett * notice, this list of conditions and the following disclaimer. 10206721Sjmallett * 2. Redistributions in binary form must reproduce the above copyright 11206721Sjmallett * notice, this list of conditions and the following disclaimer in the 12206721Sjmallett * documentation and/or other materials provided with the distribution. 13203130Simp * 14206721Sjmallett * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15206721Sjmallett * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16206721Sjmallett * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17206721Sjmallett * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18206721Sjmallett * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19206721Sjmallett * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20206721Sjmallett * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21206721Sjmallett * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22206721Sjmallett * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23206721Sjmallett * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24206721Sjmallett * SUCH DAMAGE. 25203130Simp * 26206721Sjmallett * $FreeBSD$ 27206721Sjmallett */ 28194140Simp 29194140Simp#include <machine/asm.h> 30194140Simp 31206721Sjmallett .set noreorder 32194140Simp 33206721Sjmallett#ifdef SMP 34194140Simp/* 35206721Sjmallett * This function must be implemented in assembly because it is called early 36206721Sjmallett * in AP boot without a valid stack. 37194140Simp */ 38206721SjmallettLEAF(platform_processor_id) 39206721Sjmallett .set push 40206721Sjmallett .set mips32r2 41206721Sjmallett jr ra 42206721Sjmallett rdhwr v0, $0 43206721Sjmallett .set pop 44206721SjmallettEND(platform_processor_id) 45194140Simp 46194140Simp/* 47206721Sjmallett * Called on APs to wait until they are told to launch. 48194140Simp */ 49206721SjmallettLEAF(octeon_ap_wait) 50206721Sjmallett jal platform_processor_id 51206721Sjmallett nop 52194140Simp 53224661Smarcel1: lld t0, octeon_ap_boot 54206721Sjmallett bne v0, t0, 1b 55206721Sjmallett nop 56194140Simp 57206721Sjmallett move t0, zero 58224661Smarcel scd t0, octeon_ap_boot 59194140Simp 60206721Sjmallett beqz t0, 1b 61206721Sjmallett nop 62194140Simp 63206721Sjmallett j mpentry 64206721Sjmallett nop 65206721SjmallettEND(octeon_ap_wait) 66206721Sjmallett#endif 67