Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
d50673ed
cloud-kernel
项目概览
openanolis
/
cloud-kernel
接近 2 年 前同步成功
通知
169
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d50673ed
编写于
3月 04, 2012
作者:
R
Rob Herring
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'arm-soc/at91/base2+cleanup' into cleanup-base
上级
ab15e0e8
7eca30ae
变更
87
展开全部
隐藏空白更改
内联
并排
Showing
87 changed file
with
2025 addition
and
2944 deletion
+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
未找到文件。
Documentation/feature-removal-schedule.txt
浏览文件 @
d50673ed
...
@@ -510,17 +510,3 @@ Why: The pci_scan_bus_parented() interface creates a new root bus. The
...
@@ -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
convert to using pci_scan_root_bus() so they can supply a list of
bus resources when the bus is created.
bus resources when the bus is created.
Who: Bjorn Helgaas <bhelgaas@google.com>
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
浏览文件 @
d50673ed
...
@@ -327,7 +327,7 @@ config ARCH_AT91
...
@@ -327,7 +327,7 @@ config ARCH_AT91
select CLKDEV_LOOKUP
select CLKDEV_LOOKUP
help
help
This enables support for systems based on the Atmel AT91RM9200,
This enables support for systems based on the Atmel AT91RM9200,
AT91SAM9
and AT91CAP9
processors.
AT91SAM9 processors.
config ARCH_BCMRING
config ARCH_BCMRING
bool "Broadcom BCMRING"
bool "Broadcom BCMRING"
...
...
arch/arm/Kconfig.debug
浏览文件 @
d50673ed
...
@@ -86,7 +86,7 @@ choice
...
@@ -86,7 +86,7 @@ choice
depends on HAVE_AT91_DBGU0
depends on HAVE_AT91_DBGU0
config AT91_DEBUG_LL_DBGU1
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
depends on HAVE_AT91_DBGU1
config DEBUG_CLPS711X_UART1
config DEBUG_CLPS711X_UART1
...
...
arch/arm/boot/dts/at91sam9g25ek.dts
0 → 100644
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
已删除
100644 → 0
浏览文件 @
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
浏览文件 @
d50673ed
...
@@ -102,13 +102,13 @@ config ARCH_AT91SAM9G45
...
@@ -102,13 +102,13 @@ config ARCH_AT91SAM9G45
select HAVE_AT91_DBGU1
select HAVE_AT91_DBGU1
select AT91_SAM9G45_RESET
select AT91_SAM9G45_RESET
config ARCH_AT91
CAP9
config ARCH_AT91
SAM9X5
bool "AT91
CAP9
"
bool "AT91
SAM9x5 family
"
select CPU_ARM926T
select CPU_ARM926T
select GENERIC_CLOCKEVENTS
select GENERIC_CLOCKEVENTS
select HAVE_FB_ATMEL
select HAVE_FB_ATMEL
select HAVE_NET_MACB
select HAVE_NET_MACB
select HAVE_AT91_DBGU
1
select HAVE_AT91_DBGU
0
select AT91_SAM9G45_RESET
select AT91_SAM9G45_RESET
config ARCH_AT91X40
config ARCH_AT91X40
...
@@ -447,21 +447,6 @@ endif
...
@@ -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
if ARCH_AT91X40
comment "AT91X40 Board Type"
comment "AT91X40 Board Type"
...
@@ -544,7 +529,7 @@ config AT91_EARLY_DBGU0
...
@@ -544,7 +529,7 @@ config AT91_EARLY_DBGU0
depends on HAVE_AT91_DBGU0
depends on HAVE_AT91_DBGU0
config AT91_EARLY_DBGU1
config AT91_EARLY_DBGU1
bool "DBGU on 9263
, 9g45 and cap9
"
bool "DBGU on 9263
and 9g45
"
depends on HAVE_AT91_DBGU1
depends on HAVE_AT91_DBGU1
config AT91_EARLY_USART0
config AT91_EARLY_USART0
...
...
arch/arm/mach-at91/Makefile
浏览文件 @
d50673ed
...
@@ -20,7 +20,7 @@ obj-$(CONFIG_ARCH_AT91SAM9263) += at91sam9263.o at91sam926x_time.o at91sam9263_d
...
@@ -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_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_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_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
obj-$(CONFIG_ARCH_AT91X40)
+=
at91x40.o at91x40_time.o
# AT91RM9200 board-specific support
# AT91RM9200 board-specific support
...
@@ -81,9 +81,6 @@ obj-$(CONFIG_MACH_AT91SAM9M10G45EK) += board-sam9m10g45ek.o
...
@@ -81,9 +81,6 @@ obj-$(CONFIG_MACH_AT91SAM9M10G45EK) += board-sam9m10g45ek.o
# AT91SAM board with device-tree
# AT91SAM board with device-tree
obj-$(CONFIG_MACH_AT91SAM_DT)
+=
board-dt.o
obj-$(CONFIG_MACH_AT91SAM_DT)
+=
board-dt.o
# AT91CAP9 board-specific support
obj-$(CONFIG_MACH_AT91CAP9ADK)
+=
board-cap9adk.o
# AT91X40 board-specific support
# AT91X40 board-specific support
obj-$(CONFIG_MACH_AT91EB01)
+=
board-eb01.o
obj-$(CONFIG_MACH_AT91EB01)
+=
board-eb01.o
...
...
arch/arm/mach-at91/Makefile.boot
浏览文件 @
d50673ed
...
@@ -3,11 +3,7 @@
...
@@ -3,11 +3,7 @@
# PARAMS_PHYS must be within 4MB of ZRELADDR
# PARAMS_PHYS must be within 4MB of ZRELADDR
# INITRD_PHYS must be in RAM
# INITRD_PHYS must be in RAM
ifeq
($(CONFIG_ARCH_AT91CAP9),y)
ifeq
($(CONFIG_ARCH_AT91SAM9G45),y)
zreladdr-y
+=
0x70008000
params_phys-y
:=
0x70000100
initrd_phys-y
:=
0x70410000
else
ifeq
($(CONFIG_ARCH_AT91SAM9G45),y)
zreladdr-y
+=
0x70008000
zreladdr-y
+=
0x70008000
params_phys-y
:=
0x70000100
params_phys-y
:=
0x70000100
initrd_phys-y
:=
0x70410000
initrd_phys-y
:=
0x70410000
...
@@ -17,4 +13,10 @@ params_phys-y := 0x20000100
...
@@ -17,4 +13,10 @@ params_phys-y := 0x20000100
initrd_phys-y
:=
0x20410000
initrd_phys-y
:=
0x20410000
endif
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
已删除
100644 → 0
浏览文件 @
ab15e0e8
此差异已折叠。
点击以展开。
arch/arm/mach-at91/at91rm9200.c
浏览文件 @
d50673ed
...
@@ -295,7 +295,7 @@ static void at91rm9200_idle(void)
...
@@ -295,7 +295,7 @@ static void at91rm9200_idle(void)
* Disable the processor clock. The processor will be automatically
* Disable the processor clock. The processor will be automatically
* re-enabled by an interrupt or by a reset.
* 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
)
static
void
at91rm9200_restart
(
char
mode
,
const
char
*
cmd
)
...
@@ -303,8 +303,8 @@ 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.
* 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
t
_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_CR
,
AT91_ST_WDRST
);
}
}
/* --------------------------------------------------------------------
/* --------------------------------------------------------------------
...
@@ -319,6 +319,8 @@ static void __init at91rm9200_map_io(void)
...
@@ -319,6 +319,8 @@ static void __init at91rm9200_map_io(void)
static
void
__init
at91rm9200_ioremap_registers
(
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
)
static
void
__init
at91rm9200_initialize
(
void
)
...
...
arch/arm/mach-at91/at91rm9200_devices.c
浏览文件 @
d50673ed
...
@@ -21,6 +21,7 @@
...
@@ -21,6 +21,7 @@
#include <mach/board.h>
#include <mach/board.h>
#include <mach/at91rm9200.h>
#include <mach/at91rm9200.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include "generic.h"
#include "generic.h"
...
@@ -241,15 +242,15 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
...
@@ -241,15 +242,15 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
data
->
chipselect
=
4
;
/* can only use EBI ChipSelect 4 */
data
->
chipselect
=
4
;
/* can only use EBI ChipSelect 4 */
/* CF takes over CS4, CS5, CS6 */
/* CF takes over CS4, CS5, CS6 */
csa
=
at91_
sys_read
(
AT91_EBI_CSA
);
csa
=
at91_
ramc_read
(
0
,
AT91_EBI_CSA
);
at91_
sys_write
(
AT91_EBI_CSA
,
csa
|
AT91_EBI_CS4A_SMC_COMPACTFLASH
);
at91_
ramc_write
(
0
,
AT91_EBI_CSA
,
csa
|
AT91_EBI_CS4A_SMC_COMPACTFLASH
);
/*
/*
* Static memory controller timing adjustments.
* Static memory controller timing adjustments.
* REVISIT: these timings are in terms of MCK cycles, so
* REVISIT: these timings are in terms of MCK cycles, so
* when MCK changes (cpufreq etc) so must these values...
* 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_ACSS_STD
|
AT91_SMC_DBW_16
|
AT91_SMC_DBW_16
|
AT91_SMC_BAT
|
AT91_SMC_BAT
...
@@ -407,11 +408,11 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
...
@@ -407,11 +408,11 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
return
;
return
;
/* enable the address range of CS3 */
/* enable the address range of CS3 */
csa
=
at91_
sys_read
(
AT91_EBI_CSA
);
csa
=
at91_
ramc_read
(
0
,
AT91_EBI_CSA
);
at91_
sys_write
(
AT91_EBI_CSA
,
csa
|
AT91_EBI_CS3A_SMC_SMARTMEDIA
);
at91_
ramc_write
(
0
,
AT91_EBI_CSA
,
csa
|
AT91_EBI_CS3A_SMC_SMARTMEDIA
);
/* set the bus interface characteristics */
/* 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_NWS_
(
5
)
|
AT91_SMC_TDF_
(
1
)
|
AT91_SMC_TDF_
(
1
)
|
AT91_SMC_RWSETUP_
(
0
)
/* tDS Data Set up Time 30 - ns */
|
AT91_SMC_RWSETUP_
(
0
)
/* tDS Data Set up Time 30 - ns */
...
@@ -1114,7 +1115,6 @@ static inline void configure_usart3_pins(unsigned pins)
...
@@ -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 */
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
)
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{
{
...
...
arch/arm/mach-at91/at91rm9200_time.c
浏览文件 @
d50673ed
...
@@ -43,9 +43,9 @@ static inline unsigned long read_CRTR(void)
...
@@ -43,9 +43,9 @@ static inline unsigned long read_CRTR(void)
{
{
unsigned
long
x1
,
x2
;
unsigned
long
x1
,
x2
;
x1
=
at91_s
ys
_read
(
AT91_ST_CRTR
);
x1
=
at91_s
t
_read
(
AT91_ST_CRTR
);
do
{
do
{
x2
=
at91_s
ys
_read
(
AT91_ST_CRTR
);
x2
=
at91_s
t
_read
(
AT91_ST_CRTR
);
if
(
x1
==
x2
)
if
(
x1
==
x2
)
break
;
break
;
x1
=
x2
;
x1
=
x2
;
...
@@ -58,7 +58,7 @@ static inline unsigned long read_CRTR(void)
...
@@ -58,7 +58,7 @@ static inline unsigned long read_CRTR(void)
*/
*/
static
irqreturn_t
at91rm9200_timer_interrupt
(
int
irq
,
void
*
dev_id
)
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
* irqs should be disabled here, but as the irq is shared they are only
...
@@ -110,22 +110,22 @@ static void
...
@@ -110,22 +110,22 @@ static void
clkevt32k_mode
(
enum
clock_event_mode
mode
,
struct
clock_event_device
*
dev
)
clkevt32k_mode
(
enum
clock_event_mode
mode
,
struct
clock_event_device
*
dev
)
{
{
/* Disable and flush pending timer interrupts */
/* Disable and flush pending timer interrupts */
at91_s
ys
_write
(
AT91_ST_IDR
,
AT91_ST_PITS
|
AT91_ST_ALMS
);
at91_s
t
_write
(
AT91_ST_IDR
,
AT91_ST_PITS
|
AT91_ST_ALMS
);
(
void
)
at91_sys
_read
(
AT91_ST_SR
);
at91_st
_read
(
AT91_ST_SR
);
last_crtr
=
read_CRTR
();
last_crtr
=
read_CRTR
();
switch
(
mode
)
{
switch
(
mode
)
{
case
CLOCK_EVT_MODE_PERIODIC
:
case
CLOCK_EVT_MODE_PERIODIC
:
/* PIT for periodic irqs; fixed rate of 1/HZ */
/* PIT for periodic irqs; fixed rate of 1/HZ */
irqmask
=
AT91_ST_PITS
;
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
;
break
;
case
CLOCK_EVT_MODE_ONESHOT
:
case
CLOCK_EVT_MODE_ONESHOT
:
/* ALM for oneshot irqs, set by next_event()
/* ALM for oneshot irqs, set by next_event()
* before 32 seconds have passed
* before 32 seconds have passed
*/
*/
irqmask
=
AT91_ST_ALMS
;
irqmask
=
AT91_ST_ALMS
;
at91_s
ys
_write
(
AT91_ST_RTAR
,
last_crtr
);
at91_s
t
_write
(
AT91_ST_RTAR
,
last_crtr
);
break
;
break
;
case
CLOCK_EVT_MODE_SHUTDOWN
:
case
CLOCK_EVT_MODE_SHUTDOWN
:
case
CLOCK_EVT_MODE_UNUSED
:
case
CLOCK_EVT_MODE_UNUSED
:
...
@@ -133,7 +133,7 @@ clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev)
...
@@ -133,7 +133,7 @@ clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev)
irqmask
=
0
;
irqmask
=
0
;
break
;
break
;
}
}
at91_s
ys
_write
(
AT91_ST_IER
,
irqmask
);
at91_s
t
_write
(
AT91_ST_IER
,
irqmask
);
}
}
static
int
static
int
...
@@ -156,12 +156,12 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev)
...
@@ -156,12 +156,12 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev)
alm
=
read_CRTR
();
alm
=
read_CRTR
();
/* Cancel any pending alarm; flush any pending IRQ */
/* Cancel any pending alarm; flush any pending IRQ */
at91_s
ys
_write
(
AT91_ST_RTAR
,
alm
);
at91_s
t
_write
(
AT91_ST_RTAR
,
alm
);
(
void
)
at91_sys
_read
(
AT91_ST_SR
);
at91_st
_read
(
AT91_ST_SR
);
/* Schedule alarm by writing RTAR. */
/* Schedule alarm by writing RTAR. */
alm
+=
delta
;
alm
+=
delta
;
at91_s
ys
_write
(
AT91_ST_RTAR
,
alm
);
at91_s
t
_write
(
AT91_ST_RTAR
,
alm
);
return
status
;
return
status
;
}
}
...
@@ -175,15 +175,24 @@ static struct clock_event_device clkevt = {
...
@@ -175,15 +175,24 @@ static struct clock_event_device clkevt = {
.
set_mode
=
clkevt32k_mode
,
.
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.
* ST (system timer) module supports both clockevents and clocksource.
*/
*/
void
__init
at91rm9200_timer_init
(
void
)
void
__init
at91rm9200_timer_init
(
void
)
{
{
/* Disable all timer interrupts, and clear any pending ones */
/* 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
);
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 */
/* Make IRQs happen for the system timer */
setup_irq
(
AT91_ID_SYS
,
&
at91rm9200_timer_irq
);
setup_irq
(
AT91_ID_SYS
,
&
at91rm9200_timer_irq
);
...
@@ -192,7 +201,7 @@ void __init at91rm9200_timer_init(void)
...
@@ -192,7 +201,7 @@ void __init at91rm9200_timer_init(void)
* directly for the clocksource and all clockevents, after adjusting
* directly for the clocksource and all clockevents, after adjusting
* its prescaler from the 1 Hz default.
* 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!!) */
/* Setup timer clockevent, with minimum of two ticks (important!!) */
clkevt
.
mult
=
div_sc
(
AT91_SLOW_CLOCK
,
NSEC_PER_SEC
,
clkevt
.
shift
);
clkevt
.
mult
=
div_sc
(
AT91_SLOW_CLOCK
,
NSEC_PER_SEC
,
clkevt
.
shift
);
...
...
arch/arm/mach-at91/at91sam9260.c
浏览文件 @
d50673ed
...
@@ -310,34 +310,27 @@ static void __init at91sam9xe_map_io(void)
...
@@ -310,34 +310,27 @@ static void __init at91sam9xe_map_io(void)
static
void
__init
at91sam9260_map_io
(
void
)
static
void
__init
at91sam9260_map_io
(
void
)
{
{
if
(
cpu_is_at91sam9xe
())
{
if
(
cpu_is_at91sam9xe
())
at91sam9xe_map_io
();
at91sam9xe_map_io
();
}
else
if
(
cpu_is_at91sam9g20
())
{
else
if
(
cpu_is_at91sam9g20
())
at91_init_sram
(
0
,
AT91SAM9G20_SRAM0_BASE
,
AT91SAM9G20_SRAM0_SIZE
);
at91_init_sram
(
0
,
AT91SAM9G20_SRAM_BASE
,
AT91SAM9G20_SRAM_SIZE
);
at91_init_sram
(
1
,
AT91SAM9G20_SRAM1_BASE
,
AT91SAM9G20_SRAM1_SIZE
);
else
}
else
{
at91_init_sram
(
0
,
AT91SAM9260_SRAM_BASE
,
AT91SAM9260_SRAM_SIZE
);
at91_init_sram
(
0
,
AT91SAM9260_SRAM0_BASE
,
AT91SAM9260_SRAM0_SIZE
);
at91_init_sram
(
1
,
AT91SAM9260_SRAM1_BASE
,
AT91SAM9260_SRAM1_SIZE
);
}
}
}
static
void
__init
at91sam9260_ioremap_registers
(
void
)
static
void
__init
at91sam9260_ioremap_registers
(
void
)
{
{
at91_ioremap_shdwc
(
AT91SAM9260_BASE_SHDWC
);
at91_ioremap_shdwc
(
AT91SAM9260_BASE_SHDWC
);
at91_ioremap_rstc
(
AT91SAM9260_BASE_RSTC
);
at91_ioremap_rstc
(
AT91SAM9260_BASE_RSTC
);
at91_ioremap_ramc
(
0
,
AT91SAM9260_BASE_SDRAMC
,
512
);
at91sam926x_ioremap_pit
(
AT91SAM9260_BASE_PIT
);
at91sam926x_ioremap_pit
(
AT91SAM9260_BASE_PIT
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9260_BASE_SMC
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9260_BASE_SMC
);
}
at91_ioremap_matrix
(
AT91SAM9260_BASE_MATRIX
);
static
void
at91sam9260_idle
(
void
)
{
at91_sys_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
cpu_do_idle
();
}
}
static
void
__init
at91sam9260_initialize
(
void
)
static
void
__init
at91sam9260_initialize
(
void
)
{
{
arm_pm_idle
=
at91sam9
260
_idle
;
arm_pm_idle
=
at91sam9_idle
;
arm_pm_restart
=
at91sam9_alt_restart
;
arm_pm_restart
=
at91sam9_alt_restart
;
at91_extern_irq
=
(
1
<<
AT91SAM9260_ID_IRQ0
)
|
(
1
<<
AT91SAM9260_ID_IRQ1
)
at91_extern_irq
=
(
1
<<
AT91SAM9260_ID_IRQ0
)
|
(
1
<<
AT91SAM9260_ID_IRQ1
)
|
(
1
<<
AT91SAM9260_ID_IRQ2
);
|
(
1
<<
AT91SAM9260_ID_IRQ2
);
...
...
arch/arm/mach-at91/at91sam9260_devices.c
浏览文件 @
d50673ed
...
@@ -21,6 +21,7 @@
...
@@ -21,6 +21,7 @@
#include <mach/cpu.h>
#include <mach/cpu.h>
#include <mach/at91sam9260.h>
#include <mach/at91sam9260.h>
#include <mach/at91sam9260_matrix.h>
#include <mach/at91sam9260_matrix.h>
#include <mach/at91_matrix.h>
#include <mach/at91sam9_smc.h>
#include <mach/at91sam9_smc.h>
#include "generic.h"
#include "generic.h"
...
@@ -422,8 +423,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
...
@@ -422,8 +423,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
if
(
!
data
)
if
(
!
data
)
return
;
return
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBICSA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBICSA
);
at91_
sys
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_CS3A_SMC_SMARTMEDIA
);
at91_
matrix
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_CS3A_SMC_SMARTMEDIA
);
/* enable pin */
/* enable pin */
if
(
gpio_is_valid
(
data
->
enable_pin
))
if
(
gpio_is_valid
(
data
->
enable_pin
))
...
@@ -717,18 +718,42 @@ static struct resource rtt_resources[] = {
...
@@ -717,18 +718,42 @@ static struct resource rtt_resources[] = {
.
start
=
AT91SAM9260_BASE_RTT
,
.
start
=
AT91SAM9260_BASE_RTT
,
.
end
=
AT91SAM9260_BASE_RTT
+
SZ_16
-
1
,
.
end
=
AT91SAM9260_BASE_RTT
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
}
},
{
.
flags
=
IORESOURCE_MEM
,
},
};
};
static
struct
platform_device
at91sam9260_rtt_device
=
{
static
struct
platform_device
at91sam9260_rtt_device
=
{
.
name
=
"at91_rtt"
,
.
name
=
"at91_rtt"
,
.
id
=
0
,
.
id
=
0
,
.
resource
=
rtt_resources
,
.
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
)
static
void
__init
at91_add_device_rtt
(
void
)
{
{
at91_add_device_rtt_rtc
();
platform_device_register
(
&
at91sam9260_rtt_device
);
platform_device_register
(
&
at91sam9260_rtt_device
);
}
}
...
@@ -1139,7 +1164,6 @@ static inline void configure_usart5_pins(void)
...
@@ -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 */
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
)
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)
...
@@ -1265,7 +1289,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
if
(
!
data
)
if
(
!
data
)
return
;
return
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBICSA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBICSA
);
switch
(
data
->
chipselect
)
{
switch
(
data
->
chipselect
)
{
case
4
:
case
4
:
...
@@ -1288,7 +1312,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
...
@@ -1288,7 +1312,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
return
;
return
;
}
}
at91_
sys
_write
(
AT91_MATRIX_EBICSA
,
csa
);
at91_
matrix
_write
(
AT91_MATRIX_EBICSA
,
csa
);
if
(
gpio_is_valid
(
data
->
rst_pin
))
{
if
(
gpio_is_valid
(
data
->
rst_pin
))
{
at91_set_multi_drive
(
data
->
rst_pin
,
0
);
at91_set_multi_drive
(
data
->
rst_pin
,
0
);
...
...
arch/arm/mach-at91/at91sam9261.c
浏览文件 @
d50673ed
...
@@ -283,19 +283,15 @@ static void __init at91sam9261_ioremap_registers(void)
...
@@ -283,19 +283,15 @@ static void __init at91sam9261_ioremap_registers(void)
{
{
at91_ioremap_shdwc
(
AT91SAM9261_BASE_SHDWC
);
at91_ioremap_shdwc
(
AT91SAM9261_BASE_SHDWC
);
at91_ioremap_rstc
(
AT91SAM9261_BASE_RSTC
);
at91_ioremap_rstc
(
AT91SAM9261_BASE_RSTC
);
at91_ioremap_ramc
(
0
,
AT91SAM9261_BASE_SDRAMC
,
512
);
at91sam926x_ioremap_pit
(
AT91SAM9261_BASE_PIT
);
at91sam926x_ioremap_pit
(
AT91SAM9261_BASE_PIT
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9261_BASE_SMC
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9261_BASE_SMC
);
}
at91_ioremap_matrix
(
AT91SAM9261_BASE_MATRIX
);
static
void
at91sam9261_idle
(
void
)
{
at91_sys_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
cpu_do_idle
();
}
}
static
void
__init
at91sam9261_initialize
(
void
)
static
void
__init
at91sam9261_initialize
(
void
)
{
{
arm_pm_idle
=
at91sam9
261
_idle
;
arm_pm_idle
=
at91sam9_idle
;
arm_pm_restart
=
at91sam9_alt_restart
;
arm_pm_restart
=
at91sam9_alt_restart
;
at91_extern_irq
=
(
1
<<
AT91SAM9261_ID_IRQ0
)
|
(
1
<<
AT91SAM9261_ID_IRQ1
)
at91_extern_irq
=
(
1
<<
AT91SAM9261_ID_IRQ0
)
|
(
1
<<
AT91SAM9261_ID_IRQ1
)
|
(
1
<<
AT91SAM9261_ID_IRQ2
);
|
(
1
<<
AT91SAM9261_ID_IRQ2
);
...
...
arch/arm/mach-at91/at91sam9261_devices.c
浏览文件 @
d50673ed
...
@@ -24,6 +24,7 @@
...
@@ -24,6 +24,7 @@
#include <mach/board.h>
#include <mach/board.h>
#include <mach/at91sam9261.h>
#include <mach/at91sam9261.h>
#include <mach/at91sam9261_matrix.h>
#include <mach/at91sam9261_matrix.h>
#include <mach/at91_matrix.h>
#include <mach/at91sam9_smc.h>
#include <mach/at91sam9_smc.h>
#include "generic.h"
#include "generic.h"
...
@@ -236,8 +237,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
...
@@ -236,8 +237,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
if
(
!
data
)
if
(
!
data
)
return
;
return
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBICSA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBICSA
);
at91_
sys
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_CS3A_SMC_SMARTMEDIA
);
at91_
matrix
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_CS3A_SMC_SMARTMEDIA
);
/* enable pin */
/* enable pin */
if
(
gpio_is_valid
(
data
->
enable_pin
))
if
(
gpio_is_valid
(
data
->
enable_pin
))
...
@@ -603,6 +604,8 @@ static struct resource rtt_resources[] = {
...
@@ -603,6 +604,8 @@ static struct resource rtt_resources[] = {
.
start
=
AT91SAM9261_BASE_RTT
,
.
start
=
AT91SAM9261_BASE_RTT
,
.
end
=
AT91SAM9261_BASE_RTT
+
SZ_16
-
1
,
.
end
=
AT91SAM9261_BASE_RTT
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
flags
=
IORESOURCE_MEM
,
}
}
};
};
...
@@ -610,11 +613,32 @@ static struct platform_device at91sam9261_rtt_device = {
...
@@ -610,11 +613,32 @@ static struct platform_device at91sam9261_rtt_device = {
.
name
=
"at91_rtt"
,
.
name
=
"at91_rtt"
,
.
id
=
0
,
.
id
=
0
,
.
resource
=
rtt_resources
,
.
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
)
static
void
__init
at91_add_device_rtt
(
void
)
{
{
at91_add_device_rtt_rtc
();
platform_device_register
(
&
at91sam9261_rtt_device
);
platform_device_register
(
&
at91sam9261_rtt_device
);
}
}
...
@@ -991,7 +1015,6 @@ static inline void configure_usart2_pins(unsigned pins)
...
@@ -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 */
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
)
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{
{
...
...
arch/arm/mach-at91/at91sam9263.c
浏览文件 @
d50673ed
...
@@ -303,20 +303,17 @@ static void __init at91sam9263_ioremap_registers(void)
...
@@ -303,20 +303,17 @@ static void __init at91sam9263_ioremap_registers(void)
{
{
at91_ioremap_shdwc
(
AT91SAM9263_BASE_SHDWC
);
at91_ioremap_shdwc
(
AT91SAM9263_BASE_SHDWC
);
at91_ioremap_rstc
(
AT91SAM9263_BASE_RSTC
);
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
);
at91sam926x_ioremap_pit
(
AT91SAM9263_BASE_PIT
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9263_BASE_SMC0
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9263_BASE_SMC0
);
at91sam9_ioremap_smc
(
1
,
AT91SAM9263_BASE_SMC1
);
at91sam9_ioremap_smc
(
1
,
AT91SAM9263_BASE_SMC1
);
}
at91_ioremap_matrix
(
AT91SAM9263_BASE_MATRIX
);
static
void
at91sam9263_idle
(
void
)
{
at91_sys_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
cpu_do_idle
();
}
}
static
void
__init
at91sam9263_initialize
(
void
)
static
void
__init
at91sam9263_initialize
(
void
)
{
{
arm_pm_idle
=
at91sam9
263
_idle
;
arm_pm_idle
=
at91sam9_idle
;
arm_pm_restart
=
at91sam9_alt_restart
;
arm_pm_restart
=
at91sam9_alt_restart
;
at91_extern_irq
=
(
1
<<
AT91SAM9263_ID_IRQ0
)
|
(
1
<<
AT91SAM9263_ID_IRQ1
);
at91_extern_irq
=
(
1
<<
AT91SAM9263_ID_IRQ0
)
|
(
1
<<
AT91SAM9263_ID_IRQ1
);
...
...
arch/arm/mach-at91/at91sam9263_devices.c
浏览文件 @
d50673ed
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
#include <mach/board.h>
#include <mach/board.h>
#include <mach/at91sam9263.h>
#include <mach/at91sam9263.h>
#include <mach/at91sam9263_matrix.h>
#include <mach/at91sam9263_matrix.h>
#include <mach/at91_matrix.h>
#include <mach/at91sam9_smc.h>
#include <mach/at91sam9_smc.h>
#include "generic.h"
#include "generic.h"
...
@@ -409,7 +410,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
...
@@ -409,7 +410,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
* we assume SMC timings are configured by board code,
* we assume SMC timings are configured by board code,
* except True IDE where timings are controlled by driver
* 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
)
{
switch
(
data
->
chipselect
)
{
case
4
:
case
4
:
at91_set_A_periph
(
AT91_PIN_PD6
,
0
);
/* EBI0_NCS4/CFCS0 */
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)
...
@@ -428,7 +429,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
data
->
chipselect
);
data
->
chipselect
);
return
;
return
;
}
}
at91_
sys
_write
(
AT91_MATRIX_EBI0CSA
,
ebi0_csa
);
at91_
matrix
_write
(
AT91_MATRIX_EBI0CSA
,
ebi0_csa
);
if
(
gpio_is_valid
(
data
->
det_pin
))
{
if
(
gpio_is_valid
(
data
->
det_pin
))
{
at91_set_gpio_input
(
data
->
det_pin
,
1
);
at91_set_gpio_input
(
data
->
det_pin
,
1
);
...
@@ -496,8 +497,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
...
@@ -496,8 +497,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
if
(
!
data
)
if
(
!
data
)
return
;
return
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBI0CSA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBI0CSA
);
at91_
sys
_write
(
AT91_MATRIX_EBI0CSA
,
csa
|
AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA
);
at91_
matrix
_write
(
AT91_MATRIX_EBI0CSA
,
csa
|
AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA
);
/* enable pin */
/* enable pin */
if
(
gpio_is_valid
(
data
->
enable_pin
))
if
(
gpio_is_valid
(
data
->
enable_pin
))
...
@@ -891,7 +892,8 @@ static struct platform_device at91sam9263_isi_device = {
...
@@ -891,7 +892,8 @@ static struct platform_device at91sam9263_isi_device = {
.
num_resources
=
ARRAY_SIZE
(
isi_resources
),
.
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_PE0
,
0
);
/* ISI_D0 */
at91_set_A_periph
(
AT91_PIN_PE1
,
0
);
/* ISI_D1 */
at91_set_A_periph
(
AT91_PIN_PE1
,
0
);
/* ISI_D1 */
...
@@ -904,14 +906,20 @@ void __init at91_add_device_isi(void)
...
@@ -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_PE8
,
0
);
/* ISI_PCK */
at91_set_A_periph
(
AT91_PIN_PE9
,
0
);
/* ISI_HSYNC */
at91_set_A_periph
(
AT91_PIN_PE9
,
0
);
/* ISI_HSYNC */
at91_set_A_periph
(
AT91_PIN_PE10
,
0
);
/* ISI_VSYNC */
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_PE12
,
0
);
/* ISI_PD8 */
at91_set_B_periph
(
AT91_PIN_PE13
,
0
);
/* ISI_PD9 */
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_PE14
,
0
);
/* ISI_PD10 */
at91_set_B_periph
(
AT91_PIN_PE15
,
0
);
/* ISI_PD11 */
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
#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
#endif
...
@@ -959,6 +967,8 @@ static struct resource rtt0_resources[] = {
...
@@ -959,6 +967,8 @@ static struct resource rtt0_resources[] = {
.
start
=
AT91SAM9263_BASE_RTT0
,
.
start
=
AT91SAM9263_BASE_RTT0
,
.
end
=
AT91SAM9263_BASE_RTT0
+
SZ_16
-
1
,
.
end
=
AT91SAM9263_BASE_RTT0
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
flags
=
IORESOURCE_MEM
,
}
}
};
};
...
@@ -966,7 +976,6 @@ static struct platform_device at91sam9263_rtt0_device = {
...
@@ -966,7 +976,6 @@ static struct platform_device at91sam9263_rtt0_device = {
.
name
=
"at91_rtt"
,
.
name
=
"at91_rtt"
,
.
id
=
0
,
.
id
=
0
,
.
resource
=
rtt0_resources
,
.
resource
=
rtt0_resources
,
.
num_resources
=
ARRAY_SIZE
(
rtt0_resources
),
};
};
static
struct
resource
rtt1_resources
[]
=
{
static
struct
resource
rtt1_resources
[]
=
{
...
@@ -974,6 +983,8 @@ static struct resource rtt1_resources[] = {
...
@@ -974,6 +983,8 @@ static struct resource rtt1_resources[] = {
.
start
=
AT91SAM9263_BASE_RTT1
,
.
start
=
AT91SAM9263_BASE_RTT1
,
.
end
=
AT91SAM9263_BASE_RTT1
+
SZ_16
-
1
,
.
end
=
AT91SAM9263_BASE_RTT1
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
flags
=
IORESOURCE_MEM
,
}
}
};
};
...
@@ -981,11 +992,53 @@ static struct platform_device at91sam9263_rtt1_device = {
...
@@ -981,11 +992,53 @@ static struct platform_device at91sam9263_rtt1_device = {
.
name
=
"at91_rtt"
,
.
name
=
"at91_rtt"
,
.
id
=
1
,
.
id
=
1
,
.
resource
=
rtt1_resources
,
.
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
)
static
void
__init
at91_add_device_rtt
(
void
)
{
{
at91_add_device_rtt_rtc
();
platform_device_register
(
&
at91sam9263_rtt0_device
);
platform_device_register
(
&
at91sam9263_rtt0_device
);
platform_device_register
(
&
at91sam9263_rtt1_device
);
platform_device_register
(
&
at91sam9263_rtt1_device
);
}
}
...
@@ -1371,7 +1424,6 @@ static inline void configure_usart2_pins(unsigned pins)
...
@@ -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 */
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
)
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{
{
...
...
arch/arm/mach-at91/at91sam9_alt_reset.S
浏览文件 @
d50673ed
...
@@ -15,16 +15,17 @@
...
@@ -15,16 +15,17 @@
#include <linux/linkage.h>
#include <linux/linkage.h>
#include <mach/hardware.h>
#include <mach/hardware.h>
#include <mach/at91
sam9_sd
ramc.h>
#include <mach/at91
_
ramc.h>
#include <mach/at91_rstc.h>
#include <mach/at91_rstc.h>
.
arm
.
arm
.
globl
at91sam9_alt_restart
.
globl
at91sam9_alt_restart
at91sam9_alt_restart
:
ldr
r0
,
.
at91_va_base_sdramc
@
preload
constants
at91sam9_alt_restart
:
ldr
r0
,
=
at91_ramc_base
@
preload
constants
ldr
r1
,
=
at91_rstc_base
ldr
r0
,
[
r0
]
ldr
r1
,
[
r1
]
ldr
r4
,
=
at91_rstc_base
ldr
r1
,
[
r4
]
mov
r2
,
#
1
mov
r2
,
#
1
mov
r3
,
#
AT91_SDRAMC_LPCB_POWER_DOWN
mov
r3
,
#
AT91_SDRAMC_LPCB_POWER_DOWN
...
@@ -37,6 +38,3 @@ at91sam9_alt_restart: ldr r0, .at91_va_base_sdramc @ preload constants
...
@@ -37,6 +38,3 @@ at91sam9_alt_restart: ldr r0, .at91_va_base_sdramc @ preload constants
str
r4
,
[
r1
,
#
AT91_RSTC_CR
]
@
reset
processor
str
r4
,
[
r1
,
#
AT91_RSTC_CR
]
@
reset
processor
b
.
b
.
.
at91_va_base_sdramc
:
.
word
AT91_VA_BASE_SYS
+
AT91_SDRAMC0
arch/arm/mach-at91/at91sam9g45.c
浏览文件 @
d50673ed
...
@@ -317,12 +317,6 @@ static struct at91_gpio_bank at91sam9g45_gpio[] __initdata = {
...
@@ -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
* AT91SAM9G45 processor initialization
* -------------------------------------------------------------------- */
* -------------------------------------------------------------------- */
...
@@ -337,13 +331,16 @@ static void __init at91sam9g45_ioremap_registers(void)
...
@@ -337,13 +331,16 @@ static void __init at91sam9g45_ioremap_registers(void)
{
{
at91_ioremap_shdwc
(
AT91SAM9G45_BASE_SHDWC
);
at91_ioremap_shdwc
(
AT91SAM9G45_BASE_SHDWC
);
at91_ioremap_rstc
(
AT91SAM9G45_BASE_RSTC
);
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
);
at91sam926x_ioremap_pit
(
AT91SAM9G45_BASE_PIT
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9G45_BASE_SMC
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9G45_BASE_SMC
);
at91_ioremap_matrix
(
AT91SAM9G45_BASE_MATRIX
);
}
}
static
void
__init
at91sam9g45_initialize
(
void
)
static
void
__init
at91sam9g45_initialize
(
void
)
{
{
arm_pm_idle
=
at91sam9
g45
_idle
;
arm_pm_idle
=
at91sam9_idle
;
arm_pm_restart
=
at91sam9g45_restart
;
arm_pm_restart
=
at91sam9g45_restart
;
at91_extern_irq
=
(
1
<<
AT91SAM9G45_ID_IRQ0
);
at91_extern_irq
=
(
1
<<
AT91SAM9G45_ID_IRQ0
);
...
...
arch/arm/mach-at91/at91sam9g45_devices.c
浏览文件 @
d50673ed
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
#include <linux/dma-mapping.h>
#include <linux/dma-mapping.h>
#include <linux/gpio.h>
#include <linux/gpio.h>
#include <linux/clk.h>
#include <linux/platform_device.h>
#include <linux/platform_device.h>
#include <linux/i2c-gpio.h>
#include <linux/i2c-gpio.h>
#include <linux/atmel-mci.h>
#include <linux/atmel-mci.h>
...
@@ -24,11 +25,15 @@
...
@@ -24,11 +25,15 @@
#include <mach/board.h>
#include <mach/board.h>
#include <mach/at91sam9g45.h>
#include <mach/at91sam9g45.h>
#include <mach/at91sam9g45_matrix.h>
#include <mach/at91sam9g45_matrix.h>
#include <mach/at91_matrix.h>
#include <mach/at91sam9_smc.h>
#include <mach/at91sam9_smc.h>
#include <mach/at_hdmac.h>
#include <mach/at_hdmac.h>
#include <mach/atmel-mci.h>
#include <mach/atmel-mci.h>
#include <media/atmel-isi.h>
#include "generic.h"
#include "generic.h"
#include "clock.h"
/* --------------------------------------------------------------------
/* --------------------------------------------------------------------
...
@@ -38,10 +43,6 @@
...
@@ -38,10 +43,6 @@
#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
static
u64
hdmac_dmamask
=
DMA_BIT_MASK
(
32
);
static
u64
hdmac_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
at_dma_platform_data
atdma_pdata
=
{
.
nr_channels
=
8
,
};
static
struct
resource
hdmac_resources
[]
=
{
static
struct
resource
hdmac_resources
[]
=
{
[
0
]
=
{
[
0
]
=
{
.
start
=
AT91SAM9G45_BASE_DMA
,
.
start
=
AT91SAM9G45_BASE_DMA
,
...
@@ -56,12 +57,11 @@ static struct resource hdmac_resources[] = {
...
@@ -56,12 +57,11 @@ static struct resource hdmac_resources[] = {
};
};
static
struct
platform_device
at_hdmac_device
=
{
static
struct
platform_device
at_hdmac_device
=
{
.
name
=
"at
_hdmac
"
,
.
name
=
"at
91sam9g45_dma
"
,
.
id
=
-
1
,
.
id
=
-
1
,
.
dev
=
{
.
dev
=
{
.
dma_mask
=
&
hdmac_dmamask
,
.
dma_mask
=
&
hdmac_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
atdma_pdata
,
},
},
.
resource
=
hdmac_resources
,
.
resource
=
hdmac_resources
,
.
num_resources
=
ARRAY_SIZE
(
hdmac_resources
),
.
num_resources
=
ARRAY_SIZE
(
hdmac_resources
),
...
@@ -69,9 +69,15 @@ static struct platform_device at_hdmac_device = {
...
@@ -69,9 +69,15 @@ static struct platform_device at_hdmac_device = {
void
__init
at91_add_device_hdmac
(
void
)
void
__init
at91_add_device_hdmac
(
void
)
{
{
dma_cap_set
(
DMA_MEMCPY
,
atdma_pdata
.
cap_mask
);
#if defined(CONFIG_OF)
dma_cap_set
(
DMA_SLAVE
,
atdma_pdata
.
cap_mask
);
struct
device_node
*
of_node
=
platform_device_register
(
&
at_hdmac_device
);
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
#else
void
__init
at91_add_device_hdmac
(
void
)
{}
void
__init
at91_add_device_hdmac
(
void
)
{}
...
@@ -552,8 +558,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
...
@@ -552,8 +558,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
if
(
!
data
)
if
(
!
data
)
return
;
return
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBICSA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBICSA
);
at91_
sys
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA
);
at91_
matrix
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA
);
/* enable pin */
/* enable pin */
if
(
gpio_is_valid
(
data
->
enable_pin
))
if
(
gpio_is_valid
(
data
->
enable_pin
))
...
@@ -869,6 +875,96 @@ void __init at91_add_device_ac97(struct ac97c_platform_data *data)
...
@@ -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
)
{}
void
__init
at91_add_device_ac97
(
struct
ac97c_platform_data
*
data
)
{}
#endif
#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
* LCD Controller
...
@@ -1098,6 +1194,8 @@ static struct resource rtt_resources[] = {
...
@@ -1098,6 +1194,8 @@ static struct resource rtt_resources[] = {
.
start
=
AT91SAM9G45_BASE_RTT
,
.
start
=
AT91SAM9G45_BASE_RTT
,
.
end
=
AT91SAM9G45_BASE_RTT
+
SZ_16
-
1
,
.
end
=
AT91SAM9G45_BASE_RTT
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
flags
=
IORESOURCE_MEM
,
}
}
};
};
...
@@ -1105,11 +1203,32 @@ static struct platform_device at91sam9g45_rtt_device = {
...
@@ -1105,11 +1203,32 @@ static struct platform_device at91sam9g45_rtt_device = {
.
name
=
"at91_rtt"
,
.
name
=
"at91_rtt"
,
.
id
=
0
,
.
id
=
0
,
.
resource
=
rtt_resources
,
.
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
)
static
void
__init
at91_add_device_rtt
(
void
)
{
{
at91_add_device_rtt_rtc
();
platform_device_register
(
&
at91sam9g45_rtt_device
);
platform_device_register
(
&
at91sam9g45_rtt_device
);
}
}
...
@@ -1564,7 +1683,6 @@ static inline void configure_usart3_pins(unsigned pins)
...
@@ -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 */
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
)
void
__init
at91_register_uart
(
unsigned
id
,
unsigned
portnr
,
unsigned
pins
)
{
{
...
...
arch/arm/mach-at91/at91sam9g45_reset.S
浏览文件 @
d50673ed
...
@@ -12,7 +12,7 @@
...
@@ -12,7 +12,7 @@
#include <linux/linkage.h>
#include <linux/linkage.h>
#include <mach/hardware.h>
#include <mach/hardware.h>
#include <mach/at91
sam9_ddrsdr
.h>
#include <mach/at91
_ramc
.h>
#include <mach/at91_rstc.h>
#include <mach/at91_rstc.h>
.
arm
.
arm
...
@@ -20,9 +20,10 @@
...
@@ -20,9 +20,10 @@
.
globl
at91sam9g45_restart
.
globl
at91sam9g45_restart
at91sam9g45_restart
:
at91sam9g45_restart
:
ldr
r0
,
.
at91_va_base_sdramc0
@
preload
constants
ldr
r5
,
=
at91_ramc_base
@
preload
constants
ldr
r1
,
=
at91_rstc_base
ldr
r0
,
[
r5
]
ldr
r1
,
[
r1
]
ldr
r4
,
=
at91_rstc_base
ldr
r1
,
[
r4
]
mov
r2
,
#
1
mov
r2
,
#
1
mov
r3
,
#
AT91_DDRSDRC_LPCB_POWER_DOWN
mov
r3
,
#
AT91_DDRSDRC_LPCB_POWER_DOWN
...
@@ -35,6 +36,3 @@ at91sam9g45_restart:
...
@@ -35,6 +36,3 @@ at91sam9g45_restart:
str
r4
,
[
r1
,
#
AT91_RSTC_CR
]
@
reset
processor
str
r4
,
[
r1
,
#
AT91_RSTC_CR
]
@
reset
processor
b
.
b
.
.
at91_va_base_sdramc0
:
.
word
AT91_VA_BASE_SYS
+
AT91_DDRSDRC0
arch/arm/mach-at91/at91sam9rl.c
浏览文件 @
d50673ed
...
@@ -288,19 +288,15 @@ static void __init at91sam9rl_ioremap_registers(void)
...
@@ -288,19 +288,15 @@ static void __init at91sam9rl_ioremap_registers(void)
{
{
at91_ioremap_shdwc
(
AT91SAM9RL_BASE_SHDWC
);
at91_ioremap_shdwc
(
AT91SAM9RL_BASE_SHDWC
);
at91_ioremap_rstc
(
AT91SAM9RL_BASE_RSTC
);
at91_ioremap_rstc
(
AT91SAM9RL_BASE_RSTC
);
at91_ioremap_ramc
(
0
,
AT91SAM9RL_BASE_SDRAMC
,
512
);
at91sam926x_ioremap_pit
(
AT91SAM9RL_BASE_PIT
);
at91sam926x_ioremap_pit
(
AT91SAM9RL_BASE_PIT
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9RL_BASE_SMC
);
at91sam9_ioremap_smc
(
0
,
AT91SAM9RL_BASE_SMC
);
}
at91_ioremap_matrix
(
AT91SAM9RL_BASE_MATRIX
);
static
void
at91sam9rl_idle
(
void
)
{
at91_sys_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
cpu_do_idle
();
}
}
static
void
__init
at91sam9rl_initialize
(
void
)
static
void
__init
at91sam9rl_initialize
(
void
)
{
{
arm_pm_idle
=
at91sam9
rl
_idle
;
arm_pm_idle
=
at91sam9_idle
;
arm_pm_restart
=
at91sam9_alt_restart
;
arm_pm_restart
=
at91sam9_alt_restart
;
at91_extern_irq
=
(
1
<<
AT91SAM9RL_ID_IRQ0
);
at91_extern_irq
=
(
1
<<
AT91SAM9RL_ID_IRQ0
);
...
...
arch/arm/mach-at91/at91sam9rl_devices.c
浏览文件 @
d50673ed
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
#include <mach/board.h>
#include <mach/board.h>
#include <mach/at91sam9rl.h>
#include <mach/at91sam9rl.h>
#include <mach/at91sam9rl_matrix.h>
#include <mach/at91sam9rl_matrix.h>
#include <mach/at91_matrix.h>
#include <mach/at91sam9_smc.h>
#include <mach/at91sam9_smc.h>
#include <mach/at_hdmac.h>
#include <mach/at_hdmac.h>
...
@@ -33,10 +34,6 @@
...
@@ -33,10 +34,6 @@
#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
static
u64
hdmac_dmamask
=
DMA_BIT_MASK
(
32
);
static
u64
hdmac_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
at_dma_platform_data
atdma_pdata
=
{
.
nr_channels
=
2
,
};
static
struct
resource
hdmac_resources
[]
=
{
static
struct
resource
hdmac_resources
[]
=
{
[
0
]
=
{
[
0
]
=
{
.
start
=
AT91SAM9RL_BASE_DMA
,
.
start
=
AT91SAM9RL_BASE_DMA
,
...
@@ -51,12 +48,11 @@ static struct resource hdmac_resources[] = {
...
@@ -51,12 +48,11 @@ static struct resource hdmac_resources[] = {
};
};
static
struct
platform_device
at_hdmac_device
=
{
static
struct
platform_device
at_hdmac_device
=
{
.
name
=
"at
_hdmac
"
,
.
name
=
"at
91sam9rl_dma
"
,
.
id
=
-
1
,
.
id
=
-
1
,
.
dev
=
{
.
dev
=
{
.
dma_mask
=
&
hdmac_dmamask
,
.
dma_mask
=
&
hdmac_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
atdma_pdata
,
},
},
.
resource
=
hdmac_resources
,
.
resource
=
hdmac_resources
,
.
num_resources
=
ARRAY_SIZE
(
hdmac_resources
),
.
num_resources
=
ARRAY_SIZE
(
hdmac_resources
),
...
@@ -64,7 +60,6 @@ static struct platform_device at_hdmac_device = {
...
@@ -64,7 +60,6 @@ static struct platform_device at_hdmac_device = {
void
__init
at91_add_device_hdmac
(
void
)
void
__init
at91_add_device_hdmac
(
void
)
{
{
dma_cap_set
(
DMA_MEMCPY
,
atdma_pdata
.
cap_mask
);
platform_device_register
(
&
at_hdmac_device
);
platform_device_register
(
&
at_hdmac_device
);
}
}
#else
#else
...
@@ -271,8 +266,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
...
@@ -271,8 +266,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
if
(
!
data
)
if
(
!
data
)
return
;
return
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBICSA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBICSA
);
at91_
sys
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_CS3A_SMC_SMARTMEDIA
);
at91_
matrix
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_CS3A_SMC_SMARTMEDIA
);
/* enable pin */
/* enable pin */
if
(
gpio_is_valid
(
data
->
enable_pin
))
if
(
gpio_is_valid
(
data
->
enable_pin
))
...
@@ -688,6 +683,8 @@ static struct resource rtt_resources[] = {
...
@@ -688,6 +683,8 @@ static struct resource rtt_resources[] = {
.
start
=
AT91SAM9RL_BASE_RTT
,
.
start
=
AT91SAM9RL_BASE_RTT
,
.
end
=
AT91SAM9RL_BASE_RTT
+
SZ_16
-
1
,
.
end
=
AT91SAM9RL_BASE_RTT
+
SZ_16
-
1
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
flags
=
IORESOURCE_MEM
,
}
}
};
};
...
@@ -695,11 +692,32 @@ static struct platform_device at91sam9rl_rtt_device = {
...
@@ -695,11 +692,32 @@ static struct platform_device at91sam9rl_rtt_device = {
.
name
=
"at91_rtt"
,
.
name
=
"at91_rtt"
,
.
id
=
0
,
.
id
=
0
,
.
resource
=
rtt_resources
,
.
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
)
static
void
__init
at91_add_device_rtt
(
void
)
{
{
at91_add_device_rtt_rtc
();
platform_device_register
(
&
at91sam9rl_rtt_device
);
platform_device_register
(
&
at91sam9rl_rtt_device
);
}
}
...
@@ -1134,7 +1152,6 @@ static inline void configure_usart3_pins(unsigned pins)
...
@@ -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 */
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
)
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
浏览文件 @
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) 2010-2012 Atmel Corporation.
* 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.
*
*
* Licensed under GPLv2 or later.
*/
*/
#include <linux/module.h>
#include <linux/module.h>
#include <linux/dma-mapping.h>
#include <asm/proc-fns.h>
#include <asm/irq.h>
#include <asm/irq.h>
#include <asm/mach/arch.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/map.h>
#include <mach/at91sam9x5.h>
#include <mach/cpu.h>
#include <mach/at91cap9.h>
#include <mach/at91_pmc.h>
#include <mach/at91_pmc.h>
#include <mach/cpu.h>
#include <mach/board.h>
#include "soc.h"
#include "soc.h"
#include "generic.h"
#include "generic.h"
...
@@ -35,208 +29,211 @@
...
@@ -35,208 +29,211 @@
/*
/*
* The peripheral clocks.
* The peripheral clocks.
*/
*/
static
struct
clk
pioABCD_clk
=
{
static
struct
clk
pioAB_clk
=
{
.
name
=
"pioABCD_clk"
,
.
name
=
"pioAB_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_PIOABCD
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_PIOAB
,
.
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
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
mpb3
_clk
=
{
static
struct
clk
pioCD
_clk
=
{
.
name
=
"
mpb3
_clk"
,
.
name
=
"
pioCD
_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_MPB3
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_PIOCD
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
mpb4
_clk
=
{
static
struct
clk
smd
_clk
=
{
.
name
=
"
mpb4
_clk"
,
.
name
=
"
smd
_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_MPB4
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_SMD
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
usart0_clk
=
{
static
struct
clk
usart0_clk
=
{
.
name
=
"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
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
usart1_clk
=
{
static
struct
clk
usart1_clk
=
{
.
name
=
"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
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
usart2_clk
=
{
static
struct
clk
usart2_clk
=
{
.
name
=
"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
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
mmc0_clk
=
{
/* USART3 clock - Only for sam9g25/sam9x25 */
.
name
=
"mci0_clk"
,
static
struct
clk
usart3_clk
=
{
.
pmc_mask
=
1
<<
AT91CAP9_ID_MCI0
,
.
name
=
"usart3_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_USART3
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
mmc1
_clk
=
{
static
struct
clk
twi0
_clk
=
{
.
name
=
"
mci1
_clk"
,
.
name
=
"
twi0
_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_MCI1
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_TWI0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
can
_clk
=
{
static
struct
clk
twi1
_clk
=
{
.
name
=
"
can
_clk"
,
.
name
=
"
twi1
_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_CAN
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_TWI1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
twi_clk
=
{
static
struct
clk
twi2_clk
=
{
.
name
=
"twi_clk"
,
.
name
=
"twi2_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_TWI
,
.
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
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
spi0_clk
=
{
static
struct
clk
spi0_clk
=
{
.
name
=
"spi0_clk"
,
.
name
=
"spi0_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9
_ID_SPI0
,
.
pmc_mask
=
1
<<
AT91
SAM9X5
_ID_SPI0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
spi1_clk
=
{
static
struct
clk
spi1_clk
=
{
.
name
=
"spi1_clk"
,
.
name
=
"spi1_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9
_ID_SPI1
,
.
pmc_mask
=
1
<<
AT91
SAM9X5
_ID_SPI1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
ssc
0_clk
=
{
static
struct
clk
uart
0_clk
=
{
.
name
=
"
ssc
0_clk"
,
.
name
=
"
uart
0_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_SSC
0
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_UART
0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
ssc
1_clk
=
{
static
struct
clk
uart
1_clk
=
{
.
name
=
"
ssc
1_clk"
,
.
name
=
"
uart
1_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_SSC
1
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_UART
1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
ac97_clk
=
{
static
struct
clk
tcb0_clk
=
{
.
name
=
"ac97_clk"
,
.
name
=
"tcb0_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_AC97C
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_TCB
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
static
struct
clk
tcb_clk
=
{
.
name
=
"tcb_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_TCB
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
pwm_clk
=
{
static
struct
clk
pwm_clk
=
{
.
name
=
"pwm_clk"
,
.
name
=
"pwm_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_PWMC
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_PWM
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
macb_clk
=
{
static
struct
clk
adc_clk
=
{
.
name
=
"pclk"
,
.
name
=
"adc_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_EMAC
,
.
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
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
aestde
s_clk
=
{
static
struct
clk
uhph
s_clk
=
{
.
name
=
"
aestde
s_clk"
,
.
name
=
"
uhph
s_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_AESTDE
S
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_UHPH
S
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
adc
_clk
=
{
static
struct
clk
udphs
_clk
=
{
.
name
=
"
adc
_clk"
,
.
name
=
"
udphs
_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9_ID_ADC
,
.
pmc_mask
=
1
<<
AT91
SAM9X5_ID_UDPHS
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
isi_clk
=
{
/* emac0 clock - Only for sam9g25/sam9x25/sam9g35/sam9x35 */
.
name
=
"isi_clk"
,
static
struct
clk
macb0_clk
=
{
.
pmc_mask
=
1
<<
AT91CAP9_ID_ISI
,
.
name
=
"pclk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_EMAC0
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
/* lcd clock - Only for sam9g15/sam9g35/sam9x35 */
static
struct
clk
lcdc_clk
=
{
static
struct
clk
lcdc_clk
=
{
.
name
=
"lcdc_clk"
,
.
name
=
"lcdc_clk"
,
.
pmc_mask
=
1
<<
AT91
CAP9
_ID_LCDC
,
.
pmc_mask
=
1
<<
AT91
SAM9X5
_ID_LCDC
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
dma_clk
=
{
/* isi clock - Only for sam9g25 */
.
name
=
"dma_clk"
,
static
struct
clk
isi_clk
=
{
.
pmc_mask
=
1
<<
AT91CAP9_ID_DMA
,
.
name
=
"isi_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_ISI
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
udphs_clk
=
{
static
struct
clk
mmc1_clk
=
{
.
name
=
"udphs_clk"
,
.
name
=
"mci1_clk"
,
.
pmc_mask
=
1
<<
AT91CAP9_ID_UDPHS
,
.
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
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
ohci_clk
=
{
/* can1 clock - Only for sam9x35 */
.
name
=
"ohci_clk"
,
static
struct
clk
can1_clk
=
{
.
pmc_mask
=
1
<<
AT91CAP9_ID_UHP
,
.
name
=
"can1_clk"
,
.
pmc_mask
=
1
<<
AT91SAM9X5_ID_CAN1
,
.
type
=
CLK_TYPE_PERIPHERAL
,
.
type
=
CLK_TYPE_PERIPHERAL
,
};
};
static
struct
clk
*
periph_clocks
[]
__initdata
=
{
static
struct
clk
*
periph_clocks
[]
__initdata
=
{
&
pioABCD_clk
,
&
pioAB_clk
,
&
mpb0_clk
,
&
pioCD_clk
,
&
mpb1_clk
,
&
smd_clk
,
&
mpb2_clk
,
&
mpb3_clk
,
&
mpb4_clk
,
&
usart0_clk
,
&
usart0_clk
,
&
usart1_clk
,
&
usart1_clk
,
&
usart2_clk
,
&
usart2_clk
,
&
twi0_clk
,
&
twi1_clk
,
&
twi2_clk
,
&
mmc0_clk
,
&
mmc0_clk
,
&
mmc1_clk
,
&
can_clk
,
&
twi_clk
,
&
spi0_clk
,
&
spi0_clk
,
&
spi1_clk
,
&
spi1_clk
,
&
ssc0_clk
,
&
uart0_clk
,
&
ssc1_clk
,
&
uart1_clk
,
&
ac97_clk
,
&
tcb0_clk
,
&
tcb_clk
,
&
pwm_clk
,
&
pwm_clk
,
&
macb_clk
,
&
aestdes_clk
,
&
adc_clk
,
&
adc_clk
,
&
isi
_clk
,
&
dma0
_clk
,
&
lcdc
_clk
,
&
dma1
_clk
,
&
dma
_clk
,
&
uhphs
_clk
,
&
udphs_clk
,
&
udphs_clk
,
&
ohci_clk
,
&
mmc1_clk
,
// irq0 .. irq1
&
ssc_clk
,
// irq0
};
};
static
struct
clk_lookup
periph_clocks_lookups
[]
=
{
static
struct
clk_lookup
periph_clocks_lookups
[]
=
{
/* One additional fake clock for macb_hclk */
/* lookup table for DT entries */
CLKDEV_CON_ID
(
"hclk"
,
&
macb_clk
),
CLKDEV_CON_DEV_ID
(
"usart"
,
"fffff200.serial"
,
&
mck
),
CLKDEV_CON_DEV_ID
(
"hclk"
,
"atmel_usba_udc"
,
&
utmi_clk
),
CLKDEV_CON_DEV_ID
(
"usart"
,
"f801c000.serial"
,
&
usart0_clk
),
CLKDEV_CON_DEV_ID
(
"pclk"
,
"atmel_usba_udc"
,
&
udphs_clk
),
CLKDEV_CON_DEV_ID
(
"usart"
,
"f8020000.serial"
,
&
usart1_clk
),
CLKDEV_CON_DEV_ID
(
"mci_clk"
,
"at91_mci.0"
,
&
mmc0_clk
),
CLKDEV_CON_DEV_ID
(
"usart"
,
"f8024000.serial"
,
&
usart2_clk
),
CLKDEV_CON_DEV_ID
(
"mci_clk"
,
"at91_mci.1"
,
&
mmc1_clk
),
CLKDEV_CON_DEV_ID
(
"usart"
,
"f8028000.serial"
,
&
usart3_clk
),
CLKDEV_CON_DEV_ID
(
"spi_clk"
,
"atmel_spi.0"
,
&
spi0_clk
),
CLKDEV_CON_DEV_ID
(
"t0_clk"
,
"f8008000.timer"
,
&
tcb0_clk
),
CLKDEV_CON_DEV_ID
(
"spi_clk"
,
"atmel_spi.1"
,
&
spi1_clk
),
CLKDEV_CON_DEV_ID
(
"t0_clk"
,
"f800c000.timer"
,
&
tcb0_clk
),
CLKDEV_CON_DEV_ID
(
"t0_clk"
,
"atmel_tcb.0"
,
&
tcb_clk
),
CLKDEV_CON_ID
(
"pioA"
,
&
pioAB_clk
),
CLKDEV_CON_DEV_ID
(
"pclk"
,
"ssc.0"
,
&
ssc0_clk
),
CLKDEV_CON_ID
(
"pioB"
,
&
pioAB_clk
),
CLKDEV_CON_DEV_ID
(
"pclk"
,
"ssc.1"
,
&
ssc1_clk
),
CLKDEV_CON_ID
(
"pioC"
,
&
pioCD_clk
),
/* fake hclk clock */
CLKDEV_CON_ID
(
"pioD"
,
&
pioCD_clk
),
CLKDEV_CON_DEV_ID
(
"hclk"
,
"at91_ohci"
,
&
ohci_clk
),
/* additional fake clock for macb_hclk */
CLKDEV_CON_ID
(
"pioA"
,
&
pioABCD_clk
),
CLKDEV_CON_DEV_ID
(
"hclk"
,
"f802c000.ethernet"
,
&
macb0_clk
),
CLKDEV_CON_ID
(
"pioB"
,
&
pioABCD_clk
),
CLKDEV_CON_DEV_ID
(
"hclk"
,
"f8030000.ethernet"
,
&
macb1_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
),
};
};
/*
/*
* The
four
programmable clocks.
* The
two
programmable clocks.
* You must configure pin multiplexing to bring these signals out.
* You must configure pin multiplexing to bring these signals out.
*/
*/
static
struct
clk
pck0
=
{
static
struct
clk
pck0
=
{
...
@@ -251,20 +248,8 @@ static struct clk pck1 = {
...
@@ -251,20 +248,8 @@ static struct clk pck1 = {
.
type
=
CLK_TYPE_PROGRAMMABLE
,
.
type
=
CLK_TYPE_PROGRAMMABLE
,
.
id
=
1
,
.
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
;
int
i
;
...
@@ -273,132 +258,113 @@ static void __init at91cap9_register_clocks(void)
...
@@ -273,132 +258,113 @@ static void __init at91cap9_register_clocks(void)
clkdev_add_table
(
periph_clocks_lookups
,
clkdev_add_table
(
periph_clocks_lookups
,
ARRAY_SIZE
(
periph_clocks_lookups
));
ARRAY_SIZE
(
periph_clocks_lookups
));
clkdev_add_table
(
usart_clocks_lookups
,
ARRAY_SIZE
(
usart_clocks_lookups
));
clk_register
(
&
pck0
);
if
(
cpu_is_at91sam9g25
()
clk_register
(
&
pck1
);
||
cpu_is_at91sam9x25
())
clk_register
(
&
pck2
);
clk_register
(
&
usart3_clk
);
clk_register
(
&
pck3
);
}
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
(
cpu_is_at91sam9g15
(
)
{
||
cpu_is_at91sam9g35
()
if
(
id
>=
ARRAY_SIZE
(
usart_clocks_lookups
))
||
cpu_is_at91sam9x35
(
))
return
;
clk_register
(
&
lcdc_clk
)
;
console_clock_lookup
.
con_id
=
"usart"
;
if
(
cpu_is_at91sam9g25
())
console_clock_lookup
.
clk
=
usart_clocks_lookups
[
id
].
clk
;
clk_register
(
&
isi_clk
);
clkdev_add
(
&
console_clock_lookup
);
}
/* --------------------------------------------------------------------
if
(
cpu_is_at91sam9x25
())
* GPIO
clk_register
(
&
macb1_clk
);
* -------------------------------------------------------------------- */
static
struct
at91_gpio_bank
at91cap9_gpio
[]
__initdata
=
{
if
(
cpu_is_at91sam9x25
()
{
||
cpu_is_at91sam9x35
())
{
.
id
=
AT91CAP9_ID_PIOABCD
,
clk_register
(
&
can0_clk
);
.
regbase
=
AT91CAP9_BASE_PIOA
,
clk_register
(
&
can1_clk
);
},
{
.
id
=
AT91CAP9_ID_PIOABCD
,
.
regbase
=
AT91CAP9_BASE_PIOB
,
},
{
.
id
=
AT91CAP9_ID_PIOABCD
,
.
regbase
=
AT91CAP9_BASE_PIOC
,
},
{
.
id
=
AT91CAP9_ID_PIOABCD
,
.
regbase
=
AT91CAP9_BASE_PIOD
,
}
}
};
static
void
at91cap9_idle
(
void
)
clk_register
(
&
pck0
);
{
clk_register
(
&
pck1
);
at91_sys_write
(
AT91_PMC_SCDR
,
AT91_PMC_PCK
);
cpu_do_idle
();
}
}
/* --------------------------------------------------------------------
/* --------------------------------------------------------------------
* 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
);
if
(
of_at91sam926x_pit_init
()
<
0
)
at91_ioremap_rstc
(
AT91CAP9_BASE_RSTC
);
panic
(
"Impossible to find PIT
\n
"
);
at91sam926x_ioremap_pit
(
AT91CAP9_BASE_PIT
);
at91_ioremap_ramc
(
0
,
AT91SAM9X5_BASE_DDRSDRC0
,
512
);
at91sam9_ioremap_smc
(
0
,
AT91CAP9_BASE_SMC
);
}
}
static
void
__init
at91cap9
_initialize
(
void
)
void
__init
at91sam9x5
_initialize
(
void
)
{
{
arm_pm_idle
=
at91cap9_idle
;
arm_pm_restart
=
at91sam9g45_restart
;
arm_pm_restart
=
at91sam9g45_restart
;
at91_extern_irq
=
(
1
<<
AT91CAP9_ID_IRQ0
)
|
(
1
<<
AT91CAP9_ID_IRQ1
);
at91_extern_irq
=
(
1
<<
AT91SAM9X5_ID_IRQ0
);
/* Register GPIO subsystem */
at91_gpio_init
(
at91cap9_gpio
,
4
);
/* Remember the silicon revision */
/* Register GPIO subsystem (using DT) */
if
(
cpu_is_at91cap9_revB
())
at91_gpio_init
(
NULL
,
0
);
system_rev
=
0xB
;
else
if
(
cpu_is_at91cap9_revC
())
system_rev
=
0xC
;
}
}
/* --------------------------------------------------------------------
/* --------------------------------------------------------------------
*
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).
* 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
,
/* Advanced Interrupt Controller (FIQ) */
7
,
/* System Peripherals */
7
,
/* System Peripherals */
1
,
/* Parallel IO Controller A, B, C and D */
1
,
/* Parallel IO Controller A and B */
0
,
/* MP Block Peripheral 0 */
1
,
/* Parallel IO Controller C and D */
0
,
/* MP Block Peripheral 1 */
4
,
/* Soft Modem */
0
,
/* MP Block Peripheral 2 */
0
,
/* MP Block Peripheral 3 */
0
,
/* MP Block Peripheral 4 */
5
,
/* USART 0 */
5
,
/* USART 0 */
5
,
/* USART 1 */
5
,
/* USART 1 */
5
,
/* USART 2 */
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 0 */
0
,
/* Multimedia Card Interface 1 */
3
,
/* CAN */
6
,
/* Two-Wire Interface */
5
,
/* Serial Peripheral Interface 0 */
5
,
/* Serial Peripheral Interface 0 */
5
,
/* Serial Peripheral Interface 1 */
5
,
/* Serial Peripheral Interface 1 */
4
,
/* Serial Synchronous Controller 0 */
5
,
/* UART 0 */
4
,
/* Serial Synchronous Controller 1 */
5
,
/* UART 1 */
5
,
/* AC97 Controller */
0
,
/* Timer Counter 0, 1, 2, 3, 4 and 5 */
0
,
/* Timer Counter 0, 1 and 2 */
0
,
/* Pulse Width Modulation Controller */
0
,
/* Pulse Width Modulation Controller */
3
,
/* Ethernet */
0
,
/* ADC Controller */
0
,
/* Advanced Encryption Standard, Triple DES*/
0
,
/* DMA Controller 0 */
0
,
/* Analog-to-Digital Converter */
0
,
/* DMA Controller 1 */
0
,
/* Image Sensor Interface */
2
,
/* USB Host High Speed port */
3
,
/* LCD Controller */
2
,
/* USB Device High speed port */
0
,
/* DMA Controller */
3
,
/* Ethernet MAC 0 */
2
,
/* USB Device Port */
3
,
/* LDC Controller or Image Sensor Interface */
2
,
/* USB Host port */
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 (IRQ0) */
0
,
/* Advanced Interrupt Controller (IRQ1) */
};
};
struct
at91_init_soc
__initdata
at91
cap9
_soc
=
{
struct
at91_init_soc
__initdata
at91
sam9x5
_soc
=
{
.
map_io
=
at91
cap9
_map_io
,
.
map_io
=
at91
sam9x5
_map_io
,
.
default_irq_priority
=
at91
cap9
_default_irq_priority
,
.
default_irq_priority
=
at91
sam9x5
_default_irq_priority
,
.
ioremap_registers
=
at91
cap9
_ioremap_registers
,
.
ioremap_registers
=
at91
sam9x5
_ioremap_registers
,
.
register_clocks
=
at91
cap9
_register_clocks
,
.
register_clocks
=
at91
sam9x5
_register_clocks
,
.
init
=
at91
cap9
_initialize
,
.
init
=
at91
sam9x5
_initialize
,
};
};
arch/arm/mach-at91/at91x40.c
浏览文件 @
d50673ed
...
@@ -44,7 +44,7 @@ static void at91x40_idle(void)
...
@@ -44,7 +44,7 @@ static void at91x40_idle(void)
* Disable the processor clock. The processor will be automatically
* Disable the processor clock. The processor will be automatically
* re-enabled by an interrupt or by a reset.
* 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
();
cpu_do_idle
();
}
}
...
...
arch/arm/mach-at91/at91x40_time.c
浏览文件 @
d50673ed
...
@@ -28,6 +28,12 @@
...
@@ -28,6 +28,12 @@
#include <asm/mach/time.h>
#include <asm/mach/time.h>
#include <mach/at91_tc.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.
* 3 counter/timer units present.
*/
*/
...
@@ -37,12 +43,12 @@
...
@@ -37,12 +43,12 @@
static
unsigned
long
at91x40_gettimeoffset
(
void
)
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
)
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
();
timer_tick
();
return
IRQ_HANDLED
;
return
IRQ_HANDLED
;
}
}
...
@@ -57,20 +63,20 @@ void __init at91x40_timer_init(void)
...
@@ -57,20 +63,20 @@ void __init at91x40_timer_init(void)
{
{
unsigned
int
v
;
unsigned
int
v
;
at91_
sys_write
(
AT91_TC
+
AT91_TC_BCR
,
0
);
at91_
tc_write
(
AT91_TC_BCR
,
0
);
v
=
at91_
sys_read
(
AT91_TC
+
AT91_TC_BMR
);
v
=
at91_
tc_read
(
AT91_TC_BMR
);
v
=
(
v
&
~
AT91_TC_TC1XC1S
)
|
AT91_TC_TC1XC1S_NONE
;
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_
tc_write
(
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_
tc_write
(
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_
tc_write
(
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_
tc_write
(
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_IER
,
(
1
<<
4
));
setup_irq
(
AT91X40_ID_TC1
,
&
at91x40_timer_irq
);
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
=
{
struct
sys_timer
at91x40_timer
=
{
...
...
arch/arm/mach-at91/board-cap9adk.c
已删除
100644 → 0
浏览文件 @
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
浏览文件 @
d50673ed
...
@@ -43,6 +43,7 @@
...
@@ -43,6 +43,7 @@
#include <mach/board.h>
#include <mach/board.h>
#include <mach/at91sam9_smc.h>
#include <mach/at91sam9_smc.h>
#include <mach/at91sam9260_matrix.h>
#include <mach/at91sam9260_matrix.h>
#include <mach/at91_matrix.h>
#include "sam9_smc.h"
#include "sam9_smc.h"
#include "generic.h"
#include "generic.h"
...
@@ -238,8 +239,8 @@ static __init void cpu9krea_add_device_nor(void)
...
@@ -238,8 +239,8 @@ static __init void cpu9krea_add_device_nor(void)
{
{
unsigned
long
csa
;
unsigned
long
csa
;
csa
=
at91_
sys
_read
(
AT91_MATRIX_EBICSA
);
csa
=
at91_
matrix
_read
(
AT91_MATRIX_EBICSA
);
at91_
sys
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_VDDIOMSEL_3_3V
);
at91_
matrix
_write
(
AT91_MATRIX_EBICSA
,
csa
|
AT91_MATRIX_VDDIOMSEL_3_3V
);
/* configure chip-select 0 (NOR) */
/* configure chip-select 0 (NOR) */
sam9_smc_configure
(
0
,
0
,
&
cpu9krea_nor_smc_config
);
sam9_smc_configure
(
0
,
0
,
&
cpu9krea_nor_smc_config
);
...
...
arch/arm/mach-at91/board-cpuat91.c
浏览文件 @
d50673ed
...
@@ -38,6 +38,7 @@
...
@@ -38,6 +38,7 @@
#include <mach/board.h>
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include <mach/cpu.h>
#include <mach/cpu.h>
#include "generic.h"
#include "generic.h"
...
...
arch/arm/mach-at91/board-dt.c
浏览文件 @
d50673ed
...
@@ -38,12 +38,6 @@ static void __init ek_init_early(void)
...
@@ -38,12 +38,6 @@ static void __init ek_init_early(void)
{
{
/* Initialize processor: 12.000 MHz crystal */
/* Initialize processor: 12.000 MHz crystal */
at91_initialize
(
12000000
);
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 */
/* det_pin is not connected */
...
@@ -109,6 +103,7 @@ static void __init at91_dt_device_init(void)
...
@@ -109,6 +103,7 @@ static void __init at91_dt_device_init(void)
static
const
char
*
at91_dt_board_compat
[]
__initdata
=
{
static
const
char
*
at91_dt_board_compat
[]
__initdata
=
{
"atmel,at91sam9m10g45ek"
,
"atmel,at91sam9m10g45ek"
,
"atmel,at91sam9x5ek"
,
"calao,usb-a9g20"
,
"calao,usb-a9g20"
,
NULL
NULL
};
};
...
...
arch/arm/mach-at91/board-eco920.c
浏览文件 @
d50673ed
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
#include <mach/board.h>
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include <mach/cpu.h>
#include <mach/cpu.h>
#include "generic.h"
#include "generic.h"
...
@@ -110,7 +111,7 @@ static void __init eco920_board_init(void)
...
@@ -110,7 +111,7 @@ static void __init eco920_board_init(void)
at91_add_device_mmc
(
0
,
&
eco920_mmc_data
);
at91_add_device_mmc
(
0
,
&
eco920_mmc_data
);
platform_device_register
(
&
eco920_flash
);
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_RWSETUP_
(
1
)
|
AT91_SMC_DBW_8
|
AT91_SMC_DBW_8
|
AT91_SMC_WSEN
|
AT91_SMC_WSEN
...
@@ -122,7 +123,7 @@ static void __init eco920_board_init(void)
...
@@ -122,7 +123,7 @@ static void __init eco920_board_init(void)
at91_set_deglitch
(
AT91_PIN_PA23
,
1
);
at91_set_deglitch
(
AT91_PIN_PA23
,
1
);
/* Initialization of the Static Memory Controller for Chip Select 3 */
/* 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_DBW_16
|
/* 16 bit */
AT91_SMC_WSEN
|
AT91_SMC_WSEN
|
AT91_SMC_NWS_
(
5
)
|
/* wait states */
AT91_SMC_NWS_
(
5
)
|
/* wait states */
...
...
arch/arm/mach-at91/board-flexibity.c
浏览文件 @
d50673ed
/*
/*
* linux/arch/arm/mach-at91/board-flexibity.c
* linux/arch/arm/mach-at91/board-flexibity.c
*
*
* Copyright (C) 2010 Flexibity
* Copyright (C) 2010
-2011
Flexibity
* Copyright (C) 2005 SAN People
* Copyright (C) 2005 SAN People
* Copyright (C) 2006 Atmel
* Copyright (C) 2006 Atmel
*
*
...
@@ -62,6 +62,13 @@ static struct at91_udc_data __initdata flexibity_udc_data = {
...
@@ -62,6 +62,13 @@ static struct at91_udc_data __initdata flexibity_udc_data = {
.
pullup_pin
=
-
EINVAL
,
/* pull-up driven by UDC */
.
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 */
/* SPI devices */
static
struct
spi_board_info
flexibity_spi_devices
[]
=
{
static
struct
spi_board_info
flexibity_spi_devices
[]
=
{
{
/* DataFlash chip */
{
/* DataFlash chip */
...
@@ -141,6 +148,9 @@ static void __init flexibity_board_init(void)
...
@@ -141,6 +148,9 @@ static void __init flexibity_board_init(void)
at91_add_device_usbh
(
&
flexibity_usbh_data
);
at91_add_device_usbh
(
&
flexibity_usbh_data
);
/* USB Device */
/* USB Device */
at91_add_device_udc
(
&
flexibity_udc_data
);
at91_add_device_udc
(
&
flexibity_udc_data
);
/* I2C */
at91_add_device_i2c
(
flexibity_i2c_devices
,
ARRAY_SIZE
(
flexibity_i2c_devices
));
/* SPI */
/* SPI */
at91_add_device_spi
(
flexibity_spi_devices
,
at91_add_device_spi
(
flexibity_spi_devices
,
ARRAY_SIZE
(
flexibity_spi_devices
));
ARRAY_SIZE
(
flexibity_spi_devices
));
...
...
arch/arm/mach-at91/board-kb9202.c
浏览文件 @
d50673ed
...
@@ -38,6 +38,7 @@
...
@@ -38,6 +38,7 @@
#include <mach/board.h>
#include <mach/board.h>
#include <mach/cpu.h>
#include <mach/cpu.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include "generic.h"
#include "generic.h"
...
...
arch/arm/mach-at91/board-picotux200.c
浏览文件 @
d50673ed
...
@@ -39,6 +39,7 @@
...
@@ -39,6 +39,7 @@
#include <mach/board.h>
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include "generic.h"
#include "generic.h"
...
...
arch/arm/mach-at91/board-rm9200dk.c
浏览文件 @
d50673ed
...
@@ -41,6 +41,7 @@
...
@@ -41,6 +41,7 @@
#include <mach/hardware.h>
#include <mach/hardware.h>
#include <mach/board.h>
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include "generic.h"
#include "generic.h"
...
...
arch/arm/mach-at91/board-rm9200ek.c
浏览文件 @
d50673ed
...
@@ -41,6 +41,7 @@
...
@@ -41,6 +41,7 @@
#include <mach/hardware.h>
#include <mach/hardware.h>
#include <mach/board.h>
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include "generic.h"
#include "generic.h"
...
...
arch/arm/mach-at91/board-sam9m10g45ek.c
浏览文件 @
d50673ed
...
@@ -24,11 +24,13 @@
...
@@ -24,11 +24,13 @@
#include <linux/gpio_keys.h>
#include <linux/gpio_keys.h>
#include <linux/input.h>
#include <linux/input.h>
#include <linux/leds.h>
#include <linux/leds.h>
#include <linux/clk.h>
#include <linux/atmel-mci.h>
#include <linux/atmel-mci.h>
#include <linux/delay.h>
#include <mach/hardware.h>
#include <mach/hardware.h>
#include <video/atmel_lcdc.h>
#include <video/atmel_lcdc.h>
#include <media/soc_camera.h>
#include <media/atmel-isi.h>
#include <asm/setup.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
#include <asm/mach-types.h>
...
@@ -184,6 +186,71 @@ static void __init ek_add_device_nand(void)
...
@@ -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
* LCD Controller
*/
*/
...
@@ -377,7 +444,12 @@ static struct gpio_led ek_pwm_led[] = {
...
@@ -377,7 +444,12 @@ static struct gpio_led ek_pwm_led[] = {
#endif
#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
)
static
void
__init
ek_board_init
(
void
)
{
{
...
@@ -399,6 +471,8 @@ static void __init ek_board_init(void)
...
@@ -399,6 +471,8 @@ static void __init ek_board_init(void)
ek_add_device_nand
();
ek_add_device_nand
();
/* I2C */
/* I2C */
at91_add_device_i2c
(
0
,
NULL
,
0
);
at91_add_device_i2c
(
0
,
NULL
,
0
);
/* ISI, using programmable clock as ISI_MCK */
at91_add_device_isi
(
&
isi_data
,
true
);
/* LCD Controller */
/* LCD Controller */
at91_add_device_lcdc
(
&
ek_lcdc_data
);
at91_add_device_lcdc
(
&
ek_lcdc_data
);
/* Touch Screen */
/* Touch Screen */
...
@@ -410,6 +484,8 @@ static void __init ek_board_init(void)
...
@@ -410,6 +484,8 @@ static void __init ek_board_init(void)
/* LEDs */
/* LEDs */
at91_gpio_leds
(
ek_leds
,
ARRAY_SIZE
(
ek_leds
));
at91_gpio_leds
(
ek_leds
,
ARRAY_SIZE
(
ek_leds
));
at91_pwm_leds
(
ek_pwm_led
,
ARRAY_SIZE
(
ek_pwm_led
));
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"
)
MACHINE_START
(
AT91SAM9M10G45EK
,
"Atmel AT91SAM9M10G45-EK"
)
...
...
arch/arm/mach-at91/board-yl-9200.c
浏览文件 @
d50673ed
...
@@ -45,6 +45,7 @@
...
@@ -45,6 +45,7 @@
#include <mach/hardware.h>
#include <mach/hardware.h>
#include <mach/board.h>
#include <mach/board.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91rm9200_mc.h>
#include <mach/at91_ramc.h>
#include <mach/cpu.h>
#include <mach/cpu.h>
#include "generic.h"
#include "generic.h"
...
@@ -393,7 +394,7 @@ static void yl9200_init_video(void)
...
@@ -393,7 +394,7 @@ static void yl9200_init_video(void)
at91_set_A_periph
(
AT91_PIN_PC6
,
0
);
at91_set_A_periph
(
AT91_PIN_PC6
,
0
);
/* Initialization of the Static Memory Controller for Chip Select 2 */
/* 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_WSEN
|
AT91_SMC_NWS_
(
0x4
)
/* wait states */
|
AT91_SMC_TDF_
(
0x100
)
/* float time */
|
AT91_SMC_TDF_
(
0x100
)
/* float time */
);
);
...
...
arch/arm/mach-at91/clock.c
浏览文件 @
d50673ed
...
@@ -28,9 +28,12 @@
...
@@ -28,9 +28,12 @@
#include <mach/at91_pmc.h>
#include <mach/at91_pmc.h>
#include <mach/cpu.h>
#include <mach/cpu.h>
#include <asm/proc-fns.h>
#include "clock.h"
#include "clock.h"
#include "generic.h"
#include "generic.h"
void
__iomem
*
at91_pmc_base
;
/*
/*
* There's a lot more which can be done with clocks, including cpufreq
* There's a lot more which can be done with clocks, including cpufreq
...
@@ -47,26 +50,38 @@
...
@@ -47,26 +50,38 @@
/*
/*
* Chips have some kind of clocks : group them by functionality
* Chips have some kind of clocks : group them by functionality
*/
*/
#define cpu_has_utmi() ( cpu_is_at91
cap9
() \
#define cpu_has_utmi() ( cpu_is_at91
sam9rl
() \
|| cpu_is_at91sam9
rl
() \
|| cpu_is_at91sam9
g45
() \
|| cpu_is_at91sam9
g4
5())
|| cpu_is_at91sam9
x
5())
#define cpu_has_800M_plla() ( cpu_is_at91sam9g20() \
#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_300M_plla() (cpu_is_at91sam9g10())
#define cpu_has_pllb() (!(cpu_is_at91sam9rl() \
#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 */
/* USB host HS & FS */
#define cpu_has_uhp() (!cpu_is_at91sam9rl())
#define cpu_has_uhp() (!cpu_is_at91sam9rl())
/* USB device FS only */
/* USB device FS only */
#define cpu_has_udpfs() (!(cpu_is_at91sam9rl() \
#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
LIST_HEAD
(
clocks
);
static
DEFINE_SPINLOCK
(
clk_lock
);
static
DEFINE_SPINLOCK
(
clk_lock
);
...
@@ -111,11 +126,11 @@ static void pllb_mode(struct clk *clk, int is_on)
...
@@ -111,11 +126,11 @@ static void pllb_mode(struct clk *clk, int is_on)
value
=
0
;
value
=
0
;
// REVISIT: Add work-around for AT91RM9200 Errata #26 ?
// REVISIT: Add work-around for AT91RM9200 Errata #26 ?
at91_
sys
_write
(
AT91_CKGR_PLLBR
,
value
);
at91_
pmc
_write
(
AT91_CKGR_PLLBR
,
value
);
do
{
do
{
cpu_relax
();
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
=
{
static
struct
clk
pllb
=
{
...
@@ -130,31 +145,24 @@ static struct clk pllb = {
...
@@ -130,31 +145,24 @@ static struct clk pllb = {
static
void
pmc_sys_mode
(
struct
clk
*
clk
,
int
is_on
)
static
void
pmc_sys_mode
(
struct
clk
*
clk
,
int
is_on
)
{
{
if
(
is_on
)
if
(
is_on
)
at91_
sys
_write
(
AT91_PMC_SCER
,
clk
->
pmc_mask
);
at91_
pmc
_write
(
AT91_PMC_SCER
,
clk
->
pmc_mask
);
else
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
)
static
void
pmc_uckr_mode
(
struct
clk
*
clk
,
int
is_on
)
{
{
unsigned
int
uckr
=
at91_sys_read
(
AT91_CKGR_UCKR
);
unsigned
int
uckr
=
at91_pmc_read
(
AT91_CKGR_UCKR
);
if
(
cpu_is_at91sam9g45
())
{
if
(
is_on
)
uckr
|=
AT91_PMC_BIASEN
;
else
uckr
&=
~
AT91_PMC_BIASEN
;
}
if
(
is_on
)
{
if
(
is_on
)
{
is_on
=
AT91_PMC_LOCKU
;
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
}
else
at91_
sys
_write
(
AT91_CKGR_UCKR
,
uckr
&
~
(
clk
->
pmc_mask
));
at91_
pmc
_write
(
AT91_CKGR_UCKR
,
uckr
&
~
(
clk
->
pmc_mask
));
do
{
do
{
cpu_relax
();
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) */
/* USB function clocks (PLLB must be 48 MHz) */
...
@@ -190,9 +198,9 @@ struct clk mck = {
...
@@ -190,9 +198,9 @@ struct clk mck = {
static
void
pmc_periph_mode
(
struct
clk
*
clk
,
int
is_on
)
static
void
pmc_periph_mode
(
struct
clk
*
clk
,
int
is_on
)
{
{
if
(
is_on
)
if
(
is_on
)
at91_
sys
_write
(
AT91_PMC_PCER
,
clk
->
pmc_mask
);
at91_
pmc
_write
(
AT91_PMC_PCER
,
clk
->
pmc_mask
);
else
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
)
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)
...
@@ -210,11 +218,24 @@ static struct clk __init *at91_css_to_clk(unsigned long css)
return
&
utmi_clk
;
return
&
utmi_clk
;
else
if
(
cpu_has_pllb
())
else
if
(
cpu_has_pllb
())
return
&
pllb
;
return
&
pllb
;
break
;
/* alternate PMC: can use master clock */
case
AT91_PMC_CSS_MASTER
:
return
&
mck
;
}
}
return
NULL
;
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
)
static
void
__clk_enable
(
struct
clk
*
clk
)
{
{
if
(
clk
->
parent
)
if
(
clk
->
parent
)
...
@@ -316,12 +337,22 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
...
@@ -316,12 +337,22 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
unsigned
prescale
;
unsigned
prescale
;
unsigned
long
prescale_offset
,
css_mask
;
unsigned
long
actual
;
unsigned
long
actual
;
if
(
!
clk_is_programmable
(
clk
))
if
(
!
clk_is_programmable
(
clk
))
return
-
EINVAL
;
return
-
EINVAL
;
if
(
clk
->
users
)
if
(
clk
->
users
)
return
-
EBUSY
;
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
);
spin_lock_irqsave
(
&
clk_lock
,
flags
);
actual
=
clk
->
parent
->
rate_hz
;
actual
=
clk
->
parent
->
rate_hz
;
...
@@ -329,10 +360,10 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
...
@@ -329,10 +360,10 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
if
(
actual
&&
actual
<=
rate
)
{
if
(
actual
&&
actual
<=
rate
)
{
u32
pckr
;
u32
pckr
;
pckr
=
at91_
sys
_read
(
AT91_PMC_PCKR
(
clk
->
id
));
pckr
=
at91_
pmc
_read
(
AT91_PMC_PCKR
(
clk
->
id
));
pckr
&=
AT91_PMC_CSS
;
/*
clock selection */
pckr
&=
css_mask
;
/* keep
clock selection */
pckr
|=
prescale
<<
2
;
pckr
|=
prescale
<<
prescale_offset
;
at91_
sys
_write
(
AT91_PMC_PCKR
(
clk
->
id
),
pckr
);
at91_
pmc
_write
(
AT91_PMC_PCKR
(
clk
->
id
),
pckr
);
clk
->
rate_hz
=
actual
;
clk
->
rate_hz
=
actual
;
break
;
break
;
}
}
...
@@ -366,7 +397,7 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
...
@@ -366,7 +397,7 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
clk
->
rate_hz
=
parent
->
rate_hz
;
clk
->
rate_hz
=
parent
->
rate_hz
;
clk
->
parent
=
parent
;
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
);
spin_unlock_irqrestore
(
&
clk_lock
,
flags
);
return
0
;
return
0
;
...
@@ -378,11 +409,17 @@ static void __init init_programmable_clock(struct clk *clk)
...
@@ -378,11 +409,17 @@ static void __init init_programmable_clock(struct clk *clk)
{
{
struct
clk
*
parent
;
struct
clk
*
parent
;
u32
pckr
;
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
));
pckr
=
at91_
pmc
_read
(
AT91_PMC_PCKR
(
clk
->
id
));
parent
=
at91_css_to_clk
(
pckr
&
AT91_PMC_CSS
);
parent
=
at91_css_to_clk
(
pckr
&
css_mask
);
clk
->
parent
=
parent
;
clk
->
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 */
#endif
/* CONFIG_AT91_PROGRAMMABLE_CLOCKS */
...
@@ -396,19 +433,24 @@ static int at91_clk_show(struct seq_file *s, void *unused)
...
@@ -396,19 +433,24 @@ static int at91_clk_show(struct seq_file *s, void *unused)
u32
scsr
,
pcsr
,
uckr
=
0
,
sr
;
u32
scsr
,
pcsr
,
uckr
=
0
,
sr
;
struct
clk
*
clk
;
struct
clk
*
clk
;
seq_printf
(
s
,
"SCSR = %8x
\n
"
,
scsr
=
at91_sys_read
(
AT91_PMC_SCSR
));
scsr
=
at91_pmc_read
(
AT91_PMC_SCSR
);
seq_printf
(
s
,
"PCSR = %8x
\n
"
,
pcsr
=
at91_sys_read
(
AT91_PMC_PCSR
));
pcsr
=
at91_pmc_read
(
AT91_PMC_PCSR
);
seq_printf
(
s
,
"MOR = %8x
\n
"
,
at91_sys_read
(
AT91_CKGR_MOR
));
sr
=
at91_pmc_read
(
AT91_PMC_SR
);
seq_printf
(
s
,
"MCFR = %8x
\n
"
,
at91_sys_read
(
AT91_CKGR_MCFR
));
seq_printf
(
s
,
"SCSR = %8x
\n
"
,
scsr
);
seq_printf
(
s
,
"PLLA = %8x
\n
"
,
at91_sys_read
(
AT91_CKGR_PLLAR
));
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
())
if
(
cpu_has_pllb
())
seq_printf
(
s
,
"PLLB = %8x
\n
"
,
at91_sys_read
(
AT91_CKGR_PLLBR
));
seq_printf
(
s
,
"PLLB = %8x
\n
"
,
at91_pmc_read
(
AT91_CKGR_PLLBR
));
if
(
cpu_has_utmi
())
if
(
cpu_has_utmi
())
{
seq_printf
(
s
,
"UCKR = %8x
\n
"
,
uckr
=
at91_sys_read
(
AT91_CKGR_UCKR
));
uckr
=
at91_pmc_read
(
AT91_CKGR_UCKR
);
seq_printf
(
s
,
"MCKR = %8x
\n
"
,
at91_sys_read
(
AT91_PMC_MCKR
));
seq_printf
(
s
,
"UCKR = %8x
\n
"
,
uckr
);
}
seq_printf
(
s
,
"MCKR = %8x
\n
"
,
at91_pmc_read
(
AT91_PMC_MCKR
));
if
(
cpu_has_upll
())
if
(
cpu_has_upll
())
seq_printf
(
s
,
"USB = %8x
\n
"
,
at91_
sys
_read
(
AT91_PMC_USB
));
seq_printf
(
s
,
"USB = %8x
\n
"
,
at91_
pmc
_read
(
AT91_PMC_USB
));
seq_printf
(
s
,
"SR = %8x
\n
"
,
sr
=
at91_sys_read
(
AT91_PMC_SR
)
);
seq_printf
(
s
,
"SR = %8x
\n
"
,
sr
);
seq_printf
(
s
,
"
\n
"
);
seq_printf
(
s
,
"
\n
"
);
...
@@ -596,16 +638,14 @@ static void __init at91_pllb_usbfs_clock_init(unsigned long main_clock)
...
@@ -596,16 +638,14 @@ static void __init at91_pllb_usbfs_clock_init(unsigned long main_clock)
if
(
cpu_is_at91rm9200
())
{
if
(
cpu_is_at91rm9200
())
{
uhpck
.
pmc_mask
=
AT91RM9200_PMC_UHP
;
uhpck
.
pmc_mask
=
AT91RM9200_PMC_UHP
;
udpck
.
pmc_mask
=
AT91RM9200_PMC_UDP
;
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
()
||
}
else
if
(
cpu_is_at91sam9260
()
||
cpu_is_at91sam9261
()
||
cpu_is_at91sam9263
()
||
cpu_is_at91sam9g20
()
||
cpu_is_at91sam9263
()
||
cpu_is_at91sam9g20
()
||
cpu_is_at91sam9g10
())
{
cpu_is_at91sam9g10
())
{
uhpck
.
pmc_mask
=
AT91SAM926x_PMC_UHP
;
uhpck
.
pmc_mask
=
AT91SAM926x_PMC_UHP
;
udpck
.
pmc_mask
=
AT91SAM926x_PMC_UDP
;
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
);
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
);
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)
...
@@ -622,13 +662,13 @@ static void __init at91_upll_usbfs_clock_init(unsigned long main_clock)
/* Setup divider by 10 to reach 48 MHz */
/* Setup divider by 10 to reach 48 MHz */
usbr
|=
((
10
-
1
)
<<
8
)
&
AT91_PMC_OHCIUSBDIV
;
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 */
/* Now set uhpck values */
uhpck
.
parent
=
&
utmi_clk
;
uhpck
.
parent
=
&
utmi_clk
;
uhpck
.
pmc_mask
=
AT91SAM926x_PMC_UHP
;
uhpck
.
pmc_mask
=
AT91SAM926x_PMC_UHP
;
uhpck
.
rate_hz
=
utmi_clk
.
rate_hz
;
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
)
int
__init
at91_clock_init
(
unsigned
long
main_clock
)
...
@@ -637,6 +677,10 @@ 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
i
;
int
pll_overclock
=
false
;
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,
* When the bootloader initialized the main oscillator correctly,
* there's no problem using the cycle counter. But if it didn't,
* 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)
...
@@ -645,14 +689,14 @@ int __init at91_clock_init(unsigned long main_clock)
*/
*/
if
(
!
main_clock
)
{
if
(
!
main_clock
)
{
do
{
do
{
tmp
=
at91_
sys
_read
(
AT91_CKGR_MCFR
);
tmp
=
at91_
pmc
_read
(
AT91_CKGR_MCFR
);
}
while
(
!
(
tmp
&
AT91_PMC_MAINRDY
));
}
while
(
!
(
tmp
&
AT91_PMC_MAINRDY
));
main_clock
=
(
tmp
&
AT91_PMC_MAINF
)
*
(
AT91_SLOW_CLOCK
/
16
);
main_clock
=
(
tmp
&
AT91_PMC_MAINF
)
*
(
AT91_SLOW_CLOCK
/
16
);
}
}
main_clk
.
rate_hz
=
main_clock
;
main_clk
.
rate_hz
=
main_clock
;
/* report if PLLA is more than mildly overclocked */
/* 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
(
cpu_has_300M_plla
())
{
if
(
plla
.
rate_hz
>
300000000
)
if
(
plla
.
rate_hz
>
300000000
)
pll_overclock
=
true
;
pll_overclock
=
true
;
...
@@ -666,8 +710,8 @@ int __init at91_clock_init(unsigned long main_clock)
...
@@ -666,8 +710,8 @@ int __init at91_clock_init(unsigned long main_clock)
if
(
pll_overclock
)
if
(
pll_overclock
)
pr_info
(
"Clocks: PLLA overclocked, %ld MHz
\n
"
,
plla
.
rate_hz
/
1000000
);
pr_info
(
"Clocks: PLLA overclocked, %ld MHz
\n
"
,
plla
.
rate_hz
/
1000000
);
if
(
cpu_
is_at91sam9g45
())
{
if
(
cpu_
has_plladiv2
())
{
mckr
=
at91_
sys
_read
(
AT91_PMC_MCKR
);
mckr
=
at91_
pmc
_read
(
AT91_PMC_MCKR
);
plla
.
rate_hz
/=
(
1
<<
((
mckr
&
AT91_PMC_PLLADIV2
)
>>
12
));
/* plla divisor by 2 */
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)
...
@@ -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)
* (obtain the USB High Speed 480 MHz when input is 12 MHz)
*/
*/
utmi_clk
.
rate_hz
=
40
*
utmi_clk
.
parent
->
rate_hz
;
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)
...
@@ -703,10 +751,10 @@ int __init at91_clock_init(unsigned long main_clock)
* MCK and CPU derive from one of those primary clocks.
* MCK and CPU derive from one of those primary clocks.
* For now, assume this parentage won't change.
* 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
);
mck
.
parent
=
at91_css_to_clk
(
mckr
&
AT91_PMC_CSS
);
freq
=
mck
.
parent
->
rate_hz
;
freq
=
mck
.
parent
->
rate_hz
;
freq
/=
(
1
<<
((
mckr
&
AT91_PMC_PRES
)
>>
2
));
/* prescale */
freq
/=
pmc_prescaler_divider
(
mckr
);
/* prescale */
if
(
cpu_is_at91rm9200
())
{
if
(
cpu_is_at91rm9200
())
{
mck
.
rate_hz
=
freq
/
(
1
+
((
mckr
&
AT91_PMC_MDIV
)
>>
8
));
/* mdiv */
mck
.
rate_hz
=
freq
/
(
1
+
((
mckr
&
AT91_PMC_MDIV
)
>>
8
));
/* mdiv */
}
else
if
(
cpu_is_at91sam9g20
())
{
}
else
if
(
cpu_is_at91sam9g20
())
{
...
@@ -714,13 +762,19 @@ int __init at91_clock_init(unsigned long main_clock)
...
@@ -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) */
freq
/
((
mckr
&
AT91_PMC_MDIV
)
>>
7
)
:
freq
;
/* mdiv ; (x >> 7) = ((x >> 8) * 2) */
if
(
mckr
&
AT91_PMC_PDIV
)
if
(
mckr
&
AT91_PMC_PDIV
)
freq
/=
2
;
/* processor clock division */
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
?
mck
.
rate_hz
=
(
mckr
&
AT91_PMC_MDIV
)
==
AT91SAM9_PMC_MDIV_3
?
freq
/
3
:
freq
/
(
1
<<
((
mckr
&
AT91_PMC_MDIV
)
>>
8
));
/* mdiv */
freq
/
3
:
freq
/
(
1
<<
((
mckr
&
AT91_PMC_MDIV
)
>>
8
));
/* mdiv */
}
else
{
}
else
{
mck
.
rate_hz
=
freq
/
(
1
<<
((
mckr
&
AT91_PMC_MDIV
)
>>
8
));
/* mdiv */
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 */
/* Register the PMC's standard clocks */
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
standard_pmc_clocks
);
i
++
)
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
standard_pmc_clocks
);
i
++
)
at91_clk_add
(
standard_pmc_clocks
[
i
]);
at91_clk_add
(
standard_pmc_clocks
[
i
]);
...
@@ -770,9 +824,15 @@ static int __init at91_clock_reset(void)
...
@@ -770,9 +824,15 @@ static int __init at91_clock_reset(void)
pr_debug
(
"Clocks: disable unused %s
\n
"
,
clk
->
name
);
pr_debug
(
"Clocks: disable unused %s
\n
"
,
clk
->
name
);
}
}
at91_
sys
_write
(
AT91_PMC_PCDR
,
pcdr
);
at91_
pmc
_write
(
AT91_PMC_PCDR
,
pcdr
);
at91_
sys
_write
(
AT91_PMC_SCDR
,
scdr
);
at91_
pmc
_write
(
AT91_PMC_SCDR
,
scdr
);
return
0
;
return
0
;
}
}
late_initcall
(
at91_clock_reset
);
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
浏览文件 @
d50673ed
...
@@ -39,20 +39,15 @@ static int at91_enter_idle(struct cpuidle_device *dev,
...
@@ -39,20 +39,15 @@ static int at91_enter_idle(struct cpuidle_device *dev,
{
{
struct
timeval
before
,
after
;
struct
timeval
before
,
after
;
int
idle_time
;
int
idle_time
;
u32
saved_lpr
;
local_irq_disable
();
local_irq_disable
();
do_gettimeofday
(
&
before
);
do_gettimeofday
(
&
before
);
if
(
index
==
0
)
if
(
index
==
0
)
/* Wait for interrupt state */
/* Wait for interrupt state */
cpu_do_idle
();
cpu_do_idle
();
else
if
(
index
==
1
)
{
else
if
(
index
==
1
)
asm
(
"b 1f; .align 5; 1:"
);
at91_standby
();
asm
(
"mcr p15, 0, r0, c7, c10, 4"
);
/* drain write buffer */
saved_lpr
=
sdram_selfrefresh_enable
();
cpu_do_idle
();
sdram_selfrefresh_disable
(
saved_lpr
);
}
do_gettimeofday
(
&
after
);
do_gettimeofday
(
&
after
);
local_irq_enable
();
local_irq_enable
();
idle_time
=
(
after
.
tv_sec
-
before
.
tv_sec
)
*
USEC_PER_SEC
+
idle_time
=
(
after
.
tv_sec
-
before
.
tv_sec
)
*
USEC_PER_SEC
+
...
...
arch/arm/mach-at91/generic.h
浏览文件 @
d50673ed
...
@@ -28,6 +28,7 @@ extern void __init at91_aic_init(unsigned int priority[]);
...
@@ -28,6 +28,7 @@ extern void __init at91_aic_init(unsigned int priority[]);
/* Timer */
/* Timer */
struct
sys_timer
;
struct
sys_timer
;
extern
void
at91rm9200_ioremap_st
(
u32
addr
);
extern
struct
sys_timer
at91rm9200_timer
;
extern
struct
sys_timer
at91rm9200_timer
;
extern
void
at91sam926x_ioremap_pit
(
u32
addr
);
extern
void
at91sam926x_ioremap_pit
(
u32
addr
);
extern
struct
sys_timer
at91sam926x_timer
;
extern
struct
sys_timer
at91sam926x_timer
;
...
@@ -45,7 +46,6 @@ extern void __init at91sam9261_set_console_clock(int id);
...
@@ -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
at91sam9263_set_console_clock
(
int
id
);
extern
void
__init
at91sam9rl_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
at91sam9g45_set_console_clock
(
int
id
);
extern
void
__init
at91cap9_set_console_clock
(
int
id
);
#ifdef CONFIG_AT91_PMC_UNIT
#ifdef CONFIG_AT91_PMC_UNIT
extern
int
__init
at91_clock_init
(
unsigned
long
main_clock
);
extern
int
__init
at91_clock_init
(
unsigned
long
main_clock
);
#else
#else
...
@@ -57,6 +57,9 @@ struct device;
...
@@ -57,6 +57,9 @@ struct device;
extern
void
at91_irq_suspend
(
void
);
extern
void
at91_irq_suspend
(
void
);
extern
void
at91_irq_resume
(
void
);
extern
void
at91_irq_resume
(
void
);
/* idle */
extern
void
at91sam9_idle
(
void
);
/* reset */
/* reset */
extern
void
at91_ioremap_rstc
(
u32
base_addr
);
extern
void
at91_ioremap_rstc
(
u32
base_addr
);
extern
void
at91sam9_alt_restart
(
char
,
const
char
*
);
extern
void
at91sam9_alt_restart
(
char
,
const
char
*
);
...
@@ -65,6 +68,12 @@ extern void at91sam9g45_restart(char, const char *);
...
@@ -65,6 +68,12 @@ extern void at91sam9g45_restart(char, const char *);
/* shutdown */
/* shutdown */
extern
void
at91_ioremap_shdwc
(
u32
base_addr
);
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 */
/* GPIO */
#define AT91RM9200_PQFP 3
/* AT91RM9200 PQFP package has 3 banks */
#define AT91RM9200_PQFP 3
/* AT91RM9200 PQFP package has 3 banks */
#define AT91RM9200_BGA 4
/* AT91RM9200 BGA package has 4 banks */
#define AT91RM9200_BGA 4
/* AT91RM9200 BGA package has 4 banks */
...
...
arch/arm/mach-at91/include/mach/at91_matrix.h
0 → 100644
浏览文件 @
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
浏览文件 @
d50673ed
...
@@ -16,17 +16,27 @@
...
@@ -16,17 +16,27 @@
#ifndef AT91_PMC_H
#ifndef AT91_PMC_H
#define AT91_PMC_H
#define AT91_PMC_H
#
define AT91_PMC_SCER (AT91_PMC + 0x00)
/* System Clock Enable Register */
#
ifndef __ASSEMBLY__
#define AT91_PMC_SCDR (AT91_PMC + 0x04)
/* System Clock Disable Register */
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 AT91_PMC_PCK (1 << 0)
/* Processor Clock */
#define AT91RM9200_PMC_UDP (1 << 1)
/* USB Devcice Port Clock [AT91RM9200 only] */
#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 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 AT91RM9200_PMC_UHP (1 << 4)
/* USB Host Port Clock [AT91RM9200 only] */
#define AT91SAM926x_PMC_UHP (1 << 6)
/* USB Host Port Clock [AT91SAM926x 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 AT91SAM926x_PMC_UDP (1 << 7)
/* USB Devcice Port Clock [AT91SAM926x only] */
#define AT91_PMC_PCK0 (1 << 8)
/* Programmable Clock 0 */
#define AT91_PMC_PCK0 (1 << 8)
/* Programmable Clock 0 */
#define AT91_PMC_PCK1 (1 << 9)
/* Programmable Clock 1 */
#define AT91_PMC_PCK1 (1 << 9)
/* Programmable Clock 1 */
...
@@ -36,27 +46,31 @@
...
@@ -36,27 +46,31 @@
#define AT91_PMC_HCK0 (1 << 16)
/* AHB Clock (USB host) [AT91SAM9261 only] */
#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_HCK1 (1 << 17)
/* AHB Clock (LCD) [AT91SAM9261 only] */
#define AT91_PMC_PCER
(AT91_PMC + 0x10)
/* Peripheral Clock Enable Register */
#define AT91_PMC_PCER
0x10
/* Peripheral Clock Enable Register */
#define AT91_PMC_PCDR
(AT91_PMC + 0x14)
/* Peripheral Clock Disable Register */
#define AT91_PMC_PCDR
0x14
/* Peripheral Clock Disable Register */
#define AT91_PMC_PCSR
(AT91_PMC + 0x18)
/* Peripheral Clock Status 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_UPLLEN (1 << 16)
/* UTMI PLL Enable */
#define AT91_PMC_UPLLCOUNT (0xf << 20)
/* UTMI PLL Start-up Time */
#define AT91_PMC_UPLLCOUNT (0xf << 20)
/* UTMI PLL Start-up Time */
#define AT91_PMC_BIASEN (1 << 24)
/* UTMI BIAS Enable */
#define AT91_PMC_BIASEN (1 << 24)
/* UTMI BIAS Enable */
#define AT91_PMC_BIASCOUNT (0xf << 28)
/* UTMI BIAS Start-up Time */
#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_CKGR_MOR 0x20
/* Main Oscillator Register [not on SAM9RL] */
#define AT91_PMC_MOSCEN (1 << 0)
/* Main Oscillator Enable */
#define AT91_PMC_MOSCEN (1 << 0)
/* Main Oscillator Enable */
#define AT91_PMC_OSCBYPASS (1 << 1)
/* Oscillator Bypass [SAM9x, CAP9] */
#define AT91_PMC_OSCBYPASS (1 << 1)
/* Oscillator Bypass */
#define AT91_PMC_OSCOUNT (0xff << 8)
/* Main Oscillator Start-up Time */
#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_MAINF (0xffff << 0)
/* Main Clock Frequency */
#define AT91_PMC_MAINRDY (1 << 16)
/* Main Clock Ready */
#define AT91_PMC_MAINRDY (1 << 16)
/* Main Clock Ready */
#define AT91_CKGR_PLLAR
(AT91_PMC + 0x28)
/* PLL A Register */
#define AT91_CKGR_PLLAR
0x28
/* PLL A Register */
#define AT91_CKGR_PLLBR
(AT91_PMC + 0x2c)
/* PLL B Register */
#define AT91_CKGR_PLLBR
0x2c
/* PLL B Register */
#define AT91_PMC_DIV (0xff << 0)
/* Divider */
#define AT91_PMC_DIV (0xff << 0)
/* Divider */
#define AT91_PMC_PLLCOUNT (0x3f << 8)
/* PLL Counter */
#define AT91_PMC_PLLCOUNT (0x3f << 8)
/* PLL Counter */
#define AT91_PMC_OUT (3 << 14)
/* PLL Clock Frequency Range */
#define AT91_PMC_OUT (3 << 14)
/* PLL Clock Frequency Range */
...
@@ -67,27 +81,37 @@
...
@@ -67,27 +81,37 @@
#define AT91_PMC_USBDIV_4 (2 << 28)
#define AT91_PMC_USBDIV_4 (2 << 28)
#define AT91_PMC_USB96M (1 << 28)
/* Divider by 2 Enable (PLLB only) */
#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 (3 << 0)
/* Master Clock Selection */
#define AT91_PMC_CSS_SLOW (0 << 0)
#define AT91_PMC_CSS_SLOW (0 << 0)
#define AT91_PMC_CSS_MAIN (1 << 0)
#define AT91_PMC_CSS_MAIN (1 << 0)
#define AT91_PMC_CSS_PLLA (2 << 0)
#define AT91_PMC_CSS_PLLA (2 << 0)
#define AT91_PMC_CSS_PLLB (3 << 0)
#define AT91_PMC_CSS_PLLB (3 << 0)
#define AT91_PMC_CSS_UPLL (3 << 0)
/* [some SAM9 only] */
#define AT91_PMC_CSS_UPLL (3 << 0)
/* [some SAM9 only] */
#define AT91_PMC_PRES (7 << 2)
/* Master Clock Prescaler */
#define PMC_PRES_OFFSET 2
#define AT91_PMC_PRES_1 (0 << 2)
#define AT91_PMC_PRES (7 << PMC_PRES_OFFSET)
/* Master Clock Prescaler */
#define AT91_PMC_PRES_2 (1 << 2)
#define AT91_PMC_PRES_1 (0 << PMC_PRES_OFFSET)
#define AT91_PMC_PRES_4 (2 << 2)
#define AT91_PMC_PRES_2 (1 << PMC_PRES_OFFSET)
#define AT91_PMC_PRES_8 (3 << 2)
#define AT91_PMC_PRES_4 (2 << PMC_PRES_OFFSET)
#define AT91_PMC_PRES_16 (4 << 2)
#define AT91_PMC_PRES_8 (3 << PMC_PRES_OFFSET)
#define AT91_PMC_PRES_32 (5 << 2)
#define AT91_PMC_PRES_16 (4 << PMC_PRES_OFFSET)
#define AT91_PMC_PRES_64 (6 << 2)
#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 AT91_PMC_MDIV (3 << 8)
/* Master Clock Division */
#define AT91RM9200_PMC_MDIV_1 (0 << 8)
/* [AT91RM9200 only] */
#define AT91RM9200_PMC_MDIV_1 (0 << 8)
/* [AT91RM9200 only] */
#define AT91RM9200_PMC_MDIV_2 (1 << 8)
#define AT91RM9200_PMC_MDIV_2 (1 << 8)
#define AT91RM9200_PMC_MDIV_3 (2 << 8)
#define AT91RM9200_PMC_MDIV_3 (2 << 8)
#define AT91RM9200_PMC_MDIV_4 (3 << 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_2 (1 << 8)
#define AT91SAM9_PMC_MDIV_4 (2 << 8)
#define AT91SAM9_PMC_MDIV_4 (2 << 8)
#define AT91SAM9_PMC_MDIV_6 (3 << 8)
/* [some SAM9 only] */
#define AT91SAM9_PMC_MDIV_6 (3 << 8)
/* [some SAM9 only] */
...
@@ -99,35 +123,55 @@
...
@@ -99,35 +123,55 @@
#define AT91_PMC_PLLADIV2_OFF (0 << 12)
#define AT91_PMC_PLLADIV2_OFF (0 << 12)
#define AT91_PMC_PLLADIV2_ON (1 << 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 (0x1 << 0)
/* USB OHCI Input clock selection */
#define AT91_PMC_USBS_PLLA (0 << 0)
#define AT91_PMC_USBS_PLLA (0 << 0)
#define AT91_PMC_USBS_UPLL (1 << 0)
#define AT91_PMC_USBS_UPLL (1 << 0)
#define AT91_PMC_OHCIUSBDIV (0xF << 8)
/* Divider for USB OHCI Clock */
#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 (0x1 << 8)
/* CSS or Master Clock Selection */
#define AT91_PMC_CSSMCK_CSS (0 << 8)
#define AT91_PMC_CSSMCK_CSS (0 << 8)
#define AT91_PMC_CSSMCK_MCK (1 << 8)
#define AT91_PMC_CSSMCK_MCK (1 << 8)
#define AT91_PMC_IER
(AT91_PMC + 0x60)
/* Interrupt Enable Register */
#define AT91_PMC_IER
0x60
/* Interrupt Enable Register */
#define AT91_PMC_IDR
(AT91_PMC + 0x64)
/* Interrupt Disable Register */
#define AT91_PMC_IDR
0x64
/* Interrupt Disable Register */
#define AT91_PMC_SR
(AT91_PMC + 0x68)
/* Status Register */
#define AT91_PMC_SR
0x68
/* Status Register */
#define AT91_PMC_MOSCS (1 << 0)
/* MOSCS Flag */
#define AT91_PMC_MOSCS (1 << 0)
/* MOSCS Flag */
#define AT91_PMC_LOCKA (1 << 1)
/* PLLA Lock */
#define AT91_PMC_LOCKA (1 << 1)
/* PLLA Lock */
#define AT91_PMC_LOCKB (1 << 2)
/* PLLB Lock */
#define AT91_PMC_LOCKB (1 << 2)
/* PLLB Lock */
#define AT91_PMC_MCKRDY (1 << 3)
/* Master Clock */
#define AT91_PMC_MCKRDY (1 << 3)
/* Master Clock */
#define AT91_PMC_LOCKU (1 << 6)
/* UPLL Lock [some SAM9, AT91CAP9 only] */
#define AT91_PMC_LOCKU (1 << 6)
/* UPLL Lock [some SAM9] */
#define AT91_PMC_OSCSEL (1 << 7)
/* Slow Clock Oscillator [AT91CAP9 revC only] */
#define AT91_PMC_PCK0RDY (1 << 8)
/* Programmable Clock 0 */
#define AT91_PMC_PCK0RDY (1 << 8)
/* Programmable Clock 0 */
#define AT91_PMC_PCK1RDY (1 << 9)
/* Programmable Clock 1 */
#define AT91_PMC_PCK1RDY (1 << 9)
/* Programmable Clock 1 */
#define AT91_PMC_PCK2RDY (1 << 10)
/* Programmable Clock 2 */
#define AT91_PMC_PCK2RDY (1 << 10)
/* Programmable Clock 2 */
#define AT91_PMC_PCK3RDY (1 << 11)
/* Programmable Clock 3 */
#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_WPSR 0xe8
/* Write Protect Status Register [some SAM9] */
#define AT91_PMC_PROTKEY 0x504d4301
/* Activation Code */
#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
#endif
arch/arm/mach-at91/include/mach/at91_ramc.h
0 → 100644
浏览文件 @
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
浏览文件 @
d50673ed
...
@@ -16,34 +16,46 @@
...
@@ -16,34 +16,46 @@
#ifndef AT91_ST_H
#ifndef AT91_ST_H
#define 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_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_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_WDV (0xffff << 0)
/* Watchdog Counter Value */
#define AT91_ST_RSTEN (1 << 16)
/* Reset Enable */
#define AT91_ST_RSTEN (1 << 16)
/* Reset Enable */
#define AT91_ST_EXTEN (1 << 17)
/* External Signal Assertion 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_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_PITS (1 << 0)
/* Period Interval Timer Status */
#define AT91_ST_WDOVF (1 << 1)
/* Watchdog Overflow */
#define AT91_ST_WDOVF (1 << 1)
/* Watchdog Overflow */
#define AT91_ST_RTTINC (1 << 2)
/* Real-time Timer Increment */
#define AT91_ST_RTTINC (1 << 2)
/* Real-time Timer Increment */
#define AT91_ST_ALMS (1 << 3)
/* Alarm Status */
#define AT91_ST_ALMS (1 << 3)
/* Alarm Status */
#define AT91_ST_IER
(AT91_ST + 0x14)
/* Interrupt Enable Register */
#define AT91_ST_IER
0x14
/* Interrupt Enable Register */
#define AT91_ST_IDR
(AT91_ST + 0x18)
/* Interrupt Disable Register */
#define AT91_ST_IDR
0x18
/* Interrupt Disable Register */
#define AT91_ST_IMR
(AT91_ST + 0x1c)
/* Interrupt Mask 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_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 */
#define AT91_ST_CRTV (0xfffff << 0)
/* Current Real-Time Value */
#endif
#endif
arch/arm/mach-at91/include/mach/at91cap9.h
已删除
100644 → 0
浏览文件 @
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
已删除
100644 → 0
浏览文件 @
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
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91rm9200_mc.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91rm9200_sdramc.h
0 → 100644
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9260.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9260_matrix.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9261.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9261_matrix.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9263.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9263_matrix.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9_ddrsdr.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9_sdramc.h
浏览文件 @
d50673ed
...
@@ -82,10 +82,4 @@
...
@@ -82,10 +82,4 @@
#define AT91_SDRAMC_MD_SDRAM 0
#define AT91_SDRAMC_MD_SDRAM 0
#define AT91_SDRAMC_MD_LOW_POWER_SDRAM 1
#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
#endif
arch/arm/mach-at91/include/mach/at91sam9g45.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9rl.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9x5.h
0 → 100644
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91sam9x5_matrix.h
0 → 100644
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/at91x40.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/board.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/cpu.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/hardware.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/include/mach/io.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/pm.c
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/pm.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/pm_slowclock.S
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/setup.c
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/arm/mach-at91/soc.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
arch/avr32/mach-at32ap/at32ap700x.c
浏览文件 @
d50673ed
...
@@ -1055,8 +1055,6 @@ struct platform_device *__init at32_add_device_usart(unsigned int id)
...
@@ -1055,8 +1055,6 @@ struct platform_device *__init at32_add_device_usart(unsigned int id)
return
at32_usarts
[
id
];
return
at32_usarts
[
id
];
}
}
struct
platform_device
*
atmel_default_console_device
;
void
__init
at32_setup_serial_console
(
unsigned
int
usart_id
)
void
__init
at32_setup_serial_console
(
unsigned
int
usart_id
)
{
{
atmel_default_console_device
=
at32_usarts
[
usart_id
];
atmel_default_console_device
=
at32_usarts
[
usart_id
];
...
...
arch/avr32/mach-at32ap/include/mach/cpu.h
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
drivers/mmc/host/at91_mci.c
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
drivers/pcmcia/at91_cf.c
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
drivers/rtc/rtc-at91sam9.c
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
drivers/tty/serial/atmel_serial.c
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
drivers/usb/gadget/Kconfig
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
drivers/usb/gadget/at91_udc.c
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
drivers/usb/gadget/atmel_usba_udc.c
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
drivers/watchdog/at91rm9200_wdt.c
浏览文件 @
d50673ed
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录