/* * Copyright (c) 2011 Aeroflex Gaisler * * BSD license: * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #define LEON3_IO_AREA 0xfff00000 #define LEON3_CONF_AREA 0xff000 #define VENDOR_GAISLER 0x01 #define GAISLER_APBMST 0x006 #define GAISLER_APBUART 0x00C #define GAISLER_GPTIMER 0x011 .text /* ------- */ .weak cpuinit .set cpuinit,_cpuinit /* ------- */ !.global cpuinit _cpuinit: mov %o7,%g6 mov %psr, %l3 srl %l3, 24, %g5 and %g5, 0xf, %g5 subcc %g5, 3, %0 be 1f /* other versions */ ba 2f ! ####### leon3 ######### 1: set 0x01, %o0 !VENDOR_GAISLER set 0x006, %o1 !GAISLER_APBMST call ahbslv_scan nop cmp %g0,%o0 be 2f nop ld [%o0+16],%g1 set 0xfff00000,%o0 !LEON3_IO_AREA and %g1,%o0,%g1 !g1: apb base set 0xff000,%o0 !LEON3_CONF_AREA or %g1,%o0,%g2 !g2: apb conf base ! ####### uart ######### mov %g2,%o0 set 0x01 , %o1 ! VENDOR_GAISLER set 0x00C,%o2 ! GAISLER_APBUART call apbslv_scan nop cmp %g0,%o0 be 2f nop call iobar_getbase mov %g1,%o1 set console, %g5 st %o1,[%g5] !uart base address ! ####### timer ######### mov %g2,%o0 set 0x01 , %o1 !VENDOR_GAISLER set 0x011,%o2 !GAISLER_GPTIMER call apbslv_scan nop cmp %g0,%o0 be 2f nop call iobar_getbase mov %g1,%o1 add %o1,0x10,%o1 set rtc, %g5 st %o1,[%g5] ! ################ mov %g2,%o0 set 0x01 , %o1 !VENDOR_GAISLER set 0x00D,%o2 !GAISLER_IRQMP call apbslv_scan nop cmp %g0,%o0 be 2f nop call iobar_getbase mov %g1,%o1 set irqmp, %g5 st %o1,[%g5] ld [%o1+0x10], %o2 srl %o2, 16, %o2 and %o2, 15, %o2 st %o2,[%g5+4] ! ################ 2: mov %g6,%o7 retl nop ! force link of jiffies_64 .global jiffies_64 3: set jiffies_64,%g1 .data .global irqmp irqmp: .word 0 ! IRQMP base address .word 0 ! extended irq number .text