commit
bb701283a8
@ -0,0 +1,48 @@ |
||||
#
|
||||
# Copyright (C) 2007
|
||||
# Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
|
||||
#
|
||||
# Copyright (C) 2007
|
||||
# Kenati Technologies, Inc.
|
||||
#
|
||||
# board/ms7722se/Makefile
|
||||
#
|
||||
# This program 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 of
|
||||
# the License, or (at your option) any later version.
|
||||
#
|
||||
# This program 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 this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
|
||||
include $(TOPDIR)/config.mk |
||||
|
||||
LIB = lib$(BOARD).a
|
||||
|
||||
OBJS := ms7722se.o
|
||||
SOBJS := lowlevel_init.o
|
||||
|
||||
$(LIB): $(OBJS) $(SOBJS) |
||||
$(AR) crv $@ $(OBJS) $(SOBJS)
|
||||
|
||||
clean: |
||||
rm -f $(SOBJS) $(OBJS)
|
||||
|
||||
distclean: clean |
||||
rm -f $(LIB) core *.bak .depend
|
||||
|
||||
#########################################################################
|
||||
|
||||
.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) |
||||
$(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
|
||||
|
||||
-include .depend |
||||
|
||||
#########################################################################
|
@ -0,0 +1,31 @@ |
||||
#
|
||||
# Copyright (C) 2007
|
||||
# Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
|
||||
#
|
||||
# Copyright (C) 2007
|
||||
# Kenati Technologies, Inc.
|
||||
#
|
||||
# board/ms7722se/config.mk
|
||||
#
|
||||
# This program 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 of
|
||||
# the License, or (at your option) any later version.
|
||||
#
|
||||
# This program 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 this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
|
||||
#
|
||||
# TEXT_BASE refers to image _after_ relocation.
|
||||
#
|
||||
# NOTE: Must match value used in u-boot.lds (in this directory).
|
||||
#
|
||||
|
||||
TEXT_BASE = 0x8FFC0000
|
@ -0,0 +1,294 @@ |
||||
/* |
||||
* Copyright (C) 2007 |
||||
* Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
|
||||
* |
||||
* Copyright (C) 2007 |
||||
* Kenati Technologies, Inc. |
||||
* |
||||
* board/ms7722se/lowlevel_init.S |
||||
* |
||||
* This program 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 of
|
||||
* the License, or (at your option) any later version. |
||||
* |
||||
* This program 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 this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
* MA 02111-1307 USA |
||||
*/ |
||||
|
||||
#include <config.h> |
||||
#include <version.h> |
||||
|
||||
#include <asm/processor.h> |
||||
|
||||
/* |
||||
* Board specific low level init code, called _very_ early in the |
||||
* startup sequence. Relocation to SDRAM has not happened yet, no |
||||
* stack is available, bss section has not been initialised, etc. |
||||
* |
||||
* (Note: As no stack is available, no subroutines can be called...). |
||||
*/ |
||||
|
||||
.global lowlevel_init
|
||||
|
||||
.text |
||||
.align 2
|
||||
|
||||
lowlevel_init: |
||||
|
||||
mov.l CCR_A, r1 ! Address of Cache Control Register |
||||
mov.l CCR_D, r0 ! Instruction Cache Invalidate |
||||
mov.l r0, @r1
|
||||
|
||||
mov.l MMUCR_A, r1 ! Address of MMU Control Register |
||||
mov.l MMUCR_D, r0 ! TI == TLB Invalidate bit |
||||
mov.l r0, @r1
|
||||
|
||||
mov.l MSTPCR0_A, r1 ! Address of Power Control Register 0 |
||||
mov.l MSTPCR0_D, r0 ! |
||||
mov.l r0, @r1
|
||||
|
||||
mov.l MSTPCR2_A, r1 ! Address of Power Control Register 2 |
||||
mov.l MSTPCR2_D, r0 ! |
||||
mov.l r0, @r1
|
||||
|
||||
mov.l SBSCR_A, r1 ! |
||||
mov.w SBSCR_D, r0 ! |
||||
mov.w r0, @r1
|
||||
|
||||
mov.l PSCR_A, r1 ! |
||||
mov.w PSCR_D, r0 ! |
||||
mov.w r0, @r1
|
||||
|
||||
! mov.l RWTCSR_A, r1 ! 0xA4520004 (Watchdog Control / Status Register) |
||||
! mov.w RWTCSR_D_1, r0 ! 0xA507 -> timer_STOP/WDT_CLK=max |
||||
! mov.w r0, @r1
|
||||
|
||||
mov.l RWTCNT_A, r1 ! 0xA4520000 (Watchdog Count Register) |
||||
mov.w RWTCNT_D, r0 ! 0x5A00 -> Clear |
||||
mov.w r0, @r1
|
||||
|
||||
mov.l RWTCSR_A, r1 ! 0xA4520004 (Watchdog Control / Status Register) |
||||
mov.w RWTCSR_D_2, r0 ! 0xA504 -> timer_STOP/CLK=500ms |
||||
mov.w r0, @r1
|
||||
|
||||
mov.l FRQCR_A, r1 ! 0xA4150000 Frequency control register |
||||
mov.l FRQCR_D, r0 ! |
||||
mov.l r0, @r1
|
||||
|
||||
mov.l CCR_A, r1 ! Address of Cache Control Register |
||||
mov.l CCR_D_2, r0 ! ?? |
||||
mov.l r0, @r1
|
||||
|
||||
bsc_init: |
||||
|
||||
mov.l PSELA_A, r1 |
||||
mov.w PSELA_D, r0 |
||||
mov.w r0, @r1
|
||||
|
||||
mov.l DRVCR_A, r1 |
||||
mov.w DRVCR_D, r0 |
||||
mov.w r0, @r1
|
||||
|
||||
mov.l PCCR_A, r1 |
||||
mov.w PCCR_D, r0 |
||||
mov.w r0, @r1
|
||||
|
||||
mov.l PECR_A, r1 |
||||
mov.w PECR_D, r0 |
||||
mov.w r0, @r1
|
||||
|
||||
mov.l PJCR_A, r1 |
||||
mov.w PJCR_D, r0 |
||||
mov.w r0, @r1
|
||||
|
||||
mov.l PXCR_A, r1 |
||||
mov.w PXCR_D, r0 |
||||
mov.w r0, @r1
|
||||
|
||||
mov.l CMNCR_A, r1 ! CMNCR address -> R1 |
||||
mov.l CMNCR_D, r0 ! CMNCR data -> R0 |
||||
mov.l r0, @r1 ! CMNCR set
|
||||
|
||||
mov.l CS0BCR_A, r1 ! CS0BCR address -> R1 |
||||
mov.l CS0BCR_D, r0 ! CS0BCR data -> R0 |
||||
mov.l r0, @r1 ! CS0BCR set
|
||||
|
||||
mov.l CS2BCR_A, r1 ! CS2BCR address -> R1 |
||||
mov.l CS2BCR_D, r0 ! CS2BCR data -> R0 |
||||
mov.l r0, @r1 ! CS2BCR set
|
||||
|
||||
mov.l CS4BCR_A, r1 ! CS4BCR address -> R1 |
||||
mov.l CS4BCR_D, r0 ! CS4BCR data -> R0 |
||||
mov.l r0, @r1 ! CS4BCR set
|
||||
|
||||
mov.l CS5ABCR_A, r1 ! CS5ABCR address -> R1 |
||||
mov.l CS5ABCR_D, r0 ! CS5ABCR data -> R0 |
||||
mov.l r0, @r1 ! CS5ABCR set
|
||||
|
||||
mov.l CS5BBCR_A, r1 ! CS5BBCR address -> R1 |
||||
mov.l CS5BBCR_D, r0 ! CS5BBCR data -> R0 |
||||
mov.l r0, @r1 ! CS5BBCR set
|
||||
|
||||
mov.l CS6ABCR_A, r1 ! CS6ABCR address -> R1 |
||||
mov.l CS6ABCR_D, r0 ! CS6ABCR data -> R0 |
||||
mov.l r0, @r1 ! CS6ABCR set
|
||||
|
||||
mov.l CS0WCR_A, r1 ! CS0WCR address -> R1 |
||||
mov.l CS0WCR_D, r0 ! CS0WCR data -> R0 |
||||
mov.l r0, @r1 ! CS0WCR set
|
||||
|
||||
mov.l CS2WCR_A, r1 ! CS2WCR address -> R1 |
||||
mov.l CS2WCR_D, r0 ! CS2WCR data -> R0 |
||||
mov.l r0, @r1 ! CS2WCR set
|
||||
|
||||
mov.l CS4WCR_A, r1 ! CS4WCR address -> R1 |
||||
mov.l CS4WCR_D, r0 ! CS4WCR data -> R0 |
||||
mov.l r0, @r1 ! CS4WCR set
|
||||
|
||||
mov.l CS5AWCR_A, r1 ! CS5AWCR address -> R1 |
||||
mov.l CS5AWCR_D, r0 ! CS5AWCR data -> R0 |
||||
mov.l r0, @r1 ! CS5AWCR set
|
||||
|
||||
mov.l CS5BWCR_A, r1 ! CS5BWCR address -> R1 |
||||
mov.l CS5BWCR_D, r0 ! CS5BWCR data -> R0 |
||||
mov.l r0, @r1 ! CS5BWCR set
|
||||
|
||||
mov.l CS6AWCR_A, r1 ! CS6AWCR address -> R1 |
||||
mov.l CS6AWCR_D, r0 ! CS6AWCR data -> R0 |
||||
mov.l r0, @r1 ! CS6AWCR set
|
||||
|
||||
! SDRAM initialization |
||||
mov.l SDCR_A, r1 ! SB_SDCR address -> R1 |
||||
mov.l SDCR_D, r0 ! SB_SDCR data -> R0 |
||||
mov.l r0, @r1 ! SB_SDCR set
|
||||
|
||||
mov.l SDWCR_A, r1 ! SB_SDWCR address -> R1 |
||||
mov.l SDWCR_D, r0 ! SB_SDWCR data -> R0 |
||||
mov.l r0, @r1 ! SB_SDWCR set
|
||||
|
||||
mov.l SDPCR_A, r1 ! SB_SDPCR address -> R1 |
||||
mov.l SDPCR_D, r0 ! SB_SDPCR data -> R0 |
||||
mov.l r0, @r1 ! SB_SDPCR set
|
||||
|
||||
mov.l RTCOR_A, r1 ! SB_RTCOR address -> R1 |
||||
mov.l RTCOR_D, r0 ! SB_RTCOR data -> R0 |
||||
mov.l r0, @r1 ! SB_RTCOR set
|
||||
|
||||
mov.l RTCSR_A, r1 ! SB_RTCSR address -> R1 |
||||
mov.l RTCSR_D, r0 ! SB_RTCSR data -> R0 |
||||
mov.l r0, @r1 ! SB_RTCSR set
|
||||
|
||||
mov.l SDMR3_A, r1 ! SDMR3 address -> R1 |
||||
mov #0x00, r0 ! SDMR3 data -> R0 |
||||
mov.b r0, @r1 ! SDMR3 set
|
||||
|
||||
! BL bit off (init = ON) (?!?) |
||||
|
||||
stc sr, r0 ! BL bit off(init=ON) |
||||
mov.l SR_MASK_D, r1 |
||||
and r1, r0 |
||||
ldc r0, sr |
||||
|
||||
rts |
||||
mov #0, r0 |
||||
|
||||
.align 2
|
||||
|
||||
CCR_A: .long CCR |
||||
MMUCR_A: .long MMUCR |
||||
MSTPCR0_A: .long MSTPCR0 |
||||
MSTPCR2_A: .long MSTPCR2 |
||||
SBSCR_A: .long SBSCR |
||||
PSCR_A: .long PSCR |
||||
RWTCSR_A: .long RWTCSR |
||||
RWTCNT_A: .long RWTCNT |
||||
FRQCR_A: .long FRQCR |
||||
|
||||
CCR_D: .long 0x00000800 |
||||
CCR_D_2: .long 0x00000103 |
||||
MMUCR_D: .long 0x00000004 |
||||
MSTPCR0_D: .long 0x00001001 |
||||
MSTPCR2_D: .long 0xffffffff |
||||
FRQCR_D: .long 0x07022538 |
||||
|
||||
PSELA_A: .long 0xa405014E |
||||
PSELA_D: .word 0x0A10 |
||||
.align 2
|
||||
|
||||
DRVCR_A: .long 0xa405018A |
||||
DRVCR_D: .word 0x0554 |
||||
.align 2
|
||||
|
||||
PCCR_A: .long 0xa4050104 |
||||
PCCR_D: .word 0x8800 |
||||
.align 2
|
||||
|
||||
PECR_A: .long 0xa4050108 |
||||
PECR_D: .word 0x0000 |
||||
.align 2
|
||||
|
||||
PJCR_A: .long 0xa4050110 |
||||
PJCR_D: .word 0x1000 |
||||
.align 2
|
||||
|
||||
PXCR_A: .long 0xa4050148 |
||||
PXCR_D: .word 0x0AAA |
||||
.align 2
|
||||
|
||||
CMNCR_A: .long CMNCR |
||||
CMNCR_D: .long 0x00000013 |
||||
CS0BCR_A: .long CS0BCR ! Flash bank 1 |
||||
CS0BCR_D: .long 0x24920400 |
||||
CS2BCR_A: .long CS2BCR ! SRAM |
||||
CS2BCR_D: .long 0x24920400 |
||||
CS4BCR_A: .long CS4BCR ! FPGA, PCMCIA, USB, ext slot |
||||
CS4BCR_D: .long 0x24920400 |
||||
CS5ABCR_A: .long CS5ABCR ! Ext slot |
||||
CS5ABCR_D: .long 0x24920400 |
||||
CS5BBCR_A: .long CS5BBCR ! USB controller |
||||
CS5BBCR_D: .long 0x24920400 |
||||
CS6ABCR_A: .long CS6ABCR ! Ethernet |
||||
CS6ABCR_D: .long 0x24920400 |
||||
|
||||
CS0WCR_A: .long CS0WCR |
||||
CS0WCR_D: .long 0x00000300 |
||||
CS2WCR_A: .long CS2WCR |
||||
CS2WCR_D: .long 0x00000300 |
||||
CS4WCR_A: .long CS4WCR |
||||
CS4WCR_D: .long 0x00000300 |
||||
CS5AWCR_A: .long CS5AWCR |
||||
CS5AWCR_D: .long 0x00000300 |
||||
CS5BWCR_A: .long CS5BWCR |
||||
CS5BWCR_D: .long 0x00000300 |
||||
CS6AWCR_A: .long CS6AWCR |
||||
CS6AWCR_D: .long 0x00000300 |
||||
|
||||
SDCR_A: .long SBSC_SDCR |
||||
SDCR_D: .long 0x00020809 |
||||
SDWCR_A: .long SBSC_SDWCR |
||||
SDWCR_D: .long 0x00164d0d |
||||
SDPCR_A: .long SBSC_SDPCR |
||||
SDPCR_D: .long 0x00000087 |
||||
RTCOR_A: .long SBSC_RTCOR |
||||
RTCOR_D: .long 0xA55A0034 |
||||
RTCSR_A: .long SBSC_RTCSR |
||||
RTCSR_D: .long 0xA55A0010 |
||||
SDMR3_A: .long 0xFE500180 |
||||
|
||||
.align 1
|
||||
|
||||
SBSCR_D: .word 0x0040 |
||||
PSCR_D: .word 0x0000 |
||||
RWTCSR_D_1: .word 0xA507 |
||||
RWTCSR_D_2: .word 0xA507 |
||||
RWTCNT_D: .word 0x5A00 |
||||
|
||||
SR_MASK_D: .long 0xEFFFFF0F |
@ -0,0 +1,59 @@ |
||||
/*
|
||||
* Copyright (C) 2007 |
||||
* Nobuhiro Iwamatsu <iwamatsu@nigauri.org> |
||||
* |
||||
* Copyright (C) 2007 |
||||
* Kenati Technologies, Inc. |
||||
* |
||||
* board/ms7722se/ms7722se.c |
||||
* |
||||
* This program 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 of |
||||
* the License, or (at your option) any later version. |
||||
* |
||||
* This program 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 this program; if not, write to the Free Software |
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
* MA 02111-1307 USA |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <asm/io.h> |
||||
#include <asm/processor.h> |
||||
|
||||
#define LED_BASE 0xB0800000 |
||||
|
||||
int checkboard(void) |
||||
{ |
||||
puts("BOARD: Hitachi UL MS7722SE\n"); |
||||
return 0; |
||||
} |
||||
|
||||
int board_init(void) |
||||
{ |
||||
/* Setup PTXMD[1:0] for /CS6A */ |
||||
outw(inw(PXCR) & ~0xf000, PXCR); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int dram_init (void) |
||||
{ |
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
gd->bd->bi_memstart = CFG_SDRAM_BASE; |
||||
gd->bd->bi_memsize = CFG_SDRAM_SIZE; |
||||
printf("DRAM: %dMB\n", CFG_SDRAM_SIZE / (1024 * 1024)); |
||||
return 0; |
||||
} |
||||
|
||||
void led_set_state (unsigned short value) |
||||
{ |
||||
*((volatile unsigned short *) LED_BASE) = (value & 0xFF); |
||||
} |
@ -0,0 +1,105 @@ |
||||
/* |
||||
* Copyrigth (c) 2007 |
||||
* Nobuhiro Iwamatsu <iwamatsu@nigauri.org> |
||||
* |
||||
* See file CREDITS for list of people who contributed to this |
||||
* project. |
||||
* |
||||
* This program 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 of |
||||
* the License, or (at your option) any later version. |
||||
* |
||||
* This program 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 this program; if not, write to the Free Software |
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
* MA 02111-1307 USA |
||||
*/ |
||||
|
||||
OUTPUT_FORMAT("elf32-sh-linux", "elf32-sh-linux", "elf32-sh-linux") |
||||
OUTPUT_ARCH(sh) |
||||
ENTRY(_start) |
||||
|
||||
SECTIONS |
||||
{ |
||||
/* |
||||
Base address of internal SDRAM is 0x0C000000. |
||||
Although size of SDRAM can be either 16 or 32 MBytes, |
||||
we assume 16 MBytes (ie ignore upper half if the full |
||||
32 MBytes is present). |
||||
|
||||
NOTE: This address must match with the definition of |
||||
TEXT_BASE in config.mk (in this directory). |
||||
|
||||
*/ |
||||
. = 0x8C000000 + (64*1024*1024) - (256*1024); |
||||
|
||||
PROVIDE (reloc_dst = .); |
||||
|
||||
PROVIDE (_ftext = .); |
||||
PROVIDE (_fcode = .); |
||||
PROVIDE (_start = .); |
||||
|
||||
.text : |
||||
{ |
||||
cpu/sh4/start.o (.text) |
||||
. = ALIGN(8192); |
||||
common/environment.o (.ppcenv) |
||||
. = ALIGN(8192); |
||||
common/environment.o (.ppcenvr) |
||||
. = ALIGN(8192); |
||||
*(.text) |
||||
. = ALIGN(4); |
||||
} =0xFF |
||||
PROVIDE (_ecode = .); |
||||
.rodata : |
||||
{ |
||||
*(.rodata) |
||||
. = ALIGN(4); |
||||
} |
||||
PROVIDE (_etext = .); |
||||
|
||||
|
||||
PROVIDE (_fdata = .); |
||||
.data : |
||||
{ |
||||
*(.data) |
||||
. = ALIGN(4); |
||||
} |
||||
PROVIDE (_edata = .); |
||||
|
||||
PROVIDE (_fgot = .); |
||||
.got : |
||||
{ |
||||
*(.got) |
||||
. = ALIGN(4); |
||||
} |
||||
PROVIDE (_egot = .); |
||||
|
||||
PROVIDE (__u_boot_cmd_start = .); |
||||
.u_boot_cmd : |
||||
{ |
||||
*(.u_boot_cmd) |
||||
. = ALIGN(4); |
||||
} |
||||
PROVIDE (__u_boot_cmd_end = .); |
||||
|
||||
PROVIDE (reloc_dst_end = .); |
||||
/* _reloc_dst_end = .; */ |
||||
|
||||
PROVIDE (bss_start = .); |
||||
PROVIDE (__bss_start = .); |
||||
.bss : |
||||
{ |
||||
*(.bss) |
||||
. = ALIGN(4); |
||||
} |
||||
PROVIDE (bss_end = .); |
||||
|
||||
PROVIDE (_end = .); |
||||
} |
@ -0,0 +1,43 @@ |
||||
#
|
||||
# Copyright (C) 2007
|
||||
# Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
|
||||
#
|
||||
# This program 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 of
|
||||
# the License, or (at your option) any later version.
|
||||
#
|
||||
# This program 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 this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
include $(TOPDIR)/config.mk |
||||
|
||||
LIB = lib$(BOARD).a
|
||||
|
||||
OBJS := ms7750se.o
|
||||
SOBJS := lowlevel_init.o
|
||||
|
||||
$(LIB): $(OBJS) $(SOBJS) |
||||
$(AR) crv $@ $(OBJS) $(SOBJS)
|
||||
|
||||
clean: |
||||
rm -f $(SOBJS) $(OBJS)
|
||||
|
||||
distclean: clean |
||||
rm -f $(LIB) core *.bak .depend
|
||||
|
||||
#################################################################
|
||||
|
||||
.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) |
||||
$(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
|
||||
|
||||
-include .depend |
||||
|
||||
#################################################################
|
@ -0,0 +1,23 @@ |
||||
#
|
||||
# Copyright (C) 2007
|
||||
# Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
|
||||
#
|
||||
# This program 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 of
|
||||
# the License, or (at your option) any later version.
|
||||
#
|
||||
# This program 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 this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
#
|
||||
# NOTE: Must match value used in u-boot.lds (in this directory).
|
||||
#
|
||||
TEXT_BASE = 0x8FFC0000
|
@ -0,0 +1,179 @@ |
||||
/* |
||||
modified from SH-IPL+g |
||||
Renesaso SuperH / Solution Enginge MS775xSE01 BSC setting. |
||||
|
||||
Support CPU : SH7750/SH7750S/SH7750R/SH7751/SH7751R |
||||
|
||||
Coyright (c) 2007 Nobuhiro Iwamatsu <iwmatsu@nigauri.org>
|
||||
|
||||
* See file CREDITS for list of people who contributed to this |
||||
* project. |
||||
* |
||||
* This program 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 of
|
||||
* the License, or (at your option) any later version. |
||||
* |
||||
* This program 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 this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
* MA 02111-1307 USA |
||||
*/ |
||||
|
||||
#include <config.h> |
||||
#include <version.h> |
||||
|
||||
#include <asm/processor.h> |
||||
|
||||
#ifdef CONFIG_CPU_SH7751 |
||||
#define BCR2_D_VALUE 0x2FFC /* Area 1-6 width: 32/32/32/32/32/16 */ |
||||
#define WCR1_D_VALUE 0x02770771 /* DMA:0 A6:2 A3:0 A0:1 Others:15 */ |
||||
#ifdef CONFIG_MARUBUN_PCCARD |
||||
#define WCR2_D_VALUE 0xFFFE4FE7 /* A6:15 A6B:7 A5:15 A5B:7 A4:15 |
||||
A3:2 A2:15 A1:15 A0:6 A0B:7 */ |
||||
#else /* CONFIG_MARUBUN_PCCARD */ |
||||
#define WCR2_D_VALUE 0x7FFE4FE7 /* A6:3 A6B:7 A5:15 A5B:7 A4:15 |
||||
A3:2 A2:15 A1:15 A0:6 A0B:7 */ |
||||
#endif /* CONFIG_MARUBUN_PCCARD */ |
||||
#define WCR3_D_VALUE 0x01777771 /* A6: 0-1 A5: 1-3 A4: 1-3 A3: 1-3 |
||||
A2: 1-3 A1: 1-3 A0: 0-1 */ |
||||
#define RTCOR_D_VALUE 0xA50D /* Write code A5, data 0D (~15us?) */ |
||||
#define SDMR3_ADDRESS 0xFF940088 /* SDMR3 address on 32-bit bus */ |
||||
#define MCR_D1_VALUE 0x100901B4 /* SDRAM 32-bit, CAS/RAS Refresh, ... */ |
||||
#define MCR_D2_VALUE 0x500901B4 /* Same w/MRSET now 1 (mode reg cmd) */ |
||||
#else /* CONFIG_CPU_SH7751 */ |
||||
#define BCR2_D_VALUE 0x2E3C /* Area 1-6 width: 32/32/64/16/32/16 */ |
||||
#define WCR1_D_VALUE 0x02720777 /* DMA:0 A6:2 A4:2 A3:0 Others:15 */ |
||||
#define WCR2_D_VALUE 0xFFFE4FFF /* A6:15 A6B:7 A5:15 A5B:7 A4:15 |
||||
A3:2 A2:15 A1:15 A0:15 A0B:7 */ |
||||
#define WCR3_D_VALUE 0x01717771 /* A6: 0-1 A5: 1-3 A4: 0-1 A3: 1-3 |
||||
A2: 1-3 A1: 1-3 A0: 0-1 */ |
||||
#define RTCOR_D_VALUE 0xA510 /* Write code A5, data 10 (~15us?) */ |
||||
#define SDMR3_ADDRESS 0xFF940110 /* SDMR3 address on 64-bit bus */ |
||||
#define MCR_D1_VALUE 0x8801001C /* SDRAM 64-bit, CAS/RAS Refresh, ... */ |
||||
#define MCR_D2_VALUE 0xC801001C /* Same w/MRSET now 1 (mode reg cmd) */ |
||||
#endif /* CONFIG_CPU_SH7751 */ |
||||
|
||||
.global lowlevel_init
|
||||
.text |
||||
.align 2
|
||||
|
||||
lowlevel_init: |
||||
|
||||
mov.l CCR_A, r1 ! CCR Address |
||||
mov.l CCR_D_DISABLE, r0 ! CCR Data |
||||
mov.l r0, @r1
|
||||
|
||||
init_bsc: |
||||
mov.l FRQCR_A,r1 /* FRQCR Address */ |
||||
mov.l FRQCR_D,r0 /* FRQCR Data */ |
||||
mov.w r0,@r1
|
||||
|
||||
mov.l BCR1_A,r1 /* BCR1 Address */ |
||||
mov.l BCR1_D,r0 /* BCR1 Data */ |
||||
mov.l r0,@r1
|
||||
|
||||
mov.l BCR2_A,r1 /* BCR2 Address */ |
||||
mov.l BCR2_D,r0 /* BCR2 Data */ |
||||
mov.w r0,@r1
|
||||
|
||||
mov.l WCR1_A,r1 /* WCR1 Address */ |
||||
mov.l WCR1_D,r0 /* WCR1 Data */ |
||||
mov.l r0,@r1
|
||||
|
||||
mov.l WCR2_A,r1 /* WCR2 Address */ |
||||
mov.l WCR2_D,r0 /* WCR2 Data */ |
||||
mov.l r0,@r1
|
||||
|
||||
mov.l WCR3_A,r1 /* WCR3 Address */ |
||||
mov.l WCR3_D,r0 /* WCR3 Data */ |
||||
mov.l r0,@r1
|
||||
|
||||
mov.l MCR_A,r1 /* MCR Address */ |
||||
mov.l MCR_D1,r0 /* MCR Data1 */ |
||||
mov.l r0,@r1
|
||||
|
||||
mov.l SDMR3_A,r1 /* Set SDRAM mode */ |
||||
mov #0,r0 |
||||
mov.b r0,@r1
|
||||
|
||||
! Do you need PCMCIA setting? |
||||
! If so, please add the lines here... |
||||
|
||||
mov.l RTCNT_A,r1 /* RTCNT Address */ |
||||
mov.l RTCNT_D,r0 /* RTCNT Data */ |
||||
mov.w r0,@r1
|
||||
|
||||
mov.l RTCOR_A,r1 /* RTCOR Address */ |
||||
mov.l RTCOR_D,r0 /* RTCOR Data */ |
||||
mov.w r0,@r1
|
||||
|
||||
mov.l RTCSR_A,r1 /* RTCSR Address */ |
||||
mov.l RTCSR_D,r0 /* RTCSR Data */ |
||||
mov.w r0,@r1
|
||||
|
||||
mov.l RFCR_A,r1 /* RFCR Address */ |
||||
mov.l RFCR_D,r0 /* RFCR Data */ |
||||
mov.w r0,@r1 /* Clear reflesh counter */
|
||||
/* Wait DRAM refresh 30 times */ |
||||
mov #30,r3 |
||||
1: |
||||
mov.w @r1,r0
|
||||
extu.w r0,r2 |
||||
cmp/hi r3,r2 |
||||
bf 1b |
||||
|
||||
mov.l MCR_A,r1 /* MCR Address */ |
||||
mov.l MCR_D2,r0 /* MCR Data2 */ |
||||
mov.l r0,@r1
|
||||
|
||||
mov.l SDMR3_A,r1 /* Set SDRAM mode */ |
||||
mov #0,r0 |
||||
mov.b r0,@r1
|
||||
|
||||
rts |
||||
nop |
||||
|
||||
.align 2
|
||||
|
||||
CCR_A: .long CCR |
||||
CCR_D_DISABLE: .long 0x0808 |
||||
FRQCR_A: .long FRQCR |
||||
FRQCR_D: |
||||
#ifdef CONFIG_CPU_TYPE_R |
||||
.long 0x00000e1a /* 12:3:3 */ |
||||
#else /* CONFIG_CPU_TYPE_R */ |
||||
#ifdef CONFIG_GOOD_SESH4 |
||||
.long 0x00000e13 /* 6:2:1 */ |
||||
#else |
||||
.long 0x00000e23 /* 6:1:1 */ |
||||
#endif |
||||
#endif /* CONFIG_CPU_TYPE_R */ |
||||
|
||||
BCR1_A: .long BCR1 |
||||
BCR1_D: .long 0x00000008 /* Area 3 SDRAM */ |
||||
BCR2_A: .long BCR2 |
||||
BCR2_D: .long BCR2_D_VALUE /* Bus width settings */ |
||||
WCR1_A: .long WCR1 |
||||
WCR1_D: .long WCR1_D_VALUE /* Inter-area or turnaround wait states */ |
||||
WCR2_A: .long WCR2 |
||||
WCR2_D: .long WCR2_D_VALUE /* Per-area access and burst wait states */ |
||||
WCR3_A: .long WCR3 |
||||
WCR3_D: .long WCR3_D_VALUE /* Address setup and data hold cycles */ |
||||
RTCSR_A: .long RTCSR |
||||
RTCSR_D: .long 0xA518 /* RTCSR Write Code A5h Data 18h */ |
||||
RTCNT_A: .long RTCNT |
||||
RTCNT_D: .long 0xA500 /* RTCNT Write Code A5h Data 00h */ |
||||
RTCOR_A: .long RTCOR |
||||
RTCOR_D: .long RTCOR_D_VALUE /* Set refresh time (about 15us) */ |
||||
SDMR3_A: .long SDMR3_ADDRESS |
||||
MCR_A: .long MCR |
||||
MCR_D1: .long MCR_D1_VALUE |
||||
MCR_D2: .long MCR_D2_VALUE |
||||
RFCR_A: .long RFCR |
||||
RFCR_D: .long 0xA400 /* RFCR Write Code A4h Data 00h */ |
@ -0,0 +1,105 @@ |
||||
/* |
||||
* Copyrigth (c) 2007 |
||||
* Nobuhiro Iwamatsu <iwamatsu@nigauri.org> |
||||
* |
||||
* See file CREDITS for list of people who contributed to this |
||||
* project. |
||||
* |
||||
* This program 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 of |
||||
* the License, or (at your option) any later version. |
||||
* |
||||
* This program 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 this program; if not, write to the Free Software |
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
* MA 02111-1307 USA |
||||
*/ |
||||
|
||||
OUTPUT_FORMAT("elf32-sh-linux", "elf32-sh-linux", "elf32-sh-linux") |
||||
OUTPUT_ARCH(sh) |
||||
ENTRY(_start) |
||||
|
||||
SECTIONS |
||||
{ |
||||
/* |
||||
Base address of internal SDRAM is 0x0C000000. |
||||
Although size of SDRAM can be either 16 or 32 MBytes, |
||||
we assume 16 MBytes (ie ignore upper half if the full |
||||
32 MBytes is present). |
||||
|
||||
NOTE: This address must match with the definition of |
||||
TEXT_BASE in config.mk (in this directory). |
||||
|
||||
*/ |
||||
. = 0x8C000000 + (64*1024*1024) - (256*1024); |
||||
|
||||
PROVIDE (reloc_dst = .); |
||||
|
||||
PROVIDE (_ftext = .); |
||||
PROVIDE (_fcode = .); |
||||
PROVIDE (_start = .); |
||||
|
||||
.text : |
||||
{ |
||||
cpu/sh4/start.o (.text) |
||||
. = ALIGN(8192); |
||||
common/environment.o (.ppcenv) |
||||
. = ALIGN(8192); |
||||
common/environment.o (.ppcenvr) |
||||
. = ALIGN(8192); |
||||
*(.text) |
||||
. = ALIGN(4); |
||||
} =0xFF |
||||
PROVIDE (_ecode = .); |
||||
.rodata : |
||||
{ |
||||
*(.rodata) |
||||
. = ALIGN(4); |
||||
} |
||||
PROVIDE (_etext = .); |
||||
|
||||
|
||||
PROVIDE (_fdata = .); |
||||
.data : |
||||
{ |
||||
*(.data) |
||||
. = ALIGN(4); |
||||
} |
||||
PROVIDE (_edata = .); |
||||
|
||||
PROVIDE (_fgot = .); |
||||
.got : |
||||
{ |
||||
*(.got) |
||||
. = ALIGN(4); |
||||
} |
||||
PROVIDE (_egot = .); |
||||
|
||||
PROVIDE (__u_boot_cmd_start = .); |
||||
.u_boot_cmd : |
||||
{ |
||||
*(.u_boot_cmd) |
||||
. = ALIGN(4); |
||||
} |
||||
PROVIDE (__u_boot_cmd_end = .); |
||||
|
||||
PROVIDE (reloc_dst_end = .); |
||||
/* _reloc_dst_end = .; */ |
||||
|
||||
PROVIDE (bss_start = .); |
||||
PROVIDE (__bss_start = .); |
||||
.bss : |
||||
{ |
||||
*(.bss) |
||||
. = ALIGN(4); |
||||
} |
||||
PROVIDE (bss_end = .); |
||||
|
||||
PROVIDE (_end = .); |
||||
} |
@ -0,0 +1,64 @@ |
||||
/*
|
||||
* Copyright 2007 Freescale Semiconductor, Inc. |
||||
* |
||||
* (C) Copyright 2000 |
||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de. |
||||
* |
||||
* See file CREDITS for list of people who contributed to this |
||||
* project. |
||||
* |
||||
* This program 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 of |
||||
* the License, or (at your option) any later version. |
||||
* |
||||
* This program 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 this program; if not, write to the Free Software |
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
* MA 02111-1307 USA |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <libfdt.h> |
||||
#include <fdt_support.h> |
||||
|
||||
void ft_cpu_setup(void *blob, bd_t *bd) |
||||
{ |
||||
#if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\ |
||||
defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) |
||||
fdt_fixup_ethernet(blob, bd); |
||||
#endif |
||||
|
||||
do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, |
||||
"timebase-frequency", bd->bi_busfreq / 8, 1); |
||||
do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, |
||||
"bus-frequency", bd->bi_busfreq, 1); |
||||
do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, |
||||
"clock-frequency", bd->bi_intfreq, 1); |
||||
do_fixup_by_prop_u32(blob, "device_type", "soc", 4, |
||||
"bus-frequency", bd->bi_busfreq, 1); |
||||
#ifdef CONFIG_QE |
||||
do_fixup_by_prop_u32(blob, "device_type", "soc", 4, |
||||
"bus-frequency", bd->bi_busfreq, 1); |
||||
#endif |
||||
|
||||
#ifdef CFG_NS16550 |
||||
do_fixup_by_compat_u32(blob, "ns16550", |
||||
"clock-frequency", bd->bi_busfreq, 1); |
||||
#endif |
||||
|
||||
#ifdef CONFIG_CPM2 |
||||
do_fixup_by_compat_u32(blob, "fsl,cpm2-scc-uart", |
||||
"current-speed", bd->bi_baudrate, 1); |
||||
|
||||
do_fixup_by_compat_u32(blob, "fsl,cpm2-brg", |
||||
"clock-frequency", bd->bi_brgfreq, 1); |
||||
#endif |
||||
|
||||
fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize); |
||||
} |
@ -0,0 +1,46 @@ |
||||
#
|
||||
# (C) Copyright 2000-2006
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
#
|
||||
# (C) Copyright 2007
|
||||
# Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
|
||||
#
|
||||
# See file CREDITS for list of people who contributed to this
|
||||
# project.
|
||||
#
|
||||
# This program 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 of
|
||||
# the License, or (at your option) any later version.
|
||||
#
|
||||
# This program 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 this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
|
||||
include $(TOPDIR)/config.mk |
||||
|
||||
LIB = $(obj)lib$(CPU).a
|
||||
|
||||
START = start.o
|
||||
OBJS = cpu.o interrupts.o watchdog.o time.o cache.o
|
||||
|
||||
all: .depend $(START) $(LIB) |
||||
|
||||
$(LIB): $(OBJS) |
||||
$(AR) crv $@ $(OBJS)
|
||||
|
||||
#########################################################################
|
||||
|
||||
.depend: Makefile $(START:.o=.S) $(OBJS:.o=.c) |
||||
$(CC) -M $(CFLAGS) $(START:.o=.S) $(OBJS:.o=.c) > $@
|
||||
|
||||
sinclude .depend |
||||
|
||||
#########################################################################
|
@ -0,0 +1,108 @@ |
||||
/*
|
||||
* (C) Copyright 2007 |
||||
* Nobuhiro Iwamatsu <iwamatsu@nigauri.org> |
||||
* |
||||
* See file CREDITS for list of people who contributed to this |
||||
* project. |
||||
* |
||||
* This program 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 of |
||||
* the License, or (at your option) any later version. |
||||
* |
||||
* This program 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 this program; if not, write to the Free Software |
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
* MA 02111-1307 USA |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <command.h> |
||||
#include <asm/processor.h> |
||||
#include <asm/io.h> |
||||
|
||||
/*
|
||||
* Jump to P2 area. |
||||
* When handling TLB or caches, we need to do it from P2 area. |
||||
*/ |
||||
#define jump_to_P2() \ |
||||
do { \
|
||||
unsigned long __dummy; \
|
||||
__asm__ __volatile__( \
|
||||
"mov.l 1f, %0\n\t" \
|
||||
"or %1, %0\n\t" \
|
||||
"jmp @%0\n\t" \
|
||||
" nop\n\t" \
|
||||
".balign 4\n" \
|
||||
"1: .long 2f\n" \
|
||||
"2:" \
|
||||
: "=&r" (__dummy) \
|
||||
: "r" (0x20000000)); \
|
||||
} while (0) |
||||
|
||||
/*
|
||||
* Back to P1 area. |
||||
*/ |
||||
#define back_to_P1() \ |
||||
do { \
|
||||
unsigned long __dummy; \
|
||||
__asm__ __volatile__( \
|
||||
"nop;nop;nop;nop;nop;nop;nop\n\t" \
|
||||
"mov.l 1f, %0\n\t" \
|
||||
"jmp @%0\n\t" \
|
||||
" nop\n\t" \
|
||||
".balign 4\n" \
|
||||
"1: .long 2f\n" \
|
||||
"2:" \
|
||||
: "=&r" (__dummy)); \
|
||||
} while (0) |
||||
|
||||
#define CACHE_VALID 1 |
||||
#define CACHE_UPDATED 2 |
||||
|
||||
static inline void cache_wback_all(void) |
||||
{ |
||||
unsigned long addr, data, i, j; |
||||
|
||||
jump_to_P2(); |
||||
for (i = 0; i < CACHE_OC_NUM_ENTRIES; i++){ |
||||
for (j = 0; j < CACHE_OC_NUM_WAYS; j++) { |
||||
addr = CACHE_OC_ADDRESS_ARRAY | (j << CACHE_OC_WAY_SHIFT) |
||||
| (i << CACHE_OC_ENTRY_SHIFT); |
||||
data = inl(addr); |
||||
if (data & CACHE_UPDATED) { |
||||
data &= ~CACHE_UPDATED; |
||||
outl(data, addr); |
||||
} |
||||
} |
||||
} |
||||
back_to_P1(); |
||||
} |
||||
|
||||
|
||||
#define CACHE_ENABLE 0 |
||||
#define CACHE_DISABLE 1 |
||||
|
||||
int cache_control(unsigned int cmd) |
||||
{ |
||||
unsigned long ccr; |
||||
|
||||
jump_to_P2(); |
||||
ccr = inl(CCR); |
||||
|
||||
if (ccr & CCR_CACHE_ENABLE) |
||||
cache_wback_all(); |
||||
|
||||
if (cmd == CACHE_DISABLE) |
||||
outl(CCR_CACHE_STOP, CCR); |
||||
else |
||||
outl(CCR_CACHE_INIT, CCR); |
||||
back_to_P1(); |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,28 @@ |
||||
#
|
||||
# (C) Copyright 2000-2004
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
#
|
||||
# (C) Copyright 2007
|
||||
# Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
|
||||
#
|
||||
# See file CREDITS for list of people who contributed to this
|
||||
# project.
|
||||
#
|
||||
# This program 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 of
|
||||
# the License, or (at your option) any later version.
|
||||
#
|
||||
# This program 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 this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
#
|
||||
PLATFORM_CPPFLAGS += -m4-nofpu
|
||||
PLATFORM_RELFLAGS += -ffixed-r13
|
@ -0,0 +1,83 @@ |
||||
/*
|
||||
* (C) Copyright 2007 |
||||
* Nobuhiro Iwamatsu <iwamatsu@nigauri.org> |
||||
* |
||||
* See file CREDITS for list of people who contributed to this |
||||
* project. |
||||
* |
||||
* This program 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 of |
||||
* the License, or (at your option) any later version. |
||||
* |
||||
* This program 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 this program; if not, write to the Free Software |
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
* MA 02111-1307 USA |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <command.h> |
||||
#include <asm/processor.h> |
||||
|
||||
int checkcpu(void) |
||||
{ |
||||
puts("CPU: SH4\n"); |
||||
return 0; |
||||
} |
||||
|
||||
int cpu_init (void) |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
int cleanup_before_linux (void) |
||||
{ |
||||
disable_interrupts(); |
||||
return 0; |
||||
} |
||||
|
||||
int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) |
||||
{ |
||||
disable_interrupts(); |
||||
reset_cpu (0); |
||||
return 0; |
||||
} |
||||
|
||||
void flush_cache (unsigned long addr, unsigned long size) |
||||
{ |
||||
|
||||
} |
||||
|
||||
void icache_enable (void) |
||||
{ |
||||
cache_control(0); |
||||
} |
||||
|
||||
void icache_disable (void) |
||||
{ |
||||
cache_control(1); |
||||
} |
||||
|
||||
int icache_status (void) |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
void dcache_enable (void) |
||||
{ |
||||
} |
||||
|
||||
void dcache_disable (void) |
||||
{ |
||||
} |
||||
|
||||
int dcache_status (void) |
||||
{ |
||||
return 0; |
||||
} |
@ -0,0 +1,38 @@ |
||||
/*
|
||||
* (C) Copyright 2007 |
||||
* Nobuhiro Iwamatsu <iwamatsu@nigauri.org> |
||||
* |
||||
* See file CREDITS for list of people who contributed to this |
||||
* project. |
||||
* |
||||
* This program 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 of |
||||
* the License, or (at your option) any later version. |
||||
* |
||||
* This program 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 this program; if not, write to the Free Software |
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
* MA 02111-1307 USA |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
|
||||
int interrupt_init (void) |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
void enable_interrupts (void) |
||||
{ |
||||
|
||||
} |
||||
|
||||
int disable_interrupts (void){ |
||||
return 0; |
||||
} |
@ -0,0 +1,74 @@ |
||||
/* |
||||
* (C) Copyright 2007 |
||||
* Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
|
||||
* |
||||
* This program 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 of
|
||||
* the License, or (at your option) any later version. |
||||
* |
||||
* This program 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 this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
* MA 02111-1307 USA |
||||
*/ |
||||
|
||||
#include <config.h> |
||||
#include <version.h> |
||||
|
||||
.text |
||||
.align 2
|
||||
|
||||
.global _start
|
||||
_start: |
||||
mov.l ._lowlevel_init, r0 |
||||
100: bsrf r0 |
||||
nop |
||||
|
||||
bsr 1f |
||||
nop |
||||
1: sts pr, r5 |
||||
mov.l ._reloc_dst, r4 |
||||
add #(_start-1b), r5 |
||||
mov.l ._reloc_dst_end, r6 |
||||
|
||||
2: mov.l @r5+, r1
|
||||
mov.l r1, @r4
|
||||
add #4, r4 |
||||
cmp/hs r6, r4 |
||||
bf 2b |
||||
|
||||
mov.l ._bss_start, r4 |
||||
mov.l ._bss_end, r5 |
||||
mov #0, r1 |
||||
|
||||
3: mov.l r1, @r4 /* bss clear */
|
||||
add #4, r4 |
||||
cmp/hs r5, r4 |
||||
bf 3b |
||||
|
||||
mov.l ._gd_init, r13 /* global data */ |
||||
mov.l ._stack_init, r15 /* stack */ |
||||
|
||||
mov.l ._sh_generic_init, r0 |
||||
jsr @r0
|
||||
nop |
||||
|
||||
loop: |
||||
bra loop |
||||
|
||||
.align 2
|
||||
|
||||
._lowlevel_init: .long (lowlevel_init - (100b + 4)) |
||||
._reloc_dst: .long reloc_dst
|
||||
._reloc_dst_end: .long reloc_dst_end
|
||||
._bss_start: .long bss_start
|
||||
._bss_end: .long bss_end
|
||||
._gd_init: .long (_start - CFG_GBL_DATA_SIZE) |
||||
._stack_init: .long (_start - CFG_GBL_DATA_SIZE - CFG_MALLOC_LEN - 16) |
||||
._sh_generic_init: .long sh_generic_init
|
@ -0,0 +1,98 @@ |
||||
/*
|
||||
* (C) Copyright 2007 |
||||
* Nobobuhiro Iwamatsu <iwamatsu@nigauri.org> |
||||
* |
||||
* (C) Copyright 2003 |
||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de. |
||||
* |
||||
* See file CREDITS for list of people who contributed to this |
||||
* project. |
||||
* |
||||
* This program 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 of |
||||
* the License, or (at your option) any later version. |
||||
* |
||||
* This program 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 this program; if not, write to the Free Software |
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
* MA 02111-1307 USA |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <asm/processor.h> |
||||
|
||||
#define TMU_MAX_COUNTER (~0UL) |
||||
|
||||
static void tmu_timer_start (unsigned int timer) |
||||
{ |
||||
if (timer > 2) |
||||
return; |
||||
|
||||
*((volatile unsigned char *) TSTR) |= (1 << timer); |
||||
} |
||||
|
||||
static void tmu_timer_stop (unsigned int timer) |
||||
{ |
||||
u8 val = *((volatile u8 *)TSTR); |
||||
if (timer > 2) |
||||
return; |
||||
*((volatile unsigned char *)TSTR) = val &~(1 << timer); |
||||
} |
||||
|
||||
int timer_init (void) |
||||
{ |
||||
/* Divide clock by 4 */ |
||||
*(volatile u16 *)TCR0 = 0; |
||||
|
||||
tmu_timer_stop(0); |
||||
tmu_timer_start(0); |
||||
return 0; |
||||
} |
||||
|
||||
/*
|
||||
In theory we should return a true 64bit value (ie something that doesn't |
||||
overflow). However, we don't. Therefore if TMU runs at fastest rate of |
||||
6.75 MHz this value will wrap after u-boot has been running for approx |
||||
10 minutes. |
||||
*/ |
||||
unsigned long long get_ticks (void) |
||||
{ |
||||
return (0 - *((volatile u32 *) TCNT0)); |
||||
} |
||||
|
||||
unsigned long get_timer (unsigned long base) |
||||
{ |
||||
return ((0 - *((volatile u32 *) TCNT0)) - base); |
||||
} |
||||
|
||||
void set_timer (unsigned long t) |
||||
{ |
||||
*((volatile unsigned int *) TCNT0) = (0 - t); |
||||
} |
||||
|
||||
void reset_timer (void) |
||||
{ |
||||
tmu_timer_stop(0); |
||||
set_timer (0); |
||||
tmu_timer_start(0); |
||||
} |
||||
|
||||
void udelay (unsigned long usec) |
||||
{ |
||||
unsigned int start = get_timer (0); |
||||
unsigned int end = start + (usec * ((CFG_HZ + 500000) / 1000000)); |
||||
|
||||
while (get_timer (0) < end) |
||||
continue; |
||||
} |
||||
|
||||
unsigned long get_tbclk (void) |
||||
{ |
||||
return CFG_HZ; |
||||
} |
@ -0,0 +1,50 @@ |
||||
/*
|
||||
* This program 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 of |
||||
* the License, or (at your option) any later version. |
||||
* |
||||
* This program 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 this program; if not, write to the Free Software |
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||
* MA 02111-1307 USA |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <asm/processor.h> |
||||
|
||||
#define WDT_BASE WTCNT |
||||
|
||||
static unsigned char cnt_read (void){ |
||||
return *((volatile unsigned char *)(WDT_BASE + 0x00)); |
||||
} |
||||
|
||||
static unsigned char csr_read (void){ |
||||
return *((volatile unsigned char *)(WDT_BASE + 0x04)); |
||||
} |
||||
|
||||
static void cnt_write (unsigned char value){ |
||||
while (csr_read() & (1 << 5)) { |
||||
/* delay */ |
||||
} |
||||
*((volatile unsigned short *)(WDT_BASE + 0x00)) |
||||
= ((unsigned short) value) | 0x5A00; |
||||
} |
||||
|
||||
static void csr_write (unsigned char value){ |
||||
*((volatile unsigned short *)(WDT_BASE + 0x04)) |
||||
= ((unsigned short) value) | 0xA500; |
||||
} |
||||
|
||||
|
||||
int watchdog_init (void){ return 0; } |
||||
|
||||
void reset_cpu (unsigned long ignored) |
||||
{ |
||||
while(1); |
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue