From patchwork Wed Mar 2 07:39:53 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yoshinori Sato X-Patchwork-Id: 85040 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 9F9ECB7088 for ; Wed, 2 Mar 2011 18:59:23 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id B6BEE28106; Wed, 2 Mar 2011 08:59:14 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id k2txl6L6QxLC; Wed, 2 Mar 2011 08:59:14 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 434CB28107; Wed, 2 Mar 2011 08:59:08 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id ADA9128084 for ; Wed, 2 Mar 2011 08:59:04 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id sVKmN4HeNPDl for ; Wed, 2 Mar 2011 08:59:02 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail2.asahi-net.or.jp (mail2.asahi-net.or.jp [202.224.39.198]) by theia.denx.de (Postfix) with ESMTP id 0E80D280E4 for ; Wed, 2 Mar 2011 08:59:00 +0100 (CET) Received: from sk22g2 (y081184.ppp.asahi-net.or.jp [118.243.81.184]) by mail2.asahi-net.or.jp (Postfix) with ESMTP id 00838D9E18 for ; Wed, 2 Mar 2011 16:41:05 +0900 (JST) Received: from 10A9073.labs.sios.com.ath.cx (unknown [192.168.16.128]) by sk22g2 (Postfix) with ESMTP id 2440D4882 for ; Wed, 2 Mar 2011 16:41:05 +0900 (JST) Date: Wed, 02 Mar 2011 16:39:53 +0900 Message-ID: <87y64y9diu.wl%ysato@users.sourceforge.jp> From: Yoshinori Sato User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?ISO-2022-JP-2?B?R29qGyQoRCtXGyhC?=) APEL/10.8 Emacs/23.2 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) To: u-boot@lists.denx.de MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Subject: [U-Boot] [PATCH 1/5] Add h8300 architecture part1 - core X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.9 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de This part of h8300 cpu support Signed-off-by: Yoshinori Sato --- arch/h8300/config.mk | 35 ++++++++ arch/h8300/cpu/h8300s/Makefile | 53 ++++++++++++ arch/h8300/cpu/h8300s/config.mk | 26 ++++++ arch/h8300/cpu/h8300s/cpu.c | 83 +++++++++++++++++++ arch/h8300/cpu/h8300s/interrupts.c | 38 +++++++++ arch/h8300/cpu/h8300s/start.S | 87 ++++++++++++++++++++ arch/h8300/cpu/h8300s/watchdog.c | 36 ++++++++ arch/h8300/lib/Makefile | 43 ++++++++++ arch/h8300/lib/board.c | 158 ++++++++++++++++++++++++++++++++++++ arch/h8300/lib/bootm.c | 70 ++++++++++++++++ arch/h8300/lib/time.c | 87 ++++++++++++++++++++ 11 files changed, 716 insertions(+), 0 deletions(-) create mode 100644 arch/h8300/config.mk create mode 100644 arch/h8300/cpu/h8300s/Makefile create mode 100644 arch/h8300/cpu/h8300s/config.mk create mode 100644 arch/h8300/cpu/h8300s/cpu.c create mode 100644 arch/h8300/cpu/h8300s/interrupts.c create mode 100644 arch/h8300/cpu/h8300s/start.S create mode 100644 arch/h8300/cpu/h8300s/watchdog.c create mode 100644 arch/h8300/lib/Makefile create mode 100644 arch/h8300/lib/board.c create mode 100644 arch/h8300/lib/bootm.c create mode 100644 arch/h8300/lib/time.c diff --git a/arch/h8300/config.mk b/arch/h8300/config.mk new file mode 100644 index 0000000..11c6a01 --- /dev/null +++ b/arch/h8300/config.mk @@ -0,0 +1,35 @@ +# +# (C) Copyright 2000-2002 +# 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 +# + +ifneq ($(CONFIG_H8300S),) +PLATFORM_CPPFLAGS += -ms -mint32 +PLATFORM_LDFLAGS += -mh8300self +STANDALONE_LOAD_ADDR = 0x00000000 -mh8300self +endif +ifneq ($(CONFIG_H8300H),) +PLATFORM_CPPFLAGS += -mh -mint32 +PLATFORM_LDFLAGS += -mh8300helf +STANDALONE_LOAD_ADDR = 0x00000000 -mh8300helf +endif + +SYM_PREFIX = _ \ No newline at end of file diff --git a/arch/h8300/cpu/h8300s/Makefile b/arch/h8300/cpu/h8300s/Makefile new file mode 100644 index 0000000..4f2ee79 --- /dev/null +++ b/arch/h8300/cpu/h8300s/Makefile @@ -0,0 +1,53 @@ +# +# (C) Copyright 2000-2006 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# Copyright (C) 2011 Yoshinori Sato +# +# 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).o + +SOBJS = start.o +COBJS = cpu.o interrupts.o watchdog.o + +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS)) +SOBJS := $(addprefix $(obj),$(SOBJS)) + +$(LIB): $(OBJS) $(SOBJS) + $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS) + +clean: + rm -f $(SOBJS) $(OBJS) + +distclean: clean + rm -f $(LIB) core *.bak $(obj).depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/arch/h8300/cpu/h8300s/config.mk b/arch/h8300/cpu/h8300s/config.mk new file mode 100644 index 0000000..eee3234 --- /dev/null +++ b/arch/h8300/cpu/h8300s/config.mk @@ -0,0 +1,26 @@ +# +# Copyright (C) 2010 Yoshinori Sato +# +# 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 += -ms +USE_PRIVATE_LIBGCC = $(shell dirname `$(CC) $(CFLAGS) -ms -mint32 -print-libgcc-file-name`) +LDEMUL = -mh8300self +LDFLAGS += $(LDEMUL) diff --git a/arch/h8300/cpu/h8300s/cpu.c b/arch/h8300/cpu/h8300s/cpu.c new file mode 100644 index 0000000..dfae6db --- /dev/null +++ b/arch/h8300/cpu/h8300s/cpu.c @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2010 Yoshinori Sato + * + * 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 +#include +#include +#include + +int checkcpu(void) +{ + puts("CPU: H8300S\n"); + return 0; +} + +int cpu_init(void) +{ + /* TMR and SCI enable */ + outb(0xf0, 0xffff41); + return 0; +} + +int cleanup_before_linux(void) +{ + disable_interrupts(); + return 0; +} + +int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + disable_interrupts(); + reset_cpu(0); + return 0; +} + +void flush_cache(unsigned long addr, unsigned long size) +{ + +} + +void icache_enable(void) +{ +} + +void icache_disable(void) +{ +} + +int icache_status(void) +{ + return 0; +} + +void dcache_enable(void) +{ +} + +void dcache_disable(void) +{ +} + +int dcache_status(void) +{ + return 0; +} diff --git a/arch/h8300/cpu/h8300s/interrupts.c b/arch/h8300/cpu/h8300s/interrupts.c new file mode 100644 index 0000000..7e3adb5 --- /dev/null +++ b/arch/h8300/cpu/h8300s/interrupts.c @@ -0,0 +1,38 @@ +/* + * Copyright 2010 Yoshinori Sato + * + * 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 + +int interrupt_init(void) +{ + return 0; +} + +void enable_interrupts(void) +{ + +} + +int disable_interrupts(void) +{ + return 0; +} diff --git a/arch/h8300/cpu/h8300s/start.S b/arch/h8300/cpu/h8300s/start.S new file mode 100644 index 0000000..620c147 --- /dev/null +++ b/arch/h8300/cpu/h8300s/start.S @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2010 Yoshinori Sato + + * 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 +#include + + .h8300s + + .section .vector,"ax" + .long 0x200 + .long 0x200 +vector = 2 + .rept 126 + .long __ram_vec + (vector * 4) +vector = vector + 1 + .endr + + .global _start + .text + .align 2 +_start: + mov.l #__init_stack,sp + bsr 1f +1: + mov.l @sp+,er0 + mov.l #_lowlevel_init,er1 + sub.l #1b,er1 + add.l er1,er0 + jsr @er0 + +#if !defined(CONFIG_H8300_SIM) +#if defined(CONFIG_SYS_NO_FLASH) + /* .data setup */ + mov.l #__fdata,er5 + mov.l #__ram_data,er6 + mov.l #__sizeof_data,er4 + eepmov.w +#else + /* relocate */ + bsr 1f +1: + mov.l @sp+,er5 + sub.l #1b-_start,er5 + mov.l #CONFIG_SYS_TEXT_BASE,er6 + mov.l #_bss_start,er4 + sub.l er6,er4 + shlr #2,er4 +1: mov.l @er5,er0 + mov.l er0,@er6 + adds #4,er5 + adds #4,er6 + dec.l #1,er4 + bne 1b +#endif + mov.l #_bss_start,er4 + mov.l #_bss_end,er5 + sub er4,er5 + shlr.l #2,er5 + mov #0,er0 +1: mov.l er0,@er4 /* bss clear */ + adds #4,er4 + dec.l #1,er5 + bne 1b +#endif + mov.l #CONFIG_SYS_LOAD_ADDR - CONFIG_SYS_GBL_DATA_SIZE - CONFIG_SYS_MALLOC_LEN,er0 + mov.l er0,sp + jsr @_h8300_generic_init + bra . + + .end + diff --git a/arch/h8300/cpu/h8300s/watchdog.c b/arch/h8300/cpu/h8300s/watchdog.c new file mode 100644 index 0000000..77ce264 --- /dev/null +++ b/arch/h8300/cpu/h8300s/watchdog.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2010 Yoshinori Sato + * + * 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 +#include +#include + +int watchdog_init(void) +{ + return 0; +} + +void reset_cpu(unsigned long ignored) +{ + __raw_writew(0x5a80, 0xffffbc); + __raw_writew(0x5a40, 0xffffbe); + __raw_writew(0xa578, 0xffffbc); + while (1) + ; +} diff --git a/arch/h8300/lib/Makefile b/arch/h8300/lib/Makefile new file mode 100644 index 0000000..14f93e5 --- /dev/null +++ b/arch/h8300/lib/Makefile @@ -0,0 +1,43 @@ +# +# Copyright (C) 2010 Yoshinori Sato +# +# 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$(ARCH).o + +SOBJS-y += + +COBJS-y += board.o +COBJS-y += bootm.o +COBJS-y += time.o + +SRCS := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) +OBJS := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y)) + +$(LIB): $(obj).depend $(OBJS) + $(AR) $(ARFLAGS) $@ $(OBJS) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/arch/h8300/lib/board.c b/arch/h8300/lib/board.c new file mode 100644 index 0000000..54df901 --- /dev/null +++ b/arch/h8300/lib/board.c @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2010 Yoshinori Sato + * + * 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 +#include +#include +#include +#include +#include +#include +#include +#include + +extern int cpu_init(void); +extern int board_init(void); +extern int dram_init(void); +extern int timer_init(void); + +const char version_string[] = U_BOOT_VERSION" ("U_BOOT_DATE" - "U_BOOT_TIME")"; + +#ifndef CONFIG_SYS_NO_FLASH +extern int __bss_start; +unsigned long monitor_flash_len = &__bss_start; +#endif + +#if defined(CONFIG_WATCHDOG) +extern int watchdog_init(void); +extern int watchdog_disable(void); +# define INIT_FUNC_WATCHDOG_INIT watchdog_init, +# define WATCHDOG_DISABLE watchdog_disable +#else +# define INIT_FUNC_WATCHDOG_INIT +# define WATCHDOG_DISABLE +#endif /* CONFIG_WATCHDOG */ + +#if defined(CONFIG_CMD_IDE) +# include +# define INIT_FUNC_IDE_INIT ide_init, +#else +# define INIT_FUNC_IDE_INIT +#endif /* CONFIG_CMD_IDE */ + +gd_t *gd; + +typedef int (init_fnc_t) (void); + +static init_fnc_t * const init_sequence[] = +{ + cpu_init, /* basic cpu dependent setup */ + board_init, /* basic board dependent setup */ + interrupt_init, /* set up exceptions */ + env_init, /* event init */ + serial_init, /* SCI init */ + INIT_FUNC_WATCHDOG_INIT /* watchdog init */ + console_init_f, + display_options, + checkcpu, + checkboard, /* Check support board */ + dram_init, + timer_init, + interrupt_init, + NULL /* Terminate this list */ +}; + + +void h8300_generic_init(gd_t *_gd) +{ + bd_t *bd; + init_fnc_t * const *init_fnc_ptr; + gd = _gd; + memset(gd, 0, CONFIG_SYS_GBL_DATA_SIZE); + + gd->bd = (bd_t *)(gd + 1); /* At end of global data */ + gd->flags = GD_FLG_RELOC; + gd->baudrate = CONFIG_BAUDRATE; + + gd->cpu_clk = CONFIG_SYS_CLK_FREQ; + + bd = gd->bd; +#if defined(CONFIG_SYS_SDRAM_BASE) + bd->bi_memstart = CONFIG_SYS_SDRAM_BASE; + bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE; +#else + bd->bi_memstart = CONFIG_SYS_DRAM_BASE; + bd->bi_memsize = CONFIG_SYS_DRAM_SIZE; +#endif +#if defined(CONFIG_SYS_SRAM_BASE) && defined(CONFIG_SYS_SRAM_SIZE) + bd->bi_sramstart = CONFIG_SYS_SRAM_BASE; + bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE; +#endif + bd->bi_baudrate = CONFIG_BAUDRATE; + + mem_malloc_init((unsigned long)gd + CONFIG_SYS_GBL_DATA_SIZE, + CONFIG_SYS_MALLOC_LEN); + for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { + WATCHDOG_RESET(); + if ((*init_fnc_ptr) () != 0) + hang(); + } +#if !defined(CONFIG_SYS_NO_FLASH) + bd->bi_flashsize = flash_init(); +#endif + env_relocate(); + stdio_init(); + console_init_r(); + +#ifdef CONFIG_WATCHDOG + /* disable watchdog if environment is set */ + { + char *s = getenv("watchdog"); + if (s != NULL) + if (strncmp(s, "off", 3) == 0) + WATCHDOG_DISABLE(); + } +#endif /* CONFIG_WATCHDOG*/ + +#if defined(CONFIG_CMD_NET) + { + char *s; + puts("Net: "); + eth_initialize(gd->bd); + + s = getenv("bootfile"); + if (s != NULL) + copy_filename(BootFile, s, sizeof(BootFile)); + } +#endif /* CONFIG_CMD_NET */ + + while (1) { + WATCHDOG_RESET(); + main_loop(); + } +} + +/***********************************************************************/ + +void hang(void) +{ + puts("Board ERROR\n"); + for (;;) + ; +} diff --git a/arch/h8300/lib/bootm.c b/arch/h8300/lib/bootm.c new file mode 100644 index 0000000..ae1f869 --- /dev/null +++ b/arch/h8300/lib/bootm.c @@ -0,0 +1,70 @@ +/* + * (C) Copyright 2003 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * (c) Copyright 2008 Nobuhiro Iwamatsu + * (c) Copyright 2008 Renesas Solutions Corp. + * + * 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 +#include +#include + +#ifdef CONFIG_SYS_DEBUG +static void hexdump(unsigned char *buf, int len) +{ + int i; + + for (i = 0; i < len; i++) { + if ((i % 16) == 0) + printf("%s%08x: ", i ? "\n" : "", + (unsigned int)&buf[i]); + printf("%02x ", buf[i]); + } + printf("\n"); +} +#endif + +int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images) +{ + /* Linux kernel load address */ + void (*kernel) (void) = (void (*)(void))images->ep; + /* empty_zero_page */ + unsigned char *param + = (unsigned char *)image_get_load(images->legacy_hdr_os); + /* Linux kernel command line */ + char *cmdline = (char *)param + 0x100; + /* PAGE_SIZE */ + unsigned long size = images->ep - (unsigned long)param; + char *bootargs = getenv("bootargs"); + + if ((flag != 0) && (flag != BOOTM_STATE_OS_GO)) + return 1; + + /* Setup parameters */ + memset(param, 0, size); /* Clear zero page */ + strcpy(cmdline, bootargs); + + kernel(); + /* does not return */ + + return 1; +} diff --git a/arch/h8300/lib/time.c b/arch/h8300/lib/time.c new file mode 100644 index 0000000..5f741a6 --- /dev/null +++ b/arch/h8300/lib/time.c @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2010 Yoshinori Sato + * + * (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 +#include +#include + +#define TCR0 (CONFIG_TIMER_BASE + 0) +#define TCR1 (CONFIG_TIMER_BASE + 1) +#define TCSR0 (CONFIG_TIMER_BASE + 2) +#define TCSR1 (CONFIG_TIMER_BASE + 3) +#define TCNT0 (CONFIG_TIMER_BASE + 8) +#define TCNT1 (CONFIG_TIMER_BASE + 9) + +static unsigned long long tick; +static unsigned short last; + +int timer_init(void) +{ + outb(0x04, TCR0); /* 16bit free running */ + outb(0x01, TCR1); /* clk / 8 */ + return 0; +} + +unsigned long long get_ticks(void) +{ + unsigned short now = inw(TCNT0); + if (now < last) + tick += (0x10000 - last) + now; + else + tick += now - last; + last = now; + return tick; +} + +ulong get_timer(ulong base) +{ + return get_ticks() / (CONFIG_SYS_CLK_FREQ / 1000) - base; +} + +void set_timer(ulong t) +{ + outw((u16) t, TCNT0); +} + +void reset_timer(void) +{ + last = 0; + outb(0x00, TCR1); + outw(0, TCNT0); + outb(0x01, TCR1); +} + +void __udelay(unsigned long usec) +{ + unsigned long long end = get_ticks() + + (usec * (CONFIG_SYS_CLK_FREQ / 8000000)); + + while (get_ticks() < end); +} + +unsigned long get_tbclk(void) +{ + return CONFIG_SYS_CLK_FREQ / 8; +}