[PATCH 2/2] Initial bsp for Tiny6410

Peng Fan van.freenix at gmail.com
Wed Apr 17 08:58:57 UTC 2013


Hi Dhananjay,



2013/4/17 Dhananjay Balan <mb.dhananjay at gmail.com>

>
> Hi Peng,
>
> On 17 April 2013 11:35, Peng Fan <van.freenix at gmail.com> wrote:
>
>> If any questions, you may post on the mailing list not just me.
>> My Tiny6410 board is developed by Firendly ARM.
>>
>
> What I have here is a Witech OK6410 [1] I see both hardware uses the same
> core modules, so Will it be possible for me to use this patch to run RTEMS
> over this SBC?
>

Yes, it is possible to run on your OK6410. I do not know the uboot
difference
between OK6410 and Tiny6410, so some paraments for configurating the timer
may be adjusted.


>
>
>> It's web is here: http://www.friendlyarm.net/products/tiny6410
>> The patch now is simple, only support timer and serial, with most of
>> the hardware configuration done in uboot.Now, I am also trying to
>> add nand support. It does run on my board. You may try.
>>
>
> Can you document the steps to load the image into the board and also the
> u-boot tweaks you did somewhere in wiki?
>

I use the original uboot that released by Friendly ARM for this board and I
think you may not modify the uboot. Anyway I'll do some work to migrate the
hardware configuation from uboot to rtems. The patch that I have mailed u
include a README
file. It shows how to configure, download to board and run.

>   Any problem, post it to the mailing list. Thanks.
>>
>> Regards,
>> Peng.
>>
>>
>>
>> 2013/4/17 Dhananjay Balan <mb.dhananjay at gmail.com>
>>
>>> Hi,
>>> I have with me an Chineese ARM SBC built around Samsung 6410. It is
>>> manufactured by witech Inc. Does this mean I can run RTEMS on it?
>>> On Apr 17, 2013 11:01 AM, "Peng Fan" <van.freenix at gmail.com> wrote:
>>>
>>>> ---
>>>>  c/src/lib/libbsp/arm/Makefile.am                   |    1 +
>>>>  c/src/lib/libbsp/arm/acinclude.m4                  |    2 +
>>>>  c/src/lib/libbsp/arm/preinstall.am                 |    4 +
>>>>  c/src/lib/libbsp/arm/shared/startup/linkcmds.armv6 |   26 +++
>>>>  c/src/lib/libbsp/arm/tiny6410/Makefile.am          |   62 ++++++
>>>>  c/src/lib/libbsp/arm/tiny6410/README               |   23 ++
>>>>  c/src/lib/libbsp/arm/tiny6410/bsp_specs            |   13 ++
>>>>  c/src/lib/libbsp/arm/tiny6410/configure.ac         |   23 ++
>>>>  c/src/lib/libbsp/arm/tiny6410/console/uart.c       |  229
>>>> ++++++++++++++++++++
>>>>  c/src/lib/libbsp/arm/tiny6410/debug/debug.c        |   60 +++++
>>>>  c/src/lib/libbsp/arm/tiny6410/include/bsp.h        |   60 +++++
>>>>  .../libbsp/arm/tiny6410/make/custom/tiny6410.cfg   |   21 ++
>>>>  c/src/lib/libbsp/arm/tiny6410/preinstall.am        |   83 +++++++
>>>>  c/src/lib/libbsp/arm/tiny6410/sh-hello             |   13 ++
>>>>  c/src/lib/libbsp/arm/tiny6410/startup/bspidle.c    |   25 +++
>>>>  c/src/lib/libbsp/arm/tiny6410/startup/bspreset.c   |   37 ++++
>>>>  c/src/lib/libbsp/arm/tiny6410/startup/bspstart.c   |   83 +++++++
>>>>  .../libbsp/arm/tiny6410/startup/bspstarthooks.c    |  146 +++++++++++++
>>>>  c/src/lib/libbsp/arm/tiny6410/startup/linkcmds     |   25 +++
>>>>  c/src/lib/libbsp/arm/tiny6410/startup/memmap.c     |   29 +++
>>>>  c/src/lib/libcpu/arm/Makefile.am                   |   25 +++
>>>>  c/src/lib/libcpu/arm/configure.ac                  |    2 +
>>>>  c/src/lib/libcpu/arm/preinstall.am                 |   13 ++
>>>>  c/src/lib/libcpu/arm/s3c64xx/clock/clockdrv.c      |  141 ++++++++++++
>>>>  c/src/lib/libcpu/arm/s3c64xx/clock/support.c       |   51 +++++
>>>>  c/src/lib/libcpu/arm/s3c64xx/include/s3c6410.h     |  211
>>>> ++++++++++++++++++
>>>>  c/src/lib/libcpu/arm/s3c64xx/include/s3c64xx.h     |   15 ++
>>>>  c/src/lib/libcpu/arm/s3c64xx/irq/irq.c             |   79 +++++++
>>>>  c/src/lib/libcpu/arm/s3c64xx/irq/irq.h             |  100 +++++++++
>>>>  c/src/lib/libcpu/arm/shared/include/arm-cp15.h     |   17 ++
>>>>  30 files changed, 1619 insertions(+)
>>>>  create mode 100644 c/src/lib/libbsp/arm/shared/startup/linkcmds.armv6
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/Makefile.am
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/README
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/bsp_specs
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/configure.ac
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/console/uart.c
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/debug/debug.c
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/include/bsp.h
>>>>  create mode 100644
>>>> c/src/lib/libbsp/arm/tiny6410/make/custom/tiny6410.cfg
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/preinstall.am
>>>>  create mode 100755 c/src/lib/libbsp/arm/tiny6410/sh-hello
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/startup/bspidle.c
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/startup/bspreset.c
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/startup/bspstart.c
>>>>  create mode 100644
>>>> c/src/lib/libbsp/arm/tiny6410/startup/bspstarthooks.c
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/startup/linkcmds
>>>>  create mode 100644 c/src/lib/libbsp/arm/tiny6410/startup/memmap.c
>>>>  create mode 100644 c/src/lib/libcpu/arm/s3c64xx/clock/clockdrv.c
>>>>  create mode 100644 c/src/lib/libcpu/arm/s3c64xx/clock/support.c
>>>>  create mode 100644 c/src/lib/libcpu/arm/s3c64xx/include/s3c6410.h
>>>>  create mode 100644 c/src/lib/libcpu/arm/s3c64xx/include/s3c64xx.h
>>>>  create mode 100644 c/src/lib/libcpu/arm/s3c64xx/irq/irq.c
>>>>  create mode 100644 c/src/lib/libcpu/arm/s3c64xx/irq/irq.h
>>>>
>>>> diff --git a/c/src/lib/libbsp/arm/Makefile.am
>>>> b/c/src/lib/libbsp/arm/Makefile.am
>>>> index 9783354..bd2ee0c 100644
>>>> --- a/c/src/lib/libbsp/arm/Makefile.am
>>>> +++ b/c/src/lib/libbsp/arm/Makefile.am
>>>> @@ -10,6 +10,7 @@ include_bsp_HEADERS = shared/include/linker-symbols.h
>>>>
>>>>  dist_project_lib_DATA = shared/startup/linkcmds.base
>>>>  dist_project_lib_DATA += shared/startup/linkcmds.armv4
>>>> +dist_project_lib_DATA += shared/startup/linkcmds.armv6
>>>>  dist_project_lib_DATA += shared/startup/linkcmds.armv7m
>>>>
>>>>  EXTRA_DIST =
>>>> diff --git a/c/src/lib/libbsp/arm/acinclude.m4
>>>> b/c/src/lib/libbsp/arm/acinclude.m4
>>>> index 9512b26..277c144 100644
>>>> --- a/c/src/lib/libbsp/arm/acinclude.m4
>>>> +++ b/c/src/lib/libbsp/arm/acinclude.m4
>>>> @@ -30,6 +30,8 @@ AC_DEFUN([RTEMS_CHECK_BSPDIR],
>>>>      AC_CONFIG_SUBDIRS([smdk2410]);;
>>>>    stm32f4 )
>>>>      AC_CONFIG_SUBDIRS([stm32f4]);;
>>>> +  tiny6410 )
>>>> +    AC_CONFIG_SUBDIRS([tiny6410]);;
>>>>    *)
>>>>      AC_MSG_ERROR([Invalid BSP]);;
>>>>    esac
>>>> diff --git a/c/src/lib/libbsp/arm/preinstall.am b/c/src/lib/libbsp/arm/
>>>> preinstall.am
>>>> index 3e66ebe..75e8dfa 100644
>>>> --- a/c/src/lib/libbsp/arm/preinstall.am
>>>> +++ b/c/src/lib/libbsp/arm/preinstall.am
>>>> @@ -35,6 +35,10 @@ $(PROJECT_LIB)/linkcmds.armv4:
>>>> shared/startup/linkcmds.armv4 $(PROJECT_LIB)/$(di
>>>>         $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.armv4
>>>>  PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.armv4
>>>>
>>>> +$(PROJECT_LIB)/linkcmds.armv6: shared/startup/linkcmds.armv6
>>>> $(PROJECT_LIB)/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.armv6
>>>> +PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.armv6
>>>> +
>>>>  $(PROJECT_LIB)/linkcmds.armv7m: shared/startup/linkcmds.armv7m
>>>> $(PROJECT_LIB)/$(dirstamp)
>>>>         $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.armv7m
>>>>  PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.armv7m
>>>> diff --git a/c/src/lib/libbsp/arm/shared/startup/linkcmds.armv6
>>>> b/c/src/lib/libbsp/arm/shared/startup/linkcmds.armv6
>>>> new file mode 100644
>>>> index 0000000..16fa3ef
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/shared/startup/linkcmds.armv6
>>>> @@ -0,0 +1,26 @@
>>>> +/**
>>>> + * @file
>>>> + *
>>>> + * @ingroup bsp_linker
>>>> + *
>>>> + * @brief Linker command file for ARMv6 architecture.
>>>> + */
>>>> +
>>>> +/*
>>>> + * Copyright (c) 2010 embedded brains GmbH.  All rights reserved.
>>>> + *
>>>> + *  embedded brains GmbH
>>>> + *  Obere Lagerstr. 30
>>>> + *  82178 Puchheim
>>>> + *  Germany
>>>> + *  <rtems at embedded-brains.de>
>>>> + *
>>>> + * The license and distribution terms for this file may be
>>>> + * found in the file LICENSE in this distribution or at
>>>> + * http://www.rtems.com/license/LICENSE.
>>>> + */
>>>> +
>>>> +bsp_stack_svc_size = DEFINED (bsp_stack_svc_size) ? bsp_stack_svc_size
>>>> : 4096;
>>>> +bsp_stack_svc_size = ALIGN (bsp_stack_svc_size, bsp_stack_align);
>>>> +
>>>> +INCLUDE linkcmds.base
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/Makefile.am
>>>> b/c/src/lib/libbsp/arm/tiny6410/Makefile.am
>>>> new file mode 100644
>>>> index 0000000..e49dc3a
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/Makefile.am
>>>> @@ -0,0 +1,62 @@
>>>> +ACLOCAL_AMFLAGS = -I ../../../../aclocal
>>>> +
>>>> +include $(top_srcdir)/../../../../automake/compile.am
>>>> +
>>>> +include_bspdir = $(includedir)/bsp
>>>> +
>>>> +dist_project_lib_DATA = bsp_specs
>>>> +
>>>> +include_HEADERS = include/bsp.h
>>>> +include_HEADERS += ../../shared/include/tm27.h
>>>> +
>>>> +include_bsp_HEADERS = ../shared/include/start.h
>>>> +include_bsp_HEADERS += ../shared/include/linker-symbols.h
>>>> +
>>>> +nodist_include_HEADERS = include/bspopts.h
>>>> +nodist_include_bsp_HEADERS = ../../shared/include/bootcard.h
>>>> +DISTCLEANFILES = include/bspopts.h
>>>> +
>>>> +nodist_include_HEADERS += ../../shared/include/coverhd.h
>>>> +
>>>> +noinst_LIBRARIES = libbspstart.a
>>>> +libbspstart_a_SOURCES = ../shared/start/start.S
>>>> +#libbspstart_a_SOURCES = start/start.S
>>>> +project_lib_DATA = start.$(OBJEXT)
>>>> +
>>>> +dist_project_lib_DATA += startup/linkcmds
>>>> +
>>>> +noinst_LIBRARIES += libbsp.a
>>>> +libbsp_a_SOURCES =
>>>> +
>>>> +# startup
>>>> +libbsp_a_SOURCES += ../shared/startup/bsp-start-memcpy.S
>>>> +libbsp_a_SOURCES += ../../shared/bsplibc.c ../../shared/bsppost.c \
>>>> +    ../../shared/bsppredriverhook.c ../../shared/bspgetworkarea.c \
>>>> +    ../../shared/bsppretaskinghook.c startup/bspstart.c
>>>> startup/bspidle.c \
>>>> +    ../../shared/bspclean.c startup/bspreset.c \
>>>> +    startup/memmap.c ../../shared/bootcard.c ../../shared/sbrk.c \
>>>> +    ../../shared/gnatinstallhandler.c startup/bspstarthooks.c
>>>> +# low-level debug
>>>> +libbsp_a_SOURCES += debug/debug.c
>>>> +# console
>>>> +libbsp_a_SOURCES += console/uart.c ../../shared/console.c \
>>>> +    ../../shared/console_select.c  ../../shared/console_control.c \
>>>> +    ../../shared/console_read.c ../../shared/console_write.c
>>>> +# IRQ
>>>> +include_bsp_HEADERS += ../../shared/include/irq-generic.h \
>>>> +       ../../shared/include/irq-info.h
>>>> +libbsp_a_SOURCES += ../../shared/src/irq-default-handler.c
>>>> +libbsp_a_SOURCES += ../../shared/src/irq-generic.c
>>>> +libbsp_a_SOURCES += ../../shared/src/irq-info.c
>>>> +libbsp_a_SOURCES += ../../shared/src/irq-legacy.c
>>>> +libbsp_a_SOURCES += ../../shared/src/irq-server.c
>>>> +libbsp_a_SOURCES += ../../shared/src/irq-shell.c
>>>> +# abort
>>>> +libbsp_a_SOURCES += ../shared/abort/abort.c
>>>> +
>>>> +libbsp_a_LIBADD = ../../../libcpu/@RTEMS_CPU@/shared/arm920.rel \
>>>> +    ../../../libcpu/@RTEMS_CPU@/s3c64xx/clock.rel \
>>>> +    ../../../libcpu/@RTEMS_CPU@/s3c64xx/irq.rel
>>>> +
>>>> +include $(srcdir)/preinstall.am
>>>> +include $(top_srcdir)/../../../../automake/local.am
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/README
>>>> b/c/src/lib/libbsp/arm/tiny6410/README
>>>> new file mode 100644
>>>> index 0000000..ae936e5
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/README
>>>> @@ -0,0 +1,23 @@
>>>> +This is the BSP for FriendlyARM tiny6410 board, a single board
>>>> +computer using the Samsung S3C6410 SoC CPU.
>>>> +S3C6410 is an arm1176jzf-s processor. About the mmu related,
>>>> +still use the arm920 mmu management.This may be seperated,
>>>> +for there may some difference between 920 and 1176jzf-s.
>>>> +
>>>> +Most of the hardware configuration is done in uboot.This maybe
>>>> +migrated to rtems from uboot in future.
>>>> +
>>>> +Now only serial and timer is supported, other IP modules' driver
>>>> +will be added in future.
>>>> +
>>>> +hello.exe ticker.exe nsecs.exe runs. Others have not been tested.
>>>> +
>>>> +How to use this bsp
>>>> +1. When downloaded the source, first "bootstrap -c; bootstrap -p;
>>>> +bootstrap"
>>>> +2. Look at the sh-hello script to know how to configure for this bsp
>>>> +4. use dnw to download the bin file to 0xC0104000
>>>> +        MINI6410 # dnw 0xc0104000
>>>> +        When finished download, use go command to run the bin file
>>>> +        MINI6410 # go 0xc0104000
>>>> +
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/bsp_specs
>>>> b/c/src/lib/libbsp/arm/tiny6410/bsp_specs
>>>> new file mode 100644
>>>> index 0000000..082653a
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/bsp_specs
>>>> @@ -0,0 +1,13 @@
>>>> +%rename endfile old_endfile
>>>> +%rename startfile old_startfile
>>>> +%rename link old_link
>>>> +
>>>> +*startfile:
>>>> +%{!qrtems: %(old_startfile)} \
>>>> +%{!nostdlib: %{qrtems: start.o%s crti.o%s crtbegin.o%s -e _start}}
>>>> +
>>>> +*link:
>>>> +%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N}
>>>> +
>>>> +*endfile:
>>>> +%{!qrtems: *(old_endfiles)} %{qrtems: crtend.o%s crtn.o%s }
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/configure.acb/c/src/lib/libbsp/arm/tiny6410/
>>>> configure.ac
>>>> new file mode 100644
>>>> index 0000000..11966e0
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/configure.ac
>>>> @@ -0,0 +1,23 @@
>>>> +## Process this file with autoconf to produce a configure script.
>>>> +
>>>> +AC_PREREQ([2.69])
>>>> +AC_INIT([rtems-c-src-lib-libbsp-arm-tiny6410],[_RTEMS_VERSION],[
>>>> http://www.rtems.org/bugzilla])
>>>> +AC_CONFIG_SRCDIR([bsp_specs])
>>>> +RTEMS_TOP(../../../../../..)
>>>> +
>>>> +RTEMS_CANONICAL_TARGET_CPU
>>>> +AM_INIT_AUTOMAKE([no-define nostdinc foreign 1.12.2])
>>>> +RTEMS_BSP_CONFIGURE
>>>> +
>>>> +RTEMS_PROG_CC_FOR_TARGET
>>>> +RTEMS_CANONICALIZE_TOOLS
>>>> +RTEMS_PROG_CCAS
>>>> +
>>>> +RTEMS_CHECK_NETWORKING
>>>> +AM_CONDITIONAL(HAS_NETWORKING,test "$HAS_NETWORKING" = "yes")
>>>> +
>>>> +RTEMS_BSP_CLEANUP_OPTIONS(0, 1)
>>>> +
>>>> +# Explicitly list all Makefiles here
>>>> +AC_CONFIG_FILES([Makefile])
>>>> +AC_OUTPUT
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/console/uart.c
>>>> b/c/src/lib/libbsp/arm/tiny6410/console/uart.c
>>>> new file mode 100644
>>>> index 0000000..46b5edb
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/console/uart.c
>>>> @@ -0,0 +1,229 @@
>>>> +/*
>>>> + *  console driver for S3C2400 UARTs
>>>> + *
>>>> + *  This driver uses the shared console driver in
>>>> + *  ...../libbsp/shared/console.c
>>>> + *
>>>> + *  If you want the driver to be interrupt driven, you
>>>> + *  need to write the ISR, and in the ISR insert the
>>>> + *  chars into termios's queue.
>>>> + *
>>>> + *  Copyright (c) 2004 Cogent Computer Systems
>>>> + *  Written by Jay Monkman <jtm at lopingdog.com>
>>>> + *
>>>> + *  The license and distribution terms for this file may be
>>>> + *  found in the file LICENSE in this distribution or at
>>>> + *  http://www.rtems.com/license/LICENSE.
>>>> + *
>>>> + *
>>>> + * 1. Modified from S3C2400    Peng Fan van.freenix at gmail.com
>>>> +*/
>>>> +#include <bsp.h>                /* Must be before libio.h */
>>>> +#include <rtems/libio.h>
>>>> +#include <termios.h>
>>>> +#include <rtems/bspIo.h>
>>>> +
>>>> +/* Put the CPU (or UART) specific header file #include here */
>>>> +#include <s3c64xx.h>
>>>> +#include <libchip/serial.h>
>>>> +#include <libchip/sersupp.h>
>>>> +
>>>> +/* How many serial ports? */
>>>> +#define NUM_DEVS       1
>>>> +
>>>> +int     uart_poll_read(int minor);
>>>> +
>>>> +int dbg_dly;
>>>> +
>>>> +/* static function prototypes */
>>>> +static int     uart_first_open(int major, int minor, void *arg);
>>>> +static int     uart_last_close(int major, int minor, void *arg);
>>>> +static int     uart_read(int minor);
>>>> +static ssize_t uart_write(int minor, const char *buf, size_t len);
>>>> +static void    uart_init(int minor);
>>>> +static void    uart_write_polled(int minor, char c);
>>>> +static int     uart_set_attributes(int minor, const struct termios *t);
>>>> +
>>>> +/* These are used by code in console.c */
>>>> +unsigned long Console_Configuration_Count = NUM_DEVS;
>>>> +
>>>> +/* Pointers to functions for handling the UART. */
>>>> +const console_fns uart_fns =
>>>> +{
>>>> +    libchip_serial_default_probe,
>>>> +    uart_first_open,
>>>> +    uart_last_close,
>>>> +    uart_read,
>>>> +    uart_write,
>>>> +    uart_init,
>>>> +    uart_write_polled,   /* not used in this driver */
>>>> +    uart_set_attributes,
>>>> +    FALSE      /* TRUE if interrupt driven, FALSE if not. */
>>>> +};
>>>> +
>>>> +/*
>>>> + * There's one item in array for each UART.
>>>> + *
>>>> + * Some of these fields are marked "NOT USED". They are not used
>>>> + * by console.c, but may be used by drivers in libchip
>>>> + *
>>>> + */
>>>> +console_tbl Console_Configuration_Ports[] = {
>>>> +    {
>>>> +        "/dev/com0",                      /* sDeviceName */
>>>> +        SERIAL_CUSTOM,                    /* deviceType */
>>>> +        &uart_fns,                        /* pDeviceFns */
>>>> +        NULL,                             /* deviceProbe */
>>>> +        NULL,                             /* pDeviceFlow */
>>>> +        0,                                /* ulMargin - NOT USED */
>>>> +        0,                                /* ulHysteresis - NOT USED */
>>>> +        NULL,                             /* pDeviceParams */
>>>> +        0,                                /* ulCtrlPort1  - NOT USED */
>>>> +        0,                                /* ulCtrlPort2  - NOT USED */
>>>> +        0,                                /* ulDataPort  - NOT USED */
>>>> +        NULL,                             /* getRegister - NOT USED */
>>>> +        NULL,                             /* setRegister - NOT USED */
>>>> +        NULL,                             /* getData - NOT USED */
>>>> +        NULL,                             /* setData - NOT USED */
>>>> +        0,                                /* ulClock - NOT USED */
>>>> +        0                                 /* ulIntVector - NOT USED */
>>>> +    }
>>>> +};
>>>> +
>>>> +/*********************************************************************/
>>>> +/* Functions called via termios callbacks (i.e. the ones in uart_fns */
>>>> +/*********************************************************************/
>>>> +
>>>> +/*
>>>> + * This is called the first time each device is opened. If the driver
>>>> + * is interrupt driven, you should enable interrupts here. Otherwise,
>>>> + * it's probably safe to do nothing.
>>>> + *
>>>> + * Since micromonitor already set up the UART, we do nothing.
>>>> + */
>>>> +static int uart_first_open(int major, int minor, void *arg)
>>>> +{
>>>> +    return 0;
>>>> +}
>>>> +
>>>> +
>>>> +/*
>>>> + * This is called the last time each device is closed. If the driver
>>>> + * is interrupt driven, you should disable interrupts here. Otherwise,
>>>> + * it's probably safe to do nothing.
>>>> + */
>>>> +static int uart_last_close(int major, int minor, void *arg)
>>>> +{
>>>> +    return 0;
>>>> +}
>>>> +
>>>> +
>>>> +/*
>>>> + * Read one character from UART.
>>>> + *
>>>> + * Return -1 if there's no data, otherwise return
>>>> + * the character in lowest 8 bits of returned int.
>>>> + */
>>>> +static int uart_read(int minor)
>>>> +{
>>>> +    char c;
>>>> +
>>>> +    if (minor == 0) {
>>>> +        if (rUTRSTAT0 & 0x1) {
>>>> +            c = rURXH0 & 0xff;
>>>> +            return c;
>>>> +        } else {
>>>> +            return -1;
>>>> +        }
>>>> +    } else {
>>>> +        printk("Unknown console minor number: %d\n", minor);
>>>> +        return -1;
>>>> +    }
>>>> +
>>>> +}
>>>> +
>>>> +
>>>> +/*
>>>> + * Write buffer to UART
>>>> + *
>>>> + * return 1 on success, -1 on error
>>>> + */
>>>> +static ssize_t uart_write(int minor, const char *buf, size_t len)
>>>> +{
>>>> +    int i;
>>>> +
>>>> +    if (minor == 0) {
>>>> +        for (i = 0; i < len; i++) {
>>>> +            /* Wait for fifo to have room */
>>>> +            while(!(rUTRSTAT0 & 0x2)) {
>>>> +                continue;
>>>> +            }
>>>> +
>>>> +           rUTXH0 = (char) buf[i];
>>>> +        }
>>>> +    } else {
>>>> +        printk("Unknown console minor number: %d\n", minor);
>>>> +        return -1;
>>>> +    }
>>>> +
>>>> +    return 1;
>>>> +}
>>>> +
>>>> +
>>>> +/* Set up the UART. */
>>>> +static void uart_init(int minor)
>>>> +{
>>>> +       int i;
>>>> +       unsigned int reg = 0;
>>>> +       /* Migrate the configuration from uboot in future */
>>>> +       Uart_SendString(__func__);
>>>> +}
>>>> +
>>>> +/* I'm not sure this is needed for the shared console driver. */
>>>> +static void    uart_write_polled(int minor, char c)
>>>> +{
>>>> +    uart_write(minor, &c, 1);
>>>> +}
>>>> +
>>>> +/* This is for setting baud rate, bits, etc. */
>>>> +static int     uart_set_attributes(int minor, const struct termios *t)
>>>> +{
>>>> +    return 0;
>>>> +}
>>>> +
>>>>
>>>> +/***********************************************************************/
>>>> +/*
>>>> + * The following functions are not used by TERMIOS, but other RTEMS
>>>> + * functions use them instead.
>>>> + */
>>>>
>>>> +/***********************************************************************/
>>>> +/*
>>>> + * Read from UART. This is used in the exit code, and can't
>>>> + * rely on interrupts.
>>>> +*/
>>>> +int uart_poll_read(int minor)
>>>> +{
>>>> +    return uart_read(minor);
>>>> +}
>>>> +
>>>> +
>>>> +/*
>>>> + * Write a character to the console. This is used by printk() and
>>>> + * maybe other low level functions. It should not use interrupts or any
>>>> + * RTEMS system calls. It needs to be very simple
>>>> + */
>>>> +static void _BSP_put_char( char c ) {
>>>> +    uart_write_polled(0, c);
>>>> +    if (c == '\n') {
>>>> +        uart_write_polled(0, '\r');
>>>> +    }
>>>> +}
>>>> +
>>>> +BSP_output_char_function_type BSP_output_char = _BSP_put_char;
>>>> +
>>>> +static int _BSP_get_char(void)
>>>> +{
>>>> +  return uart_poll_read(0);
>>>> +}
>>>> +
>>>> +BSP_polling_getchar_function_type BSP_poll_char = _BSP_get_char;
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/debug/debug.c
>>>> b/c/src/lib/libbsp/arm/tiny6410/debug/debug.c
>>>> new file mode 100644
>>>> index 0000000..139b21e
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/debug/debug.c
>>>> @@ -0,0 +1,60 @@
>>>> +/**
>>>> + * @file
>>>> + *
>>>> + * @ingroup s3c64xx
>>>> + *
>>>> + * @brief Low level Debug code.
>>>> + */
>>>> +
>>>> +/*
>>>> + *
>>>> + * The license and distribution terms for this file may be
>>>> + * found in the file LICENSE in this distribution or at
>>>> + * http://www.rtems.com/license/LICENSE.
>>>> + *
>>>> + */
>>>> +
>>>> +#include <bsp.h>
>>>> +#include <s3c64xx.h>
>>>> +void debug_led(uint32_t val)
>>>> +{
>>>> +       uint32_t *addr = (uint32_t *)0x7f008800;
>>>> +       *addr = val;
>>>> +}
>>>> +
>>>> +
>>>> +static void Delay(void)
>>>> +{
>>>> +    volatile int i;
>>>> +
>>>> +    for(i=0 ; i < 1000 ; i++)
>>>> +    {
>>>> +    }
>>>> +}
>>>> +void Uart_SendByte(int data)
>>>> +{
>>>> +    while(!(rUTRSTAT0 & 0x2));   //Wait until THR is empty.
>>>> +    Delay();
>>>> +    rUTXH0 = (unsigned char)data;
>>>> +}
>>>> +
>>>> +void Uart_SendString(char *pt)
>>>> +{
>>>> +    while(*pt)
>>>> +        Uart_SendByte(*pt++);
>>>> +    Uart_SendByte('\r');
>>>> +    Uart_SendByte('\n');
>>>> +}
>>>> +void printhex(unsigned int data)
>>>> +{
>>>> +       int i = 0,a = 0;
>>>> +       for (i = 0; i < 8; i++) {
>>>> +               a = (data>>(32-(i+1)*4))&0xf;
>>>> +               if (((a<=9)&&(a>=0)))
>>>> +                       Uart_SendByte(a + 0x30);
>>>> +               else if ((a <= 0xf) && (a >= 0xa))
>>>> +                       Uart_SendByte(a-0xa+0x61);
>>>> +       }
>>>> +       Uart_SendByte('\r');
>>>> +       Uart_SendByte('\n');
>>>> +}
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/include/bsp.h
>>>> b/c/src/lib/libbsp/arm/tiny6410/include/bsp.h
>>>> new file mode 100644
>>>> index 0000000..699fdab
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/include/bsp.h
>>>> @@ -0,0 +1,60 @@
>>>> +/**
>>>> + *  @file
>>>> + *
>>>> + *  This include file contains definitions related to the GP32 BSP.
>>>> + */
>>>> +
>>>> +/*
>>>> + *  Copyright (c) 2013
>>>> + *  ASIC Engineering Center
>>>> + *  Nanjing, China
>>>> + *  <van.freenix at gmail.com>
>>>> + *
>>>> + *  The license and distribution terms for this file may be
>>>> + *  found in the file LICENSE in this distribution or at
>>>> + *  http://www.rtems.com/license/LICENSE.
>>>> + */
>>>> +
>>>> +#ifndef _BSP_H
>>>> +#define _BSP_H
>>>> +
>>>> +#ifdef __cplusplus
>>>> +extern "C" {
>>>> +#endif
>>>> +
>>>> +#include <bspopts.h>
>>>> +#include <bsp/default-initial-extension.h>
>>>> +
>>>> +#include <rtems.h>
>>>> +#include <rtems/iosupp.h>
>>>> +#include <rtems/console.h>
>>>> +#include <rtems/clockdrv.h>
>>>> +#include <s3c64xx.h>
>>>> +
>>>> +#define BSP_FEATURE_IRQ_EXTENSION
>>>> +
>>>> +
>>>> +/*functions to get the differents s3c2400 clks*/
>>>> +uint32_t get_FCLK(void);
>>>> +uint32_t get_HCLK(void);
>>>> +uint32_t get_PCLK(void);
>>>> +uint32_t get_UCLK(void);
>>>> +
>>>> +
>>>> +
>>>> +
>>>> +/*
>>>> + *  This BSP provides its own IDLE thread to override the RTEMS one.
>>>> + *  So we prototype it and define the constant confdefs.h expects
>>>> + *  to configure a BSP specific one.
>>>> + */
>>>> +void *bsp_idle_thread(uintptr_t ignored);
>>>> +
>>>> +#define BSP_IDLE_TASK_BODY bsp_idle_thread
>>>> +
>>>> +#ifdef __cplusplus
>>>> +}
>>>> +#endif
>>>> +
>>>> +#endif /* _BSP_H */
>>>> +
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/make/custom/tiny6410.cfg
>>>> b/c/src/lib/libbsp/arm/tiny6410/make/custom/tiny6410.cfg
>>>> new file mode 100644
>>>> index 0000000..44b0ca6
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/make/custom/tiny6410.cfg
>>>> @@ -0,0 +1,21 @@
>>>> +#
>>>> +#  Config file for ARM S3C6410
>>>> +#
>>>> +
>>>> +include $(RTEMS_ROOT)/make/custom/default.cfg
>>>> +
>>>> +RTEMS_CPU=arm
>>>> +RTEMS_CPU_MODEL=s3c6410
>>>> +
>>>> +#  This contains the compiler options necessary to select the CPU model
>>>> +#  and (hopefully) optimize for it.
>>>> +#
>>>> +CPU_CFLAGS = -mstructure-size-boundary=32 -mcpu=arm1176jzf-s -mfpu=vfp
>>>> -mfloat-abi=soft -DCPU_S3C6410
>>>> +
>>>> +# optimize flag: typically -O2
>>>> +CFLAGS_OPTIMIZE_V = -O2 -g
>>>> +
>>>> +define bsp-post-link
>>>> +       $(OBJCOPY) -O binary $(basename $@).exe $(basename $@)$(DOWNEXT)
>>>> +       $(default-bsp-post-link)
>>>> +endef
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/preinstall.amb/c/src/lib/libbsp/arm/tiny6410/
>>>> preinstall.am
>>>> new file mode 100644
>>>> index 0000000..ca20008
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/preinstall.am
>>>> @@ -0,0 +1,83 @@
>>>> +## Automatically generated by ampolish3 - Do not edit
>>>> +
>>>> +if AMPOLISH3
>>>> +$(srcdir)/preinstall.am: Makefile.am
>>>> +       $(AMPOLISH3) $(srcdir)/Makefile.am > $(srcdir)/preinstall.am
>>>> +endif
>>>> +
>>>> +PREINSTALL_DIRS =
>>>> +DISTCLEANFILES += $(PREINSTALL_DIRS)
>>>> +
>>>> +all-local: $(TMPINSTALL_FILES)
>>>> +
>>>> +TMPINSTALL_FILES =
>>>> +CLEANFILES = $(TMPINSTALL_FILES)
>>>> +
>>>> +all-am: $(PREINSTALL_FILES)
>>>> +
>>>> +PREINSTALL_FILES =
>>>> +CLEANFILES += $(PREINSTALL_FILES)
>>>> +
>>>> +$(PROJECT_LIB)/$(dirstamp):
>>>> +       @$(MKDIR_P) $(PROJECT_LIB)
>>>> +       @: > $(PROJECT_LIB)/$(dirstamp)
>>>> +PREINSTALL_DIRS += $(PROJECT_LIB)/$(dirstamp)
>>>> +
>>>> +$(PROJECT_INCLUDE)/$(dirstamp):
>>>> +       @$(MKDIR_P) $(PROJECT_INCLUDE)
>>>> +       @: > $(PROJECT_INCLUDE)/$(dirstamp)
>>>> +PREINSTALL_DIRS += $(PROJECT_INCLUDE)/$(dirstamp)
>>>> +
>>>> +$(PROJECT_INCLUDE)/bsp/$(dirstamp):
>>>> +       @$(MKDIR_P) $(PROJECT_INCLUDE)/bsp
>>>> +       @: > $(PROJECT_INCLUDE)/bsp/$(dirstamp)
>>>> +PREINSTALL_DIRS += $(PROJECT_INCLUDE)/bsp/$(dirstamp)
>>>> +
>>>> +$(PROJECT_LIB)/bsp_specs: bsp_specs $(PROJECT_LIB)/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_LIB)/bsp_specs
>>>> +PREINSTALL_FILES += $(PROJECT_LIB)/bsp_specs
>>>> +
>>>> +$(PROJECT_INCLUDE)/bsp.h: include/bsp.h $(PROJECT_INCLUDE)/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp.h
>>>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp.h
>>>> +
>>>> +$(PROJECT_INCLUDE)/tm27.h: ../../shared/include/tm27.h
>>>> $(PROJECT_INCLUDE)/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/tm27.h
>>>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/tm27.h
>>>> +
>>>> +$(PROJECT_INCLUDE)/bsp/start.h: ../shared/include/start.h
>>>> $(PROJECT_INCLUDE)/bsp/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/start.h
>>>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/start.h
>>>> +
>>>> +$(PROJECT_INCLUDE)/bsp/linker-symbols.h:
>>>> ../shared/include/linker-symbols.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/linker-symbols.h
>>>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/linker-symbols.h
>>>> +
>>>> +$(PROJECT_INCLUDE)/bspopts.h: include/bspopts.h
>>>> $(PROJECT_INCLUDE)/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bspopts.h
>>>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bspopts.h
>>>> +
>>>> +$(PROJECT_INCLUDE)/bsp/bootcard.h: ../../shared/include/bootcard.h
>>>> $(PROJECT_INCLUDE)/bsp/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/bootcard.h
>>>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/bootcard.h
>>>> +
>>>> +$(PROJECT_INCLUDE)/coverhd.h: ../../shared/include/coverhd.h
>>>> $(PROJECT_INCLUDE)/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/coverhd.h
>>>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/coverhd.h
>>>> +
>>>> +$(PROJECT_LIB)/start.$(OBJEXT): start.$(OBJEXT)
>>>> $(PROJECT_LIB)/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_LIB)/start.$(OBJEXT)
>>>> +TMPINSTALL_FILES += $(PROJECT_LIB)/start.$(OBJEXT)
>>>> +
>>>> +$(PROJECT_LIB)/linkcmds: startup/linkcmds $(PROJECT_LIB)/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds
>>>> +PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds
>>>> +
>>>> +$(PROJECT_INCLUDE)/bsp/irq-generic.h:
>>>> ../../shared/include/irq-generic.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-generic.h
>>>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-generic.h
>>>> +
>>>> +$(PROJECT_INCLUDE)/bsp/irq-info.h: ../../shared/include/irq-info.h
>>>> $(PROJECT_INCLUDE)/bsp/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-info.h
>>>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-info.h
>>>> +
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/sh-hello
>>>> b/c/src/lib/libbsp/arm/tiny6410/sh-hello
>>>> new file mode 100755
>>>> index 0000000..2ca81d6
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/sh-hello
>>>> @@ -0,0 +1,13 @@
>>>> +#!/bin/sh
>>>> +mkdir build
>>>> +cd build
>>>> +../rtems/configure --target=arm-rtemseabi4.11
>>>> --enable-rtemsbsp="tiny6410" --enable-test=samples --disable-posix
>>>> +rm `find . -name hello.exe`
>>>> +gmake all
>>>> +rm hello.*
>>>> +rm init.*
>>>> +cp  -f `find . -name hello.exe` .
>>>> +cp arm-rtemseabi4.11/c/tiny6410/testsuites/samples/hello/init.o .
>>>> +arm-rtemseabi4.11-objcopy -O binary -S hello.exe hello.bin
>>>> +arm-rtemseabi4.11-objdump -D hello.exe > hello.s
>>>> +arm-rtemseabi4.11-objdump -D init.o > init.s
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/startup/bspidle.c
>>>> b/c/src/lib/libbsp/arm/tiny6410/startup/bspidle.c
>>>> new file mode 100644
>>>> index 0000000..6bc8088
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/startup/bspidle.c
>>>> @@ -0,0 +1,25 @@
>>>> +/*
>>>> + *  BSP specific Idle thread
>>>> + */
>>>> +
>>>> +/*
>>>> + *  Copyright (c) 2000 Canon Research Centre France SA.
>>>> + *  Emmanuel Raguet, mailto:raguet at crf.canon.fr
>>>> + *
>>>> + *  The license and distribution terms for this file may be
>>>> + *  found in the file LICENSE in this distribution or at
>>>> + *  http://www.rtems.com/license/LICENSE.
>>>> + *
>>>> + *  1.Copied from gp32
>>>> + */
>>>> +
>>>> +#include <bsp.h>
>>>> +
>>>> +void *bsp_idle_thread(uintptr_t ignored)
>>>> +{
>>>> +  while(1) {
>>>> +    __asm__ volatile ("MCR p15,0,r0,c7,c0,4     \n");
>>>> +  }
>>>> +  return NULL;
>>>> +}
>>>> +
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/startup/bspreset.c
>>>> b/c/src/lib/libbsp/arm/tiny6410/startup/bspreset.c
>>>> new file mode 100644
>>>> index 0000000..0d52df7
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/startup/bspreset.c
>>>> @@ -0,0 +1,37 @@
>>>> +/*
>>>> + *  The license and distribution terms for this file may be
>>>> + *  found in the file LICENSE in this distribution or at
>>>> + *  http://www.rtems.com/license/LICENSE.
>>>> + *  1. Copied from gp32
>>>> + */
>>>> +
>>>> +#include <bsp.h>
>>>> +
>>>> +void bsp_reset(void)
>>>> +{
>>>> +  rtems_interrupt_level level;
>>>> +  rtems_interrupt_disable(level);
>>>> +  /* disable mmu, invalide i-cache and call swi #4 */
>>>> +  __asm__ volatile(""
>>>> +    "mrc    p15,0,r0,c1,c0,0  \n"
>>>> +    "bic    r0,r0,#1          \n"
>>>> +    "mcr    p15,0,r0,c1,c0,0  \n"
>>>> +    "nop                      \n"
>>>> +    "nop                      \n"
>>>> +    "nop                      \n"
>>>> +    "nop                      \n"
>>>> +    "nop                      \n"
>>>> +    "mov    r0,#0             \n"
>>>> +    "MCR    p15,0,r0,c7,c5,0  \n"
>>>> +    "nop                      \n"
>>>> +    "nop                      \n"
>>>> +    "nop                      \n"
>>>> +    "nop                      \n"
>>>> +    "nop                      \n"
>>>> +    "swi    #4                "
>>>> +    :
>>>> +    :
>>>> +    : "r0"
>>>> +  );
>>>> +  /* we should be back in bios now */
>>>> +}
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/startup/bspstart.c
>>>> b/c/src/lib/libbsp/arm/tiny6410/startup/bspstart.c
>>>> new file mode 100644
>>>> index 0000000..09eded1
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/startup/bspstart.c
>>>> @@ -0,0 +1,83 @@
>>>> +/*
>>>> + * This file contains the ARM BSP startup package. It includes
>>>> application,
>>>> + * board, and monitor specific initialization and configuration. The
>>>> generic CPU
>>>> + * dependent initialization has been performed before this routine is
>>>> invoked.
>>>> + */
>>>> +
>>>> +/*
>>>> + *  Copyright (c) 2000 Canon Research Centre France SA.
>>>> + *  Emmanuel Raguet, mailto:raguet at crf.canon.fr
>>>> + *
>>>> + *  The license and distribution terms for this file may be
>>>> + *  found in the file LICENSE in this distribution or at
>>>> + *  http://www.rtems.com/license/LICENSE.
>>>> + *
>>>> + *  1. Modified from gp32      Peng Fan van.freenix at gmail.com
>>>> + */
>>>> +
>>>> +#include <bsp.h>
>>>> +#include <bsp/irq-generic.h>
>>>> +#include <rtems/bspIo.h>
>>>> +#include <s3c64xx.h>
>>>> +
>>>> +/*
>>>> + * External Prototypes
>>>> + */
>>>> +extern void rtems_exception_init_mngt(void);
>>>> +
>>>> +/*
>>>> + *  BSP Specific Initialization in C
>>>> + */
>>>> +void bsp_start_default( void )
>>>> +{
>>>> +  uint32_t cr;
>>>> +  uint32_t pend,last;
>>>> +  uint32_t REFCNT;
>>>> +  uint32_t i;
>>>> +
>>>> +  /* stop RTC */
>>>> +  rTICCNT = 0x0;
>>>> +
>>>> +  /* stop watchdog,ADC and timers */
>>>> +  rWTCON = 0x0;
>>>> +  rTCON = 0x0;
>>>> +  rADCCON = 0x0;
>>>> +
>>>> +  /* disable interrupts */
>>>> +  rVIC0_INTENCLEAR = 0x0;
>>>> +  rVIC1_INTENCLEAR = 0x0;
>>>> +  /* interrupt select, irq or fiq?*/
>>>> +  rVIC0_INTSELECT = 0x0;
>>>> +  rVIC1_INTSELECT = 0x0;
>>>> +
>>>> +  /* clear external interrupt pending*/
>>>> +  rEINT0PEND = ~0x0; /* write 1 to clear */
>>>> +
>>>> +  /* clear pending interrupt */
>>>> +  rVIC0_ADDRESS = 0x0;
>>>> +  rVIC1_ADDRESS = 0x0;
>>>> +
>>>> +
>>>> +#if 0
>>>> +  /* system clock may be migrated to here from uboot */
>>>> +  /* setup clocks */
>>>> +#endif
>>>> +
>>>> +  Uart_SendString(__func__);
>>>> +  /*
>>>> +   * Init rtems exceptions management
>>>> +   */
>>>> +  rtems_exception_init_mngt();
>>>> +
>>>> +  /*
>>>> +   * Init rtems interrupt management
>>>> +   */
>>>> +  bsp_interrupt_initialize();
>>>> +}
>>>> +
>>>> +/*
>>>> + *  By making this a weak alias for bsp_start_default, a brave soul
>>>> + *  can override the actual bsp_start routine used.
>>>> + */
>>>> +
>>>> +void bsp_start (void) __attribute__ ((weak,
>>>> alias("bsp_start_default")));
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/startup/bspstarthooks.c
>>>> b/c/src/lib/libbsp/arm/tiny6410/startup/bspstarthooks.c
>>>> new file mode 100644
>>>> index 0000000..31e359c
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/startup/bspstarthooks.c
>>>> @@ -0,0 +1,146 @@
>>>> +/**
>>>> + * @file
>>>> + *
>>>> + * @ingroup s3c64xx
>>>> + *
>>>> + * @brief Startup code.
>>>> + */
>>>> +
>>>> +/*
>>>> + * Copyright (c) 2009-2011 embedded brains GmbH.  All rights reserved.
>>>> + *
>>>> + *  embedded brains GmbH
>>>> + *  Obere Lagerstr. 30
>>>> + *  82178 Puchheim
>>>> + *  Germany
>>>> + *  <rtems at embedded-brains.de>
>>>> + *
>>>> + * The license and distribution terms for this file may be
>>>> + * found in the file LICENSE in this distribution or at
>>>> + * http://www.rtems.com/license/LICENSE.
>>>> + *
>>>> + * 1. Modified from lpc32xx    Peng Fan        van.freenix at gmail.com
>>>> + */
>>>> +
>>>> +#include <bsp.h>
>>>> +#include <bsp/start.h>
>>>> +#include <bsp/irq.h>
>>>> +#include <bsp/linker-symbols.h>
>>>> +#include <libcpu/arm-cp15.h>
>>>> +#include <libcpu/mmu.h>
>>>> +//#include <bsp/uart-output-char.h> //fanpeng
>>>> +
>>>> +#include <s3c64xx.h>
>>>> +
>>>> +extern void bsp_reset(void);
>>>> +
>>>> +
>>>> +void SWI_Handler(void)
>>>> +{
>>>> +       Uart_SendString("swi handler");
>>>> +       while(1);
>>>> +}
>>>> +static BSP_START_TEXT_SECTION void clear_bss(void)
>>>> +{
>>>> +  const int *end = (const int *) bsp_section_bss_end;
>>>> +  int *out = (int *) bsp_section_bss_begin;
>>>> +
>>>> +  /* Clear BSS */
>>>> +  while (out != end) {
>>>> +    *out = 0;
>>>> +    ++out;
>>>> +  }
>>>> +}
>>>> +
>>>> +extern mmu_sect_map_t mem_map[];
>>>> +static BSP_START_TEXT_SECTION void setup_mmu_and_cache(void)
>>>> +{
>>>> +  uint32_t ctrl = 0;
>>>> +
>>>> +  /* Disable MMU and cache, basic settings */
>>>> +  ctrl = arm_cp15_get_control();
>>>> +  ctrl &= ~(ARM_CP15_CTRL_I | ARM_CP15_CTRL_R | ARM_CP15_CTRL_C
>>>> +    | ARM_CP15_CTRL_V | ARM_CP15_CTRL_M);
>>>> +  ctrl |=  ARM_CP15_CTRL_A;
>>>> +  arm_cp15_set_control(ctrl);
>>>> +
>>>> +  arm_cp15_data_cache_clean_and_invalidate();
>>>> +  arm_cp15_cache_invalidate(); //cache clean and invalidate ??
>>>> +  arm_cp15_tlb_invalidate();
>>>> +
>>>> +  #ifndef S3C64XX_DISABLE_MMU
>>>> +    mmu_init(mem_map);
>>>> +  #endif
>>>> +}
>>>> +
>>>> +static BSP_START_TEXT_SECTION void setup_pll(void)
>>>> +{
>>>> +}
>>>> +
>>>> +BSP_START_TEXT_SECTION void bsp_start_hook_0(void)
>>>> +{
>>>> +  setup_pll();
>>>> +  setup_mmu_and_cache();
>>>> +}
>>>> +
>>>> +static BSP_START_TEXT_SECTION void stop_dma_activities(void)
>>>> +{
>>>> +}
>>>> +
>>>> +static BSP_START_TEXT_SECTION void setup_uarts(void)
>>>> +{
>>>> +}
>>>> +
>>>> +static BSP_START_TEXT_SECTION void setup_timer(void)
>>>> +{
>>>> +       /* May be removed */
>>>> +}
>>>> +
>>>> +/* vector_begin will be copied to address 0 */
>>>> +uint32_t vector_begin[] = {
>>>> +       0xe59ff018, //ldr     pc, [pc, #24]
>>>> +       0xe59ff018,
>>>> +       0xe59ff018,
>>>> +       0xe59ff018,
>>>> +       0xe59ff018,
>>>> +       0xe320f000, //nop
>>>> +       0xe59ff018,
>>>> +       0xe59ff018,
>>>> +
>>>> +       /***************/
>>>> +       bsp_reset,
>>>> +       0xe320f000, //nop
>>>> +       0xe320f000, //nop
>>>> +       0xe320f000, //nop
>>>> +       0xe320f000, //nop
>>>> +       0xe320f000, //nop
>>>> +       0xe320f000, //nop
>>>> +       0xe320f000, //nop
>>>> +};
>>>> +
>>>> +BSP_START_TEXT_SECTION void bsp_start_hook_1(void)
>>>> +{
>>>> +  int i = 0;
>>>> +  stop_dma_activities();
>>>> +  setup_uarts();
>>>> +  setup_timer();
>>>> +
>>>> +  arm_cp15_data_cache_clean_and_invalidate();
>>>> +  arm_cp15_cache_invalidate(); //??
>>>> +
>>>> +  /* Copy vector table to address 0*/
>>>> +  bsp_start_memcpy(
>>>> +         (int *)0,
>>>> +         (const int*)vector_begin,
>>>> +         (size_t)64
>>>> +  );
>>>> +
>>>> +  /* VIC is not enabled for this vector interrupt processor,
>>>> +   * This may be done in the future to use vector interrupt.
>>>> +   */
>>>> +
>>>> +  /* Clear .bss section */
>>>> +  clear_bss();
>>>> +
>>>> +  /* At this point we can use objects outside the .start section */
>>>> +}
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/startup/linkcmds
>>>> b/c/src/lib/libbsp/arm/tiny6410/startup/linkcmds
>>>> new file mode 100644
>>>> index 0000000..dc48a57
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/startup/linkcmds
>>>> @@ -0,0 +1,25 @@
>>>> +MEMORY {
>>>> +       SDRAM_INTERRUPT : ORIGIN = 0x50000000, LENGTH = 4k
>>>> +       SDRAM_MMU : ORIGIN = 0x50100000, LENGTH = 16k
>>>> +       SDRAM : ORIGIN = 0x50104000, LENGTH = 128M - 1M - 16k
>>>> +}
>>>> +
>>>> +REGION_ALIAS ("REGION_START", SDRAM);
>>>> +REGION_ALIAS ("REGION_VECTOR", SDRAM);
>>>> +REGION_ALIAS ("REGION_TEXT", SDRAM);
>>>> +REGION_ALIAS ("REGION_TEXT_LOAD", SDRAM);
>>>> +REGION_ALIAS ("REGION_RODATA", SDRAM);
>>>> +REGION_ALIAS ("REGION_RODATA_LOAD", SDRAM);
>>>> +REGION_ALIAS ("REGION_DATA", SDRAM);
>>>> +REGION_ALIAS ("REGION_DATA_LOAD", SDRAM);
>>>> +REGION_ALIAS ("REGION_FAST_TEXT", SDRAM);
>>>> +REGION_ALIAS ("REGION_FAST_TEXT_LOAD", SDRAM);
>>>> +REGION_ALIAS ("REGION_FAST_DATA", SDRAM);
>>>> +REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
>>>> +REGION_ALIAS ("REGION_BSS", SDRAM);
>>>> +REGION_ALIAS ("REGION_WORK", SDRAM);
>>>> +REGION_ALIAS ("REGION_STACK", SDRAM);
>>>> +
>>>> +_ttbl_base = ORIGIN (SDRAM_MMU);
>>>> +
>>>> +INCLUDE linkcmds.armv6
>>>> diff --git a/c/src/lib/libbsp/arm/tiny6410/startup/memmap.c
>>>> b/c/src/lib/libbsp/arm/tiny6410/startup/memmap.c
>>>> new file mode 100644
>>>> index 0000000..aa0b7f9
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libbsp/arm/tiny6410/startup/memmap.c
>>>> @@ -0,0 +1,29 @@
>>>> +/*
>>>> + *  s3c6410 Memory Map
>>>> + *
>>>> + *  Copyright (c) 2004 by Cogent Computer Systems
>>>> + *  Written by Jay Monkman <jtm at lopingdog.com>
>>>> + *
>>>> + *  The license and distribution terms for this file may be
>>>> + *  found in the file LICENSE in this distribution or at
>>>> + *  http://www.rtems.com/license/LICENSE.
>>>> + *
>>>> + *  1. Modified from gp32      Peng Fan van.freenix at gmail.com
>>>> + */
>>>> +#include <rtems.h>
>>>> +#include <libcpu/mmu.h>
>>>> +
>>>> +/*ARM1176jzf-s consider TLB related*/
>>>> +/*Here not implement 2-level page table considering tlb miss
>>>> +  Maybe a tlb management structure should be implemented.
>>>> +       To real time task, TLB entry is locked and should not incur
>>>> +       TLB miss. But to non real time task, TLB miss is not cared
>>>> +       Not sure about this. May have a try to do this in future
>>>> +*/
>>>> +mmu_sect_map_t mem_map[] = {
>>>> +/*  <phys addr>  <virt addr> <size> <flags> */
>>>> +    {0x00000000, 0x00000000, 4096, MMU_CACHE_NONE},
>>>> +    {0x50000000, 0x00000000, 1, MMU_CACHE_NONE},
>>>> +    {0x50000000, 0x50000000, 128, MMU_CACHE_NONE},
>>>> +    {0x00000000, 0x00000000,   0,    0}                   /* The end */
>>>> +};
>>>> diff --git a/c/src/lib/libcpu/arm/Makefile.am
>>>> b/c/src/lib/libcpu/arm/Makefile.am
>>>> index e488c45..e978910 100644
>>>> --- a/c/src/lib/libcpu/arm/Makefile.am
>>>> +++ b/c/src/lib/libcpu/arm/Makefile.am
>>>> @@ -157,6 +157,31 @@ s3c24xx_irq_rel_CPPFLAGS = $(AM_CPPFLAGS)
>>>>  s3c24xx_irq_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
>>>>  endif
>>>>
>>>> +if s3c64xx
>>>> +include_HEADERS = s3c64xx/include/s3c64xx.h s3c64xx/include/s3c6410.h
>>>> +
>>>> +## s3c64xx/clock
>>>> +noinst_PROGRAMS += s3c64xx/clock.rel
>>>> +s3c64xx_clock_rel_SOURCES = s3c64xx/clock/clockdrv.c
>>>> s3c64xx/clock/support.c
>>>> +s3c64xx_clock_rel_CPPFLAGS = $(AM_CPPFLAGS)
>>>> +s3c64xx_clock_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
>>>> +
>>>> +## s3c64xx/timer
>>>> +#noinst_PROGRAMS += s3c64xx/timer.rel
>>>> +#s3c64xx_timer_rel_SOURCES = s3c64xx/timer/timer.c
>>>> +#s3c64xx_timer_rel_CPPFLAGS = $(AM_CPPFLAGS)
>>>> +#s3c64xx_timer_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
>>>> +
>>>> +## s3c64xx/interrupt
>>>> +include_bsp_HEADERS += s3c64xx/irq/irq.h
>>>> +
>>>> +noinst_PROGRAMS += s3c64xx/irq.rel
>>>> +s3c64xx_irq_rel_SOURCES = s3c64xx/irq/irq.c \
>>>> +    s3c64xx/irq/irq.h
>>>> +s3c64xx_irq_rel_CPPFLAGS = $(AM_CPPFLAGS)
>>>> +s3c64xx_irq_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
>>>> +endif
>>>> +
>>>>  if lpc22xx
>>>>  include_HEADERS = lpc22xx/include/lpc22xx.h
>>>>
>>>> diff --git a/c/src/lib/libcpu/arm/configure.ac b/c/src/lib/libcpu/arm/
>>>> configure.ac
>>>> index ae0967b..4f3ebea 100644
>>>> --- a/c/src/lib/libcpu/arm/configure.ac
>>>> +++ b/c/src/lib/libcpu/arm/configure.ac
>>>> @@ -23,6 +23,7 @@ AM_CONDITIONAL(shared, test "$RTEMS_CPU_MODEL" =
>>>> "at91rm9200" || \
>>>>                        test "$RTEMS_CPU_MODEL" = "mc9328mxl" || \
>>>>                        test "$RTEMS_CPU_MODEL" = "s3c2410" || \
>>>>                        test "$RTEMS_CPU_MODEL" = "s3c2400" || \
>>>> +                      test "$RTEMS_CPU_MODEL" = "s3c6410" || \
>>>>                        test "$RTEMS_CPU_MODEL" = "pxa255")
>>>>
>>>>  AM_CONDITIONAL(at91rm9200, test "$RTEMS_CPU_MODEL" = "at91rm9200")
>>>> @@ -31,6 +32,7 @@ AM_CONDITIONAL(lpc22xx, test "$RTEMS_CPU_MODEL" =
>>>> "lpc22xx")
>>>>  AM_CONDITIONAL(pxa255, test "$RTEMS_CPU_MODEL" = "pxa255")
>>>>  AM_CONDITIONAL(s3c24xx, test "$RTEMS_CPU_MODEL" = "s3c2400" ||\
>>>>                          test "$RTEMS_CPU_MODEL" = "s3c2410")
>>>> +AM_CONDITIONAL(s3c64xx, test "$RTEMS_CPU_MODEL" = "s3c6410")
>>>>
>>>>  RTEMS_AMPOLISH3
>>>>
>>>> diff --git a/c/src/lib/libcpu/arm/preinstall.am b/c/src/lib/libcpu/arm/
>>>> preinstall.am
>>>> index 751a085..0a8109c 100644
>>>> --- a/c/src/lib/libcpu/arm/preinstall.am
>>>> +++ b/c/src/lib/libcpu/arm/preinstall.am
>>>> @@ -113,6 +113,19 @@ $(PROJECT_INCLUDE)/bsp/irq.h: s3c24xx/irq/irq.h
>>>> $(PROJECT_INCLUDE)/bsp/$(dirstam
>>>>         $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq.h
>>>>  PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq.h
>>>>  endif
>>>> +if s3c64xx
>>>> +$(PROJECT_INCLUDE)/s3c64xx.h: s3c64xx/include/s3c64xx.h
>>>> $(PROJECT_INCLUDE)/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/s3c64xx.h
>>>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/s3c64xx.h
>>>> +
>>>> +$(PROJECT_INCLUDE)/s3c6410.h: s3c64xx/include/s3c6410.h
>>>> $(PROJECT_INCLUDE)/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/s3c6410.h
>>>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/s3c6410.h
>>>> +
>>>> +$(PROJECT_INCLUDE)/bsp/irq.h: s3c64xx/irq/irq.h
>>>> $(PROJECT_INCLUDE)/bsp/$(dirstamp)
>>>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq.h
>>>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq.h
>>>> +endif
>>>>  if lpc22xx
>>>>  $(PROJECT_INCLUDE)/lpc22xx.h: lpc22xx/include/lpc22xx.h
>>>> $(PROJECT_INCLUDE)/$(dirstamp)
>>>>         $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/lpc22xx.h
>>>> diff --git a/c/src/lib/libcpu/arm/s3c64xx/clock/clockdrv.c
>>>> b/c/src/lib/libcpu/arm/s3c64xx/clock/clockdrv.c
>>>> new file mode 100644
>>>> index 0000000..5893014
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libcpu/arm/s3c64xx/clock/clockdrv.c
>>>> @@ -0,0 +1,141 @@
>>>> +/*
>>>> + *  S3C6410 clock specific using the System Timer
>>>> + *
>>>> + *  This is hardware specific part of the clock driver. At the end of
>>>> this
>>>> + *  file, the generic part of the driver is #included.
>>>> + *
>>>> + *  The license and distribution terms for this file may be
>>>> + *  found in the file LICENSE in this distribution or at
>>>> + *  http://www.rtems.com/license/LICENSE.
>>>> + *
>>>> + *  1. modified from S3C2440   Peng Fan van.freenix at gmail.com
>>>> + */
>>>> +
>>>> +#include <rtems.h>
>>>> +#include <bsp/irq.h>
>>>> +#include <bsp.h>
>>>> +#include <s3c64xx.h>
>>>> +
>>>> +void Clock_isr(rtems_irq_hdl_param arg);
>>>> +static void clock_isr_on(const rtems_irq_connect_data *unused);
>>>> +static void clock_isr_off(const rtems_irq_connect_data *unused);
>>>> +static int clock_isr_is_on(const rtems_irq_connect_data *irq);
>>>> +
>>>> +rtems_irq_connect_data clock_isr_data = {
>>>> +  .name   = BSP_TIMER4,
>>>> +  .hdl    = Clock_isr,
>>>> +  .handle = NULL,
>>>> +  .on     = clock_isr_on,
>>>> +  .off    = clock_isr_off,
>>>> +  .isOn   = clock_isr_is_on,
>>>> +};
>>>> +
>>>> +/**
>>>> + *  Return the nanoseconds since last tick
>>>> + */
>>>> +uint32_t clock_driver_get_nanoseconds_since_last_tick(void)
>>>> +{
>>>> +  return 0;
>>>> +}
>>>> +
>>>> +#define Clock_driver_nanoseconds_since_last_tick \
>>>> +  clock_driver_get_nanoseconds_since_last_tick
>>>> +
>>>> +/**
>>>> + * When we get the clock interrupt
>>>> + *    - clear the interrupt bit?
>>>> + *    - restart the timer?
>>>> +        Clear BIT_TIMER4 interrupt;                   \
>>>> + */
>>>> +#define Clock_driver_support_at_tick()                \
>>>> +  do {                                                \
>>>> +         rTINT_CSTAT |= 1 << 9;\
>>>> +  } while(0)
>>>> +
>>>> +/**
>>>> + * Installs the clock ISR. You shouldn't need to change this.
>>>> + */
>>>> +extern uint32_t *VIC0_VECTADDR;
>>>> +extern uint32_t *VIC1_VECTADDR;
>>>> +#define Clock_driver_support_install_isr( _new, _old ) \
>>>> +  do {                                                 \
>>>> +    _old = NULL;                                       \
>>>> +    VIC0_VECTADDR[BSP_TIMER4] = _new;                  \
>>>> +    rtems_interrupt_handler_install(clock_isr_data.name,\
>>>> +                   "TICK TIMER",\
>>>> +                   RTEMS_INTERRUPT_UNIQUE,\
>>>> +                   clock_isr_data.hdl,\
>>>> +                   clock_isr_data.handle);\
>>>> +  } while(0)
>>>> +
>>>> +
>>>> +/**
>>>> + * Initialize the hardware for the clock
>>>> + *   - Set the frequency
>>>> + *   - enable it
>>>> + *   - clear any pending interrupts
>>>> + *
>>>> + * Since you may want the clock always running, you can
>>>> + * enable interrupts here. If you do so, the clock_isr_on(),
>>>> + * clock_isr_off(), and clock_isr_is_on() functions can be
>>>> + * NOPs.
>>>> + */
>>>> +/**
>>>> + * The bit and constant number should be redifined using macros
>>>> + */
>>>> +#define Clock_driver_support_initialize_hardware() \
>>>> +  do { \
>>>> +         rTCON = 0x0;\
>>>> +         rTINT_CSTAT |= 1 << 4;\
>>>> +         bsp_interrupt_vector_enable(BSP_TIMER4);\
>>>> +         rTCFG0 = 0x0101;\
>>>> +         rTCFG1 = (rTCFG1 & 0xf0000) | 0x40000;\
>>>> +         rTCNTB4 = 0x512d;\
>>>> +         rTCON = (rTCON & ~0x00700000) | (1<<22) | (1<<21);\
>>>> +         rTCON = (rTCON & ~0x00700000) | (1<<22) | (1<<20);\
>>>> +         /* auto load, start Timer 4 */\
>>>> +    } while (0)
>>>> +
>>>> +/**
>>>> + * Do whatever you need to shut the clock down and remove the
>>>> + * interrupt handler. Since this normally only gets called on
>>>> + * RTEMS shutdown, you may not need to do anything other than
>>>> + * remove the ISR.
>>>> + */
>>>> +#define Clock_driver_support_shutdown_hardware()
>>>>  \
>>>> +  do {
>>>>  \
>>>> +        /* Disable timer */ \
>>>> +        BSP_remove_rtems_irq_handler(&clock_isr_data);
>>>>  \
>>>> +     } while (0)
>>>> +
>>>> +/**
>>>> + * Enables clock interrupt.
>>>> + *
>>>> + * If the interrupt is always on, this can be a NOP.
>>>> + */
>>>> +static void clock_isr_on(const rtems_irq_connect_data *unused)
>>>> +{
>>>> +}
>>>> +
>>>> +/**
>>>> + * Disables clock interrupts
>>>> + *
>>>> + * If the interrupt is always on, this can be a NOP.
>>>> + */
>>>> +static void clock_isr_off(const rtems_irq_connect_data *unused)
>>>> +{
>>>> +    return;
>>>> +}
>>>> +
>>>> +/**
>>>> + * Tests to see if clock interrupt is enabled, and returns 1 if so.
>>>> + * If interrupt is not enabled, returns 0.
>>>> + *
>>>> + * If the interrupt is always on, this always returns 1.
>>>> + */
>>>> +static int clock_isr_is_on(const rtems_irq_connect_data *irq)
>>>> +{
>>>> +}
>>>> +
>>>> +/* Make sure to include this, and only at the end of the file */
>>>> +#include "../../../../libbsp/shared/clockdrv_shell.h"
>>>> diff --git a/c/src/lib/libcpu/arm/s3c64xx/clock/support.c
>>>> b/c/src/lib/libcpu/arm/s3c64xx/clock/support.c
>>>> new file mode 100644
>>>> index 0000000..f4a853c
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libcpu/arm/s3c64xx/clock/support.c
>>>> @@ -0,0 +1,51 @@
>>>> +/*
>>>> + * 1. Modified from S3C2440    Peng Fan van.freenix at gmail.com
>>>> + *
>>>> + * Note: Now the clock related setting is done in uboot.
>>>> + *      This will be fixed in future
>>>> + */
>>>> +#include <rtems.h>
>>>> +#include <bsp.h>
>>>> +#include <s3c64xx.h>
>>>> +
>>>> +/*
>>>> ------------------------------------------------------------------------- */
>>>> +/* NOTE: This describes the proper use of this file.
>>>> + *
>>>> + * BSP_OSC_FREQ should be defined as the input frequency of the PLL.
>>>> + *
>>>> + * get_FCLK(), get_HCLK(), get_PCLK() and get_UCLK() return the clock
>>>> of
>>>> + * the specified bus in HZ.
>>>> + */
>>>> +/*
>>>> ------------------------------------------------------------------------- */
>>>> +
>>>> +uint32_t *VIC0_VECTADDR = (uint32_t *)VIC0_VECTADDR_BASE;
>>>> +uint32_t *VIC1_VECTADDR = (uint32_t *)VIC1_VECTADDR_BASE;
>>>> +/* return FCLK frequency */
>>>> +uint32_t get_FCLK(void)
>>>> +{
>>>> +       /* not implemented */
>>>> +       return 0;
>>>> +}
>>>> +
>>>> +/* return UCLK frequency */
>>>> +uint32_t get_UCLK(void)
>>>> +{
>>>> +       /* not implemented */
>>>> +       return 0;
>>>> +}
>>>> +
>>>> +/* return HCLK frequency */
>>>> +uint32_t get_HCLK(void)
>>>> +{
>>>> +       /* not implemented */
>>>> +       return 0;
>>>> +}
>>>> +
>>>> +/* return PCLK frequency */
>>>> +uint32_t get_PCLK(void)
>>>> +{
>>>> +       /* Just return uboot configured freq.
>>>> +        * Fix this in future
>>>> +        */
>>>> +       return 66000000;
>>>> +}
>>>> diff --git a/c/src/lib/libcpu/arm/s3c64xx/include/s3c6410.h
>>>> b/c/src/lib/libcpu/arm/s3c64xx/include/s3c6410.h
>>>> new file mode 100644
>>>> index 0000000..56b1dcd
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libcpu/arm/s3c64xx/include/s3c6410.h
>>>> @@ -0,0 +1,211 @@
>>>> +/************************************************
>>>> + * NAME     : s3c6410.h
>>>> + * Version  : 4.07.2013
>>>> + *
>>>> + * for the Samsung Development Board
>>>> + ************************************************/
>>>> +
>>>> +#ifndef __S3C6410_H__
>>>> +#define __S3C6410_H__
>>>> +
>>>> +#define __reg(addr)    (*(volatile unsigned *)(addr))
>>>> +/* UART */
>>>> +#define UART_BASE      (0x7F005000)
>>>> +#define UART0_BASE     (UART_BASE + 0x0)
>>>> +#define UART1_BASE     (UART_BASE + 0x400)
>>>> +#define UART2_BASE     (UART_BASE + 0x800)
>>>> +#define UART2_BASE     (UART_BASE + 0xC00)
>>>> +
>>>> +#define rULCON0                __reg(UART0_BASE + 0x00)
>>>> +#define rUCON0         __reg(UART0_BASE + 0x04)
>>>> +#define rUFCON0                __reg(UART0_BASE + 0x08)
>>>> +#define rUMCON0                __reg(UART0_BASE + 0x0C)
>>>> +#define rUTRSTAT0      __reg(UART0_BASE + 0x10)
>>>> +#define rUERSTAT0      __reg(UART0_BASE + 0x14)
>>>> +#define rUFSTAT0       __reg(UART0_BASE + 0x18)
>>>> +#define rUMSTAT0       __reg(UART0_BASE + 0x1C)
>>>> +#define rUTXH0         __reg(UART0_BASE + 0x20)
>>>> +#define rURXH0         __reg(UART0_BASE + 0x24)
>>>> +#define rUBRDIV0       __reg(UART0_BASE + 0x28)
>>>> +#define rUDIVSLOT0     __reg(UART0_BASE + 0x2C)
>>>> +#define rUINTP0                __reg(UART0_BASE + 0x30)
>>>> +#define rUINTSP0       __reg(UART0_BASE + 0x34)
>>>> +#define rUINTM0                __reg(UART0_BASE + 0x38)
>>>> +
>>>> +#define rULCON1                __reg(UART1_BASE + 0x00)
>>>> +#define rUCON1         __reg(UART1_BASE + 0x04)
>>>> +#define rUFCON1                __reg(UART1_BASE + 0x08)
>>>> +#define rUMCON1                __reg(UART1_BASE + 0x0C)
>>>> +#define rUTRSTAT1      __reg(UART1_BASE + 0x10)
>>>> +#define rUERSTAT1      __reg(UART1_BASE + 0x14)
>>>> +#define rUFSTAT1       __reg(UART1_BASE + 0x18)
>>>> +#define rUMSTAT1       __reg(UART1_BASE + 0x1C)
>>>> +#define rUTXH1         __reg(UART1_BASE + 0x20)
>>>> +#define rURXH1         __reg(UART1_BASE + 0x24)
>>>> +#define rUBRDIV1       __reg(UART1_BASE + 0x28)
>>>> +#define rUDIVSLOT1     __reg(UART1_BASE + 0x2C)
>>>> +#define rUINTP1                __reg(UART1_BASE + 0x30)
>>>> +#define rUINTSP1       __reg(UART1_BASE + 0x34)
>>>> +#define rUINTM1                __reg(UART1_BASE + 0x38)
>>>> +
>>>> +/* GPIO */
>>>> +#define GPIO_BASE      (0x7F008000)
>>>> +#define GPIOA_BASE     GPIO_BASE
>>>> +
>>>> +#define rGPKCON0       __reg(0x7F008800)
>>>> +#define rGPKCON1       __reg(0x7F008804)
>>>> +#define rGPKDAT                __reg(0x7F008808)
>>>> +#define rGPKPUD                __reg(0x7F00880C)
>>>> +
>>>> +#define rEINT0PEND     __reg(0x7F008924)
>>>> +
>>>> +
>>>> +/* TIMER */
>>>> +#define TIMER_BASE     (0x7F006000)
>>>> +#define rTCFG0         __reg(TIMER_BASE + 0x0)
>>>> +#define rTCFG1         __reg(TIMER_BASE + 0x4)
>>>> +#define rTCON                  __reg(TIMER_BASE + 0x8)
>>>> +#define rTCNTB0                __reg(TIMER_BASE + 0xC)
>>>> +#define rTCMPB0                __reg(TIMER_BASE + 0x10)
>>>> +#define rTCNTO0                __reg(TIMER_BASE + 0x14)
>>>> +
>>>> +#define rTCNTB1                __reg(TIMER_BASE + 0x18)
>>>> +#define rTCMPB1                __reg(TIMER_BASE + 0x1C)
>>>> +#define rTCNTO1                __reg(TIMER_BASE + 0x20)
>>>> +
>>>> +#define rTCNTB2                __reg(TIMER_BASE + 0x24)
>>>> +#define rTCNTO2                __reg(TIMER_BASE + 0x2C)
>>>> +#define rTCNTB3                __reg(TIMER_BASE + 0x30)
>>>> +#define rTCNTO3                __reg(TIMER_BASE + 0x38)
>>>> +#define rTCNTB4                __reg(TIMER_BASE + 0x3C)
>>>> +#define rTCNTO4                __reg(TIMER_BASE + 0x40)
>>>> +
>>>> +#define rTINT_CSTAT    __reg(TIMER_BASE + 0x44)
>>>> +
>>>> +
>>>> +/*
>>>> + * Interrupt
>>>> + */
>>>> +/* VIC */
>>>> +#define VIC0_BASE_ADDR         (0x71200000)
>>>> +#define VIC1_BASE_ADDR         (0x71300000)
>>>> +#define rVIC0_IRQSTATUS                        __reg(VIC0_BASE_ADDR +
>>>> 0x0)
>>>> +#define rVIC0_FIQSTATUS                        __reg(VIC0_BASE_ADDR +
>>>> 0x4)
>>>> +#define rVIC0_RAWINTR                          __reg(VIC0_BASE_ADDR +
>>>> 0x8)
>>>> +#define rVIC0_INTSELECT                        __reg(VIC0_BASE_ADDR +
>>>> 0xC)
>>>> +#define rVIC0_INTENABLE                        __reg(VIC0_BASE_ADDR +
>>>> 0x10)
>>>> +#define rVIC0_INTENCLEAR               __reg(VIC0_BASE_ADDR + 0x14)
>>>> +#define rVIC0_SOFTINT                          __reg(VIC0_BASE_ADDR +
>>>> 0x18)
>>>> +#define rVIC0_SOFTINTCLEAR     __reg(VIC0_BASE_ADDR + 0x1C)
>>>> +#define rVIC0_PROTECTION               __reg(VIC0_BASE_ADDR + 0x20)
>>>> +#define rVIC0_SWPPIORITYMASK   __reg(VIC0_BASE_ADDR + 0x24)
>>>> +#define rVIC0_PRIORITYDAISY    __reg(VIC0_BASE_ADDR + 0x28)
>>>> +#define VIC0_VECTADDR_BASE     (VIC0_BASE_ADDR + 0x100)
>>>> +
>>>> +#define rVIC0_ADDRESS                          __reg(VIC0_BASE_ADDR +
>>>> 0xF00)
>>>> +
>>>> +
>>>> +
>>>> +#define rVIC1_IRQSTATUS                        __reg(VIC1_BASE_ADDR +
>>>> 0x0)
>>>> +#define rVIC1_FIQSTATUS                        __reg(VIC1_BASE_ADDR +
>>>> 0x4)
>>>> +#define rVIC1_RAWINTR                          __reg(VIC1_BASE_ADDR +
>>>> 0x8)
>>>> +#define rVIC1_INTSELECT                        __reg(VIC1_BASE_ADDR +
>>>> 0xC)
>>>> +#define rVIC1_INTENABLE                        __reg(VIC1_BASE_ADDR +
>>>> 0x10)
>>>> +#define rVIC1_INTENCLEAR               __reg(VIC1_BASE_ADDR + 0x14)
>>>> +#define rVIC1_SOFTINT                          __reg(VIC1_BASE_ADDR +
>>>> 0x18)
>>>> +#define rVIC1_SOFTINTCLEAR     __reg(VIC1_BASE_ADDR + 0x1C)
>>>> +#define rVIC1_PROTECTION               __reg(VIC1_BASE_ADDR + 0x20)
>>>> +#define rVIC1_SWPPIORITYMASK   __reg(VIC1_BASE_ADDR + 0x24)
>>>> +#define rVIC1_PRIORITYDAISY    __reg(VIC1_BASE_ADDR + 0x28)
>>>> +#define VIC1_VECTADDR_BASE     (VIC1_BASE_ADDR + 0x100)
>>>> +
>>>> +#define rVIC1_ADDRESS                          __reg(VIC1_BASE_ADDR +
>>>> 0xF00)
>>>> +
>>>> +
>>>> +/* ADC */
>>>> +#define rADCCON
>>>>  __reg(0x7E00B000)
>>>> +#define rADCTSC
>>>>  __reg(0x7E00B004)
>>>> +#define rADCDLY
>>>>  __reg(0x7E00B008)
>>>> +#define rADCDAT0
>>>> __reg(0x7E00B00C)
>>>> +#define rADCDAT1
>>>> __reg(0x7E00B010)
>>>> +#define rADCUPDN
>>>> __reg(0x7E00B014)
>>>> +#define rADCCLRINT
>>>> __reg(0x7E00B018)
>>>> +#define rADCCLRINTPNDNUP               __reg(0x7E00B020)
>>>> +
>>>> +/* WATCH DOG */
>>>> +#define rWTCON
>>>> __reg(0x7E004000)
>>>> +#define rWTDAT
>>>> __reg(0x7E004004)
>>>> +#define rWTCNT
>>>> __reg(0x7E004008)
>>>> +#define rWTCLRINT
>>>>  __reg(0x7E00400C)
>>>> +
>>>> +/* RTC */
>>>> +#define rINTP
>>>>  __reg(0x7E005030)
>>>> +
>>>> +#define rTICCNT
>>>>  __reg(0x7E005044)
>>>> +
>>>> +
>>>> +/* NAND */
>>>> +#define  NAND_BASE             0x70200000
>>>> +
>>>> +#define rNFCONF
>>>>  __reg(NAND_BASE + 0x0)
>>>> +#define rNFCONT
>>>>  __reg(NAND_BASE + 0x4)
>>>> +#define rNFCNND
>>>>  __reg(NAND_BASE + 0x8)
>>>> +#define rNFADDR
>>>>  __reg(NAND_BASE + 0xC)
>>>> +#define rNFDATA
>>>>  __reg(NAND_BASE + 0x10)
>>>> +#define rNFMECCD0                                      __reg(NAND_BASE
>>>> + 0x14)
>>>> +#define rNFMECCD1                                      __reg(NAND_BASE
>>>> + 0x18)
>>>> +#define rNFSECCD                                       __reg(NAND_BASE
>>>> + 0x1C)
>>>> +#define rNFSBLK
>>>>  __reg(NAND_BASE + 0x20)
>>>> +#define rNFEBLK
>>>>  __reg(NAND_BASE + 0x24)
>>>> +#define rNFSTAT
>>>>  __reg(NAND_BASE + 0x28)
>>>> +#define rNFECCERR0                             __reg(NAND_BASE + 0x2C)
>>>> +#define rNFECCERR1                             __reg(NAND_BASE + 0x30)
>>>> +#define rNFMECC0                                       __reg(NAND_BASE
>>>> + 0x34)
>>>> +#define rNFMECC1                                       __reg(NAND_BASE
>>>> + 0x38)
>>>> +#define rNFSECC
>>>>  __reg(NAND_BASE + 0x3C)
>>>> +#define rNFMLCBITPT                            __reg(NAND_BASE + 0x40)
>>>> +#define rNF8ECCERR0                            __reg(NAND_BASE + 0x44)
>>>> +#define rNF8ECCERR1                            __reg(NAND_BASE + 0x48)
>>>> +#define rNF8ECCERR2                            __reg(NAND_BASE + 0x4C)
>>>> +#define rNFM8ECC0                                      __reg(NAND_BASE
>>>> + 0x50)
>>>> +#define rNFM8ECC1                                      __reg(NAND_BASE
>>>> + 0x54)
>>>> +#define rNFM8ECC2                                      __reg(NAND_BASE
>>>> + 0x58)
>>>> +#define rNFM8ECC3                                      __reg(NAND_BASE
>>>> + 0x5C)
>>>> +#define rNFMLC8BITPT0                  __reg(NAND_BASE + 0x60)
>>>> +#define rNFMLC8BITPT1                  __reg(NAND_BASE + 0x64)
>>>> +
>>>> +#define BIT0                   0x00000001
>>>> +#define BIT1                   0x00000002
>>>> +#define BIT2                   0x00000004
>>>> +#define BIT3                   0x00000008
>>>> +#define BIT4                   0x00000010
>>>> +#define BIT5                   0x00000020
>>>> +#define BIT6                   0x00000040
>>>> +#define BIT7                   0x00000080
>>>> +#define BIT8                   0x00000100
>>>> +#define BIT9                   0x00000200
>>>> +#define BIT10                  0x00000400
>>>> +#define BIT11                  0x00000800
>>>> +#define BIT12                  0x00001000
>>>> +#define BIT13                  0x00002000
>>>> +#define BIT14                  0x00004000
>>>> +#define BIT15                  0x00008000
>>>> +#define BIT16                  0x00010000
>>>> +#define BIT17                  0x00020000
>>>> +#define BIT18                  0x00040000
>>>> +#define BIT19                  0x00080000
>>>> +#define BIT20                  0x00100000
>>>> +#define BIT21                  0x00200000
>>>> +#define BIT22                  0x00400000
>>>> +#define BIT23                  0x00800000
>>>> +#define BIT24                  0x01000000
>>>> +#define BIT25                  0x02000000
>>>> +#define BIT26                  0x04000000
>>>> +#define BIT27                  0x08000000
>>>> +#define BIT28                  0x10000000
>>>> +#define BIT29                  0x20000000
>>>> +#define BIT30                  0x40000000
>>>> +#define BIT31                  0x80000000
>>>> +
>>>> +
>>>> +#endif /*__S3C6410_H__*/
>>>> diff --git a/c/src/lib/libcpu/arm/s3c64xx/include/s3c64xx.h
>>>> b/c/src/lib/libcpu/arm/s3c64xx/include/s3c64xx.h
>>>> new file mode 100644
>>>> index 0000000..6396629
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libcpu/arm/s3c64xx/include/s3c64xx.h
>>>> @@ -0,0 +1,15 @@
>>>> +/************************************************
>>>> + * NAME     : s3c64xx.h
>>>> + * Version  : 4.07.2013
>>>> + *
>>>> + * share code for different Samsung CPU
>>>> + ************************************************/
>>>> +
>>>> +#ifndef S3C64XX_H_
>>>> +#define S3C64XX_H_
>>>> +
>>>> +#ifdef CPU_S3C6410
>>>> +#include <s3c6410.h>
>>>> +#endif
>>>> +
>>>> +#endif /*S3C64XX_H_*/
>>>> diff --git a/c/src/lib/libcpu/arm/s3c64xx/irq/irq.c
>>>> b/c/src/lib/libcpu/arm/s3c64xx/irq/irq.c
>>>> new file mode 100644
>>>> index 0000000..e0cb6d2
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libcpu/arm/s3c64xx/irq/irq.c
>>>> @@ -0,0 +1,79 @@
>>>> +/* irq.c
>>>> + *
>>>> + *  This file contains the implementation of the function described in
>>>> irq.h
>>>> + *
>>>> + *  Copyright (c) 2010 embedded brains GmbH.
>>>> + *
>>>> + *  CopyRight (C) 2000 Canon Research France SA.
>>>> + *  Emmanuel Raguet,  mailto:raguet at crf.canon.fr
>>>> + *
>>>> + *  The license and distribution terms for this file may be
>>>> + *  found in the file LICENSE in this distribution or at
>>>> + *  http://www.rtems.com/license/LICENSE.
>>>> + *
>>>> + *  1. Modified from S3C2440   Peng Fan van.freenix at gmail.com
>>>> + */
>>>> +
>>>> +#include <rtems/score/armv4.h>
>>>> +
>>>> +#include <bsp.h>
>>>> +#include <bsp/irq.h>
>>>> +#include <bsp/irq-generic.h>
>>>> +
>>>> +#include <s3c64xx.h>
>>>> +
>>>> +typedef void (*vicfunc)(void);
>>>> +void bsp_interrupt_dispatch(void)
>>>> +{
>>>> +       uint32_t vector_addr0 = rVIC0_ADDRESS;
>>>> +       uint32_t vector_addr1 = rVIC1_ADDRESS;
>>>> +       if (vector_addr0 != 0){
>>>> +               void (*vicfunc)(void) = (void(*)(void))rVIC0_ADDRESS;
>>>> +               vicfunc();
>>>> +       }
>>>> +       rVIC0_ADDRESS = 0x0;
>>>> +       if (vector_addr1 != 0){
>>>> +               void (*vicfunc)(void) = (void(*)(void))rVIC1_ADDRESS;
>>>> +               vicfunc();
>>>> +       }
>>>> +       rVIC1_ADDRESS = 0x0;
>>>> +}
>>>> +
>>>> +rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number
>>>> vector)
>>>> +{
>>>> +  if (vector < 32)
>>>> +  {
>>>> +       rVIC0_INTENABLE |= 1 << vector;
>>>> +  }
>>>> +  else if (vector < 64)
>>>> +  {
>>>> +       rVIC1_INTENABLE |= 1 << (vector - 32);
>>>> +  }
>>>> +  else
>>>> +         printk("%s failed\n", __func__);
>>>> +
>>>> +  return RTEMS_SUCCESSFUL;
>>>> +}
>>>> +
>>>> +rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number
>>>> vector)
>>>> +{
>>>> +  if (vector < 32)
>>>> +  {
>>>> +       rVIC0_INTENCLEAR |= 1 << vector;
>>>> +  }
>>>> +  else if (vector < 64)
>>>> +  {
>>>> +       rVIC1_INTENCLEAR |= 1 << (vector - 32);
>>>> +  }
>>>> +  else
>>>> +         printk("%s failed\n", __func__);
>>>> +
>>>> +  return RTEMS_SUCCESSFUL;
>>>> +}
>>>> +
>>>> +rtems_status_code bsp_interrupt_facility_initialize(void)
>>>> +{
>>>> +  _CPU_ISR_install_vector(ARM_EXCEPTION_IRQ,
>>>> _ARMV4_Exception_interrupt, NULL);
>>>> +
>>>> +  return RTEMS_SUCCESSFUL;
>>>> +}
>>>> diff --git a/c/src/lib/libcpu/arm/s3c64xx/irq/irq.h
>>>> b/c/src/lib/libcpu/arm/s3c64xx/irq/irq.h
>>>> new file mode 100644
>>>> index 0000000..2f3ca6a
>>>> --- /dev/null
>>>> +++ b/c/src/lib/libcpu/arm/s3c64xx/irq/irq.h
>>>> @@ -0,0 +1,100 @@
>>>> +/* irq.h
>>>> + *
>>>> + *  Copyright (c) 2010 embedded brains GmbH.
>>>> + *
>>>> + *  CopyRight (C) 2000 Canon Research France SA.
>>>> + *  Emmanuel Raguet,  mailto:raguet at crf.canon.fr
>>>> + *
>>>> + *  Common file, merged from s3c2400/irq/irq.h and s3c2410/irq/irq.h
>>>> + *
>>>> + *  1. Modified from s3c2400   Peng Fan van.freenix at gmail.com
>>>> + */
>>>> +
>>>> +#ifndef _IRQ_H_
>>>> +#define _IRQ_H_
>>>> +
>>>> +#ifndef ASM
>>>> +#include <rtems.h>
>>>> +#include <rtems/irq.h>
>>>> +#include <rtems/irq-extension.h>
>>>> +
>>>> +#include <s3c64xx.h>
>>>> +
>>>> +#ifdef CPU_S3C6410
>>>> +  /* possible interrupt sources */
>>>> +#define BSP_EINT0                      0
>>>> +#define BSP_EINT1                      1
>>>> +#define BSP_RTC_TIC            2
>>>> +#define BSP_CAMIF_C            3
>>>> +#define BSP_CAMIF_P            4
>>>> +#define        BSP_I2C1                        5
>>>> +#define BSP_I2S0_1_V40 6
>>>> +/* 7 is reserved */
>>>> +#define BSP_3D                         8
>>>> +#define BSP_POST0                      9
>>>> +#define BSP_RPTATOR            10
>>>> +#define BSP_2D                         11
>>>> +#define BSP_TVENC                      12
>>>> +#define BSP_SCALER             13
>>>> +#define BSP_BATF                       14
>>>> +#define BSP_JPEG                       15
>>>> +#define BSP_MFC                                16
>>>> +#define BSP_SDMA0                      17
>>>> +#define BSP_SDMA1                      18
>>>> +#define BSP_ARM_DMAERR 19
>>>> +#define BSP_ARM_DMA            20
>>>> +#define BSP_ARM_DMAS   21
>>>> +#define BSP_KEYPAD             22
>>>> +#define        BSP_TIMER0              23
>>>> +#define BSP_TIMER1             24
>>>> +#define BSP_TIMER2             25
>>>> +#define BSP_WDT                                26
>>>> +#define BSP_TIMER3             27
>>>> +#define BSP_TIMER4             28
>>>> +#define BSP_LCD0                       29
>>>> +#define BSP_LCD1                       30
>>>> +#define BSP_LCD2                       31
>>>> +#define BSP_EINT2                      32
>>>> +#define BSP_EINT3                      33
>>>> +#define BSP_PCM0                       34
>>>> +#define BSP_PCM1                       35
>>>> +#define BSP_AC97                       36
>>>> +#define BSP_UART0                      37
>>>> +#define BSP_UART1                      38
>>>> +#define BSP_UART2                      39
>>>> +#define BSP_UART3                      40
>>>> +#define BSP_DMA0                       41
>>>> +#define BSP_DMA1                       42
>>>> +#define BSP_ONENAND0   43
>>>> +#define BSP_ONENAND1   44
>>>> +#define BSP_NFC                                45
>>>> +#define BSP_CFC                                46
>>>> +#define BSP_UHOST                      47
>>>> +#define BSP_SPI0                       48
>>>> +#define BSP_SPI1                       49
>>>> +#define BSP_HSMMC2             49
>>>> +#define BSP_I2C0                       50
>>>> +#define BSP_HSItx                      51
>>>> +#define BSP_HSIrx                      52
>>>> +#define BSP_EINT4                      53
>>>> +#define BSP_MSM                                54
>>>> +#define BSP_HOSTIF             55
>>>> +#define BSP_HSMMC0             56
>>>> +#define BSP_HSMMC1             57
>>>> +#define BSP_OTG                                58
>>>> +#define BSP_IrDA                       59
>>>> +#define BSP_RTC_ALARM  60
>>>> +#define BSP_SEC                                61
>>>> +#define BSP_PENDNUP            62
>>>> +#define BSP_ADC                                63
>>>> +
>>>> +#define BSP_MAX_INT            64
>>>> +#endif
>>>> +
>>>> +#define BSP_INTERRUPT_VECTOR_MIN 0
>>>> +
>>>> +#define BSP_INTERRUPT_VECTOR_MAX (BSP_MAX_INT - 1)
>>>> +
>>>> +#endif /* ASM */
>>>> +#endif /* _IRQ_H_ */
>>>> +/* end of include file */
>>>> diff --git a/c/src/lib/libcpu/arm/shared/include/arm-cp15.h
>>>> b/c/src/lib/libcpu/arm/shared/include/arm-cp15.h
>>>> index 3edc83f..45af5dd 100644
>>>> --- a/c/src/lib/libcpu/arm/shared/include/arm-cp15.h
>>>> +++ b/c/src/lib/libcpu/arm/shared/include/arm-cp15.h
>>>> @@ -609,6 +609,23 @@ static inline void
>>>> arm_cp15_data_cache_test_and_clean(void)
>>>>    );
>>>>  }
>>>>
>>>> +static inline void arm_cp15_data_cache_clean_and_invalidate(void)
>>>> +{
>>>> +  ARM_SWITCH_REGISTERS;
>>>> +
>>>> +  uint32_t sbz = 0;
>>>> +
>>>> +  __asm__ volatile (
>>>> +    ARM_SWITCH_TO_ARM
>>>> +    "mcr p15, 0, %[sbz], c7, c14, 0\n"
>>>> +    ARM_SWITCH_BACK
>>>> +    : ARM_SWITCH_OUTPUT
>>>> +    : [sbz] "r" (sbz)
>>>> +    : "memory"
>>>> +  );
>>>> +
>>>> +}
>>>> +
>>>>  static inline void arm_cp15_data_cache_clean_and_invalidate_line(const
>>>> void *mva)
>>>>  {
>>>>    ARM_SWITCH_REGISTERS;
>>>> --
>>>> 1.7.10.4
>>>>
>>>> _______________________________________________
>>>> rtems-devel mailing list
>>>> rtems-devel at rtems.org
>>>> http://www.rtems.org/mailman/listinfo/rtems-devel
>>>>
>>>
>>
>
>
> --
> Regards,
> Dhananjay M Balan,
> Department Of Computer Science,
> College Of Engineering, Trivandrum.
> http://cet.ac.in
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20130417/bda3a014/attachment.html>


More information about the devel mailing list