Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
11a25ea7
Commit
11a25ea7
authored
Feb 11, 2012
by
Nicolas Ferre
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'armsoc/at91/9x5' into at91-3.4-base2
parents
9acacb13
76e80576
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
854 additions
and
31 deletions
+854
-31
arch/arm/boot/dts/at91sam9g25ek.dts
arch/arm/boot/dts/at91sam9g25ek.dts
+37
-0
arch/arm/boot/dts/at91sam9x5.dtsi
arch/arm/boot/dts/at91sam9x5.dtsi
+172
-0
arch/arm/boot/dts/at91sam9x5cm.dtsi
arch/arm/boot/dts/at91sam9x5cm.dtsi
+14
-0
arch/arm/mach-at91/Kconfig
arch/arm/mach-at91/Kconfig
+9
-0
arch/arm/mach-at91/Makefile
arch/arm/mach-at91/Makefile
+1
-0
arch/arm/mach-at91/at91sam9x5.c
arch/arm/mach-at91/at91sam9x5.c
+373
-0
arch/arm/mach-at91/board-dt.c
arch/arm/mach-at91/board-dt.c
+1
-0
arch/arm/mach-at91/clock.c
arch/arm/mach-at91/clock.c
+64
-19
arch/arm/mach-at91/include/mach/at91_pmc.h
arch/arm/mach-at91/include/mach/at91_pmc.h
+48
-12
arch/arm/mach-at91/include/mach/at91sam9x5.h
arch/arm/mach-at91/include/mach/at91sam9x5.h
+80
-0
arch/arm/mach-at91/include/mach/at91sam9x5_matrix.h
arch/arm/mach-at91/include/mach/at91sam9x5_matrix.h
+53
-0
arch/arm/mach-at91/include/mach/hardware.h
arch/arm/mach-at91/include/mach/hardware.h
+2
-0
No files found.
arch/arm/boot/dts/at91sam9g25ek.dts
0 → 100644
View file @
11a25ea7
/*
*
at91sam9g25ek
.
dts
-
Device
Tree
file
for
AT91SAM9G25
-
EK
board
*
*
Copyright
(
C
)
2012
Atmel
,
*
2012
Nicolas
Ferre
<
nicolas
.
ferre
@
atmel
.
com
>
*
*
Licensed
under
GPLv2
or
later
.
*/
/
dts
-
v1
/;
/
include
/
"at91sam9x5.dtsi"
/
include
/
"at91sam9x5cm.dtsi"
/
{
model
=
"Atmel AT91SAM9G25-EK"
;
compatible
=
"atmel,at91sam9g25ek"
,
"atmel,at91sam9x5ek"
,
"atmel,at91sam9x5"
,
"atmel,at91sam9"
;
chosen
{
bootargs
=
"128M console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) root=/dev/mtdblock1 rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs"
;
};
ahb
{
apb
{
dbgu
:
serial
@
fffff200
{
status
=
"okay"
;
};
usart0
:
serial
@
f801c000
{
status
=
"okay"
;
};
macb0
:
ethernet
@
f802c000
{
phy
-
mode
=
"rmii"
;
status
=
"okay"
;
};
};
};
};
arch/arm/boot/dts/at91sam9x5.dtsi
0 → 100644
View file @
11a25ea7
/*
*
at91sam9x5
.
dtsi
-
Device
Tree
Include
file
for
AT91SAM9x5
family
SoC
*
applies
to
AT91SAM9G15
,
AT91SAM9G25
,
AT91SAM9G35
,
*
AT91SAM9X25
,
AT91SAM9X35
SoC
*
*
Copyright
(
C
)
2012
Atmel
,
*
2012
Nicolas
Ferre
<
nicolas
.
ferre
@
atmel
.
com
>
*
*
Licensed
under
GPLv2
or
later
.
*/
/
include
/
"skeleton.dtsi"
/
{
model
=
"Atmel AT91SAM9x5 family SoC"
;
compatible
=
"atmel,at91sam9x5"
;
interrupt
-
parent
=
<&
aic
>;
aliases
{
serial0
=
&
dbgu
;
serial1
=
&
usart0
;
serial2
=
&
usart1
;
serial3
=
&
usart2
;
gpio0
=
&
pioA
;
gpio1
=
&
pioB
;
gpio2
=
&
pioC
;
gpio3
=
&
pioD
;
tcb0
=
&
tcb0
;
tcb1
=
&
tcb1
;
};
cpus
{
cpu
@
0
{
compatible
=
"arm,arm926ejs"
;
};
};
memory
@
20000000
{
reg
=
<
0x20000000
0x10000000
>;
};
ahb
{
compatible
=
"simple-bus"
;
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
ranges
;
apb
{
compatible
=
"simple-bus"
;
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
ranges
;
aic
:
interrupt
-
controller
@
fffff000
{
#
interrupt
-
cells
=
<
2
>;
compatible
=
"atmel,at91rm9200-aic"
;
interrupt
-
controller
;
interrupt
-
parent
;
reg
=
<
0xfffff000
0x200
>;
};
pit
:
timer
@
fffffe30
{
compatible
=
"atmel,at91sam9260-pit"
;
reg
=
<
0xfffffe30
0xf
>;
interrupts
=
<
1
4
>;
};
tcb0
:
timer
@
f8008000
{
compatible
=
"atmel,at91sam9x5-tcb"
;
reg
=
<
0xf8008000
0x100
>;
interrupts
=
<
17
4
>;
};
tcb1
:
timer
@
f800c000
{
compatible
=
"atmel,at91sam9x5-tcb"
;
reg
=
<
0xf800c000
0x100
>;
interrupts
=
<
17
4
>;
};
dma0
:
dma
-
controller
@
ffffec00
{
compatible
=
"atmel,at91sam9g45-dma"
;
reg
=
<
0xffffec00
0x200
>;
interrupts
=
<
20
4
>;
};
dma1
:
dma
-
controller
@
ffffee00
{
compatible
=
"atmel,at91sam9g45-dma"
;
reg
=
<
0xffffee00
0x200
>;
interrupts
=
<
21
4
>;
};
pioA
:
gpio
@
fffff400
{
compatible
=
"atmel,at91rm9200-gpio"
;
reg
=
<
0xfffff400
0x100
>;
interrupts
=
<
2
4
>;
#
gpio
-
cells
=
<
2
>;
gpio
-
controller
;
};
pioB
:
gpio
@
fffff600
{
compatible
=
"atmel,at91rm9200-gpio"
;
reg
=
<
0xfffff600
0x100
>;
interrupts
=
<
2
4
>;
#
gpio
-
cells
=
<
2
>;
gpio
-
controller
;
};
pioC
:
gpio
@
fffff800
{
compatible
=
"atmel,at91rm9200-gpio"
;
reg
=
<
0xfffff800
0x100
>;
interrupts
=
<
3
4
>;
#
gpio
-
cells
=
<
2
>;
gpio
-
controller
;
};
pioD
:
gpio
@
fffffa00
{
compatible
=
"atmel,at91rm9200-gpio"
;
reg
=
<
0xfffffa00
0x100
>;
interrupts
=
<
3
4
>;
#
gpio
-
cells
=
<
2
>;
gpio
-
controller
;
};
dbgu
:
serial
@
fffff200
{
compatible
=
"atmel,at91sam9260-usart"
;
reg
=
<
0xfffff200
0x200
>;
interrupts
=
<
1
4
>;
status
=
"disabled"
;
};
usart0
:
serial
@
f801c000
{
compatible
=
"atmel,at91sam9260-usart"
;
reg
=
<
0xf801c000
0x200
>;
interrupts
=
<
5
4
>;
atmel
,
use
-
dma
-
rx
;
atmel
,
use
-
dma
-
tx
;
status
=
"disabled"
;
};
usart1
:
serial
@
f8020000
{
compatible
=
"atmel,at91sam9260-usart"
;
reg
=
<
0xf8020000
0x200
>;
interrupts
=
<
6
4
>;
atmel
,
use
-
dma
-
rx
;
atmel
,
use
-
dma
-
tx
;
status
=
"disabled"
;
};
usart2
:
serial
@
f8024000
{
compatible
=
"atmel,at91sam9260-usart"
;
reg
=
<
0xf8024000
0x200
>;
interrupts
=
<
7
4
>;
atmel
,
use
-
dma
-
rx
;
atmel
,
use
-
dma
-
tx
;
status
=
"disabled"
;
};
macb0
:
ethernet
@
f802c000
{
compatible
=
"cdns,at32ap7000-macb"
,
"cdns,macb"
;
reg
=
<
0xf802c000
0x100
>;
interrupts
=
<
24
4
>;
status
=
"disabled"
;
};
macb1
:
ethernet
@
f8030000
{
compatible
=
"cdns,at32ap7000-macb"
,
"cdns,macb"
;
reg
=
<
0xf8030000
0x100
>;
interrupts
=
<
27
4
>;
status
=
"disabled"
;
};
};
};
};
arch/arm/boot/dts/at91sam9x5cm.dtsi
0 → 100644
View file @
11a25ea7
/*
* at91sam9x5cm.dtsi - Device Tree Include file for AT91SAM9x5 CPU Module
*
* Copyright (C) 2012 Atmel,
* 2012 Nicolas Ferre <nicolas.ferre@atmel.com>
*
* Licensed under GPLv2 or later.
*/
/ {
memory@20000000 {
reg = <0x20000000 0x8000000>;
};
};
arch/arm/mach-at91/Kconfig
View file @
11a25ea7
...
...
@@ -102,6 +102,15 @@ config ARCH_AT91SAM9G45
select HAVE_AT91_DBGU1
select AT91_SAM9G45_RESET
config ARCH_AT91SAM9X5
bool "AT91SAM9x5 family"
select CPU_ARM926T
select GENERIC_CLOCKEVENTS
select HAVE_FB_ATMEL
select HAVE_NET_MACB
select HAVE_AT91_DBGU0
select AT91_SAM9G45_RESET
config ARCH_AT91X40
bool "AT91x40"
select ARCH_USES_GETTIMEOFFSET
...
...
arch/arm/mach-at91/Makefile
View file @
11a25ea7
...
...
@@ -20,6 +20,7 @@ obj-$(CONFIG_ARCH_AT91SAM9263) += at91sam9263.o at91sam926x_time.o at91sam9263_d
obj-$(CONFIG_ARCH_AT91SAM9RL)
+=
at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9G20)
+=
at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9G45)
+=
at91sam9g45.o at91sam926x_time.o at91sam9g45_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9X5)
+=
at91sam9x5.o at91sam926x_time.o
obj-$(CONFIG_ARCH_AT91X40)
+=
at91x40.o at91x40_time.o
# AT91RM9200 board-specific support
...
...
arch/arm/mach-at91/at91sam9x5.c
0 → 100644
View file @
11a25ea7
/*
* Chip-specific setup code for the AT91SAM9x5 family
*
* Copyright (C) 2010-2012 Atmel Corporation.
*
* Licensed under GPLv2 or later.
*/
#include <linux/module.h>
#include <linux/dma-mapping.h>
#include <asm/irq.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <mach/at91sam9x5.h>
#include <mach/at91_pmc.h>
#include <mach/cpu.h>
#include <mach/board.h>
#include "soc.h"
#include "generic.h"
#include "clock.h"
#include "sam9_smc.h"
/* --------------------------------------------------------------------
* Clocks
* -------------------------------------------------------------------- */
/*
* The peripheral clocks.
*/
static
struct
clk
pioAB_clk
=
{
.
name
=
"pioAB_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_PIOAB
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
pioCD_clk
=
{
.
name
=
"pioCD_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_PIOCD
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
smd_clk
=
{
.
name
=
"smd_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_SMD
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
usart0_clk
=
{
.
name
=
"usart0_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_USART0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
usart1_clk
=
{
.
name
=
"usart1_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_USART1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
usart2_clk
=
{
.
name
=
"usart2_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_USART2
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
/* USART3 clock - Only for sam9g25/sam9x25 */
static
struct
clk
usart3_clk
=
{
.
name
=
"usart3_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_USART3
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
twi0_clk
=
{
.
name
=
"twi0_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_TWI0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
twi1_clk
=
{
.
name
=
"twi1_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_TWI1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
twi2_clk
=
{
.
name
=
"twi2_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_TWI2
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
mmc0_clk
=
{
.
name
=
"mci0_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_MCI0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
spi0_clk
=
{
.
name
=
"spi0_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_SPI0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
spi1_clk
=
{
.
name
=
"spi1_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_SPI1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
uart0_clk
=
{
.
name
=
"uart0_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_UART0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
uart1_clk
=
{
.
name
=
"uart1_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_UART1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
tcb0_clk
=
{
.
name
=
"tcb0_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_TCB
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
pwm_clk
=
{
.
name
=
"pwm_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_PWM
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
adc_clk
=
{
.
name
=
"adc_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_ADC
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
dma0_clk
=
{
.
name
=
"dma0_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_DMA0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
dma1_clk
=
{
.
name
=
"dma1_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_DMA1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
uhphs_clk
=
{
.
name
=
"uhphs_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_UHPHS
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
udphs_clk
=
{
.
name
=
"udphs_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_UDPHS
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
/* emac0 clock - Only for sam9g25/sam9x25/sam9g35/sam9x35 */
static
struct
clk
macb0_clk
=
{
.
name
=
"pclk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_EMAC0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
/* lcd clock - Only for sam9g15/sam9g35/sam9x35 */
static
struct
clk
lcdc_clk
=
{
.
name
=
"lcdc_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_LCDC
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
/* isi clock - Only for sam9g25 */
static
struct
clk
isi_clk
=
{
.
name
=
"isi_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_ISI
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
mmc1_clk
=
{
.
name
=
"mci1_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_MCI1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
/* emac1 clock - Only for sam9x25 */
static
struct
clk
macb1_clk
=
{
.
name
=
"pclk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_EMAC1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
ssc_clk
=
{
.
name
=
"ssc_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_SSC
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
/* can0 clock - Only for sam9x35 */
static
struct
clk
can0_clk
=
{
.
name
=
"can0_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_CAN0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
/* can1 clock - Only for sam9x35 */
static
struct
clk
can1_clk
=
{
.
name
=
"can1_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_CAN1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
*
periph_clocks
[]
__initdata
=
{
&
pioAB_clk
,
&
pioCD_clk
,
&
smd_clk
,
&
usart0_clk
,
&
usart1_clk
,
&
usart2_clk
,
&
twi0_clk
,
&
twi1_clk
,
&
twi2_clk
,
&
mmc0_clk
,
&
spi0_clk
,
&
spi1_clk
,
&
uart0_clk
,
&
uart1_clk
,
&
tcb0_clk
,
&
pwm_clk
,
&
adc_clk
,
&
dma0_clk
,
&
dma1_clk
,
&
uhphs_clk
,
&
udphs_clk
,
&
mmc1_clk
,
&
ssc_clk
,
// irq0
};
static
struct
clk_lookup
periph_clocks_lookups
[]
=
{
/* lookup table for DT entries */
CLKDEV_CON_DEV_ID
(
"usart"
,
"fffff200.serial"
,
&
mck
),
CLKDEV_CON_DEV_ID
(
"usart"
,
"f801c000.serial"
,
&
usart0_clk
),
CLKDEV_CON_DEV_ID
(
"usart"
,
"f8020000.serial"
,
&
usart1_clk
),
CLKDEV_CON_DEV_ID
(
"usart"
,
"f8024000.serial"
,
&
usart2_clk
),
CLKDEV_CON_DEV_ID
(
"usart"
,
"f8028000.serial"
,
&
usart3_clk
),
CLKDEV_CON_DEV_ID
(
"t0_clk"
,
"f8008000.timer"
,
&
tcb0_clk
),
CLKDEV_CON_DEV_ID
(
"t0_clk"
,
"f800c000.timer"
,
&
tcb0_clk
),
CLKDEV_CON_ID
(
"pioA"
,
&
pioAB_clk
),
CLKDEV_CON_ID
(
"pioB"
,
&
pioAB_clk
),
CLKDEV_CON_ID
(
"pioC"
,
&
pioCD_clk
),
CLKDEV_CON_ID
(
"pioD"
,
&
pioCD_clk
),
/* additional fake clock for macb_hclk */
CLKDEV_CON_DEV_ID
(
"hclk"
,
"f802c000.ethernet"
,
&
macb0_clk
),
CLKDEV_CON_DEV_ID
(
"hclk"
,
"f8030000.ethernet"
,
&
macb1_clk
),
};
/*
* The two programmable clocks.
* You must configure pin multiplexing to bring these signals out.
*/
static
struct
clk
pck0
=
{
.
name
=
"pck0"
,
.
pmc_mask
=
AT91_PMC_PCK0
,
.
type
=
CLK_TYPE_PROGRAMMABLE
,
.
id
=
0
,
};
static
struct
clk
pck1
=
{
.
name
=
"pck1"
,
.
pmc_mask
=
AT91_PMC_PCK1
,
.
type
=
CLK_TYPE_PROGRAMMABLE
,
.
id
=
1
,
};
static
void
__init
at91sam9x5_register_clocks
(
void
)
{
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
periph_clocks
);
i
++
)
clk_register
(
periph_clocks
[
i
]);
clkdev_add_table
(
periph_clocks_lookups
,
ARRAY_SIZE
(
periph_clocks_lookups
));
if
(
cpu_is_at91sam9g25
()
||
cpu_is_at91sam9x25
())
clk_register
(
&
usart3_clk
);
if
(
cpu_is_at91sam9g25
()
||
cpu_is_at91sam9x25
()
||
cpu_is_at91sam9g35
()
||
cpu_is_at91sam9x35
())
clk_register
(
&
macb0_clk
);
if
(
cpu_is_at91sam9g15
()
||
cpu_is_at91sam9g35
()
||
cpu_is_at91sam9x35
())
clk_register
(
&
lcdc_clk
);
if
(
cpu_is_at91sam9g25
())
clk_register
(
&
isi_clk
);
if
(
cpu_is_at91sam9x25
())
clk_register
(
&
macb1_clk
);
if
(
cpu_is_at91sam9x25
()
||
cpu_is_at91sam9x35
())
{
clk_register
(
&
can0_clk
);
clk_register
(
&
can1_clk
);
}
clk_register
(
&
pck0
);
clk_register
(
&
pck1
);
}
/* --------------------------------------------------------------------
* AT91SAM9x5 processor initialization
* -------------------------------------------------------------------- */
static
void
__init
at91sam9x5_map_io
(
void
)
{
at91_init_sram
(
0
,
AT91SAM9X5_SRAM_BASE
,
AT91SAM9X5_SRAM_SIZE
);
}
static
void
__init
at91sam9x5_ioremap_registers
(
void
)
{
if
(
of_at91sam926x_pit_init
()
<
0
)
panic
(
"Impossible to find PIT
\n
"
);
}
void
__init
at91sam9x5_initialize
(
void
)
{
arm_pm_restart
=
at91sam9g45_restart
;
at91_extern_irq
=
(
1
<<
AT91SAM9X5_ID_IRQ0
);
/* Register GPIO subsystem (using DT) */
at91_gpio_init
(
NULL
,
0
);
}
/* --------------------------------------------------------------------
* AT91SAM9x5 devices (temporary before modification of code)
* -------------------------------------------------------------------- */
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{}
void
__init
at91_set_serial_console
(
unsigned
portnr
)
{}
struct
platform_device
*
atmel_default_console_device
=
NULL
;
void
__init
at91_add_device_nand
(
struct
atmel_nand_data
*
data
)
{}
/* --------------------------------------------------------------------
* Interrupt initialization
* -------------------------------------------------------------------- */
/*
* The default interrupt priority levels (0 = lowest, 7 = highest).
*/
static
unsigned
int
at91sam9x5_default_irq_priority
[
NR_AIC_IRQS
]
__initdata
=
{
7
,
/* Advanced Interrupt Controller (FIQ) */
7
,
/* System Peripherals */
1
,
/* Parallel IO Controller A and B */
1
,
/* Parallel IO Controller C and D */
4
,
/* Soft Modem */
5
,
/* USART 0 */
5
,
/* USART 1 */
5
,
/* USART 2 */
5
,
/* USART 3 */
6
,
/* Two-Wire Interface 0 */
6
,
/* Two-Wire Interface 1 */
6
,
/* Two-Wire Interface 2 */
0
,
/* Multimedia Card Interface 0 */
5
,
/* Serial Peripheral Interface 0 */
5
,
/* Serial Peripheral Interface 1 */
5
,
/* UART 0 */
5
,
/* UART 1 */
0
,
/* Timer Counter 0, 1, 2, 3, 4 and 5 */
0
,
/* Pulse Width Modulation Controller */
0
,
/* ADC Controller */
0
,
/* DMA Controller 0 */
0
,
/* DMA Controller 1 */
2
,
/* USB Host High Speed port */
2
,
/* USB Device High speed port */
3
,
/* Ethernet MAC 0 */
3
,
/* LDC Controller or Image Sensor Interface */
0
,
/* Multimedia Card Interface 1 */
3
,
/* Ethernet MAC 1 */
4
,
/* Synchronous Serial Interface */
4
,
/* CAN Controller 0 */
4
,
/* CAN Controller 1 */
0
,
/* Advanced Interrupt Controller (IRQ0) */
};
struct
at91_init_soc
__initdata
at91sam9x5_soc
=
{
.
map_io
=
at91sam9x5_map_io
,
.
default_irq_priority
=
at91sam9x5_default_irq_priority
,
.
ioremap_registers
=
at91sam9x5_ioremap_registers
,
.
register_clocks
=
at91sam9x5_register_clocks
,
.
init
=
at91sam9x5_initialize
,
};
arch/arm/mach-at91/board-dt.c
View file @
11a25ea7
...
...
@@ -109,6 +109,7 @@ static void __init at91_dt_device_init(void)
static
const
char
*
at91_dt_board_compat
[]
__initdata
=
{
"atmel,at91sam9m10g45ek"
,
"atmel,at91sam9x5ek"
,
"calao,usb-a9g20"
,
NULL
};
...
...
arch/arm/mach-at91/clock.c
View file @
11a25ea7
...
...
@@ -48,24 +48,37 @@
* Chips have some kind of clocks : group them by functionality
*/
#define cpu_has_utmi() ( cpu_is_at91sam9rl() \
|| cpu_is_at91sam9g45())
|| cpu_is_at91sam9g45() \
|| cpu_is_at91sam9x5())
#define cpu_has_800M_plla() ( cpu_is_at91sam9g20() \
|| cpu_is_at91sam9g45())
|| cpu_is_at91sam9g45() \
|| cpu_is_at91sam9x5())
#define cpu_has_300M_plla() (cpu_is_at91sam9g10())
#define cpu_has_pllb() (!(cpu_is_at91sam9rl() \
|| cpu_is_at91sam9g45()))
|| cpu_is_at91sam9g45() \
|| cpu_is_at91sam9x5()))
#define cpu_has_upll() (cpu_is_at91sam9g45())
#define cpu_has_upll() (cpu_is_at91sam9g45() \
|| cpu_is_at91sam9x5())
/* USB host HS & FS */
#define cpu_has_uhp() (!cpu_is_at91sam9rl())
/* USB device FS only */
#define cpu_has_udpfs() (!(cpu_is_at91sam9rl() \
|| cpu_is_at91sam9g45()))
|| cpu_is_at91sam9g45() \
|| cpu_is_at91sam9x5()))
#define cpu_has_plladiv2() (cpu_is_at91sam9g45() \
|| cpu_is_at91sam9x5())
#define cpu_has_mdiv3() (cpu_is_at91sam9g45() \
|| cpu_is_at91sam9x5())
#define cpu_has_alt_prescaler() (cpu_is_at91sam9x5())
static
LIST_HEAD
(
clocks
);
static
DEFINE_SPINLOCK
(
clk_lock
);
...
...
@@ -138,13 +151,6 @@ static void pmc_uckr_mode(struct clk *clk, int is_on)
{
unsigned
int
uckr
=
at91_sys_read
(
AT91_CKGR_UCKR
);
if
(
cpu_is_at91sam9g45
())
{
if
(
is_on
)
uckr
|=
AT91_PMC_BIASEN
;
else
uckr
&=
~
AT91_PMC_BIASEN
;
}
if
(
is_on
)
{
is_on
=
AT91_PMC_LOCKU
;
at91_sys_write
(
AT91_CKGR_UCKR
,
uckr
|
clk
->
pmc_mask
);
...
...
@@ -209,11 +215,24 @@ static struct clk __init *at91_css_to_clk(unsigned long css)
return
&
utmi_clk
;
else
if
(
cpu_has_pllb
())
return
&
pllb
;
break
;
/* alternate PMC: can use master clock */
case
AT91_PMC_CSS_MASTER
:
return
&
mck
;
}
return
NULL
;
}
static
int
pmc_prescaler_divider
(
u32
reg
)
{
if
(
cpu_has_alt_prescaler
())
{
return
1
<<
((
reg
&
AT91_PMC_ALT_PRES
)
>>
PMC_ALT_PRES_OFFSET
);
}
else
{
return
1
<<
((
reg
&
AT91_PMC_PRES
)
>>
PMC_PRES_OFFSET
);
}
}
static
void
__clk_enable
(
struct
clk
*
clk
)
{
if
(
clk
->
parent
)
...
...
@@ -315,12 +334,22 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
{
unsigned
long
flags
;
unsigned
prescale
;
unsigned
long
prescale_offset
,
css_mask
;
unsigned
long
actual
;
if
(
!
clk_is_programmable
(
clk
))
return
-
EINVAL
;
if
(
clk
->
users
)
return
-
EBUSY
;
if
(
cpu_has_alt_prescaler
())
{
prescale_offset
=
PMC_ALT_PRES_OFFSET
;
css_mask
=
AT91_PMC_ALT_PCKR_CSS
;
}
else
{
prescale_offset
=
PMC_PRES_OFFSET
;
css_mask
=
AT91_PMC_CSS
;
}
spin_lock_irqsave
(
&
clk_lock
,
flags
);
actual
=
clk
->
parent
->
rate_hz
;
...
...
@@ -329,8 +358,8 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
u32
pckr
;
pckr
=
at91_sys_read
(
AT91_PMC_PCKR
(
clk
->
id
));
pckr
&=
AT91_PMC_CSS
;
/*
clock selection */
pckr
|=
prescale
<<
2
;
pckr
&=
css_mask
;
/* keep
clock selection */
pckr
|=
prescale
<<
prescale_offset
;
at91_sys_write
(
AT91_PMC_PCKR
(
clk
->
id
),
pckr
);
clk
->
rate_hz
=
actual
;
break
;
...
...
@@ -377,11 +406,17 @@ static void __init init_programmable_clock(struct clk *clk)
{
struct
clk
*
parent
;
u32
pckr
;
unsigned
int
css_mask
;
if
(
cpu_has_alt_prescaler
())
css_mask
=
AT91_PMC_ALT_PCKR_CSS
;
else
css_mask
=
AT91_PMC_CSS
;
pckr
=
at91_sys_read
(
AT91_PMC_PCKR
(
clk
->
id
));
parent
=
at91_css_to_clk
(
pckr
&
AT91_PMC_CSS
);
parent
=
at91_css_to_clk
(
pckr
&
css_mask
);
clk
->
parent
=
parent
;
clk
->
rate_hz
=
parent
->
rate_hz
/
(
1
<<
((
pckr
&
AT91_PMC_PRES
)
>>
2
)
);
clk
->
rate_hz
=
parent
->
rate_hz
/
pmc_prescaler_divider
(
pckr
);
}
#endif
/* CONFIG_AT91_PROGRAMMABLE_CLOCKS */
...
...
@@ -663,7 +698,7 @@ int __init at91_clock_init(unsigned long main_clock)
if
(
pll_overclock
)
pr_info
(
"Clocks: PLLA overclocked, %ld MHz
\n
"
,
plla
.
rate_hz
/
1000000
);
if
(
cpu_
is_at91sam9g45
())
{
if
(
cpu_
has_plladiv2
())
{
mckr
=
at91_sys_read
(
AT91_PMC_MCKR
);
plla
.
rate_hz
/=
(
1
<<
((
mckr
&
AT91_PMC_PLLADIV2
)
>>
12
));
/* plla divisor by 2 */
}
...
...
@@ -685,6 +720,10 @@ int __init at91_clock_init(unsigned long main_clock)
* (obtain the USB High Speed 480 MHz when input is 12 MHz)
*/
utmi_clk
.
rate_hz
=
40
*
utmi_clk
.
parent
->
rate_hz
;
/* UTMI bias and PLL are managed at the same time */
if
(
cpu_has_upll
())
utmi_clk
.
pmc_mask
|=
AT91_PMC_BIASEN
;
}
/*
...
...
@@ -703,7 +742,7 @@ int __init at91_clock_init(unsigned long main_clock)
mckr
=
at91_sys_read
(
AT91_PMC_MCKR
);
mck
.
parent
=
at91_css_to_clk
(
mckr
&
AT91_PMC_CSS
);
freq
=
mck
.
parent
->
rate_hz
;
freq
/=
(
1
<<
((
mckr
&
AT91_PMC_PRES
)
>>
2
));
/* prescale */
freq
/=
pmc_prescaler_divider
(
mckr
);
/* prescale */
if
(
cpu_is_at91rm9200
())
{
mck
.
rate_hz
=
freq
/
(
1
+
((
mckr
&
AT91_PMC_MDIV
)
>>
8
));
/* mdiv */
}
else
if
(
cpu_is_at91sam9g20
())
{
...
...
@@ -711,13 +750,19 @@ int __init at91_clock_init(unsigned long main_clock)
freq
/
((
mckr
&
AT91_PMC_MDIV
)
>>
7
)
:
freq
;
/* mdiv ; (x >> 7) = ((x >> 8) * 2) */
if
(
mckr
&
AT91_PMC_PDIV
)
freq
/=
2
;
/* processor clock division */
}
else
if
(
cpu_
is_at91sam9g45
())
{
}
else
if
(
cpu_
has_mdiv3
())
{
mck
.
rate_hz
=
(
mckr
&
AT91_PMC_MDIV
)
==
AT91SAM9_PMC_MDIV_3
?
freq
/
3
:
freq
/
(
1
<<
((
mckr
&
AT91_PMC_MDIV
)
>>
8
));
/* mdiv */
}
else
{
mck
.
rate_hz
=
freq
/
(
1
<<
((
mckr
&
AT91_PMC_MDIV
)
>>
8
));
/* mdiv */
}
if
(
cpu_has_alt_prescaler
())
{
/* Programmable clocks can use MCK */
mck
.
type
|=
CLK_TYPE_PRIMARY
;
mck
.
id
=
4
;
}
/* Register the PMC's standard clocks */
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
standard_pmc_clocks
);
i
++
)
at91_clk_add
(
standard_pmc_clocks
[
i
]);
...
...
arch/arm/mach-at91/include/mach/at91_pmc.h
View file @
11a25ea7
...
...
@@ -46,8 +46,12 @@
#define AT91_CKGR_MOR (AT91_PMC + 0x20)
/* Main Oscillator Register [not on SAM9RL] */
#define AT91_PMC_MOSCEN (1 << 0)
/* Main Oscillator Enable */
#define AT91_PMC_OSCBYPASS (1 << 1)
/* Oscillator Bypass [SAM9x] */
#define AT91_PMC_OSCBYPASS (1 << 1)
/* Oscillator Bypass */
#define AT91_PMC_MOSCRCEN (1 << 3)
/* Main On-Chip RC Oscillator Enable [some SAM9] */
#define AT91_PMC_OSCOUNT (0xff << 8)
/* Main Oscillator Start-up Time */
#define AT91_PMC_KEY (0x37 << 16)
/* MOR Writing Key */
#define AT91_PMC_MOSCSEL (1 << 24)
/* Main Oscillator Selection [some SAM9] */
#define AT91_PMC_CFDEN (1 << 25)
/* Clock Failure Detector Enable [some SAM9] */
#define AT91_CKGR_MCFR (AT91_PMC + 0x24)
/* Main Clock Frequency Register */
#define AT91_PMC_MAINF (0xffff << 0)
/* Main Clock Frequency */
...
...
@@ -72,14 +76,24 @@
#define AT91_PMC_CSS_PLLA (2 << 0)
#define AT91_PMC_CSS_PLLB (3 << 0)
#define AT91_PMC_CSS_UPLL (3 << 0)
/* [some SAM9 only] */
#define AT91_PMC_PRES (7 << 2)
/* Master Clock Prescaler */
#define AT91_PMC_PRES_1 (0 << 2)
#define AT91_PMC_PRES_2 (1 << 2)
#define AT91_PMC_PRES_4 (2 << 2)
#define AT91_PMC_PRES_8 (3 << 2)
#define AT91_PMC_PRES_16 (4 << 2)
#define AT91_PMC_PRES_32 (5 << 2)
#define AT91_PMC_PRES_64 (6 << 2)
#define PMC_PRES_OFFSET 2
#define AT91_PMC_PRES (7 << PMC_PRES_OFFSET)
/* Master Clock Prescaler */
#define AT91_PMC_PRES_1 (0 << PMC_PRES_OFFSET)
#define AT91_PMC_PRES_2 (1 << PMC_PRES_OFFSET)
#define AT91_PMC_PRES_4 (2 << PMC_PRES_OFFSET)
#define AT91_PMC_PRES_8 (3 << PMC_PRES_OFFSET)
#define AT91_PMC_PRES_16 (4 << PMC_PRES_OFFSET)
#define AT91_PMC_PRES_32 (5 << PMC_PRES_OFFSET)
#define AT91_PMC_PRES_64 (6 << PMC_PRES_OFFSET)
#define PMC_ALT_PRES_OFFSET 4
#define AT91_PMC_ALT_PRES (7 << PMC_ALT_PRES_OFFSET)
/* Master Clock Prescaler [alternate location] */
#define AT91_PMC_ALT_PRES_1 (0 << PMC_ALT_PRES_OFFSET)
#define AT91_PMC_ALT_PRES_2 (1 << PMC_ALT_PRES_OFFSET)
#define AT91_PMC_ALT_PRES_4 (2 << PMC_ALT_PRES_OFFSET)
#define AT91_PMC_ALT_PRES_8 (3 << PMC_ALT_PRES_OFFSET)
#define AT91_PMC_ALT_PRES_16 (4 << PMC_ALT_PRES_OFFSET)
#define AT91_PMC_ALT_PRES_32 (5 << PMC_ALT_PRES_OFFSET)
#define AT91_PMC_ALT_PRES_64 (6 << PMC_ALT_PRES_OFFSET)
#define AT91_PMC_MDIV (3 << 8)
/* Master Clock Division */
#define AT91RM9200_PMC_MDIV_1 (0 << 8)
/* [AT91RM9200 only] */
#define AT91RM9200_PMC_MDIV_2 (1 << 8)
...
...
@@ -103,7 +117,14 @@
#define AT91_PMC_USBS_UPLL (1 << 0)
#define AT91_PMC_OHCIUSBDIV (0xF << 8)
/* Divider for USB OHCI Clock */
#define AT91_PMC_SMD (AT91_PMC + 0x3c)
/* Soft Modem Clock Register [some SAM9 only] */
#define AT91_PMC_SMDS (0x1 << 0)
/* SMD input clock selection */
#define AT91_PMC_SMD_DIV (0x1f << 8)
/* SMD input clock divider */
#define AT91_PMC_SMDDIV(n) (((n) << 8) & AT91_PMC_SMD_DIV)
#define AT91_PMC_PCKR(n) (AT91_PMC + 0x40 + ((n) * 4))
/* Programmable Clock 0-N Registers */
#define AT91_PMC_ALT_PCKR_CSS (0x7 << 0)
/* Programmable Clock Source Selection [alternate length] */
#define AT91_PMC_CSS_MASTER (4 << 0)
/* [some SAM9 only] */
#define AT91_PMC_CSSMCK (0x1 << 8)
/* CSS or Master Clock Selection */
#define AT91_PMC_CSSMCK_CSS (0 << 8)
#define AT91_PMC_CSSMCK_MCK (1 << 8)
...
...
@@ -120,10 +141,25 @@
#define AT91_PMC_PCK1RDY (1 << 9)
/* Programmable Clock 1 */
#define AT91_PMC_PCK2RDY (1 << 10)
/* Programmable Clock 2 */
#define AT91_PMC_PCK3RDY (1 << 11)
/* Programmable Clock 3 */
#define AT91_PMC_MOSCSELS (1 << 16)
/* Main Oscillator Selection [some SAM9] */
#define AT91_PMC_MOSCRCS (1 << 17)
/* Main On-Chip RC [some SAM9] */
#define AT91_PMC_CFDEV (1 << 18)
/* Clock Failure Detector Event [some SAM9] */
#define AT91_PMC_IMR (AT91_PMC + 0x6c)
/* Interrupt Mask Register */
#define AT91_PMC_PROT (AT91_PMC + 0xe4)
/* Write Protect Mode Register [some SAM9] */
#define AT91_PMC_PROTKEY 0x504d4301
/* Activation Code */
#define AT91_PMC_WPEN (0x1 << 0)
/* Write Protect Enable */
#define AT91_PMC_WPKEY (0xffffff << 8)
/* Write Protect Key */
#define AT91_PMC_PROTKEY (0x504d43 << 8)
/* Activation Code */
#define AT91_PMC_WPSR (AT91_PMC + 0xe8)
/* Write Protect Status Register [some SAM9] */
#define AT91_PMC_WPVS (0x1 << 0)
/* Write Protect Violation Status */
#define AT91_PMC_WPVSRC (0xffff << 8)
/* Write Protect Violation Source */
#define AT91_PMC_PCR (AT91_PMC + 0x10c)
/* Peripheral Control Register [some SAM9] */
#define AT91_PMC_PCR_PID (0x3f << 0)
/* Peripheral ID */
#define AT91_PMC_PCR_CMD (0x1 << 12)
/* Command */
#define AT91_PMC_PCR_DIV (0x3 << 16)
/* Divisor Value */
#define AT91_PMC_PCRDIV(n) (((n) << 16) & AT91_PMC_PCR_DIV)
#define AT91_PMC_PCR_EN (0x1 << 28)
/* Enable */
#endif
arch/arm/mach-at91/include/mach/at91sam9x5.h
0 → 100644
View file @
11a25ea7
/*
* Chip-specific header file for the AT91SAM9x5 family
*
* Copyright (C) 2009-2012 Atmel Corporation.
*
* Common definitions.
* Based on AT91SAM9x5 datasheet.
*
* Licensed under GPLv2 or later.
*/
#ifndef AT91SAM9X5_H
#define AT91SAM9X5_H
/*
* Peripheral identifiers/interrupts.
*/
#define AT91SAM9X5_ID_PIOAB 2
/* Parallel I/O Controller A and B */
#define AT91SAM9X5_ID_PIOCD 3
/* Parallel I/O Controller C and D */
#define AT91SAM9X5_ID_SMD 4
/* SMD Soft Modem (SMD) */
#define AT91SAM9X5_ID_USART0 5
/* USART 0 */
#define AT91SAM9X5_ID_USART1 6
/* USART 1 */
#define AT91SAM9X5_ID_USART2 7
/* USART 2 */
#define AT91SAM9X5_ID_USART3 8
/* USART 3 */
#define AT91SAM9X5_ID_TWI0 9
/* Two-Wire Interface 0 */
#define AT91SAM9X5_ID_TWI1 10
/* Two-Wire Interface 1 */
#define AT91SAM9X5_ID_TWI2 11
/* Two-Wire Interface 2 */
#define AT91SAM9X5_ID_MCI0 12
/* High Speed Multimedia Card Interface 0 */
#define AT91SAM9X5_ID_SPI0 13
/* Serial Peripheral Interface 0 */
#define AT91SAM9X5_ID_SPI1 14
/* Serial Peripheral Interface 1 */
#define AT91SAM9X5_ID_UART0 15
/* UART 0 */
#define AT91SAM9X5_ID_UART1 16
/* UART 1 */
#define AT91SAM9X5_ID_TCB 17
/* Timer Counter 0, 1, 2, 3, 4 and 5 */
#define AT91SAM9X5_ID_PWM 18
/* Pulse Width Modulation Controller */
#define AT91SAM9X5_ID_ADC 19
/* ADC Controller */
#define AT91SAM9X5_ID_DMA0 20
/* DMA Controller 0 */
#define AT91SAM9X5_ID_DMA1 21
/* DMA Controller 1 */
#define AT91SAM9X5_ID_UHPHS 22
/* USB Host High Speed */
#define AT91SAM9X5_ID_UDPHS 23
/* USB Device High Speed */
#define AT91SAM9X5_ID_EMAC0 24
/* Ethernet MAC0 */
#define AT91SAM9X5_ID_LCDC 25
/* LCD Controller */
#define AT91SAM9X5_ID_ISI 25
/* Image Sensor Interface */
#define AT91SAM9X5_ID_MCI1 26
/* High Speed Multimedia Card Interface 1 */
#define AT91SAM9X5_ID_EMAC1 27
/* Ethernet MAC1 */
#define AT91SAM9X5_ID_SSC 28
/* Synchronous Serial Controller */
#define AT91SAM9X5_ID_CAN0 29
/* CAN Controller 0 */
#define AT91SAM9X5_ID_CAN1 30
/* CAN Controller 1 */
#define AT91SAM9X5_ID_IRQ0 31
/* Advanced Interrupt Controller */
/*
* User Peripheral physical base addresses.
*/
#define AT91SAM9X5_BASE_USART0 0xf801c000
#define AT91SAM9X5_BASE_USART1 0xf8020000
#define AT91SAM9X5_BASE_USART2 0xf8024000
/*
* System Peripherals (offset from AT91_BASE_SYS)
*/
#define AT91_DDRSDRC0 (0xffffe800 - AT91_BASE_SYS)
#define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
/*
* Base addresses for early serial code (uncompress.h)
*/
#define AT91_DBGU AT91_BASE_DBGU0
#define AT91_USART0 AT91SAM9X5_BASE_USART0
#define AT91_USART1 AT91SAM9X5_BASE_USART1
#define AT91_USART2 AT91SAM9X5_BASE_USART2
/*
* Internal Memory.
*/
#define AT91SAM9X5_SRAM_BASE 0x00300000
/* Internal SRAM base address */
#define AT91SAM9X5_SRAM_SIZE SZ_32K
/* Internal SRAM size (32Kb) */
#define AT91SAM9X5_ROM_BASE 0x00400000
/* Internal ROM base address */
#define AT91SAM9X5_ROM_SIZE SZ_64K
/* Internal ROM size (64Kb) */
#endif
arch/arm/mach-at91/include/mach/at91sam9x5_matrix.h
0 → 100644
View file @
11a25ea7
/*
* Matrix-centric header file for the AT91SAM9x5 family
*
* Copyright (C) 2009-2012 Atmel Corporation.
*
* Only EBI related registers.
* Write Protect register definitions may be useful.
*
* Licensed under GPLv2 or later.
*/
#ifndef AT91SAM9X5_MATRIX_H
#define AT91SAM9X5_MATRIX_H
#define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x120)
/* EBI Chip Select Assignment Register */
#define AT91_MATRIX_EBI_CS1A (1 << 1)
/* Chip Select 1 Assignment */
#define AT91_MATRIX_EBI_CS1A_SMC (0 << 1)
#define AT91_MATRIX_EBI_CS1A_SDRAMC (1 << 1)
#define AT91_MATRIX_EBI_CS3A (1 << 3)
/* Chip Select 3 Assignment */
#define AT91_MATRIX_EBI_CS3A_SMC (0 << 3)
#define AT91_MATRIX_EBI_CS3A_SMC_NANDFLASH (1 << 3)
#define AT91_MATRIX_EBI_DBPUC (1 << 8)
/* Data Bus Pull-up Configuration */
#define AT91_MATRIX_EBI_DBPU_ON (0 << 8)
#define AT91_MATRIX_EBI_DBPU_OFF (1 << 8)
#define AT91_MATRIX_EBI_VDDIOMSEL (1 << 16)
/* Memory voltage selection */
#define AT91_MATRIX_EBI_VDDIOMSEL_1_8V (0 << 16)
#define AT91_MATRIX_EBI_VDDIOMSEL_3_3V (1 << 16)
#define AT91_MATRIX_EBI_EBI_IOSR (1 << 17)
/* EBI I/O slew rate selection */
#define AT91_MATRIX_EBI_EBI_IOSR_REDUCED (0 << 17)
#define AT91_MATRIX_EBI_EBI_IOSR_NORMAL (1 << 17)
#define AT91_MATRIX_EBI_DDR_IOSR (1 << 18)
/* DDR2 dedicated port I/O slew rate selection */
#define AT91_MATRIX_EBI_DDR_IOSR_REDUCED (0 << 18)
#define AT91_MATRIX_EBI_DDR_IOSR_NORMAL (1 << 18)
#define AT91_MATRIX_NFD0_SELECT (1 << 24)
/* NAND Flash Data Bus Selection */
#define AT91_MATRIX_NFD0_ON_D0 (0 << 24)
#define AT91_MATRIX_NFD0_ON_D16 (1 << 24)
#define AT91_MATRIX_DDR_MP_EN (1 << 25)
/* DDR Multi-port Enable */
#define AT91_MATRIX_MP_OFF (0 << 25)
#define AT91_MATRIX_MP_ON (1 << 25)
#define AT91_MATRIX_WPMR (AT91_MATRIX + 0x1E4)
/* Write Protect Mode Register */
#define AT91_MATRIX_WPMR_WPEN (1 << 0)
/* Write Protect ENable */
#define AT91_MATRIX_WPMR_WP_WPDIS (0 << 0)
#define AT91_MATRIX_WPMR_WP_WPEN (1 << 0)
#define AT91_MATRIX_WPMR_WPKEY (0xFFFFFF << 8)
/* Write Protect KEY */
#define AT91_MATRIX_WPSR (AT91_MATRIX + 0x1E8)
/* Write Protect Status Register */
#define AT91_MATRIX_WPSR_WPVS (1 << 0)
/* Write Protect Violation Status */
#define AT91_MATRIX_WPSR_NO_WPV (0 << 0)
#define AT91_MATRIX_WPSR_WPV (1 << 0)
#define AT91_MATRIX_WPSR_WPVSRC (0xFFFF << 8)
/* Write Protect Violation Source */
#endif
arch/arm/mach-at91/include/mach/hardware.h
View file @
11a25ea7
...
...
@@ -34,6 +34,8 @@
#include <mach/at91sam9rl.h>
#elif defined(CONFIG_ARCH_AT91SAM9G45)
#include <mach/at91sam9g45.h>
#elif defined(CONFIG_ARCH_AT91SAM9X5)
#include <mach/at91sam9x5.h>
#elif defined(CONFIG_ARCH_AT91X40)
#include <mach/at91x40.h>
#else
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment