| /* |
| * Copyright (c) 2003-2004 The Regents of The University of Michigan |
| * Copyright (c) 1993 The Hewlett-Packard Development Company |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are |
| * met: redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer; |
| * redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution; |
| * neither the name of the copyright holders nor the names of its |
| * contributors may be used to endorse or promote products derived from |
| * this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #include "dc21164FromGasSources.h" // DECchip 21164 specific definitions |
| #include "ev5_defs.h" |
| #include "fromHudsonOsf.h" // OSF/1 specific definitions |
| #include "fromHudsonMacros.h" // Global macro definitions |
| |
| /* Jump to kernel |
| * args: |
| * Kernel address - a0 |
| * PCBB - a1 |
| * First free PFN - a3? |
| * |
| * Enable kseg addressing in ICSR |
| * Enable kseg addressing in MCSR |
| * Set VTBR -- Set to 1GB as per SRM, or maybe 8GB?? |
| * Set PCBB -- pass pointer in arg |
| * Set PTBR -- get it out of PCB |
| * Set KSP -- get it out of PCB |
| * |
| * Jump to kernel address |
| * |
| * Kernel args- |
| * s0 first free PFN |
| * s1 ptbr |
| * s2 argc 0 |
| * s3 argv NULL |
| * s5 osf_param (sysconfigtab) NULL |
| */ |
| |
| .global palJToKern |
| .text 3 |
| palJToKern: |
| ALIGN_BRANCH |
| |
| ldq_p a0, 0(zero) |
| ldq_p a1, 8(zero) |
| ldq_p a3, 16(zero) |
| |
| /* Point the Vptbr at 8GB */ |
| lda t0, 0x1(zero) |
| sll t0, 33, t0 |
| |
| mtpr t0, mVptBr // Load Mbox copy |
| mtpr t0, iVptBr // Load Ibox copy |
| STALL // don't dual issue the load with mtpr -pb |
| |
| /* Turn on superpage mapping in the mbox and icsr */ |
| lda t0, (2<<MCSR_V_SP)(zero) // Get a '10' (binary) in MCSR<SP> |
| STALL // don't dual issue the load with mtpr -pb |
| mtpr t0, mcsr // Set the super page mode enable bit |
| STALL // don't dual issue the load with mtpr -pb |
| |
| lda t0, 0(zero) |
| mtpr t0, dtbAsn |
| mtpr t0, itbAsn |
| |
| LDLI (t1,0x20000000) |
| STALL // don't dual issue the load with mtpr -pb |
| mfpr t0, icsr // Enable superpage mapping |
| STALL // don't dual issue the load with mtpr -pb |
| bis t0, t1, t0 |
| mtpr t0, icsr |
| |
| STALL // Required stall to update chip ... |
| STALL |
| STALL |
| STALL |
| STALL |
| |
| ldq_p s0, PCB_Q_PTBR(a1) |
| sll s0, VA_S_OFF, s0 // Shift PTBR into position |
| STALL // don't dual issue the load with mtpr -pb |
| mtpr s0, ptPtbr // PHYSICAL MBOX INST -> MT PT20 IN 0,1 |
| STALL // don't dual issue the load with mtpr -pb |
| ldq_p sp, PCB_Q_KSP(a1) |
| |
| mtpr a0, excAddr // Load the dispatch address. |
| STALL // don't dual issue the load with mtpr -pb |
| bis a3, zero, a0 // first free PFN |
| ldq_p a1, PCB_Q_PTBR(a1) // ptbr |
| ldq_p a2, 24(zero) // argc |
| ldq_p a3, 32(zero) // argv |
| ldq_p a4, 40(zero) // environ |
| lda a5, 0(zero) // osf_param |
| STALL // don't dual issue the load with mtpr -pb |
| mtpr zero, dtbIa // Flush all D-stream TB entries |
| mtpr zero, itbIa // Flush all I-stream TB entries |
| br zero, 2f |
| |
| ALIGN_BLOCK |
| |
| 2: NOP |
| mtpr zero, icFlush // Flush the icache. |
| NOP |
| NOP |
| |
| NOP // Required NOPs ... 1-10 |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| |
| NOP // Required NOPs ... 11-20 |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| |
| NOP // Required NOPs ... 21-30 |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| |
| NOP // Required NOPs ... 31-40 |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| NOP |
| |
| NOP // Required NOPs ... 41-44 |
| NOP |
| NOP |
| NOP |
| |
| hw_rei_stall // Dispatch to kernel |