public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/2] LPC2468 support
Date: Fri, 24 Apr 2009 23:58:04 +0200	[thread overview]
Message-ID: <20090424215804.GC10032@game.jcrosoft.org> (raw)
In-Reply-To: <49F1A92F.9070804@duran-audio.com>

On 13:57 Fri 24 Apr     , Remco Poelstra wrote:
> This patch includes support for the LPC2468 processor from NXP.
> 
> Signed-off-by: Remco Poelstra <remco.poelstra+u-boot@duran-audio.com>
> ---
> A working board example will be submitted when this patch is found to be OK.
> This patch is against latest git.
> The previous problem with PUTx vs. writex is solved.

two general news

I'm preparing some patch to cleanup the arm720t include LPC irq support

I'll send it asap

please take a look and test it
> 
>  From 75361079ed78fb40c2840b3bd74687153e486620 Mon Sep 17 00:00:00 2001
> From: Remco Poelstra <remco.poelstra+u-boot@duran-audio.com>
> Date: Fri, 24 Apr 2009 12:18:21 +0200
> Subject: [PATCH] Support for LPC2468 processor from NXP
> 
> ---
>   Makefile                                |    3 +
>   cpu/arm720t/cpu.c                       |    2 +-
>   cpu/arm720t/interrupts.c                |   37 +++-
>   cpu/arm720t/lpc24xx/Makefile            |   50 +++++
>   cpu/arm720t/lpc24xx/flash.c             |  233 ++++++++++++++++++++
>   cpu/arm720t/lpc24xx/iap_entry.S         |    7 +
>   cpu/arm720t/start.S                     |   11 +-
>   drivers/serial/Makefile                 |    1 +
>   drivers/serial/serial_lpc2468.c         |  119 +++++++++++
>   include/asm-arm/arch-lpc24xx/hardware.h |   32 +++
>   include/asm-arm/arch-lpc24xx/immap.h    |  351 +++++++++++++++++++++++++++++++
>   include/asm-arm/config.h                |    4 +
>   include/flash.h                         |    1 +
>   13 files changed, 842 insertions(+), 9 deletions(-)
>   create mode 100644 cpu/arm720t/lpc24xx/Makefile
>   create mode 100644 cpu/arm720t/lpc24xx/flash.c
>   create mode 100644 cpu/arm720t/lpc24xx/iap_entry.S
>   create mode 100644 drivers/serial/serial_lpc2468.c
>   create mode 100644 include/asm-arm/arch-lpc24xx/hardware.h
>   create mode 100644 include/asm-arm/arch-lpc24xx/immap.h
> 
> diff --git a/Makefile b/Makefile
> index e91c051..fb23ee6 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -2940,6 +2940,9 @@ B2_config	:	unconfig
>   ## ARM720T Systems
>   #########################################################################
> 
> +LPC2468_config:		unconfig
> +	@$(MKCONFIG) $(@:_config=) arm arm720t LPC2468 NULL lpc24xx
> +
>   armadillo_config:	unconfig
>   	@$(MKCONFIG) $(@:_config=) arm arm720t armadillo
> 
> diff --git a/cpu/arm720t/cpu.c b/cpu/arm720t/cpu.c
> index 6c40903..b3a2853 100644
> --- a/cpu/arm720t/cpu.c
> +++ b/cpu/arm720t/cpu.c
> @@ -75,7 +75,7 @@ int cleanup_before_linux (void)
>   	/* go to high speed */
>   	IO_SYSCON3 = (IO_SYSCON3 & ~CLKCTL) | CLKCTL_73;
>   #endif
> -#elif defined(CONFIG_NETARM) || defined(CONFIG_S3C4510B) || defined(CONFIG_LPC2292)
> +#elif defined(CONFIG_NETARM) || defined(CONFIG_S3C4510B) || defined(CONFIG_LPC2000)
>   	disable_interrupts ();
>   	/* Nothing more needed */
>   #elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
> diff --git a/cpu/arm720t/interrupts.c b/cpu/arm720t/interrupts.c
> index 39ed345..d7aec27 100644
> --- a/cpu/arm720t/interrupts.c
> +++ b/cpu/arm720t/interrupts.c
> @@ -29,17 +29,26 @@
>   #include <common.h>
>   #include <clps7111.h>
>   #include <asm/proc-armv/ptrace.h>
> +#include <asm/io.h>
> +#if defined(CONFIG_LPC2468)
> +#include <asm/arch/immap.h>
> +#else
>   #include <asm/hardware.h>
> +#endif
> 
>   #ifndef CONFIG_NETARM
> +
> +#if defined(CONFIG_LPC2292)
> +#define TIMER_LOAD_VAL 0xffff
> +#define READ_TIMER (0xFFFFFFFF - GET32(T0TC))
> +#elif defined(CONFIG_LPC2468)
> +#define TIMER_LOAD_VAL 0
> +#define READ_TIMER (0xFFFFFFFF - 0xE0004008)
> +#else
>   /* we always count down the max. */
>   #define TIMER_LOAD_VAL 0xffff
>   /* macro to read the 16 bit timer */
>   #define READ_TIMER (IO_TC1D & 0xffff)
> -
> -#ifdef CONFIG_LPC2292
> -#undef READ_TIMER
> -#define READ_TIMER (0xFFFFFFFF - GET32(T0TC))
>   #endif
> 
>   #else
> @@ -80,6 +89,14 @@ void do_irq (struct pt_regs *pt_regs)
>       pfnct = (void (*)(void))VICVectAddr;
> 
>       (*pfnct)();
> +#elif defined(CONFIG_LPC2468)
> +	void (*pfnct) (void);
> +	vic_2468_t *vic = &(((immap_t *)CONFIG_SYS_IMMAP)->ahb.vic);
> +
> +	pfnct = (void (*)(void))(&(vic->vicaddr));
> +
> +	(*pfnct) ();
> +
>   #else
>   #error do_irq() not defined for this CPU type
>   #endif
> @@ -112,6 +129,9 @@ static ulong lastdec;
> 
>   int interrupt_init (void)
>   {
> +#if defined(CONFIG_LPC2468)
> +	timer_2468_t *timer0=&(((immap_t *)CONFIG_SYS_IMMAP)->apb.timer0);
> +#endif
> 
>   #if defined(CONFIG_NETARM)
>   	/* disable all interrupts */
> @@ -185,6 +205,13 @@ int interrupt_init (void)
>   	PUT32(T0MCR, 0);
>   	PUT32(T0TC, 0);
>   	PUT32(T0TCR, 1);	/* enable timer0 */
> +#elif defined(CONFIG_LPC2468)
> +	writel (0, &(timer0->ir));		/*disable all timer0 interupts */
> +	writel (0, &(timer0->tcr));		/*disable timer0 */
> +	writel (CFG_SYS_CLK_FREQ / CONFIG_SYS_HZ - 1, &(timer0->pr));
> +	writel (0, &(timer0->mcr));
> +	writel (0, &(timer0->tc));
> +	writel (1, &(timer0->tcr));
> 
>   #else
>   #error No interrupt_init() defined for this CPU type
> @@ -201,7 +228,7 @@ int interrupt_init (void)
>    */
> 
> 
> -#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_NETARM) || defined(CONFIG_ARMADILLO) || defined(CONFIG_LPC2292)
> +#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_NETARM) || defined(CONFIG_ARMADILLO) || defined(CONFIG_LPC2000)
> 
>   void reset_timer (void)
>   {
> diff --git a/cpu/arm720t/lpc24xx/Makefile b/cpu/arm720t/lpc24xx/Makefile
> new file mode 100644
> index 0000000..f091502
> --- /dev/null
> +++ b/cpu/arm720t/lpc24xx/Makefile
> @@ -0,0 +1,50 @@
> +#
> +# (C) Copyright 2000-2007
> +# Wolfgang Denk, DENX Software Engineering, wd at 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 $(TOPDIR)/config.mk
> +
> +LIB	= $(obj)lib$(SOC).a
> +
> +COBJS	= flash.o
> +SOBJS	= $(obj)iap_entry.o
> +
> +SRCS	:= $(COBJS:.o=.c)
> +OBJS	:= $(addprefix $(obj),$(COBJS))
> +
> +all:	$(obj).depend $(LIB)
> +
> +$(LIB):	$(OBJS) $(SOBJS)
> +	$(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
> +
> +# this MUST be compiled as thumb code!
why?
no thumb will be accpeted without a clear explination
> +$(SOBJS):
> +	$(CC) $(AFLAGS) -march=armv4t -c -o $(SOBJS) iap_entry.S
> +
> +#########################################################################
> +
> +# defines $(obj).depend target
> +include $(SRCTREE)/rules.mk
> +
> +sinclude $(obj).depend
> +
> +#########################################################################
> diff --git a/cpu/arm720t/lpc24xx/flash.c b/cpu/arm720t/lpc24xx/flash.c
> new file mode 100644
> index 0000000..46a1a56
> --- /dev/null
> +++ b/cpu/arm720t/lpc24xx/flash.c
> @@ -0,0 +1,233 @@
> +/*
> + * (C) Copyright 2006 Embedded Artists AB <www.embeddedartists.com>
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#include <common.h>
> +#include <asm/io.h>
> +#include <asm/arch/immap.h>
> +/* IAP commands use 32 bytes at the top of CPU internal sram, we
> +   use 512 bytes below that */
please use this style of comment
/*
 *
 */
> +#define COPY_BUFFER_LOCATION 0x4000fde0
evenif it's soc specific flash support I think they need to be store with the
other flash and need to have the ack of Stefan
> +
> +#define IAP_LOCATION 0x7ffffff1
> +#define IAP_CMD_PREPARE 50
> +#define IAP_CMD_COPY 51
> +#define IAP_CMD_ERASE 52
> +#define IAP_CMD_CHECK 53
> +#define IAP_CMD_ID 54
> +#define IAP_CMD_VERSION 55
> +#define IAP_CMD_COMPARE 56
> +

> diff --git a/cpu/arm720t/start.S b/cpu/arm720t/start.S
> index 022b873..eca4d9f 100644
> --- a/cpu/arm720t/start.S
> +++ b/cpu/arm720t/start.S
> @@ -127,7 +127,7 @@ reset:
>   	bl	cpu_init_crit
>   #endif
> 
> -#ifdef CONFIG_LPC2292
> +#if defined(CONFIG_LPC2000)
>   	bl	lowlevel_init
>   #endif
I'm not really happy with this we need to extract the soc specific from the
arch init
> @@ -368,6 +368,11 @@ lock_loop:
>   	ldr	r0, VPBDIV_ADR
>   	mov	r1, #0x01	/* VPB clock is same as process clock */
>   	str	r1, [r0]
> +#elif defined(CONFIG_LPC2468)
> +    ldr r0, =0x40008000 /*0x40000000 is internal SRAM,
> +			0x4000FFFF is end of SRAM*/
> +    mov sp,r0
> +    sub sl,sp,#0x2000
>   #else
>   #error No cpu_init_crit() defined for current CPU type
>   #endif
> @@ -383,7 +388,7 @@ lock_loop:
>   	str	r1, [r0]
>   #endif
> 
> -#ifndef CONFIG_LPC2292
> +#if !defined(CONFIG_LPC2000)
>   	mov	ip, lr
>   	/*
>   	 * before relocating, we have to setup RAM timing
> @@ -601,7 +606,7 @@ reset_cpu:
>    * on external peripherals such as watchdog timers, etc. */
>   #elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
>   	/* No specific reset actions for IntegratorAP/CM720T as yet */
> -#elif defined(CONFIG_LPC2292)
> +#elif defined(CONFIG_LPC2000)
>   	.align	5
>   .globl reset_cpu
>   reset_cpu:
> diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
> index bb99a34..929fb5a 100644
> --- a/drivers/serial/Makefile
> +++ b/drivers/serial/Makefile
> @@ -39,6 +39,7 @@ COBJS-$(CONFIG_IMX_SERIAL) += serial_imx.o
>   COBJS-$(CONFIG_IXP_SERIAL) += serial_ixp.o
>   COBJS-$(CONFIG_KS8695_SERIAL) += serial_ks8695.o
>   COBJS-$(CONFIG_LPC2292_SERIAL) += serial_lpc2292.o
> +COBJS-$(CONFIG_LPC2468_SERIAL) += serial_lpc2468.o
>   COBJS-$(CONFIG_MAX3100_SERIAL) += serial_max3100.o
>   COBJS-$(CONFIG_MX31_UART) += serial_mx31.o
>COBJS-$(CONFIG_NETARM_SERIAL) += serial_netarm.o

Best Regards,
J.

  parent reply	other threads:[~2009-04-24 21:58 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-18 13:13 [U-Boot] [PATCH 1/1] LPC2468 support Remco Poelstra
2009-03-18 13:58 ` Wolfgang Denk
2009-03-18 14:54   ` [U-Boot] [PATCH 1/2] " Remco Poelstra
2009-03-18 16:46     ` Wolfgang Denk
2009-03-19 15:06       ` Remco Poelstra
2009-03-19 21:22         ` Wolfgang Denk
2009-03-24 11:05           ` Remco Poelstra
2009-03-24 22:33             ` Wolfgang Denk
2009-03-25  8:29               ` Remco Poelstra
2009-03-25  9:47                 ` Wolfgang Denk
2009-03-25 10:06                   ` Remco Poelstra
2009-03-25 21:51                     ` Jean-Christophe PLAGNIOL-VILLARD
2009-03-26  9:03                       ` Remco Poelstra
2009-04-24 11:57                         ` Remco Poelstra
2009-04-24 12:55                           ` Wolfgang Denk
2009-04-28  9:14                             ` Remco Poelstra
2009-04-28 16:43                               ` Ben Warren
2009-04-24 21:58                           ` Jean-Christophe PLAGNIOL-VILLARD [this message]
2009-04-24 22:14                             ` Wolfgang Denk
2009-04-25 12:47                               ` Jean-Christophe PLAGNIOL-VILLARD
2009-04-27  7:27                                 ` Stefan Roese
2009-04-27 23:20                                   ` Wolfgang Denk
2009-04-28  6:27                                     ` Stefan Roese
2009-04-28  6:46                                       ` Wolfgang Denk
2009-04-28  7:08                                         ` Stefan Roese
2009-03-25 21:43                 ` Jean-Christophe PLAGNIOL-VILLARD
2009-03-26  9:10                   ` Remco Poelstra
2009-03-26  9:27                     ` Remco Poelstra
2009-03-18 14:56   ` [U-Boot] [PATCH 2/2] LPC2468 example board Remco Poelstra
2009-03-25 22:01     ` Jean-Christophe PLAGNIOL-VILLARD
2009-03-26  9:11       ` Remco Poelstra
2009-04-28 13:54         ` Remco Poelstra
2009-07-17 22:18           ` Wolfgang Denk
2009-07-18 16:16           ` Jean-Christophe PLAGNIOL-VILLARD

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090424215804.GC10032@game.jcrosoft.org \
    --to=plagnioj@jcrosoft.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox