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
Kirill Smelkov
linux
Commits
d50673ed
Commit
d50673ed
authored
Mar 04, 2012
by
Rob Herring
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'arm-soc/at91/base2+cleanup' into cleanup-base
parents
ab15e0e8
7eca30ae
Changes
87
Hide whitespace changes
Inline
Side-by-side
Showing
87 changed files
with
2025 additions
and
2944 deletions
+2025
-2944
Documentation/feature-removal-schedule.txt
Documentation/feature-removal-schedule.txt
+0
-14
arch/arm/Kconfig
arch/arm/Kconfig
+1
-1
arch/arm/Kconfig.debug
arch/arm/Kconfig.debug
+1
-1
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/configs/at91cap9_defconfig
arch/arm/configs/at91cap9_defconfig
+0
-108
arch/arm/mach-at91/Kconfig
arch/arm/mach-at91/Kconfig
+4
-19
arch/arm/mach-at91/Makefile
arch/arm/mach-at91/Makefile
+1
-4
arch/arm/mach-at91/Makefile.boot
arch/arm/mach-at91/Makefile.boot
+8
-6
arch/arm/mach-at91/at91cap9_devices.c
arch/arm/mach-at91/at91cap9_devices.c
+0
-1273
arch/arm/mach-at91/at91rm9200.c
arch/arm/mach-at91/at91rm9200.c
+5
-3
arch/arm/mach-at91/at91rm9200_devices.c
arch/arm/mach-at91/at91rm9200_devices.c
+7
-7
arch/arm/mach-at91/at91rm9200_time.c
arch/arm/mach-at91/at91rm9200_time.c
+23
-14
arch/arm/mach-at91/at91sam9260.c
arch/arm/mach-at91/at91sam9260.c
+8
-15
arch/arm/mach-at91/at91sam9260_devices.c
arch/arm/mach-at91/at91sam9260_devices.c
+31
-7
arch/arm/mach-at91/at91sam9261.c
arch/arm/mach-at91/at91sam9261.c
+3
-7
arch/arm/mach-at91/at91sam9261_devices.c
arch/arm/mach-at91/at91sam9261_devices.c
+27
-4
arch/arm/mach-at91/at91sam9263.c
arch/arm/mach-at91/at91sam9263.c
+4
-7
arch/arm/mach-at91/at91sam9263_devices.c
arch/arm/mach-at91/at91sam9263_devices.c
+62
-10
arch/arm/mach-at91/at91sam9_alt_reset.S
arch/arm/mach-at91/at91sam9_alt_reset.S
+5
-7
arch/arm/mach-at91/at91sam9g45.c
arch/arm/mach-at91/at91sam9g45.c
+4
-7
arch/arm/mach-at91/at91sam9g45_devices.c
arch/arm/mach-at91/at91sam9g45_devices.c
+131
-13
arch/arm/mach-at91/at91sam9g45_reset.S
arch/arm/mach-at91/at91sam9g45_reset.S
+5
-7
arch/arm/mach-at91/at91sam9rl.c
arch/arm/mach-at91/at91sam9rl.c
+3
-7
arch/arm/mach-at91/at91sam9rl_devices.c
arch/arm/mach-at91/at91sam9rl_devices.c
+28
-11
arch/arm/mach-at91/at91sam9x5.c
arch/arm/mach-at91/at91sam9x5.c
+370
-0
arch/arm/mach-at91/at91x40.c
arch/arm/mach-at91/at91x40.c
+1
-1
arch/arm/mach-at91/at91x40_time.c
arch/arm/mach-at91/at91x40_time.c
+17
-11
arch/arm/mach-at91/board-cap9adk.c
arch/arm/mach-at91/board-cap9adk.c
+0
-396
arch/arm/mach-at91/board-cpu9krea.c
arch/arm/mach-at91/board-cpu9krea.c
+3
-2
arch/arm/mach-at91/board-cpuat91.c
arch/arm/mach-at91/board-cpuat91.c
+1
-0
arch/arm/mach-at91/board-dt.c
arch/arm/mach-at91/board-dt.c
+1
-6
arch/arm/mach-at91/board-eco920.c
arch/arm/mach-at91/board-eco920.c
+3
-2
arch/arm/mach-at91/board-flexibity.c
arch/arm/mach-at91/board-flexibity.c
+11
-1
arch/arm/mach-at91/board-kb9202.c
arch/arm/mach-at91/board-kb9202.c
+1
-0
arch/arm/mach-at91/board-picotux200.c
arch/arm/mach-at91/board-picotux200.c
+1
-0
arch/arm/mach-at91/board-rm9200dk.c
arch/arm/mach-at91/board-rm9200dk.c
+1
-0
arch/arm/mach-at91/board-rm9200ek.c
arch/arm/mach-at91/board-rm9200ek.c
+1
-0
arch/arm/mach-at91/board-sam9m10g45ek.c
arch/arm/mach-at91/board-sam9m10g45ek.c
+78
-2
arch/arm/mach-at91/board-yl-9200.c
arch/arm/mach-at91/board-yl-9200.c
+2
-1
arch/arm/mach-at91/clock.c
arch/arm/mach-at91/clock.c
+118
-58
arch/arm/mach-at91/cpuidle.c
arch/arm/mach-at91/cpuidle.c
+3
-8
arch/arm/mach-at91/generic.h
arch/arm/mach-at91/generic.h
+10
-1
arch/arm/mach-at91/include/mach/at91_matrix.h
arch/arm/mach-at91/include/mach/at91_matrix.h
+23
-0
arch/arm/mach-at91/include/mach/at91_pmc.h
arch/arm/mach-at91/include/mach/at91_pmc.h
+81
-37
arch/arm/mach-at91/include/mach/at91_ramc.h
arch/arm/mach-at91/include/mach/at91_ramc.h
+32
-0
arch/arm/mach-at91/include/mach/at91_st.h
arch/arm/mach-at91/include/mach/at91_st.h
+22
-10
arch/arm/mach-at91/include/mach/at91cap9.h
arch/arm/mach-at91/include/mach/at91cap9.h
+0
-122
arch/arm/mach-at91/include/mach/at91cap9_matrix.h
arch/arm/mach-at91/include/mach/at91cap9_matrix.h
+0
-137
arch/arm/mach-at91/include/mach/at91rm9200.h
arch/arm/mach-at91/include/mach/at91rm9200.h
+3
-7
arch/arm/mach-at91/include/mach/at91rm9200_mc.h
arch/arm/mach-at91/include/mach/at91rm9200_mc.h
+7
-51
arch/arm/mach-at91/include/mach/at91rm9200_sdramc.h
arch/arm/mach-at91/include/mach/at91rm9200_sdramc.h
+63
-0
arch/arm/mach-at91/include/mach/at91sam9260.h
arch/arm/mach-at91/include/mach/at91sam9260.h
+8
-6
arch/arm/mach-at91/include/mach/at91sam9260_matrix.h
arch/arm/mach-at91/include/mach/at91sam9260_matrix.h
+18
-18
arch/arm/mach-at91/include/mach/at91sam9261.h
arch/arm/mach-at91/include/mach/at91sam9261.h
+4
-6
arch/arm/mach-at91/include/mach/at91sam9261_matrix.h
arch/arm/mach-at91/include/mach/at91sam9261_matrix.h
+9
-9
arch/arm/mach-at91/include/mach/at91sam9263.h
arch/arm/mach-at91/include/mach/at91sam9263.h
+5
-7
arch/arm/mach-at91/include/mach/at91sam9263_matrix.h
arch/arm/mach-at91/include/mach/at91sam9263_matrix.h
+37
-37
arch/arm/mach-at91/include/mach/at91sam9_ddrsdr.h
arch/arm/mach-at91/include/mach/at91sam9_ddrsdr.h
+0
-16
arch/arm/mach-at91/include/mach/at91sam9_sdramc.h
arch/arm/mach-at91/include/mach/at91sam9_sdramc.h
+0
-6
arch/arm/mach-at91/include/mach/at91sam9g45.h
arch/arm/mach-at91/include/mach/at91sam9g45.h
+5
-7
arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h
arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h
+42
-42
arch/arm/mach-at91/include/mach/at91sam9rl.h
arch/arm/mach-at91/include/mach/at91sam9rl.h
+3
-4
arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h
arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h
+21
-21
arch/arm/mach-at91/include/mach/at91sam9x5.h
arch/arm/mach-at91/include/mach/at91sam9x5.h
+79
-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/at91x40.h
arch/arm/mach-at91/include/mach/at91x40.h
+9
-9
arch/arm/mach-at91/include/mach/board.h
arch/arm/mach-at91/include/mach/board.h
+5
-1
arch/arm/mach-at91/include/mach/cpu.h
arch/arm/mach-at91/include/mach/cpu.h
+0
-21
arch/arm/mach-at91/include/mach/hardware.h
arch/arm/mach-at91/include/mach/hardware.h
+5
-4
arch/arm/mach-at91/include/mach/io.h
arch/arm/mach-at91/include/mach/io.h
+0
-18
arch/arm/mach-at91/pm.c
arch/arm/mach-at91/pm.c
+29
-23
arch/arm/mach-at91/pm.h
arch/arm/mach-at91/pm.h
+49
-47
arch/arm/mach-at91/pm_slowclock.S
arch/arm/mach-at91/pm_slowclock.S
+141
-134
arch/arm/mach-at91/setup.c
arch/arm/mach-at91/setup.c
+9
-17
arch/arm/mach-at91/soc.h
arch/arm/mach-at91/soc.h
+0
-5
arch/avr32/mach-at32ap/at32ap700x.c
arch/avr32/mach-at32ap/at32ap700x.c
+0
-2
arch/avr32/mach-at32ap/include/mach/cpu.h
arch/avr32/mach-at32ap/include/mach/cpu.h
+0
-3
drivers/mmc/host/at91_mci.c
drivers/mmc/host/at91_mci.c
+0
-1
drivers/pcmcia/at91_cf.c
drivers/pcmcia/at91_cf.c
+3
-2
drivers/rtc/rtc-at91sam9.c
drivers/rtc/rtc-at91sam9.c
+38
-60
drivers/tty/serial/atmel_serial.c
drivers/tty/serial/atmel_serial.c
+2
-0
drivers/usb/gadget/Kconfig
drivers/usb/gadget/Kconfig
+2
-2
drivers/usb/gadget/at91_udc.c
drivers/usb/gadget/at91_udc.c
+5
-4
drivers/usb/gadget/atmel_usba_udc.c
drivers/usb/gadget/atmel_usba_udc.c
+3
-3
drivers/watchdog/at91rm9200_wdt.c
drivers/watchdog/at91rm9200_wdt.c
+4
-4
No files found.
Documentation/feature-removal-schedule.txt
View file @
d50673ed
...
...
@@ -510,17 +510,3 @@ Why: The pci_scan_bus_parented() interface creates a new root bus. The
convert to using pci_scan_root_bus() so they can supply a list of
bus resources when the bus is created.
Who: Bjorn Helgaas <bhelgaas@google.com>
----------------------------
What: The CAP9 SoC family will be removed
When: 3.4
Files: arch/arm/mach-at91/at91cap9.c
arch/arm/mach-at91/at91cap9_devices.c
arch/arm/mach-at91/include/mach/at91cap9.h
arch/arm/mach-at91/include/mach/at91cap9_matrix.h
arch/arm/mach-at91/include/mach/at91cap9_ddrsdr.h
arch/arm/mach-at91/board-cap9adk.c
Why: The code is not actively maintained and platforms are now hard to find.
Who: Nicolas Ferre <nicolas.ferre@atmel.com>
Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
arch/arm/Kconfig
View file @
d50673ed
...
...
@@ -327,7 +327,7 @@ config ARCH_AT91
select CLKDEV_LOOKUP
help
This enables support for systems based on the Atmel AT91RM9200,
AT91SAM9
and AT91CAP9
processors.
AT91SAM9 processors.
config ARCH_BCMRING
bool "Broadcom BCMRING"
...
...
arch/arm/Kconfig.debug
View file @
d50673ed
...
...
@@ -86,7 +86,7 @@ choice
depends on HAVE_AT91_DBGU0
config AT91_DEBUG_LL_DBGU1
bool "Kernel low-level debugging on 9263
, 9g45 and cap9
"
bool "Kernel low-level debugging on 9263
and 9g45
"
depends on HAVE_AT91_DBGU1
config DEBUG_CLPS711X_UART1
...
...
arch/arm/boot/dts/at91sam9g25ek.dts
0 → 100644
View file @
d50673ed
/*
*
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 @
d50673ed
/*
*
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 @
d50673ed
/*
* 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/configs/at91cap9_defconfig
deleted
100644 → 0
View file @
ab15e0e8
CONFIG_EXPERIMENTAL=y
# CONFIG_LOCALVERSION_AUTO is not set
# CONFIG_SWAP is not set
CONFIG_SYSVIPC=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_BLK_DEV_INITRD=y
CONFIG_SLAB=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
# CONFIG_BLK_DEV_BSG is not set
# CONFIG_IOSCHED_DEADLINE is not set
# CONFIG_IOSCHED_CFQ is not set
CONFIG_ARCH_AT91=y
CONFIG_ARCH_AT91CAP9=y
CONFIG_MACH_AT91CAP9ADK=y
CONFIG_MTD_AT91_DATAFLASH_CARD=y
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
# CONFIG_ARM_THUMB is not set
CONFIG_AEABI=y
CONFIG_LEDS=y
CONFIG_LEDS_CPU=y
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram0 rw"
CONFIG_FPE_NWFPE=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_BEET is not set
# CONFIG_INET_LRO is not set
# CONFIG_INET_DIAG is not set
# CONFIG_IPV6 is not set
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_MTD=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLOCK=y
CONFIG_MTD_CFI=y
CONFIG_MTD_JEDECPROBE=y
CONFIG_MTD_CFI_AMDSTD=y
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_DATAFLASH=y
CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_ATMEL=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_SCSI_MULTI_LUN=y
CONFIG_NETDEVICES=y
CONFIG_MII=y
CONFIG_MACB=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_ADS7846=y
# CONFIG_SERIO is not set
CONFIG_SERIAL_ATMEL=y
CONFIG_SERIAL_ATMEL_CONSOLE=y
CONFIG_HW_RANDOM=y
CONFIG_I2C=y
CONFIG_I2C_CHARDEV=y
CONFIG_SPI=y
CONFIG_SPI_ATMEL=y
# CONFIG_HWMON is not set
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_NOWAYOUT=y
CONFIG_FB=y
CONFIG_FB_ATMEL=y
CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_CLUT224 is not set
# CONFIG_USB_HID is not set
CONFIG_USB=y
CONFIG_USB_DEVICEFS=y
CONFIG_USB_MON=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_STORAGE=y
CONFIG_USB_GADGET=y
CONFIG_USB_ETH=m
CONFIG_USB_FILE_STORAGE=m
CONFIG_MMC=y
CONFIG_MMC_AT91=m
CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_AT91SAM9=y
CONFIG_EXT2_FS=y
CONFIG_VFAT_FS=y
CONFIG_TMPFS=y
CONFIG_JFFS2_FS=y
CONFIG_CRAMFS=y
CONFIG_NFS_FS=y
CONFIG_ROOT_NFS=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_850=y
CONFIG_NLS_ISO8859_1=y
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_USER=y
arch/arm/mach-at91/Kconfig
View file @
d50673ed
...
...
@@ -102,13 +102,13 @@ config ARCH_AT91SAM9G45
select HAVE_AT91_DBGU1
select AT91_SAM9G45_RESET
config ARCH_AT91
CAP9
bool "AT91
CAP9
"
config ARCH_AT91
SAM9X5
bool "AT91
SAM9x5 family
"
select CPU_ARM926T
select GENERIC_CLOCKEVENTS
select HAVE_FB_ATMEL
select HAVE_NET_MACB
select HAVE_AT91_DBGU
1
select HAVE_AT91_DBGU
0
select AT91_SAM9G45_RESET
config ARCH_AT91X40
...
...
@@ -447,21 +447,6 @@ endif
# ----------------------------------------------------------
if ARCH_AT91CAP9
comment "AT91CAP9 Board Type"
config MACH_AT91CAP9ADK
bool "Atmel AT91CAP9A-DK Evaluation Kit"
select HAVE_AT91_DATAFLASH_CARD
help
Select this if you are using Atmel's AT91CAP9A-DK Evaluation Kit.
<http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4138>
endif
# ----------------------------------------------------------
if ARCH_AT91X40
comment "AT91X40 Board Type"
...
...
@@ -544,7 +529,7 @@ config AT91_EARLY_DBGU0
depends on HAVE_AT91_DBGU0
config AT91_EARLY_DBGU1
bool "DBGU on 9263
, 9g45 and cap9
"
bool "DBGU on 9263
and 9g45
"
depends on HAVE_AT91_DBGU1
config AT91_EARLY_USART0
...
...
arch/arm/mach-at91/Makefile
View file @
d50673ed
...
...
@@ -20,7 +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_AT91
CAP9)
+=
at91cap9.o at91sam926x_time.o at91cap9_devices.o sam9_smc
.o
obj-$(CONFIG_ARCH_AT91
SAM9X5)
+=
at91sam9x5.o at91sam926x_time
.o
obj-$(CONFIG_ARCH_AT91X40)
+=
at91x40.o at91x40_time.o
# AT91RM9200 board-specific support
...
...
@@ -81,9 +81,6 @@ obj-$(CONFIG_MACH_AT91SAM9M10G45EK) += board-sam9m10g45ek.o
# AT91SAM board with device-tree
obj-$(CONFIG_MACH_AT91SAM_DT)
+=
board-dt.o
# AT91CAP9 board-specific support
obj-$(CONFIG_MACH_AT91CAP9ADK)
+=
board-cap9adk.o
# AT91X40 board-specific support
obj-$(CONFIG_MACH_AT91EB01)
+=
board-eb01.o
...
...
arch/arm/mach-at91/Makefile.boot
View file @
d50673ed
...
...
@@ -3,11 +3,7 @@
# PARAMS_PHYS must be within 4MB of ZRELADDR
# INITRD_PHYS must be in RAM
ifeq
($(CONFIG_ARCH_AT91CAP9),y)
zreladdr-y
+=
0x70008000
params_phys-y
:=
0x70000100
initrd_phys-y
:=
0x70410000
else
ifeq
($(CONFIG_ARCH_AT91SAM9G45),y)
ifeq
($(CONFIG_ARCH_AT91SAM9G45),y)
zreladdr-y
+=
0x70008000
params_phys-y
:=
0x70000100
initrd_phys-y
:=
0x70410000
...
...
@@ -17,4 +13,10 @@ params_phys-y := 0x20000100
initrd_phys-y
:=
0x20410000
endif
dtb-$(CONFIG_MACH_AT91SAM_DT)
+=
at91sam9m10g45ek.dtb usb_a9g20.dtb
# Keep dtb files sorted alphabetically for each SoC
# sam9g20
dtb-$(CONFIG_MACH_AT91SAM_DT)
+=
usb_a9g20.dtb
# sam9g45
dtb-$(CONFIG_MACH_AT91SAM_DT)
+=
at91sam9m10g45ek.dtb
# sam9x5
dtb-$(CONFIG_MACH_AT91SAM_DT)
+=
at91sam9g25ek.dtb
arch/arm/mach-at91/at91cap9_devices.c
deleted
100644 → 0
View file @
ab15e0e8
/*
* arch/arm/mach-at91/at91cap9_devices.c
*
* Copyright (C) 2007 Stelian Pop <stelian.pop@leadtechdesign.com>
* Copyright (C) 2007 Lead Tech Design <www.leadtechdesign.com>
* Copyright (C) 2007 Atmel Corporation.
*
* 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.
*
*/
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/irq.h>
#include <linux/dma-mapping.h>
#include <linux/gpio.h>
#include <linux/platform_device.h>
#include <linux/i2c-gpio.h>
#include <video/atmel_lcdc.h>
#include <mach/board.h>
#include <mach/cpu.h>
#include <mach/at91cap9.h>
#include <mach/at91cap9_matrix.h>
#include <mach/at91sam9_smc.h>
#include "generic.h"
/* --------------------------------------------------------------------
* USB Host
* -------------------------------------------------------------------- */
#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
static
u64
ohci_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
at91_usbh_data
usbh_data
;
static
struct
resource
usbh_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_UHP_BASE
,
.
end
=
AT91CAP9_UHP_BASE
+
SZ_1M
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_UHP
,
.
end
=
AT91CAP9_ID_UHP
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91_usbh_device
=
{
.
name
=
"at91_ohci"
,
.
id
=
-
1
,
.
dev
=
{
.
dma_mask
=
&
ohci_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
usbh_data
,
},
.
resource
=
usbh_resources
,
.
num_resources
=
ARRAY_SIZE
(
usbh_resources
),
};
void
__init
at91_add_device_usbh
(
struct
at91_usbh_data
*
data
)
{
int
i
;
if
(
!
data
)
return
;
if
(
cpu_is_at91cap9_revB
())
irq_set_irq_type
(
AT91CAP9_ID_UHP
,
IRQ_TYPE_LEVEL_HIGH
);
/* Enable VBus control for UHP ports */
for
(
i
=
0
;
i
<
data
->
ports
;
i
++
)
{
if
(
gpio_is_valid
(
data
->
vbus_pin
[
i
]))
at91_set_gpio_output
(
data
->
vbus_pin
[
i
],
0
);
}
/* Enable overcurrent notification */
for
(
i
=
0
;
i
<
data
->
ports
;
i
++
)
{
if
(
data
->
overcurrent_pin
[
i
])
at91_set_gpio_input
(
data
->
overcurrent_pin
[
i
],
1
);
}
usbh_data
=
*
data
;
platform_device_register
(
&
at91_usbh_device
);
}
#else
void
__init
at91_add_device_usbh
(
struct
at91_usbh_data
*
data
)
{}
#endif
/* --------------------------------------------------------------------
* USB HS Device (Gadget)
* -------------------------------------------------------------------- */
#if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE)
static
struct
resource
usba_udc_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_UDPHS_FIFO
,
.
end
=
AT91CAP9_UDPHS_FIFO
+
SZ_512K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_BASE_UDPHS
,
.
end
=
AT91CAP9_BASE_UDPHS
+
SZ_1K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
2
]
=
{
.
start
=
AT91CAP9_ID_UDPHS
,
.
end
=
AT91CAP9_ID_UDPHS
,
.
flags
=
IORESOURCE_IRQ
,
},
};
#define EP(nam, idx, maxpkt, maxbk, dma, isoc) \
[idx] = { \
.name = nam, \
.index = idx, \
.fifo_size = maxpkt, \
.nr_banks = maxbk, \
.can_dma = dma, \
.can_isoc = isoc, \
}
static
struct
usba_ep_data
usba_udc_ep
[]
=
{
EP
(
"ep0"
,
0
,
64
,
1
,
0
,
0
),
EP
(
"ep1"
,
1
,
1024
,
3
,
1
,
1
),
EP
(
"ep2"
,
2
,
1024
,
3
,
1
,
1
),
EP
(
"ep3"
,
3
,
1024
,
2
,
1
,
1
),
EP
(
"ep4"
,
4
,
1024
,
2
,
1
,
1
),
EP
(
"ep5"
,
5
,
1024
,
2
,
1
,
0
),
EP
(
"ep6"
,
6
,
1024
,
2
,
1
,
0
),
EP
(
"ep7"
,
7
,
1024
,
2
,
0
,
0
),
};
#undef EP
/*
* pdata doesn't have room for any endpoints, so we need to
* append room for the ones we need right after it.
*/
static
struct
{
struct
usba_platform_data
pdata
;
struct
usba_ep_data
ep
[
8
];
}
usba_udc_data
;
static
struct
platform_device
at91_usba_udc_device
=
{
.
name
=
"atmel_usba_udc"
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
usba_udc_data
.
pdata
,
},
.
resource
=
usba_udc_resources
,
.
num_resources
=
ARRAY_SIZE
(
usba_udc_resources
),
};
void
__init
at91_add_device_usba
(
struct
usba_platform_data
*
data
)
{
if
(
cpu_is_at91cap9_revB
())
{
irq_set_irq_type
(
AT91CAP9_ID_UDPHS
,
IRQ_TYPE_LEVEL_HIGH
);
at91_sys_write
(
AT91_MATRIX_UDPHS
,
AT91_MATRIX_SELECT_UDPHS
|
AT91_MATRIX_UDPHS_BYPASS_LOCK
);
}
else
at91_sys_write
(
AT91_MATRIX_UDPHS
,
AT91_MATRIX_SELECT_UDPHS
);
/*
* Invalid pins are 0 on AT91, but the usba driver is shared
* with AVR32, which use negative values instead. Once/if
* gpio_is_valid() is ported to AT91, revisit this code.
*/
usba_udc_data
.
pdata
.
vbus_pin
=
-
EINVAL
;
usba_udc_data
.
pdata
.
num_ep
=
ARRAY_SIZE
(
usba_udc_ep
);
memcpy
(
usba_udc_data
.
ep
,
usba_udc_ep
,
sizeof
(
usba_udc_ep
));
if
(
data
&&
gpio_is_valid
(
data
->
vbus_pin
))
{
at91_set_gpio_input
(
data
->
vbus_pin
,
0
);
at91_set_deglitch
(
data
->
vbus_pin
,
1
);
usba_udc_data
.
pdata
.
vbus_pin
=
data
->
vbus_pin
;
}
/* Pullup pin is handled internally by USB device peripheral */
platform_device_register
(
&
at91_usba_udc_device
);
}
#else
void
__init
at91_add_device_usba
(
struct
usba_platform_data
*
data
)
{}
#endif
/* --------------------------------------------------------------------
* Ethernet
* -------------------------------------------------------------------- */
#if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE)
static
u64
eth_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
macb_platform_data
eth_data
;
static
struct
resource
eth_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_EMAC
,
.
end
=
AT91CAP9_BASE_EMAC
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_EMAC
,
.
end
=
AT91CAP9_ID_EMAC
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91cap9_eth_device
=
{
.
name
=
"macb"
,
.
id
=
-
1
,
.
dev
=
{
.
dma_mask
=
&
eth_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
eth_data
,
},
.
resource
=
eth_resources
,
.
num_resources
=
ARRAY_SIZE
(
eth_resources
),
};
void
__init
at91_add_device_eth
(
struct
macb_platform_data
*
data
)
{
if
(
!
data
)
return
;
if
(
gpio_is_valid
(
data
->
phy_irq_pin
))
{
at91_set_gpio_input
(
data
->
phy_irq_pin
,
0
);
at91_set_deglitch
(
data
->
phy_irq_pin
,
1
);
}
/* Pins used for MII and RMII */
at91_set_A_periph
(
AT91_PIN_PB21
,
0
);
/* ETXCK_EREFCK */
at91_set_A_periph
(
AT91_PIN_PB22
,
0
);
/* ERXDV */
at91_set_A_periph
(
AT91_PIN_PB25
,
0
);
/* ERX0 */
at91_set_A_periph
(
AT91_PIN_PB26
,
0
);
/* ERX1 */
at91_set_A_periph
(
AT91_PIN_PB27
,
0
);
/* ERXER */
at91_set_A_periph
(
AT91_PIN_PB28
,
0
);
/* ETXEN */
at91_set_A_periph
(
AT91_PIN_PB23
,
0
);
/* ETX0 */
at91_set_A_periph
(
AT91_PIN_PB24
,
0
);
/* ETX1 */
at91_set_A_periph
(
AT91_PIN_PB30
,
0
);
/* EMDIO */
at91_set_A_periph
(
AT91_PIN_PB29
,
0
);
/* EMDC */
if
(
!
data
->
is_rmii
)
{
at91_set_B_periph
(
AT91_PIN_PC25
,
0
);
/* ECRS */
at91_set_B_periph
(
AT91_PIN_PC26
,
0
);
/* ECOL */
at91_set_B_periph
(
AT91_PIN_PC22
,
0
);
/* ERX2 */
at91_set_B_periph
(
AT91_PIN_PC23
,
0
);
/* ERX3 */
at91_set_B_periph
(
AT91_PIN_PC27
,
0
);
/* ERXCK */
at91_set_B_periph
(
AT91_PIN_PC20
,
0
);
/* ETX2 */
at91_set_B_periph
(
AT91_PIN_PC21
,
0
);
/* ETX3 */
at91_set_B_periph
(
AT91_PIN_PC24
,
0
);
/* ETXER */
}
eth_data
=
*
data
;
platform_device_register
(
&
at91cap9_eth_device
);
}
#else
void
__init
at91_add_device_eth
(
struct
macb_platform_data
*
data
)
{}
#endif
/* --------------------------------------------------------------------
* MMC / SD
* -------------------------------------------------------------------- */
#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE)
static
u64
mmc_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
at91_mmc_data
mmc0_data
,
mmc1_data
;
static
struct
resource
mmc0_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_MCI0
,
.
end
=
AT91CAP9_BASE_MCI0
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_MCI0
,
.
end
=
AT91CAP9_ID_MCI0
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91cap9_mmc0_device
=
{
.
name
=
"at91_mci"
,
.
id
=
0
,
.
dev
=
{
.
dma_mask
=
&
mmc_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
mmc0_data
,
},
.
resource
=
mmc0_resources
,
.
num_resources
=
ARRAY_SIZE
(
mmc0_resources
),
};
static
struct
resource
mmc1_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_MCI1
,
.
end
=
AT91CAP9_BASE_MCI1
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_MCI1
,
.
end
=
AT91CAP9_ID_MCI1
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91cap9_mmc1_device
=
{
.
name
=
"at91_mci"
,
.
id
=
1
,
.
dev
=
{
.
dma_mask
=
&
mmc_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
mmc1_data
,
},
.
resource
=
mmc1_resources
,
.
num_resources
=
ARRAY_SIZE
(
mmc1_resources
),
};
void
__init
at91_add_device_mmc
(
short
mmc_id
,
struct
at91_mmc_data
*
data
)
{
if
(
!
data
)
return
;
/* input/irq */
if
(
gpio_is_valid
(
data
->
det_pin
))
{
at91_set_gpio_input
(
data
->
det_pin
,
1
);
at91_set_deglitch
(
data
->
det_pin
,
1
);
}
if
(
gpio_is_valid
(
data
->
wp_pin
))
at91_set_gpio_input
(
data
->
wp_pin
,
1
);
if
(
gpio_is_valid
(
data
->
vcc_pin
))
at91_set_gpio_output
(
data
->
vcc_pin
,
0
);
if
(
mmc_id
==
0
)
{
/* MCI0 */
/* CLK */
at91_set_A_periph
(
AT91_PIN_PA2
,
0
);
/* CMD */
at91_set_A_periph
(
AT91_PIN_PA1
,
1
);
/* DAT0, maybe DAT1..DAT3 */
at91_set_A_periph
(
AT91_PIN_PA0
,
1
);
if
(
data
->
wire4
)
{
at91_set_A_periph
(
AT91_PIN_PA3
,
1
);
at91_set_A_periph
(
AT91_PIN_PA4
,
1
);
at91_set_A_periph
(
AT91_PIN_PA5
,
1
);
}
mmc0_data
=
*
data
;
platform_device_register
(
&
at91cap9_mmc0_device
);
}
else
{
/* MCI1 */
/* CLK */
at91_set_A_periph
(
AT91_PIN_PA16
,
0
);
/* CMD */
at91_set_A_periph
(
AT91_PIN_PA17
,
1
);
/* DAT0, maybe DAT1..DAT3 */
at91_set_A_periph
(
AT91_PIN_PA18
,
1
);
if
(
data
->
wire4
)
{
at91_set_A_periph
(
AT91_PIN_PA19
,
1
);
at91_set_A_periph
(
AT91_PIN_PA20
,
1
);
at91_set_A_periph
(
AT91_PIN_PA21
,
1
);
}
mmc1_data
=
*
data
;
platform_device_register
(
&
at91cap9_mmc1_device
);
}
}
#else
void
__init
at91_add_device_mmc
(
short
mmc_id
,
struct
at91_mmc_data
*
data
)
{}
#endif
/* --------------------------------------------------------------------
* NAND / SmartMedia
* -------------------------------------------------------------------- */
#if defined(CONFIG_MTD_NAND_ATMEL) || defined(CONFIG_MTD_NAND_ATMEL_MODULE)
static
struct
atmel_nand_data
nand_data
;
#define NAND_BASE AT91_CHIPSELECT_3
static
struct
resource
nand_resources
[]
=
{
[
0
]
=
{
.
start
=
NAND_BASE
,
.
end
=
NAND_BASE
+
SZ_256M
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_BASE_ECC
,
.
end
=
AT91CAP9_BASE_ECC
+
SZ_512
-
1
,
.
flags
=
IORESOURCE_MEM
,
}
};
static
struct
platform_device
at91cap9_nand_device
=
{
.
name
=
"atmel_nand"
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
nand_data
,
},
.
resource
=
nand_resources
,
.
num_resources
=
ARRAY_SIZE
(
nand_resources
),
};
void
__init
at91_add_device_nand
(
struct
atmel_nand_data
*
data
)
{
unsigned
long
csa
;
if
(
!
data
)
return
;
csa
=
at91_sys_read
(
AT91_MATRIX_EBICSA
);
at91_sys_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA
);
/* enable pin */
if
(
gpio_is_valid
(
data
->
enable_pin
))
at91_set_gpio_output
(
data
->
enable_pin
,
1
);
/* ready/busy pin */
if
(
gpio_is_valid
(
data
->
rdy_pin
))
at91_set_gpio_input
(
data
->
rdy_pin
,
1
);
/* card detect pin */
if
(
gpio_is_valid
(
data
->
det_pin
))
at91_set_gpio_input
(
data
->
det_pin
,
1
);
nand_data
=
*
data
;
platform_device_register
(
&
at91cap9_nand_device
);
}
#else
void
__init
at91_add_device_nand
(
struct
atmel_nand_data
*
data
)
{}
#endif
/* --------------------------------------------------------------------
* TWI (i2c)
* -------------------------------------------------------------------- */
/*
* Prefer the GPIO code since the TWI controller isn't robust
* (gets overruns and underruns under load) and can only issue
* repeated STARTs in one scenario (the driver doesn't yet handle them).
*/
#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
static
struct
i2c_gpio_platform_data
pdata
=
{
.
sda_pin
=
AT91_PIN_PB4
,
.
sda_is_open_drain
=
1
,
.
scl_pin
=
AT91_PIN_PB5
,
.
scl_is_open_drain
=
1
,
.
udelay
=
2
,
/* ~100 kHz */
};
static
struct
platform_device
at91cap9_twi_device
=
{
.
name
=
"i2c-gpio"
,
.
id
=
-
1
,
.
dev
.
platform_data
=
&
pdata
,
};
void
__init
at91_add_device_i2c
(
struct
i2c_board_info
*
devices
,
int
nr_devices
)
{
at91_set_GPIO_periph
(
AT91_PIN_PB4
,
1
);
/* TWD (SDA) */
at91_set_multi_drive
(
AT91_PIN_PB4
,
1
);
at91_set_GPIO_periph
(
AT91_PIN_PB5
,
1
);
/* TWCK (SCL) */
at91_set_multi_drive
(
AT91_PIN_PB5
,
1
);
i2c_register_board_info
(
0
,
devices
,
nr_devices
);
platform_device_register
(
&
at91cap9_twi_device
);
}
#elif defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
static
struct
resource
twi_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_TWI
,
.
end
=
AT91CAP9_BASE_TWI
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_TWI
,
.
end
=
AT91CAP9_ID_TWI
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91cap9_twi_device
=
{
.
name
=
"at91_i2c"
,
.
id
=
-
1
,
.
resource
=
twi_resources
,
.
num_resources
=
ARRAY_SIZE
(
twi_resources
),
};
void
__init
at91_add_device_i2c
(
struct
i2c_board_info
*
devices
,
int
nr_devices
)
{
/* pins used for TWI interface */
at91_set_B_periph
(
AT91_PIN_PB4
,
0
);
/* TWD */
at91_set_multi_drive
(
AT91_PIN_PB4
,
1
);
at91_set_B_periph
(
AT91_PIN_PB5
,
0
);
/* TWCK */
at91_set_multi_drive
(
AT91_PIN_PB5
,
1
);
i2c_register_board_info
(
0
,
devices
,
nr_devices
);
platform_device_register
(
&
at91cap9_twi_device
);
}
#else
void
__init
at91_add_device_i2c
(
struct
i2c_board_info
*
devices
,
int
nr_devices
)
{}
#endif
/* --------------------------------------------------------------------
* SPI
* -------------------------------------------------------------------- */
#if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
static
u64
spi_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
resource
spi0_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_SPI0
,
.
end
=
AT91CAP9_BASE_SPI0
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_SPI0
,
.
end
=
AT91CAP9_ID_SPI0
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91cap9_spi0_device
=
{
.
name
=
"atmel_spi"
,
.
id
=
0
,
.
dev
=
{
.
dma_mask
=
&
spi_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
},
.
resource
=
spi0_resources
,
.
num_resources
=
ARRAY_SIZE
(
spi0_resources
),
};
static
const
unsigned
spi0_standard_cs
[
4
]
=
{
AT91_PIN_PA5
,
AT91_PIN_PA3
,
AT91_PIN_PD0
,
AT91_PIN_PD1
};
static
struct
resource
spi1_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_SPI1
,
.
end
=
AT91CAP9_BASE_SPI1
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_SPI1
,
.
end
=
AT91CAP9_ID_SPI1
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91cap9_spi1_device
=
{
.
name
=
"atmel_spi"
,
.
id
=
1
,
.
dev
=
{
.
dma_mask
=
&
spi_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
},
.
resource
=
spi1_resources
,
.
num_resources
=
ARRAY_SIZE
(
spi1_resources
),
};
static
const
unsigned
spi1_standard_cs
[
4
]
=
{
AT91_PIN_PB15
,
AT91_PIN_PB16
,
AT91_PIN_PB17
,
AT91_PIN_PB18
};
void
__init
at91_add_device_spi
(
struct
spi_board_info
*
devices
,
int
nr_devices
)
{
int
i
;
unsigned
long
cs_pin
;
short
enable_spi0
=
0
;
short
enable_spi1
=
0
;
/* Choose SPI chip-selects */
for
(
i
=
0
;
i
<
nr_devices
;
i
++
)
{
if
(
devices
[
i
].
controller_data
)
cs_pin
=
(
unsigned
long
)
devices
[
i
].
controller_data
;
else
if
(
devices
[
i
].
bus_num
==
0
)
cs_pin
=
spi0_standard_cs
[
devices
[
i
].
chip_select
];
else
cs_pin
=
spi1_standard_cs
[
devices
[
i
].
chip_select
];
if
(
devices
[
i
].
bus_num
==
0
)
enable_spi0
=
1
;
else
enable_spi1
=
1
;
/* enable chip-select pin */
at91_set_gpio_output
(
cs_pin
,
1
);
/* pass chip-select pin to driver */
devices
[
i
].
controller_data
=
(
void
*
)
cs_pin
;
}
spi_register_board_info
(
devices
,
nr_devices
);
/* Configure SPI bus(es) */
if
(
enable_spi0
)
{
at91_set_B_periph
(
AT91_PIN_PA0
,
0
);
/* SPI0_MISO */
at91_set_B_periph
(
AT91_PIN_PA1
,
0
);
/* SPI0_MOSI */
at91_set_B_periph
(
AT91_PIN_PA2
,
0
);
/* SPI0_SPCK */
platform_device_register
(
&
at91cap9_spi0_device
);
}
if
(
enable_spi1
)
{
at91_set_A_periph
(
AT91_PIN_PB12
,
0
);
/* SPI1_MISO */
at91_set_A_periph
(
AT91_PIN_PB13
,
0
);
/* SPI1_MOSI */
at91_set_A_periph
(
AT91_PIN_PB14
,
0
);
/* SPI1_SPCK */
platform_device_register
(
&
at91cap9_spi1_device
);
}
}
#else
void
__init
at91_add_device_spi
(
struct
spi_board_info
*
devices
,
int
nr_devices
)
{}
#endif
/* --------------------------------------------------------------------
* Timer/Counter block
* -------------------------------------------------------------------- */
#ifdef CONFIG_ATMEL_TCLIB
static
struct
resource
tcb_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_TCB0
,
.
end
=
AT91CAP9_BASE_TCB0
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_TCB
,
.
end
=
AT91CAP9_ID_TCB
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91cap9_tcb_device
=
{
.
name
=
"atmel_tcb"
,
.
id
=
0
,
.
resource
=
tcb_resources
,
.
num_resources
=
ARRAY_SIZE
(
tcb_resources
),
};
static
void
__init
at91_add_device_tc
(
void
)
{
platform_device_register
(
&
at91cap9_tcb_device
);
}
#else
static
void
__init
at91_add_device_tc
(
void
)
{
}
#endif
/* --------------------------------------------------------------------
* RTT
* -------------------------------------------------------------------- */
static
struct
resource
rtt_resources
[]
=
{
{
.
start
=
AT91CAP9_BASE_RTT
,
.
end
=
AT91CAP9_BASE_RTT
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
}
};
static
struct
platform_device
at91cap9_rtt_device
=
{
.
name
=
"at91_rtt"
,
.
id
=
0
,
.
resource
=
rtt_resources
,
.
num_resources
=
ARRAY_SIZE
(
rtt_resources
),
};
static
void
__init
at91_add_device_rtt
(
void
)
{
platform_device_register
(
&
at91cap9_rtt_device
);
}
/* --------------------------------------------------------------------
* Watchdog
* -------------------------------------------------------------------- */
#if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
static
struct
resource
wdt_resources
[]
=
{
{
.
start
=
AT91CAP9_BASE_WDT
,
.
end
=
AT91CAP9_BASE_WDT
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
}
};
static
struct
platform_device
at91cap9_wdt_device
=
{
.
name
=
"at91_wdt"
,
.
id
=
-
1
,
.
resource
=
wdt_resources
,
.
num_resources
=
ARRAY_SIZE
(
wdt_resources
),
};
static
void
__init
at91_add_device_watchdog
(
void
)
{
platform_device_register
(
&
at91cap9_wdt_device
);
}
#else
static
void
__init
at91_add_device_watchdog
(
void
)
{}
#endif
/* --------------------------------------------------------------------
* PWM
* --------------------------------------------------------------------*/
#if defined(CONFIG_ATMEL_PWM)
static
u32
pwm_mask
;
static
struct
resource
pwm_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_PWMC
,
.
end
=
AT91CAP9_BASE_PWMC
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_PWMC
,
.
end
=
AT91CAP9_ID_PWMC
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91cap9_pwm0_device
=
{
.
name
=
"atmel_pwm"
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
pwm_mask
,
},
.
resource
=
pwm_resources
,
.
num_resources
=
ARRAY_SIZE
(
pwm_resources
),
};
void
__init
at91_add_device_pwm
(
u32
mask
)
{
if
(
mask
&
(
1
<<
AT91_PWM0
))
at91_set_A_periph
(
AT91_PIN_PB19
,
1
);
/* enable PWM0 */
if
(
mask
&
(
1
<<
AT91_PWM1
))
at91_set_B_periph
(
AT91_PIN_PB8
,
1
);
/* enable PWM1 */
if
(
mask
&
(
1
<<
AT91_PWM2
))
at91_set_B_periph
(
AT91_PIN_PC29
,
1
);
/* enable PWM2 */
if
(
mask
&
(
1
<<
AT91_PWM3
))
at91_set_B_periph
(
AT91_PIN_PA11
,
1
);
/* enable PWM3 */
pwm_mask
=
mask
;
platform_device_register
(
&
at91cap9_pwm0_device
);
}
#else
void
__init
at91_add_device_pwm
(
u32
mask
)
{}
#endif
/* --------------------------------------------------------------------
* AC97
* -------------------------------------------------------------------- */
#if defined(CONFIG_SND_ATMEL_AC97C) || defined(CONFIG_SND_ATMEL_AC97C_MODULE)
static
u64
ac97_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
ac97c_platform_data
ac97_data
;
static
struct
resource
ac97_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_AC97C
,
.
end
=
AT91CAP9_BASE_AC97C
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_AC97C
,
.
end
=
AT91CAP9_ID_AC97C
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91cap9_ac97_device
=
{
.
name
=
"atmel_ac97c"
,
.
id
=
1
,
.
dev
=
{
.
dma_mask
=
&
ac97_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
ac97_data
,
},
.
resource
=
ac97_resources
,
.
num_resources
=
ARRAY_SIZE
(
ac97_resources
),
};
void
__init
at91_add_device_ac97
(
struct
ac97c_platform_data
*
data
)
{
if
(
!
data
)
return
;
at91_set_A_periph
(
AT91_PIN_PA6
,
0
);
/* AC97FS */
at91_set_A_periph
(
AT91_PIN_PA7
,
0
);
/* AC97CK */
at91_set_A_periph
(
AT91_PIN_PA8
,
0
);
/* AC97TX */
at91_set_A_periph
(
AT91_PIN_PA9
,
0
);
/* AC97RX */
/* reset */
if
(
gpio_is_valid
(
data
->
reset_pin
))
at91_set_gpio_output
(
data
->
reset_pin
,
0
);
ac97_data
=
*
data
;
platform_device_register
(
&
at91cap9_ac97_device
);
}
#else
void
__init
at91_add_device_ac97
(
struct
ac97c_platform_data
*
data
)
{}
#endif
/* --------------------------------------------------------------------
* LCD Controller
* -------------------------------------------------------------------- */
#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
static
u64
lcdc_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
atmel_lcdfb_info
lcdc_data
;
static
struct
resource
lcdc_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_LCDC_BASE
,
.
end
=
AT91CAP9_LCDC_BASE
+
SZ_4K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_LCDC
,
.
end
=
AT91CAP9_ID_LCDC
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91_lcdc_device
=
{
.
name
=
"atmel_lcdfb"
,
.
id
=
0
,
.
dev
=
{
.
dma_mask
=
&
lcdc_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
lcdc_data
,
},
.
resource
=
lcdc_resources
,
.
num_resources
=
ARRAY_SIZE
(
lcdc_resources
),
};
void
__init
at91_add_device_lcdc
(
struct
atmel_lcdfb_info
*
data
)
{
if
(
!
data
)
return
;
if
(
cpu_is_at91cap9_revB
())
irq_set_irq_type
(
AT91CAP9_ID_LCDC
,
IRQ_TYPE_LEVEL_HIGH
);
at91_set_A_periph
(
AT91_PIN_PC1
,
0
);
/* LCDHSYNC */
at91_set_A_periph
(
AT91_PIN_PC2
,
0
);
/* LCDDOTCK */
at91_set_A_periph
(
AT91_PIN_PC3
,
0
);
/* LCDDEN */
at91_set_B_periph
(
AT91_PIN_PB9
,
0
);
/* LCDCC */
at91_set_A_periph
(
AT91_PIN_PC6
,
0
);
/* LCDD2 */
at91_set_A_periph
(
AT91_PIN_PC7
,
0
);
/* LCDD3 */
at91_set_A_periph
(
AT91_PIN_PC8
,
0
);
/* LCDD4 */
at91_set_A_periph
(
AT91_PIN_PC9
,
0
);
/* LCDD5 */
at91_set_A_periph
(
AT91_PIN_PC10
,
0
);
/* LCDD6 */
at91_set_A_periph
(
AT91_PIN_PC11
,
0
);
/* LCDD7 */
at91_set_A_periph
(
AT91_PIN_PC14
,
0
);
/* LCDD10 */
at91_set_A_periph
(
AT91_PIN_PC15
,
0
);
/* LCDD11 */
at91_set_A_periph
(
AT91_PIN_PC16
,
0
);
/* LCDD12 */
at91_set_A_periph
(
AT91_PIN_PC17
,
0
);
/* LCDD13 */
at91_set_A_periph
(
AT91_PIN_PC18
,
0
);
/* LCDD14 */
at91_set_A_periph
(
AT91_PIN_PC19
,
0
);
/* LCDD15 */
at91_set_A_periph
(
AT91_PIN_PC22
,
0
);
/* LCDD18 */
at91_set_A_periph
(
AT91_PIN_PC23
,
0
);
/* LCDD19 */
at91_set_A_periph
(
AT91_PIN_PC24
,
0
);
/* LCDD20 */
at91_set_A_periph
(
AT91_PIN_PC25
,
0
);
/* LCDD21 */
at91_set_A_periph
(
AT91_PIN_PC26
,
0
);
/* LCDD22 */
at91_set_A_periph
(
AT91_PIN_PC27
,
0
);
/* LCDD23 */
lcdc_data
=
*
data
;
platform_device_register
(
&
at91_lcdc_device
);
}
#else
void
__init
at91_add_device_lcdc
(
struct
atmel_lcdfb_info
*
data
)
{}
#endif
/* --------------------------------------------------------------------
* SSC -- Synchronous Serial Controller
* -------------------------------------------------------------------- */
#if defined(CONFIG_ATMEL_SSC) || defined(CONFIG_ATMEL_SSC_MODULE)
static
u64
ssc0_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
resource
ssc0_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_SSC0
,
.
end
=
AT91CAP9_BASE_SSC0
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_SSC0
,
.
end
=
AT91CAP9_ID_SSC0
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91cap9_ssc0_device
=
{
.
name
=
"ssc"
,
.
id
=
0
,
.
dev
=
{
.
dma_mask
=
&
ssc0_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
},
.
resource
=
ssc0_resources
,
.
num_resources
=
ARRAY_SIZE
(
ssc0_resources
),
};
static
inline
void
configure_ssc0_pins
(
unsigned
pins
)
{
if
(
pins
&
ATMEL_SSC_TF
)
at91_set_A_periph
(
AT91_PIN_PB0
,
1
);
if
(
pins
&
ATMEL_SSC_TK
)
at91_set_A_periph
(
AT91_PIN_PB1
,
1
);
if
(
pins
&
ATMEL_SSC_TD
)
at91_set_A_periph
(
AT91_PIN_PB2
,
1
);
if
(
pins
&
ATMEL_SSC_RD
)
at91_set_A_periph
(
AT91_PIN_PB3
,
1
);
if
(
pins
&
ATMEL_SSC_RK
)
at91_set_A_periph
(
AT91_PIN_PB4
,
1
);
if
(
pins
&
ATMEL_SSC_RF
)
at91_set_A_periph
(
AT91_PIN_PB5
,
1
);
}
static
u64
ssc1_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
resource
ssc1_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_SSC1
,
.
end
=
AT91CAP9_BASE_SSC1
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_SSC1
,
.
end
=
AT91CAP9_ID_SSC1
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91cap9_ssc1_device
=
{
.
name
=
"ssc"
,
.
id
=
1
,
.
dev
=
{
.
dma_mask
=
&
ssc1_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
},
.
resource
=
ssc1_resources
,
.
num_resources
=
ARRAY_SIZE
(
ssc1_resources
),
};
static
inline
void
configure_ssc1_pins
(
unsigned
pins
)
{
if
(
pins
&
ATMEL_SSC_TF
)
at91_set_A_periph
(
AT91_PIN_PB6
,
1
);
if
(
pins
&
ATMEL_SSC_TK
)
at91_set_A_periph
(
AT91_PIN_PB7
,
1
);
if
(
pins
&
ATMEL_SSC_TD
)
at91_set_A_periph
(
AT91_PIN_PB8
,
1
);
if
(
pins
&
ATMEL_SSC_RD
)
at91_set_A_periph
(
AT91_PIN_PB9
,
1
);
if
(
pins
&
ATMEL_SSC_RK
)
at91_set_A_periph
(
AT91_PIN_PB10
,
1
);
if
(
pins
&
ATMEL_SSC_RF
)
at91_set_A_periph
(
AT91_PIN_PB11
,
1
);
}
/*
* SSC controllers are accessed through library code, instead of any
* kind of all-singing/all-dancing driver. For example one could be
* used by a particular I2S audio codec's driver, while another one
* on the same system might be used by a custom data capture driver.
*/
void
__init
at91_add_device_ssc
(
unsigned
id
,
unsigned
pins
)
{
struct
platform_device
*
pdev
;
/*
* NOTE: caller is responsible for passing information matching
* "pins" to whatever will be using each particular controller.
*/
switch
(
id
)
{
case
AT91CAP9_ID_SSC0
:
pdev
=
&
at91cap9_ssc0_device
;
configure_ssc0_pins
(
pins
);
break
;
case
AT91CAP9_ID_SSC1
:
pdev
=
&
at91cap9_ssc1_device
;
configure_ssc1_pins
(
pins
);
break
;
default:
return
;
}
platform_device_register
(
pdev
);
}
#else
void
__init
at91_add_device_ssc
(
unsigned
id
,
unsigned
pins
)
{}
#endif
/* --------------------------------------------------------------------
* UART
* -------------------------------------------------------------------- */
#if defined(CONFIG_SERIAL_ATMEL)
static
struct
resource
dbgu_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_DBGU
,
.
end
=
AT91CAP9_BASE_DBGU
+
SZ_512
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91_ID_SYS
,
.
end
=
AT91_ID_SYS
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
atmel_uart_data
dbgu_data
=
{
.
use_dma_tx
=
0
,
.
use_dma_rx
=
0
,
/* DBGU not capable of receive DMA */
};
static
u64
dbgu_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
platform_device
at91cap9_dbgu_device
=
{
.
name
=
"atmel_usart"
,
.
id
=
0
,
.
dev
=
{
.
dma_mask
=
&
dbgu_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
dbgu_data
,
},
.
resource
=
dbgu_resources
,
.
num_resources
=
ARRAY_SIZE
(
dbgu_resources
),
};
static
inline
void
configure_dbgu_pins
(
void
)
{
at91_set_A_periph
(
AT91_PIN_PC30
,
0
);
/* DRXD */
at91_set_A_periph
(
AT91_PIN_PC31
,
1
);
/* DTXD */
}
static
struct
resource
uart0_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_US0
,
.
end
=
AT91CAP9_BASE_US0
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_US0
,
.
end
=
AT91CAP9_ID_US0
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
atmel_uart_data
uart0_data
=
{
.
use_dma_tx
=
1
,
.
use_dma_rx
=
1
,
};
static
u64
uart0_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
platform_device
at91cap9_uart0_device
=
{
.
name
=
"atmel_usart"
,
.
id
=
1
,
.
dev
=
{
.
dma_mask
=
&
uart0_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
uart0_data
,
},
.
resource
=
uart0_resources
,
.
num_resources
=
ARRAY_SIZE
(
uart0_resources
),
};
static
inline
void
configure_usart0_pins
(
unsigned
pins
)
{
at91_set_A_periph
(
AT91_PIN_PA22
,
1
);
/* TXD0 */
at91_set_A_periph
(
AT91_PIN_PA23
,
0
);
/* RXD0 */
if
(
pins
&
ATMEL_UART_RTS
)
at91_set_A_periph
(
AT91_PIN_PA24
,
0
);
/* RTS0 */
if
(
pins
&
ATMEL_UART_CTS
)
at91_set_A_periph
(
AT91_PIN_PA25
,
0
);
/* CTS0 */
}
static
struct
resource
uart1_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_US1
,
.
end
=
AT91CAP9_BASE_US1
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_US1
,
.
end
=
AT91CAP9_ID_US1
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
atmel_uart_data
uart1_data
=
{
.
use_dma_tx
=
1
,
.
use_dma_rx
=
1
,
};
static
u64
uart1_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
platform_device
at91cap9_uart1_device
=
{
.
name
=
"atmel_usart"
,
.
id
=
2
,
.
dev
=
{
.
dma_mask
=
&
uart1_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
uart1_data
,
},
.
resource
=
uart1_resources
,
.
num_resources
=
ARRAY_SIZE
(
uart1_resources
),
};
static
inline
void
configure_usart1_pins
(
unsigned
pins
)
{
at91_set_A_periph
(
AT91_PIN_PD0
,
1
);
/* TXD1 */
at91_set_A_periph
(
AT91_PIN_PD1
,
0
);
/* RXD1 */
if
(
pins
&
ATMEL_UART_RTS
)
at91_set_B_periph
(
AT91_PIN_PD7
,
0
);
/* RTS1 */
if
(
pins
&
ATMEL_UART_CTS
)
at91_set_B_periph
(
AT91_PIN_PD8
,
0
);
/* CTS1 */
}
static
struct
resource
uart2_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91CAP9_BASE_US2
,
.
end
=
AT91CAP9_BASE_US2
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91CAP9_ID_US2
,
.
end
=
AT91CAP9_ID_US2
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
atmel_uart_data
uart2_data
=
{
.
use_dma_tx
=
1
,
.
use_dma_rx
=
1
,
};
static
u64
uart2_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
platform_device
at91cap9_uart2_device
=
{
.
name
=
"atmel_usart"
,
.
id
=
3
,
.
dev
=
{
.
dma_mask
=
&
uart2_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
uart2_data
,
},
.
resource
=
uart2_resources
,
.
num_resources
=
ARRAY_SIZE
(
uart2_resources
),
};
static
inline
void
configure_usart2_pins
(
unsigned
pins
)
{
at91_set_A_periph
(
AT91_PIN_PD2
,
1
);
/* TXD2 */
at91_set_A_periph
(
AT91_PIN_PD3
,
0
);
/* RXD2 */
if
(
pins
&
ATMEL_UART_RTS
)
at91_set_B_periph
(
AT91_PIN_PD5
,
0
);
/* RTS2 */
if
(
pins
&
ATMEL_UART_CTS
)
at91_set_B_periph
(
AT91_PIN_PD6
,
0
);
/* CTS2 */
}
static
struct
platform_device
*
__initdata
at91_uarts
[
ATMEL_MAX_UART
];
/* the UARTs to use */
struct
platform_device
*
atmel_default_console_device
;
/* the serial console device */
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{
struct
platform_device
*
pdev
;
struct
atmel_uart_data
*
pdata
;
switch
(
id
)
{
case
0
:
/* DBGU */
pdev
=
&
at91cap9_dbgu_device
;
configure_dbgu_pins
();
break
;
case
AT91CAP9_ID_US0
:
pdev
=
&
at91cap9_uart0_device
;
configure_usart0_pins
(
pins
);
break
;
case
AT91CAP9_ID_US1
:
pdev
=
&
at91cap9_uart1_device
;
configure_usart1_pins
(
pins
);
break
;
case
AT91CAP9_ID_US2
:
pdev
=
&
at91cap9_uart2_device
;
configure_usart2_pins
(
pins
);
break
;
default:
return
;
}
pdata
=
pdev
->
dev
.
platform_data
;
pdata
->
num
=
portnr
;
/* update to mapped ID */
if
(
portnr
<
ATMEL_MAX_UART
)
at91_uarts
[
portnr
]
=
pdev
;
}
void
__init
at91_set_serial_console
(
unsigned
portnr
)
{
if
(
portnr
<
ATMEL_MAX_UART
)
{
atmel_default_console_device
=
at91_uarts
[
portnr
];
at91cap9_set_console_clock
(
at91_uarts
[
portnr
]
->
id
);
}
}
void
__init
at91_add_device_serial
(
void
)
{
int
i
;
for
(
i
=
0
;
i
<
ATMEL_MAX_UART
;
i
++
)
{
if
(
at91_uarts
[
i
])
platform_device_register
(
at91_uarts
[
i
]);
}
if
(
!
atmel_default_console_device
)
printk
(
KERN_INFO
"AT91: No default serial console defined.
\n
"
);
}
#else
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{}
void
__init
at91_set_serial_console
(
unsigned
portnr
)
{}
void
__init
at91_add_device_serial
(
void
)
{}
#endif
/* -------------------------------------------------------------------- */
/*
* These devices are always present and don't need any board-specific
* setup.
*/
static
int
__init
at91_add_standard_devices
(
void
)
{
at91_add_device_rtt
();
at91_add_device_watchdog
();
at91_add_device_tc
();
return
0
;
}
arch_initcall
(
at91_add_standard_devices
);
arch/arm/mach-at91/at91rm9200.c
View file @
d50673ed
...
...
@@ -295,7 +295,7 @@ static void at91rm9200_idle(void)
* Disable the processor clock. The processor will be automatically
* re-enabled by an interrupt or by a reset.
*/
at91_
sys
_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
at91_
pmc
_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
}
static
void
at91rm9200_restart
(
char
mode
,
const
char
*
cmd
)
...
...
@@ -303,8 +303,8 @@ static void at91rm9200_restart(char mode, const char *cmd)
/*
* Perform a hardware reset with the use of the Watchdog timer.
*/
at91_s
ys
_write
(
AT91_ST_WDMR
,
AT91_ST_RSTEN
|
AT91_ST_EXTEN
|
1
);
at91_s
ys
_write
(
AT91_ST_CR
,
AT91_ST_WDRST
);
at91_s
t
_write
(
AT91_ST_WDMR
,
AT91_ST_RSTEN
|
AT91_ST_EXTEN
|
1
);
at91_s
t
_write
(
AT91_ST_CR
,
AT91_ST_WDRST
);
}
/* --------------------------------------------------------------------
...
...
@@ -319,6 +319,8 @@ static void __init at91rm9200_map_io(void)
static
void
__init
at91rm9200_ioremap_registers
(
void
)
{
at91rm9200_ioremap_st
(
AT91RM9200_BASE_ST
);
at91_ioremap_ramc
(
0
,
AT91RM9200_BASE_MC
,
256
);
}
static
void
__init
at91rm9200_initialize
(
void
)
...
...
arch/arm/mach-at91/at91rm9200_devices.c
View file @
d50673ed
...
...
@@ -21,6 +21,7 @@
#include <mach/board.h>
#include <mach/at91rm9200.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include "generic.h"
...
...
@@ -241,15 +242,15 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
data
->
chipselect
=
4
;
/* can only use EBI ChipSelect 4 */
/* CF takes over CS4, CS5, CS6 */
csa
=
at91_
sys_read
(
AT91_EBI_CSA
);
at91_
sys_write
(
AT91_EBI_CSA
,
csa
|
AT91_EBI_CS4A_SMC_COMPACTFLASH
);
csa
=
at91_
ramc_read
(
0
,
AT91_EBI_CSA
);
at91_
ramc_write
(
0
,
AT91_EBI_CSA
,
csa
|
AT91_EBI_CS4A_SMC_COMPACTFLASH
);
/*
* Static memory controller timing adjustments.
* REVISIT: these timings are in terms of MCK cycles, so
* when MCK changes (cpufreq etc) so must these values...
*/
at91_
sys_write
(
AT91_SMC_CSR
(
4
),
at91_
ramc_write
(
0
,
AT91_SMC_CSR
(
4
),
AT91_SMC_ACSS_STD
|
AT91_SMC_DBW_16
|
AT91_SMC_BAT
...
...
@@ -407,11 +408,11 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
return
;
/* enable the address range of CS3 */
csa
=
at91_
sys_read
(
AT91_EBI_CSA
);
at91_
sys_write
(
AT91_EBI_CSA
,
csa
|
AT91_EBI_CS3A_SMC_SMARTMEDIA
);
csa
=
at91_
ramc_read
(
0
,
AT91_EBI_CSA
);
at91_
ramc_write
(
0
,
AT91_EBI_CSA
,
csa
|
AT91_EBI_CS3A_SMC_SMARTMEDIA
);
/* set the bus interface characteristics */
at91_
sys_write
(
AT91_SMC_CSR
(
3
),
AT91_SMC_ACSS_STD
|
AT91_SMC_DBW_8
|
AT91_SMC_WSEN
at91_
ramc_write
(
0
,
AT91_SMC_CSR
(
3
),
AT91_SMC_ACSS_STD
|
AT91_SMC_DBW_8
|
AT91_SMC_WSEN
|
AT91_SMC_NWS_
(
5
)
|
AT91_SMC_TDF_
(
1
)
|
AT91_SMC_RWSETUP_
(
0
)
/* tDS Data Set up Time 30 - ns */
...
...
@@ -1114,7 +1115,6 @@ static inline void configure_usart3_pins(unsigned pins)
}
static
struct
platform_device
*
__initdata
at91_uarts
[
ATMEL_MAX_UART
];
/* the UARTs to use */
struct
platform_device
*
atmel_default_console_device
;
/* the serial console device */
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{
...
...
arch/arm/mach-at91/at91rm9200_time.c
View file @
d50673ed
...
...
@@ -43,9 +43,9 @@ static inline unsigned long read_CRTR(void)
{
unsigned
long
x1
,
x2
;
x1
=
at91_s
ys
_read
(
AT91_ST_CRTR
);
x1
=
at91_s
t
_read
(
AT91_ST_CRTR
);
do
{
x2
=
at91_s
ys
_read
(
AT91_ST_CRTR
);
x2
=
at91_s
t
_read
(
AT91_ST_CRTR
);
if
(
x1
==
x2
)
break
;
x1
=
x2
;
...
...
@@ -58,7 +58,7 @@ static inline unsigned long read_CRTR(void)
*/
static
irqreturn_t
at91rm9200_timer_interrupt
(
int
irq
,
void
*
dev_id
)
{
u32
sr
=
at91_s
ys
_read
(
AT91_ST_SR
)
&
irqmask
;
u32
sr
=
at91_s
t
_read
(
AT91_ST_SR
)
&
irqmask
;
/*
* irqs should be disabled here, but as the irq is shared they are only
...
...
@@ -110,22 +110,22 @@ static void
clkevt32k_mode
(
enum
clock_event_mode
mode
,
struct
clock_event_device
*
dev
)
{
/* Disable and flush pending timer interrupts */
at91_s
ys
_write
(
AT91_ST_IDR
,
AT91_ST_PITS
|
AT91_ST_ALMS
);
(
void
)
at91_sys
_read
(
AT91_ST_SR
);
at91_s
t
_write
(
AT91_ST_IDR
,
AT91_ST_PITS
|
AT91_ST_ALMS
);
at91_st
_read
(
AT91_ST_SR
);
last_crtr
=
read_CRTR
();
switch
(
mode
)
{
case
CLOCK_EVT_MODE_PERIODIC
:
/* PIT for periodic irqs; fixed rate of 1/HZ */
irqmask
=
AT91_ST_PITS
;
at91_s
ys
_write
(
AT91_ST_PIMR
,
RM9200_TIMER_LATCH
);
at91_s
t
_write
(
AT91_ST_PIMR
,
RM9200_TIMER_LATCH
);
break
;
case
CLOCK_EVT_MODE_ONESHOT
:
/* ALM for oneshot irqs, set by next_event()
* before 32 seconds have passed
*/
irqmask
=
AT91_ST_ALMS
;
at91_s
ys
_write
(
AT91_ST_RTAR
,
last_crtr
);
at91_s
t
_write
(
AT91_ST_RTAR
,
last_crtr
);
break
;
case
CLOCK_EVT_MODE_SHUTDOWN
:
case
CLOCK_EVT_MODE_UNUSED
:
...
...
@@ -133,7 +133,7 @@ clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev)
irqmask
=
0
;
break
;
}
at91_s
ys
_write
(
AT91_ST_IER
,
irqmask
);
at91_s
t
_write
(
AT91_ST_IER
,
irqmask
);
}
static
int
...
...
@@ -156,12 +156,12 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev)
alm
=
read_CRTR
();
/* Cancel any pending alarm; flush any pending IRQ */
at91_s
ys
_write
(
AT91_ST_RTAR
,
alm
);
(
void
)
at91_sys
_read
(
AT91_ST_SR
);
at91_s
t
_write
(
AT91_ST_RTAR
,
alm
);
at91_st
_read
(
AT91_ST_SR
);
/* Schedule alarm by writing RTAR. */
alm
+=
delta
;
at91_s
ys
_write
(
AT91_ST_RTAR
,
alm
);
at91_s
t
_write
(
AT91_ST_RTAR
,
alm
);
return
status
;
}
...
...
@@ -175,15 +175,24 @@ static struct clock_event_device clkevt = {
.
set_mode
=
clkevt32k_mode
,
};
void
__iomem
*
at91_st_base
;
void
__init
at91rm9200_ioremap_st
(
u32
addr
)
{
at91_st_base
=
ioremap
(
addr
,
256
);
if
(
!
at91_st_base
)
panic
(
"Impossible to ioremap ST
\n
"
);
}
/*
* ST (system timer) module supports both clockevents and clocksource.
*/
void
__init
at91rm9200_timer_init
(
void
)
{
/* Disable all timer interrupts, and clear any pending ones */
at91_s
ys
_write
(
AT91_ST_IDR
,
at91_s
t
_write
(
AT91_ST_IDR
,
AT91_ST_PITS
|
AT91_ST_WDOVF
|
AT91_ST_RTTINC
|
AT91_ST_ALMS
);
(
void
)
at91_sys
_read
(
AT91_ST_SR
);
at91_st
_read
(
AT91_ST_SR
);
/* Make IRQs happen for the system timer */
setup_irq
(
AT91_ID_SYS
,
&
at91rm9200_timer_irq
);
...
...
@@ -192,7 +201,7 @@ void __init at91rm9200_timer_init(void)
* directly for the clocksource and all clockevents, after adjusting
* its prescaler from the 1 Hz default.
*/
at91_s
ys
_write
(
AT91_ST_RTMR
,
1
);
at91_s
t
_write
(
AT91_ST_RTMR
,
1
);
/* Setup timer clockevent, with minimum of two ticks (important!!) */
clkevt
.
mult
=
div_sc
(
AT91_SLOW_CLOCK
,
NSEC_PER_SEC
,
clkevt
.
shift
);
...
...
arch/arm/mach-at91/at91sam9260.c
View file @
d50673ed
...
...
@@ -310,34 +310,27 @@ static void __init at91sam9xe_map_io(void)
static
void
__init
at91sam9260_map_io
(
void
)
{
if
(
cpu_is_at91sam9xe
())
{
if
(
cpu_is_at91sam9xe
())
at91sam9xe_map_io
();
}
else
if
(
cpu_is_at91sam9g20
())
{
at91_init_sram
(
0
,
AT91SAM9G20_SRAM0_BASE
,
AT91SAM9G20_SRAM0_SIZE
);
at91_init_sram
(
1
,
AT91SAM9G20_SRAM1_BASE
,
AT91SAM9G20_SRAM1_SIZE
);
}
else
{
at91_init_sram
(
0
,
AT91SAM9260_SRAM0_BASE
,
AT91SAM9260_SRAM0_SIZE
);
at91_init_sram
(
1
,
AT91SAM9260_SRAM1_BASE
,
AT91SAM9260_SRAM1_SIZE
);
}
else
if
(
cpu_is_at91sam9g20
())
at91_init_sram
(
0
,
AT91SAM9G20_SRAM_BASE
,
AT91SAM9G20_SRAM_SIZE
);
else
at91_init_sram
(
0
,
AT91SAM9260_SRAM_BASE
,
AT91SAM9260_SRAM_SIZE
);
}
static
void
__init
at91sam9260_ioremap_registers
(
void
)
{
at91_ioremap_shdwc
(
AT91SAM9260_BASE_SHDWC
);
at91_ioremap_rstc
(
AT91SAM9260_BASE_RSTC
);
at91_ioremap_ramc
(
0
,
AT91SAM9260_BASE_SDRAMC
,
512
);
at91sam926x_ioremap_pit
(
AT91SAM9260_BASE_PIT
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9260_BASE_SMC
);
}
static
void
at91sam9260_idle
(
void
)
{
at91_sys_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
cpu_do_idle
();
at91_ioremap_matrix
(
AT91SAM9260_BASE_MATRIX
);
}
static
void
__init
at91sam9260_initialize
(
void
)
{
arm_pm_idle
=
at91sam9
260
_idle
;
arm_pm_idle
=
at91sam9_idle
;
arm_pm_restart
=
at91sam9_alt_restart
;
at91_extern_irq
=
(
1
<<
AT91SAM9260_ID_IRQ0
)
|
(
1
<<
AT91SAM9260_ID_IRQ1
)
|
(
1
<<
AT91SAM9260_ID_IRQ2
);
...
...
arch/arm/mach-at91/at91sam9260_devices.c
View file @
d50673ed
...
...
@@ -21,6 +21,7 @@
#include <mach/cpu.h>
#include <mach/at91sam9260.h>
#include <mach/at91sam9260_matrix.h>
#include <mach/at91_matrix.h>
#include <mach/at91sam9_smc.h>
#include "generic.h"
...
...
@@ -422,8 +423,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
if
(
!
data
)
return
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBICSA
);
at91_
sys
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_CS3A_SMC_SMARTMEDIA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBICSA
);
at91_
matrix
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_CS3A_SMC_SMARTMEDIA
);
/* enable pin */
if
(
gpio_is_valid
(
data
->
enable_pin
))
...
...
@@ -717,18 +718,42 @@ static struct resource rtt_resources[] = {
.
start
=
AT91SAM9260_BASE_RTT
,
.
end
=
AT91SAM9260_BASE_RTT
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
}
},
{
.
flags
=
IORESOURCE_MEM
,
},
};
static
struct
platform_device
at91sam9260_rtt_device
=
{
.
name
=
"at91_rtt"
,
.
id
=
0
,
.
resource
=
rtt_resources
,
.
num_resources
=
ARRAY_SIZE
(
rtt_resources
),
};
#if IS_ENABLED(CONFIG_RTC_DRV_AT91SAM9)
static
void
__init
at91_add_device_rtt_rtc
(
void
)
{
at91sam9260_rtt_device
.
name
=
"rtc-at91sam9"
;
/*
* The second resource is needed:
* GPBR will serve as the storage for RTC time offset
*/
at91sam9260_rtt_device
.
num_resources
=
2
;
rtt_resources
[
1
].
start
=
AT91SAM9260_BASE_GPBR
+
4
*
CONFIG_RTC_DRV_AT91SAM9_GPBR
;
rtt_resources
[
1
].
end
=
rtt_resources
[
1
].
start
+
3
;
}
#else
static
void
__init
at91_add_device_rtt_rtc
(
void
)
{
/* Only one resource is needed: RTT not used as RTC */
at91sam9260_rtt_device
.
num_resources
=
1
;
}
#endif
static
void
__init
at91_add_device_rtt
(
void
)
{
at91_add_device_rtt_rtc
();
platform_device_register
(
&
at91sam9260_rtt_device
);
}
...
...
@@ -1139,7 +1164,6 @@ static inline void configure_usart5_pins(void)
}
static
struct
platform_device
*
__initdata
at91_uarts
[
ATMEL_MAX_UART
];
/* the UARTs to use */
struct
platform_device
*
atmel_default_console_device
;
/* the serial console device */
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{
...
...
@@ -1265,7 +1289,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
if
(
!
data
)
return
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBICSA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBICSA
);
switch
(
data
->
chipselect
)
{
case
4
:
...
...
@@ -1288,7 +1312,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
return
;
}
at91_
sys
_write
(
AT91_MATRIX_EBICSA
,
csa
);
at91_
matrix
_write
(
AT91_MATRIX_EBICSA
,
csa
);
if
(
gpio_is_valid
(
data
->
rst_pin
))
{
at91_set_multi_drive
(
data
->
rst_pin
,
0
);
...
...
arch/arm/mach-at91/at91sam9261.c
View file @
d50673ed
...
...
@@ -283,19 +283,15 @@ static void __init at91sam9261_ioremap_registers(void)
{
at91_ioremap_shdwc
(
AT91SAM9261_BASE_SHDWC
);
at91_ioremap_rstc
(
AT91SAM9261_BASE_RSTC
);
at91_ioremap_ramc
(
0
,
AT91SAM9261_BASE_SDRAMC
,
512
);
at91sam926x_ioremap_pit
(
AT91SAM9261_BASE_PIT
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9261_BASE_SMC
);
}
static
void
at91sam9261_idle
(
void
)
{
at91_sys_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
cpu_do_idle
();
at91_ioremap_matrix
(
AT91SAM9261_BASE_MATRIX
);
}
static
void
__init
at91sam9261_initialize
(
void
)
{
arm_pm_idle
=
at91sam9
261
_idle
;
arm_pm_idle
=
at91sam9_idle
;
arm_pm_restart
=
at91sam9_alt_restart
;
at91_extern_irq
=
(
1
<<
AT91SAM9261_ID_IRQ0
)
|
(
1
<<
AT91SAM9261_ID_IRQ1
)
|
(
1
<<
AT91SAM9261_ID_IRQ2
);
...
...
arch/arm/mach-at91/at91sam9261_devices.c
View file @
d50673ed
...
...
@@ -24,6 +24,7 @@
#include <mach/board.h>
#include <mach/at91sam9261.h>
#include <mach/at91sam9261_matrix.h>
#include <mach/at91_matrix.h>
#include <mach/at91sam9_smc.h>
#include "generic.h"
...
...
@@ -236,8 +237,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
if
(
!
data
)
return
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBICSA
);
at91_
sys
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_CS3A_SMC_SMARTMEDIA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBICSA
);
at91_
matrix
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_CS3A_SMC_SMARTMEDIA
);
/* enable pin */
if
(
gpio_is_valid
(
data
->
enable_pin
))
...
...
@@ -603,6 +604,8 @@ static struct resource rtt_resources[] = {
.
start
=
AT91SAM9261_BASE_RTT
,
.
end
=
AT91SAM9261_BASE_RTT
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
flags
=
IORESOURCE_MEM
,
}
};
...
...
@@ -610,11 +613,32 @@ static struct platform_device at91sam9261_rtt_device = {
.
name
=
"at91_rtt"
,
.
id
=
0
,
.
resource
=
rtt_resources
,
.
num_resources
=
ARRAY_SIZE
(
rtt_resources
),
};
#if IS_ENABLED(CONFIG_RTC_DRV_AT91SAM9)
static
void
__init
at91_add_device_rtt_rtc
(
void
)
{
at91sam9261_rtt_device
.
name
=
"rtc-at91sam9"
;
/*
* The second resource is needed:
* GPBR will serve as the storage for RTC time offset
*/
at91sam9261_rtt_device
.
num_resources
=
2
;
rtt_resources
[
1
].
start
=
AT91SAM9261_BASE_GPBR
+
4
*
CONFIG_RTC_DRV_AT91SAM9_GPBR
;
rtt_resources
[
1
].
end
=
rtt_resources
[
1
].
start
+
3
;
}
#else
static
void
__init
at91_add_device_rtt_rtc
(
void
)
{
/* Only one resource is needed: RTT not used as RTC */
at91sam9261_rtt_device
.
num_resources
=
1
;
}
#endif
static
void
__init
at91_add_device_rtt
(
void
)
{
at91_add_device_rtt_rtc
();
platform_device_register
(
&
at91sam9261_rtt_device
);
}
...
...
@@ -991,7 +1015,6 @@ static inline void configure_usart2_pins(unsigned pins)
}
static
struct
platform_device
*
__initdata
at91_uarts
[
ATMEL_MAX_UART
];
/* the UARTs to use */
struct
platform_device
*
atmel_default_console_device
;
/* the serial console device */
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{
...
...
arch/arm/mach-at91/at91sam9263.c
View file @
d50673ed
...
...
@@ -303,20 +303,17 @@ static void __init at91sam9263_ioremap_registers(void)
{
at91_ioremap_shdwc
(
AT91SAM9263_BASE_SHDWC
);
at91_ioremap_rstc
(
AT91SAM9263_BASE_RSTC
);
at91_ioremap_ramc
(
0
,
AT91SAM9263_BASE_SDRAMC0
,
512
);
at91_ioremap_ramc
(
1
,
AT91SAM9263_BASE_SDRAMC1
,
512
);
at91sam926x_ioremap_pit
(
AT91SAM9263_BASE_PIT
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9263_BASE_SMC0
);
at91sam9_ioremap_smc
(
1
,
AT91SAM9263_BASE_SMC1
);
}
static
void
at91sam9263_idle
(
void
)
{
at91_sys_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
cpu_do_idle
();
at91_ioremap_matrix
(
AT91SAM9263_BASE_MATRIX
);
}
static
void
__init
at91sam9263_initialize
(
void
)
{
arm_pm_idle
=
at91sam9
263
_idle
;
arm_pm_idle
=
at91sam9_idle
;
arm_pm_restart
=
at91sam9_alt_restart
;
at91_extern_irq
=
(
1
<<
AT91SAM9263_ID_IRQ0
)
|
(
1
<<
AT91SAM9263_ID_IRQ1
);
...
...
arch/arm/mach-at91/at91sam9263_devices.c
View file @
d50673ed
...
...
@@ -23,6 +23,7 @@
#include <mach/board.h>
#include <mach/at91sam9263.h>
#include <mach/at91sam9263_matrix.h>
#include <mach/at91_matrix.h>
#include <mach/at91sam9_smc.h>
#include "generic.h"
...
...
@@ -409,7 +410,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
* we assume SMC timings are configured by board code,
* except True IDE where timings are controlled by driver
*/
ebi0_csa
=
at91_
sys
_read
(
AT91_MATRIX_EBI0CSA
);
ebi0_csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBI0CSA
);
switch
(
data
->
chipselect
)
{
case
4
:
at91_set_A_periph
(
AT91_PIN_PD6
,
0
);
/* EBI0_NCS4/CFCS0 */
...
...
@@ -428,7 +429,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
data
->
chipselect
);
return
;
}
at91_
sys
_write
(
AT91_MATRIX_EBI0CSA
,
ebi0_csa
);
at91_
matrix
_write
(
AT91_MATRIX_EBI0CSA
,
ebi0_csa
);
if
(
gpio_is_valid
(
data
->
det_pin
))
{
at91_set_gpio_input
(
data
->
det_pin
,
1
);
...
...
@@ -496,8 +497,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
if
(
!
data
)
return
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBI0CSA
);
at91_
sys
_write
(
AT91_MATRIX_EBI0CSA
,
csa
|
AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBI0CSA
);
at91_
matrix
_write
(
AT91_MATRIX_EBI0CSA
,
csa
|
AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA
);
/* enable pin */
if
(
gpio_is_valid
(
data
->
enable_pin
))
...
...
@@ -891,7 +892,8 @@ static struct platform_device at91sam9263_isi_device = {
.
num_resources
=
ARRAY_SIZE
(
isi_resources
),
};
void
__init
at91_add_device_isi
(
void
)
void
__init
at91_add_device_isi
(
struct
isi_platform_data
*
data
,
bool
use_pck_as_mck
)
{
at91_set_A_periph
(
AT91_PIN_PE0
,
0
);
/* ISI_D0 */
at91_set_A_periph
(
AT91_PIN_PE1
,
0
);
/* ISI_D1 */
...
...
@@ -904,14 +906,20 @@ void __init at91_add_device_isi(void)
at91_set_A_periph
(
AT91_PIN_PE8
,
0
);
/* ISI_PCK */
at91_set_A_periph
(
AT91_PIN_PE9
,
0
);
/* ISI_HSYNC */
at91_set_A_periph
(
AT91_PIN_PE10
,
0
);
/* ISI_VSYNC */
at91_set_B_periph
(
AT91_PIN_PE11
,
0
);
/* ISI_MCK (PCK3) */
at91_set_B_periph
(
AT91_PIN_PE12
,
0
);
/* ISI_PD8 */
at91_set_B_periph
(
AT91_PIN_PE13
,
0
);
/* ISI_PD9 */
at91_set_B_periph
(
AT91_PIN_PE14
,
0
);
/* ISI_PD10 */
at91_set_B_periph
(
AT91_PIN_PE15
,
0
);
/* ISI_PD11 */
if
(
use_pck_as_mck
)
{
at91_set_B_periph
(
AT91_PIN_PE11
,
0
);
/* ISI_MCK (PCK3) */
/* TODO: register the PCK for ISI_MCK and set its parent */
}
}
#else
void
__init
at91_add_device_isi
(
void
)
{}
void
__init
at91_add_device_isi
(
struct
isi_platform_data
*
data
,
bool
use_pck_as_mck
)
{}
#endif
...
...
@@ -959,6 +967,8 @@ static struct resource rtt0_resources[] = {
.
start
=
AT91SAM9263_BASE_RTT0
,
.
end
=
AT91SAM9263_BASE_RTT0
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
flags
=
IORESOURCE_MEM
,
}
};
...
...
@@ -966,7 +976,6 @@ static struct platform_device at91sam9263_rtt0_device = {
.
name
=
"at91_rtt"
,
.
id
=
0
,
.
resource
=
rtt0_resources
,
.
num_resources
=
ARRAY_SIZE
(
rtt0_resources
),
};
static
struct
resource
rtt1_resources
[]
=
{
...
...
@@ -974,6 +983,8 @@ static struct resource rtt1_resources[] = {
.
start
=
AT91SAM9263_BASE_RTT1
,
.
end
=
AT91SAM9263_BASE_RTT1
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
flags
=
IORESOURCE_MEM
,
}
};
...
...
@@ -981,11 +992,53 @@ static struct platform_device at91sam9263_rtt1_device = {
.
name
=
"at91_rtt"
,
.
id
=
1
,
.
resource
=
rtt1_resources
,
.
num_resources
=
ARRAY_SIZE
(
rtt1_resources
),
};
#if IS_ENABLED(CONFIG_RTC_DRV_AT91SAM9)
static
void
__init
at91_add_device_rtt_rtc
(
void
)
{
struct
platform_device
*
pdev
;
struct
resource
*
r
;
switch
(
CONFIG_RTC_DRV_AT91SAM9_RTT
)
{
case
0
:
/*
* The second resource is needed only for the chosen RTT:
* GPBR will serve as the storage for RTC time offset
*/
at91sam9263_rtt0_device
.
num_resources
=
2
;
at91sam9263_rtt1_device
.
num_resources
=
1
;
pdev
=
&
at91sam9263_rtt0_device
;
r
=
rtt0_resources
;
break
;
case
1
:
at91sam9263_rtt0_device
.
num_resources
=
1
;
at91sam9263_rtt1_device
.
num_resources
=
2
;
pdev
=
&
at91sam9263_rtt1_device
;
r
=
rtt1_resources
;
break
;
default:
pr_err
(
"at91sam9263: only supports 2 RTT (%d)
\n
"
,
CONFIG_RTC_DRV_AT91SAM9_RTT
);
return
;
}
pdev
->
name
=
"rtc-at91sam9"
;
r
[
1
].
start
=
AT91SAM9263_BASE_GPBR
+
4
*
CONFIG_RTC_DRV_AT91SAM9_GPBR
;
r
[
1
].
end
=
r
[
1
].
start
+
3
;
}
#else
static
void
__init
at91_add_device_rtt_rtc
(
void
)
{
/* Only one resource is needed: RTT not used as RTC */
at91sam9263_rtt0_device
.
num_resources
=
1
;
at91sam9263_rtt1_device
.
num_resources
=
1
;
}
#endif
static
void
__init
at91_add_device_rtt
(
void
)
{
at91_add_device_rtt_rtc
();
platform_device_register
(
&
at91sam9263_rtt0_device
);
platform_device_register
(
&
at91sam9263_rtt1_device
);
}
...
...
@@ -1371,7 +1424,6 @@ static inline void configure_usart2_pins(unsigned pins)
}
static
struct
platform_device
*
__initdata
at91_uarts
[
ATMEL_MAX_UART
];
/* the UARTs to use */
struct
platform_device
*
atmel_default_console_device
;
/* the serial console device */
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{
...
...
arch/arm/mach-at91/at91sam9_alt_reset.S
View file @
d50673ed
...
...
@@ -15,16 +15,17 @@
#include <linux/linkage.h>
#include <mach/hardware.h>
#include <mach/at91
sam9_sd
ramc.h>
#include <mach/at91
_
ramc.h>
#include <mach/at91_rstc.h>
.
arm
.
globl
at91sam9_alt_restart
at91sam9_alt_restart
:
ldr
r0
,
.
at91_va_base_sdramc
@
preload
constants
ldr
r1
,
=
at91_rstc_base
ldr
r1
,
[
r1
]
at91sam9_alt_restart
:
ldr
r0
,
=
at91_ramc_base
@
preload
constants
ldr
r0
,
[
r0
]
ldr
r4
,
=
at91_rstc_base
ldr
r1
,
[
r4
]
mov
r2
,
#
1
mov
r3
,
#
AT91_SDRAMC_LPCB_POWER_DOWN
...
...
@@ -37,6 +38,3 @@ at91sam9_alt_restart: ldr r0, .at91_va_base_sdramc @ preload constants
str
r4
,
[
r1
,
#
AT91_RSTC_CR
]
@
reset
processor
b
.
.
at91_va_base_sdramc
:
.
word
AT91_VA_BASE_SYS
+
AT91_SDRAMC0
arch/arm/mach-at91/at91sam9g45.c
View file @
d50673ed
...
...
@@ -317,12 +317,6 @@ static struct at91_gpio_bank at91sam9g45_gpio[] __initdata = {
}
};
static
void
at91sam9g45_idle
(
void
)
{
at91_sys_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
cpu_do_idle
();
}
/* --------------------------------------------------------------------
* AT91SAM9G45 processor initialization
* -------------------------------------------------------------------- */
...
...
@@ -337,13 +331,16 @@ static void __init at91sam9g45_ioremap_registers(void)
{
at91_ioremap_shdwc
(
AT91SAM9G45_BASE_SHDWC
);
at91_ioremap_rstc
(
AT91SAM9G45_BASE_RSTC
);
at91_ioremap_ramc
(
0
,
AT91SAM9G45_BASE_DDRSDRC1
,
512
);
at91_ioremap_ramc
(
1
,
AT91SAM9G45_BASE_DDRSDRC0
,
512
);
at91sam926x_ioremap_pit
(
AT91SAM9G45_BASE_PIT
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9G45_BASE_SMC
);
at91_ioremap_matrix
(
AT91SAM9G45_BASE_MATRIX
);
}
static
void
__init
at91sam9g45_initialize
(
void
)
{
arm_pm_idle
=
at91sam9
g45
_idle
;
arm_pm_idle
=
at91sam9_idle
;
arm_pm_restart
=
at91sam9g45_restart
;
at91_extern_irq
=
(
1
<<
AT91SAM9G45_ID_IRQ0
);
...
...
arch/arm/mach-at91/at91sam9g45_devices.c
View file @
d50673ed
...
...
@@ -14,6 +14,7 @@
#include <linux/dma-mapping.h>
#include <linux/gpio.h>
#include <linux/clk.h>
#include <linux/platform_device.h>
#include <linux/i2c-gpio.h>
#include <linux/atmel-mci.h>
...
...
@@ -24,11 +25,15 @@
#include <mach/board.h>
#include <mach/at91sam9g45.h>
#include <mach/at91sam9g45_matrix.h>
#include <mach/at91_matrix.h>
#include <mach/at91sam9_smc.h>
#include <mach/at_hdmac.h>
#include <mach/atmel-mci.h>
#include <media/atmel-isi.h>
#include "generic.h"
#include "clock.h"
/* --------------------------------------------------------------------
...
...
@@ -38,10 +43,6 @@
#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
static
u64
hdmac_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
at_dma_platform_data
atdma_pdata
=
{
.
nr_channels
=
8
,
};
static
struct
resource
hdmac_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91SAM9G45_BASE_DMA
,
...
...
@@ -56,12 +57,11 @@ static struct resource hdmac_resources[] = {
};
static
struct
platform_device
at_hdmac_device
=
{
.
name
=
"at
_hdmac
"
,
.
name
=
"at
91sam9g45_dma
"
,
.
id
=
-
1
,
.
dev
=
{
.
dma_mask
=
&
hdmac_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
atdma_pdata
,
},
.
resource
=
hdmac_resources
,
.
num_resources
=
ARRAY_SIZE
(
hdmac_resources
),
...
...
@@ -69,9 +69,15 @@ static struct platform_device at_hdmac_device = {
void
__init
at91_add_device_hdmac
(
void
)
{
dma_cap_set
(
DMA_MEMCPY
,
atdma_pdata
.
cap_mask
);
dma_cap_set
(
DMA_SLAVE
,
atdma_pdata
.
cap_mask
);
platform_device_register
(
&
at_hdmac_device
);
#if defined(CONFIG_OF)
struct
device_node
*
of_node
=
of_find_node_by_name
(
NULL
,
"dma-controller"
);
if
(
of_node
)
of_node_put
(
of_node
);
else
#endif
platform_device_register
(
&
at_hdmac_device
);
}
#else
void
__init
at91_add_device_hdmac
(
void
)
{}
...
...
@@ -552,8 +558,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
if
(
!
data
)
return
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBICSA
);
at91_
sys
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBICSA
);
at91_
matrix
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA
);
/* enable pin */
if
(
gpio_is_valid
(
data
->
enable_pin
))
...
...
@@ -869,6 +875,96 @@ void __init at91_add_device_ac97(struct ac97c_platform_data *data)
void
__init
at91_add_device_ac97
(
struct
ac97c_platform_data
*
data
)
{}
#endif
/* --------------------------------------------------------------------
* Image Sensor Interface
* -------------------------------------------------------------------- */
#if defined(CONFIG_VIDEO_ATMEL_ISI) || defined(CONFIG_VIDEO_ATMEL_ISI_MODULE)
static
u64
isi_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
isi_platform_data
isi_data
;
struct
resource
isi_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91SAM9G45_BASE_ISI
,
.
end
=
AT91SAM9G45_BASE_ISI
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91SAM9G45_ID_ISI
,
.
end
=
AT91SAM9G45_ID_ISI
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91sam9g45_isi_device
=
{
.
name
=
"atmel_isi"
,
.
id
=
0
,
.
dev
=
{
.
dma_mask
=
&
isi_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
isi_data
,
},
.
resource
=
isi_resources
,
.
num_resources
=
ARRAY_SIZE
(
isi_resources
),
};
static
struct
clk_lookup
isi_mck_lookups
[]
=
{
CLKDEV_CON_DEV_ID
(
"isi_mck"
,
"atmel_isi.0"
,
NULL
),
};
void
__init
at91_add_device_isi
(
struct
isi_platform_data
*
data
,
bool
use_pck_as_mck
)
{
struct
clk
*
pck
;
struct
clk
*
parent
;
if
(
!
data
)
return
;
isi_data
=
*
data
;
at91_set_A_periph
(
AT91_PIN_PB20
,
0
);
/* ISI_D0 */
at91_set_A_periph
(
AT91_PIN_PB21
,
0
);
/* ISI_D1 */
at91_set_A_periph
(
AT91_PIN_PB22
,
0
);
/* ISI_D2 */
at91_set_A_periph
(
AT91_PIN_PB23
,
0
);
/* ISI_D3 */
at91_set_A_periph
(
AT91_PIN_PB24
,
0
);
/* ISI_D4 */
at91_set_A_periph
(
AT91_PIN_PB25
,
0
);
/* ISI_D5 */
at91_set_A_periph
(
AT91_PIN_PB26
,
0
);
/* ISI_D6 */
at91_set_A_periph
(
AT91_PIN_PB27
,
0
);
/* ISI_D7 */
at91_set_A_periph
(
AT91_PIN_PB28
,
0
);
/* ISI_PCK */
at91_set_A_periph
(
AT91_PIN_PB30
,
0
);
/* ISI_HSYNC */
at91_set_A_periph
(
AT91_PIN_PB29
,
0
);
/* ISI_VSYNC */
at91_set_B_periph
(
AT91_PIN_PB8
,
0
);
/* ISI_PD8 */
at91_set_B_periph
(
AT91_PIN_PB9
,
0
);
/* ISI_PD9 */
at91_set_B_periph
(
AT91_PIN_PB10
,
0
);
/* ISI_PD10 */
at91_set_B_periph
(
AT91_PIN_PB11
,
0
);
/* ISI_PD11 */
platform_device_register
(
&
at91sam9g45_isi_device
);
if
(
use_pck_as_mck
)
{
at91_set_B_periph
(
AT91_PIN_PB31
,
0
);
/* ISI_MCK (PCK1) */
pck
=
clk_get
(
NULL
,
"pck1"
);
parent
=
clk_get
(
NULL
,
"plla"
);
BUG_ON
(
IS_ERR
(
pck
)
||
IS_ERR
(
parent
));
if
(
clk_set_parent
(
pck
,
parent
))
{
pr_err
(
"Failed to set PCK's parent
\n
"
);
}
else
{
/* Register PCK as ISI_MCK */
isi_mck_lookups
[
0
].
clk
=
pck
;
clkdev_add_table
(
isi_mck_lookups
,
ARRAY_SIZE
(
isi_mck_lookups
));
}
clk_put
(
pck
);
clk_put
(
parent
);
}
}
#else
void
__init
at91_add_device_isi
(
struct
isi_platform_data
*
data
,
bool
use_pck_as_mck
)
{}
#endif
/* --------------------------------------------------------------------
* LCD Controller
...
...
@@ -1098,6 +1194,8 @@ static struct resource rtt_resources[] = {
.
start
=
AT91SAM9G45_BASE_RTT
,
.
end
=
AT91SAM9G45_BASE_RTT
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
flags
=
IORESOURCE_MEM
,
}
};
...
...
@@ -1105,11 +1203,32 @@ static struct platform_device at91sam9g45_rtt_device = {
.
name
=
"at91_rtt"
,
.
id
=
0
,
.
resource
=
rtt_resources
,
.
num_resources
=
ARRAY_SIZE
(
rtt_resources
),
};
#if IS_ENABLED(CONFIG_RTC_DRV_AT91SAM9)
static
void
__init
at91_add_device_rtt_rtc
(
void
)
{
at91sam9g45_rtt_device
.
name
=
"rtc-at91sam9"
;
/*
* The second resource is needed:
* GPBR will serve as the storage for RTC time offset
*/
at91sam9g45_rtt_device
.
num_resources
=
2
;
rtt_resources
[
1
].
start
=
AT91SAM9G45_BASE_GPBR
+
4
*
CONFIG_RTC_DRV_AT91SAM9_GPBR
;
rtt_resources
[
1
].
end
=
rtt_resources
[
1
].
start
+
3
;
}
#else
static
void
__init
at91_add_device_rtt_rtc
(
void
)
{
/* Only one resource is needed: RTT not used as RTC */
at91sam9g45_rtt_device
.
num_resources
=
1
;
}
#endif
static
void
__init
at91_add_device_rtt
(
void
)
{
at91_add_device_rtt_rtc
();
platform_device_register
(
&
at91sam9g45_rtt_device
);
}
...
...
@@ -1564,7 +1683,6 @@ static inline void configure_usart3_pins(unsigned pins)
}
static
struct
platform_device
*
__initdata
at91_uarts
[
ATMEL_MAX_UART
];
/* the UARTs to use */
struct
platform_device
*
atmel_default_console_device
;
/* the serial console device */
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{
...
...
arch/arm/mach-at91/at91sam9g45_reset.S
View file @
d50673ed
...
...
@@ -12,7 +12,7 @@
#include <linux/linkage.h>
#include <mach/hardware.h>
#include <mach/at91
sam9_ddrsdr
.h>
#include <mach/at91
_ramc
.h>
#include <mach/at91_rstc.h>
.
arm
...
...
@@ -20,9 +20,10 @@
.
globl
at91sam9g45_restart
at91sam9g45_restart
:
ldr
r0
,
.
at91_va_base_sdramc0
@
preload
constants
ldr
r1
,
=
at91_rstc_base
ldr
r1
,
[
r1
]
ldr
r5
,
=
at91_ramc_base
@
preload
constants
ldr
r0
,
[
r5
]
ldr
r4
,
=
at91_rstc_base
ldr
r1
,
[
r4
]
mov
r2
,
#
1
mov
r3
,
#
AT91_DDRSDRC_LPCB_POWER_DOWN
...
...
@@ -35,6 +36,3 @@ at91sam9g45_restart:
str
r4
,
[
r1
,
#
AT91_RSTC_CR
]
@
reset
processor
b
.
.
at91_va_base_sdramc0
:
.
word
AT91_VA_BASE_SYS
+
AT91_DDRSDRC0
arch/arm/mach-at91/at91sam9rl.c
View file @
d50673ed
...
...
@@ -288,19 +288,15 @@ static void __init at91sam9rl_ioremap_registers(void)
{
at91_ioremap_shdwc
(
AT91SAM9RL_BASE_SHDWC
);
at91_ioremap_rstc
(
AT91SAM9RL_BASE_RSTC
);
at91_ioremap_ramc
(
0
,
AT91SAM9RL_BASE_SDRAMC
,
512
);
at91sam926x_ioremap_pit
(
AT91SAM9RL_BASE_PIT
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9RL_BASE_SMC
);
}
static
void
at91sam9rl_idle
(
void
)
{
at91_sys_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
cpu_do_idle
();
at91_ioremap_matrix
(
AT91SAM9RL_BASE_MATRIX
);
}
static
void
__init
at91sam9rl_initialize
(
void
)
{
arm_pm_idle
=
at91sam9
rl
_idle
;
arm_pm_idle
=
at91sam9_idle
;
arm_pm_restart
=
at91sam9_alt_restart
;
at91_extern_irq
=
(
1
<<
AT91SAM9RL_ID_IRQ0
);
...
...
arch/arm/mach-at91/at91sam9rl_devices.c
View file @
d50673ed
...
...
@@ -20,6 +20,7 @@
#include <mach/board.h>
#include <mach/at91sam9rl.h>
#include <mach/at91sam9rl_matrix.h>
#include <mach/at91_matrix.h>
#include <mach/at91sam9_smc.h>
#include <mach/at_hdmac.h>
...
...
@@ -33,10 +34,6 @@
#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
static
u64
hdmac_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
at_dma_platform_data
atdma_pdata
=
{
.
nr_channels
=
2
,
};
static
struct
resource
hdmac_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91SAM9RL_BASE_DMA
,
...
...
@@ -51,12 +48,11 @@ static struct resource hdmac_resources[] = {
};
static
struct
platform_device
at_hdmac_device
=
{
.
name
=
"at
_hdmac
"
,
.
name
=
"at
91sam9rl_dma
"
,
.
id
=
-
1
,
.
dev
=
{
.
dma_mask
=
&
hdmac_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
atdma_pdata
,
},
.
resource
=
hdmac_resources
,
.
num_resources
=
ARRAY_SIZE
(
hdmac_resources
),
...
...
@@ -64,7 +60,6 @@ static struct platform_device at_hdmac_device = {
void
__init
at91_add_device_hdmac
(
void
)
{
dma_cap_set
(
DMA_MEMCPY
,
atdma_pdata
.
cap_mask
);
platform_device_register
(
&
at_hdmac_device
);
}
#else
...
...
@@ -271,8 +266,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
if
(
!
data
)
return
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBICSA
);
at91_
sys
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_CS3A_SMC_SMARTMEDIA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBICSA
);
at91_
matrix
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_CS3A_SMC_SMARTMEDIA
);
/* enable pin */
if
(
gpio_is_valid
(
data
->
enable_pin
))
...
...
@@ -688,6 +683,8 @@ static struct resource rtt_resources[] = {
.
start
=
AT91SAM9RL_BASE_RTT
,
.
end
=
AT91SAM9RL_BASE_RTT
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
flags
=
IORESOURCE_MEM
,
}
};
...
...
@@ -695,11 +692,32 @@ static struct platform_device at91sam9rl_rtt_device = {
.
name
=
"at91_rtt"
,
.
id
=
0
,
.
resource
=
rtt_resources
,
.
num_resources
=
ARRAY_SIZE
(
rtt_resources
),
};
#if IS_ENABLED(CONFIG_RTC_DRV_AT91SAM9)
static
void
__init
at91_add_device_rtt_rtc
(
void
)
{
at91sam9rl_rtt_device
.
name
=
"rtc-at91sam9"
;
/*
* The second resource is needed:
* GPBR will serve as the storage for RTC time offset
*/
at91sam9rl_rtt_device
.
num_resources
=
2
;
rtt_resources
[
1
].
start
=
AT91SAM9RL_BASE_GPBR
+
4
*
CONFIG_RTC_DRV_AT91SAM9_GPBR
;
rtt_resources
[
1
].
end
=
rtt_resources
[
1
].
start
+
3
;
}
#else
static
void
__init
at91_add_device_rtt_rtc
(
void
)
{
/* Only one resource is needed: RTT not used as RTC */
at91sam9rl_rtt_device
.
num_resources
=
1
;
}
#endif
static
void
__init
at91_add_device_rtt
(
void
)
{
at91_add_device_rtt_rtc
();
platform_device_register
(
&
at91sam9rl_rtt_device
);
}
...
...
@@ -1134,7 +1152,6 @@ static inline void configure_usart3_pins(unsigned pins)
}
static
struct
platform_device
*
__initdata
at91_uarts
[
ATMEL_MAX_UART
];
/* the UARTs to use */
struct
platform_device
*
atmel_default_console_device
;
/* the serial console device */
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{
...
...
arch/arm/mach-at91/at91
cap9
.c
→
arch/arm/mach-at91/at91
sam9x5
.c
View file @
d50673ed
/*
*
arch/arm/mach-at91/at91cap9.c
*
Chip-specific setup code for the AT91SAM9x5 family
*
* Copyright (C) 2007 Stelian Pop <stelian.pop@leadtechdesign.com>
* Copyright (C) 2007 Lead Tech Design <www.leadtechdesign.com>
* Copyright (C) 2007 Atmel Corporation.
*
* 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.
* Copyright (C) 2010-2012 Atmel Corporation.
*
* Licensed under GPLv2 or later.
*/
#include <linux/module.h>
#include <linux/dma-mapping.h>
#include <asm/proc-fns.h>
#include <asm/irq.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <mach/cpu.h>
#include <mach/at91cap9.h>
#include <mach/at91sam9x5.h>
#include <mach/at91_pmc.h>
#include <mach/cpu.h>
#include <mach/board.h>
#include "soc.h"
#include "generic.h"
...
...
@@ -35,208 +29,211 @@
/*
* The peripheral clocks.
*/
static
struct
clk
pioABCD_clk
=
{
.
name
=
"pioABCD_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_PIOABCD
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
mpb0_clk
=
{
.
name
=
"mpb0_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_MPB0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
mpb1_clk
=
{
.
name
=
"mpb1_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_MPB1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
mpb2_clk
=
{
.
name
=
"mpb2_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_MPB2
,
static
struct
clk
pioAB_clk
=
{
.
name
=
"pioAB_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_PIOAB
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
mpb3
_clk
=
{
.
name
=
"
mpb3
_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_MPB3
,
static
struct
clk
pioCD
_clk
=
{
.
name
=
"
pioCD
_clk"
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_PIOCD
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
mpb4
_clk
=
{
.
name
=
"
mpb4
_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_MPB4
,
static
struct
clk
smd
_clk
=
{
.
name
=
"
smd
_clk"
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_SMD
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
usart0_clk
=
{
.
name
=
"usart0_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_US
0
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_USART
0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
usart1_clk
=
{
.
name
=
"usart1_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_US
1
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_USART
1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
usart2_clk
=
{
.
name
=
"usart2_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_US
2
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_USART
2
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
mmc0_clk
=
{
.
name
=
"mci0_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_MCI0
,
/* 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
mmc1
_clk
=
{
.
name
=
"
mci1
_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_MCI1
,
static
struct
clk
twi0
_clk
=
{
.
name
=
"
twi0
_clk"
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_TWI0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
can
_clk
=
{
.
name
=
"
can
_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_CAN
,
static
struct
clk
twi1
_clk
=
{
.
name
=
"
twi1
_clk"
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_TWI1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
twi_clk
=
{
.
name
=
"twi_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_TWI
,
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
<<
AT91
CAP9
_ID_SPI0
,
.
pmc_mask
=
1
<<
AT91
SAM9X5
_ID_SPI0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
spi1_clk
=
{
.
name
=
"spi1_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9
_ID_SPI1
,
.
pmc_mask
=
1
<<
AT91
SAM9X5
_ID_SPI1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
ssc
0_clk
=
{
.
name
=
"
ssc
0_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_SSC
0
,
static
struct
clk
uart
0_clk
=
{
.
name
=
"
uart
0_clk"
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_UART
0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
ssc
1_clk
=
{
.
name
=
"
ssc
1_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_SSC
1
,
static
struct
clk
uart
1_clk
=
{
.
name
=
"
uart
1_clk"
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_UART
1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
ac97_clk
=
{
.
name
=
"ac97_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_AC97C
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
tcb_clk
=
{
.
name
=
"tcb_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_TCB
,
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
<<
AT91
CAP9_ID_PWMC
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_PWM
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
macb_clk
=
{
.
name
=
"pclk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_EMAC
,
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
aestde
s_clk
=
{
.
name
=
"
aestde
s_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_AESTDE
S
,
static
struct
clk
uhph
s_clk
=
{
.
name
=
"
uhph
s_clk"
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_UHPH
S
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
adc
_clk
=
{
.
name
=
"
adc
_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_ADC
,
static
struct
clk
udphs
_clk
=
{
.
name
=
"
udphs
_clk"
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_UDPHS
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
isi_clk
=
{
.
name
=
"isi_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_ISI
,
/* 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
<<
AT91
CAP9
_ID_LCDC
,
.
pmc_mask
=
1
<<
AT91
SAM9X5
_ID_LCDC
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
dma_clk
=
{
.
name
=
"dma_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_DMA
,
/* 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
udphs_clk
=
{
.
name
=
"udphs_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_UDPHS
,
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
,
};
static
struct
clk
ohci_clk
=
{
.
name
=
"ohci_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_UHP
,
/* 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
=
{
&
pioABCD_clk
,
&
mpb0_clk
,
&
mpb1_clk
,
&
mpb2_clk
,
&
mpb3_clk
,
&
mpb4_clk
,
&
pioAB_clk
,
&
pioCD_clk
,
&
smd_clk
,
&
usart0_clk
,
&
usart1_clk
,
&
usart2_clk
,
&
twi0_clk
,
&
twi1_clk
,
&
twi2_clk
,
&
mmc0_clk
,
&
mmc1_clk
,
&
can_clk
,
&
twi_clk
,
&
spi0_clk
,
&
spi1_clk
,
&
ssc0_clk
,
&
ssc1_clk
,
&
ac97_clk
,
&
tcb_clk
,
&
uart0_clk
,
&
uart1_clk
,
&
tcb0_clk
,
&
pwm_clk
,
&
macb_clk
,
&
aestdes_clk
,
&
adc_clk
,
&
isi
_clk
,
&
lcdc
_clk
,
&
dma
_clk
,
&
dma0
_clk
,
&
dma1
_clk
,
&
uhphs
_clk
,
&
udphs_clk
,
&
ohci_clk
,
// irq0 .. irq1
&
mmc1_clk
,
&
ssc_clk
,
// irq0
};
static
struct
clk_lookup
periph_clocks_lookups
[]
=
{
/* One additional fake clock for macb_hclk */
CLKDEV_CON_ID
(
"hclk"
,
&
macb_clk
),
CLKDEV_CON_DEV_ID
(
"hclk"
,
"atmel_usba_udc"
,
&
utmi_clk
),
CLKDEV_CON_DEV_ID
(
"pclk"
,
"atmel_usba_udc"
,
&
udphs_clk
),
CLKDEV_CON_DEV_ID
(
"mci_clk"
,
"at91_mci.0"
,
&
mmc0_clk
),
CLKDEV_CON_DEV_ID
(
"mci_clk"
,
"at91_mci.1"
,
&
mmc1_clk
),
CLKDEV_CON_DEV_ID
(
"spi_clk"
,
"atmel_spi.0"
,
&
spi0_clk
),
CLKDEV_CON_DEV_ID
(
"spi_clk"
,
"atmel_spi.1"
,
&
spi1_clk
),
CLKDEV_CON_DEV_ID
(
"t0_clk"
,
"atmel_tcb.0"
,
&
tcb_clk
),
CLKDEV_CON_DEV_ID
(
"pclk"
,
"ssc.0"
,
&
ssc0_clk
),
CLKDEV_CON_DEV_ID
(
"pclk"
,
"ssc.1"
,
&
ssc1_clk
),
/* fake hclk clock */
CLKDEV_CON_DEV_ID
(
"hclk"
,
"at91_ohci"
,
&
ohci_clk
),
CLKDEV_CON_ID
(
"pioA"
,
&
pioABCD_clk
),
CLKDEV_CON_ID
(
"pioB"
,
&
pioABCD_clk
),
CLKDEV_CON_ID
(
"pioC"
,
&
pioABCD_clk
),
CLKDEV_CON_ID
(
"pioD"
,
&
pioABCD_clk
),
};
static
struct
clk_lookup
usart_clocks_lookups
[]
=
{
CLKDEV_CON_DEV_ID
(
"usart"
,
"atmel_usart.0"
,
&
mck
),
CLKDEV_CON_DEV_ID
(
"usart"
,
"atmel_usart.1"
,
&
usart0_clk
),
CLKDEV_CON_DEV_ID
(
"usart"
,
"atmel_usart.2"
,
&
usart1_clk
),
CLKDEV_CON_DEV_ID
(
"usart"
,
"atmel_usart.3"
,
&
usart2_clk
),
/* 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
four
programmable clocks.
* The
two
programmable clocks.
* You must configure pin multiplexing to bring these signals out.
*/
static
struct
clk
pck0
=
{
...
...
@@ -251,20 +248,8 @@ static struct clk pck1 = {
.
type
=
CLK_TYPE_PROGRAMMABLE
,
.
id
=
1
,
};
static
struct
clk
pck2
=
{
.
name
=
"pck2"
,
.
pmc_mask
=
AT91_PMC_PCK2
,
.
type
=
CLK_TYPE_PROGRAMMABLE
,
.
id
=
2
,
};
static
struct
clk
pck3
=
{
.
name
=
"pck3"
,
.
pmc_mask
=
AT91_PMC_PCK3
,
.
type
=
CLK_TYPE_PROGRAMMABLE
,
.
id
=
3
,
};
static
void
__init
at91
cap9
_register_clocks
(
void
)
static
void
__init
at91
sam9x5
_register_clocks
(
void
)
{
int
i
;
...
...
@@ -273,132 +258,113 @@ static void __init at91cap9_register_clocks(void)
clkdev_add_table
(
periph_clocks_lookups
,
ARRAY_SIZE
(
periph_clocks_lookups
));
clkdev_add_table
(
usart_clocks_lookups
,
ARRAY_SIZE
(
usart_clocks_lookups
));
clk_register
(
&
pck0
);
clk_register
(
&
pck1
);
clk_register
(
&
pck2
);
clk_register
(
&
pck3
);
}
if
(
cpu_is_at91sam9g25
()
||
cpu_is_at91sam9x25
())
clk_register
(
&
usart3_clk
);
static
struct
clk_lookup
console_clock_lookup
;
if
(
cpu_is_at91sam9g25
()
||
cpu_is_at91sam9x25
()
||
cpu_is_at91sam9g35
()
||
cpu_is_at91sam9x35
())
clk_register
(
&
macb0_clk
);
void
__init
at91cap9_set_console_clock
(
int
id
)
{
if
(
id
>=
ARRAY_SIZE
(
usart_clocks_lookups
))
return
;
if
(
cpu_is_at91sam9g15
(
)
||
cpu_is_at91sam9g35
()
||
cpu_is_at91sam9x35
(
))
clk_register
(
&
lcdc_clk
)
;
console_clock_lookup
.
con_id
=
"usart"
;
console_clock_lookup
.
clk
=
usart_clocks_lookups
[
id
].
clk
;
clkdev_add
(
&
console_clock_lookup
);
}
if
(
cpu_is_at91sam9g25
())
clk_register
(
&
isi_clk
);
/* --------------------------------------------------------------------
* GPIO
* -------------------------------------------------------------------- */
if
(
cpu_is_at91sam9x25
())
clk_register
(
&
macb1_clk
);
static
struct
at91_gpio_bank
at91cap9_gpio
[]
__initdata
=
{
{
.
id
=
AT91CAP9_ID_PIOABCD
,
.
regbase
=
AT91CAP9_BASE_PIOA
,
},
{
.
id
=
AT91CAP9_ID_PIOABCD
,
.
regbase
=
AT91CAP9_BASE_PIOB
,
},
{
.
id
=
AT91CAP9_ID_PIOABCD
,
.
regbase
=
AT91CAP9_BASE_PIOC
,
},
{
.
id
=
AT91CAP9_ID_PIOABCD
,
.
regbase
=
AT91CAP9_BASE_PIOD
,
if
(
cpu_is_at91sam9x25
()
||
cpu_is_at91sam9x35
())
{
clk_register
(
&
can0_clk
);
clk_register
(
&
can1_clk
);
}
};
static
void
at91cap9_idle
(
void
)
{
at91_sys_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
cpu_do_idle
();
clk_register
(
&
pck0
);
clk_register
(
&
pck1
);
}
/* --------------------------------------------------------------------
* AT91
CAP9
processor initialization
* AT91
SAM9x5
processor initialization
* -------------------------------------------------------------------- */
static
void
__init
at91
cap9
_map_io
(
void
)
static
void
__init
at91
sam9x5
_map_io
(
void
)
{
at91_init_sram
(
0
,
AT91
CAP9_SRAM_BASE
,
AT91CAP9
_SRAM_SIZE
);
at91_init_sram
(
0
,
AT91
SAM9X5_SRAM_BASE
,
AT91SAM9X5
_SRAM_SIZE
);
}
static
void
__init
at91
cap9
_ioremap_registers
(
void
)
static
void
__init
at91
sam9x5
_ioremap_registers
(
void
)
{
at91_ioremap_shdwc
(
AT91CAP9_BASE_SHDWC
);
at91_ioremap_rstc
(
AT91CAP9_BASE_RSTC
);
at91sam926x_ioremap_pit
(
AT91CAP9_BASE_PIT
);
at91sam9_ioremap_smc
(
0
,
AT91CAP9_BASE_SMC
);
if
(
of_at91sam926x_pit_init
()
<
0
)
panic
(
"Impossible to find PIT
\n
"
);
at91_ioremap_ramc
(
0
,
AT91SAM9X5_BASE_DDRSDRC0
,
512
);
}
static
void
__init
at91cap9
_initialize
(
void
)
void
__init
at91sam9x5
_initialize
(
void
)
{
arm_pm_idle
=
at91cap9_idle
;
arm_pm_restart
=
at91sam9g45_restart
;
at91_extern_irq
=
(
1
<<
AT91CAP9_ID_IRQ0
)
|
(
1
<<
AT91CAP9_ID_IRQ1
);
/* Register GPIO subsystem */
at91_gpio_init
(
at91cap9_gpio
,
4
);
at91_extern_irq
=
(
1
<<
AT91SAM9X5_ID_IRQ0
);
/* Remember the silicon revision */
if
(
cpu_is_at91cap9_revB
())
system_rev
=
0xB
;
else
if
(
cpu_is_at91cap9_revC
())
system_rev
=
0xC
;
/* Register GPIO subsystem (using DT) */
at91_gpio_init
(
NULL
,
0
);
}
/* --------------------------------------------------------------------
*
Interrupt initialization
*
AT91SAM9x5 devices (temporary before modification of code)
* -------------------------------------------------------------------- */
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
at91
cap9
_default_irq_priority
[
NR_AIC_IRQS
]
__initdata
=
{
static
unsigned
int
at91
sam9x5
_default_irq_priority
[
NR_AIC_IRQS
]
__initdata
=
{
7
,
/* Advanced Interrupt Controller (FIQ) */
7
,
/* System Peripherals */
1
,
/* Parallel IO Controller A, B, C and D */
0
,
/* MP Block Peripheral 0 */
0
,
/* MP Block Peripheral 1 */
0
,
/* MP Block Peripheral 2 */
0
,
/* MP Block Peripheral 3 */
0
,
/* MP Block Peripheral 4 */
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 */
0
,
/* Multimedia Card Interface 1 */
3
,
/* CAN */
6
,
/* Two-Wire Interface */
5
,
/* Serial Peripheral Interface 0 */
5
,
/* Serial Peripheral Interface 1 */
4
,
/* Serial Synchronous Controller 0 */
4
,
/* Serial Synchronous Controller 1 */
5
,
/* AC97 Controller */
0
,
/* Timer Counter 0, 1 and 2 */
5
,
/* UART 0 */
5
,
/* UART 1 */
0
,
/* Timer Counter 0, 1, 2, 3, 4 and 5 */
0
,
/* Pulse Width Modulation Controller */
3
,
/* Ethernet */
0
,
/* Advanced Encryption Standard, Triple DES*/
0
,
/* Analog-to-Digital Converter */
0
,
/* Image Sensor Interface */
3
,
/* LCD Controller */
0
,
/* DMA Controller */
2
,
/* USB Device Port */
2
,
/* USB Host port */
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) */
0
,
/* Advanced Interrupt Controller (IRQ1) */
};
struct
at91_init_soc
__initdata
at91
cap9
_soc
=
{
.
map_io
=
at91
cap9
_map_io
,
.
default_irq_priority
=
at91
cap9
_default_irq_priority
,
.
ioremap_registers
=
at91
cap9
_ioremap_registers
,
.
register_clocks
=
at91
cap9
_register_clocks
,
.
init
=
at91
cap9
_initialize
,
struct
at91_init_soc
__initdata
at91
sam9x5
_soc
=
{
.
map_io
=
at91
sam9x5
_map_io
,
.
default_irq_priority
=
at91
sam9x5
_default_irq_priority
,
.
ioremap_registers
=
at91
sam9x5
_ioremap_registers
,
.
register_clocks
=
at91
sam9x5
_register_clocks
,
.
init
=
at91
sam9x5
_initialize
,
};
arch/arm/mach-at91/at91x40.c
View file @
d50673ed
...
...
@@ -44,7 +44,7 @@ static void at91x40_idle(void)
* Disable the processor clock. The processor will be automatically
* re-enabled by an interrupt or by a reset.
*/
at91_sys_write
(
AT91_PS_CR
,
AT91_PS_CR_CPU
);
__raw_writel
(
AT91_PS_CR_CPU
,
AT91_PS_CR
);
cpu_do_idle
();
}
...
...
arch/arm/mach-at91/at91x40_time.c
View file @
d50673ed
...
...
@@ -28,6 +28,12 @@
#include <asm/mach/time.h>
#include <mach/at91_tc.h>
#define at91_tc_read(field) \
__raw_readl(AT91_TC + field)
#define at91_tc_write(field, value) \
__raw_writel(value, AT91_TC + field);
/*
* 3 counter/timer units present.
*/
...
...
@@ -37,12 +43,12 @@
static
unsigned
long
at91x40_gettimeoffset
(
void
)
{
return
(
at91_
sys_read
(
AT91_TC
+
AT91_TC_CLK1BASE
+
AT91_TC_CV
)
*
1000000
/
(
AT91X40_MASTER_CLOCK
/
128
));
return
(
at91_
tc_read
(
AT91_TC_CLK1BASE
+
AT91_TC_CV
)
*
1000000
/
(
AT91X40_MASTER_CLOCK
/
128
));
}
static
irqreturn_t
at91x40_timer_interrupt
(
int
irq
,
void
*
dev_id
)
{
at91_
sys_read
(
AT91_TC
+
AT91_TC_CLK1BASE
+
AT91_TC_SR
);
at91_
tc_read
(
AT91_TC_CLK1BASE
+
AT91_TC_SR
);
timer_tick
();
return
IRQ_HANDLED
;
}
...
...
@@ -57,20 +63,20 @@ void __init at91x40_timer_init(void)
{
unsigned
int
v
;
at91_
sys_write
(
AT91_TC
+
AT91_TC_BCR
,
0
);
v
=
at91_
sys_read
(
AT91_TC
+
AT91_TC_BMR
);
at91_
tc_write
(
AT91_TC_BCR
,
0
);
v
=
at91_
tc_read
(
AT91_TC_BMR
);
v
=
(
v
&
~
AT91_TC_TC1XC1S
)
|
AT91_TC_TC1XC1S_NONE
;
at91_
sys_write
(
AT91_TC
+
AT91_TC_BMR
,
v
);
at91_
tc_write
(
AT91_TC_BMR
,
v
);
at91_
sys_write
(
AT91_TC
+
AT91_TC_CLK1BASE
+
AT91_TC_CCR
,
AT91_TC_CLKDIS
);
at91_
sys_write
(
AT91_TC
+
AT91_TC_CLK1BASE
+
AT91_TC_CMR
,
(
AT91_TC_TIMER_CLOCK4
|
AT91_TC_CPCTRG
));
at91_
sys_write
(
AT91_TC
+
AT91_TC_CLK1BASE
+
AT91_TC_IDR
,
0xffffffff
);
at91_
sys_write
(
AT91_TC
+
AT91_TC_CLK1BASE
+
AT91_TC_RC
,
(
AT91X40_MASTER_CLOCK
/
128
)
/
HZ
-
1
);
at91_
sys_write
(
AT91_TC
+
AT91_TC_CLK1BASE
+
AT91_TC_IER
,
(
1
<<
4
));
at91_
tc_write
(
AT91_TC_CLK1BASE
+
AT91_TC_CCR
,
AT91_TC_CLKDIS
);
at91_
tc_write
(
AT91_TC_CLK1BASE
+
AT91_TC_CMR
,
(
AT91_TC_TIMER_CLOCK4
|
AT91_TC_CPCTRG
));
at91_
tc_write
(
AT91_TC_CLK1BASE
+
AT91_TC_IDR
,
0xffffffff
);
at91_
tc_write
(
AT91_TC_CLK1BASE
+
AT91_TC_RC
,
(
AT91X40_MASTER_CLOCK
/
128
)
/
HZ
-
1
);
at91_
tc_write
(
AT91_TC_CLK1BASE
+
AT91_TC_IER
,
(
1
<<
4
));
setup_irq
(
AT91X40_ID_TC1
,
&
at91x40_timer_irq
);
at91_
sys_write
(
AT91_TC
+
AT91_TC_CLK1BASE
+
AT91_TC_CCR
,
(
AT91_TC_SWTRG
|
AT91_TC_CLKEN
));
at91_
tc_write
(
AT91_TC_CLK1BASE
+
AT91_TC_CCR
,
(
AT91_TC_SWTRG
|
AT91_TC_CLKEN
));
}
struct
sys_timer
at91x40_timer
=
{
...
...
arch/arm/mach-at91/board-cap9adk.c
deleted
100644 → 0
View file @
ab15e0e8
/*
* linux/arch/arm/mach-at91/board-cap9adk.c
*
* Copyright (C) 2007 Stelian Pop <stelian.pop@leadtechdesign.com>
* Copyright (C) 2007 Lead Tech Design <www.leadtechdesign.com>
* Copyright (C) 2005 SAN People
* Copyright (C) 2007 Atmel Corporation.
*
* 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 <linux/types.h>
#include <linux/gpio.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/spi/spi.h>
#include <linux/spi/ads7846.h>
#include <linux/fb.h>
#include <linux/mtd/physmap.h>
#include <video/atmel_lcdc.h>
#include <mach/hardware.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <mach/board.h>
#include <mach/at91cap9_matrix.h>
#include <mach/at91sam9_smc.h>
#include <mach/system_rev.h>
#include "sam9_smc.h"
#include "generic.h"
static
void
__init
cap9adk_init_early
(
void
)
{
/* Initialize processor: 12 MHz crystal */
at91_initialize
(
12000000
);
/* Setup the LEDs: USER1 and USER2 LED for cpu/timer... */
at91_init_leds
(
AT91_PIN_PA10
,
AT91_PIN_PA11
);
/* ... POWER LED always on */
at91_set_gpio_output
(
AT91_PIN_PC29
,
1
);
/* Setup the serial ports and console */
at91_register_uart
(
0
,
0
,
0
);
/* DBGU = ttyS0 */
at91_set_serial_console
(
0
);
}
/*
* USB Host port
*/
static
struct
at91_usbh_data
__initdata
cap9adk_usbh_data
=
{
.
ports
=
2
,
.
vbus_pin
=
{
-
EINVAL
,
-
EINVAL
},
.
overcurrent_pin
=
{
-
EINVAL
,
-
EINVAL
},
};
/*
* USB HS Device port
*/
static
struct
usba_platform_data
__initdata
cap9adk_usba_udc_data
=
{
.
vbus_pin
=
AT91_PIN_PB31
,
};
/*
* ADS7846 Touchscreen
*/
#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
static
int
ads7843_pendown_state
(
void
)
{
return
!
at91_get_gpio_value
(
AT91_PIN_PC4
);
/* Touchscreen PENIRQ */
}
static
struct
ads7846_platform_data
ads_info
=
{
.
model
=
7843
,
.
x_min
=
150
,
.
x_max
=
3830
,
.
y_min
=
190
,
.
y_max
=
3830
,
.
vref_delay_usecs
=
100
,
.
x_plate_ohms
=
450
,
.
y_plate_ohms
=
250
,
.
pressure_max
=
15000
,
.
debounce_max
=
1
,
.
debounce_rep
=
0
,
.
debounce_tol
=
(
~
0
),
.
get_pendown_state
=
ads7843_pendown_state
,
};
static
void
__init
cap9adk_add_device_ts
(
void
)
{
at91_set_gpio_input
(
AT91_PIN_PC4
,
1
);
/* Touchscreen PENIRQ */
at91_set_gpio_input
(
AT91_PIN_PC5
,
1
);
/* Touchscreen BUSY */
}
#else
static
void
__init
cap9adk_add_device_ts
(
void
)
{}
#endif
/*
* SPI devices.
*/
static
struct
spi_board_info
cap9adk_spi_devices
[]
=
{
#if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
{
/* DataFlash card */
.
modalias
=
"mtd_dataflash"
,
.
chip_select
=
0
,
.
max_speed_hz
=
15
*
1000
*
1000
,
.
bus_num
=
0
,
},
#endif
#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
{
.
modalias
=
"ads7846"
,
.
chip_select
=
3
,
/* can be 2 or 3, depending on J2 jumper */
.
max_speed_hz
=
125000
*
26
,
/* (max sample rate @ 3V) * (cmd + data + overhead) */
.
bus_num
=
0
,
.
platform_data
=
&
ads_info
,
.
irq
=
AT91_PIN_PC4
,
},
#endif
};
/*
* MCI (SD/MMC)
*/
static
struct
at91_mmc_data
__initdata
cap9adk_mmc_data
=
{
.
wire4
=
1
,
.
det_pin
=
-
EINVAL
,
.
wp_pin
=
-
EINVAL
,
.
vcc_pin
=
-
EINVAL
,
};
/*
* MACB Ethernet device
*/
static
struct
macb_platform_data
__initdata
cap9adk_macb_data
=
{
.
phy_irq_pin
=
-
EINVAL
,
.
is_rmii
=
1
,
};
/*
* NAND flash
*/
static
struct
mtd_partition
__initdata
cap9adk_nand_partitions
[]
=
{
{
.
name
=
"NAND partition"
,
.
offset
=
0
,
.
size
=
MTDPART_SIZ_FULL
,
},
};
static
struct
atmel_nand_data
__initdata
cap9adk_nand_data
=
{
.
ale
=
21
,
.
cle
=
22
,
.
det_pin
=
-
EINVAL
,
.
rdy_pin
=
-
EINVAL
,
.
enable_pin
=
AT91_PIN_PD15
,
.
parts
=
cap9adk_nand_partitions
,
.
num_parts
=
ARRAY_SIZE
(
cap9adk_nand_partitions
),
};
static
struct
sam9_smc_config
__initdata
cap9adk_nand_smc_config
=
{
.
ncs_read_setup
=
1
,
.
nrd_setup
=
2
,
.
ncs_write_setup
=
1
,
.
nwe_setup
=
2
,
.
ncs_read_pulse
=
6
,
.
nrd_pulse
=
4
,
.
ncs_write_pulse
=
6
,
.
nwe_pulse
=
4
,
.
read_cycle
=
8
,
.
write_cycle
=
8
,
.
mode
=
AT91_SMC_READMODE
|
AT91_SMC_WRITEMODE
|
AT91_SMC_EXNWMODE_DISABLE
,
.
tdf_cycles
=
1
,
};
static
void
__init
cap9adk_add_device_nand
(
void
)
{
unsigned
long
csa
;
csa
=
at91_sys_read
(
AT91_MATRIX_EBICSA
);
at91_sys_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_EBI_VDDIOMSEL_3_3V
);
cap9adk_nand_data
.
bus_width_16
=
board_have_nand_16bit
();
/* setup bus-width (8 or 16) */
if
(
cap9adk_nand_data
.
bus_width_16
)
cap9adk_nand_smc_config
.
mode
|=
AT91_SMC_DBW_16
;
else
cap9adk_nand_smc_config
.
mode
|=
AT91_SMC_DBW_8
;
/* configure chip-select 3 (NAND) */
sam9_smc_configure
(
0
,
3
,
&
cap9adk_nand_smc_config
);
at91_add_device_nand
(
&
cap9adk_nand_data
);
}
/*
* NOR flash
*/
static
struct
mtd_partition
cap9adk_nor_partitions
[]
=
{
{
.
name
=
"NOR partition"
,
.
offset
=
0
,
.
size
=
MTDPART_SIZ_FULL
,
},
};
static
struct
physmap_flash_data
cap9adk_nor_data
=
{
.
width
=
2
,
.
parts
=
cap9adk_nor_partitions
,
.
nr_parts
=
ARRAY_SIZE
(
cap9adk_nor_partitions
),
};
#define NOR_BASE AT91_CHIPSELECT_0
#define NOR_SIZE SZ_8M
static
struct
resource
nor_flash_resources
[]
=
{
{
.
start
=
NOR_BASE
,
.
end
=
NOR_BASE
+
NOR_SIZE
-
1
,
.
flags
=
IORESOURCE_MEM
,
}
};
static
struct
platform_device
cap9adk_nor_flash
=
{
.
name
=
"physmap-flash"
,
.
id
=
0
,
.
dev
=
{
.
platform_data
=
&
cap9adk_nor_data
,
},
.
resource
=
nor_flash_resources
,
.
num_resources
=
ARRAY_SIZE
(
nor_flash_resources
),
};
static
struct
sam9_smc_config
__initdata
cap9adk_nor_smc_config
=
{
.
ncs_read_setup
=
2
,
.
nrd_setup
=
4
,
.
ncs_write_setup
=
2
,
.
nwe_setup
=
4
,
.
ncs_read_pulse
=
10
,
.
nrd_pulse
=
8
,
.
ncs_write_pulse
=
10
,
.
nwe_pulse
=
8
,
.
read_cycle
=
16
,
.
write_cycle
=
16
,
.
mode
=
AT91_SMC_READMODE
|
AT91_SMC_WRITEMODE
|
AT91_SMC_EXNWMODE_DISABLE
|
AT91_SMC_BAT_WRITE
|
AT91_SMC_DBW_16
,
.
tdf_cycles
=
1
,
};
static
__init
void
cap9adk_add_device_nor
(
void
)
{
unsigned
long
csa
;
csa
=
at91_sys_read
(
AT91_MATRIX_EBICSA
);
at91_sys_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_EBI_VDDIOMSEL_3_3V
);
/* configure chip-select 0 (NOR) */
sam9_smc_configure
(
0
,
0
,
&
cap9adk_nor_smc_config
);
platform_device_register
(
&
cap9adk_nor_flash
);
}
/*
* LCD Controller
*/
#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
static
struct
fb_videomode
at91_tft_vga_modes
[]
=
{
{
.
name
=
"TX09D50VM1CCA @ 60"
,
.
refresh
=
60
,
.
xres
=
240
,
.
yres
=
320
,
.
pixclock
=
KHZ2PICOS
(
4965
),
.
left_margin
=
1
,
.
right_margin
=
33
,
.
upper_margin
=
1
,
.
lower_margin
=
0
,
.
hsync_len
=
5
,
.
vsync_len
=
1
,
.
sync
=
FB_SYNC_HOR_HIGH_ACT
|
FB_SYNC_VERT_HIGH_ACT
,
.
vmode
=
FB_VMODE_NONINTERLACED
,
},
};
static
struct
fb_monspecs
at91fb_default_monspecs
=
{
.
manufacturer
=
"HIT"
,
.
monitor
=
"TX09D70VM1CCA"
,
.
modedb
=
at91_tft_vga_modes
,
.
modedb_len
=
ARRAY_SIZE
(
at91_tft_vga_modes
),
.
hfmin
=
15000
,
.
hfmax
=
64000
,
.
vfmin
=
50
,
.
vfmax
=
150
,
};
#define AT91CAP9_DEFAULT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
| ATMEL_LCDC_DISTYPE_TFT \
| ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
static
void
at91_lcdc_power_control
(
int
on
)
{
if
(
on
)
at91_set_gpio_value
(
AT91_PIN_PC0
,
0
);
/* power up */
else
at91_set_gpio_value
(
AT91_PIN_PC0
,
1
);
/* power down */
}
/* Driver datas */
static
struct
atmel_lcdfb_info
__initdata
cap9adk_lcdc_data
=
{
.
default_bpp
=
16
,
.
default_dmacon
=
ATMEL_LCDC_DMAEN
,
.
default_lcdcon2
=
AT91CAP9_DEFAULT_LCDCON2
,
.
default_monspecs
=
&
at91fb_default_monspecs
,
.
atmel_lcdfb_power_control
=
at91_lcdc_power_control
,
.
guard_time
=
1
,
};
#else
static
struct
atmel_lcdfb_info
__initdata
cap9adk_lcdc_data
;
#endif
/*
* AC97
*/
static
struct
ac97c_platform_data
cap9adk_ac97_data
=
{
.
reset_pin
=
-
EINVAL
,
};
static
void
__init
cap9adk_board_init
(
void
)
{
/* Serial */
at91_add_device_serial
();
/* USB Host */
at91_add_device_usbh
(
&
cap9adk_usbh_data
);
/* USB HS */
at91_add_device_usba
(
&
cap9adk_usba_udc_data
);
/* SPI */
at91_add_device_spi
(
cap9adk_spi_devices
,
ARRAY_SIZE
(
cap9adk_spi_devices
));
/* Touchscreen */
cap9adk_add_device_ts
();
/* MMC */
at91_add_device_mmc
(
1
,
&
cap9adk_mmc_data
);
/* Ethernet */
at91_add_device_eth
(
&
cap9adk_macb_data
);
/* NAND */
cap9adk_add_device_nand
();
/* NOR Flash */
cap9adk_add_device_nor
();
/* I2C */
at91_add_device_i2c
(
NULL
,
0
);
/* LCD Controller */
at91_add_device_lcdc
(
&
cap9adk_lcdc_data
);
/* AC97 */
at91_add_device_ac97
(
&
cap9adk_ac97_data
);
}
MACHINE_START
(
AT91CAP9ADK
,
"Atmel AT91CAP9A-DK"
)
/* Maintainer: Stelian Pop <stelian.pop@leadtechdesign.com> */
.
timer
=
&
at91sam926x_timer
,
.
map_io
=
at91_map_io
,
.
init_early
=
cap9adk_init_early
,
.
init_irq
=
at91_init_irq_default
,
.
init_machine
=
cap9adk_board_init
,
MACHINE_END
arch/arm/mach-at91/board-cpu9krea.c
View file @
d50673ed
...
...
@@ -43,6 +43,7 @@
#include <mach/board.h>
#include <mach/at91sam9_smc.h>
#include <mach/at91sam9260_matrix.h>
#include <mach/at91_matrix.h>
#include "sam9_smc.h"
#include "generic.h"
...
...
@@ -238,8 +239,8 @@ static __init void cpu9krea_add_device_nor(void)
{
unsigned
long
csa
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBICSA
);
at91_
sys
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_VDDIOMSEL_3_3V
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBICSA
);
at91_
matrix
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_VDDIOMSEL_3_3V
);
/* configure chip-select 0 (NOR) */
sam9_smc_configure
(
0
,
0
,
&
cpu9krea_nor_smc_config
);
...
...
arch/arm/mach-at91/board-cpuat91.c
View file @
d50673ed
...
...
@@ -38,6 +38,7 @@
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include <mach/cpu.h>
#include "generic.h"
...
...
arch/arm/mach-at91/board-dt.c
View file @
d50673ed
...
...
@@ -38,12 +38,6 @@ static void __init ek_init_early(void)
{
/* Initialize processor: 12.000 MHz crystal */
at91_initialize
(
12000000
);
/* DGBU on ttyS0. (Rx & Tx only) */
at91_register_uart
(
0
,
0
,
0
);
/* set serial console to ttyS0 (ie, DBGU) */
at91_set_serial_console
(
0
);
}
/* det_pin is not connected */
...
...
@@ -109,6 +103,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/board-eco920.c
View file @
d50673ed
...
...
@@ -26,6 +26,7 @@
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include <mach/cpu.h>
#include "generic.h"
...
...
@@ -110,7 +111,7 @@ static void __init eco920_board_init(void)
at91_add_device_mmc
(
0
,
&
eco920_mmc_data
);
platform_device_register
(
&
eco920_flash
);
at91_
sys_write
(
AT91_SMC_CSR
(
7
),
AT91_SMC_RWHOLD_
(
1
)
at91_
ramc_write
(
0
,
AT91_SMC_CSR
(
7
),
AT91_SMC_RWHOLD_
(
1
)
|
AT91_SMC_RWSETUP_
(
1
)
|
AT91_SMC_DBW_8
|
AT91_SMC_WSEN
...
...
@@ -122,7 +123,7 @@ static void __init eco920_board_init(void)
at91_set_deglitch
(
AT91_PIN_PA23
,
1
);
/* Initialization of the Static Memory Controller for Chip Select 3 */
at91_
sys_write
(
AT91_SMC_CSR
(
3
),
at91_
ramc_write
(
0
,
AT91_SMC_CSR
(
3
),
AT91_SMC_DBW_16
|
/* 16 bit */
AT91_SMC_WSEN
|
AT91_SMC_NWS_
(
5
)
|
/* wait states */
...
...
arch/arm/mach-at91/board-flexibity.c
View file @
d50673ed
/*
* linux/arch/arm/mach-at91/board-flexibity.c
*
* Copyright (C) 2010 Flexibity
* Copyright (C) 2010
-2011
Flexibity
* Copyright (C) 2005 SAN People
* Copyright (C) 2006 Atmel
*
...
...
@@ -62,6 +62,13 @@ static struct at91_udc_data __initdata flexibity_udc_data = {
.
pullup_pin
=
-
EINVAL
,
/* pull-up driven by UDC */
};
/* I2C devices */
static
struct
i2c_board_info
__initdata
flexibity_i2c_devices
[]
=
{
{
I2C_BOARD_INFO
(
"ds1307"
,
0x68
),
},
};
/* SPI devices */
static
struct
spi_board_info
flexibity_spi_devices
[]
=
{
{
/* DataFlash chip */
...
...
@@ -141,6 +148,9 @@ static void __init flexibity_board_init(void)
at91_add_device_usbh
(
&
flexibity_usbh_data
);
/* USB Device */
at91_add_device_udc
(
&
flexibity_udc_data
);
/* I2C */
at91_add_device_i2c
(
flexibity_i2c_devices
,
ARRAY_SIZE
(
flexibity_i2c_devices
));
/* SPI */
at91_add_device_spi
(
flexibity_spi_devices
,
ARRAY_SIZE
(
flexibity_spi_devices
));
...
...
arch/arm/mach-at91/board-kb9202.c
View file @
d50673ed
...
...
@@ -38,6 +38,7 @@
#include <mach/board.h>
#include <mach/cpu.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include "generic.h"
...
...
arch/arm/mach-at91/board-picotux200.c
View file @
d50673ed
...
...
@@ -39,6 +39,7 @@
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include "generic.h"
...
...
arch/arm/mach-at91/board-rm9200dk.c
View file @
d50673ed
...
...
@@ -41,6 +41,7 @@
#include <mach/hardware.h>
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include "generic.h"
...
...
arch/arm/mach-at91/board-rm9200ek.c
View file @
d50673ed
...
...
@@ -41,6 +41,7 @@
#include <mach/hardware.h>
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include "generic.h"
...
...
arch/arm/mach-at91/board-sam9m10g45ek.c
View file @
d50673ed
...
...
@@ -24,11 +24,13 @@
#include <linux/gpio_keys.h>
#include <linux/input.h>
#include <linux/leds.h>
#include <linux/clk.h>
#include <linux/atmel-mci.h>
#include <linux/delay.h>
#include <mach/hardware.h>
#include <video/atmel_lcdc.h>
#include <media/soc_camera.h>
#include <media/atmel-isi.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
...
...
@@ -184,6 +186,71 @@ static void __init ek_add_device_nand(void)
}
/*
* ISI
*/
static
struct
isi_platform_data
__initdata
isi_data
=
{
.
frate
=
ISI_CFG1_FRATE_CAPTURE_ALL
,
/* to use codec and preview path simultaneously */
.
full_mode
=
1
,
.
data_width_flags
=
ISI_DATAWIDTH_8
|
ISI_DATAWIDTH_10
,
/* ISI_MCK is provided by programmable clock or external clock */
.
mck_hz
=
25000000
,
};
/*
* soc-camera OV2640
*/
#if defined(CONFIG_SOC_CAMERA_OV2640) || \
defined(CONFIG_SOC_CAMERA_OV2640_MODULE)
static
unsigned
long
isi_camera_query_bus_param
(
struct
soc_camera_link
*
link
)
{
/* ISI board for ek using default 8-bits connection */
return
SOCAM_DATAWIDTH_8
;
}
static
int
i2c_camera_power
(
struct
device
*
dev
,
int
on
)
{
/* enable or disable the camera */
pr_debug
(
"%s: %s the camera
\n
"
,
__func__
,
on
?
"ENABLE"
:
"DISABLE"
);
at91_set_gpio_output
(
AT91_PIN_PD13
,
!
on
);
if
(
!
on
)
goto
out
;
/* If enabled, give a reset impulse */
at91_set_gpio_output
(
AT91_PIN_PD12
,
0
);
msleep
(
20
);
at91_set_gpio_output
(
AT91_PIN_PD12
,
1
);
msleep
(
100
);
out:
return
0
;
}
static
struct
i2c_board_info
i2c_camera
=
{
I2C_BOARD_INFO
(
"ov2640"
,
0x30
),
};
static
struct
soc_camera_link
iclink_ov2640
=
{
.
bus_id
=
0
,
.
board_info
=
&
i2c_camera
,
.
i2c_adapter_id
=
0
,
.
power
=
i2c_camera_power
,
.
query_bus_param
=
isi_camera_query_bus_param
,
};
static
struct
platform_device
isi_ov2640
=
{
.
name
=
"soc-camera-pdrv"
,
.
id
=
0
,
.
dev
=
{
.
platform_data
=
&
iclink_ov2640
,
},
};
#endif
/*
* LCD Controller
*/
...
...
@@ -377,7 +444,12 @@ static struct gpio_led ek_pwm_led[] = {
#endif
};
static
struct
platform_device
*
devices
[]
__initdata
=
{
#if defined(CONFIG_SOC_CAMERA_OV2640) || \
defined(CONFIG_SOC_CAMERA_OV2640_MODULE)
&
isi_ov2640
,
#endif
};
static
void
__init
ek_board_init
(
void
)
{
...
...
@@ -399,6 +471,8 @@ static void __init ek_board_init(void)
ek_add_device_nand
();
/* I2C */
at91_add_device_i2c
(
0
,
NULL
,
0
);
/* ISI, using programmable clock as ISI_MCK */
at91_add_device_isi
(
&
isi_data
,
true
);
/* LCD Controller */
at91_add_device_lcdc
(
&
ek_lcdc_data
);
/* Touch Screen */
...
...
@@ -410,6 +484,8 @@ static void __init ek_board_init(void)
/* LEDs */
at91_gpio_leds
(
ek_leds
,
ARRAY_SIZE
(
ek_leds
));
at91_pwm_leds
(
ek_pwm_led
,
ARRAY_SIZE
(
ek_pwm_led
));
/* Other platform devices */
platform_add_devices
(
devices
,
ARRAY_SIZE
(
devices
));
}
MACHINE_START
(
AT91SAM9M10G45EK
,
"Atmel AT91SAM9M10G45-EK"
)
...
...
arch/arm/mach-at91/board-yl-9200.c
View file @
d50673ed
...
...
@@ -45,6 +45,7 @@
#include <mach/hardware.h>
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include <mach/cpu.h>
#include "generic.h"
...
...
@@ -393,7 +394,7 @@ static void yl9200_init_video(void)
at91_set_A_periph
(
AT91_PIN_PC6
,
0
);
/* Initialization of the Static Memory Controller for Chip Select 2 */
at91_
sys_write
(
AT91_SMC_CSR
(
2
),
AT91_SMC_DBW_16
/* 16 bit */
at91_
ramc_write
(
0
,
AT91_SMC_CSR
(
2
),
AT91_SMC_DBW_16
/* 16 bit */
|
AT91_SMC_WSEN
|
AT91_SMC_NWS_
(
0x4
)
/* wait states */
|
AT91_SMC_TDF_
(
0x100
)
/* float time */
);
...
...
arch/arm/mach-at91/clock.c
View file @
d50673ed
...
...
@@ -28,9 +28,12 @@
#include <mach/at91_pmc.h>
#include <mach/cpu.h>
#include <asm/proc-fns.h>
#include "clock.h"
#include "generic.h"
void
__iomem
*
at91_pmc_base
;
/*
* There's a lot more which can be done with clocks, including cpufreq
...
...
@@ -47,26 +50,38 @@
/*
* Chips have some kind of clocks : group them by functionality
*/
#define cpu_has_utmi() ( cpu_is_at91
cap9
() \
|| cpu_is_at91sam9
rl
() \
|| cpu_is_at91sam9
g4
5())
#define cpu_has_utmi() ( cpu_is_at91
sam9rl
() \
|| cpu_is_at91sam9
g45
() \
|| cpu_is_at91sam9
x
5())
#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
);
...
...
@@ -111,11 +126,11 @@ static void pllb_mode(struct clk *clk, int is_on)
value
=
0
;
// REVISIT: Add work-around for AT91RM9200 Errata #26 ?
at91_
sys
_write
(
AT91_CKGR_PLLBR
,
value
);
at91_
pmc
_write
(
AT91_CKGR_PLLBR
,
value
);
do
{
cpu_relax
();
}
while
((
at91_
sys
_read
(
AT91_PMC_SR
)
&
AT91_PMC_LOCKB
)
!=
is_on
);
}
while
((
at91_
pmc
_read
(
AT91_PMC_SR
)
&
AT91_PMC_LOCKB
)
!=
is_on
);
}
static
struct
clk
pllb
=
{
...
...
@@ -130,31 +145,24 @@ static struct clk pllb = {
static
void
pmc_sys_mode
(
struct
clk
*
clk
,
int
is_on
)
{
if
(
is_on
)
at91_
sys
_write
(
AT91_PMC_SCER
,
clk
->
pmc_mask
);
at91_
pmc
_write
(
AT91_PMC_SCER
,
clk
->
pmc_mask
);
else
at91_
sys
_write
(
AT91_PMC_SCDR
,
clk
->
pmc_mask
);
at91_
pmc
_write
(
AT91_PMC_SCDR
,
clk
->
pmc_mask
);
}
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
;
}
unsigned
int
uckr
=
at91_pmc_read
(
AT91_CKGR_UCKR
);
if
(
is_on
)
{
is_on
=
AT91_PMC_LOCKU
;
at91_
sys
_write
(
AT91_CKGR_UCKR
,
uckr
|
clk
->
pmc_mask
);
at91_
pmc
_write
(
AT91_CKGR_UCKR
,
uckr
|
clk
->
pmc_mask
);
}
else
at91_
sys
_write
(
AT91_CKGR_UCKR
,
uckr
&
~
(
clk
->
pmc_mask
));
at91_
pmc
_write
(
AT91_CKGR_UCKR
,
uckr
&
~
(
clk
->
pmc_mask
));
do
{
cpu_relax
();
}
while
((
at91_
sys
_read
(
AT91_PMC_SR
)
&
AT91_PMC_LOCKU
)
!=
is_on
);
}
while
((
at91_
pmc
_read
(
AT91_PMC_SR
)
&
AT91_PMC_LOCKU
)
!=
is_on
);
}
/* USB function clocks (PLLB must be 48 MHz) */
...
...
@@ -190,9 +198,9 @@ struct clk mck = {
static
void
pmc_periph_mode
(
struct
clk
*
clk
,
int
is_on
)
{
if
(
is_on
)
at91_
sys
_write
(
AT91_PMC_PCER
,
clk
->
pmc_mask
);
at91_
pmc
_write
(
AT91_PMC_PCER
,
clk
->
pmc_mask
);
else
at91_
sys
_write
(
AT91_PMC_PCDR
,
clk
->
pmc_mask
);
at91_
pmc
_write
(
AT91_PMC_PCDR
,
clk
->
pmc_mask
);
}
static
struct
clk
__init
*
at91_css_to_clk
(
unsigned
long
css
)
...
...
@@ -210,11 +218,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
)
...
...
@@ -316,12 +337,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,10 +360,10 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
if
(
actual
&&
actual
<=
rate
)
{
u32
pckr
;
pckr
=
at91_
sys
_read
(
AT91_PMC_PCKR
(
clk
->
id
));
pckr
&=
AT91_PMC_CSS
;
/*
clock selection */
pckr
|=
prescale
<<
2
;
at91_
sys
_write
(
AT91_PMC_PCKR
(
clk
->
id
),
pckr
);
pckr
=
at91_
pmc
_read
(
AT91_PMC_PCKR
(
clk
->
id
));
pckr
&=
css_mask
;
/* keep
clock selection */
pckr
|=
prescale
<<
prescale_offset
;
at91_
pmc
_write
(
AT91_PMC_PCKR
(
clk
->
id
),
pckr
);
clk
->
rate_hz
=
actual
;
break
;
}
...
...
@@ -366,7 +397,7 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
clk
->
rate_hz
=
parent
->
rate_hz
;
clk
->
parent
=
parent
;
at91_
sys
_write
(
AT91_PMC_PCKR
(
clk
->
id
),
parent
->
id
);
at91_
pmc
_write
(
AT91_PMC_PCKR
(
clk
->
id
),
parent
->
id
);
spin_unlock_irqrestore
(
&
clk_lock
,
flags
);
return
0
;
...
...
@@ -378,11 +409,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
);
pckr
=
at91_
pmc
_read
(
AT91_PMC_PCKR
(
clk
->
id
));
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 */
...
...
@@ -396,19 +433,24 @@ static int at91_clk_show(struct seq_file *s, void *unused)
u32
scsr
,
pcsr
,
uckr
=
0
,
sr
;
struct
clk
*
clk
;
seq_printf
(
s
,
"SCSR = %8x
\n
"
,
scsr
=
at91_sys_read
(
AT91_PMC_SCSR
));
seq_printf
(
s
,
"PCSR = %8x
\n
"
,
pcsr
=
at91_sys_read
(
AT91_PMC_PCSR
));
seq_printf
(
s
,
"MOR = %8x
\n
"
,
at91_sys_read
(
AT91_CKGR_MOR
));
seq_printf
(
s
,
"MCFR = %8x
\n
"
,
at91_sys_read
(
AT91_CKGR_MCFR
));
seq_printf
(
s
,
"PLLA = %8x
\n
"
,
at91_sys_read
(
AT91_CKGR_PLLAR
));
scsr
=
at91_pmc_read
(
AT91_PMC_SCSR
);
pcsr
=
at91_pmc_read
(
AT91_PMC_PCSR
);
sr
=
at91_pmc_read
(
AT91_PMC_SR
);
seq_printf
(
s
,
"SCSR = %8x
\n
"
,
scsr
);
seq_printf
(
s
,
"PCSR = %8x
\n
"
,
pcsr
);
seq_printf
(
s
,
"MOR = %8x
\n
"
,
at91_pmc_read
(
AT91_CKGR_MOR
));
seq_printf
(
s
,
"MCFR = %8x
\n
"
,
at91_pmc_read
(
AT91_CKGR_MCFR
));
seq_printf
(
s
,
"PLLA = %8x
\n
"
,
at91_pmc_read
(
AT91_CKGR_PLLAR
));
if
(
cpu_has_pllb
())
seq_printf
(
s
,
"PLLB = %8x
\n
"
,
at91_sys_read
(
AT91_CKGR_PLLBR
));
if
(
cpu_has_utmi
())
seq_printf
(
s
,
"UCKR = %8x
\n
"
,
uckr
=
at91_sys_read
(
AT91_CKGR_UCKR
));
seq_printf
(
s
,
"MCKR = %8x
\n
"
,
at91_sys_read
(
AT91_PMC_MCKR
));
seq_printf
(
s
,
"PLLB = %8x
\n
"
,
at91_pmc_read
(
AT91_CKGR_PLLBR
));
if
(
cpu_has_utmi
())
{
uckr
=
at91_pmc_read
(
AT91_CKGR_UCKR
);
seq_printf
(
s
,
"UCKR = %8x
\n
"
,
uckr
);
}
seq_printf
(
s
,
"MCKR = %8x
\n
"
,
at91_pmc_read
(
AT91_PMC_MCKR
));
if
(
cpu_has_upll
())
seq_printf
(
s
,
"USB = %8x
\n
"
,
at91_
sys
_read
(
AT91_PMC_USB
));
seq_printf
(
s
,
"SR = %8x
\n
"
,
sr
=
at91_sys_read
(
AT91_PMC_SR
)
);
seq_printf
(
s
,
"USB = %8x
\n
"
,
at91_
pmc
_read
(
AT91_PMC_USB
));
seq_printf
(
s
,
"SR = %8x
\n
"
,
sr
);
seq_printf
(
s
,
"
\n
"
);
...
...
@@ -596,16 +638,14 @@ static void __init at91_pllb_usbfs_clock_init(unsigned long main_clock)
if
(
cpu_is_at91rm9200
())
{
uhpck
.
pmc_mask
=
AT91RM9200_PMC_UHP
;
udpck
.
pmc_mask
=
AT91RM9200_PMC_UDP
;
at91_
sys
_write
(
AT91_PMC_SCER
,
AT91RM9200_PMC_MCKUDP
);
at91_
pmc
_write
(
AT91_PMC_SCER
,
AT91RM9200_PMC_MCKUDP
);
}
else
if
(
cpu_is_at91sam9260
()
||
cpu_is_at91sam9261
()
||
cpu_is_at91sam9263
()
||
cpu_is_at91sam9g20
()
||
cpu_is_at91sam9g10
())
{
uhpck
.
pmc_mask
=
AT91SAM926x_PMC_UHP
;
udpck
.
pmc_mask
=
AT91SAM926x_PMC_UDP
;
}
else
if
(
cpu_is_at91cap9
())
{
uhpck
.
pmc_mask
=
AT91CAP9_PMC_UHP
;
}
at91_
sys
_write
(
AT91_CKGR_PLLBR
,
0
);
at91_
pmc
_write
(
AT91_CKGR_PLLBR
,
0
);
udpck
.
rate_hz
=
at91_usb_rate
(
&
pllb
,
pllb
.
rate_hz
,
at91_pllb_usb_init
);
uhpck
.
rate_hz
=
at91_usb_rate
(
&
pllb
,
pllb
.
rate_hz
,
at91_pllb_usb_init
);
...
...
@@ -622,13 +662,13 @@ static void __init at91_upll_usbfs_clock_init(unsigned long main_clock)
/* Setup divider by 10 to reach 48 MHz */
usbr
|=
((
10
-
1
)
<<
8
)
&
AT91_PMC_OHCIUSBDIV
;
at91_
sys
_write
(
AT91_PMC_USB
,
usbr
);
at91_
pmc
_write
(
AT91_PMC_USB
,
usbr
);
/* Now set uhpck values */
uhpck
.
parent
=
&
utmi_clk
;
uhpck
.
pmc_mask
=
AT91SAM926x_PMC_UHP
;
uhpck
.
rate_hz
=
utmi_clk
.
rate_hz
;
uhpck
.
rate_hz
/=
1
+
((
at91_
sys
_read
(
AT91_PMC_USB
)
&
AT91_PMC_OHCIUSBDIV
)
>>
8
);
uhpck
.
rate_hz
/=
1
+
((
at91_
pmc
_read
(
AT91_PMC_USB
)
&
AT91_PMC_OHCIUSBDIV
)
>>
8
);
}
int
__init
at91_clock_init
(
unsigned
long
main_clock
)
...
...
@@ -637,6 +677,10 @@ int __init at91_clock_init(unsigned long main_clock)
int
i
;
int
pll_overclock
=
false
;
at91_pmc_base
=
ioremap
(
AT91_PMC
,
256
);
if
(
!
at91_pmc_base
)
panic
(
"Impossible to ioremap AT91_PMC 0x%x
\n
"
,
AT91_PMC
);
/*
* When the bootloader initialized the main oscillator correctly,
* there's no problem using the cycle counter. But if it didn't,
...
...
@@ -645,14 +689,14 @@ int __init at91_clock_init(unsigned long main_clock)
*/
if
(
!
main_clock
)
{
do
{
tmp
=
at91_
sys
_read
(
AT91_CKGR_MCFR
);
tmp
=
at91_
pmc
_read
(
AT91_CKGR_MCFR
);
}
while
(
!
(
tmp
&
AT91_PMC_MAINRDY
));
main_clock
=
(
tmp
&
AT91_PMC_MAINF
)
*
(
AT91_SLOW_CLOCK
/
16
);
}
main_clk
.
rate_hz
=
main_clock
;
/* report if PLLA is more than mildly overclocked */
plla
.
rate_hz
=
at91_pll_rate
(
&
plla
,
main_clock
,
at91_
sys
_read
(
AT91_CKGR_PLLAR
));
plla
.
rate_hz
=
at91_pll_rate
(
&
plla
,
main_clock
,
at91_
pmc
_read
(
AT91_CKGR_PLLAR
));
if
(
cpu_has_300M_plla
())
{
if
(
plla
.
rate_hz
>
300000000
)
pll_overclock
=
true
;
...
...
@@ -666,8 +710,8 @@ 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
())
{
mckr
=
at91_
sys
_read
(
AT91_PMC_MCKR
);
if
(
cpu_
has_plladiv2
())
{
mckr
=
at91_
pmc
_read
(
AT91_PMC_MCKR
);
plla
.
rate_hz
/=
(
1
<<
((
mckr
&
AT91_PMC_PLLADIV2
)
>>
12
));
/* plla divisor by 2 */
}
...
...
@@ -688,6 +732,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,10 +751,10 @@ int __init at91_clock_init(unsigned long main_clock)
* MCK and CPU derive from one of those primary clocks.
* For now, assume this parentage won't change.
*/
mckr
=
at91_
sys
_read
(
AT91_PMC_MCKR
);
mckr
=
at91_
pmc
_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
())
{
...
...
@@ -714,13 +762,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
]);
...
...
@@ -770,9 +824,15 @@ static int __init at91_clock_reset(void)
pr_debug
(
"Clocks: disable unused %s
\n
"
,
clk
->
name
);
}
at91_
sys
_write
(
AT91_PMC_PCDR
,
pcdr
);
at91_
sys
_write
(
AT91_PMC_SCDR
,
scdr
);
at91_
pmc
_write
(
AT91_PMC_PCDR
,
pcdr
);
at91_
pmc
_write
(
AT91_PMC_SCDR
,
scdr
);
return
0
;
}
late_initcall
(
at91_clock_reset
);
void
at91sam9_idle
(
void
)
{
at91_pmc_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
cpu_do_idle
();
}
arch/arm/mach-at91/cpuidle.c
View file @
d50673ed
...
...
@@ -39,20 +39,15 @@ static int at91_enter_idle(struct cpuidle_device *dev,
{
struct
timeval
before
,
after
;
int
idle_time
;
u32
saved_lpr
;
local_irq_disable
();
do_gettimeofday
(
&
before
);
if
(
index
==
0
)
/* Wait for interrupt state */
cpu_do_idle
();
else
if
(
index
==
1
)
{
asm
(
"b 1f; .align 5; 1:"
);
asm
(
"mcr p15, 0, r0, c7, c10, 4"
);
/* drain write buffer */
saved_lpr
=
sdram_selfrefresh_enable
();
cpu_do_idle
();
sdram_selfrefresh_disable
(
saved_lpr
);
}
else
if
(
index
==
1
)
at91_standby
();
do_gettimeofday
(
&
after
);
local_irq_enable
();
idle_time
=
(
after
.
tv_sec
-
before
.
tv_sec
)
*
USEC_PER_SEC
+
...
...
arch/arm/mach-at91/generic.h
View file @
d50673ed
...
...
@@ -28,6 +28,7 @@ extern void __init at91_aic_init(unsigned int priority[]);
/* Timer */
struct
sys_timer
;
extern
void
at91rm9200_ioremap_st
(
u32
addr
);
extern
struct
sys_timer
at91rm9200_timer
;
extern
void
at91sam926x_ioremap_pit
(
u32
addr
);
extern
struct
sys_timer
at91sam926x_timer
;
...
...
@@ -45,7 +46,6 @@ extern void __init at91sam9261_set_console_clock(int id);
extern
void
__init
at91sam9263_set_console_clock
(
int
id
);
extern
void
__init
at91sam9rl_set_console_clock
(
int
id
);
extern
void
__init
at91sam9g45_set_console_clock
(
int
id
);
extern
void
__init
at91cap9_set_console_clock
(
int
id
);
#ifdef CONFIG_AT91_PMC_UNIT
extern
int
__init
at91_clock_init
(
unsigned
long
main_clock
);
#else
...
...
@@ -57,6 +57,9 @@ struct device;
extern
void
at91_irq_suspend
(
void
);
extern
void
at91_irq_resume
(
void
);
/* idle */
extern
void
at91sam9_idle
(
void
);
/* reset */
extern
void
at91_ioremap_rstc
(
u32
base_addr
);
extern
void
at91sam9_alt_restart
(
char
,
const
char
*
);
...
...
@@ -65,6 +68,12 @@ extern void at91sam9g45_restart(char, const char *);
/* shutdown */
extern
void
at91_ioremap_shdwc
(
u32
base_addr
);
/* Matrix */
extern
void
at91_ioremap_matrix
(
u32
base_addr
);
/* Ram Controler */
extern
void
at91_ioremap_ramc
(
int
id
,
u32
addr
,
u32
size
);
/* GPIO */
#define AT91RM9200_PQFP 3
/* AT91RM9200 PQFP package has 3 banks */
#define AT91RM9200_BGA 4
/* AT91RM9200 BGA package has 4 banks */
...
...
arch/arm/mach-at91/include/mach/at91_matrix.h
0 → 100644
View file @
d50673ed
/*
* Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
*
* Under GPLv2
*/
#ifndef __MACH_AT91_MATRIX_H__
#define __MACH_AT91_MATRIX_H__
#ifndef __ASSEMBLY__
extern
void
__iomem
*
at91_matrix_base
;
#define at91_matrix_read(field) \
__raw_readl(at91_matrix_base + field)
#define at91_matrix_write(field, value) \
__raw_writel(value, at91_matrix_base + field);
#else
.
extern
at91_matrix_base
#endif
#endif
/* __MACH_AT91_MATRIX_H__ */
arch/arm/mach-at91/include/mach/at91_pmc.h
View file @
d50673ed
...
...
@@ -16,17 +16,27 @@
#ifndef AT91_PMC_H
#define AT91_PMC_H
#
define AT91_PMC_SCER (AT91_PMC + 0x00)
/* System Clock Enable Register */
#define AT91_PMC_SCDR (AT91_PMC + 0x04)
/* System Clock Disable Register */
#
ifndef __ASSEMBLY__
extern
void
__iomem
*
at91_pmc_base
;
#define AT91_PMC_SCSR (AT91_PMC + 0x08)
/* System Clock Status Register */
#define at91_pmc_read(field) \
__raw_readl(at91_pmc_base + field)
#define at91_pmc_write(field, value) \
__raw_writel(value, at91_pmc_base + field)
#else
.
extern
at91_aic_base
#endif
#define AT91_PMC_SCER 0x00
/* System Clock Enable Register */
#define AT91_PMC_SCDR 0x04
/* System Clock Disable Register */
#define AT91_PMC_SCSR 0x08
/* System Clock Status Register */
#define AT91_PMC_PCK (1 << 0)
/* Processor Clock */
#define AT91RM9200_PMC_UDP (1 << 1)
/* USB Devcice Port Clock [AT91RM9200 only] */
#define AT91RM9200_PMC_MCKUDP (1 << 2)
/* USB Device Port Master Clock Automatic Disable on Suspend [AT91RM9200 only] */
#define AT91CAP9_PMC_DDR (1 << 2)
/* DDR Clock [CAP9 revC & some SAM9 only] */
#define AT91RM9200_PMC_UHP (1 << 4)
/* USB Host Port Clock [AT91RM9200 only] */
#define AT91SAM926x_PMC_UHP (1 << 6)
/* USB Host Port Clock [AT91SAM926x only] */
#define AT91CAP9_PMC_UHP (1 << 6)
/* USB Host Port Clock [AT91CAP9 only] */
#define AT91SAM926x_PMC_UDP (1 << 7)
/* USB Devcice Port Clock [AT91SAM926x only] */
#define AT91_PMC_PCK0 (1 << 8)
/* Programmable Clock 0 */
#define AT91_PMC_PCK1 (1 << 9)
/* Programmable Clock 1 */
...
...
@@ -36,27 +46,31 @@
#define AT91_PMC_HCK0 (1 << 16)
/* AHB Clock (USB host) [AT91SAM9261 only] */
#define AT91_PMC_HCK1 (1 << 17)
/* AHB Clock (LCD) [AT91SAM9261 only] */
#define AT91_PMC_PCER
(AT91_PMC + 0x10)
/* Peripheral Clock Enable Register */
#define AT91_PMC_PCDR
(AT91_PMC + 0x14)
/* Peripheral Clock Disable Register */
#define AT91_PMC_PCSR
(AT91_PMC + 0x18)
/* Peripheral Clock Status Register */
#define AT91_PMC_PCER
0x10
/* Peripheral Clock Enable Register */
#define AT91_PMC_PCDR
0x14
/* Peripheral Clock Disable Register */
#define AT91_PMC_PCSR
0x18
/* Peripheral Clock Status Register */
#define AT91_CKGR_UCKR
(AT91_PMC + 0x1C)
/* UTMI Clock Register [some SAM9, CAP
9] */
#define AT91_CKGR_UCKR
0x1C
/* UTMI Clock Register [some SAM
9] */
#define AT91_PMC_UPLLEN (1 << 16)
/* UTMI PLL Enable */
#define AT91_PMC_UPLLCOUNT (0xf << 20)
/* UTMI PLL Start-up Time */
#define AT91_PMC_BIASEN (1 << 24)
/* UTMI BIAS Enable */
#define AT91_PMC_BIASCOUNT (0xf << 28)
/* UTMI BIAS Start-up Time */
#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, CAP9] */
#define AT91_PMC_OSCOUNT (0xff << 8)
/* Main Oscillator Start-up Time */
#define AT91_CKGR_MOR 0x20
/* Main Oscillator Register [not on SAM9RL] */
#define AT91_PMC_MOSCEN (1 << 0)
/* Main Oscillator Enable */
#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_CKGR_MCFR
0x24
/* Main Clock Frequency Register */
#define AT91_PMC_MAINF (0xffff << 0)
/* Main Clock Frequency */
#define AT91_PMC_MAINRDY (1 << 16)
/* Main Clock Ready */
#define AT91_CKGR_PLLAR
(AT91_PMC + 0x28)
/* PLL A Register */
#define AT91_CKGR_PLLBR
(AT91_PMC + 0x2c)
/* PLL B Register */
#define AT91_CKGR_PLLAR
0x28
/* PLL A Register */
#define AT91_CKGR_PLLBR
0x2c
/* PLL B Register */
#define AT91_PMC_DIV (0xff << 0)
/* Divider */
#define AT91_PMC_PLLCOUNT (0x3f << 8)
/* PLL Counter */
#define AT91_PMC_OUT (3 << 14)
/* PLL Clock Frequency Range */
...
...
@@ -67,27 +81,37 @@
#define AT91_PMC_USBDIV_4 (2 << 28)
#define AT91_PMC_USB96M (1 << 28)
/* Divider by 2 Enable (PLLB only) */
#define AT91_PMC_MCKR
(AT91_PMC + 0x30)
/* Master Clock Register */
#define AT91_PMC_MCKR
0x30
/* Master Clock Register */
#define AT91_PMC_CSS (3 << 0)
/* Master Clock Selection */
#define AT91_PMC_CSS_SLOW (0 << 0)
#define AT91_PMC_CSS_MAIN (1 << 0)
#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)
#define AT91RM9200_PMC_MDIV_3 (2 << 8)
#define AT91RM9200_PMC_MDIV_4 (3 << 8)
#define AT91SAM9_PMC_MDIV_1 (0 << 8)
/* [SAM9
,CAP9
only] */
#define AT91SAM9_PMC_MDIV_1 (0 << 8)
/* [SAM9 only] */
#define AT91SAM9_PMC_MDIV_2 (1 << 8)
#define AT91SAM9_PMC_MDIV_4 (2 << 8)
#define AT91SAM9_PMC_MDIV_6 (3 << 8)
/* [some SAM9 only] */
...
...
@@ -99,35 +123,55 @@
#define AT91_PMC_PLLADIV2_OFF (0 << 12)
#define AT91_PMC_PLLADIV2_ON (1 << 12)
#define AT91_PMC_USB
(AT91_PMC + 0x38)
/* USB Clock Register [some SAM9 only] */
#define AT91_PMC_USB
0x38
/* USB Clock Register [some SAM9 only] */
#define AT91_PMC_USBS (0x1 << 0)
/* USB OHCI Input clock selection */
#define AT91_PMC_USBS_PLLA (0 << 0)
#define AT91_PMC_USBS_UPLL (1 << 0)
#define AT91_PMC_OHCIUSBDIV (0xF << 8)
/* Divider for USB OHCI Clock */
#define AT91_PMC_PCKR(n) (AT91_PMC + 0x40 + ((n) * 4))
/* Programmable Clock 0-N Registers */
#define AT91_PMC_SMD 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) (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)
#define AT91_PMC_IER
(AT91_PMC + 0x60)
/* Interrupt Enable Register */
#define AT91_PMC_IDR
(AT91_PMC + 0x64)
/* Interrupt Disable Register */
#define AT91_PMC_SR
(AT91_PMC + 0x68)
/* Status Register */
#define AT91_PMC_IER
0x60
/* Interrupt Enable Register */
#define AT91_PMC_IDR
0x64
/* Interrupt Disable Register */
#define AT91_PMC_SR
0x68
/* Status Register */
#define AT91_PMC_MOSCS (1 << 0)
/* MOSCS Flag */
#define AT91_PMC_LOCKA (1 << 1)
/* PLLA Lock */
#define AT91_PMC_LOCKB (1 << 2)
/* PLLB Lock */
#define AT91_PMC_MCKRDY (1 << 3)
/* Master Clock */
#define AT91_PMC_LOCKU (1 << 6)
/* UPLL Lock [some SAM9, AT91CAP9 only] */
#define AT91_PMC_OSCSEL (1 << 7)
/* Slow Clock Oscillator [AT91CAP9 revC only] */
#define AT91_PMC_LOCKU (1 << 6)
/* UPLL Lock [some SAM9] */
#define AT91_PMC_PCK0RDY (1 << 8)
/* Programmable Clock 0 */
#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_IMR (AT91_PMC + 0x6c)
/* Interrupt Mask Register */
#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 0x6c
/* Interrupt Mask Register */
#define AT91_PMC_PROT 0xe4
/* Write Protect Mode Register [some SAM9] */
#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_PROT (AT91_PMC + 0xe4)
/* Protect Register [AT91CAP9 revC only] */
#define AT91_PMC_PROTKEY 0x504d4301
/* Activation Code */
#define AT91_PMC_WPSR 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_VER (AT91_PMC + 0xfc)
/* PMC Module Version [AT91CAP9 only] */
#define AT91_PMC_PCR 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/at91_ramc.h
0 → 100644
View file @
d50673ed
/*
* Header file for the Atmel RAM Controller
*
* Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
*
* Under GPLv2 only
*/
#ifndef __AT91_RAMC_H__
#define __AT91_RAMC_H__
#ifndef __ASSEMBLY__
extern
void
__iomem
*
at91_ramc_base
[];
#define at91_ramc_read(id, field) \
__raw_readl(at91_ramc_base[id] + field)
#define at91_ramc_write(id, field, value) \
__raw_writel(value, at91_ramc_base[id] + field)
#else
.
extern
at91_ramc_base
#endif
#define AT91_MEMCTRL_MC 0
#define AT91_MEMCTRL_SDRAMC 1
#define AT91_MEMCTRL_DDRSDR 2
#include <mach/at91rm9200_sdramc.h>
#include <mach/at91sam9_ddrsdr.h>
#include <mach/at91sam9_sdramc.h>
#endif
/* __AT91_RAMC_H__ */
arch/arm/mach-at91/include/mach/at91_st.h
View file @
d50673ed
...
...
@@ -16,34 +16,46 @@
#ifndef AT91_ST_H
#define AT91_ST_H
#define AT91_ST_CR (AT91_ST + 0x00)
/* Control Register */
#ifndef __ASSEMBLY__
extern
void
__iomem
*
at91_st_base
;
#define at91_st_read(field) \
__raw_readl(at91_st_base + field)
#define at91_st_write(field, value) \
__raw_writel(value, at91_st_base + field);
#else
.
extern
at91_st_base
#endif
#define AT91_ST_CR 0x00
/* Control Register */
#define AT91_ST_WDRST (1 << 0)
/* Watchdog Timer Restart */
#define AT91_ST_PIMR
(AT91_ST + 0x04)
/* Period Interval Mode Register */
#define AT91_ST_PIMR
0x04
/* Period Interval Mode Register */
#define AT91_ST_PIV (0xffff << 0)
/* Period Interval Value */
#define AT91_ST_WDMR
(AT91_ST + 0x08)
/* Watchdog Mode Register */
#define AT91_ST_WDMR
0x08
/* Watchdog Mode Register */
#define AT91_ST_WDV (0xffff << 0)
/* Watchdog Counter Value */
#define AT91_ST_RSTEN (1 << 16)
/* Reset Enable */
#define AT91_ST_EXTEN (1 << 17)
/* External Signal Assertion Enable */
#define AT91_ST_RTMR
(AT91_ST + 0x0c)
/* Real-time Mode Register */
#define AT91_ST_RTMR
0x0c
/* Real-time Mode Register */
#define AT91_ST_RTPRES (0xffff << 0)
/* Real-time Prescalar Value */
#define AT91_ST_SR
(AT91_ST + 0x10)
/* Status Register */
#define AT91_ST_SR
0x10
/* Status Register */
#define AT91_ST_PITS (1 << 0)
/* Period Interval Timer Status */
#define AT91_ST_WDOVF (1 << 1)
/* Watchdog Overflow */
#define AT91_ST_RTTINC (1 << 2)
/* Real-time Timer Increment */
#define AT91_ST_ALMS (1 << 3)
/* Alarm Status */
#define AT91_ST_IER
(AT91_ST + 0x14)
/* Interrupt Enable Register */
#define AT91_ST_IDR
(AT91_ST + 0x18)
/* Interrupt Disable Register */
#define AT91_ST_IMR
(AT91_ST + 0x1c)
/* Interrupt Mask Register */
#define AT91_ST_IER
0x14
/* Interrupt Enable Register */
#define AT91_ST_IDR
0x18
/* Interrupt Disable Register */
#define AT91_ST_IMR
0x1c
/* Interrupt Mask Register */
#define AT91_ST_RTAR
(AT91_ST + 0x20)
/* Real-time Alarm Register */
#define AT91_ST_RTAR
0x20
/* Real-time Alarm Register */
#define AT91_ST_ALMV (0xfffff << 0)
/* Alarm Value */
#define AT91_ST_CRTR
(AT91_ST + 0x24)
/* Current Real-time Register */
#define AT91_ST_CRTR
0x24
/* Current Real-time Register */
#define AT91_ST_CRTV (0xfffff << 0)
/* Current Real-Time Value */
#endif
arch/arm/mach-at91/include/mach/at91cap9.h
deleted
100644 → 0
View file @
ab15e0e8
/*
* arch/arm/mach-at91/include/mach/at91cap9.h
*
* Copyright (C) 2007 Stelian Pop <stelian.pop@leadtechdesign.com>
* Copyright (C) 2007 Lead Tech Design <www.leadtechdesign.com>
* Copyright (C) 2007 Atmel Corporation.
*
* Common definitions.
* Based on AT91CAP9 datasheet revision B (Preliminary).
*
* 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 AT91CAP9_H
#define AT91CAP9_H
/*
* Peripheral identifiers/interrupts.
*/
#define AT91CAP9_ID_PIOABCD 2
/* Parallel IO Controller A, B, C and D */
#define AT91CAP9_ID_MPB0 3
/* MP Block Peripheral 0 */
#define AT91CAP9_ID_MPB1 4
/* MP Block Peripheral 1 */
#define AT91CAP9_ID_MPB2 5
/* MP Block Peripheral 2 */
#define AT91CAP9_ID_MPB3 6
/* MP Block Peripheral 3 */
#define AT91CAP9_ID_MPB4 7
/* MP Block Peripheral 4 */
#define AT91CAP9_ID_US0 8
/* USART 0 */
#define AT91CAP9_ID_US1 9
/* USART 1 */
#define AT91CAP9_ID_US2 10
/* USART 2 */
#define AT91CAP9_ID_MCI0 11
/* Multimedia Card Interface 0 */
#define AT91CAP9_ID_MCI1 12
/* Multimedia Card Interface 1 */
#define AT91CAP9_ID_CAN 13
/* CAN */
#define AT91CAP9_ID_TWI 14
/* Two-Wire Interface */
#define AT91CAP9_ID_SPI0 15
/* Serial Peripheral Interface 0 */
#define AT91CAP9_ID_SPI1 16
/* Serial Peripheral Interface 0 */
#define AT91CAP9_ID_SSC0 17
/* Serial Synchronous Controller 0 */
#define AT91CAP9_ID_SSC1 18
/* Serial Synchronous Controller 1 */
#define AT91CAP9_ID_AC97C 19
/* AC97 Controller */
#define AT91CAP9_ID_TCB 20
/* Timer Counter 0, 1 and 2 */
#define AT91CAP9_ID_PWMC 21
/* Pulse Width Modulation Controller */
#define AT91CAP9_ID_EMAC 22
/* Ethernet */
#define AT91CAP9_ID_AESTDES 23
/* Advanced Encryption Standard, Triple DES */
#define AT91CAP9_ID_ADC 24
/* Analog-to-Digital Converter */
#define AT91CAP9_ID_ISI 25
/* Image Sensor Interface */
#define AT91CAP9_ID_LCDC 26
/* LCD Controller */
#define AT91CAP9_ID_DMA 27
/* DMA Controller */
#define AT91CAP9_ID_UDPHS 28
/* USB High Speed Device Port */
#define AT91CAP9_ID_UHP 29
/* USB Host Port */
#define AT91CAP9_ID_IRQ0 30
/* Advanced Interrupt Controller (IRQ0) */
#define AT91CAP9_ID_IRQ1 31
/* Advanced Interrupt Controller (IRQ1) */
/*
* User Peripheral physical base addresses.
*/
#define AT91CAP9_BASE_UDPHS 0xfff78000
#define AT91CAP9_BASE_TCB0 0xfff7c000
#define AT91CAP9_BASE_TC0 0xfff7c000
#define AT91CAP9_BASE_TC1 0xfff7c040
#define AT91CAP9_BASE_TC2 0xfff7c080
#define AT91CAP9_BASE_MCI0 0xfff80000
#define AT91CAP9_BASE_MCI1 0xfff84000
#define AT91CAP9_BASE_TWI 0xfff88000
#define AT91CAP9_BASE_US0 0xfff8c000
#define AT91CAP9_BASE_US1 0xfff90000
#define AT91CAP9_BASE_US2 0xfff94000
#define AT91CAP9_BASE_SSC0 0xfff98000
#define AT91CAP9_BASE_SSC1 0xfff9c000
#define AT91CAP9_BASE_AC97C 0xfffa0000
#define AT91CAP9_BASE_SPI0 0xfffa4000
#define AT91CAP9_BASE_SPI1 0xfffa8000
#define AT91CAP9_BASE_CAN 0xfffac000
#define AT91CAP9_BASE_PWMC 0xfffb8000
#define AT91CAP9_BASE_EMAC 0xfffbc000
#define AT91CAP9_BASE_ADC 0xfffc0000
#define AT91CAP9_BASE_ISI 0xfffc4000
/*
* System Peripherals (offset from AT91_BASE_SYS)
*/
#define AT91_BCRAMC (0xffffe400 - AT91_BASE_SYS)
#define AT91_DDRSDRC0 (0xffffe600 - AT91_BASE_SYS)
#define AT91_MATRIX (0xffffea00 - AT91_BASE_SYS)
#define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
#define AT91_GPBR (cpu_is_at91cap9_revB() ? \
(0xfffffd50 - AT91_BASE_SYS) : \
(0xfffffd60 - AT91_BASE_SYS))
#define AT91CAP9_BASE_ECC 0xffffe200
#define AT91CAP9_BASE_DMA 0xffffec00
#define AT91CAP9_BASE_SMC 0xffffe800
#define AT91CAP9_BASE_DBGU AT91_BASE_DBGU1
#define AT91CAP9_BASE_PIOA 0xfffff200
#define AT91CAP9_BASE_PIOB 0xfffff400
#define AT91CAP9_BASE_PIOC 0xfffff600
#define AT91CAP9_BASE_PIOD 0xfffff800
#define AT91CAP9_BASE_RSTC 0xfffffd00
#define AT91CAP9_BASE_SHDWC 0xfffffd10
#define AT91CAP9_BASE_RTT 0xfffffd20
#define AT91CAP9_BASE_PIT 0xfffffd30
#define AT91CAP9_BASE_WDT 0xfffffd40
#define AT91_USART0 AT91CAP9_BASE_US0
#define AT91_USART1 AT91CAP9_BASE_US1
#define AT91_USART2 AT91CAP9_BASE_US2
/*
* Internal Memory.
*/
#define AT91CAP9_SRAM_BASE 0x00100000
/* Internal SRAM base address */
#define AT91CAP9_SRAM_SIZE (32 * SZ_1K)
/* Internal SRAM size (32Kb) */
#define AT91CAP9_ROM_BASE 0x00400000
/* Internal ROM base address */
#define AT91CAP9_ROM_SIZE (32 * SZ_1K)
/* Internal ROM size (32Kb) */
#define AT91CAP9_LCDC_BASE 0x00500000
/* LCD Controller */
#define AT91CAP9_UDPHS_FIFO 0x00600000
/* USB High Speed Device Port */
#define AT91CAP9_UHP_BASE 0x00700000
/* USB Host controller */
#endif
arch/arm/mach-at91/include/mach/at91cap9_matrix.h
deleted
100644 → 0
View file @
ab15e0e8
/*
* arch/arm/mach-at91/include/mach/at91cap9_matrix.h
*
* Copyright (C) 2007 Stelian Pop <stelian.pop@leadtechdesign.com>
* Copyright (C) 2007 Lead Tech Design <www.leadtechdesign.com>
* Copyright (C) 2006 Atmel Corporation.
*
* Memory Controllers (MATRIX, EBI) - System peripherals registers.
* Based on AT91CAP9 datasheet revision B (Preliminary).
*
* 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 AT91CAP9_MATRIX_H
#define AT91CAP9_MATRIX_H
#define AT91_MATRIX_MCFG0 (AT91_MATRIX + 0x00)
/* Master Configuration Register 0 */
#define AT91_MATRIX_MCFG1 (AT91_MATRIX + 0x04)
/* Master Configuration Register 1 */
#define AT91_MATRIX_MCFG2 (AT91_MATRIX + 0x08)
/* Master Configuration Register 2 */
#define AT91_MATRIX_MCFG3 (AT91_MATRIX + 0x0C)
/* Master Configuration Register 3 */
#define AT91_MATRIX_MCFG4 (AT91_MATRIX + 0x10)
/* Master Configuration Register 4 */
#define AT91_MATRIX_MCFG5 (AT91_MATRIX + 0x14)
/* Master Configuration Register 5 */
#define AT91_MATRIX_MCFG6 (AT91_MATRIX + 0x18)
/* Master Configuration Register 6 */
#define AT91_MATRIX_MCFG7 (AT91_MATRIX + 0x1C)
/* Master Configuration Register 7 */
#define AT91_MATRIX_MCFG8 (AT91_MATRIX + 0x20)
/* Master Configuration Register 8 */
#define AT91_MATRIX_MCFG9 (AT91_MATRIX + 0x24)
/* Master Configuration Register 9 */
#define AT91_MATRIX_MCFG10 (AT91_MATRIX + 0x28)
/* Master Configuration Register 10 */
#define AT91_MATRIX_MCFG11 (AT91_MATRIX + 0x2C)
/* Master Configuration Register 11 */
#define AT91_MATRIX_ULBT (7 << 0)
/* Undefined Length Burst Type */
#define AT91_MATRIX_ULBT_INFINITE (0 << 0)
#define AT91_MATRIX_ULBT_SINGLE (1 << 0)
#define AT91_MATRIX_ULBT_FOUR (2 << 0)
#define AT91_MATRIX_ULBT_EIGHT (3 << 0)
#define AT91_MATRIX_ULBT_SIXTEEN (4 << 0)
#define AT91_MATRIX_SCFG0 (AT91_MATRIX + 0x40)
/* Slave Configuration Register 0 */
#define AT91_MATRIX_SCFG1 (AT91_MATRIX + 0x44)
/* Slave Configuration Register 1 */
#define AT91_MATRIX_SCFG2 (AT91_MATRIX + 0x48)
/* Slave Configuration Register 2 */
#define AT91_MATRIX_SCFG3 (AT91_MATRIX + 0x4C)
/* Slave Configuration Register 3 */
#define AT91_MATRIX_SCFG4 (AT91_MATRIX + 0x50)
/* Slave Configuration Register 4 */
#define AT91_MATRIX_SCFG5 (AT91_MATRIX + 0x54)
/* Slave Configuration Register 5 */
#define AT91_MATRIX_SCFG6 (AT91_MATRIX + 0x58)
/* Slave Configuration Register 6 */
#define AT91_MATRIX_SCFG7 (AT91_MATRIX + 0x5C)
/* Slave Configuration Register 7 */
#define AT91_MATRIX_SCFG8 (AT91_MATRIX + 0x60)
/* Slave Configuration Register 8 */
#define AT91_MATRIX_SCFG9 (AT91_MATRIX + 0x64)
/* Slave Configuration Register 9 */
#define AT91_MATRIX_SLOT_CYCLE (0xff << 0)
/* Maximum Number of Allowed Cycles for a Burst */
#define AT91_MATRIX_DEFMSTR_TYPE (3 << 16)
/* Default Master Type */
#define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16)
#define AT91_MATRIX_DEFMSTR_TYPE_LAST (1 << 16)
#define AT91_MATRIX_DEFMSTR_TYPE_FIXED (2 << 16)
#define AT91_MATRIX_FIXED_DEFMSTR (0xf << 18)
/* Fixed Index of Default Master */
#define AT91_MATRIX_ARBT (3 << 24)
/* Arbitration Type */
#define AT91_MATRIX_ARBT_ROUND_ROBIN (0 << 24)
#define AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24)
#define AT91_MATRIX_PRAS0 (AT91_MATRIX + 0x80)
/* Priority Register A for Slave 0 */
#define AT91_MATRIX_PRBS0 (AT91_MATRIX + 0x84)
/* Priority Register B for Slave 0 */
#define AT91_MATRIX_PRAS1 (AT91_MATRIX + 0x88)
/* Priority Register A for Slave 1 */
#define AT91_MATRIX_PRBS1 (AT91_MATRIX + 0x8C)
/* Priority Register B for Slave 1 */
#define AT91_MATRIX_PRAS2 (AT91_MATRIX + 0x90)
/* Priority Register A for Slave 2 */
#define AT91_MATRIX_PRBS2 (AT91_MATRIX + 0x94)
/* Priority Register B for Slave 2 */
#define AT91_MATRIX_PRAS3 (AT91_MATRIX + 0x98)
/* Priority Register A for Slave 3 */
#define AT91_MATRIX_PRBS3 (AT91_MATRIX + 0x9C)
/* Priority Register B for Slave 3 */
#define AT91_MATRIX_PRAS4 (AT91_MATRIX + 0xA0)
/* Priority Register A for Slave 4 */
#define AT91_MATRIX_PRBS4 (AT91_MATRIX + 0xA4)
/* Priority Register B for Slave 4 */
#define AT91_MATRIX_PRAS5 (AT91_MATRIX + 0xA8)
/* Priority Register A for Slave 5 */
#define AT91_MATRIX_PRBS5 (AT91_MATRIX + 0xAC)
/* Priority Register B for Slave 5 */
#define AT91_MATRIX_PRAS6 (AT91_MATRIX + 0xB0)
/* Priority Register A for Slave 6 */
#define AT91_MATRIX_PRBS6 (AT91_MATRIX + 0xB4)
/* Priority Register B for Slave 6 */
#define AT91_MATRIX_PRAS7 (AT91_MATRIX + 0xB8)
/* Priority Register A for Slave 7 */
#define AT91_MATRIX_PRBS7 (AT91_MATRIX + 0xBC)
/* Priority Register B for Slave 7 */
#define AT91_MATRIX_PRAS8 (AT91_MATRIX + 0xC0)
/* Priority Register A for Slave 8 */
#define AT91_MATRIX_PRBS8 (AT91_MATRIX + 0xC4)
/* Priority Register B for Slave 8 */
#define AT91_MATRIX_PRAS9 (AT91_MATRIX + 0xC8)
/* Priority Register A for Slave 9 */
#define AT91_MATRIX_PRBS9 (AT91_MATRIX + 0xCC)
/* Priority Register B for Slave 9 */
#define AT91_MATRIX_M0PR (3 << 0)
/* Master 0 Priority */
#define AT91_MATRIX_M1PR (3 << 4)
/* Master 1 Priority */
#define AT91_MATRIX_M2PR (3 << 8)
/* Master 2 Priority */
#define AT91_MATRIX_M3PR (3 << 12)
/* Master 3 Priority */
#define AT91_MATRIX_M4PR (3 << 16)
/* Master 4 Priority */
#define AT91_MATRIX_M5PR (3 << 20)
/* Master 5 Priority */
#define AT91_MATRIX_M6PR (3 << 24)
/* Master 6 Priority */
#define AT91_MATRIX_M7PR (3 << 28)
/* Master 7 Priority */
#define AT91_MATRIX_M8PR (3 << 0)
/* Master 8 Priority (in Register B) */
#define AT91_MATRIX_M9PR (3 << 4)
/* Master 9 Priority (in Register B) */
#define AT91_MATRIX_M10PR (3 << 8)
/* Master 10 Priority (in Register B) */
#define AT91_MATRIX_M11PR (3 << 12)
/* Master 11 Priority (in Register B) */
#define AT91_MATRIX_MRCR (AT91_MATRIX + 0x100)
/* Master Remap Control Register */
#define AT91_MATRIX_RCB0 (1 << 0)
/* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
#define AT91_MATRIX_RCB1 (1 << 1)
/* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
#define AT91_MATRIX_RCB2 (1 << 2)
#define AT91_MATRIX_RCB3 (1 << 3)
#define AT91_MATRIX_RCB4 (1 << 4)
#define AT91_MATRIX_RCB5 (1 << 5)
#define AT91_MATRIX_RCB6 (1 << 6)
#define AT91_MATRIX_RCB7 (1 << 7)
#define AT91_MATRIX_RCB8 (1 << 8)
#define AT91_MATRIX_RCB9 (1 << 9)
#define AT91_MATRIX_RCB10 (1 << 10)
#define AT91_MATRIX_RCB11 (1 << 11)
#define AT91_MPBS0_SFR (AT91_MATRIX + 0x114)
/* MPBlock Slave 0 Special Function Register */
#define AT91_MPBS1_SFR (AT91_MATRIX + 0x11C)
/* MPBlock Slave 1 Special Function Register */
#define AT91_MATRIX_UDPHS (AT91_MATRIX + 0x118)
/* USBHS Special Function Register [AT91CAP9 only] */
#define AT91_MATRIX_SELECT_UDPHS (0 << 31)
/* select High Speed UDP */
#define AT91_MATRIX_SELECT_UDP (1 << 31)
/* select standard UDP */
#define AT91_MATRIX_UDPHS_BYPASS_LOCK (1 << 30)
/* bypass lock bit */
#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_BCRAMC (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_SMARTMEDIA (1 << 3)
#define AT91_MATRIX_EBI_CS4A (1 << 4)
/* Chip Select 4 Assignment */
#define AT91_MATRIX_EBI_CS4A_SMC (0 << 4)
#define AT91_MATRIX_EBI_CS4A_SMC_CF1 (1 << 4)
#define AT91_MATRIX_EBI_CS5A (1 << 5)
/* Chip Select 5 Assignment */
#define AT91_MATRIX_EBI_CS5A_SMC (0 << 5)
#define AT91_MATRIX_EBI_CS5A_SMC_CF2 (1 << 5)
#define AT91_MATRIX_EBI_DBPUC (1 << 8)
/* Data Bus Pull-up Configuration */
#define AT91_MATRIX_EBI_DQSPDC (1 << 9)
/* Data Qualifier Strobe Pull-Down Configuration */
#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_MPBS2_SFR (AT91_MATRIX + 0x12C)
/* MPBlock Slave 2 Special Function Register */
#define AT91_MPBS3_SFR (AT91_MATRIX + 0x130)
/* MPBlock Slave 3 Special Function Register */
#define AT91_APB_SFR (AT91_MATRIX + 0x134)
/* APB Bridge Special Function Register */
#endif
arch/arm/mach-at91/include/mach/at91rm9200.h
View file @
d50673ed
...
...
@@ -77,26 +77,22 @@
/*
* System Peripherals
(offset from AT91_BASE_SYS)
* System Peripherals
*/
#define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
/* Power Management Controller */
#define AT91_ST (0xfffffd00 - AT91_BASE_SYS)
/* System Timer */
#define AT91_MC (0xffffff00 - AT91_BASE_SYS)
/* Memory Controllers */
#define AT91RM9200_BASE_DBGU AT91_BASE_DBGU0
/* Debug Unit */
#define AT91RM9200_BASE_PIOA 0xfffff400
/* PIO Controller A */
#define AT91RM9200_BASE_PIOB 0xfffff600
/* PIO Controller B */
#define AT91RM9200_BASE_PIOC 0xfffff800
/* PIO Controller C */
#define AT91RM9200_BASE_PIOD 0xfffffa00
/* PIO Controller D */
#define AT91RM9200_BASE_ST 0xfffffd00
/* System Timer */
#define AT91RM9200_BASE_RTC 0xfffffe00
/* Real-Time Clock */
#define AT91RM9200_BASE_MC 0xffffff00
/* Memory Controllers */
#define AT91_USART0 AT91RM9200_BASE_US0
#define AT91_USART1 AT91RM9200_BASE_US1
#define AT91_USART2 AT91RM9200_BASE_US2
#define AT91_USART3 AT91RM9200_BASE_US3
#define AT91_MATRIX 0
/* not supported */
/*
* Internal Memory.
*/
...
...
arch/arm/mach-at91/include/mach/at91rm9200_mc.h
View file @
d50673ed
...
...
@@ -17,10 +17,10 @@
#define AT91RM9200_MC_H
/* Memory Controller */
#define AT91_MC_RCR
(AT91_MC + 0x00)
/* MC Remap Control Register */
#define AT91_MC_RCR
0x00
/* MC Remap Control Register */
#define AT91_MC_RCB (1 << 0)
/* Remap Command Bit */
#define AT91_MC_ASR
(AT91_MC + 0x04)
/* MC Abort Status Register */
#define AT91_MC_ASR
0x04
/* MC Abort Status Register */
#define AT91_MC_UNADD (1 << 0)
/* Undefined Address Abort Status */
#define AT91_MC_MISADD (1 << 1)
/* Misaligned Address Abort Status */
#define AT91_MC_ABTSZ (3 << 8)
/* Abort Size Status */
...
...
@@ -40,16 +40,16 @@
#define AT91_MC_SVMST2 (1 << 26)
/* Saved UHP Abort Source */
#define AT91_MC_SVMST3 (1 << 27)
/* Saved EMAC Abort Source */
#define AT91_MC_AASR
(AT91_MC + 0x08)
/* MC Abort Address Status Register */
#define AT91_MC_AASR
0x08
/* MC Abort Address Status Register */
#define AT91_MC_MPR
(AT91_MC + 0x0c)
/* MC Master Priority Register */
#define AT91_MC_MPR
0x0c
/* MC Master Priority Register */
#define AT91_MPR_MSTP0 (7 << 0)
/* ARM920T Priority */
#define AT91_MPR_MSTP1 (7 << 4)
/* PDC Priority */
#define AT91_MPR_MSTP2 (7 << 8)
/* UHP Priority */
#define AT91_MPR_MSTP3 (7 << 12)
/* EMAC Priority */
/* External Bus Interface (EBI) registers */
#define AT91_EBI_CSA
(AT91_MC + 0x60)
/* Chip Select Assignment Register */
#define AT91_EBI_CSA
0x60
/* Chip Select Assignment Register */
#define AT91_EBI_CS0A (1 << 0)
/* Chip Select 0 Assignment */
#define AT91_EBI_CS0A_SMC (0 << 0)
#define AT91_EBI_CS0A_BFC (1 << 0)
...
...
@@ -66,7 +66,7 @@
#define AT91_EBI_DBPUC (1 << 0)
/* Data Bus Pull-Up Configuration */
/* Static Memory Controller (SMC) registers */
#define AT91_SMC_CSR(n) (
AT91_MC + 0x70 + ((n) * 4))
/* SMC Chip Select Register */
#define AT91_SMC_CSR(n) (
0x70 + ((n) * 4))
/* SMC Chip Select Register */
#define AT91_SMC_NWS (0x7f << 0)
/* Number of Wait States */
#define AT91_SMC_NWS_(x) ((x) << 0)
#define AT91_SMC_WSEN (1 << 7)
/* Wait State Enable */
...
...
@@ -87,52 +87,8 @@
#define AT91_SMC_RWHOLD (7 << 28)
/* Read & Write Signal Hold Time */
#define AT91_SMC_RWHOLD_(x) ((x) << 28)
/* SDRAM Controller registers */
#define AT91_SDRAMC_MR (AT91_MC + 0x90)
/* Mode Register */
#define AT91_SDRAMC_MODE (0xf << 0)
/* Command Mode */
#define AT91_SDRAMC_MODE_NORMAL (0 << 0)
#define AT91_SDRAMC_MODE_NOP (1 << 0)
#define AT91_SDRAMC_MODE_PRECHARGE (2 << 0)
#define AT91_SDRAMC_MODE_LMR (3 << 0)
#define AT91_SDRAMC_MODE_REFRESH (4 << 0)
#define AT91_SDRAMC_DBW (1 << 4)
/* Data Bus Width */
#define AT91_SDRAMC_DBW_32 (0 << 4)
#define AT91_SDRAMC_DBW_16 (1 << 4)
#define AT91_SDRAMC_TR (AT91_MC + 0x94)
/* Refresh Timer Register */
#define AT91_SDRAMC_COUNT (0xfff << 0)
/* Refresh Timer Count */
#define AT91_SDRAMC_CR (AT91_MC + 0x98)
/* Configuration Register */
#define AT91_SDRAMC_NC (3 << 0)
/* Number of Column Bits */
#define AT91_SDRAMC_NC_8 (0 << 0)
#define AT91_SDRAMC_NC_9 (1 << 0)
#define AT91_SDRAMC_NC_10 (2 << 0)
#define AT91_SDRAMC_NC_11 (3 << 0)
#define AT91_SDRAMC_NR (3 << 2)
/* Number of Row Bits */
#define AT91_SDRAMC_NR_11 (0 << 2)
#define AT91_SDRAMC_NR_12 (1 << 2)
#define AT91_SDRAMC_NR_13 (2 << 2)
#define AT91_SDRAMC_NB (1 << 4)
/* Number of Banks */
#define AT91_SDRAMC_NB_2 (0 << 4)
#define AT91_SDRAMC_NB_4 (1 << 4)
#define AT91_SDRAMC_CAS (3 << 5)
/* CAS Latency */
#define AT91_SDRAMC_CAS_2 (2 << 5)
#define AT91_SDRAMC_TWR (0xf << 7)
/* Write Recovery Delay */
#define AT91_SDRAMC_TRC (0xf << 11)
/* Row Cycle Delay */
#define AT91_SDRAMC_TRP (0xf << 15)
/* Row Precharge Delay */
#define AT91_SDRAMC_TRCD (0xf << 19)
/* Row to Column Delay */
#define AT91_SDRAMC_TRAS (0xf << 23)
/* Active to Precharge Delay */
#define AT91_SDRAMC_TXSR (0xf << 27)
/* Exit Self Refresh to Active Delay */
#define AT91_SDRAMC_SRR (AT91_MC + 0x9c)
/* Self Refresh Register */
#define AT91_SDRAMC_LPR (AT91_MC + 0xa0)
/* Low Power Register */
#define AT91_SDRAMC_IER (AT91_MC + 0xa4)
/* Interrupt Enable Register */
#define AT91_SDRAMC_IDR (AT91_MC + 0xa8)
/* Interrupt Disable Register */
#define AT91_SDRAMC_IMR (AT91_MC + 0xac)
/* Interrupt Mask Register */
#define AT91_SDRAMC_ISR (AT91_MC + 0xb0)
/* Interrupt Status Register */
/* Burst Flash Controller register */
#define AT91_BFC_MR
(AT91_MC + 0xc0)
/* Mode Register */
#define AT91_BFC_MR
0xc0
/* Mode Register */
#define AT91_BFC_BFCOM (3 << 0)
/* Burst Flash Controller Operating Mode */
#define AT91_BFC_BFCOM_DISABLED (0 << 0)
#define AT91_BFC_BFCOM_ASYNC (1 << 0)
...
...
arch/arm/mach-at91/include/mach/at91rm9200_sdramc.h
0 → 100644
View file @
d50673ed
/*
* arch/arm/mach-at91/include/mach/at91rm9200_sdramc.h
*
* Copyright (C) 2005 Ivan Kokshaysky
* Copyright (C) SAN People
*
* Memory Controllers (SDRAMC only) - System peripherals registers.
* Based on AT91RM9200 datasheet revision E.
*
* 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 AT91RM9200_SDRAMC_H
#define AT91RM9200_SDRAMC_H
/* SDRAM Controller registers */
#define AT91RM9200_SDRAMC_MR 0x90
/* Mode Register */
#define AT91RM9200_SDRAMC_MODE (0xf << 0)
/* Command Mode */
#define AT91RM9200_SDRAMC_MODE_NORMAL (0 << 0)
#define AT91RM9200_SDRAMC_MODE_NOP (1 << 0)
#define AT91RM9200_SDRAMC_MODE_PRECHARGE (2 << 0)
#define AT91RM9200_SDRAMC_MODE_LMR (3 << 0)
#define AT91RM9200_SDRAMC_MODE_REFRESH (4 << 0)
#define AT91RM9200_SDRAMC_DBW (1 << 4)
/* Data Bus Width */
#define AT91RM9200_SDRAMC_DBW_32 (0 << 4)
#define AT91RM9200_SDRAMC_DBW_16 (1 << 4)
#define AT91RM9200_SDRAMC_TR 0x94
/* Refresh Timer Register */
#define AT91RM9200_SDRAMC_COUNT (0xfff << 0)
/* Refresh Timer Count */
#define AT91RM9200_SDRAMC_CR 0x98
/* Configuration Register */
#define AT91RM9200_SDRAMC_NC (3 << 0)
/* Number of Column Bits */
#define AT91RM9200_SDRAMC_NC_8 (0 << 0)
#define AT91RM9200_SDRAMC_NC_9 (1 << 0)
#define AT91RM9200_SDRAMC_NC_10 (2 << 0)
#define AT91RM9200_SDRAMC_NC_11 (3 << 0)
#define AT91RM9200_SDRAMC_NR (3 << 2)
/* Number of Row Bits */
#define AT91RM9200_SDRAMC_NR_11 (0 << 2)
#define AT91RM9200_SDRAMC_NR_12 (1 << 2)
#define AT91RM9200_SDRAMC_NR_13 (2 << 2)
#define AT91RM9200_SDRAMC_NB (1 << 4)
/* Number of Banks */
#define AT91RM9200_SDRAMC_NB_2 (0 << 4)
#define AT91RM9200_SDRAMC_NB_4 (1 << 4)
#define AT91RM9200_SDRAMC_CAS (3 << 5)
/* CAS Latency */
#define AT91RM9200_SDRAMC_CAS_2 (2 << 5)
#define AT91RM9200_SDRAMC_TWR (0xf << 7)
/* Write Recovery Delay */
#define AT91RM9200_SDRAMC_TRC (0xf << 11)
/* Row Cycle Delay */
#define AT91RM9200_SDRAMC_TRP (0xf << 15)
/* Row Precharge Delay */
#define AT91RM9200_SDRAMC_TRCD (0xf << 19)
/* Row to Column Delay */
#define AT91RM9200_SDRAMC_TRAS (0xf << 23)
/* Active to Precharge Delay */
#define AT91RM9200_SDRAMC_TXSR (0xf << 27)
/* Exit Self Refresh to Active Delay */
#define AT91RM9200_SDRAMC_SRR 0x9c
/* Self Refresh Register */
#define AT91RM9200_SDRAMC_LPR 0xa0
/* Low Power Register */
#define AT91RM9200_SDRAMC_IER 0xa4
/* Interrupt Enable Register */
#define AT91RM9200_SDRAMC_IDR 0xa8
/* Interrupt Disable Register */
#define AT91RM9200_SDRAMC_IMR 0xac
/* Interrupt Mask Register */
#define AT91RM9200_SDRAMC_ISR 0xb0
/* Interrupt Status Register */
#endif
arch/arm/mach-at91/include/mach/at91sam9260.h
View file @
d50673ed
...
...
@@ -78,15 +78,12 @@
#define AT91SAM9260_BASE_ADC 0xfffe0000
/*
* System Peripherals
(offset from AT91_BASE_SYS)
* System Peripherals
*/
#define AT91_SDRAMC0 (0xffffea00 - AT91_BASE_SYS)
#define AT91_MATRIX (0xffffee00 - AT91_BASE_SYS)
#define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
#define AT91_GPBR (0xfffffd50 - AT91_BASE_SYS)
#define AT91SAM9260_BASE_ECC 0xffffe800
#define AT91SAM9260_BASE_SDRAMC 0xffffea00
#define AT91SAM9260_BASE_SMC 0xffffec00
#define AT91SAM9260_BASE_MATRIX 0xffffee00
#define AT91SAM9260_BASE_DBGU AT91_BASE_DBGU0
#define AT91SAM9260_BASE_PIOA 0xfffff400
#define AT91SAM9260_BASE_PIOB 0xfffff600
...
...
@@ -96,6 +93,7 @@
#define AT91SAM9260_BASE_RTT 0xfffffd20
#define AT91SAM9260_BASE_PIT 0xfffffd30
#define AT91SAM9260_BASE_WDT 0xfffffd40
#define AT91SAM9260_BASE_GPBR 0xfffffd50
#define AT91_USART0 AT91SAM9260_BASE_US0
#define AT91_USART1 AT91SAM9260_BASE_US1
...
...
@@ -115,6 +113,8 @@
#define AT91SAM9260_SRAM0_SIZE SZ_4K
/* Internal SRAM 0 size (4Kb) */
#define AT91SAM9260_SRAM1_BASE 0x00300000
/* Internal SRAM 1 base address */
#define AT91SAM9260_SRAM1_SIZE SZ_4K
/* Internal SRAM 1 size (4Kb) */
#define AT91SAM9260_SRAM_BASE 0x002FF000
/* Internal SRAM base address */
#define AT91SAM9260_SRAM_SIZE SZ_8K
/* Internal SRAM size (8Kb) */
#define AT91SAM9260_UHP_BASE 0x00500000
/* USB Host controller */
...
...
@@ -128,6 +128,8 @@
#define AT91SAM9G20_SRAM0_SIZE SZ_16K
/* Internal SRAM 0 size (16Kb) */
#define AT91SAM9G20_SRAM1_BASE 0x00300000
/* Internal SRAM 1 base address */
#define AT91SAM9G20_SRAM1_SIZE SZ_16K
/* Internal SRAM 1 size (16Kb) */
#define AT91SAM9G20_SRAM_BASE 0x002FC000
/* Internal SRAM base address */
#define AT91SAM9G20_SRAM_SIZE SZ_32K
/* Internal SRAM size (32Kb) */
#define AT91SAM9G20_UHP_BASE 0x00500000
/* USB Host controller */
...
...
arch/arm/mach-at91/include/mach/at91sam9260_matrix.h
View file @
d50673ed
...
...
@@ -15,12 +15,12 @@
#ifndef AT91SAM9260_MATRIX_H
#define AT91SAM9260_MATRIX_H
#define AT91_MATRIX_MCFG0
(AT91_MATRIX + 0x00)
/* Master Configuration Register 0 */
#define AT91_MATRIX_MCFG1
(AT91_MATRIX + 0x04)
/* Master Configuration Register 1 */
#define AT91_MATRIX_MCFG2
(AT91_MATRIX + 0x08)
/* Master Configuration Register 2 */
#define AT91_MATRIX_MCFG3
(AT91_MATRIX + 0x0C)
/* Master Configuration Register 3 */
#define AT91_MATRIX_MCFG4
(AT91_MATRIX + 0x10)
/* Master Configuration Register 4 */
#define AT91_MATRIX_MCFG5
(AT91_MATRIX + 0x14)
/* Master Configuration Register 5 */
#define AT91_MATRIX_MCFG0
0x00
/* Master Configuration Register 0 */
#define AT91_MATRIX_MCFG1
0x04
/* Master Configuration Register 1 */
#define AT91_MATRIX_MCFG2
0x08
/* Master Configuration Register 2 */
#define AT91_MATRIX_MCFG3
0x0C
/* Master Configuration Register 3 */
#define AT91_MATRIX_MCFG4
0x10
/* Master Configuration Register 4 */
#define AT91_MATRIX_MCFG5
0x14
/* Master Configuration Register 5 */
#define AT91_MATRIX_ULBT (7 << 0)
/* Undefined Length Burst Type */
#define AT91_MATRIX_ULBT_INFINITE (0 << 0)
#define AT91_MATRIX_ULBT_SINGLE (1 << 0)
...
...
@@ -28,11 +28,11 @@
#define AT91_MATRIX_ULBT_EIGHT (3 << 0)
#define AT91_MATRIX_ULBT_SIXTEEN (4 << 0)
#define AT91_MATRIX_SCFG0
(AT91_MATRIX + 0x40)
/* Slave Configuration Register 0 */
#define AT91_MATRIX_SCFG1
(AT91_MATRIX + 0x44)
/* Slave Configuration Register 1 */
#define AT91_MATRIX_SCFG2
(AT91_MATRIX + 0x48)
/* Slave Configuration Register 2 */
#define AT91_MATRIX_SCFG3
(AT91_MATRIX + 0x4C)
/* Slave Configuration Register 3 */
#define AT91_MATRIX_SCFG4
(AT91_MATRIX + 0x50)
/* Slave Configuration Register 4 */
#define AT91_MATRIX_SCFG0
0x40
/* Slave Configuration Register 0 */
#define AT91_MATRIX_SCFG1
0x44
/* Slave Configuration Register 1 */
#define AT91_MATRIX_SCFG2
0x48
/* Slave Configuration Register 2 */
#define AT91_MATRIX_SCFG3
0x4C
/* Slave Configuration Register 3 */
#define AT91_MATRIX_SCFG4
0x50
/* Slave Configuration Register 4 */
#define AT91_MATRIX_SLOT_CYCLE (0xff << 0)
/* Maximum Number of Allowed Cycles for a Burst */
#define AT91_MATRIX_DEFMSTR_TYPE (3 << 16)
/* Default Master Type */
#define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16)
...
...
@@ -43,11 +43,11 @@
#define AT91_MATRIX_ARBT_ROUND_ROBIN (0 << 24)
#define AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24)
#define AT91_MATRIX_PRAS0
(AT91_MATRIX + 0x80)
/* Priority Register A for Slave 0 */
#define AT91_MATRIX_PRAS1
(AT91_MATRIX + 0x88)
/* Priority Register A for Slave 1 */
#define AT91_MATRIX_PRAS2
(AT91_MATRIX + 0x90)
/* Priority Register A for Slave 2 */
#define AT91_MATRIX_PRAS3
(AT91_MATRIX + 0x98)
/* Priority Register A for Slave 3 */
#define AT91_MATRIX_PRAS4
(AT91_MATRIX + 0xA0)
/* Priority Register A for Slave 4 */
#define AT91_MATRIX_PRAS0
0x80
/* Priority Register A for Slave 0 */
#define AT91_MATRIX_PRAS1
0x88
/* Priority Register A for Slave 1 */
#define AT91_MATRIX_PRAS2
0x90
/* Priority Register A for Slave 2 */
#define AT91_MATRIX_PRAS3
0x98
/* Priority Register A for Slave 3 */
#define AT91_MATRIX_PRAS4
0xA0
/* Priority Register A for Slave 4 */
#define AT91_MATRIX_M0PR (3 << 0)
/* Master 0 Priority */
#define AT91_MATRIX_M1PR (3 << 4)
/* Master 1 Priority */
#define AT91_MATRIX_M2PR (3 << 8)
/* Master 2 Priority */
...
...
@@ -55,11 +55,11 @@
#define AT91_MATRIX_M4PR (3 << 16)
/* Master 4 Priority */
#define AT91_MATRIX_M5PR (3 << 20)
/* Master 5 Priority */
#define AT91_MATRIX_MRCR
(AT91_MATRIX + 0x100)
/* Master Remap Control Register */
#define AT91_MATRIX_MRCR
0x100
/* Master Remap Control Register */
#define AT91_MATRIX_RCB0 (1 << 0)
/* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
#define AT91_MATRIX_RCB1 (1 << 1)
/* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
#define AT91_MATRIX_EBICSA
(AT91_MATRIX + 0x11C)
/* EBI Chip Select Assignment Register */
#define AT91_MATRIX_EBICSA
0x11C
/* EBI Chip Select Assignment Register */
#define AT91_MATRIX_CS1A (1 << 1)
/* Chip Select 1 Assignment */
#define AT91_MATRIX_CS1A_SMC (0 << 1)
#define AT91_MATRIX_CS1A_SDRAMC (1 << 1)
...
...
arch/arm/mach-at91/include/mach/at91sam9261.h
View file @
d50673ed
...
...
@@ -63,14 +63,11 @@
/*
* System Peripherals
(offset from AT91_BASE_SYS)
* System Peripherals
*/
#define AT91_SDRAMC0 (0xffffea00 - AT91_BASE_SYS)
#define AT91_MATRIX (0xffffee00 - AT91_BASE_SYS)
#define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
#define AT91_GPBR (0xfffffd50 - AT91_BASE_SYS)
#define AT91SAM9261_BASE_SMC 0xffffec00
#define AT91SAM9261_BASE_MATRIX 0xffffee00
#define AT91SAM9261_BASE_SDRAMC 0xffffea00
#define AT91SAM9261_BASE_DBGU AT91_BASE_DBGU0
#define AT91SAM9261_BASE_PIOA 0xfffff400
#define AT91SAM9261_BASE_PIOB 0xfffff600
...
...
@@ -80,6 +77,7 @@
#define AT91SAM9261_BASE_RTT 0xfffffd20
#define AT91SAM9261_BASE_PIT 0xfffffd30
#define AT91SAM9261_BASE_WDT 0xfffffd40
#define AT91SAM9261_BASE_GPBR 0xfffffd50
#define AT91_USART0 AT91SAM9261_BASE_US0
#define AT91_USART1 AT91SAM9261_BASE_US1
...
...
arch/arm/mach-at91/include/mach/at91sam9261_matrix.h
View file @
d50673ed
...
...
@@ -15,15 +15,15 @@
#ifndef AT91SAM9261_MATRIX_H
#define AT91SAM9261_MATRIX_H
#define AT91_MATRIX_MCFG
(AT91_MATRIX + 0x00)
/* Master Configuration Register */
#define AT91_MATRIX_MCFG
0x00
/* Master Configuration Register */
#define AT91_MATRIX_RCB0 (1 << 0)
/* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
#define AT91_MATRIX_RCB1 (1 << 1)
/* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
#define AT91_MATRIX_SCFG0
(AT91_MATRIX + 0x04)
/* Slave Configuration Register 0 */
#define AT91_MATRIX_SCFG1
(AT91_MATRIX + 0x08)
/* Slave Configuration Register 1 */
#define AT91_MATRIX_SCFG2
(AT91_MATRIX + 0x0C)
/* Slave Configuration Register 2 */
#define AT91_MATRIX_SCFG3
(AT91_MATRIX + 0x10)
/* Slave Configuration Register 3 */
#define AT91_MATRIX_SCFG4
(AT91_MATRIX + 0x14)
/* Slave Configuration Register 4 */
#define AT91_MATRIX_SCFG0
0x04
/* Slave Configuration Register 0 */
#define AT91_MATRIX_SCFG1
0x08
/* Slave Configuration Register 1 */
#define AT91_MATRIX_SCFG2
0x0C
/* Slave Configuration Register 2 */
#define AT91_MATRIX_SCFG3
0x10
/* Slave Configuration Register 3 */
#define AT91_MATRIX_SCFG4
0x14
/* Slave Configuration Register 4 */
#define AT91_MATRIX_SLOT_CYCLE (0xff << 0)
/* Maximum Number of Allowed Cycles for a Burst */
#define AT91_MATRIX_DEFMSTR_TYPE (3 << 16)
/* Default Master Type */
#define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16)
...
...
@@ -31,7 +31,7 @@
#define AT91_MATRIX_DEFMSTR_TYPE_FIXED (2 << 16)
#define AT91_MATRIX_FIXED_DEFMSTR (7 << 18)
/* Fixed Index of Default Master */
#define AT91_MATRIX_TCR
(AT91_MATRIX + 0x24)
/* TCM Configuration Register */
#define AT91_MATRIX_TCR
0x24
/* TCM Configuration Register */
#define AT91_MATRIX_ITCM_SIZE (0xf << 0)
/* Size of ITCM enabled memory block */
#define AT91_MATRIX_ITCM_0 (0 << 0)
#define AT91_MATRIX_ITCM_16 (5 << 0)
...
...
@@ -43,7 +43,7 @@
#define AT91_MATRIX_DTCM_32 (6 << 4)
#define AT91_MATRIX_DTCM_64 (7 << 4)
#define AT91_MATRIX_EBICSA
(AT91_MATRIX + 0x30)
/* EBI Chip Select Assignment Register */
#define AT91_MATRIX_EBICSA
0x30
/* EBI Chip Select Assignment Register */
#define AT91_MATRIX_CS1A (1 << 1)
/* Chip Select 1 Assignment */
#define AT91_MATRIX_CS1A_SMC (0 << 1)
#define AT91_MATRIX_CS1A_SDRAMC (1 << 1)
...
...
@@ -58,7 +58,7 @@
#define AT91_MATRIX_CS5A_SMC_CF2 (1 << 5)
#define AT91_MATRIX_DBPUC (1 << 8)
/* Data Bus Pull-up Configuration */
#define AT91_MATRIX_USBPUCR
(AT91_MATRIX + 0x34)
/* USB Pad Pull-Up Control Register */
#define AT91_MATRIX_USBPUCR
0x34
/* USB Pad Pull-Up Control Register */
#define AT91_MATRIX_USBPUCR_PUON (1 << 30)
/* USB Device PAD Pull-up Enable */
#endif
arch/arm/mach-at91/include/mach/at91sam9263.h
View file @
d50673ed
...
...
@@ -72,18 +72,15 @@
#define AT91SAM9263_BASE_2DGE 0xfffc8000
/*
* System Peripherals
(offset from AT91_BASE_SYS)
* System Peripherals
*/
#define AT91_SDRAMC0 (0xffffe200 - AT91_BASE_SYS)
#define AT91_SDRAMC1 (0xffffe800 - AT91_BASE_SYS)
#define AT91_MATRIX (0xffffec00 - AT91_BASE_SYS)
#define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
#define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS)
#define AT91SAM9263_BASE_ECC0 0xffffe000
#define AT91SAM9263_BASE_SDRAMC0 0xffffe200
#define AT91SAM9263_BASE_SMC0 0xffffe400
#define AT91SAM9263_BASE_ECC1 0xffffe600
#define AT91SAM9263_BASE_SDRAMC1 0xffffe800
#define AT91SAM9263_BASE_SMC1 0xffffea00
#define AT91SAM9263_BASE_MATRIX 0xffffec00
#define AT91SAM9263_BASE_DBGU AT91_BASE_DBGU1
#define AT91SAM9263_BASE_PIOA 0xfffff200
#define AT91SAM9263_BASE_PIOB 0xfffff400
...
...
@@ -96,6 +93,7 @@
#define AT91SAM9263_BASE_PIT 0xfffffd30
#define AT91SAM9263_BASE_WDT 0xfffffd40
#define AT91SAM9263_BASE_RTT1 0xfffffd50
#define AT91SAM9263_BASE_GPBR 0xfffffd60
#define AT91_USART0 AT91SAM9263_BASE_US0
#define AT91_USART1 AT91SAM9263_BASE_US1
...
...
arch/arm/mach-at91/include/mach/at91sam9263_matrix.h
View file @
d50673ed
...
...
@@ -15,15 +15,15 @@
#ifndef AT91SAM9263_MATRIX_H
#define AT91SAM9263_MATRIX_H
#define AT91_MATRIX_MCFG0
(AT91_MATRIX + 0x00)
/* Master Configuration Register 0 */
#define AT91_MATRIX_MCFG1
(AT91_MATRIX + 0x04)
/* Master Configuration Register 1 */
#define AT91_MATRIX_MCFG2
(AT91_MATRIX + 0x08)
/* Master Configuration Register 2 */
#define AT91_MATRIX_MCFG3
(AT91_MATRIX + 0x0C)
/* Master Configuration Register 3 */
#define AT91_MATRIX_MCFG4
(AT91_MATRIX + 0x10)
/* Master Configuration Register 4 */
#define AT91_MATRIX_MCFG5
(AT91_MATRIX + 0x14)
/* Master Configuration Register 5 */
#define AT91_MATRIX_MCFG6
(AT91_MATRIX + 0x18)
/* Master Configuration Register 6 */
#define AT91_MATRIX_MCFG7
(AT91_MATRIX + 0x1C)
/* Master Configuration Register 7 */
#define AT91_MATRIX_MCFG8
(AT91_MATRIX + 0x20)
/* Master Configuration Register 8 */
#define AT91_MATRIX_MCFG0
0x00
/* Master Configuration Register 0 */
#define AT91_MATRIX_MCFG1
0x04
/* Master Configuration Register 1 */
#define AT91_MATRIX_MCFG2
0x08
/* Master Configuration Register 2 */
#define AT91_MATRIX_MCFG3
0x0C
/* Master Configuration Register 3 */
#define AT91_MATRIX_MCFG4
0x10
/* Master Configuration Register 4 */
#define AT91_MATRIX_MCFG5
0x14
/* Master Configuration Register 5 */
#define AT91_MATRIX_MCFG6
0x18
/* Master Configuration Register 6 */
#define AT91_MATRIX_MCFG7
0x1C
/* Master Configuration Register 7 */
#define AT91_MATRIX_MCFG8
0x20
/* Master Configuration Register 8 */
#define AT91_MATRIX_ULBT (7 << 0)
/* Undefined Length Burst Type */
#define AT91_MATRIX_ULBT_INFINITE (0 << 0)
#define AT91_MATRIX_ULBT_SINGLE (1 << 0)
...
...
@@ -31,14 +31,14 @@
#define AT91_MATRIX_ULBT_EIGHT (3 << 0)
#define AT91_MATRIX_ULBT_SIXTEEN (4 << 0)
#define AT91_MATRIX_SCFG0
(AT91_MATRIX + 0x40)
/* Slave Configuration Register 0 */
#define AT91_MATRIX_SCFG1
(AT91_MATRIX + 0x44)
/* Slave Configuration Register 1 */
#define AT91_MATRIX_SCFG2
(AT91_MATRIX + 0x48)
/* Slave Configuration Register 2 */
#define AT91_MATRIX_SCFG3
(AT91_MATRIX + 0x4C)
/* Slave Configuration Register 3 */
#define AT91_MATRIX_SCFG4
(AT91_MATRIX + 0x50)
/* Slave Configuration Register 4 */
#define AT91_MATRIX_SCFG5
(AT91_MATRIX + 0x54)
/* Slave Configuration Register 5 */
#define AT91_MATRIX_SCFG6
(AT91_MATRIX + 0x58)
/* Slave Configuration Register 6 */
#define AT91_MATRIX_SCFG7
(AT91_MATRIX + 0x5C)
/* Slave Configuration Register 7 */
#define AT91_MATRIX_SCFG0
0x40
/* Slave Configuration Register 0 */
#define AT91_MATRIX_SCFG1
0x44
/* Slave Configuration Register 1 */
#define AT91_MATRIX_SCFG2
0x48
/* Slave Configuration Register 2 */
#define AT91_MATRIX_SCFG3
0x4C
/* Slave Configuration Register 3 */
#define AT91_MATRIX_SCFG4
0x50
/* Slave Configuration Register 4 */
#define AT91_MATRIX_SCFG5
0x54
/* Slave Configuration Register 5 */
#define AT91_MATRIX_SCFG6
0x58
/* Slave Configuration Register 6 */
#define AT91_MATRIX_SCFG7
0x5C
/* Slave Configuration Register 7 */
#define AT91_MATRIX_SLOT_CYCLE (0xff << 0)
/* Maximum Number of Allowed Cycles for a Burst */
#define AT91_MATRIX_DEFMSTR_TYPE (3 << 16)
/* Default Master Type */
#define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16)
...
...
@@ -49,22 +49,22 @@
#define AT91_MATRIX_ARBT_ROUND_ROBIN (0 << 24)
#define AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24)
#define AT91_MATRIX_PRAS0
(AT91_MATRIX + 0x80)
/* Priority Register A for Slave 0 */
#define AT91_MATRIX_PRBS0
(AT91_MATRIX + 0x84)
/* Priority Register B for Slave 0 */
#define AT91_MATRIX_PRAS1
(AT91_MATRIX + 0x88)
/* Priority Register A for Slave 1 */
#define AT91_MATRIX_PRBS1
(AT91_MATRIX + 0x8C)
/* Priority Register B for Slave 1 */
#define AT91_MATRIX_PRAS2
(AT91_MATRIX + 0x90)
/* Priority Register A for Slave 2 */
#define AT91_MATRIX_PRBS2
(AT91_MATRIX + 0x94)
/* Priority Register B for Slave 2 */
#define AT91_MATRIX_PRAS3
(AT91_MATRIX + 0x98)
/* Priority Register A for Slave 3 */
#define AT91_MATRIX_PRBS3
(AT91_MATRIX + 0x9C)
/* Priority Register B for Slave 3 */
#define AT91_MATRIX_PRAS4
(AT91_MATRIX + 0xA0)
/* Priority Register A for Slave 4 */
#define AT91_MATRIX_PRBS4
(AT91_MATRIX + 0xA4)
/* Priority Register B for Slave 4 */
#define AT91_MATRIX_PRAS5
(AT91_MATRIX + 0xA8)
/* Priority Register A for Slave 5 */
#define AT91_MATRIX_PRBS5
(AT91_MATRIX + 0xAC)
/* Priority Register B for Slave 5 */
#define AT91_MATRIX_PRAS6
(AT91_MATRIX + 0xB0)
/* Priority Register A for Slave 6 */
#define AT91_MATRIX_PRBS6
(AT91_MATRIX + 0xB4)
/* Priority Register B for Slave 6 */
#define AT91_MATRIX_PRAS7
(AT91_MATRIX + 0xB8)
/* Priority Register A for Slave 7 */
#define AT91_MATRIX_PRBS7
(AT91_MATRIX + 0xBC)
/* Priority Register B for Slave 7 */
#define AT91_MATRIX_PRAS0
0x80
/* Priority Register A for Slave 0 */
#define AT91_MATRIX_PRBS0
0x84
/* Priority Register B for Slave 0 */
#define AT91_MATRIX_PRAS1
0x88
/* Priority Register A for Slave 1 */
#define AT91_MATRIX_PRBS1
0x8C
/* Priority Register B for Slave 1 */
#define AT91_MATRIX_PRAS2
0x90
/* Priority Register A for Slave 2 */
#define AT91_MATRIX_PRBS2
0x94
/* Priority Register B for Slave 2 */
#define AT91_MATRIX_PRAS3
0x98
/* Priority Register A for Slave 3 */
#define AT91_MATRIX_PRBS3
0x9C
/* Priority Register B for Slave 3 */
#define AT91_MATRIX_PRAS4
0xA0
/* Priority Register A for Slave 4 */
#define AT91_MATRIX_PRBS4
0xA4
/* Priority Register B for Slave 4 */
#define AT91_MATRIX_PRAS5
0xA8
/* Priority Register A for Slave 5 */
#define AT91_MATRIX_PRBS5
0xAC
/* Priority Register B for Slave 5 */
#define AT91_MATRIX_PRAS6
0xB0
/* Priority Register A for Slave 6 */
#define AT91_MATRIX_PRBS6
0xB4
/* Priority Register B for Slave 6 */
#define AT91_MATRIX_PRAS7
0xB8
/* Priority Register A for Slave 7 */
#define AT91_MATRIX_PRBS7
0xBC
/* Priority Register B for Slave 7 */
#define AT91_MATRIX_M0PR (3 << 0)
/* Master 0 Priority */
#define AT91_MATRIX_M1PR (3 << 4)
/* Master 1 Priority */
#define AT91_MATRIX_M2PR (3 << 8)
/* Master 2 Priority */
...
...
@@ -75,7 +75,7 @@
#define AT91_MATRIX_M7PR (3 << 28)
/* Master 7 Priority */
#define AT91_MATRIX_M8PR (3 << 0)
/* Master 8 Priority (in Register B) */
#define AT91_MATRIX_MRCR
(AT91_MATRIX + 0x100)
/* Master Remap Control Register */
#define AT91_MATRIX_MRCR
0x100
/* Master Remap Control Register */
#define AT91_MATRIX_RCB0 (1 << 0)
/* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
#define AT91_MATRIX_RCB1 (1 << 1)
/* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
#define AT91_MATRIX_RCB2 (1 << 2)
...
...
@@ -86,7 +86,7 @@
#define AT91_MATRIX_RCB7 (1 << 7)
#define AT91_MATRIX_RCB8 (1 << 8)
#define AT91_MATRIX_TCMR
(AT91_MATRIX + 0x114)
/* TCM Configuration Register */
#define AT91_MATRIX_TCMR
0x114
/* TCM Configuration Register */
#define AT91_MATRIX_ITCM_SIZE (0xf << 0)
/* Size of ITCM enabled memory block */
#define AT91_MATRIX_ITCM_0 (0 << 0)
#define AT91_MATRIX_ITCM_16 (5 << 0)
...
...
@@ -96,7 +96,7 @@
#define AT91_MATRIX_DTCM_16 (5 << 4)
#define AT91_MATRIX_DTCM_32 (6 << 4)
#define AT91_MATRIX_EBI0CSA
(AT91_MATRIX + 0x120)
/* EBI0 Chip Select Assignment Register */
#define AT91_MATRIX_EBI0CSA
0x120
/* EBI0 Chip Select Assignment Register */
#define AT91_MATRIX_EBI0_CS1A (1 << 1)
/* Chip Select 1 Assignment */
#define AT91_MATRIX_EBI0_CS1A_SMC (0 << 1)
#define AT91_MATRIX_EBI0_CS1A_SDRAMC (1 << 1)
...
...
@@ -114,7 +114,7 @@
#define AT91_MATRIX_EBI0_VDDIOMSEL_1_8V (0 << 16)
#define AT91_MATRIX_EBI0_VDDIOMSEL_3_3V (1 << 16)
#define AT91_MATRIX_EBI1CSA
(AT91_MATRIX + 0x124)
/* EBI1 Chip Select Assignment Register */
#define AT91_MATRIX_EBI1CSA
0x124
/* EBI1 Chip Select Assignment Register */
#define AT91_MATRIX_EBI1_CS1A (1 << 1)
/* Chip Select 1 Assignment */
#define AT91_MATRIX_EBI1_CS1A_SMC (0 << 1)
#define AT91_MATRIX_EBI1_CS1A_SDRAMC (1 << 1)
...
...
arch/arm/mach-at91/include/mach/at91sam9_ddrsdr.h
View file @
d50673ed
...
...
@@ -59,7 +59,6 @@
#define AT91_DDRSDRC_TRP (0xf << 16)
/* Row precharge delay */
#define AT91_DDRSDRC_TRRD (0xf << 20)
/* Active BankA to BankB */
#define AT91_DDRSDRC_TWTR (0x7 << 24)
/* Internal Write to Read delay */
#define AT91CAP9_DDRSDRC_TWTR (1 << 24)
/* Internal Write to Read delay */
#define AT91_DDRSDRC_RED_WRRD (0x1 << 27)
/* Reduce Write to Read Delay [SAM9 Only] */
#define AT91_DDRSDRC_TMRD (0xf << 28)
/* Load mode to active/refresh delay */
...
...
@@ -76,7 +75,6 @@
#define AT91_DDRSDRC_TRTP (0x7 << 12)
/* Read to Precharge delay */
#define AT91_DDRSDRC_LPR 0x1C
/* Low Power Register */
#define AT91CAP9_DDRSDRC_LPR 0x18
/* Low Power Register */
#define AT91_DDRSDRC_LPCB (3 << 0)
/* Low-power Configurations */
#define AT91_DDRSDRC_LPCB_DISABLE 0
#define AT91_DDRSDRC_LPCB_SELF_REFRESH 1
...
...
@@ -94,11 +92,9 @@
#define AT91_DDRSDRC_UPD_MR (3 << 20)
/* Update load mode register and extended mode register */
#define AT91_DDRSDRC_MDR 0x20
/* Memory Device Register */
#define AT91CAP9_DDRSDRC_MDR 0x1C
/* Memory Device Register */
#define AT91_DDRSDRC_MD (3 << 0)
/* Memory Device Type */
#define AT91_DDRSDRC_MD_SDR 0
#define AT91_DDRSDRC_MD_LOW_POWER_SDR 1
#define AT91CAP9_DDRSDRC_MD_DDR 2
#define AT91_DDRSDRC_MD_LOW_POWER_DDR 3
#define AT91_DDRSDRC_MD_DDR2 6
/* [SAM9 Only] */
#define AT91_DDRSDRC_DBW (1 << 4)
/* Data Bus Width */
...
...
@@ -106,16 +102,10 @@
#define AT91_DDRSDRC_DBW_16BITS (1 << 4)
#define AT91_DDRSDRC_DLL 0x24
/* DLL Information Register */
#define AT91CAP9_DDRSDRC_DLL 0x20
/* DLL Information Register */
#define AT91_DDRSDRC_MDINC (1 << 0)
/* Master Delay increment */
#define AT91_DDRSDRC_MDDEC (1 << 1)
/* Master Delay decrement */
#define AT91_DDRSDRC_MDOVF (1 << 2)
/* Master Delay Overflow */
#define AT91CAP9_DDRSDRC_SDCOVF (1 << 3)
/* Slave Delay Correction Overflow */
#define AT91CAP9_DDRSDRC_SDCUDF (1 << 4)
/* Slave Delay Correction Underflow */
#define AT91CAP9_DDRSDRC_SDERF (1 << 5)
/* Slave Delay Correction error */
#define AT91_DDRSDRC_MDVAL (0xff << 8)
/* Master Delay value */
#define AT91CAP9_DDRSDRC_SDVAL (0xff << 16)
/* Slave Delay value */
#define AT91CAP9_DDRSDRC_SDCVAL (0xff << 24)
/* Slave Delay Correction value */
#define AT91_DDRSDRC_HS 0x2C
/* High Speed Register [SAM9 Only] */
#define AT91_DDRSDRC_DIS_ATCP_RD (1 << 2)
/* Anticip read access is disabled */
...
...
@@ -131,10 +121,4 @@
#define AT91_DDRSDRC_WPVS (1 << 0)
/* Write protect violation status */
#define AT91_DDRSDRC_WPVSRC (0xffff << 8)
/* Write protect violation source */
/* Register access macros */
#define at91_ramc_read(num, reg) \
at91_sys_read(AT91_DDRSDRC##num + reg)
#define at91_ramc_write(num, reg, value) \
at91_sys_write(AT91_DDRSDRC##num + reg, value)
#endif
arch/arm/mach-at91/include/mach/at91sam9_sdramc.h
View file @
d50673ed
...
...
@@ -82,10 +82,4 @@
#define AT91_SDRAMC_MD_SDRAM 0
#define AT91_SDRAMC_MD_LOW_POWER_SDRAM 1
/* Register access macros */
#define at91_ramc_read(num, reg) \
at91_sys_read(AT91_SDRAMC##num + reg)
#define at91_ramc_write(num, reg, value) \
at91_sys_write(AT91_SDRAMC##num + reg, value)
#endif
arch/arm/mach-at91/include/mach/at91sam9g45.h
View file @
d50673ed
...
...
@@ -84,17 +84,14 @@
#define AT91SAM9G45_BASE_TC5 0xfffd4080
/*
* System Peripherals
(offset from AT91_BASE_SYS)
* System Peripherals
*/
#define AT91_DDRSDRC1 (0xffffe400 - AT91_BASE_SYS)
#define AT91_DDRSDRC0 (0xffffe600 - AT91_BASE_SYS)
#define AT91_MATRIX (0xffffea00 - AT91_BASE_SYS)
#define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
#define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS)
#define AT91SAM9G45_BASE_ECC 0xffffe200
#define AT91SAM9G45_BASE_DDRSDRC1 0xffffe400
#define AT91SAM9G45_BASE_DDRSDRC0 0xffffe600
#define AT91SAM9G45_BASE_DMA 0xffffec00
#define AT91SAM9G45_BASE_SMC 0xffffe800
#define AT91SAM9G45_BASE_MATRIX 0xffffea00
#define AT91SAM9G45_BASE_DBGU AT91_BASE_DBGU1
#define AT91SAM9G45_BASE_PIOA 0xfffff200
#define AT91SAM9G45_BASE_PIOB 0xfffff400
...
...
@@ -107,6 +104,7 @@
#define AT91SAM9G45_BASE_PIT 0xfffffd30
#define AT91SAM9G45_BASE_WDT 0xfffffd40
#define AT91SAM9G45_BASE_RTC 0xfffffdb0
#define AT91SAM9G45_BASE_GPBR 0xfffffd60
#define AT91_USART0 AT91SAM9G45_BASE_US0
#define AT91_USART1 AT91SAM9G45_BASE_US1
...
...
arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h
View file @
d50673ed
...
...
@@ -15,18 +15,18 @@
#ifndef AT91SAM9G45_MATRIX_H
#define AT91SAM9G45_MATRIX_H
#define AT91_MATRIX_MCFG0
(AT91_MATRIX + 0x00)
/* Master Configuration Register 0 */
#define AT91_MATRIX_MCFG1
(AT91_MATRIX + 0x04)
/* Master Configuration Register 1 */
#define AT91_MATRIX_MCFG2
(AT91_MATRIX + 0x08)
/* Master Configuration Register 2 */
#define AT91_MATRIX_MCFG3
(AT91_MATRIX + 0x0C)
/* Master Configuration Register 3 */
#define AT91_MATRIX_MCFG4
(AT91_MATRIX + 0x10)
/* Master Configuration Register 4 */
#define AT91_MATRIX_MCFG5
(AT91_MATRIX + 0x14)
/* Master Configuration Register 5 */
#define AT91_MATRIX_MCFG6
(AT91_MATRIX + 0x18)
/* Master Configuration Register 6 */
#define AT91_MATRIX_MCFG7
(AT91_MATRIX + 0x1C)
/* Master Configuration Register 7 */
#define AT91_MATRIX_MCFG8
(AT91_MATRIX + 0x20)
/* Master Configuration Register 8 */
#define AT91_MATRIX_MCFG9
(AT91_MATRIX + 0x24)
/* Master Configuration Register 9 */
#define AT91_MATRIX_MCFG10
(AT91_MATRIX + 0x28)
/* Master Configuration Register 10 */
#define AT91_MATRIX_MCFG11
(AT91_MATRIX + 0x2C)
/* Master Configuration Register 11 */
#define AT91_MATRIX_MCFG0
0x00
/* Master Configuration Register 0 */
#define AT91_MATRIX_MCFG1
0x04
/* Master Configuration Register 1 */
#define AT91_MATRIX_MCFG2
0x08
/* Master Configuration Register 2 */
#define AT91_MATRIX_MCFG3
0x0C
/* Master Configuration Register 3 */
#define AT91_MATRIX_MCFG4
0x10
/* Master Configuration Register 4 */
#define AT91_MATRIX_MCFG5
0x14
/* Master Configuration Register 5 */
#define AT91_MATRIX_MCFG6
0x18
/* Master Configuration Register 6 */
#define AT91_MATRIX_MCFG7
0x1C
/* Master Configuration Register 7 */
#define AT91_MATRIX_MCFG8
0x20
/* Master Configuration Register 8 */
#define AT91_MATRIX_MCFG9
0x24
/* Master Configuration Register 9 */
#define AT91_MATRIX_MCFG10
0x28
/* Master Configuration Register 10 */
#define AT91_MATRIX_MCFG11
0x2C
/* Master Configuration Register 11 */
#define AT91_MATRIX_ULBT (7 << 0)
/* Undefined Length Burst Type */
#define AT91_MATRIX_ULBT_INFINITE (0 << 0)
#define AT91_MATRIX_ULBT_SINGLE (1 << 0)
...
...
@@ -37,14 +37,14 @@
#define AT91_MATRIX_ULBT_SIXTYFOUR (6 << 0)
#define AT91_MATRIX_ULBT_128 (7 << 0)
#define AT91_MATRIX_SCFG0
(AT91_MATRIX + 0x40)
/* Slave Configuration Register 0 */
#define AT91_MATRIX_SCFG1
(AT91_MATRIX + 0x44)
/* Slave Configuration Register 1 */
#define AT91_MATRIX_SCFG2
(AT91_MATRIX + 0x48)
/* Slave Configuration Register 2 */
#define AT91_MATRIX_SCFG3
(AT91_MATRIX + 0x4C)
/* Slave Configuration Register 3 */
#define AT91_MATRIX_SCFG4
(AT91_MATRIX + 0x50)
/* Slave Configuration Register 4 */
#define AT91_MATRIX_SCFG5
(AT91_MATRIX + 0x54)
/* Slave Configuration Register 5 */
#define AT91_MATRIX_SCFG6
(AT91_MATRIX + 0x58)
/* Slave Configuration Register 6 */
#define AT91_MATRIX_SCFG7
(AT91_MATRIX + 0x5C)
/* Slave Configuration Register 7 */
#define AT91_MATRIX_SCFG0
0x40
/* Slave Configuration Register 0 */
#define AT91_MATRIX_SCFG1
0x44
/* Slave Configuration Register 1 */
#define AT91_MATRIX_SCFG2
0x48
/* Slave Configuration Register 2 */
#define AT91_MATRIX_SCFG3
0x4C
/* Slave Configuration Register 3 */
#define AT91_MATRIX_SCFG4
0x50
/* Slave Configuration Register 4 */
#define AT91_MATRIX_SCFG5
0x54
/* Slave Configuration Register 5 */
#define AT91_MATRIX_SCFG6
0x58
/* Slave Configuration Register 6 */
#define AT91_MATRIX_SCFG7
0x5C
/* Slave Configuration Register 7 */
#define AT91_MATRIX_SLOT_CYCLE (0x1ff << 0)
/* Maximum Number of Allowed Cycles for a Burst */
#define AT91_MATRIX_DEFMSTR_TYPE (3 << 16)
/* Default Master Type */
#define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16)
...
...
@@ -52,22 +52,22 @@
#define AT91_MATRIX_DEFMSTR_TYPE_FIXED (2 << 16)
#define AT91_MATRIX_FIXED_DEFMSTR (0xf << 18)
/* Fixed Index of Default Master */
#define AT91_MATRIX_PRAS0
(AT91_MATRIX + 0x80)
/* Priority Register A for Slave 0 */
#define AT91_MATRIX_PRBS0
(AT91_MATRIX + 0x84)
/* Priority Register B for Slave 0 */
#define AT91_MATRIX_PRAS1
(AT91_MATRIX + 0x88)
/* Priority Register A for Slave 1 */
#define AT91_MATRIX_PRBS1
(AT91_MATRIX + 0x8C)
/* Priority Register B for Slave 1 */
#define AT91_MATRIX_PRAS2
(AT91_MATRIX + 0x90)
/* Priority Register A for Slave 2 */
#define AT91_MATRIX_PRBS2
(AT91_MATRIX + 0x94)
/* Priority Register B for Slave 2 */
#define AT91_MATRIX_PRAS3
(AT91_MATRIX + 0x98)
/* Priority Register A for Slave 3 */
#define AT91_MATRIX_PRBS3
(AT91_MATRIX + 0x9C)
/* Priority Register B for Slave 3 */
#define AT91_MATRIX_PRAS4
(AT91_MATRIX + 0xA0)
/* Priority Register A for Slave 4 */
#define AT91_MATRIX_PRBS4
(AT91_MATRIX + 0xA4)
/* Priority Register B for Slave 4 */
#define AT91_MATRIX_PRAS5
(AT91_MATRIX + 0xA8)
/* Priority Register A for Slave 5 */
#define AT91_MATRIX_PRBS5
(AT91_MATRIX + 0xAC)
/* Priority Register B for Slave 5 */
#define AT91_MATRIX_PRAS6
(AT91_MATRIX + 0xB0)
/* Priority Register A for Slave 6 */
#define AT91_MATRIX_PRBS6
(AT91_MATRIX + 0xB4)
/* Priority Register B for Slave 6 */
#define AT91_MATRIX_PRAS7
(AT91_MATRIX + 0xB8)
/* Priority Register A for Slave 7 */
#define AT91_MATRIX_PRBS7
(AT91_MATRIX + 0xBC)
/* Priority Register B for Slave 7 */
#define AT91_MATRIX_PRAS0
0x80
/* Priority Register A for Slave 0 */
#define AT91_MATRIX_PRBS0
0x84
/* Priority Register B for Slave 0 */
#define AT91_MATRIX_PRAS1
0x88
/* Priority Register A for Slave 1 */
#define AT91_MATRIX_PRBS1
0x8C
/* Priority Register B for Slave 1 */
#define AT91_MATRIX_PRAS2
0x90
/* Priority Register A for Slave 2 */
#define AT91_MATRIX_PRBS2
0x94
/* Priority Register B for Slave 2 */
#define AT91_MATRIX_PRAS3
0x98
/* Priority Register A for Slave 3 */
#define AT91_MATRIX_PRBS3
0x9C
/* Priority Register B for Slave 3 */
#define AT91_MATRIX_PRAS4
0xA0
/* Priority Register A for Slave 4 */
#define AT91_MATRIX_PRBS4
0xA4
/* Priority Register B for Slave 4 */
#define AT91_MATRIX_PRAS5
0xA8
/* Priority Register A for Slave 5 */
#define AT91_MATRIX_PRBS5
0xAC
/* Priority Register B for Slave 5 */
#define AT91_MATRIX_PRAS6
0xB0
/* Priority Register A for Slave 6 */
#define AT91_MATRIX_PRBS6
0xB4
/* Priority Register B for Slave 6 */
#define AT91_MATRIX_PRAS7
0xB8
/* Priority Register A for Slave 7 */
#define AT91_MATRIX_PRBS7
0xBC
/* Priority Register B for Slave 7 */
#define AT91_MATRIX_M0PR (3 << 0)
/* Master 0 Priority */
#define AT91_MATRIX_M1PR (3 << 4)
/* Master 1 Priority */
#define AT91_MATRIX_M2PR (3 << 8)
/* Master 2 Priority */
...
...
@@ -81,7 +81,7 @@
#define AT91_MATRIX_M10PR (3 << 8)
/* Master 10 Priority (in Register B) */
#define AT91_MATRIX_M11PR (3 << 12)
/* Master 11 Priority (in Register B) */
#define AT91_MATRIX_MRCR
(AT91_MATRIX + 0x100)
/* Master Remap Control Register */
#define AT91_MATRIX_MRCR
0x100
/* Master Remap Control Register */
#define AT91_MATRIX_RCB0 (1 << 0)
/* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
#define AT91_MATRIX_RCB1 (1 << 1)
/* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
#define AT91_MATRIX_RCB2 (1 << 2)
...
...
@@ -95,7 +95,7 @@
#define AT91_MATRIX_RCB10 (1 << 10)
#define AT91_MATRIX_RCB11 (1 << 11)
#define AT91_MATRIX_TCMR
(AT91_MATRIX + 0x110)
/* TCM Configuration Register */
#define AT91_MATRIX_TCMR
0x110
/* TCM Configuration Register */
#define AT91_MATRIX_ITCM_SIZE (0xf << 0)
/* Size of ITCM enabled memory block */
#define AT91_MATRIX_ITCM_0 (0 << 0)
#define AT91_MATRIX_ITCM_32 (6 << 0)
...
...
@@ -107,12 +107,12 @@
#define AT91_MATRIX_TCM_NO_WS (0x0 << 11)
#define AT91_MATRIX_TCM_ONE_WS (0x1 << 11)
#define AT91_MATRIX_VIDEO
(AT91_MATRIX + 0x118)
/* Video Mode Configuration Register */
#define AT91_MATRIX_VIDEO
0x118
/* Video Mode Configuration Register */
#define AT91C_VDEC_SEL (0x1 << 0)
/* Video Mode Selection */
#define AT91C_VDEC_SEL_OFF (0 << 0)
#define AT91C_VDEC_SEL_ON (1 << 0)
#define AT91_MATRIX_EBICSA
(AT91_MATRIX + 0x128)
/* EBI Chip Select Assignment Register */
#define AT91_MATRIX_EBICSA
0x128
/* 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)
...
...
@@ -138,13 +138,13 @@
#define AT91_MATRIX_EBI_DDR_IOSR_REDUCED (0 << 18)
#define AT91_MATRIX_EBI_DDR_IOSR_NORMAL (1 << 18)
#define AT91_MATRIX_WPMR
(AT91_MATRIX + 0x1E4)
/* Write Protect Mode Register */
#define AT91_MATRIX_WPMR
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
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)
...
...
arch/arm/mach-at91/include/mach/at91sam9rl.h
View file @
d50673ed
...
...
@@ -69,15 +69,13 @@
/*
* System Peripherals (offset from AT91_BASE_SYS)
*/
#define AT91_SDRAMC0 (0xffffea00 - AT91_BASE_SYS)
#define AT91_MATRIX (0xffffee00 - AT91_BASE_SYS)
#define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
#define AT91_SCKCR (0xfffffd50 - AT91_BASE_SYS)
#define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS)
#define AT91SAM9RL_BASE_DMA 0xffffe600
#define AT91SAM9RL_BASE_ECC 0xffffe800
#define AT91SAM9RL_BASE_SDRAMC 0xffffea00
#define AT91SAM9RL_BASE_SMC 0xffffec00
#define AT91SAM9RL_BASE_MATRIX 0xffffee00
#define AT91SAM9RL_BASE_DBGU AT91_BASE_DBGU0
#define AT91SAM9RL_BASE_PIOA 0xfffff400
#define AT91SAM9RL_BASE_PIOB 0xfffff600
...
...
@@ -88,6 +86,7 @@
#define AT91SAM9RL_BASE_RTT 0xfffffd20
#define AT91SAM9RL_BASE_PIT 0xfffffd30
#define AT91SAM9RL_BASE_WDT 0xfffffd40
#define AT91SAM9RL_BASE_GPBR 0xfffffd60
#define AT91SAM9RL_BASE_RTC 0xfffffe00
#define AT91_USART0 AT91SAM9RL_BASE_US0
...
...
arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h
View file @
d50673ed
...
...
@@ -14,12 +14,12 @@
#ifndef AT91SAM9RL_MATRIX_H
#define AT91SAM9RL_MATRIX_H
#define AT91_MATRIX_MCFG0
(AT91_MATRIX + 0x00)
/* Master Configuration Register 0 */
#define AT91_MATRIX_MCFG1
(AT91_MATRIX + 0x04)
/* Master Configuration Register 1 */
#define AT91_MATRIX_MCFG2
(AT91_MATRIX + 0x08)
/* Master Configuration Register 2 */
#define AT91_MATRIX_MCFG3
(AT91_MATRIX + 0x0C)
/* Master Configuration Register 3 */
#define AT91_MATRIX_MCFG4
(AT91_MATRIX + 0x10)
/* Master Configuration Register 4 */
#define AT91_MATRIX_MCFG5
(AT91_MATRIX + 0x14)
/* Master Configuration Register 5 */
#define AT91_MATRIX_MCFG0
0x00
/* Master Configuration Register 0 */
#define AT91_MATRIX_MCFG1
0x04
/* Master Configuration Register 1 */
#define AT91_MATRIX_MCFG2
0x08
/* Master Configuration Register 2 */
#define AT91_MATRIX_MCFG3
0x0C
/* Master Configuration Register 3 */
#define AT91_MATRIX_MCFG4
0x10
/* Master Configuration Register 4 */
#define AT91_MATRIX_MCFG5
0x14
/* Master Configuration Register 5 */
#define AT91_MATRIX_ULBT (7 << 0)
/* Undefined Length Burst Type */
#define AT91_MATRIX_ULBT_INFINITE (0 << 0)
#define AT91_MATRIX_ULBT_SINGLE (1 << 0)
...
...
@@ -27,12 +27,12 @@
#define AT91_MATRIX_ULBT_EIGHT (3 << 0)
#define AT91_MATRIX_ULBT_SIXTEEN (4 << 0)
#define AT91_MATRIX_SCFG0
(AT91_MATRIX + 0x40)
/* Slave Configuration Register 0 */
#define AT91_MATRIX_SCFG1
(AT91_MATRIX + 0x44)
/* Slave Configuration Register 1 */
#define AT91_MATRIX_SCFG2
(AT91_MATRIX + 0x48)
/* Slave Configuration Register 2 */
#define AT91_MATRIX_SCFG3
(AT91_MATRIX + 0x4C)
/* Slave Configuration Register 3 */
#define AT91_MATRIX_SCFG4
(AT91_MATRIX + 0x50)
/* Slave Configuration Register 4 */
#define AT91_MATRIX_SCFG5
(AT91_MATRIX + 0x54)
/* Slave Configuration Register 5 */
#define AT91_MATRIX_SCFG0
0x40
/* Slave Configuration Register 0 */
#define AT91_MATRIX_SCFG1
0x44
/* Slave Configuration Register 1 */
#define AT91_MATRIX_SCFG2
0x48
/* Slave Configuration Register 2 */
#define AT91_MATRIX_SCFG3
0x4C
/* Slave Configuration Register 3 */
#define AT91_MATRIX_SCFG4
0x50
/* Slave Configuration Register 4 */
#define AT91_MATRIX_SCFG5
0x54
/* Slave Configuration Register 5 */
#define AT91_MATRIX_SLOT_CYCLE (0xff << 0)
/* Maximum Number of Allowed Cycles for a Burst */
#define AT91_MATRIX_DEFMSTR_TYPE (3 << 16)
/* Default Master Type */
#define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16)
...
...
@@ -43,12 +43,12 @@
#define AT91_MATRIX_ARBT_ROUND_ROBIN (0 << 24)
#define AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24)
#define AT91_MATRIX_PRAS0
(AT91_MATRIX + 0x80)
/* Priority Register A for Slave 0 */
#define AT91_MATRIX_PRAS1
(AT91_MATRIX + 0x88)
/* Priority Register A for Slave 1 */
#define AT91_MATRIX_PRAS2
(AT91_MATRIX + 0x90)
/* Priority Register A for Slave 2 */
#define AT91_MATRIX_PRAS3
(AT91_MATRIX + 0x98)
/* Priority Register A for Slave 3 */
#define AT91_MATRIX_PRAS4
(AT91_MATRIX + 0xA0)
/* Priority Register A for Slave 4 */
#define AT91_MATRIX_PRAS5
(AT91_MATRIX + 0xA8)
/* Priority Register A for Slave 5 */
#define AT91_MATRIX_PRAS0
0x80
/* Priority Register A for Slave 0 */
#define AT91_MATRIX_PRAS1
0x88
/* Priority Register A for Slave 1 */
#define AT91_MATRIX_PRAS2
0x90
/* Priority Register A for Slave 2 */
#define AT91_MATRIX_PRAS3
0x98
/* Priority Register A for Slave 3 */
#define AT91_MATRIX_PRAS4
0xA0
/* Priority Register A for Slave 4 */
#define AT91_MATRIX_PRAS5
0xA8
/* Priority Register A for Slave 5 */
#define AT91_MATRIX_M0PR (3 << 0)
/* Master 0 Priority */
#define AT91_MATRIX_M1PR (3 << 4)
/* Master 1 Priority */
#define AT91_MATRIX_M2PR (3 << 8)
/* Master 2 Priority */
...
...
@@ -56,7 +56,7 @@
#define AT91_MATRIX_M4PR (3 << 16)
/* Master 4 Priority */
#define AT91_MATRIX_M5PR (3 << 20)
/* Master 5 Priority */
#define AT91_MATRIX_MRCR
(AT91_MATRIX + 0x100)
/* Master Remap Control Register */
#define AT91_MATRIX_MRCR
0x100
/* Master Remap Control Register */
#define AT91_MATRIX_RCB0 (1 << 0)
/* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
#define AT91_MATRIX_RCB1 (1 << 1)
/* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
#define AT91_MATRIX_RCB2 (1 << 2)
...
...
@@ -64,7 +64,7 @@
#define AT91_MATRIX_RCB4 (1 << 4)
#define AT91_MATRIX_RCB5 (1 << 5)
#define AT91_MATRIX_TCMR
(AT91_MATRIX + 0x114)
/* TCM Configuration Register */
#define AT91_MATRIX_TCMR
0x114
/* TCM Configuration Register */
#define AT91_MATRIX_ITCM_SIZE (0xf << 0)
/* Size of ITCM enabled memory block */
#define AT91_MATRIX_ITCM_0 (0 << 0)
#define AT91_MATRIX_ITCM_16 (5 << 0)
...
...
@@ -74,7 +74,7 @@
#define AT91_MATRIX_DTCM_16 (5 << 4)
#define AT91_MATRIX_DTCM_32 (6 << 4)
#define AT91_MATRIX_EBICSA
(AT91_MATRIX + 0x120)
/* EBI0 Chip Select Assignment Register */
#define AT91_MATRIX_EBICSA
0x120
/* EBI0 Chip Select Assignment Register */
#define AT91_MATRIX_CS1A (1 << 1)
/* Chip Select 1 Assignment */
#define AT91_MATRIX_CS1A_SMC (0 << 1)
#define AT91_MATRIX_CS1A_SDRAMC (1 << 1)
...
...
arch/arm/mach-at91/include/mach/at91sam9x5.h
0 → 100644
View file @
d50673ed
/*
* 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
*/
#define AT91SAM9X5_BASE_DDRSDRC0 0xffffe800
/*
* 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 @
d50673ed
/*
* 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/at91x40.h
View file @
d50673ed
...
...
@@ -28,18 +28,18 @@
#define AT91X40_ID_IRQ2 18
/* External IRQ 2 */
/*
* System Peripherals
(offset from AT91_BASE_SYS)
* System Peripherals
*/
#define AT91_BASE_SYS 0xffc00000
#define AT91_EBI
(0xffe00000 - AT91_BASE_SYS)
/* External Bus Interface */
#define AT91_SF
(0xfff00000 - AT91_BASE_SYS)
/* Special Function */
#define AT91_USART1
(0xfffcc000 - AT91_BASE_SYS)
/* USART 1 */
#define AT91_USART0
(0xfffd0000 - AT91_BASE_SYS)
/* USART 0 */
#define AT91_TC
(0xfffe0000 - AT91_BASE_SYS)
/* Timer Counter */
#define AT91_PIOA
(0xffff0000 - AT91_BASE_SYS)
/* PIO Controller A */
#define AT91_PS
(0xffff4000 - AT91_BASE_SYS)
/* Power Save */
#define AT91_WD
(0xffff8000 - AT91_BASE_SYS)
/* Watchdog Timer */
#define AT91_EBI
0xffe00000
/* External Bus Interface */
#define AT91_SF
0xfff00000
/* Special Function */
#define AT91_USART1
0xfffcc000
/* USART 1 */
#define AT91_USART0
0xfffd0000
/* USART 0 */
#define AT91_TC
0xfffe0000
/* Timer Counter */
#define AT91_PIOA
0xffff0000
/* PIO Controller A */
#define AT91_PS
0xffff4000
/* Power Save */
#define AT91_WD
0xffff8000
/* Watchdog Timer */
/*
* The AT91x40 series doesn't have a debug unit like the other AT91 parts.
...
...
arch/arm/mach-at91/include/mach/board.h
View file @
d50673ed
...
...
@@ -107,6 +107,8 @@ struct atmel_nand_data {
u8
ale
;
/* address line number connected to ALE */
u8
cle
;
/* address line number connected to CLE */
u8
bus_width_16
;
/* buswidth is 16 bit */
u8
correction_cap
;
/* PMECC correction capability */
u16
sector_size
;
/* Sector size for PMECC */
struct
mtd_partition
*
parts
;
unsigned
int
num_parts
;
};
...
...
@@ -179,7 +181,9 @@ extern void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data);
extern
void
__init
at91_add_device_ac97
(
struct
ac97c_platform_data
*
data
);
/* ISI */
extern
void
__init
at91_add_device_isi
(
void
);
struct
isi_platform_data
;
extern
void
__init
at91_add_device_isi
(
struct
isi_platform_data
*
data
,
bool
use_pck_as_mck
);
/* Touchscreen Controller */
struct
at91_tsadcc_data
{
...
...
arch/arm/mach-at91/include/mach/cpu.h
View file @
d50673ed
...
...
@@ -25,7 +25,6 @@
#define ARCH_ID_AT91SAM9G45MRL 0x819b05a2
/* aka 9G45-ES2 & non ES lots */
#define ARCH_ID_AT91SAM9G45ES 0x819b05a1
/* 9G45-ES (Engineering Sample) */
#define ARCH_ID_AT91SAM9X5 0x819a05a0
#define ARCH_ID_AT91CAP9 0x039A03A0
#define ARCH_ID_AT91SAM9XE128 0x329973a0
#define ARCH_ID_AT91SAM9XE256 0x329a93a0
...
...
@@ -51,10 +50,6 @@
#define ARCH_FAMILY_AT91SAM9 0x01900000
#define ARCH_FAMILY_AT91SAM9XE 0x02900000
/* PMC revision */
#define ARCH_REVISION_CAP9_B 0x399
#define ARCH_REVISION_CAP9_C 0x601
/* RM9200 type */
#define ARCH_REVISON_9200_BGA (0 << 0)
#define ARCH_REVISON_9200_PQFP (1 << 0)
...
...
@@ -63,9 +58,6 @@ enum at91_soc_type {
/* 920T */
AT91_SOC_RM9200
,
/* CAP */
AT91_SOC_CAP9
,
/* SAM92xx */
AT91_SOC_SAM9260
,
AT91_SOC_SAM9261
,
AT91_SOC_SAM9263
,
...
...
@@ -86,9 +78,6 @@ enum at91_soc_subtype {
/* RM9200 */
AT91_SOC_RM9200_BGA
,
AT91_SOC_RM9200_PQFP
,
/* CAP9 */
AT91_SOC_CAP9_REV_B
,
AT91_SOC_CAP9_REV_C
,
/* SAM9260 */
AT91_SOC_SAM9XE
,
...
...
@@ -195,16 +184,6 @@ static inline int at91_soc_is_detected(void)
#define cpu_is_at91sam9x25() (0)
#endif
#ifdef CONFIG_ARCH_AT91CAP9
#define cpu_is_at91cap9() (at91_soc_initdata.type == AT91_SOC_CAP9)
#define cpu_is_at91cap9_revB() (at91_soc_initdata.subtype == AT91_SOC_CAP9_REV_B)
#define cpu_is_at91cap9_revC() (at91_soc_initdata.subtype == AT91_SOC_CAP9_REV_C)
#else
#define cpu_is_at91cap9() (0)
#define cpu_is_at91cap9_revB() (0)
#define cpu_is_at91cap9_revC() (0)
#endif
/*
* Since this is ARM, we will never run on any AVR32 CPU. But these
* definitions may reduce clutter in common drivers.
...
...
arch/arm/mach-at91/include/mach/hardware.h
View file @
d50673ed
...
...
@@ -19,7 +19,7 @@
/* DBGU base */
/* rm9200, 9260/9g20, 9261/9g10, 9rl */
#define AT91_BASE_DBGU0 0xfffff200
/* 9263, 9g45
, cap9
*/
/* 9263, 9g45 */
#define AT91_BASE_DBGU1 0xffffee00
#if defined(CONFIG_ARCH_AT91RM9200)
...
...
@@ -34,8 +34,8 @@
#include <mach/at91sam9rl.h>
#elif defined(CONFIG_ARCH_AT91SAM9G45)
#include <mach/at91sam9g45.h>
#elif defined(CONFIG_ARCH_AT91
CAP9
)
#include <mach/at91
cap9
.h>
#elif defined(CONFIG_ARCH_AT91
SAM9X5
)
#include <mach/at91
sam9x5
.h>
#elif defined(CONFIG_ARCH_AT91X40)
#include <mach/at91x40.h>
#else
...
...
@@ -59,9 +59,10 @@
/*
* On all at91 have the Advanced Interrupt Controller starts at address
* 0xfffff000
* 0xfffff000
and the Power Management Controller starts at 0xfffffc00
*/
#define AT91_AIC 0xfffff000
#define AT91_PMC 0xfffffc00
/*
* Peripheral identifiers/interrupts.
...
...
arch/arm/mach-at91/include/mach/io.h
View file @
d50673ed
...
...
@@ -28,22 +28,4 @@
#define __io(a) __typesafe_io(a)
#define __mem_pci(a) (a)
#ifndef __ASSEMBLY__
static
inline
unsigned
int
at91_sys_read
(
unsigned
int
reg_offset
)
{
void
__iomem
*
addr
=
(
void
__iomem
*
)
AT91_VA_BASE_SYS
;
return
__raw_readl
(
addr
+
reg_offset
);
}
static
inline
void
at91_sys_write
(
unsigned
int
reg_offset
,
unsigned
long
value
)
{
void
__iomem
*
addr
=
(
void
__iomem
*
)
AT91_VA_BASE_SYS
;
__raw_writel
(
value
,
addr
+
reg_offset
);
}
#endif
#endif
arch/arm/mach-at91/pm.c
View file @
d50673ed
...
...
@@ -136,7 +136,7 @@ static int at91_pm_verify_clocks(void)
unsigned
long
scsr
;
int
i
;
scsr
=
at91_
sys
_read
(
AT91_PMC_SCSR
);
scsr
=
at91_
pmc
_read
(
AT91_PMC_SCSR
);
/* USB must not be using PLLB */
if
(
cpu_is_at91rm9200
())
{
...
...
@@ -150,11 +150,6 @@ static int at91_pm_verify_clocks(void)
pr_err
(
"AT91: PM - Suspend-to-RAM with USB still active
\n
"
);
return
0
;
}
}
else
if
(
cpu_is_at91cap9
())
{
if
((
scsr
&
AT91CAP9_PMC_UHP
)
!=
0
)
{
pr_err
(
"AT91: PM - Suspend-to-RAM with USB still active
\n
"
);
return
0
;
}
}
#ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS
...
...
@@ -165,7 +160,7 @@ static int at91_pm_verify_clocks(void)
if
((
scsr
&
(
AT91_PMC_PCK0
<<
i
))
==
0
)
continue
;
css
=
at91_
sys
_read
(
AT91_PMC_PCKR
(
i
))
&
AT91_PMC_CSS
;
css
=
at91_
pmc
_read
(
AT91_PMC_PCKR
(
i
))
&
AT91_PMC_CSS
;
if
(
css
!=
AT91_PMC_CSS_SLOW
)
{
pr_err
(
"AT91: PM - Suspend-to-RAM with PCK%d src %d
\n
"
,
i
,
css
);
return
0
;
...
...
@@ -193,23 +188,36 @@ int at91_suspend_entering_slow_clock(void)
EXPORT_SYMBOL
(
at91_suspend_entering_slow_clock
);
static
void
(
*
slow_clock
)(
void
);
static
void
(
*
slow_clock
)(
void
__iomem
*
pmc
,
void
__iomem
*
ramc0
,
void
__iomem
*
ramc1
,
int
memctrl
);
#ifdef CONFIG_AT91_SLOW_CLOCK
extern
void
at91_slow_clock
(
void
);
extern
void
at91_slow_clock
(
void
__iomem
*
pmc
,
void
__iomem
*
ramc0
,
void
__iomem
*
ramc1
,
int
memctrl
);
extern
u32
at91_slow_clock_sz
;
#endif
void
__iomem
*
at91_ramc_base
[
2
];
void
__init
at91_ioremap_ramc
(
int
id
,
u32
addr
,
u32
size
)
{
if
(
id
<
0
||
id
>
1
)
{
pr_emerg
(
"Wrong RAM controller id (%d), cannot continue
\n
"
,
id
);
BUG
();
}
at91_ramc_base
[
id
]
=
ioremap
(
addr
,
size
);
if
(
!
at91_ramc_base
[
id
])
panic
(
"Impossible to ioremap ramc.%d 0x%x
\n
"
,
id
,
addr
);
}
static
int
at91_pm_enter
(
suspend_state_t
state
)
{
u32
saved_lpr
;
at91_gpio_suspend
();
at91_irq_suspend
();
pr_debug
(
"AT91: PM - wake mask %08x, pm state %d
\n
"
,
/* remember all the always-wake irqs */
(
at91_
sys
_read
(
AT91_PMC_PCSR
)
(
at91_
pmc
_read
(
AT91_PMC_PCSR
)
|
(
1
<<
AT91_ID_FIQ
)
|
(
1
<<
AT91_ID_SYS
)
|
(
at91_extern_irq
))
...
...
@@ -234,11 +242,18 @@ static int at91_pm_enter(suspend_state_t state)
* turning off the main oscillator; reverse on wakeup.
*/
if
(
slow_clock
)
{
int
memctrl
=
AT91_MEMCTRL_SDRAMC
;
if
(
cpu_is_at91rm9200
())
memctrl
=
AT91_MEMCTRL_MC
;
else
if
(
cpu_is_at91sam9g45
())
memctrl
=
AT91_MEMCTRL_DDRSDR
;
#ifdef CONFIG_AT91_SLOW_CLOCK
/* copy slow_clock handler to SRAM, and call it */
memcpy
(
slow_clock
,
at91_slow_clock
,
at91_slow_clock_sz
);
#endif
slow_clock
();
slow_clock
(
at91_pmc_base
,
at91_ramc_base
[
0
],
at91_ramc_base
[
1
],
memctrl
);
break
;
}
else
{
pr_info
(
"AT91: PM - no slow clock mode enabled ...
\n
"
);
...
...
@@ -259,16 +274,7 @@ static int at91_pm_enter(suspend_state_t state)
* For ARM 926 based chips, this requirement is weaker
* as at91sam9 can access a RAM in self-refresh mode.
*/
asm
volatile
(
"mov r0, #0
\n\t
"
"b 1f
\n\t
"
".align 5
\n\t
"
"1: mcr p15, 0, r0, c7, c10, 4
\n\t
"
:
/* no output */
:
/* no input */
:
"r0"
);
saved_lpr
=
sdram_selfrefresh_enable
();
wait_for_interrupt_enable
();
sdram_selfrefresh_disable
(
saved_lpr
);
at91_standby
();
break
;
case
PM_SUSPEND_ON
:
...
...
@@ -316,7 +322,7 @@ static int __init at91_pm_init(void)
#ifdef CONFIG_ARCH_AT91RM9200
/* AT91RM9200 SDRAM low-power mode cannot be used with self-refresh. */
at91_
sys_write
(
AT91
_SDRAMC_LPR
,
0
);
at91_
ramc_write
(
0
,
AT91RM9200
_SDRAMC_LPR
,
0
);
#endif
suspend_set_ops
(
&
at91_pm_ops
);
...
...
arch/arm/mach-at91/pm.h
View file @
d50673ed
/*
* AT91 Power Management
*
* Copyright (C) 2005 David Brownell
*
* 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 __ARCH_ARM_MACH_AT91_PM
#define __ARCH_ARM_MACH_AT91_PM
#include <mach/at91_ramc.h>
#ifdef CONFIG_ARCH_AT91RM9200
#include <mach/at91rm9200_mc.h>
#include <mach/at91rm9200_
sdra
mc.h>
/*
* The AT91RM9200 goes into self-refresh mode with this command, and will
...
...
@@ -11,51 +25,37 @@
* still in self-refresh is "not recommended", but seems to work.
*/
static
inline
u32
sdram_selfrefresh_enable
(
void
)
static
inline
void
at91rm9200_standby
(
void
)
{
u32
saved_lpr
=
at91_sys_read
(
AT91_SDRAMC_LPR
);
at91_sys_write
(
AT91_SDRAMC_LPR
,
0
);
at91_sys_write
(
AT91_SDRAMC_SRR
,
1
);
return
saved_lpr
;
u32
lpr
=
at91_ramc_read
(
0
,
AT91RM9200_SDRAMC_LPR
);
asm
volatile
(
"b 1f
\n\t
"
".align 5
\n\t
"
"1: mcr p15, 0, %0, c7, c10, 4
\n\t
"
" str %0, [%1, %2]
\n\t
"
" str %3, [%1, %4]
\n\t
"
" mcr p15, 0, %0, c7, c0, 4
\n\t
"
" str %5, [%1, %2]"
:
:
"r"
(
0
),
"r"
(
AT91_BASE_SYS
),
"r"
(
AT91RM9200_SDRAMC_LPR
),
"r"
(
1
),
"r"
(
AT91RM9200_SDRAMC_SRR
),
"r"
(
lpr
));
}
#define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_SDRAMC_LPR, saved_lpr)
#define wait_for_interrupt_enable() asm volatile ("mcr p15, 0, %0, c7, c0, 4" \
: : "r" (0))
#elif defined(CONFIG_ARCH_AT91CAP9)
#include <mach/at91sam9_ddrsdr.h>
static
inline
u32
sdram_selfrefresh_enable
(
void
)
{
u32
saved_lpr
,
lpr
;
saved_lpr
=
at91_ramc_read
(
0
,
AT91CAP9_DDRSDRC_LPR
);
lpr
=
saved_lpr
&
~
AT91_DDRSDRC_LPCB
;
at91_ramc_write
(
0
,
AT91CAP9_DDRSDRC_LPR
,
lpr
|
AT91_DDRSDRC_LPCB_SELF_REFRESH
);
return
saved_lpr
;
}
#define sdram_selfrefresh_disable(saved_lpr) at91_ramc_write(0, AT91CAP9_DDRSDRC_LPR, saved_lpr)
#define wait_for_interrupt_enable() cpu_do_idle()
#define at91_standby at91rm9200_standby
#elif defined(CONFIG_ARCH_AT91SAM9G45)
#include <mach/at91sam9_ddrsdr.h>
/* We manage both DDRAM/SDRAM controllers, we need more than one value to
* remember.
*/
static
u32
saved_lpr1
;
static
inline
u32
sdram_selfrefresh_enable
(
void
)
static
inline
void
at91sam9g45_standby
(
void
)
{
/* Those t
ow
values allow us to delay self-refresh activation
/* Those t
wo
values allow us to delay self-refresh activation
* to the maximum. */
u32
lpr0
,
lpr1
;
u32
saved_lpr0
;
u32
saved_lpr0
,
saved_lpr1
;
saved_lpr1
=
at91_ramc_read
(
1
,
AT91_DDRSDRC_LPR
);
lpr1
=
saved_lpr1
&
~
AT91_DDRSDRC_LPCB
;
...
...
@@ -69,18 +69,15 @@ static inline u32 sdram_selfrefresh_enable(void)
at91_ramc_write
(
0
,
AT91_DDRSDRC_LPR
,
lpr0
);
at91_ramc_write
(
1
,
AT91_DDRSDRC_LPR
,
lpr1
);
return
saved_lpr0
;
cpu_do_idle
();
at91_ramc_write
(
0
,
AT91_DDRSDRC_LPR
,
saved_lpr0
);
at91_ramc_write
(
1
,
AT91_DDRSDRC_LPR
,
saved_lpr1
);
}
#define sdram_selfrefresh_disable(saved_lpr0) \
do { \
at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0); \
at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1); \
} while (0)
#define wait_for_interrupt_enable() cpu_do_idle()
#define at91_standby at91sam9g45_standby
#else
#include <mach/at91sam9_sdramc.h>
#ifdef CONFIG_ARCH_AT91SAM9263
/*
...
...
@@ -90,18 +87,23 @@ static inline u32 sdram_selfrefresh_enable(void)
#warning Assuming EB1 SDRAM controller is *NOT* used
#endif
static
inline
u32
sdram_selfrefresh_enable
(
void
)
static
inline
void
at91sam9_standby
(
void
)
{
u32
saved_lpr
,
lpr
;
saved_lpr
=
at91_ramc_read
(
0
,
AT91_SDRAMC_LPR
);
lpr
=
saved_lpr
&
~
AT91_SDRAMC_LPCB
;
at91_ramc_write
(
0
,
AT91_SDRAMC_LPR
,
lpr
|
AT91_SDRAMC_LPCB_SELF_REFRESH
);
return
saved_lpr
;
at91_ramc_write
(
0
,
AT91_SDRAMC_LPR
,
lpr
|
AT91_SDRAMC_LPCB_SELF_REFRESH
);
cpu_do_idle
();
at91_ramc_write
(
0
,
AT91_SDRAMC_LPR
,
saved_lpr
);
}
#define sdram_selfrefresh_disable(saved_lpr) at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr)
#define wait_for_interrupt_enable() cpu_do_idle()
#define at91_standby at91sam9_standby
#endif
#endif
arch/arm/mach-at91/pm_slowclock.S
View file @
d50673ed
...
...
@@ -15,15 +15,7 @@
#include <linux/linkage.h>
#include <mach/hardware.h>
#include <mach/at91_pmc.h>
#if defined(CONFIG_ARCH_AT91RM9200)
#include <mach/at91rm9200_mc.h>
#elif defined(CONFIG_ARCH_AT91CAP9) \
|
|
defined
(
CONFIG_ARCH_AT91SAM9G45
)
#include <mach/at91sam9_ddrsdr.h>
#else
#include <mach/at91sam9_sdramc.h>
#endif
#include <mach/at91_ramc.h>
#ifdef CONFIG_ARCH_AT91SAM9263
...
...
@@ -47,17 +39,23 @@
#define PLLALOCK_TIMEOUT 1000
#define PLLBLOCK_TIMEOUT 1000
pmc
.
req
r0
sdramc
.
req
r1
ramc1
.
req
r2
memctrl
.
req
r3
tmp1
.
req
r4
tmp2
.
req
r5
/*
*
Wait
until
master
clock
is
ready
(
after
switching
master
clock
source
)
*/
.
macro
wait_mckrdy
mov
r4
,
#
MCKRDY_TIMEOUT
1
:
sub
r4
,
r4
,
#
1
cmp
r4
,
#
0
mov
tmp2
,
#
MCKRDY_TIMEOUT
1
:
sub
tmp2
,
tmp2
,
#
1
cmp
tmp2
,
#
0
beq
2
f
ldr
r3
,
[
r1
,
#(
AT91_PMC_SR
-
AT91_PMC
)
]
tst
r3
,
#
AT91_PMC_MCKRDY
ldr
tmp1
,
[
pmc
,
#
AT91_PMC_SR
]
tst
tmp1
,
#
AT91_PMC_MCKRDY
beq
1
b
2
:
.
endm
...
...
@@ -66,12 +64,12 @@
*
Wait
until
master
oscillator
has
stabilized
.
*/
.
macro
wait_moscrdy
mov
r4
,
#
MOSCRDY_TIMEOUT
1
:
sub
r4
,
r4
,
#
1
cmp
r4
,
#
0
mov
tmp2
,
#
MOSCRDY_TIMEOUT
1
:
sub
tmp2
,
tmp2
,
#
1
cmp
tmp2
,
#
0
beq
2
f
ldr
r3
,
[
r1
,
#(
AT91_PMC_SR
-
AT91_PMC
)
]
tst
r3
,
#
AT91_PMC_MOSCS
ldr
tmp1
,
[
pmc
,
#
AT91_PMC_SR
]
tst
tmp1
,
#
AT91_PMC_MOSCS
beq
1
b
2
:
.
endm
...
...
@@ -80,12 +78,12 @@
*
Wait
until
PLLA
has
locked
.
*/
.
macro
wait_pllalock
mov
r4
,
#
PLLALOCK_TIMEOUT
1
:
sub
r4
,
r4
,
#
1
cmp
r4
,
#
0
mov
tmp2
,
#
PLLALOCK_TIMEOUT
1
:
sub
tmp2
,
tmp2
,
#
1
cmp
tmp2
,
#
0
beq
2
f
ldr
r3
,
[
r1
,
#(
AT91_PMC_SR
-
AT91_PMC
)
]
tst
r3
,
#
AT91_PMC_LOCKA
ldr
tmp1
,
[
pmc
,
#
AT91_PMC_SR
]
tst
tmp1
,
#
AT91_PMC_LOCKA
beq
1
b
2
:
.
endm
...
...
@@ -94,80 +92,98 @@
*
Wait
until
PLLB
has
locked
.
*/
.
macro
wait_pllblock
mov
r4
,
#
PLLBLOCK_TIMEOUT
1
:
sub
r4
,
r4
,
#
1
cmp
r4
,
#
0
mov
tmp2
,
#
PLLBLOCK_TIMEOUT
1
:
sub
tmp2
,
tmp2
,
#
1
cmp
tmp2
,
#
0
beq
2
f
ldr
r3
,
[
r1
,
#(
AT91_PMC_SR
-
AT91_PMC
)
]
tst
r3
,
#
AT91_PMC_LOCKB
ldr
tmp1
,
[
pmc
,
#
AT91_PMC_SR
]
tst
tmp1
,
#
AT91_PMC_LOCKB
beq
1
b
2
:
.
endm
.
text
/*
void
at91_slow_clock
(
void
__iomem
*
pmc
,
void
__iomem
*
sdramc
,
*
void
__iomem
*
ramc1
,
int
memctrl
)
*/
ENTRY
(
at91_slow_clock
)
/
*
Save
registers
on
stack
*/
stmfd
sp
!,
{
r
0
-
r12
,
lr
}
stmfd
sp
!,
{
r
4
-
r12
,
lr
}
/
*
*
Register
usage
:
*
R1
=
Base
address
of
AT91_PMC
*
R2
=
Base
address
of
RAM
Controller
(
SDRAM
,
DDRSDR
,
or
AT91_SYS
)
*
R3
=
temporary
register
*
R0
=
Base
address
of
AT91_PMC
*
R1
=
Base
address
of
RAM
Controller
(
SDRAM
,
DDRSDR
,
or
AT91_SYS
)
*
R2
=
Base
address
of
second
RAM
Controller
or
0
if
not
present
*
R3
=
Memory
controller
*
R4
=
temporary
register
*
R5
=
Base
address
of
second
RAM
Controller
or
0
if
not
present
*
R5
=
temporary
register
*/
ldr
r1
,
.
at91_va_base_pmc
ldr
r2
,
.
at91_va_base_sdramc
ldr
r5
,
.
at91_va_base_ramc1
/
*
Drain
write
buffer
*/
mov
r0
,
#
0
mcr
p15
,
0
,
r0
,
c7
,
c10
,
4
mov
tmp1
,
#
0
mcr
p15
,
0
,
tmp1
,
c7
,
c10
,
4
cmp
memctrl
,
#
AT91_MEMCTRL_MC
bne
ddr_sr_enable
#ifdef CONFIG_ARCH_AT91RM9200
/
*
*
at91rm9200
Memory
controller
*/
/
*
Put
SDRAM
in
self
-
refresh
mode
*/
mov
r3
,
#
1
str
r3
,
[
r2
,
#
AT91_SDRAMC_SRR
]
#elif defined(CONFIG_ARCH_AT91CAP9) \
|
|
defined
(
CONFIG_ARCH_AT91SAM9G45
)
mov
tmp1
,
#
1
str
tmp1
,
[
sdramc
,
#
AT91RM9200_SDRAMC_SRR
]
b
sdr_sr_done
/
*
*
DDRSDR
Memory
controller
*/
ddr_sr_enable
:
cmp
memctrl
,
#
AT91_MEMCTRL_DDRSDR
bne
sdr_sr_enable
/
*
prepare
for
DDRAM
self
-
refresh
mode
*/
ldr
r3
,
[
r2
,
#
AT91_DDRSDRC_LPR
]
str
r3
,
.
saved_sam9_lpr
bic
r3
,
#
AT91_DDRSDRC_LPCB
orr
r3
,
#
AT91_DDRSDRC_LPCB_SELF_REFRESH
ldr
tmp1
,
[
sdramc
,
#
AT91_DDRSDRC_LPR
]
str
tmp1
,
.
saved_sam9_lpr
bic
tmp1
,
#
AT91_DDRSDRC_LPCB
orr
tmp1
,
#
AT91_DDRSDRC_LPCB_SELF_REFRESH
/
*
figure
out
if
we
use
the
second
ram
controller
*/
cmp
r
5
,
#
0
ldrne
r4
,
[
r5
,
#
AT91_DDRSDRC_LPR
]
strne
r4
,
.
saved_sam9_lpr1
bicne
r4
,
#
AT91_DDRSDRC_LPCB
orrne
r4
,
#
AT91_DDRSDRC_LPCB_SELF_REFRESH
cmp
r
amc1
,
#
0
ldrne
tmp2
,
[
ramc1
,
#
AT91_DDRSDRC_LPR
]
strne
tmp2
,
.
saved_sam9_lpr1
bicne
tmp2
,
#
AT91_DDRSDRC_LPCB
orrne
tmp2
,
#
AT91_DDRSDRC_LPCB_SELF_REFRESH
/
*
Enable
DDRAM
self
-
refresh
mode
*/
str
r3
,
[
r2
,
#
AT91_DDRSDRC_LPR
]
strne
r4
,
[
r5
,
#
AT91_DDRSDRC_LPR
]
#else
str
tmp1
,
[
sdramc
,
#
AT91_DDRSDRC_LPR
]
strne
tmp2
,
[
ramc1
,
#
AT91_DDRSDRC_LPR
]
b
sdr_sr_done
/
*
*
SDRAMC
Memory
controller
*/
sdr_sr_enable
:
/
*
Enable
SDRAM
self
-
refresh
mode
*/
ldr
r3
,
[
r2
,
#
AT91_SDRAMC_LPR
]
str
r3
,
.
saved_sam9_lpr
ldr
tmp1
,
[
sdramc
,
#
AT91_SDRAMC_LPR
]
str
tmp1
,
.
saved_sam9_lpr
bic
r3
,
#
AT91_SDRAMC_LPCB
orr
r3
,
#
AT91_SDRAMC_LPCB_SELF_REFRESH
str
r3
,
[
r2
,
#
AT91_SDRAMC_LPR
]
#endif
bic
tmp1
,
#
AT91_SDRAMC_LPCB
orr
tmp1
,
#
AT91_SDRAMC_LPCB_SELF_REFRESH
str
tmp1
,
[
sdramc
,
#
AT91_SDRAMC_LPR
]
sdr_sr_done
:
/
*
Save
Master
clock
setting
*/
ldr
r3
,
[
r1
,
#(
AT91_PMC_MCKR
-
AT91_PMC
)
]
str
r3
,
.
saved_mckr
ldr
tmp1
,
[
pmc
,
#
AT91_PMC_MCKR
]
str
tmp1
,
.
saved_mckr
/
*
*
Set
the
Master
clock
source
to
slow
clock
*/
bic
r3
,
r3
,
#
AT91_PMC_CSS
str
r3
,
[
r1
,
#(
AT91_PMC_MCKR
-
AT91_PMC
)
]
bic
tmp1
,
tmp1
,
#
AT91_PMC_CSS
str
tmp1
,
[
pmc
,
#
AT91_PMC_MCKR
]
wait_mckrdy
...
...
@@ -177,61 +193,61 @@ ENTRY(at91_slow_clock)
*
*
See
AT91RM9200
errata
#
27
and
#
28
for
details
.
*/
mov
r3
,
#
0
str
r3
,
[
r1
,
#(
AT91_PMC_MCKR
-
AT91_PMC
)
]
mov
tmp1
,
#
0
str
tmp1
,
[
pmc
,
#
AT91_PMC_MCKR
]
wait_mckrdy
#endif
/
*
Save
PLLA
setting
and
disable
it
*/
ldr
r3
,
[
r1
,
#(
AT91_CKGR_PLLAR
-
AT91_PMC
)
]
str
r3
,
.
saved_pllar
ldr
tmp1
,
[
pmc
,
#
AT91_CKGR_PLLAR
]
str
tmp1
,
.
saved_pllar
mov
r3
,
#
AT91_PMC_PLLCOUNT
orr
r3
,
r3
,
#(
1
<<
29
)
/*
bit
29
always
set
*/
str
r3
,
[
r1
,
#(
AT91_CKGR_PLLAR
-
AT91_PMC
)
]
mov
tmp1
,
#
AT91_PMC_PLLCOUNT
orr
tmp1
,
tmp1
,
#(
1
<<
29
)
/*
bit
29
always
set
*/
str
tmp1
,
[
pmc
,
#
AT91_CKGR_PLLAR
]
/
*
Save
PLLB
setting
and
disable
it
*/
ldr
r3
,
[
r1
,
#(
AT91_CKGR_PLLBR
-
AT91_PMC
)
]
str
r3
,
.
saved_pllbr
ldr
tmp1
,
[
pmc
,
#
AT91_CKGR_PLLBR
]
str
tmp1
,
.
saved_pllbr
mov
r3
,
#
AT91_PMC_PLLCOUNT
str
r3
,
[
r1
,
#(
AT91_CKGR_PLLBR
-
AT91_PMC
)
]
mov
tmp1
,
#
AT91_PMC_PLLCOUNT
str
tmp1
,
[
pmc
,
#
AT91_CKGR_PLLBR
]
/
*
Turn
off
the
main
oscillator
*/
ldr
r3
,
[
r1
,
#(
AT91_CKGR_MOR
-
AT91_PMC
)
]
bic
r3
,
r3
,
#
AT91_PMC_MOSCEN
str
r3
,
[
r1
,
#(
AT91_CKGR_MOR
-
AT91_PMC
)
]
ldr
tmp1
,
[
pmc
,
#
AT91_CKGR_MOR
]
bic
tmp1
,
tmp1
,
#
AT91_PMC_MOSCEN
str
tmp1
,
[
pmc
,
#
AT91_CKGR_MOR
]
/
*
Wait
for
interrupt
*/
mcr
p15
,
0
,
r0
,
c7
,
c0
,
4
mcr
p15
,
0
,
tmp1
,
c7
,
c0
,
4
/
*
Turn
on
the
main
oscillator
*/
ldr
r3
,
[
r1
,
#(
AT91_CKGR_MOR
-
AT91_PMC
)
]
orr
r3
,
r3
,
#
AT91_PMC_MOSCEN
str
r3
,
[
r1
,
#(
AT91_CKGR_MOR
-
AT91_PMC
)
]
ldr
tmp1
,
[
pmc
,
#
AT91_CKGR_MOR
]
orr
tmp1
,
tmp1
,
#
AT91_PMC_MOSCEN
str
tmp1
,
[
pmc
,
#
AT91_CKGR_MOR
]
wait_moscrdy
/
*
Restore
PLLB
setting
*/
ldr
r3
,
.
saved_pllbr
str
r3
,
[
r1
,
#(
AT91_CKGR_PLLBR
-
AT91_PMC
)
]
ldr
tmp1
,
.
saved_pllbr
str
tmp1
,
[
pmc
,
#
AT91_CKGR_PLLBR
]
tst
r3
,
#(
AT91_PMC_MUL
&
0xff0000
)
tst
tmp1
,
#(
AT91_PMC_MUL
&
0xff0000
)
bne
1
f
tst
r3
,
#(
AT91_PMC_MUL
&
~
0xff0000
)
tst
tmp1
,
#(
AT91_PMC_MUL
&
~
0xff0000
)
beq
2
f
1
:
wait_pllblock
2
:
/
*
Restore
PLLA
setting
*/
ldr
r3
,
.
saved_pllar
str
r3
,
[
r1
,
#(
AT91_CKGR_PLLAR
-
AT91_PMC
)
]
ldr
tmp1
,
.
saved_pllar
str
tmp1
,
[
pmc
,
#
AT91_CKGR_PLLAR
]
tst
r3
,
#(
AT91_PMC_MUL
&
0xff0000
)
tst
tmp1
,
#(
AT91_PMC_MUL
&
0xff0000
)
bne
3
f
tst
r3
,
#(
AT91_PMC_MUL
&
~
0xff0000
)
tst
tmp1
,
#(
AT91_PMC_MUL
&
~
0xff0000
)
beq
4
f
3
:
wait_pllalock
...
...
@@ -244,11 +260,11 @@ ENTRY(at91_slow_clock)
*
*
See
AT91RM9200
errata
#
27
and
#
28
for
details
.
*/
ldr
r3
,
.
saved_mckr
tst
r3
,
#
AT91_PMC_PRES
ldr
tmp1
,
.
saved_mckr
tst
tmp1
,
#
AT91_PMC_PRES
beq
2
f
and
r3
,
r3
,
#
AT91_PMC_PRES
str
r3
,
[
r1
,
#(
AT91_PMC_MCKR
-
AT91_PMC
)
]
and
tmp1
,
tmp1
,
#
AT91_PMC_PRES
str
tmp1
,
[
pmc
,
#
AT91_PMC_MCKR
]
wait_mckrdy
#endif
...
...
@@ -256,32 +272,45 @@ ENTRY(at91_slow_clock)
/
*
*
Restore
master
clock
setting
*/
2
:
ldr
r3
,
.
saved_mckr
str
r3
,
[
r1
,
#(
AT91_PMC_MCKR
-
AT91_PMC
)
]
2
:
ldr
tmp1
,
.
saved_mckr
str
tmp1
,
[
pmc
,
#
AT91_PMC_MCKR
]
wait_mckrdy
#ifdef CONFIG_ARCH_AT91RM9200
/
*
Do
nothing
-
self
-
refresh
is
automatically
disabled
.
*/
#elif defined(CONFIG_ARCH_AT91CAP9) \
|
|
defined
(
CONFIG_ARCH_AT91SAM9G45
)
/
*
*
at91rm9200
Memory
controller
*
Do
nothing
-
self
-
refresh
is
automatically
disabled
.
*/
cmp
memctrl
,
#
AT91_MEMCTRL_MC
beq
ram_restored
/
*
*
DDRSDR
Memory
controller
*/
cmp
memctrl
,
#
AT91_MEMCTRL_DDRSDR
bne
sdr_en_restore
/
*
Restore
LPR
on
AT91
with
DDRAM
*/
ldr
r3
,
.
saved_sam9_lpr
str
r3
,
[
r2
,
#
AT91_DDRSDRC_LPR
]
ldr
tmp1
,
.
saved_sam9_lpr
str
tmp1
,
[
sdramc
,
#
AT91_DDRSDRC_LPR
]
/
*
if
we
use
the
second
ram
controller
*/
cmp
r5
,
#
0
ldrne
r4
,
.
saved_sam9_lpr1
strne
r4
,
[
r5
,
#
AT91_DDRSDRC_LPR
]
cmp
ramc1
,
#
0
ldrne
tmp2
,
.
saved_sam9_lpr1
strne
tmp2
,
[
ramc1
,
#
AT91_DDRSDRC_LPR
]
b
ram_restored
#else
/
*
*
SDRAMC
Memory
controller
*/
sdr_en_restore
:
/
*
Restore
LPR
on
AT91
with
SDRAM
*/
ldr
r3
,
.
saved_sam9_lpr
str
r3
,
[
r2
,
#
AT91_SDRAMC_LPR
]
#endif
ldr
tmp1
,
.
saved_sam9_lpr
str
tmp1
,
[
sdramc
,
#
AT91_SDRAMC_LPR
]
ram_restored
:
/
*
Restore
registers
,
and
return
*/
ldmfd
sp
!,
{
r
0
-
r12
,
pc
}
ldmfd
sp
!,
{
r
4
-
r12
,
pc
}
.
saved_mckr
:
...
...
@@ -299,27 +328,5 @@ ENTRY(at91_slow_clock)
.
saved_sam9_lpr1
:
.
word
0
.
at91_va_base_pmc
:
.
word
AT91_VA_BASE_SYS
+
AT91_PMC
#ifdef CONFIG_ARCH_AT91RM9200
.
at91_va_base_sdramc
:
.
word
AT91_VA_BASE_SYS
#elif defined(CONFIG_ARCH_AT91CAP9) \
|
|
defined
(
CONFIG_ARCH_AT91SAM9G45
)
.
at91_va_base_sdramc
:
.
word
AT91_VA_BASE_SYS
+
AT91_DDRSDRC0
#else
.
at91_va_base_sdramc
:
.
word
AT91_VA_BASE_SYS
+
AT91_SDRAMC0
#endif
.
at91_va_base_ramc1
:
#if defined(CONFIG_ARCH_AT91SAM9G45)
.
word
AT91_VA_BASE_SYS
+
AT91_DDRSDRC1
#else
.
word
0
#endif
ENTRY
(
at91_slow_clock_sz
)
.
word
.
-
at91_slow_clock
arch/arm/mach-at91/setup.c
View file @
d50673ed
...
...
@@ -86,20 +86,6 @@ static void __init soc_detect(u32 dbgu_base)
socid
=
cidr
&
~
AT91_CIDR_VERSION
;
switch
(
socid
)
{
case
ARCH_ID_AT91CAP9
:
{
#ifdef CONFIG_AT91_PMC_UNIT
u32
pmc_ver
=
at91_sys_read
(
AT91_PMC_VER
);
if
(
pmc_ver
==
ARCH_REVISION_CAP9_B
)
at91_soc_initdata
.
subtype
=
AT91_SOC_CAP9_REV_B
;
else
if
(
pmc_ver
==
ARCH_REVISION_CAP9_C
)
at91_soc_initdata
.
subtype
=
AT91_SOC_CAP9_REV_C
;
#endif
at91_soc_initdata
.
type
=
AT91_SOC_CAP9
;
at91_boot_soc
=
at91cap9_soc
;
break
;
}
case
ARCH_ID_AT91RM9200
:
at91_soc_initdata
.
type
=
AT91_SOC_RM9200
;
at91_boot_soc
=
at91rm9200_soc
;
...
...
@@ -200,7 +186,6 @@ static void __init soc_detect(u32 dbgu_base)
static
const
char
*
soc_name
[]
=
{
[
AT91_SOC_RM9200
]
=
"at91rm9200"
,
[
AT91_SOC_CAP9
]
=
"at91cap9"
,
[
AT91_SOC_SAM9260
]
=
"at91sam9260"
,
[
AT91_SOC_SAM9261
]
=
"at91sam9261"
,
[
AT91_SOC_SAM9263
]
=
"at91sam9263"
,
...
...
@@ -221,8 +206,6 @@ EXPORT_SYMBOL(at91_get_soc_type);
static
const
char
*
soc_subtype_name
[]
=
{
[
AT91_SOC_RM9200_BGA
]
=
"at91rm9200 BGA"
,
[
AT91_SOC_RM9200_PQFP
]
=
"at91rm9200 PQFP"
,
[
AT91_SOC_CAP9_REV_B
]
=
"at91cap9 revB"
,
[
AT91_SOC_CAP9_REV_C
]
=
"at91cap9 revC"
,
[
AT91_SOC_SAM9XE
]
=
"at91sam9xe"
,
[
AT91_SOC_SAM9G45ES
]
=
"at91sam9g45es"
,
[
AT91_SOC_SAM9M10
]
=
"at91sam9m10"
,
...
...
@@ -293,6 +276,15 @@ void __init at91_ioremap_rstc(u32 base_addr)
panic
(
"Impossible to ioremap at91_rstc_base
\n
"
);
}
void
__iomem
*
at91_matrix_base
;
void
__init
at91_ioremap_matrix
(
u32
base_addr
)
{
at91_matrix_base
=
ioremap
(
base_addr
,
512
);
if
(
!
at91_matrix_base
)
panic
(
"Impossible to ioremap at91_matrix_base
\n
"
);
}
void
__init
at91_initialize
(
unsigned
long
main_clock
)
{
at91_boot_soc
.
ioremap_registers
();
...
...
arch/arm/mach-at91/soc.h
View file @
d50673ed
...
...
@@ -13,7 +13,6 @@ struct at91_init_soc {
};
extern
struct
at91_init_soc
at91_boot_soc
;
extern
struct
at91_init_soc
at91cap9_soc
;
extern
struct
at91_init_soc
at91rm9200_soc
;
extern
struct
at91_init_soc
at91sam9260_soc
;
extern
struct
at91_init_soc
at91sam9261_soc
;
...
...
@@ -27,10 +26,6 @@ static inline int at91_soc_is_enabled(void)
return
at91_boot_soc
.
init
!=
NULL
;
}
#if !defined(CONFIG_ARCH_AT91CAP9)
#define at91cap9_soc at91_boot_soc
#endif
#if !defined(CONFIG_ARCH_AT91RM9200)
#define at91rm9200_soc at91_boot_soc
#endif
...
...
arch/avr32/mach-at32ap/at32ap700x.c
View file @
d50673ed
...
...
@@ -1055,8 +1055,6 @@ struct platform_device *__init at32_add_device_usart(unsigned int id)
return
at32_usarts
[
id
];
}
struct
platform_device
*
atmel_default_console_device
;
void
__init
at32_setup_serial_console
(
unsigned
int
usart_id
)
{
atmel_default_console_device
=
at32_usarts
[
usart_id
];
...
...
arch/avr32/mach-at32ap/include/mach/cpu.h
View file @
d50673ed
...
...
@@ -30,9 +30,6 @@
#define cpu_is_at91sam9261() (0)
#define cpu_is_at91sam9263() (0)
#define cpu_is_at91sam9rl() (0)
#define cpu_is_at91cap9() (0)
#define cpu_is_at91cap9_revB() (0)
#define cpu_is_at91cap9_revC() (0)
#define cpu_is_at91sam9g10() (0)
#define cpu_is_at91sam9g20() (0)
#define cpu_is_at91sam9g45() (0)
...
...
drivers/mmc/host/at91_mci.c
View file @
d50673ed
...
...
@@ -86,7 +86,6 @@ static inline int at91mci_is_mci1rev2xx(void)
{
return
(
cpu_is_at91sam9260
()
||
cpu_is_at91sam9263
()
||
cpu_is_at91cap9
()
||
cpu_is_at91sam9rl
()
||
cpu_is_at91sam9g10
()
||
cpu_is_at91sam9g20
()
...
...
drivers/pcmcia/at91_cf.c
View file @
d50673ed
...
...
@@ -26,6 +26,7 @@
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
/*
...
...
@@ -156,7 +157,7 @@ static int at91_cf_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
/*
* Use 16 bit accesses unless/until we need 8-bit i/o space.
*/
csr
=
at91_
sys_read
(
AT91_SMC_CSR
(
cf
->
board
->
chipselect
))
&
~
AT91_SMC_DBW
;
csr
=
at91_
ramc_read
(
0
,
AT91_SMC_CSR
(
cf
->
board
->
chipselect
))
&
~
AT91_SMC_DBW
;
/*
* NOTE: this CF controller ignores IOIS16, so we can't really do
...
...
@@ -175,7 +176,7 @@ static int at91_cf_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
csr
|=
AT91_SMC_DBW_16
;
pr_debug
(
"%s: 16bit i/o bus
\n
"
,
driver_name
);
}
at91_
sys_write
(
AT91_SMC_CSR
(
cf
->
board
->
chipselect
),
csr
);
at91_
ramc_write
(
0
,
AT91_SMC_CSR
(
cf
->
board
->
chipselect
),
csr
);
io
->
start
=
cf
->
socket
.
io_offset
;
io
->
stop
=
io
->
start
+
SZ_2K
-
1
;
...
...
drivers/rtc/rtc-at91sam9.c
View file @
d50673ed
...
...
@@ -57,6 +57,7 @@ struct sam9_rtc {
void
__iomem
*
rtt
;
struct
rtc_device
*
rtcdev
;
u32
imr
;
void
__iomem
*
gpbr
;
};
#define rtt_readl(rtc, field) \
...
...
@@ -65,9 +66,9 @@ struct sam9_rtc {
__raw_writel((val), (rtc)->rtt + AT91_RTT_ ## field)
#define gpbr_readl(rtc) \
at91_sys_read(AT91_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR
)
__raw_readl((rtc)->gpbr
)
#define gpbr_writel(rtc, val) \
at91_sys_write(AT91_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR, (val)
)
__raw_writel((val), (rtc)->gpbr
)
/*
* Read current time and date in RTC
...
...
@@ -287,16 +288,19 @@ static const struct rtc_class_ops at91_rtc_ops = {
/*
* Initialize and install RTC driver
*/
static
int
__init
at91_rtc_probe
(
struct
platform_device
*
pdev
)
static
int
__
dev
init
at91_rtc_probe
(
struct
platform_device
*
pdev
)
{
struct
resource
*
r
;
struct
resource
*
r
,
*
r_gpbr
;
struct
sam9_rtc
*
rtc
;
int
ret
;
u32
mr
;
r
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
if
(
!
r
)
r_gpbr
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
1
);
if
(
!
r
||
!
r_gpbr
)
{
dev_err
(
&
pdev
->
dev
,
"need 2 ressources
\n
"
);
return
-
ENODEV
;
}
rtc
=
kzalloc
(
sizeof
*
rtc
,
GFP_KERNEL
);
if
(
!
rtc
)
...
...
@@ -307,8 +311,19 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
device_init_wakeup
(
&
pdev
->
dev
,
1
);
platform_set_drvdata
(
pdev
,
rtc
);
rtc
->
rtt
=
(
void
__force
__iomem
*
)
(
AT91_VA_BASE_SYS
-
AT91_BASE_SYS
);
rtc
->
rtt
+=
r
->
start
;
rtc
->
rtt
=
ioremap
(
r
->
start
,
resource_size
(
r
));
if
(
!
rtc
->
rtt
)
{
dev_err
(
&
pdev
->
dev
,
"failed to map registers, aborting.
\n
"
);
ret
=
-
ENOMEM
;
goto
fail
;
}
rtc
->
gpbr
=
ioremap
(
r_gpbr
->
start
,
resource_size
(
r_gpbr
));
if
(
!
rtc
->
gpbr
)
{
dev_err
(
&
pdev
->
dev
,
"failed to map gpbr registers, aborting.
\n
"
);
ret
=
-
ENOMEM
;
goto
fail_gpbr
;
}
mr
=
rtt_readl
(
rtc
,
MR
);
...
...
@@ -326,7 +341,7 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
&
at91_rtc_ops
,
THIS_MODULE
);
if
(
IS_ERR
(
rtc
->
rtcdev
))
{
ret
=
PTR_ERR
(
rtc
->
rtcdev
);
goto
fail
;
goto
fail
_register
;
}
/* register irq handler after we know what name we'll use */
...
...
@@ -336,7 +351,7 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
if
(
ret
)
{
dev_dbg
(
&
pdev
->
dev
,
"can't share IRQ %d?
\n
"
,
AT91_ID_SYS
);
rtc_device_unregister
(
rtc
->
rtcdev
);
goto
fail
;
goto
fail
_register
;
}
/* NOTE: sam9260 rev A silicon has a ROM bug which resets the
...
...
@@ -351,6 +366,10 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
return
0
;
fail_register:
iounmap
(
rtc
->
gpbr
);
fail_gpbr:
iounmap
(
rtc
->
rtt
);
fail:
platform_set_drvdata
(
pdev
,
NULL
);
kfree
(
rtc
);
...
...
@@ -360,7 +379,7 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
/*
* Disable and remove the RTC driver
*/
static
int
__exit
at91_rtc_remove
(
struct
platform_device
*
pdev
)
static
int
__
dev
exit
at91_rtc_remove
(
struct
platform_device
*
pdev
)
{
struct
sam9_rtc
*
rtc
=
platform_get_drvdata
(
pdev
);
u32
mr
=
rtt_readl
(
rtc
,
MR
);
...
...
@@ -371,6 +390,8 @@ static int __exit at91_rtc_remove(struct platform_device *pdev)
rtc_device_unregister
(
rtc
->
rtcdev
);
iounmap
(
rtc
->
gpbr
);
iounmap
(
rtc
->
rtt
);
platform_set_drvdata
(
pdev
,
NULL
);
kfree
(
rtc
);
return
0
;
...
...
@@ -433,63 +454,20 @@ static int at91_rtc_resume(struct platform_device *pdev)
#endif
static
struct
platform_driver
at91_rtc_driver
=
{
.
driver
.
name
=
"rtc-at91sam9"
,
.
driver
.
owner
=
THIS_MODULE
,
.
remove
=
__exit_p
(
at91_rtc_remove
),
.
probe
=
at91_rtc_probe
,
.
remove
=
__devexit_p
(
at91_rtc_remove
),
.
shutdown
=
at91_rtc_shutdown
,
.
suspend
=
at91_rtc_suspend
,
.
resume
=
at91_rtc_resume
,
.
driver
=
{
.
name
=
"rtc-at91sam9"
,
.
owner
=
THIS_MODULE
,
},
};
/* Chips can have more than one RTT module, and they can be used for more
* than just RTCs. So we can't just register as "the" RTT driver.
*
* A normal approach in such cases is to create a library to allocate and
* free the modules. Here we just use bus_find_device() as like such a
* library, binding directly ... no runtime "library" footprint is needed.
*/
static
int
__init
at91_rtc_match
(
struct
device
*
dev
,
void
*
v
)
{
struct
platform_device
*
pdev
=
to_platform_device
(
dev
);
int
ret
;
/* continue searching if this isn't the RTT we need */
if
(
strcmp
(
"at91_rtt"
,
pdev
->
name
)
!=
0
||
pdev
->
id
!=
CONFIG_RTC_DRV_AT91SAM9_RTT
)
goto
fail
;
/* else we found it ... but fail unless we can bind to the RTC driver */
if
(
dev
->
driver
)
{
dev_dbg
(
dev
,
"busy, can't use as RTC!
\n
"
);
goto
fail
;
}
dev
->
driver
=
&
at91_rtc_driver
.
driver
;
if
(
device_attach
(
dev
)
==
0
)
{
dev_dbg
(
dev
,
"can't attach RTC!
\n
"
);
goto
fail
;
}
ret
=
at91_rtc_probe
(
pdev
);
if
(
ret
==
0
)
return
true
;
dev_dbg
(
dev
,
"RTC probe err %d!
\n
"
,
ret
);
fail:
return
false
;
}
static
int
__init
at91_rtc_init
(
void
)
{
int
status
;
struct
device
*
rtc
;
status
=
platform_driver_register
(
&
at91_rtc_driver
);
if
(
status
)
return
status
;
rtc
=
bus_find_device
(
&
platform_bus_type
,
NULL
,
NULL
,
at91_rtc_match
);
if
(
!
rtc
)
platform_driver_unregister
(
&
at91_rtc_driver
);
return
rtc
?
0
:
-
ENODEV
;
return
platform_driver_register
(
&
at91_rtc_driver
);
}
module_init
(
at91_rtc_init
);
...
...
drivers/tty/serial/atmel_serial.c
View file @
d50673ed
...
...
@@ -1526,6 +1526,8 @@ void __init atmel_register_uart_fns(struct atmel_port_fns *fns)
atmel_pops
.
set_wake
=
fns
->
set_wake
;
}
struct
platform_device
*
atmel_default_console_device
;
/* the serial console device */
#ifdef CONFIG_SERIAL_ATMEL_CONSOLE
static
void
atmel_console_putchar
(
struct
uart_port
*
port
,
int
ch
)
{
...
...
drivers/usb/gadget/Kconfig
View file @
d50673ed
...
...
@@ -137,7 +137,7 @@ choice
config USB_AT91
tristate "Atmel AT91 USB Device Port"
depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91
CAP9 && !ARCH_AT91
SAM9G45
depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91SAM9G45
help
Many Atmel AT91 processors (such as the AT91RM2000) have a
full speed USB Device Port with support for five configurable
...
...
@@ -150,7 +150,7 @@ config USB_AT91
config USB_ATMEL_USBA
tristate "Atmel USBA"
select USB_GADGET_DUALSPEED
depends on AVR32 || ARCH_AT91
CAP9 || ARCH_AT91
SAM9RL || ARCH_AT91SAM9G45
depends on AVR32 || ARCH_AT91SAM9RL || ARCH_AT91SAM9G45
help
USBA is the integrated high-speed USB Device controller on
the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.
...
...
drivers/usb/gadget/at91_udc.c
View file @
d50673ed
...
...
@@ -41,6 +41,7 @@
#include <mach/board.h>
#include <mach/cpu.h>
#include <mach/at91sam9261_matrix.h>
#include <mach/at91_matrix.h>
#include "at91_udc.h"
...
...
@@ -910,9 +911,9 @@ static void pullup(struct at91_udc *udc, int is_on)
}
else
if
(
cpu_is_at91sam9261
()
||
cpu_is_at91sam9g10
())
{
u32
usbpucr
;
usbpucr
=
at91_
sys
_read
(
AT91_MATRIX_USBPUCR
);
usbpucr
=
at91_
matrix
_read
(
AT91_MATRIX_USBPUCR
);
usbpucr
|=
AT91_MATRIX_USBPUCR_PUON
;
at91_
sys
_write
(
AT91_MATRIX_USBPUCR
,
usbpucr
);
at91_
matrix
_write
(
AT91_MATRIX_USBPUCR
,
usbpucr
);
}
}
else
{
stop_activity
(
udc
);
...
...
@@ -928,9 +929,9 @@ static void pullup(struct at91_udc *udc, int is_on)
}
else
if
(
cpu_is_at91sam9261
()
||
cpu_is_at91sam9g10
())
{
u32
usbpucr
;
usbpucr
=
at91_
sys
_read
(
AT91_MATRIX_USBPUCR
);
usbpucr
=
at91_
matrix
_read
(
AT91_MATRIX_USBPUCR
);
usbpucr
&=
~
AT91_MATRIX_USBPUCR_PUON
;
at91_
sys
_write
(
AT91_MATRIX_USBPUCR
,
usbpucr
);
at91_
matrix
_write
(
AT91_MATRIX_USBPUCR
,
usbpucr
);
}
clk_off
(
udc
);
}
...
...
drivers/usb/gadget/atmel_usba_udc.c
View file @
d50673ed
...
...
@@ -332,12 +332,12 @@ static int vbus_is_present(struct usba_udc *udc)
static
void
toggle_bias
(
int
is_on
)
{
unsigned
int
uckr
=
at91_
sys
_read
(
AT91_CKGR_UCKR
);
unsigned
int
uckr
=
at91_
pmc
_read
(
AT91_CKGR_UCKR
);
if
(
is_on
)
at91_
sys
_write
(
AT91_CKGR_UCKR
,
uckr
|
AT91_PMC_BIASEN
);
at91_
pmc
_write
(
AT91_CKGR_UCKR
,
uckr
|
AT91_PMC_BIASEN
);
else
at91_
sys
_write
(
AT91_CKGR_UCKR
,
uckr
&
~
(
AT91_PMC_BIASEN
));
at91_
pmc
_write
(
AT91_CKGR_UCKR
,
uckr
&
~
(
AT91_PMC_BIASEN
));
}
#else
...
...
drivers/watchdog/at91rm9200_wdt.c
View file @
d50673ed
...
...
@@ -51,7 +51,7 @@ static unsigned long at91wdt_busy;
*/
static
inline
void
at91_wdt_stop
(
void
)
{
at91_s
ys
_write
(
AT91_ST_WDMR
,
AT91_ST_EXTEN
);
at91_s
t
_write
(
AT91_ST_WDMR
,
AT91_ST_EXTEN
);
}
/*
...
...
@@ -59,9 +59,9 @@ static inline void at91_wdt_stop(void)
*/
static
inline
void
at91_wdt_start
(
void
)
{
at91_s
ys
_write
(
AT91_ST_WDMR
,
AT91_ST_EXTEN
|
AT91_ST_RSTEN
|
at91_s
t
_write
(
AT91_ST_WDMR
,
AT91_ST_EXTEN
|
AT91_ST_RSTEN
|
(((
65536
*
wdt_time
)
>>
8
)
&
AT91_ST_WDV
));
at91_s
ys
_write
(
AT91_ST_CR
,
AT91_ST_WDRST
);
at91_s
t
_write
(
AT91_ST_CR
,
AT91_ST_WDRST
);
}
/*
...
...
@@ -69,7 +69,7 @@ static inline void at91_wdt_start(void)
*/
static
inline
void
at91_wdt_reload
(
void
)
{
at91_s
ys
_write
(
AT91_ST_CR
,
AT91_ST_WDRST
);
at91_s
t
_write
(
AT91_ST_CR
,
AT91_ST_WDRST
);
}
/* ......................................................................... */
...
...
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