Jens Scharsig wrote: > * prepare joining at91 and at91rm9200 > * please read README.soc-at91 for details >
It looks like a lot of these files are copies. Please explain in the commit log what you are doing. Such as cpu/arm920t/at91/timer.c is a copy of .. These are the parts changed. 1. 2. It is hard to see what has changed I will try below.. > Signed-off-by: Jens Scharsig <js_at...@scharsoft.de> > --- > cpu/arm920t/at91/Makefile | 47 +++++++++ > cpu/arm920t/at91/lowlevel_init.S | 177 > ++++++++++++++++++++++++++++++++ not much change vs rm9200 > cpu/arm920t/at91/reset.c | 59 +++++++++++ register access changes > cpu/arm920t/at91/timer.c | 163 +++++++++++++++++++++++++++++ white space changes register access changes > cpu/arm920t/cpu.c | 4 + > doc/README.at91-soc | 24 ++++- > include/asm-arm/arch-at91/at91_mc.h | 89 ++++++++++++++++ > include/asm-arm/arch-at91/at91_st.h | 48 +++++++++ > include/asm-arm/arch-at91/at91_tc.h | 79 ++++++++++++++ > include/asm-arm/arch-at91/at91rm9200.h | 135 ++++++++++++++++++++++++ > include/asm-arm/arch-at91/hardware.h | 2 +- > 11 files changed, 825 insertions(+), 2 deletions(-) > create mode 100644 cpu/arm920t/at91/Makefile > create mode 100644 cpu/arm920t/at91/lowlevel_init.S > create mode 100644 cpu/arm920t/at91/reset.c > create mode 100644 cpu/arm920t/at91/timer.c > create mode 100644 include/asm-arm/arch-at91/at91_mc.h > create mode 100644 include/asm-arm/arch-at91/at91_st.h > create mode 100644 include/asm-arm/arch-at91/at91_tc.h > create mode 100644 include/asm-arm/arch-at91/at91rm9200.h > > diff --git a/cpu/arm920t/at91/Makefile b/cpu/arm920t/at91/Makefile > new file mode 100644 > index 0000000..6e683f6 > --- /dev/null > +++ b/cpu/arm920t/at91/Makefile > @@ -0,0 +1,47 @@ > +# > +# (C) Copyright 2000-2006 > +# Wolfgang Denk, DENX Software Engineering, w...@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 > + > +SOBJS += lowlevel_init.o > +COBJS += reset.o > +COBJS += timer.o > + > +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) > +OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) > + > +all: $(obj).depend $(LIB) > + > +$(LIB): $(OBJS) > + $(AR) $(ARFLAGS) $@ $(OBJS) > + > +######################################################################### > + > +# defines $(obj).depend target > +include $(SRCTREE)/rules.mk > + > +sinclude $(obj).depend > + > +######################################################################### > diff --git a/cpu/arm920t/at91/lowlevel_init.S > b/cpu/arm920t/at91/lowlevel_init.S > new file mode 100644 > index 0000000..ecd3d7e > --- /dev/null > +++ b/cpu/arm920t/at91/lowlevel_init.S > @@ -0,0 +1,177 @@ > +/* > + * Memory Setup stuff - taken from blob memsetup.S Many copyrights like this Please check > + * > + * Copyright (C) 1999 2000 2001 Erik Mouw (j.a.k.m...@its.tudelft.nl) and > + * Jan-Derk Bakker (j.d.bak...@its.tudelft.nl) > + * > + * Modified for the at91rm9200dk board by Maybe change to 'Based on the at91rm9200dk board' 'This is the original copyright" > + * (C) Copyright 2004 > + * Gary Jennejohn, DENX Software Engineering, <ga...@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 ws extra tab Apply globally > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > + */ > + > +#include <config.h> > +#include <version.h> > + > +#ifndef CONFIG_SKIP_LOWLEVEL_INIT > + > +#define AT91_PMC_MOR 0xFFFFFC20 /* Main oscillator register */ ws extra space after '..20 ' There are a number of other similar small ws errors. Please remove the unneeded leading or trailing spaces. > +#define AT91_PMC_PLLAR 0xFFFFFC28 > +#define AT91_PMC_PLLBR 0xFFFFFC2C > +#define AT91_PMC_MCKR 0xFFFFFC30 > + > +#define AT91_PIOC_ASR 0xFFFFF870 > +#define AT91_PIOC_BSR 0xFFFFF874 > +#define AT91_PIOC_PDR 0xFFFFF804 > + > +#define AT91_MC_EBI_CSA 0xFFFFFF60 > +#define AT91_MC_EBI_CFG 0xFFFFFF64 > +#define AT91_MC_SMC_CSR0 0xFFFFFF70 > + > +#define AT91_MC_SDRAMC_MR 0xFFFFFF90 > +#define AT91_MC_SDRAMC_TR 0xFFFFFF94 > +#define AT91_MC_SDRAMC_CR 0xFFFFFF98 > + > +_MTEXT_BASE: > +#undef START_FROM_MEM > +#ifdef START_FROM_MEM > + .word TEXT_BASE-PHYS_FLASH_1 > +#else > + .word TEXT_BASE > +#endif > + > +.globl lowlevel_init > +lowlevel_init: > + ldr r1, =AT91_PMC_MOR This was the only really change vs rm9200 > + /* Main oscillator Enable register */ > +#ifdef CONFIG_SYS_USE_MAIN_OSCILLATOR > + ldr r0, =0x0000FF01 /* Enable main oscillator */ > +#else > + ldr r0, =0x0000FF00 /* Disable main oscillator */ > +#endif > + str r0, [r1] /*AT91C_CKGR_MOR] */ > + /* Add loop to compensate Main Oscillator startup time */ > + ldr r0, =0x00000010 > +LoopOsc: > + subs r0, r0, #1 > + bhi LoopOsc > + > + /* memory control configuration */ > + /* this isn't very elegant, but what the heck */ > + ldr r0, =SMRDATA > + ldr r1, _MTEXT_BASE > + sub r0, r0, r1 > + add r2, r0, #80 > +0: change to logical labels apply globally > + /* the address */ > + ldr r1, [r0], #4 > + /* the value */ > + ldr r3, [r0], #4 > + str r3, [r1] > + cmp r2, r0 > + bne 0b > + /* delay - this is all done by guess */ > + ldr r0, =0x00010000 > + /* (vs reading PMC_SR for LOCKA, LOCKB ... or MOSCS earlier) */ > +1: > + subs r0, r0, #1 > + bhi 1b > + ldr r0, =SMRDATA1 > + ldr r1, _MTEXT_BASE > + sub r0, r0, r1 > + add r2, r0, #176 > +2: > + /* the address */ > + ldr r1, [r0], #4 > + /* the value */ > + ldr r3, [r0], #4 > + str r3, [r1] > + cmp r2, r0 > + bne 2b > + > + /* switch from FastBus to Asynchronous clock mode */ > + mrc p15, 0, r0, c1, c0, 0 > + orr r0, r0, #0xC0000000 @ set bit 31 (iA) and 30 (nF) should change to #define > + mcr p15, 0, r0, c1, c0, 0 > + > + /* everything is fine now */ > + mov pc, lr > + > + .ltorg > + > +SMRDATA: vs at91rm9200 The change is the slight changes in the names of the #defines below. As with other places, do not changes variables names this hides real changes and duplicates code. > + .word AT91_MC_EBI_CFG > + .word CONFIG_SYS_EBI_CFGR_VAL > + .word AT91_MC_SMC_CSR0 > + .word CONFIG_SYS_SMC_CSR0_VAL > + .word AT91_PMC_PLLAR > + .word CONFIG_SYS_PLLAR_VAL > + .word AT91_PMC_PLLBR > + .word CONFIG_SYS_PLLBR_VAL > + .word AT91_PMC_MCKR > + .word CONFIG_SYS_MCKR_VAL > + /* here there's a delay */ > +SMRDATA1: > + .word AT91_PIOC_ASR > + .word CONFIG_SYS_PIOC_ASR_VAL > + .word AT91_PIOC_BSR > + .word CONFIG_SYS_PIOC_BSR_VAL > + .word AT91_PIOC_PDR > + .word CONFIG_SYS_PIOC_PDR_VAL > + .word AT91_MC_EBI_CSA > + .word CONFIG_SYS_EBI_CSA_VAL > + .word AT91_MC_SDRAMC_CR > + .word CONFIG_SYS_SDRC_CR_VAL > + .word AT91_MC_SDRAMC_MR > + .word CONFIG_SYS_SDRC_MR_VAL > + .word CONFIG_SYS_SDRAM > + .word CONFIG_SYS_SDRAM_VAL > + .word AT91_MC_SDRAMC_MR > + .word CONFIG_SYS_SDRC_MR_VAL1 > + .word CONFIG_SYS_SDRAM > + .word CONFIG_SYS_SDRAM_VAL > + .word CONFIG_SYS_SDRAM > + .word CONFIG_SYS_SDRAM_VAL > + .word CONFIG_SYS_SDRAM > + .word CONFIG_SYS_SDRAM_VAL > + .word CONFIG_SYS_SDRAM > + .word CONFIG_SYS_SDRAM_VAL > + .word CONFIG_SYS_SDRAM > + .word CONFIG_SYS_SDRAM_VAL > + .word CONFIG_SYS_SDRAM > + .word CONFIG_SYS_SDRAM_VAL > + .word CONFIG_SYS_SDRAM > + .word CONFIG_SYS_SDRAM_VAL > + .word CONFIG_SYS_SDRAM > + .word CONFIG_SYS_SDRAM_VAL > + .word AT91_MC_SDRAMC_MR > + .word CONFIG_SYS_SDRC_MR_VAL2 > + .word CONFIG_SYS_SDRAM1 > + .word CONFIG_SYS_SDRAM_VAL > + .word AT91_MC_SDRAMC_TR > + .word CONFIG_SYS_SDRC_TR_VAL > + .word CONFIG_SYS_SDRAM > + .word CONFIG_SYS_SDRAM_VAL > + .word AT91_MC_SDRAMC_MR > + .word CONFIG_SYS_SDRC_MR_VAL3 > + .word CONFIG_SYS_SDRAM > + .word CONFIG_SYS_SDRAM_VAL > + /* SMRDATA1 is 176 bytes long */ > +#endif /* CONFIG_SKIP_LOWLEVEL_INIT */ > diff --git a/cpu/arm920t/at91/reset.c b/cpu/arm920t/at91/reset.c > new file mode 100644 > index 0000000..d38c53b > --- /dev/null > +++ b/cpu/arm920t/at91/reset.c > @@ -0,0 +1,59 @@ > +/* > + * (C) Copyright 2002 > + * Lineo, Inc. <www.lineo.com> > + * Bernhard Kuhn <bk...@lineo.com> > + * > + * (C) Copyright 2002 > + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> > + * Marius Groeger <mgroe...@sysgo.de> > + * > + * (C) Copyright 2002 > + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> > + * Alex Zuepke <a...@sysgo.de> > + * > + * See file CREDITS for list of people who contributed to this > + * project. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation; either version 2 of > + * the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > + */ > + > +#include <common.h> > +#include <asm/io.h> > +#include <asm/arch/hardware.h> > +#include <asm/arch/at91_st.h> > + > +void board_reset(void) __attribute__((__weak__)); > + > +void reset_cpu(ulong ignored) > +{ > + at91_st_t *st = (at91_st_t *) AT91_ST_BASE; > +#if defined(CONFIG_AT91RM9200_USART) || defined(CONFIG_AT91_USART) I could not find where CONFIG_AT91_USART is defined Remove. > + /*shutdown the console to avoid strange chars during reset */ > + serial_exit(); > +#endif > + > + if (board_reset) > + board_reset(); > + > + /* Reset the cpu by setting up the watchdog timer */ > + writel(AT91_ST_WDMR_RSTEN | AT91_ST_WDMR_EXTEN | AT91_ST_WDMR_WDV(2), > + &st->wdmr); > + writel(AT91_ST_CR_WDRST, &st->cr); > + /* and let him time out */ 'let it timeout' > + while (1) > + ; > + /* Never reached */ > +} > diff --git a/cpu/arm920t/at91/timer.c b/cpu/arm920t/at91/timer.c > new file mode 100644 > index 0000000..91377d4 > --- /dev/null > +++ b/cpu/arm920t/at91/timer.c > @@ -0,0 +1,163 @@ > +/* > + * (C) Copyright 2002 > + * Lineo, Inc. <www.lineo.com> > + * Bernhard Kuhn <bk...@lineo.com> > + * > + * (C) Copyright 2002 > + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> > + * Marius Groeger <mgroe...@sysgo.de> > + * > + * (C) Copyright 2002 > + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> > + * Alex Zuepke <a...@sysgo.de> > + * > + * See file CREDITS for list of people who contributed to this > + * project. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation; either version 2 of > + * the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > + */ > + > +#include <common.h> > + > +#include <asm/io.h> > +#include <asm/hardware.h> > +#include <asm/arch/at91_tc.h> > +#include <asm/arch/at91_pmc.h> > + > +/* the number of clocks per CONFIG_SYS_HZ */ > +#define TIMER_LOAD_VAL (CONFIG_SYS_HZ_CLOCK/CONFIG_SYS_HZ) > + > +static u32 timestamp; > +static u32 lastinc; > + > +int timer_init(void) > +{ > + at91_tc_t *tc = (at91_tc_t *) AT91_TC_BASE; > + at91_pmc_t *pmc = (at91_pmc_t *) AT91_PMC_BASE; > + > + /* enables TC1.0 clock */ > + writel(1 << AT91_ID_TC0, &pmc->pcer); /* enable clock */ > + > + writel(0, &tc->bcr); > + writel(AT91_TC_BMR_TC0XC0S_NONE | AT91_TC_BMR_TC1XC1S_NONE | > + AT91_TC_BMR_TC2XC2S_NONE , &tc->bmr); rm9200 had another bit < tmr->TC_CCR = AT91C_TC_CLKDIS; < #define AT91C_TC_CMR_CPCTRG (1 << 14) < /* set to MCLK/2 and restart the timer when the vlaue in TC_RC is reached */ < tmr->TC_CMR = AT91C_TC_TIMER_DIV1_CLOCK | AT91C_TC_CMR_CPCTRG; This ok? > + > + writel(AT91_TC_CCR_CLKDIS, &tc->tc[0].ccr); > + /* set to MCLK/2 and restart the timer > + when the value in TC_RC is reached */ > + writel(AT91_TC_CMR_TCCLKS_CLOCK1 | AT91_TC_CMR_CPCTRG, &tc->tc[0].cmr); > + > + writel(0xFFFFFFFF, &tc->tc[0].idr); /* disable interupts */ > + writel(TIMER_LOAD_VAL, &tc->tc[0].rc); > + > + writel(AT91_TC_CCR_SWTRG | AT91_TC_CCR_CLKEN, &tc->tc[0].ccr); > + lastinc = 0; > + timestamp = 0; > + > + return 0; > +} > + > +/* > + * timer without interrupts > + */ > + > +void reset_timer(void) > +{ > + reset_timer_masked(); > +} > + > +ulong get_timer(ulong base) > +{ > + return get_timer_masked() - base; > +} > + > +void set_timer(ulong t) > +{ > + timestamp = t; > +} > + > +void __udelay(unsigned long usec) > +{ > + udelay_masked(usec); > +} > + > +void reset_timer_masked(void) > +{ > + /* reset time */ > + at91_tc_t *tc = (at91_tc_t *) AT91_TC_BASE; > + lastinc = readl(&tc->tc[0].cv) & 0x0000ffff; > + timestamp = 0; rm9200 did not zero out the top bits Is this needed ? > +} > + > +ulong get_timer_raw(void) > +{ > + at91_tc_t *tc = (at91_tc_t *) AT91_TC_BASE; > + u32 now; > + > + now = readl(&tc->tc[0].cv) & 0x0000ffff; > + > + if (now >= lastinc) { > + /* normal mode */ > + timestamp += now - lastinc; > + } else { > + /* we have an overflow ... */ > + timestamp += now + TIMER_LOAD_VAL - lastinc; > + } > + lastinc = now; > + > + return timestamp; > +} > + > +ulong get_timer_masked(void) > +{ > + return get_timer_raw()/TIMER_LOAD_VAL; > +} > + > +void udelay_masked(unsigned long usec) > +{ > + u32 tmo; > + u32 endtime; > + signed long diff; > + > + tmo = CONFIG_SYS_HZ_CLOCK / 1000; > + tmo *= usec; > + tmo /= 1000; > + > + endtime = get_timer_raw() + tmo; > + > + do { > + u32 now = get_timer_raw(); > + diff = endtime - now; > + } while (diff >= 0); > +} > + > +/* > + * This function is derived from PowerPC code (read timebase as long long). > + * On ARM it just returns the timer value. > + */ > +unsigned long long get_ticks(void) > +{ > + return get_timer(0); > +} > + > +/* > + * This function is derived from PowerPC code (timebase clock frequency). > + * On ARM it returns the number of timer ticks per second. > + */ > +ulong get_tbclk(void) > +{ > + return CONFIG_SYS_HZ; > +} > diff --git a/cpu/arm920t/cpu.c b/cpu/arm920t/cpu.c > index 34adb11..be82c87 100644 > --- a/cpu/arm920t/cpu.c > +++ b/cpu/arm920t/cpu.c > @@ -33,6 +33,10 @@ > #include <command.h> > #include <asm/system.h> > > +#ifdef CONFIG_AT91_LEGACY > +#warning Your board is using legacy AT91RM9200 SoC access. Please update! > +#endif > + > static void cache_flush(void); > > int cleanup_before_linux (void) > diff --git a/doc/README.at91-soc b/doc/README.at91-soc > index 063016e..29234b1 100644 > --- a/doc/README.at91-soc > +++ b/doc/README.at91-soc > @@ -37,6 +37,28 @@ The Way > 1. add's the new temporary CONFIG_AT91_LEGACY to all board configs > that not converted to new SoC access > 2. add new structures for SoC access > -3. Convert arch, driver and boards file zu new SoC > +3. Convert arch, driver and boards file to new SoC > 4. remove legacy code, if all boards and drives are ready > > + Join AT91 and AT91RM9200 SoC > +============================== > + > +Approximately 95 percent of AT91 and AT91RM9200 SoC parts are the same. > +So, we should use the chance, to join both archs togetter. > + > +To do this follow step needed: > + > +1. change Makefile > + @$(MKCONFIG) $(@:_config=) arm arm920t board vendor at91rm9200 > + to > + @$(MKCONFIG) $(@:_config=) arm arm920t board vendor at91 > +2. remove CONFIG_AT91_LEGACY in board config > +3. convert boards file to new SoC access > +4. convert or change drivers > + > +To support the joining process, a new SoC dir (at91) has been adding to > +arm920t arch directory. This directory contains files like at91rm9200 dir, > but > +uses the new c structure Soc access. The advantage of this is, we don't merge > +old Soc access code and new code while the board are not converted. > +Finally we can delete the whole at91rm9200 dir, if all board support the > +new AT91-SoC access. > diff --git a/include/asm-arm/arch-at91/at91_mc.h > b/include/asm-arm/arch-at91/at91_mc.h > new file mode 100644 > index 0000000..19d9755 > --- /dev/null > +++ b/include/asm-arm/arch-at91/at91_mc.h > @@ -0,0 +1,89 @@ > +/* > + * Memory Setup stuff - taken from blob memsetup.S > + * > + * Copyright (C) 2009 Jens Scharsig (js_at...@scharsoft.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 > + */ > + > +#ifndef AT91_MC_H > +#define AT91_MC_H > + > +typedef struct at91_ebi { > + u32 csa; /* 0x00 Chip Select Assignment Register */ > + u32 cfgr; /* 0x04 Configuration Register */ > + u32 reserved[2]; > +} at91_ebi_t; > + > +#define AT91_EBI_CSA_CS0A 0x0001 > +#define AT91_EBI_CSA_CS1A 0x0002 > + > +#define AT91_EBI_CSA_CS3A 0x0008 > +#define AT91_EBI_CSA_CS4A 0x0010 > + > +typedef struct at91_sdramc { > + u32 mr; /* 0x00 SDRAMC Mode Register */ > + u32 tr; /* 0x04 SDRAMC Refresh Timer Register */ > + u32 cr; /* 0x08 SDRAMC Configuration Register */ > + u32 ssr; /* 0x0C SDRAMC Self Refresh Register */ > + u32 lpr; /* 0x10 SDRAMC Low Power Register */ > + u32 ier; /* 0x14 SDRAMC Interrupt Enable Register */ > + u32 idr; /* 0x18 SDRAMC Interrupt Disable Register */ > + u32 imr; /* 0x1C SDRAMC Interrupt Mask Register */ > + u32 icr; /* 0x20 SDRAMC Interrupt Status Register */ > + u32 reserved[3]; > +} at91_sdramc_t; > + > +typedef struct at91_smc { > + u32 csr[8]; /* 0x00 SDRAMC Mode Register */ > +} at91_smc_t; > + > +#define AT91_SMC_CSR_RWHOLD(x) ((x & 0x7) << 28) > +#define AT91_SMC_CSR_RWSETUP(x) ((x & 0x7) << 24) > +#define AT91_SMC_CSR_ACSS_STANDARD 0x00000000 > +#define AT91_SMC_CSR_ACSS_1CYCLE 0x00010000 > +#define AT91_SMC_CSR_ACSS_2CYCLE 0x00020000 > +#define AT91_SMC_CSR_ACSS_3CYCLE 0x00030000 > +#define AT91_SMC_CSR_DRP 0x00008000 > +#define AT91_SMC_CSR_DBW_8 0x00004000 > +#define AT91_SMC_CSR_DBW_16 0x00002000 > +#define AT91_SMC_CSR_BAT_8 0x00000000 > +#define AT91_SMC_CSR_BAT_16 0x00001000 > +#define AT91_SMC_CSR_TDF(x) ((x & 0xF) << 8) > +#define AT91_SMC_CSR_WSEN 0x00000080 > +#define AT91_SMC_CSR_NWS(x) (x & 0x7F) > + > +typedef struct at91_bfc { > + u32 mr; /* 0x00 SDRAMC Mode Register */ > +} at91_bfc_t; > + > +typedef struct at91_mc { > + u32 rcr; /* 0x00 MC Remap Control Register */ > + u32 asr; /* 0x04 MC Abort Status Register */ > + u32 aasr; /* 0x08 MC Abort Address Status Reg */ > + u32 mpr; /* 0x0C MC Master Priority Register */ > + u32 reserved1[20]; /* 0x10-0x5C */ > + at91_ebi_t ebi; /* 0x60 - 0x6C EBI */ > + at91_smc_t smc; /* 0x70 - 0x8C SMC User Interface */ > + at91_sdramc_t sdramc; /* 0x90 - 0xBC SDRAMC User Interface */ > + at91_bfc_t bfc; /* 0xC0 BFC User Interface */ You may want to add '__attribute__ packed' around your structures to be save wrt the compiler adding extra spaces in it. This should be applied globally > + u32 reserved2[15]; > +} at91_mc_t; > + > +#endif > diff --git a/include/asm-arm/arch-at91/at91_st.h > b/include/asm-arm/arch-at91/at91_st.h > new file mode 100644 > index 0000000..a5fcfd2 > --- /dev/null > +++ b/include/asm-arm/arch-at91/at91_st.h > @@ -0,0 +1,48 @@ > +/* > + * Memory Setup stuff - taken from blob memsetup.S > + * > + * Copyright (C) 2009 Jens Scharsig (js_at...@scharsoft.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 > + */ > + > +#ifndef AT91_ST_H > +#define AT91_ST_H > + > +typedef struct at91_st { > + > + u32 cr; > + u32 pimr; > + u32 wdmr; > + u32 rtmr; > + u32 sr; > + u32 ier; > + u32 idr; > + u32 imr; > + u32 rtar; > + u32 crtr; > +} at91_st_t; > + > +#define AT91_ST_CR_WDRST 1 > + > +#define AT91_ST_WDMR_WDV(x) (x & 0xFFFF) > +#define AT91_ST_WDMR_RSTEN 0x00010000 > +#define AT91_ST_WDMR_EXTEN 0x00020000 > + > +#endif > diff --git a/include/asm-arm/arch-at91/at91_tc.h > b/include/asm-arm/arch-at91/at91_tc.h > new file mode 100644 > index 0000000..b40cd20 > --- /dev/null > +++ b/include/asm-arm/arch-at91/at91_tc.h > @@ -0,0 +1,79 @@ > +/* > + * Memory Setup stuff - taken from blob memsetup.S > + * > + * Copyright (C) 2009 Jens Scharsig (js_at...@scharsoft.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 > + */ > + > +#ifndef AT91_TC_H > +#define AT91_TC_H > + > +typedef struct at91_tcc { > + u32 ccr; /* 0x00 Channel Control Register */ > + u32 cmr; /* 0x04 Channel Mode Register */ > + u32 reserved1[2]; > + u32 cv; /* 0x10 Counter Value */ > + u32 ra; /* 0x14 Register A */ > + u32 rb; /* 0x18 Register B */ > + u32 rc; /* 0x1C Register C */ > + u32 sr; /* 0x20 Status Register */ > + u32 ier; /* 0x24 Interrupt Enable Register */ > + u32 idr; /* 0x28 Interrupt Disable Register */ > + u32 imr; /* 0x2C Interrupt Mask Register */ > + u32 reserved3[4]; > +} at91_tcc_t; > + > +#define AT91_TC_CCR_CLKEN 0x00000001 > +#define AT91_TC_CCR_CLKDIS 0x00000002 > +#define AT91_TC_CCR_SWTRG 0x00000004 > + > +#define AT91_TC_CMR_CPCTRG 0x00004000 > + > +#define AT91_TC_CMR_TCCLKS_CLOCK1 0x00000000 > +#define AT91_TC_CMR_TCCLKS_CLOCK2 0x00000001 > +#define AT91_TC_CMR_TCCLKS_CLOCK3 0x00000002 > +#define AT91_TC_CMR_TCCLKS_CLOCK4 0x00000003 > +#define AT91_TC_CMR_TCCLKS_CLOCK5 0x00000004 > +#define AT91_TC_CMR_TCCLKS_XC0 0x00000005 > +#define AT91_TC_CMR_TCCLKS_XC1 0x00000006 > +#define AT91_TC_CMR_TCCLKS_XC2 0x00000007 > + > +typedef struct at91_tc { > + at91_tcc_t tc[3]; /* 0x00 TC Channel 0-2 */ > + u32 bcr; /* 0xC0 TC Block Control Register */ > + u32 bmr; /* 0xC4 TC Block Mode Register */ > +} at91_tc_t; > + > +#define AT91_TC_BMR_TC0XC0S_TCLK0 0x00000000 > +#define AT91_TC_BMR_TC0XC0S_NONE 0x00000001 > +#define AT91_TC_BMR_TC0XC0S_TIOA1 0x00000002 > +#define AT91_TC_BMR_TC0XC0S_TIOA2 0x00000003 > + > +#define AT91_TC_BMR_TC1XC1S_TCLK1 0x00000000 > +#define AT91_TC_BMR_TC1XC1S_NONE 0x00000004 > +#define AT91_TC_BMR_TC1XC1S_TIOA0 0x00000008 > +#define AT91_TC_BMR_TC1XC1S_TIOA2 0x0000000C > + > +#define AT91_TC_BMR_TC2XC2S_TCLK2 0x00000000 > +#define AT91_TC_BMR_TC2XC2S_NONE 0x00000010 > +#define AT91_TC_BMR_TC2XC2S_TIOA0 0x00000020 > +#define AT91_TC_BMR_TC2XC2S_TIOA1 0x00000030 > + > +#endif > diff --git a/include/asm-arm/arch-at91/at91rm9200.h > b/include/asm-arm/arch-at91/at91rm9200.h > new file mode 100644 > index 0000000..da6843b > --- /dev/null > +++ b/include/asm-arm/arch-at91/at91rm9200.h > @@ -0,0 +1,135 @@ > +/* > + * 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 optionany later version. ws '(at your option)' Tom _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot