URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [hal/] [mn10300/] [asb/] [current/] [include/] [platform.inc] - Rev 786
Compare with Previous | Blame | View Log
#ifndef CYGONCE_HAL_PLATFORM_INC
#define CYGONCE_HAL_PLATFORM_INC
##=============================================================================
##
## platform.inc
##
## ASB2303 board assembler header file
##
##=============================================================================
## ####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later
## version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License
## along with eCos; if not, write to the Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
##
## As a special exception, if other files instantiate templates or use
## macros or inline functions from this file, or you compile this file
## and link it with other works to produce a work based on this file,
## this file does not by itself cause the resulting work to be covered by
## the GNU General Public License. However the source code for this file
## must still be made available in accordance with section (3) of the GNU
## General Public License v2.
##
## This exception does not invalidate any other reasons why a work based
## on this file might be covered by the GNU General Public License.
## -------------------------------------------
## ####ECOSGPLCOPYRIGHTEND####
##=============================================================================
#######DESCRIPTIONBEGIN####
##
## Author(s): dmoseley
## Contributors:dmoseley
## Date: 2000-08-11
## Purpose: ASB board definitions.
## Description: This file contains various definitions and macros that are
## useful for writing assembly code for the ASB board.
## Usage:
## #include <cyg/hal/platform.inc>
## ...
##
##
######DESCRIPTIONEND####
##
##=============================================================================
#include <pkgconf/hal.h>
#include <cyg/hal/plf_io.h>
#------------------------------------------------------------------------------
# Diagnostics macros.
#include <cyg/hal/hal_io.h>
.macro hal_diag_data
.globl hal_diag_led_state
hal_diag_led_state: .long 0xffffffff
hal_diag_intr_count: .long 0
.endm
#define HAL_EARLY_INIT hal_led_init
.macro hal_led_init
# Setup Port 0 as all output
# Do this the very first thing so we have LED debugging available early
mov HAL_GPIO_MODE_ALL_OUTPUT,d0
mov HAL_GPIO_0_MODE,a0
mov d0,(a0)
.endm
.macro hal_diag_init
hal_led_init
jmp 1f
hal_diag_digits:
.byte 0x81 # 0
.byte 0xf3 # 1
.byte 0x49 # 2
.byte 0x61 # 3
.byte 0x33 # 4
.byte 0x25 # 5
.byte 0x05 # 6
.byte 0xf1 # 7
.byte 0x01 # 8
.byte 0x21 # 9
.byte 0x11 # A
.byte 0x07 # B
.byte 0x8d # C
.byte 0x43 # D
.byte 0x0d # E
.byte 0x1d # F
hal_diag_hex_digits:
.ascii "0123456789ABCDEF"
1:
hal_diag_led 0
.endm
.macro hal_diag_excpt_start
mov HAL_LED_ADDRESS,a0
mov (a0),d0
xor 0x01000000,d0
mov d0,(a0)
.endm
.macro hal_diag_intr_start
mov (hal_diag_intr_count),d1
inc d1
cmp 100,d1
bne x\@
clr d1
mov HAL_LED_ADDRESS,a0
mov (a0),d0
xor 0x00010000,d0
mov d0,(a0)
x\@:
mov d1,(hal_diag_intr_count)
.endm
.macro hal_diag_restore
mov (hal_diag_intr_count),d0
and 0x1000,d0
beq x\@
mov HAL_LED_ADDRESS,a0
mov (a0),d0
and 0xfffeffff,d0
mov d0,(a0)
x\@:
.endm
.macro hal_diag_led val
movm [d2,d3,a2],(sp)
0: mov hal_diag_digits,a2
mov \val,d2
and 0xf,d2
add d2,a2
movbu (a2),d3
mov HAL_LED_ADDRESS,a2
mov (a2),d2
asl 8,d2
or d3,d2
mov d2,(a2)
movm (sp),[d2,d3,a2]
.endm
#define CYGPKG_HAL_MN10300_DIAG_DEFINED
#------------------------------------------------------------------------------
# MEMC macros.
#ifndef CYGPKG_HAL_MN10300_MEMC_DEFINED
// These settings follow the recommended settings in the
// "MN103E010 Evaluation Board User's Guide"
#define BCCR 0xC0002000
#define BCCR_INIT 0x12040580
#define SBBASE0 0xD8C00100
#define SBBASE1 0xD8C00110
#define SBBASE2 0xD8C00120
#define SBBASE3 0xD8C00130
#define SBBASE4 0xD8C00140
#define SBBASE5 0xD8C00150
#define SBBASE6 0xD8C00160
#define SBBASE7 0xD8C00170
#define SBBASE0_INIT_SYSFL 0x8000FE01
#define SBBASE0_INIT_BPROM 0x8400FE01
#define SBBASE1_INIT_SYSFL 0x8400FE01
#define SBBASE1_INIT_BPROM 0x8000FE01
#define SBBASE2_INIT 0x8600FF81
#define SBBASE3_INIT 0x00000000
#define SBBASE4_INIT 0x00000000
#define SBBASE5_INIT 0x00000000
#define SBBASE6_INIT 0x00000000
#define SBBASE7_INIT 0x00000000
#define SBCTRL00 0xD8C00200
#define SBCTRL10 0xD8C00210
#define SBCTRL20 0xD8C00220
#define SBCTRL30 0xD8C00230
#define SBCTRL40 0xD8C00240
#define SBCTRL50 0xD8C00250
#define SBCTRL60 0xD8C00260
#define SBCTRL70 0xD8C00270
#define SBCTRL00_INIT 0x21111000
#define SBCTRL10_INIT 0x21111000
#define SBCTRL20_INIT 0x21111000
#define SBCTRL30_INIT 0x00000000
#define SBCTRL40_INIT 0x00000000
#define SBCTRL50_INIT 0x00000000 // 0x21111100
#define SBCTRL60_INIT 0x00000000 // 0x11110000
#define SBCTRL70_INIT 0x00000000
#define SBCTRL01 0xD8C00204
#define SBCTRL11 0xD8C00214
#define SBCTRL21 0xD8C00224
#define SBCTRL31 0xD8C00234
#define SBCTRL41 0xD8C00244
#define SBCTRL51 0xD8C00254
#define SBCTRL61 0xD8C00264
#define SBCTRL71 0xD8C00274
#define SBCTRL01_INIT 0x00100200
#define SBCTRL11_INIT 0x00100200
#define SBCTRL21_INIT 0x00100200
#define SBCTRL31_INIT 0x00000000
#define SBCTRL41_INIT 0x00000000
#define SBCTRL51_INIT 0x00000000
#define SBCTRL61_INIT 0x00000000
#define SBCTRL71_INIT 0x00000000
#define SBCTRL02 0xD8C00208
#define SBCTRL12 0xD8C00218
#define SBCTRL22 0xD8C00228
#define SBCTRL32 0xD8C00238
#define SBCTRL42 0xD8C00248
#define SBCTRL52 0xD8C00258
#define SBCTRL62 0xD8C00268
#define SBCTRL72 0xD8C00278
#define SBCTRL02_INIT 0x00000004
#define SBCTRL12_INIT 0x04000004
#define SBCTRL22_INIT 0x00000004
#define SBCTRL32_INIT 0x00000000
#define SBCTRL42_INIT 0x00000000
#define SBCTRL52_INIT 0x00000000
#define SBCTRL62_INIT 0x00000000
#define SBCTRL72_INIT 0x00000000
#define SDBASE0 0xDA000008
#define SDBASE1 0xDA00000C
#define SDRAMBUS 0xDA000000
// 16MB SDRAM
#define SDBASE0_8M_INIT 0x9000FF81
#define SDBASE1_8M_INIT 0x9080FF81
#define SDRAMBUS_8M_INIT 0xA8990654
// 32MB SDRAM
#define SDBASE0_16M_INIT 0x9000FF01
#define SDBASE1_16M_INIT 0x9100FF01
#define SDRAMBUS_16M_INIT 0xA89a0654
// 64MB SDRAM
#define SDBASE0_32M_INIT 0x9000fe01
#define SDBASE1_32M_INIT 0x9200fe01
#define SDRAMBUS_32M_INIT 0xa89b0654
.macro hal_memc_init
mov BCCR,a0
mov BCCR_INIT,d0
mov d0,(a0)
// reduce the span of the ROM banks first
mov (SBBASE0),d0
btst 1,d0
beq 0f
mov 0x8000FE01,d0
mov d0,(SBBASE0)
0:
mov (SBBASE1),d0
btst 1,d0
beq 0f
mov 0x8000FE01,d0
mov d0,(SBBASE1)
0:
mov SBBASE2,a0
mov SBBASE2_INIT,d0
mov d0,(a0)
mov SBBASE3,a0
mov SBBASE3_INIT,d0
mov d0,(a0)
mov SBBASE4,a0
mov SBBASE4_INIT,d0
mov d0,(a0)
mov SBBASE5,a0
mov SBBASE5_INIT,d0
mov d0,(a0)
mov SBBASE6,a0
mov SBBASE6_INIT,d0
mov d0,(a0)
mov SBBASE7,a0
mov SBBASE7_INIT,d0
mov d0,(a0)
mov SBCTRL00,a0
mov SBCTRL00_INIT,d0
mov d0,(a0)
mov SBCTRL10,a0
mov SBCTRL10_INIT,d0
mov d0,(a0)
mov SBCTRL20,a0
mov SBCTRL20_INIT,d0
mov d0,(a0)
mov SBCTRL30,a0
mov SBCTRL30_INIT,d0
mov d0,(a0)
mov SBCTRL40,a0
mov SBCTRL40_INIT,d0
mov d0,(a0)
mov SBCTRL50,a0
mov SBCTRL50_INIT,d0
mov d0,(a0)
mov SBCTRL60,a0
mov SBCTRL60_INIT,d0
mov d0,(a0)
mov SBCTRL70,a0
mov SBCTRL70_INIT,d0
mov d0,(a0)
mov SBCTRL01,a0
mov SBCTRL01_INIT,d0
mov d0,(a0)
mov SBCTRL11,a0
mov SBCTRL11_INIT,d0
mov d0,(a0)
mov SBCTRL21,a0
mov SBCTRL21_INIT,d0
mov d0,(a0)
mov SBCTRL31,a0
mov SBCTRL31_INIT,d0
mov d0,(a0)
mov SBCTRL41,a0
mov SBCTRL41_INIT,d0
mov d0,(a0)
mov SBCTRL51,a0
mov SBCTRL51_INIT,d0
mov d0,(a0)
mov SBCTRL61,a0
mov SBCTRL61_INIT,d0
mov d0,(a0)
mov SBCTRL71,a0
mov SBCTRL71_INIT,d0
mov d0,(a0)
mov SBCTRL02,a0
mov SBCTRL02_INIT,d0
mov d0,(a0)
mov SBCTRL12,a0
mov SBCTRL12_INIT,d0
mov d0,(a0)
mov SBCTRL22,a0
mov SBCTRL22_INIT,d0
mov d0,(a0)
mov SBCTRL32,a0
mov SBCTRL32_INIT,d0
mov d0,(a0)
mov SBCTRL42,a0
mov SBCTRL42_INIT,d0
mov d0,(a0)
mov SBCTRL52,a0
mov SBCTRL52_INIT,d0
mov d0,(a0)
mov SBCTRL62,a0
mov SBCTRL62_INIT,d0
mov d0,(a0)
mov SBCTRL72,a0
mov SBCTRL72_INIT,d0
mov d0,(a0)
#ifndef CYG_HAL_STARTUP_RAM
// Setup for 64MB initially and determine final mem config below.
mov SDRAMBUS,a0
mov (a0),d0
and 0xfffffffb,d0 // disable refresh
mov d0,(a0)
mov SDBASE0,a0
mov SDBASE0_32M_INIT,d0
mov d0,(a0)
mov SDBASE1,a0
mov SDBASE1_32M_INIT,d0
mov d0,(a0)
mov SDRAMBUS,a0
mov SDRAMBUS_32M_INIT,d0
mov d0,(a0)
mov 0x1000,d0
0:
sub 1,d0
bne 0b
// Check for 16MB and 32MB shadowing to determine actual amount of
// memory installed. This assumes 2x8M, 2x16M, or 2x32M configs.
mov 0,d0
mov d0,(0x90800000)
mov d0,(0x91000000)
mov 0xaaaaaaaa,d0
mov d0,(0x90000000)
mov (0x90800000),d1
cmp d0,d1
bne 1f
// 16MB installed
mov SDRAMBUS,a0
mov (a0),d0
and 0xfffffffb,d0 // disable refresh
mov d0,(a0)
mov SDBASE0,a1
mov SDBASE0_8M_INIT,d1
mov d1,(a1)
mov SDBASE1,a1
mov SDBASE1_8M_INIT,d1
mov d1,(a1)
mov SDRAMBUS_8M_INIT,d0
mov d0,(a0)
jmp 2f
1:
mov (0x91000000),d1
cmp d0,d1
bne 2f
// 32MB installed
mov SDRAMBUS,a0
mov (a0),d0
and 0xfffffffb,d0 // disable refresh
mov d0,(a0)
mov SDBASE0,a1
mov SDBASE0_16M_INIT,d1
mov d1,(a1)
mov SDBASE1,a1
mov SDBASE1_16M_INIT,d1
mov d1,(a1)
mov SDRAMBUS_16M_INIT,d0
mov d0,(a0)
2:
#endif // ! CYG_HAL_STARTUP_RAM
// now the ROMs need putting into the right place
// - this is tricky because when we're booting from the system flash,
// it has had its base address pre-swapped by the CPU
// - we need to copy a small piece of code to the SRAM and execute it
// there
// copy the ROM address adjustor to the SRAM
__hal_plf_base_ref:
mov pc,a3
mov a3,a0
add __hal_plf_rom_swap_start-__hal_plf_base_ref,a0
add __hal_plf_rom_swap_end-__hal_plf_base_ref,a3
mov 0x8C000000,a1
0: movbu (a0),d0
movbu d0,(a1)
inc a0
inc a1
cmp a0,a3
bcc 0b
mov 0x8C000000,a1
jmp (a1)
////////////////////////////////////////////////////////////////
__hal_plf_rom_swap_start:
// put boot PROM at 0x80000000, and system flash at 0x84000000
mov SBBASE0_INIT_BPROM,d0
mov d0,(SBBASE0)
mov SBBASE1_INIT_BPROM,d0
mov d0,(SBBASE1)
// memory bank 0
mov SBCTRL00_INIT,d0
mov d0,(SBCTRL00)
mov SBCTRL01_INIT,d0
mov d0,(SBCTRL01)
mov SBCTRL02_INIT,d0
mov d0,(SBCTRL02)
// memory bank 1
mov SBCTRL10_INIT,d0
mov d0,(SBCTRL10)
mov SBCTRL11_INIT,d0
mov d0,(SBCTRL11)
mov SBCTRL12_INIT,d0
mov d0,(SBCTRL12)
// jump forward so we start running from the 80000000/84000000 base address
mov __hal_plf_rom_swap_reentry,a0
jmp (a0)
__hal_plf_rom_swap_end:
////////////////////////////////////////////////////////////////
__hal_plf_rom_swap_reentry:
// clear the on-CPU 16Kb SRAM
clr d0
mov 16384/4-4,d1
mov 0x8C000000,a0
0:
mov d0,(a0,d1)
sub 4,d1
bnc 0b
.endm
#define CYGPKG_HAL_MN10300_MEMC_DEFINED
#endif
//-----------------------------------------------------------------------------
// Syscall support.
// RedBoot provides syscall handling for this board
// These must be kept in sync with the rest of the tree.
#define SIGSYS 12
#define SIGSYSCALL SIGSYS
#------------------------------------------------------------------------------
#endif // ifndef CYGONCE_HAL_PLATFORM_INC
# end of platform.inc