diff options
Diffstat (limited to 'arch/arm/include/asm/arch-at91')
| -rw-r--r-- | arch/arm/include/asm/arch-at91/at91_common.h | 1 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-at91/at91_dbu.h | 41 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-at91/at91_eefc.h | 51 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-at91/at91_gpbr.h | 45 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-at91/at91_pit.h | 2 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-at91/at91_rtt.h | 36 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-at91/at91sam9260.h | 18 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-at91/clk.h | 5 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-at91/hardware.h | 1 | 
9 files changed, 195 insertions, 5 deletions
| diff --git a/arch/arm/include/asm/arch-at91/at91_common.h b/arch/arm/include/asm/arch-at91/at91_common.h index 01840eede..0067190a2 100644 --- a/arch/arm/include/asm/arch-at91/at91_common.h +++ b/arch/arm/include/asm/arch-at91/at91_common.h @@ -27,6 +27,7 @@  void at91_can_hw_init(void);  void at91_macb_hw_init(void); +void at91_mci_hw_init(void);  void at91_serial_hw_init(void);  void at91_serial0_hw_init(void);  void at91_serial1_hw_init(void); diff --git a/arch/arm/include/asm/arch-at91/at91_dbu.h b/arch/arm/include/asm/arch-at91/at91_dbu.h new file mode 100644 index 000000000..342929353 --- /dev/null +++ b/arch/arm/include/asm/arch-at91/at91_dbu.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2010 + * Reinhard Meyer, reinhard.meyer@emk-elektronik.de + * + * Debug Unit + * Based on AT91SAM9XE datasheet + * + * 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. + */ + +#ifndef AT91_DBU_H +#define AT91_DBU_H + +#ifndef __ASSEMBLY__ + +typedef struct at91_dbu { +	u32	cr;	/* Control Register WO */ +	u32	mr;	/* Mode Register  RW */ +	u32	ier;	/* Interrupt Enable Register WO */ +	u32	idr;	/* Interrupt Disable Register WO */ +	u32	imr;	/* Interrupt Mask Register RO */ +	u32	sr;	/* Status Register RO */ +	u32	rhr;	/* Receive Holding Register RO */ +	u32	thr;	/* Transmit Holding Register WO */ +	u32	brgr;	/* Baud Rate Generator Register RW */ +	u32	res1[7];/* 0x0024 - 0x003C Reserved */ +	u32	cidr;	/* Chip ID Register RO */ +	u32	exid;	/* Chip ID Extension Register RO */ +	u32	fnr;	/* Force NTRST Register RW */ +} at91_dbu_t; + +#endif /* __ASSEMBLY__ */ + +#define AT91_DBU_CID_ARCH_MASK		0x0ff00000 +#define AT91_DBU_CID_ARCH_9xx		0x01900000 +#define AT91_DBU_CID_ARCH_9XExx	0x02900000 + +#endif diff --git a/arch/arm/include/asm/arch-at91/at91_eefc.h b/arch/arm/include/asm/arch-at91/at91_eefc.h new file mode 100644 index 000000000..d45b3deca --- /dev/null +++ b/arch/arm/include/asm/arch-at91/at91_eefc.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2010 + * Reinhard Meyer, reinhard.meyer@emk-elektronik.de + * + * Enhanced Embedded Flash Controller + * Based on AT91SAM9XE datasheet + * + * 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. + */ + +#ifndef AT91_EEFC_H +#define AT91_EEFC_H + +#ifndef __ASSEMBLY__ + +typedef struct at91_eefc { +	u32	fmr;	/* Flash Mode Register RW */ +	u32	fcr;	/* Flash Command Register WO */ +	u32	fsr;	/* Flash Status Register RO */ +	u32	frr;	/* Flash Result Register RO */ +} at91_eefc_t; + +#endif /* __ASSEMBLY__ */ + +#define AT91_EEFC_FMR_FWS_MASK	0x00000f00 +#define AT91_EEFC_FMR_FRDY_BIT	0x00000001 + +#define AT91_EEFC_FCR_KEY		0x5a000000 +#define AT91_EEFC_FCR_FARG_MASK	0x00ffff00 +#define AT91_EEFC_FCR_FARG_SHIFT	8 +#define AT91_EEFC_FCR_FCMD_GETD	0x0 +#define AT91_EEFC_FCR_FCMD_WP		0x1 +#define AT91_EEFC_FCR_FCMD_WPL		0x2 +#define AT91_EEFC_FCR_FCMD_EWP		0x3 +#define AT91_EEFC_FCR_FCMD_EWPL	0x4 +#define AT91_EEFC_FCR_FCMD_EA		0x5 +#define AT91_EEFC_FCR_FCMD_SLB		0x8 +#define AT91_EEFC_FCR_FCMD_CLB		0x9 +#define AT91_EEFC_FCR_FCMD_GLB		0xA +#define AT91_EEFC_FCR_FCMD_SGPB	0xB +#define AT91_EEFC_FCR_FCMD_CGPB	0xC +#define AT91_EEFC_FCR_FCMD_GGPB	0xD + +#define AT91_EEFC_FSR_FRDY	1 +#define AT91_EEFC_FSR_FCMDE	2 +#define AT91_EEFC_FSR_FLOCKE	4 + +#endif diff --git a/arch/arm/include/asm/arch-at91/at91_gpbr.h b/arch/arm/include/asm/arch-at91/at91_gpbr.h new file mode 100644 index 000000000..cf1d790dd --- /dev/null +++ b/arch/arm/include/asm/arch-at91/at91_gpbr.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2010 + * Reinhard Meyer, reinhard.meyer@emk-elektronik.de + * + * General Purpose Backup Registers + * Based on AT91SAM9XE datasheet + * + * 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. + */ + +#ifndef AT91_GPBR_H +#define AT91_GPBR_H + +/* + * The Atmel AT91SAM9 series has a small resource of 4 nonvolatile + * 32 Bit registers (buffered by the Vbu power). + * + * Please consider carefully before using this resource for tasks + * that do not really need nonvolatile registers. Maybe you can + * store information in EEPROM or FLASH instead. + * + * However, if you use a GPBR please document its use here and + * reference the define in your code! + * + * known typical uses of the GPBRs: + * GPBR[0]: offset for RTT timekeeping (u-boot, kernel) + * GPBR[1]: unused + * GPBR[2]: unused + * GPBR[3]: bootcount (u-boot) + */ +#define AT91_GPBR_INDEX_TIMEOFF 0 +#define AT91_GPBR_INDEX_BOOTCOUNT 3 + +#ifndef __ASSEMBLY__ + +typedef struct at91_gpbr { +	u32 reg[4]; +} at91_gpbr_t; + +#endif /* __ASSEMBLY__ */ + +#endif diff --git a/arch/arm/include/asm/arch-at91/at91_pit.h b/arch/arm/include/asm/arch-at91/at91_pit.h index 5615a0206..61aca7941 100644 --- a/arch/arm/include/asm/arch-at91/at91_pit.h +++ b/arch/arm/include/asm/arch-at91/at91_pit.h @@ -25,7 +25,7 @@ typedef struct at91_pit {  #define		AT91_PIT_MR_IEN		0x02000000  #define		AT91_PIT_MR_EN		0x01000000 -#define		AT91_PIT_MR_PIV_MASK	(x & 0x000fffff) +#define		AT91_PIT_MR_PIV_MASK(x)	(x & 0x000fffff)  #define		AT91_PIT_MR_PIV(x)	(x & AT91_PIT_MR_PIV_MASK)  #ifdef CONFIG_AT91_LEGACY diff --git a/arch/arm/include/asm/arch-at91/at91_rtt.h b/arch/arm/include/asm/arch-at91/at91_rtt.h new file mode 100644 index 000000000..e0253ef82 --- /dev/null +++ b/arch/arm/include/asm/arch-at91/at91_rtt.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2010 + * Reinhard Meyer, reinhard.meyer@emk-elektronik.de + * + * Real-time Timer + * Based on AT91SAM9XE datasheet + * + * 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. + */ + +#ifndef AT91_RTT_H +#define AT91_RTT_H + +#ifndef __ASSEMBLY__ + +typedef struct at91_rtt { +	u32	mr;	/* Mode Register   RW 0x00008000 */ +	u32	ar;	/* Alarm Register  RW 0xFFFFFFFF */ +	u32	vr;	/* Value Register  RO 0x00000000 */ +	u32	sr;	/* Status Register RO 0x00000000 */ +} at91_rtt_t; + +#endif /* __ASSEMBLY__ */ + +#define AT91_RTT_MR_RTPRES	0x0000ffff +#define AT91_RTT_MR_ALMIEN	0x00010000 +#define AT91_RTT_RTTINCIEN	0x00020000 +#define AT91_RTT_RTTRST	0x00040000 + +#define AT91_RTT_SR_ALMS	0x00000001 +#define AT91_RTT_SR_RTTINC	0x00000002 + +#endif diff --git a/arch/arm/include/asm/arch-at91/at91sam9260.h b/arch/arm/include/asm/arch-at91/at91sam9260.h index ec0431803..cb34a94a3 100644 --- a/arch/arm/include/asm/arch-at91/at91sam9260.h +++ b/arch/arm/include/asm/arch-at91/at91sam9260.h @@ -59,7 +59,15 @@  #define AT91_RTT_BASE		0xfffffd20  #define AT91_PIT_BASE		0xfffffd30  #define AT91_WDT_BASE		0xfffffd40 -#define AT91_GPR_BASE		0xfffffd50 +/* + * The AT91SAM9XE has the GPBRs at a different address than + * the AT91SAM9260/9G20. + */ +#ifdef CONFIG_AT91SAM9XE +# define AT91_GPR_BASE		0xfffffd60 +#else +# define AT91_GPR_BASE		0xfffffd50 +#endif  #ifdef CONFIG_AT91_LEGACY @@ -140,10 +148,12 @@  /*   * Cpu Name   */ -#if defined(CONFIG_AT91SAM9260) -#define CONFIG_SYS_AT91_CPU_NAME	"AT91SAM9260" +#if defined(CONFIG_AT91SAM9XE) +# define CONFIG_SYS_AT91_CPU_NAME	"AT91SAM9XE" +#elif defined(CONFIG_AT91SAM9260) +# define CONFIG_SYS_AT91_CPU_NAME	"AT91SAM9260"  #elif defined(CONFIG_AT91SAM9G20) -#define CONFIG_SYS_AT91_CPU_NAME	"AT91SAM9G20" +# define CONFIG_SYS_AT91_CPU_NAME	"AT91SAM9G20"  #endif  #endif diff --git a/arch/arm/include/asm/arch-at91/clk.h b/arch/arm/include/asm/arch-at91/clk.h index f642dd995..457e6c9b2 100644 --- a/arch/arm/include/asm/arch-at91/clk.h +++ b/arch/arm/include/asm/arch-at91/clk.h @@ -59,5 +59,10 @@ static inline unsigned long get_twi_clk_rate(unsigned int dev_id)  	return get_mck_clk_rate();  } +static inline unsigned long get_mci_clk_rate(void) +{ +	return get_mck_clk_rate(); +} +  int at91_clock_init(unsigned long main_clock);  #endif /* __ASM_ARM_ARCH_CLK_H__ */ diff --git a/arch/arm/include/asm/arch-at91/hardware.h b/arch/arm/include/asm/arch-at91/hardware.h index 4ddb3155d..9f732a738 100644 --- a/arch/arm/include/asm/arch-at91/hardware.h +++ b/arch/arm/include/asm/arch-at91/hardware.h @@ -20,6 +20,7 @@  #include <asm/arch-at91/at91rm9200.h>  #elif defined(CONFIG_AT91SAM9260) || defined(CONFIG_AT91SAM9G20)  #include <asm/arch/at91sam9260.h> +#define AT91_BASE_MCI	AT91SAM9260_BASE_MCI  #define AT91_BASE_SPI	AT91SAM9260_BASE_SPI0  #define AT91_ID_UHP	AT91SAM9260_ID_UHP  #define AT91_PMC_UHP	AT91SAM926x_PMC_UHP |