Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
69758ab7
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
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看板
提交
69758ab7
编写于
10月 01, 2010
作者:
K
Kevin Hilman
浏览文件
操作
浏览文件
下载
差异文件
manual merge for pm-hwmod-uart due to conflicts
上级
963bfb09
257f23d8
变更
22
展开全部
隐藏空白更改
内联
并排
Showing
22 changed file
with
2707 addition
and
296 deletion
+2707
-296
arch/arm/mach-omap2/Kconfig
arch/arm/mach-omap2/Kconfig
+8
-3
arch/arm/mach-omap2/board-3630sdp.c
arch/arm/mach-omap2/board-3630sdp.c
+0
-1
arch/arm/mach-omap2/board-zoom-peripherals.c
arch/arm/mach-omap2/board-zoom-peripherals.c
+1
-0
arch/arm/mach-omap2/clock3xxx_data.c
arch/arm/mach-omap2/clock3xxx_data.c
+22
-0
arch/arm/mach-omap2/cm-regbits-34xx.h
arch/arm/mach-omap2/cm-regbits-34xx.h
+2
-0
arch/arm/mach-omap2/omap_hwmod_2420_data.c
arch/arm/mach-omap2/omap_hwmod_2420_data.c
+193
-0
arch/arm/mach-omap2/omap_hwmod_2430_data.c
arch/arm/mach-omap2/omap_hwmod_2430_data.c
+193
-0
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+251
-2
arch/arm/mach-omap2/omap_hwmod_44xx_data.c
arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+235
-0
arch/arm/mach-omap2/pm34xx.c
arch/arm/mach-omap2/pm34xx.c
+15
-2
arch/arm/mach-omap2/prcm-common.h
arch/arm/mach-omap2/prcm-common.h
+5
-0
arch/arm/mach-omap2/prm-regbits-34xx.h
arch/arm/mach-omap2/prm-regbits-34xx.h
+1
-0
arch/arm/mach-omap2/serial.c
arch/arm/mach-omap2/serial.c
+284
-271
arch/arm/plat-omap/common.c
arch/arm/plat-omap/common.c
+0
-16
arch/arm/plat-omap/include/plat/common.h
arch/arm/plat-omap/include/plat/common.h
+0
-1
arch/arm/plat-omap/include/plat/dma.h
arch/arm/plat-omap/include/plat/dma.h
+2
-0
arch/arm/plat-omap/include/plat/irqs.h
arch/arm/plat-omap/include/plat/irqs.h
+2
-0
arch/arm/plat-omap/include/plat/omap-serial.h
arch/arm/plat-omap/include/plat/omap-serial.h
+129
-0
drivers/serial/Kconfig
drivers/serial/Kconfig
+27
-0
drivers/serial/Makefile
drivers/serial/Makefile
+1
-0
drivers/serial/omap-serial.c
drivers/serial/omap-serial.c
+1333
-0
include/linux/serial_core.h
include/linux/serial_core.h
+3
-0
未找到文件。
arch/arm/mach-omap2/Kconfig
浏览文件 @
69758ab7
...
...
@@ -11,9 +11,8 @@ config ARCH_OMAP2PLUS_TYPICAL
select PM_RUNTIME
select VFP
select NEON if ARCH_OMAP3 || ARCH_OMAP4
select SERIAL_8250
select SERIAL_CORE_CONSOLE
select SERIAL_8250_CONSOLE
select SERIAL_OMAP
select SERIAL_OMAP_CONSOLE
select I2C
select I2C_OMAP
select MFD
...
...
@@ -222,12 +221,18 @@ config MACH_OMAP_ZOOM2
depends on ARCH_OMAP3
default y
select OMAP_PACKAGE_CBB
select SERIAL_8250
select SERIAL_CORE_CONSOLE
select SERIAL_8250_CONSOLE
config MACH_OMAP_ZOOM3
bool "OMAP3630 Zoom3 board"
depends on ARCH_OMAP3
default y
select OMAP_PACKAGE_CBP
select SERIAL_8250
select SERIAL_CORE_CONSOLE
select SERIAL_8250_CONSOLE
config MACH_CM_T35
bool "CompuLab CM-T35 module"
...
...
arch/arm/mach-omap2/board-3630sdp.c
浏览文件 @
69758ab7
...
...
@@ -208,7 +208,6 @@ static struct flash_partitions sdp_flash_partitions[] = {
static
void
__init
omap_sdp_init
(
void
)
{
omap3_mux_init
(
board_mux
,
OMAP_PACKAGE_CBP
);
omap_serial_init
();
zoom_peripherals_init
();
board_smc91x_init
();
board_flash_init
(
sdp_flash_partitions
,
chip_sel_sdp
);
...
...
arch/arm/mach-omap2/board-zoom-peripherals.c
浏览文件 @
69758ab7
...
...
@@ -283,4 +283,5 @@ void __init zoom_peripherals_init(void)
omap_i2c_init
();
usb_musb_init
(
&
musb_board_data
);
enable_board_wakeup_source
();
omap_serial_init
();
}
arch/arm/mach-omap2/clock3xxx_data.c
浏览文件 @
69758ab7
...
...
@@ -2465,6 +2465,16 @@ static struct clk uart3_fck = {
.
recalc
=
&
followparent_recalc
,
};
static
struct
clk
uart4_fck
=
{
.
name
=
"uart4_fck"
,
.
ops
=
&
clkops_omap2_dflt_wait
,
.
parent
=
&
per_48m_fck
,
.
enable_reg
=
OMAP_CM_REGADDR
(
OMAP3430_PER_MOD
,
CM_FCLKEN
),
.
enable_bit
=
OMAP3630_EN_UART4_SHIFT
,
.
clkdm_name
=
"per_clkdm"
,
.
recalc
=
&
followparent_recalc
,
};
static
struct
clk
gpt2_fck
=
{
.
name
=
"gpt2_fck"
,
.
ops
=
&
clkops_omap2_dflt_wait
,
...
...
@@ -2715,6 +2725,16 @@ static struct clk uart3_ick = {
.
recalc
=
&
followparent_recalc
,
};
static
struct
clk
uart4_ick
=
{
.
name
=
"uart4_ick"
,
.
ops
=
&
clkops_omap2_dflt_wait
,
.
parent
=
&
per_l4_ick
,
.
enable_reg
=
OMAP_CM_REGADDR
(
OMAP3430_PER_MOD
,
CM_ICLKEN
),
.
enable_bit
=
OMAP3630_EN_UART4_SHIFT
,
.
clkdm_name
=
"per_clkdm"
,
.
recalc
=
&
followparent_recalc
,
};
static
struct
clk
gpt9_ick
=
{
.
name
=
"gpt9_ick"
,
.
ops
=
&
clkops_omap2_dflt_wait
,
...
...
@@ -3349,6 +3369,7 @@ static struct omap_clk omap3xxx_clks[] = {
CLK
(
NULL
,
"per_96m_fck"
,
&
per_96m_fck
,
CK_3XXX
),
CLK
(
NULL
,
"per_48m_fck"
,
&
per_48m_fck
,
CK_3XXX
),
CLK
(
NULL
,
"uart3_fck"
,
&
uart3_fck
,
CK_3XXX
),
CLK
(
NULL
,
"uart4_fck"
,
&
uart4_fck
,
CK_36XX
),
CLK
(
NULL
,
"gpt2_fck"
,
&
gpt2_fck
,
CK_3XXX
),
CLK
(
NULL
,
"gpt3_fck"
,
&
gpt3_fck
,
CK_3XXX
),
CLK
(
NULL
,
"gpt4_fck"
,
&
gpt4_fck
,
CK_3XXX
),
...
...
@@ -3372,6 +3393,7 @@ static struct omap_clk omap3xxx_clks[] = {
CLK
(
NULL
,
"gpio2_ick"
,
&
gpio2_ick
,
CK_3XXX
),
CLK
(
NULL
,
"wdt3_ick"
,
&
wdt3_ick
,
CK_3XXX
),
CLK
(
NULL
,
"uart3_ick"
,
&
uart3_ick
,
CK_3XXX
),
CLK
(
NULL
,
"uart4_ick"
,
&
uart4_ick
,
CK_36XX
),
CLK
(
NULL
,
"gpt9_ick"
,
&
gpt9_ick
,
CK_3XXX
),
CLK
(
NULL
,
"gpt8_ick"
,
&
gpt8_ick
,
CK_3XXX
),
CLK
(
NULL
,
"gpt7_ick"
,
&
gpt7_ick
,
CK_3XXX
),
...
...
arch/arm/mach-omap2/cm-regbits-34xx.h
浏览文件 @
69758ab7
...
...
@@ -649,6 +649,8 @@
#define OMAP3430_ST_MCBSP2_MASK (1 << 0)
/* CM_AUTOIDLE_PER */
#define OMAP3630_AUTO_UART4_MASK (1 << 18)
#define OMAP3630_AUTO_UART4_SHIFT 18
#define OMAP3430_AUTO_GPIO6_MASK (1 << 17)
#define OMAP3430_AUTO_GPIO6_SHIFT 17
#define OMAP3430_AUTO_GPIO5_MASK (1 << 16)
...
...
arch/arm/mach-omap2/omap_hwmod_2420_data.c
浏览文件 @
69758ab7
...
...
@@ -15,6 +15,7 @@
#include <mach/irqs.h>
#include <plat/cpu.h>
#include <plat/dma.h>
#include <plat/serial.h>
#include "omap_hwmod_common_data.h"
...
...
@@ -73,6 +74,9 @@ static struct omap_hwmod omap2420_l3_main_hwmod = {
};
static
struct
omap_hwmod
omap2420_l4_wkup_hwmod
;
static
struct
omap_hwmod
omap2420_uart1_hwmod
;
static
struct
omap_hwmod
omap2420_uart2_hwmod
;
static
struct
omap_hwmod
omap2420_uart3_hwmod
;
/* L4_CORE -> L4_WKUP interface */
static
struct
omap_hwmod_ocp_if
omap2420_l4_core__l4_wkup
=
{
...
...
@@ -81,6 +85,60 @@ static struct omap_hwmod_ocp_if omap2420_l4_core__l4_wkup = {
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* L4 CORE -> UART1 interface */
static
struct
omap_hwmod_addr_space
omap2420_uart1_addr_space
[]
=
{
{
.
pa_start
=
OMAP2_UART1_BASE
,
.
pa_end
=
OMAP2_UART1_BASE
+
SZ_8K
-
1
,
.
flags
=
ADDR_MAP_ON_INIT
|
ADDR_TYPE_RT
,
},
};
static
struct
omap_hwmod_ocp_if
omap2_l4_core__uart1
=
{
.
master
=
&
omap2420_l4_core_hwmod
,
.
slave
=
&
omap2420_uart1_hwmod
,
.
clk
=
"uart1_ick"
,
.
addr
=
omap2420_uart1_addr_space
,
.
addr_cnt
=
ARRAY_SIZE
(
omap2420_uart1_addr_space
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* L4 CORE -> UART2 interface */
static
struct
omap_hwmod_addr_space
omap2420_uart2_addr_space
[]
=
{
{
.
pa_start
=
OMAP2_UART2_BASE
,
.
pa_end
=
OMAP2_UART2_BASE
+
SZ_1K
-
1
,
.
flags
=
ADDR_MAP_ON_INIT
|
ADDR_TYPE_RT
,
},
};
static
struct
omap_hwmod_ocp_if
omap2_l4_core__uart2
=
{
.
master
=
&
omap2420_l4_core_hwmod
,
.
slave
=
&
omap2420_uart2_hwmod
,
.
clk
=
"uart2_ick"
,
.
addr
=
omap2420_uart2_addr_space
,
.
addr_cnt
=
ARRAY_SIZE
(
omap2420_uart2_addr_space
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* L4 PER -> UART3 interface */
static
struct
omap_hwmod_addr_space
omap2420_uart3_addr_space
[]
=
{
{
.
pa_start
=
OMAP2_UART3_BASE
,
.
pa_end
=
OMAP2_UART3_BASE
+
SZ_1K
-
1
,
.
flags
=
ADDR_MAP_ON_INIT
|
ADDR_TYPE_RT
,
},
};
static
struct
omap_hwmod_ocp_if
omap2_l4_core__uart3
=
{
.
master
=
&
omap2420_l4_core_hwmod
,
.
slave
=
&
omap2420_uart3_hwmod
,
.
clk
=
"uart3_ick"
,
.
addr
=
omap2420_uart3_addr_space
,
.
addr_cnt
=
ARRAY_SIZE
(
omap2420_uart3_addr_space
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* Slave interfaces on the L4_CORE interconnect */
static
struct
omap_hwmod_ocp_if
*
omap2420_l4_core_slaves
[]
=
{
&
omap2420_l3_main__l4_core
,
...
...
@@ -89,6 +147,9 @@ static struct omap_hwmod_ocp_if *omap2420_l4_core_slaves[] = {
/* Master interfaces on the L4_CORE interconnect */
static
struct
omap_hwmod_ocp_if
*
omap2420_l4_core_masters
[]
=
{
&
omap2420_l4_core__l4_wkup
,
&
omap2_l4_core__uart1
,
&
omap2_l4_core__uart2
,
&
omap2_l4_core__uart3
,
};
/* L4 CORE */
...
...
@@ -228,6 +289,135 @@ static struct omap_hwmod omap2420_wd_timer2_hwmod = {
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP2420
),
};
/* UART */
static
struct
omap_hwmod_class_sysconfig
uart_sysc
=
{
.
rev_offs
=
0x50
,
.
sysc_offs
=
0x54
,
.
syss_offs
=
0x58
,
.
sysc_flags
=
(
SYSC_HAS_SIDLEMODE
|
SYSC_HAS_ENAWAKEUP
|
SYSC_HAS_SOFTRESET
|
SYSC_HAS_AUTOIDLE
),
.
idlemodes
=
(
SIDLE_FORCE
|
SIDLE_NO
|
SIDLE_SMART
),
.
sysc_fields
=
&
omap_hwmod_sysc_type1
,
};
static
struct
omap_hwmod_class
uart_class
=
{
.
name
=
"uart"
,
.
sysc
=
&
uart_sysc
,
};
/* UART1 */
static
struct
omap_hwmod_irq_info
uart1_mpu_irqs
[]
=
{
{
.
irq
=
INT_24XX_UART1_IRQ
,
},
};
static
struct
omap_hwmod_dma_info
uart1_sdma_reqs
[]
=
{
{
.
name
=
"rx"
,
.
dma_req
=
OMAP24XX_DMA_UART1_RX
,
},
{
.
name
=
"tx"
,
.
dma_req
=
OMAP24XX_DMA_UART1_TX
,
},
};
static
struct
omap_hwmod_ocp_if
*
omap2420_uart1_slaves
[]
=
{
&
omap2_l4_core__uart1
,
};
static
struct
omap_hwmod
omap2420_uart1_hwmod
=
{
.
name
=
"uart1"
,
.
mpu_irqs
=
uart1_mpu_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
uart1_mpu_irqs
),
.
sdma_reqs
=
uart1_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
uart1_sdma_reqs
),
.
main_clk
=
"uart1_fck"
,
.
prcm
=
{
.
omap2
=
{
.
module_offs
=
CORE_MOD
,
.
prcm_reg_id
=
1
,
.
module_bit
=
OMAP24XX_EN_UART1_SHIFT
,
.
idlest_reg_id
=
1
,
.
idlest_idle_bit
=
OMAP24XX_EN_UART1_SHIFT
,
},
},
.
slaves
=
omap2420_uart1_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap2420_uart1_slaves
),
.
class
=
&
uart_class
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP2420
),
};
/* UART2 */
static
struct
omap_hwmod_irq_info
uart2_mpu_irqs
[]
=
{
{
.
irq
=
INT_24XX_UART2_IRQ
,
},
};
static
struct
omap_hwmod_dma_info
uart2_sdma_reqs
[]
=
{
{
.
name
=
"rx"
,
.
dma_req
=
OMAP24XX_DMA_UART2_RX
,
},
{
.
name
=
"tx"
,
.
dma_req
=
OMAP24XX_DMA_UART2_TX
,
},
};
static
struct
omap_hwmod_ocp_if
*
omap2420_uart2_slaves
[]
=
{
&
omap2_l4_core__uart2
,
};
static
struct
omap_hwmod
omap2420_uart2_hwmod
=
{
.
name
=
"uart2"
,
.
mpu_irqs
=
uart2_mpu_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
uart2_mpu_irqs
),
.
sdma_reqs
=
uart2_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
uart2_sdma_reqs
),
.
main_clk
=
"uart2_fck"
,
.
prcm
=
{
.
omap2
=
{
.
module_offs
=
CORE_MOD
,
.
prcm_reg_id
=
1
,
.
module_bit
=
OMAP24XX_EN_UART2_SHIFT
,
.
idlest_reg_id
=
1
,
.
idlest_idle_bit
=
OMAP24XX_EN_UART2_SHIFT
,
},
},
.
slaves
=
omap2420_uart2_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap2420_uart2_slaves
),
.
class
=
&
uart_class
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP2420
),
};
/* UART3 */
static
struct
omap_hwmod_irq_info
uart3_mpu_irqs
[]
=
{
{
.
irq
=
INT_24XX_UART3_IRQ
,
},
};
static
struct
omap_hwmod_dma_info
uart3_sdma_reqs
[]
=
{
{
.
name
=
"rx"
,
.
dma_req
=
OMAP24XX_DMA_UART3_RX
,
},
{
.
name
=
"tx"
,
.
dma_req
=
OMAP24XX_DMA_UART3_TX
,
},
};
static
struct
omap_hwmod_ocp_if
*
omap2420_uart3_slaves
[]
=
{
&
omap2_l4_core__uart3
,
};
static
struct
omap_hwmod
omap2420_uart3_hwmod
=
{
.
name
=
"uart3"
,
.
mpu_irqs
=
uart3_mpu_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
uart3_mpu_irqs
),
.
sdma_reqs
=
uart3_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
uart3_sdma_reqs
),
.
main_clk
=
"uart3_fck"
,
.
prcm
=
{
.
omap2
=
{
.
module_offs
=
CORE_MOD
,
.
prcm_reg_id
=
2
,
.
module_bit
=
OMAP24XX_EN_UART3_SHIFT
,
.
idlest_reg_id
=
2
,
.
idlest_idle_bit
=
OMAP24XX_EN_UART3_SHIFT
,
},
},
.
slaves
=
omap2420_uart3_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap2420_uart3_slaves
),
.
class
=
&
uart_class
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP2420
),
};
static
__initdata
struct
omap_hwmod
*
omap2420_hwmods
[]
=
{
&
omap2420_l3_main_hwmod
,
&
omap2420_l4_core_hwmod
,
...
...
@@ -235,6 +425,9 @@ static __initdata struct omap_hwmod *omap2420_hwmods[] = {
&
omap2420_mpu_hwmod
,
&
omap2420_iva_hwmod
,
&
omap2420_wd_timer2_hwmod
,
&
omap2420_uart1_hwmod
,
&
omap2420_uart2_hwmod
,
&
omap2420_uart3_hwmod
,
NULL
,
};
...
...
arch/arm/mach-omap2/omap_hwmod_2430_data.c
浏览文件 @
69758ab7
...
...
@@ -15,6 +15,7 @@
#include <mach/irqs.h>
#include <plat/cpu.h>
#include <plat/dma.h>
#include <plat/serial.h>
#include "omap_hwmod_common_data.h"
...
...
@@ -73,6 +74,9 @@ static struct omap_hwmod omap2430_l3_main_hwmod = {
};
static
struct
omap_hwmod
omap2430_l4_wkup_hwmod
;
static
struct
omap_hwmod
omap2430_uart1_hwmod
;
static
struct
omap_hwmod
omap2430_uart2_hwmod
;
static
struct
omap_hwmod
omap2430_uart3_hwmod
;
/* L4_CORE -> L4_WKUP interface */
static
struct
omap_hwmod_ocp_if
omap2430_l4_core__l4_wkup
=
{
...
...
@@ -81,6 +85,60 @@ static struct omap_hwmod_ocp_if omap2430_l4_core__l4_wkup = {
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* L4 CORE -> UART1 interface */
static
struct
omap_hwmod_addr_space
omap2430_uart1_addr_space
[]
=
{
{
.
pa_start
=
OMAP2_UART1_BASE
,
.
pa_end
=
OMAP2_UART1_BASE
+
SZ_8K
-
1
,
.
flags
=
ADDR_MAP_ON_INIT
|
ADDR_TYPE_RT
,
},
};
static
struct
omap_hwmod_ocp_if
omap2_l4_core__uart1
=
{
.
master
=
&
omap2430_l4_core_hwmod
,
.
slave
=
&
omap2430_uart1_hwmod
,
.
clk
=
"uart1_ick"
,
.
addr
=
omap2430_uart1_addr_space
,
.
addr_cnt
=
ARRAY_SIZE
(
omap2430_uart1_addr_space
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* L4 CORE -> UART2 interface */
static
struct
omap_hwmod_addr_space
omap2430_uart2_addr_space
[]
=
{
{
.
pa_start
=
OMAP2_UART2_BASE
,
.
pa_end
=
OMAP2_UART2_BASE
+
SZ_1K
-
1
,
.
flags
=
ADDR_MAP_ON_INIT
|
ADDR_TYPE_RT
,
},
};
static
struct
omap_hwmod_ocp_if
omap2_l4_core__uart2
=
{
.
master
=
&
omap2430_l4_core_hwmod
,
.
slave
=
&
omap2430_uart2_hwmod
,
.
clk
=
"uart2_ick"
,
.
addr
=
omap2430_uart2_addr_space
,
.
addr_cnt
=
ARRAY_SIZE
(
omap2430_uart2_addr_space
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* L4 PER -> UART3 interface */
static
struct
omap_hwmod_addr_space
omap2430_uart3_addr_space
[]
=
{
{
.
pa_start
=
OMAP2_UART3_BASE
,
.
pa_end
=
OMAP2_UART3_BASE
+
SZ_1K
-
1
,
.
flags
=
ADDR_MAP_ON_INIT
|
ADDR_TYPE_RT
,
},
};
static
struct
omap_hwmod_ocp_if
omap2_l4_core__uart3
=
{
.
master
=
&
omap2430_l4_core_hwmod
,
.
slave
=
&
omap2430_uart3_hwmod
,
.
clk
=
"uart3_ick"
,
.
addr
=
omap2430_uart3_addr_space
,
.
addr_cnt
=
ARRAY_SIZE
(
omap2430_uart3_addr_space
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* Slave interfaces on the L4_CORE interconnect */
static
struct
omap_hwmod_ocp_if
*
omap2430_l4_core_slaves
[]
=
{
&
omap2430_l3_main__l4_core
,
...
...
@@ -106,6 +164,9 @@ static struct omap_hwmod omap2430_l4_core_hwmod = {
/* Slave interfaces on the L4_WKUP interconnect */
static
struct
omap_hwmod_ocp_if
*
omap2430_l4_wkup_slaves
[]
=
{
&
omap2430_l4_core__l4_wkup
,
&
omap2_l4_core__uart1
,
&
omap2_l4_core__uart2
,
&
omap2_l4_core__uart3
,
};
/* Master interfaces on the L4_WKUP interconnect */
...
...
@@ -228,6 +289,135 @@ static struct omap_hwmod omap2430_wd_timer2_hwmod = {
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP2430
),
};
/* UART */
static
struct
omap_hwmod_class_sysconfig
uart_sysc
=
{
.
rev_offs
=
0x50
,
.
sysc_offs
=
0x54
,
.
syss_offs
=
0x58
,
.
sysc_flags
=
(
SYSC_HAS_SIDLEMODE
|
SYSC_HAS_ENAWAKEUP
|
SYSC_HAS_SOFTRESET
|
SYSC_HAS_AUTOIDLE
),
.
idlemodes
=
(
SIDLE_FORCE
|
SIDLE_NO
|
SIDLE_SMART
),
.
sysc_fields
=
&
omap_hwmod_sysc_type1
,
};
static
struct
omap_hwmod_class
uart_class
=
{
.
name
=
"uart"
,
.
sysc
=
&
uart_sysc
,
};
/* UART1 */
static
struct
omap_hwmod_irq_info
uart1_mpu_irqs
[]
=
{
{
.
irq
=
INT_24XX_UART1_IRQ
,
},
};
static
struct
omap_hwmod_dma_info
uart1_sdma_reqs
[]
=
{
{
.
name
=
"rx"
,
.
dma_req
=
OMAP24XX_DMA_UART1_RX
,
},
{
.
name
=
"tx"
,
.
dma_req
=
OMAP24XX_DMA_UART1_TX
,
},
};
static
struct
omap_hwmod_ocp_if
*
omap2430_uart1_slaves
[]
=
{
&
omap2_l4_core__uart1
,
};
static
struct
omap_hwmod
omap2430_uart1_hwmod
=
{
.
name
=
"uart1"
,
.
mpu_irqs
=
uart1_mpu_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
uart1_mpu_irqs
),
.
sdma_reqs
=
uart1_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
uart1_sdma_reqs
),
.
main_clk
=
"uart1_fck"
,
.
prcm
=
{
.
omap2
=
{
.
module_offs
=
CORE_MOD
,
.
prcm_reg_id
=
1
,
.
module_bit
=
OMAP24XX_EN_UART1_SHIFT
,
.
idlest_reg_id
=
1
,
.
idlest_idle_bit
=
OMAP24XX_EN_UART1_SHIFT
,
},
},
.
slaves
=
omap2430_uart1_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap2430_uart1_slaves
),
.
class
=
&
uart_class
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP2430
),
};
/* UART2 */
static
struct
omap_hwmod_irq_info
uart2_mpu_irqs
[]
=
{
{
.
irq
=
INT_24XX_UART2_IRQ
,
},
};
static
struct
omap_hwmod_dma_info
uart2_sdma_reqs
[]
=
{
{
.
name
=
"rx"
,
.
dma_req
=
OMAP24XX_DMA_UART2_RX
,
},
{
.
name
=
"tx"
,
.
dma_req
=
OMAP24XX_DMA_UART2_TX
,
},
};
static
struct
omap_hwmod_ocp_if
*
omap2430_uart2_slaves
[]
=
{
&
omap2_l4_core__uart2
,
};
static
struct
omap_hwmod
omap2430_uart2_hwmod
=
{
.
name
=
"uart2"
,
.
mpu_irqs
=
uart2_mpu_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
uart2_mpu_irqs
),
.
sdma_reqs
=
uart2_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
uart2_sdma_reqs
),
.
main_clk
=
"uart2_fck"
,
.
prcm
=
{
.
omap2
=
{
.
module_offs
=
CORE_MOD
,
.
prcm_reg_id
=
1
,
.
module_bit
=
OMAP24XX_EN_UART2_SHIFT
,
.
idlest_reg_id
=
1
,
.
idlest_idle_bit
=
OMAP24XX_EN_UART2_SHIFT
,
},
},
.
slaves
=
omap2430_uart2_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap2430_uart2_slaves
),
.
class
=
&
uart_class
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP2430
),
};
/* UART3 */
static
struct
omap_hwmod_irq_info
uart3_mpu_irqs
[]
=
{
{
.
irq
=
INT_24XX_UART3_IRQ
,
},
};
static
struct
omap_hwmod_dma_info
uart3_sdma_reqs
[]
=
{
{
.
name
=
"rx"
,
.
dma_req
=
OMAP24XX_DMA_UART3_RX
,
},
{
.
name
=
"tx"
,
.
dma_req
=
OMAP24XX_DMA_UART3_TX
,
},
};
static
struct
omap_hwmod_ocp_if
*
omap2430_uart3_slaves
[]
=
{
&
omap2_l4_core__uart3
,
};
static
struct
omap_hwmod
omap2430_uart3_hwmod
=
{
.
name
=
"uart3"
,
.
mpu_irqs
=
uart3_mpu_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
uart3_mpu_irqs
),
.
sdma_reqs
=
uart3_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
uart3_sdma_reqs
),
.
main_clk
=
"uart3_fck"
,
.
prcm
=
{
.
omap2
=
{
.
module_offs
=
CORE_MOD
,
.
prcm_reg_id
=
2
,
.
module_bit
=
OMAP24XX_EN_UART3_SHIFT
,
.
idlest_reg_id
=
2
,
.
idlest_idle_bit
=
OMAP24XX_EN_UART3_SHIFT
,
},
},
.
slaves
=
omap2430_uart3_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap2430_uart3_slaves
),
.
class
=
&
uart_class
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP2430
),
};
static
__initdata
struct
omap_hwmod
*
omap2430_hwmods
[]
=
{
&
omap2430_l3_main_hwmod
,
&
omap2430_l4_core_hwmod
,
...
...
@@ -235,6 +425,9 @@ static __initdata struct omap_hwmod *omap2430_hwmods[] = {
&
omap2430_mpu_hwmod
,
&
omap2430_iva_hwmod
,
&
omap2430_wd_timer2_hwmod
,
&
omap2430_uart1_hwmod
,
&
omap2430_uart2_hwmod
,
&
omap2430_uart3_hwmod
,
NULL
,
};
...
...
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
浏览文件 @
69758ab7
...
...
@@ -17,6 +17,7 @@
#include <mach/irqs.h>
#include <plat/cpu.h>
#include <plat/dma.h>
#include <plat/serial.h>
#include "omap_hwmod_common_data.h"
...
...
@@ -84,6 +85,10 @@ static struct omap_hwmod omap3xxx_l3_main_hwmod = {
};
static
struct
omap_hwmod
omap3xxx_l4_wkup_hwmod
;
static
struct
omap_hwmod
omap3xxx_uart1_hwmod
;
static
struct
omap_hwmod
omap3xxx_uart2_hwmod
;
static
struct
omap_hwmod
omap3xxx_uart3_hwmod
;
static
struct
omap_hwmod
omap3xxx_uart4_hwmod
;
/* L4_CORE -> L4_WKUP interface */
static
struct
omap_hwmod_ocp_if
omap3xxx_l4_core__l4_wkup
=
{
...
...
@@ -92,6 +97,78 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* L4 CORE -> UART1 interface */
static
struct
omap_hwmod_addr_space
omap3xxx_uart1_addr_space
[]
=
{
{
.
pa_start
=
OMAP3_UART1_BASE
,
.
pa_end
=
OMAP3_UART1_BASE
+
SZ_8K
-
1
,
.
flags
=
ADDR_MAP_ON_INIT
|
ADDR_TYPE_RT
,
},
};
static
struct
omap_hwmod_ocp_if
omap3_l4_core__uart1
=
{
.
master
=
&
omap3xxx_l4_core_hwmod
,
.
slave
=
&
omap3xxx_uart1_hwmod
,
.
clk
=
"uart1_ick"
,
.
addr
=
omap3xxx_uart1_addr_space
,
.
addr_cnt
=
ARRAY_SIZE
(
omap3xxx_uart1_addr_space
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* L4 CORE -> UART2 interface */
static
struct
omap_hwmod_addr_space
omap3xxx_uart2_addr_space
[]
=
{
{
.
pa_start
=
OMAP3_UART2_BASE
,
.
pa_end
=
OMAP3_UART2_BASE
+
SZ_1K
-
1
,
.
flags
=
ADDR_MAP_ON_INIT
|
ADDR_TYPE_RT
,
},
};
static
struct
omap_hwmod_ocp_if
omap3_l4_core__uart2
=
{
.
master
=
&
omap3xxx_l4_core_hwmod
,
.
slave
=
&
omap3xxx_uart2_hwmod
,
.
clk
=
"uart2_ick"
,
.
addr
=
omap3xxx_uart2_addr_space
,
.
addr_cnt
=
ARRAY_SIZE
(
omap3xxx_uart2_addr_space
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* L4 PER -> UART3 interface */
static
struct
omap_hwmod_addr_space
omap3xxx_uart3_addr_space
[]
=
{
{
.
pa_start
=
OMAP3_UART3_BASE
,
.
pa_end
=
OMAP3_UART3_BASE
+
SZ_1K
-
1
,
.
flags
=
ADDR_MAP_ON_INIT
|
ADDR_TYPE_RT
,
},
};
static
struct
omap_hwmod_ocp_if
omap3_l4_per__uart3
=
{
.
master
=
&
omap3xxx_l4_per_hwmod
,
.
slave
=
&
omap3xxx_uart3_hwmod
,
.
clk
=
"uart3_ick"
,
.
addr
=
omap3xxx_uart3_addr_space
,
.
addr_cnt
=
ARRAY_SIZE
(
omap3xxx_uart3_addr_space
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* L4 PER -> UART4 interface */
static
struct
omap_hwmod_addr_space
omap3xxx_uart4_addr_space
[]
=
{
{
.
pa_start
=
OMAP3_UART4_BASE
,
.
pa_end
=
OMAP3_UART4_BASE
+
SZ_1K
-
1
,
.
flags
=
ADDR_MAP_ON_INIT
|
ADDR_TYPE_RT
,
},
};
static
struct
omap_hwmod_ocp_if
omap3_l4_per__uart4
=
{
.
master
=
&
omap3xxx_l4_per_hwmod
,
.
slave
=
&
omap3xxx_uart4_hwmod
,
.
clk
=
"uart4_ick"
,
.
addr
=
omap3xxx_uart4_addr_space
,
.
addr_cnt
=
ARRAY_SIZE
(
omap3xxx_uart4_addr_space
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* Slave interfaces on the L4_CORE interconnect */
static
struct
omap_hwmod_ocp_if
*
omap3xxx_l4_core_slaves
[]
=
{
&
omap3xxx_l3_main__l4_core
,
...
...
@@ -100,6 +177,8 @@ static struct omap_hwmod_ocp_if *omap3xxx_l4_core_slaves[] = {
/* Master interfaces on the L4_CORE interconnect */
static
struct
omap_hwmod_ocp_if
*
omap3xxx_l4_core_masters
[]
=
{
&
omap3xxx_l4_core__l4_wkup
,
&
omap3_l4_core__uart1
,
&
omap3_l4_core__uart2
,
};
/* L4 CORE */
...
...
@@ -121,6 +200,8 @@ static struct omap_hwmod_ocp_if *omap3xxx_l4_per_slaves[] = {
/* Master interfaces on the L4_PER interconnect */
static
struct
omap_hwmod_ocp_if
*
omap3xxx_l4_per_masters
[]
=
{
&
omap3_l4_per__uart3
,
&
omap3_l4_per__uart4
,
};
/* L4 PER */
...
...
@@ -262,6 +343,172 @@ static struct omap_hwmod omap3xxx_wd_timer2_hwmod = {
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP3430
),
};
/* UART common */
static
struct
omap_hwmod_class_sysconfig
uart_sysc
=
{
.
rev_offs
=
0x50
,
.
sysc_offs
=
0x54
,
.
syss_offs
=
0x58
,
.
sysc_flags
=
(
SYSC_HAS_SIDLEMODE
|
SYSC_HAS_ENAWAKEUP
|
SYSC_HAS_SOFTRESET
|
SYSC_HAS_AUTOIDLE
),
.
idlemodes
=
(
SIDLE_FORCE
|
SIDLE_NO
|
SIDLE_SMART
),
.
sysc_fields
=
&
omap_hwmod_sysc_type1
,
};
static
struct
omap_hwmod_class
uart_class
=
{
.
name
=
"uart"
,
.
sysc
=
&
uart_sysc
,
};
/* UART1 */
static
struct
omap_hwmod_irq_info
uart1_mpu_irqs
[]
=
{
{
.
irq
=
INT_24XX_UART1_IRQ
,
},
};
static
struct
omap_hwmod_dma_info
uart1_sdma_reqs
[]
=
{
{
.
name
=
"tx"
,
.
dma_req
=
OMAP24XX_DMA_UART1_TX
,
},
{
.
name
=
"rx"
,
.
dma_req
=
OMAP24XX_DMA_UART1_RX
,
},
};
static
struct
omap_hwmod_ocp_if
*
omap3xxx_uart1_slaves
[]
=
{
&
omap3_l4_core__uart1
,
};
static
struct
omap_hwmod
omap3xxx_uart1_hwmod
=
{
.
name
=
"uart1"
,
.
mpu_irqs
=
uart1_mpu_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
uart1_mpu_irqs
),
.
sdma_reqs
=
uart1_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
uart1_sdma_reqs
),
.
main_clk
=
"uart1_fck"
,
.
prcm
=
{
.
omap2
=
{
.
module_offs
=
CORE_MOD
,
.
prcm_reg_id
=
1
,
.
module_bit
=
OMAP3430_EN_UART1_SHIFT
,
.
idlest_reg_id
=
1
,
.
idlest_idle_bit
=
OMAP3430_EN_UART1_SHIFT
,
},
},
.
slaves
=
omap3xxx_uart1_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap3xxx_uart1_slaves
),
.
class
=
&
uart_class
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP3430
),
};
/* UART2 */
static
struct
omap_hwmod_irq_info
uart2_mpu_irqs
[]
=
{
{
.
irq
=
INT_24XX_UART2_IRQ
,
},
};
static
struct
omap_hwmod_dma_info
uart2_sdma_reqs
[]
=
{
{
.
name
=
"tx"
,
.
dma_req
=
OMAP24XX_DMA_UART2_TX
,
},
{
.
name
=
"rx"
,
.
dma_req
=
OMAP24XX_DMA_UART2_RX
,
},
};
static
struct
omap_hwmod_ocp_if
*
omap3xxx_uart2_slaves
[]
=
{
&
omap3_l4_core__uart2
,
};
static
struct
omap_hwmod
omap3xxx_uart2_hwmod
=
{
.
name
=
"uart2"
,
.
mpu_irqs
=
uart2_mpu_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
uart2_mpu_irqs
),
.
sdma_reqs
=
uart2_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
uart2_sdma_reqs
),
.
main_clk
=
"uart2_fck"
,
.
prcm
=
{
.
omap2
=
{
.
module_offs
=
CORE_MOD
,
.
prcm_reg_id
=
1
,
.
module_bit
=
OMAP3430_EN_UART2_SHIFT
,
.
idlest_reg_id
=
1
,
.
idlest_idle_bit
=
OMAP3430_EN_UART2_SHIFT
,
},
},
.
slaves
=
omap3xxx_uart2_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap3xxx_uart2_slaves
),
.
class
=
&
uart_class
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP3430
),
};
/* UART3 */
static
struct
omap_hwmod_irq_info
uart3_mpu_irqs
[]
=
{
{
.
irq
=
INT_24XX_UART3_IRQ
,
},
};
static
struct
omap_hwmod_dma_info
uart3_sdma_reqs
[]
=
{
{
.
name
=
"tx"
,
.
dma_req
=
OMAP24XX_DMA_UART3_TX
,
},
{
.
name
=
"rx"
,
.
dma_req
=
OMAP24XX_DMA_UART3_RX
,
},
};
static
struct
omap_hwmod_ocp_if
*
omap3xxx_uart3_slaves
[]
=
{
&
omap3_l4_per__uart3
,
};
static
struct
omap_hwmod
omap3xxx_uart3_hwmod
=
{
.
name
=
"uart3"
,
.
mpu_irqs
=
uart3_mpu_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
uart3_mpu_irqs
),
.
sdma_reqs
=
uart3_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
uart3_sdma_reqs
),
.
main_clk
=
"uart3_fck"
,
.
prcm
=
{
.
omap2
=
{
.
module_offs
=
OMAP3430_PER_MOD
,
.
prcm_reg_id
=
1
,
.
module_bit
=
OMAP3430_EN_UART3_SHIFT
,
.
idlest_reg_id
=
1
,
.
idlest_idle_bit
=
OMAP3430_EN_UART3_SHIFT
,
},
},
.
slaves
=
omap3xxx_uart3_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap3xxx_uart3_slaves
),
.
class
=
&
uart_class
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP3430
),
};
/* UART4 */
static
struct
omap_hwmod_irq_info
uart4_mpu_irqs
[]
=
{
{
.
irq
=
INT_36XX_UART4_IRQ
,
},
};
static
struct
omap_hwmod_dma_info
uart4_sdma_reqs
[]
=
{
{
.
name
=
"rx"
,
.
dma_req
=
OMAP36XX_DMA_UART4_RX
,
},
{
.
name
=
"tx"
,
.
dma_req
=
OMAP36XX_DMA_UART4_TX
,
},
};
static
struct
omap_hwmod_ocp_if
*
omap3xxx_uart4_slaves
[]
=
{
&
omap3_l4_per__uart4
,
};
static
struct
omap_hwmod
omap3xxx_uart4_hwmod
=
{
.
name
=
"uart4"
,
.
mpu_irqs
=
uart4_mpu_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
uart4_mpu_irqs
),
.
sdma_reqs
=
uart4_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
uart4_sdma_reqs
),
.
main_clk
=
"uart4_fck"
,
.
prcm
=
{
.
omap2
=
{
.
module_offs
=
OMAP3430_PER_MOD
,
.
prcm_reg_id
=
1
,
.
module_bit
=
OMAP3630_EN_UART4_SHIFT
,
.
idlest_reg_id
=
1
,
.
idlest_idle_bit
=
OMAP3630_EN_UART4_SHIFT
,
},
},
.
slaves
=
omap3xxx_uart4_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap3xxx_uart4_slaves
),
.
class
=
&
uart_class
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP3630ES1
),
};
static
__initdata
struct
omap_hwmod
*
omap3xxx_hwmods
[]
=
{
&
omap3xxx_l3_main_hwmod
,
&
omap3xxx_l4_core_hwmod
,
...
...
@@ -270,6 +517,10 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
&
omap3xxx_mpu_hwmod
,
&
omap3xxx_iva_hwmod
,
&
omap3xxx_wd_timer2_hwmod
,
&
omap3xxx_uart1_hwmod
,
&
omap3xxx_uart2_hwmod
,
&
omap3xxx_uart3_hwmod
,
&
omap3xxx_uart4_hwmod
,
NULL
,
};
...
...
@@ -277,5 +528,3 @@ int __init omap3xxx_hwmod_init(void)
{
return
omap_hwmod_init
(
omap3xxx_hwmods
);
}
arch/arm/mach-omap2/omap_hwmod_44xx_data.c
浏览文件 @
69758ab7
...
...
@@ -468,6 +468,21 @@ static struct omap_hwmod_class_sysconfig omap44xx_wd_timer_sysc = {
.
sysc_fields
=
&
omap_hwmod_sysc_type1
,
};
/*
* 'uart' class
* universal asynchronous receiver/transmitter (uart)
*/
static
struct
omap_hwmod_class_sysconfig
omap44xx_uart_sysc
=
{
.
rev_offs
=
0x0050
,
.
sysc_offs
=
0x0054
,
.
syss_offs
=
0x0058
,
.
sysc_flags
=
(
SYSC_HAS_ENAWAKEUP
|
SYSC_HAS_SIDLEMODE
|
SYSC_HAS_SOFTRESET
|
SYSC_HAS_AUTOIDLE
),
.
idlemodes
=
(
SIDLE_FORCE
|
SIDLE_NO
|
SIDLE_SMART
),
.
sysc_fields
=
&
omap_hwmod_sysc_type1
,
};
static
struct
omap_hwmod_class
omap44xx_wd_timer_hwmod_class
=
{
.
name
=
"wd_timer"
,
.
sysc
=
&
omap44xx_wd_timer_sysc
,
...
...
@@ -487,6 +502,82 @@ static struct omap_hwmod_addr_space omap44xx_wd_timer2_addrs[] = {
},
};
static
struct
omap_hwmod_class
omap44xx_uart_hwmod_class
=
{
.
name
=
"uart"
,
.
sysc
=
&
omap44xx_uart_sysc
,
};
/* uart1 */
static
struct
omap_hwmod
omap44xx_uart1_hwmod
;
static
struct
omap_hwmod_irq_info
omap44xx_uart1_irqs
[]
=
{
{
.
irq
=
72
+
OMAP44XX_IRQ_GIC_START
},
};
static
struct
omap_hwmod_dma_info
omap44xx_uart1_sdma_reqs
[]
=
{
{
.
name
=
"tx"
,
.
dma_req
=
48
+
OMAP44XX_DMA_REQ_START
},
{
.
name
=
"rx"
,
.
dma_req
=
49
+
OMAP44XX_DMA_REQ_START
},
};
static
struct
omap_hwmod_addr_space
omap44xx_uart1_addrs
[]
=
{
{
.
pa_start
=
0x4806a000
,
.
pa_end
=
0x4806a0ff
,
.
flags
=
ADDR_TYPE_RT
},
};
/* l4_per -> uart1 */
static
struct
omap_hwmod_ocp_if
omap44xx_l4_per__uart1
=
{
.
master
=
&
omap44xx_l4_per_hwmod
,
.
slave
=
&
omap44xx_uart1_hwmod
,
.
clk
=
"l4_div_ck"
,
.
addr
=
omap44xx_uart1_addrs
,
.
addr_cnt
=
ARRAY_SIZE
(
omap44xx_uart1_addrs
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* uart1 slave ports */
static
struct
omap_hwmod_ocp_if
*
omap44xx_uart1_slaves
[]
=
{
&
omap44xx_l4_per__uart1
,
};
static
struct
omap_hwmod
omap44xx_uart1_hwmod
=
{
.
name
=
"uart1"
,
.
class
=
&
omap44xx_uart_hwmod_class
,
.
mpu_irqs
=
omap44xx_uart1_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
omap44xx_uart1_irqs
),
.
sdma_reqs
=
omap44xx_uart1_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
omap44xx_uart1_sdma_reqs
),
.
main_clk
=
"uart1_fck"
,
.
prcm
=
{
.
omap4
=
{
.
clkctrl_reg
=
OMAP4430_CM_L4PER_UART1_CLKCTRL
,
},
},
.
slaves
=
omap44xx_uart1_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_uart1_slaves
),
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
};
/* uart2 */
static
struct
omap_hwmod
omap44xx_uart2_hwmod
;
static
struct
omap_hwmod_irq_info
omap44xx_uart2_irqs
[]
=
{
{
.
irq
=
73
+
OMAP44XX_IRQ_GIC_START
},
};
static
struct
omap_hwmod_dma_info
omap44xx_uart2_sdma_reqs
[]
=
{
{
.
name
=
"tx"
,
.
dma_req
=
50
+
OMAP44XX_DMA_REQ_START
},
{
.
name
=
"rx"
,
.
dma_req
=
51
+
OMAP44XX_DMA_REQ_START
},
};
static
struct
omap_hwmod_addr_space
omap44xx_uart2_addrs
[]
=
{
{
.
pa_start
=
0x4806c000
,
.
pa_end
=
0x4806c0ff
,
.
flags
=
ADDR_TYPE_RT
},
};
/* l4_wkup -> wd_timer2 */
static
struct
omap_hwmod_ocp_if
omap44xx_l4_wkup__wd_timer2
=
{
.
master
=
&
omap44xx_l4_wkup_hwmod
,
...
...
@@ -532,6 +623,58 @@ static struct omap_hwmod_addr_space omap44xx_wd_timer3_addrs[] = {
},
};
/* l4_per -> uart2 */
static
struct
omap_hwmod_ocp_if
omap44xx_l4_per__uart2
=
{
.
master
=
&
omap44xx_l4_per_hwmod
,
.
slave
=
&
omap44xx_uart2_hwmod
,
.
clk
=
"l4_div_ck"
,
.
addr
=
omap44xx_uart2_addrs
,
.
addr_cnt
=
ARRAY_SIZE
(
omap44xx_uart2_addrs
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* uart2 slave ports */
static
struct
omap_hwmod_ocp_if
*
omap44xx_uart2_slaves
[]
=
{
&
omap44xx_l4_per__uart2
,
};
static
struct
omap_hwmod
omap44xx_uart2_hwmod
=
{
.
name
=
"uart2"
,
.
class
=
&
omap44xx_uart_hwmod_class
,
.
mpu_irqs
=
omap44xx_uart2_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
omap44xx_uart2_irqs
),
.
sdma_reqs
=
omap44xx_uart2_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
omap44xx_uart2_sdma_reqs
),
.
main_clk
=
"uart2_fck"
,
.
prcm
=
{
.
omap4
=
{
.
clkctrl_reg
=
OMAP4430_CM_L4PER_UART2_CLKCTRL
,
},
},
.
slaves
=
omap44xx_uart2_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_uart2_slaves
),
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
};
/* uart3 */
static
struct
omap_hwmod
omap44xx_uart3_hwmod
;
static
struct
omap_hwmod_irq_info
omap44xx_uart3_irqs
[]
=
{
{
.
irq
=
74
+
OMAP44XX_IRQ_GIC_START
},
};
static
struct
omap_hwmod_dma_info
omap44xx_uart3_sdma_reqs
[]
=
{
{
.
name
=
"tx"
,
.
dma_req
=
52
+
OMAP44XX_DMA_REQ_START
},
{
.
name
=
"rx"
,
.
dma_req
=
53
+
OMAP44XX_DMA_REQ_START
},
};
static
struct
omap_hwmod_addr_space
omap44xx_uart3_addrs
[]
=
{
{
.
pa_start
=
0x48020000
,
.
pa_end
=
0x480200ff
,
.
flags
=
ADDR_TYPE_RT
},
};
/* l4_abe -> wd_timer3 */
static
struct
omap_hwmod_ocp_if
omap44xx_l4_abe__wd_timer3
=
{
.
master
=
&
omap44xx_l4_abe_hwmod
,
...
...
@@ -551,6 +694,59 @@ static struct omap_hwmod_addr_space omap44xx_wd_timer3_dma_addrs[] = {
},
};
/* l4_per -> uart3 */
static
struct
omap_hwmod_ocp_if
omap44xx_l4_per__uart3
=
{
.
master
=
&
omap44xx_l4_per_hwmod
,
.
slave
=
&
omap44xx_uart3_hwmod
,
.
clk
=
"l4_div_ck"
,
.
addr
=
omap44xx_uart3_addrs
,
.
addr_cnt
=
ARRAY_SIZE
(
omap44xx_uart3_addrs
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* uart3 slave ports */
static
struct
omap_hwmod_ocp_if
*
omap44xx_uart3_slaves
[]
=
{
&
omap44xx_l4_per__uart3
,
};
static
struct
omap_hwmod
omap44xx_uart3_hwmod
=
{
.
name
=
"uart3"
,
.
class
=
&
omap44xx_uart_hwmod_class
,
.
flags
=
(
HWMOD_INIT_NO_IDLE
|
HWMOD_INIT_NO_RESET
),
.
mpu_irqs
=
omap44xx_uart3_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
omap44xx_uart3_irqs
),
.
sdma_reqs
=
omap44xx_uart3_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
omap44xx_uart3_sdma_reqs
),
.
main_clk
=
"uart3_fck"
,
.
prcm
=
{
.
omap4
=
{
.
clkctrl_reg
=
OMAP4430_CM_L4PER_UART3_CLKCTRL
,
},
},
.
slaves
=
omap44xx_uart3_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_uart3_slaves
),
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
};
/* uart4 */
static
struct
omap_hwmod
omap44xx_uart4_hwmod
;
static
struct
omap_hwmod_irq_info
omap44xx_uart4_irqs
[]
=
{
{
.
irq
=
70
+
OMAP44XX_IRQ_GIC_START
},
};
static
struct
omap_hwmod_dma_info
omap44xx_uart4_sdma_reqs
[]
=
{
{
.
name
=
"tx"
,
.
dma_req
=
54
+
OMAP44XX_DMA_REQ_START
},
{
.
name
=
"rx"
,
.
dma_req
=
55
+
OMAP44XX_DMA_REQ_START
},
};
static
struct
omap_hwmod_addr_space
omap44xx_uart4_addrs
[]
=
{
{
.
pa_start
=
0x4806e000
,
.
pa_end
=
0x4806e0ff
,
.
flags
=
ADDR_TYPE_RT
},
};
static
struct
omap_hwmod_ocp_if
omap44xx_l4_abe__wd_timer3_dma
=
{
.
master
=
&
omap44xx_l4_abe_hwmod
,
.
slave
=
&
omap44xx_wd_timer3_hwmod
,
...
...
@@ -582,6 +778,39 @@ static struct omap_hwmod omap44xx_wd_timer3_hwmod = {
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
};
/* l4_per -> uart4 */
static
struct
omap_hwmod_ocp_if
omap44xx_l4_per__uart4
=
{
.
master
=
&
omap44xx_l4_per_hwmod
,
.
slave
=
&
omap44xx_uart4_hwmod
,
.
clk
=
"l4_div_ck"
,
.
addr
=
omap44xx_uart4_addrs
,
.
addr_cnt
=
ARRAY_SIZE
(
omap44xx_uart4_addrs
),
.
user
=
OCP_USER_MPU
|
OCP_USER_SDMA
,
};
/* uart4 slave ports */
static
struct
omap_hwmod_ocp_if
*
omap44xx_uart4_slaves
[]
=
{
&
omap44xx_l4_per__uart4
,
};
static
struct
omap_hwmod
omap44xx_uart4_hwmod
=
{
.
name
=
"uart4"
,
.
class
=
&
omap44xx_uart_hwmod_class
,
.
mpu_irqs
=
omap44xx_uart4_irqs
,
.
mpu_irqs_cnt
=
ARRAY_SIZE
(
omap44xx_uart4_irqs
),
.
sdma_reqs
=
omap44xx_uart4_sdma_reqs
,
.
sdma_reqs_cnt
=
ARRAY_SIZE
(
omap44xx_uart4_sdma_reqs
),
.
main_clk
=
"uart4_fck"
,
.
prcm
=
{
.
omap4
=
{
.
clkctrl_reg
=
OMAP4430_CM_L4PER_UART4_CLKCTRL
,
},
},
.
slaves
=
omap44xx_uart4_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_uart4_slaves
),
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
};
static
__initdata
struct
omap_hwmod
*
omap44xx_hwmods
[]
=
{
/* dmm class */
&
omap44xx_dmm_hwmod
,
...
...
@@ -605,6 +834,12 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
/* wd_timer class */
&
omap44xx_wd_timer2_hwmod
,
&
omap44xx_wd_timer3_hwmod
,
/* uart class */
&
omap44xx_uart1_hwmod
,
&
omap44xx_uart2_hwmod
,
&
omap44xx_uart3_hwmod
,
&
omap44xx_uart4_hwmod
,
NULL
,
};
...
...
arch/arm/mach-omap2/pm34xx.c
浏览文件 @
69758ab7
...
...
@@ -388,6 +388,7 @@ void omap_sram_idle(void)
/* PER */
if
(
per_next_state
<
PWRDM_POWER_ON
)
{
omap_uart_prepare_idle
(
2
);
omap_uart_prepare_idle
(
3
);
omap2_gpio_prepare_for_idle
(
per_next_state
);
if
(
per_next_state
==
PWRDM_POWER_OFF
)
omap3_per_save_context
();
...
...
@@ -459,6 +460,7 @@ void omap_sram_idle(void)
if
(
per_prev_state
==
PWRDM_POWER_OFF
)
omap3_per_restore_context
();
omap_uart_resume_idle
(
2
);
omap_uart_resume_idle
(
3
);
}
/* Disable IO-PAD and IO-CHAIN wakeup */
...
...
@@ -676,6 +678,14 @@ static void __init omap3_d2d_idle(void)
static
void
__init
prcm_setup_regs
(
void
)
{
u32
omap3630_auto_uart4_mask
=
cpu_is_omap3630
()
?
OMAP3630_AUTO_UART4_MASK
:
0
;
u32
omap3630_en_uart4_mask
=
cpu_is_omap3630
()
?
OMAP3630_EN_UART4_MASK
:
0
;
u32
omap3630_grpsel_uart4_mask
=
cpu_is_omap3630
()
?
OMAP3630_GRPSEL_UART4_MASK
:
0
;
/* XXX Reset all wkdeps. This should be done when initializing
* powerdomains */
prm_write_mod_reg
(
0
,
OMAP3430_IVA2_MOD
,
PM_WKDEP
);
...
...
@@ -762,6 +772,7 @@ static void __init prcm_setup_regs(void)
CM_AUTOIDLE
);
cm_write_mod_reg
(
omap3630_auto_uart4_mask
|
OMAP3430_AUTO_GPIO6_MASK
|
OMAP3430_AUTO_GPIO5_MASK
|
OMAP3430_AUTO_GPIO4_MASK
|
...
...
@@ -838,14 +849,16 @@ static void __init prcm_setup_regs(void)
OMAP3430_DSS_MOD
,
PM_WKEN
);
/* Enable wakeups in PER */
prm_write_mod_reg
(
OMAP3430_EN_GPIO2_MASK
|
OMAP3430_EN_GPIO3_MASK
|
prm_write_mod_reg
(
omap3630_en_uart4_mask
|
OMAP3430_EN_GPIO2_MASK
|
OMAP3430_EN_GPIO3_MASK
|
OMAP3430_EN_GPIO4_MASK
|
OMAP3430_EN_GPIO5_MASK
|
OMAP3430_EN_GPIO6_MASK
|
OMAP3430_EN_UART3_MASK
|
OMAP3430_EN_MCBSP2_MASK
|
OMAP3430_EN_MCBSP3_MASK
|
OMAP3430_EN_MCBSP4_MASK
,
OMAP3430_PER_MOD
,
PM_WKEN
);
/* and allow them to wake up MPU */
prm_write_mod_reg
(
OMAP3430_GRPSEL_GPIO2_MASK
|
prm_write_mod_reg
(
omap3630_grpsel_uart4_mask
|
OMAP3430_GRPSEL_GPIO2_MASK
|
OMAP3430_GRPSEL_GPIO3_MASK
|
OMAP3430_GRPSEL_GPIO4_MASK
|
OMAP3430_GRPSEL_GPIO5_MASK
|
...
...
arch/arm/mach-omap2/prcm-common.h
浏览文件 @
69758ab7
...
...
@@ -382,6 +382,9 @@
#define OMAP3430_EN_MPU_SHIFT 1
/* CM_FCLKEN_PER, CM_ICLKEN_PER, PM_WKEN_PER shared bits */
#define OMAP3630_EN_UART4_MASK (1 << 18)
#define OMAP3630_EN_UART4_SHIFT 18
#define OMAP3430_EN_GPIO6_MASK (1 << 17)
#define OMAP3430_EN_GPIO6_SHIFT 17
#define OMAP3430_EN_GPIO5_MASK (1 << 16)
...
...
@@ -422,6 +425,8 @@
#define OMAP3430_EN_MCBSP2_SHIFT 0
/* CM_IDLEST_PER, PM_WKST_PER shared bits */
#define OMAP3630_ST_UART4_SHIFT 18
#define OMAP3630_ST_UART4_MASK (1 << 18)
#define OMAP3430_ST_GPIO6_SHIFT 17
#define OMAP3430_ST_GPIO6_MASK (1 << 17)
#define OMAP3430_ST_GPIO5_SHIFT 16
...
...
arch/arm/mach-omap2/prm-regbits-34xx.h
浏览文件 @
69758ab7
...
...
@@ -122,6 +122,7 @@
#define OMAP3430_MEMRETSTATE_MASK (1 << 8)
/* PM_MPUGRPSEL_PER, PM_IVA2GRPSEL_PER shared bits */
#define OMAP3630_GRPSEL_UART4_MASK (1 << 18)
#define OMAP3430_GRPSEL_GPIO6_MASK (1 << 17)
#define OMAP3430_GRPSEL_GPIO5_MASK (1 << 16)
#define OMAP3430_GRPSEL_GPIO4_MASK (1 << 15)
...
...
arch/arm/mach-omap2/serial.c
浏览文件 @
69758ab7
此差异已折叠。
点击以展开。
arch/arm/plat-omap/common.c
浏览文件 @
69758ab7
...
...
@@ -257,7 +257,6 @@ static void __init __omap2_set_globals(struct omap_globals *omap2_globals)
omap2_set_globals_sdrc
(
omap2_globals
);
omap2_set_globals_control
(
omap2_globals
);
omap2_set_globals_prcm
(
omap2_globals
);
omap2_set_globals_uart
(
omap2_globals
);
}
#endif
...
...
@@ -272,9 +271,6 @@ static struct omap_globals omap242x_globals = {
.
ctrl
=
OMAP2420_CTRL_BASE
,
.
prm
=
OMAP2420_PRM_BASE
,
.
cm
=
OMAP2420_CM_BASE
,
.
uart1_phys
=
OMAP2_UART1_BASE
,
.
uart2_phys
=
OMAP2_UART2_BASE
,
.
uart3_phys
=
OMAP2_UART3_BASE
,
};
void
__init
omap2_set_globals_242x
(
void
)
...
...
@@ -293,9 +289,6 @@ static struct omap_globals omap243x_globals = {
.
ctrl
=
OMAP243X_CTRL_BASE
,
.
prm
=
OMAP2430_PRM_BASE
,
.
cm
=
OMAP2430_CM_BASE
,
.
uart1_phys
=
OMAP2_UART1_BASE
,
.
uart2_phys
=
OMAP2_UART2_BASE
,
.
uart3_phys
=
OMAP2_UART3_BASE
,
};
void
__init
omap2_set_globals_243x
(
void
)
...
...
@@ -314,10 +307,6 @@ static struct omap_globals omap3_globals = {
.
ctrl
=
OMAP343X_CTRL_BASE
,
.
prm
=
OMAP3430_PRM_BASE
,
.
cm
=
OMAP3430_CM_BASE
,
.
uart1_phys
=
OMAP3_UART1_BASE
,
.
uart2_phys
=
OMAP3_UART2_BASE
,
.
uart3_phys
=
OMAP3_UART3_BASE
,
.
uart4_phys
=
OMAP3_UART4_BASE
,
/* Only on 3630 */
};
void
__init
omap2_set_globals_3xxx
(
void
)
...
...
@@ -341,10 +330,6 @@ static struct omap_globals omap4_globals = {
.
prm
=
OMAP4430_PRM_BASE
,
.
cm
=
OMAP4430_CM_BASE
,
.
cm2
=
OMAP4430_CM2_BASE
,
.
uart1_phys
=
OMAP4_UART1_BASE
,
.
uart2_phys
=
OMAP4_UART2_BASE
,
.
uart3_phys
=
OMAP4_UART3_BASE
,
.
uart4_phys
=
OMAP4_UART4_BASE
,
};
void
__init
omap2_set_globals_443x
(
void
)
...
...
@@ -352,7 +337,6 @@ void __init omap2_set_globals_443x(void)
omap2_set_globals_tap
(
&
omap4_globals
);
omap2_set_globals_control
(
&
omap4_globals
);
omap2_set_globals_prcm
(
&
omap4_globals
);
omap2_set_globals_uart
(
&
omap4_globals
);
}
#endif
arch/arm/plat-omap/include/plat/common.h
浏览文件 @
69758ab7
...
...
@@ -67,7 +67,6 @@ void omap2_set_globals_tap(struct omap_globals *);
void
omap2_set_globals_sdrc
(
struct
omap_globals
*
);
void
omap2_set_globals_control
(
struct
omap_globals
*
);
void
omap2_set_globals_prcm
(
struct
omap_globals
*
);
void
omap2_set_globals_uart
(
struct
omap_globals
*
);
void
omap3_map_io
(
void
);
...
...
arch/arm/plat-omap/include/plat/dma.h
浏览文件 @
69758ab7
...
...
@@ -319,6 +319,8 @@
#define OMAP34XX_DMA_USIM_TX 79
/* S_DMA_78 */
#define OMAP34XX_DMA_USIM_RX 80
/* S_DMA_79 */
#define OMAP36XX_DMA_UART4_TX 81
/* S_DMA_80 */
#define OMAP36XX_DMA_UART4_RX 82
/* S_DMA_81 */
/*----------------------------------------------------------------------------*/
#define OMAP1_DMA_TOUT_IRQ (1 << 0)
...
...
arch/arm/plat-omap/include/plat/irqs.h
浏览文件 @
69758ab7
...
...
@@ -345,6 +345,8 @@
#define INT_34XX_MMC3_IRQ 94
#define INT_34XX_GPT12_IRQ 95
#define INT_36XX_UART4_IRQ 80
#define INT_35XX_HECC0_IRQ 24
#define INT_35XX_HECC1_IRQ 28
#define INT_35XX_EMAC_C0_RXTHRESH_IRQ 67
...
...
arch/arm/plat-omap/include/plat/omap-serial.h
0 → 100644
浏览文件 @
69758ab7
/*
* Driver for OMAP-UART controller.
* Based on drivers/serial/8250.c
*
* Copyright (C) 2010 Texas Instruments.
*
* Authors:
* Govindraj R <govindraj.raja@ti.com>
* Thara Gopinath <thara@ti.com>
*
* 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 __OMAP_SERIAL_H__
#define __OMAP_SERIAL_H__
#include <linux/serial_core.h>
#include <linux/platform_device.h>
#include <plat/control.h>
#include <plat/mux.h>
#define DRIVER_NAME "omap-hsuart"
/*
* Use tty device name as ttyO, [O -> OMAP]
* in bootargs we specify as console=ttyO0 if uart1
* is used as console uart.
*/
#define OMAP_SERIAL_NAME "ttyO"
#define OMAP_MDR1_DISABLE 0x07
#define OMAP_MDR1_MODE13X 0x03
#define OMAP_MDR1_MODE16X 0x00
#define OMAP_MODE13X_SPEED 230400
/*
* LCR = 0XBF: Switch to Configuration Mode B.
* In configuration mode b allow access
* to EFR,DLL,DLH.
* Reference OMAP TRM Chapter 17
* Section: 1.4.3 Mode Selection
*/
#define OMAP_UART_LCR_CONF_MDB 0XBF
/* WER = 0x7F
* Enable module level wakeup in WER reg
*/
#define OMAP_UART_WER_MOD_WKUP 0X7F
/* Enable XON/XOFF flow control on output */
#define OMAP_UART_SW_TX 0x04
/* Enable XON/XOFF flow control on input */
#define OMAP_UART_SW_RX 0x04
#define OMAP_UART_SYSC_RESET 0X07
#define OMAP_UART_TCR_TRIG 0X0F
#define OMAP_UART_SW_CLR 0XF0
#define OMAP_UART_FIFO_CLR 0X06
#define OMAP_UART_DMA_CH_FREE -1
#define RX_TIMEOUT (3 * HZ)
#define OMAP_MAX_HSUART_PORTS 4
#define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA
struct
omap_uart_port_info
{
bool
dma_enabled
;
/* To specify DMA Mode */
unsigned
int
uartclk
;
/* UART clock rate */
void
__iomem
*
membase
;
/* ioremap cookie or NULL */
resource_size_t
mapbase
;
/* resource base */
unsigned
long
irqflags
;
/* request_irq flags */
upf_t
flags
;
/* UPF_* flags */
};
struct
uart_omap_dma
{
u8
uart_dma_tx
;
u8
uart_dma_rx
;
int
rx_dma_channel
;
int
tx_dma_channel
;
dma_addr_t
rx_buf_dma_phys
;
dma_addr_t
tx_buf_dma_phys
;
unsigned
int
uart_base
;
/*
* Buffer for rx dma.It is not required for tx because the buffer
* comes from port structure.
*/
unsigned
char
*
rx_buf
;
unsigned
int
prev_rx_dma_pos
;
int
tx_buf_size
;
int
tx_dma_used
;
int
rx_dma_used
;
spinlock_t
tx_lock
;
spinlock_t
rx_lock
;
/* timer to poll activity on rx dma */
struct
timer_list
rx_timer
;
int
rx_buf_size
;
int
rx_timeout
;
};
struct
uart_omap_port
{
struct
uart_port
port
;
struct
uart_omap_dma
uart_dma
;
struct
platform_device
*
pdev
;
unsigned
char
ier
;
unsigned
char
lcr
;
unsigned
char
mcr
;
unsigned
char
fcr
;
unsigned
char
efr
;
int
use_dma
;
/*
* Some bits in registers are cleared on a read, so they must
* be saved whenever the register is read but the bits will not
* be immediately processed.
*/
unsigned
int
lsr_break_flag
;
unsigned
char
msr_saved_flags
;
char
name
[
20
];
unsigned
long
port_activity
;
};
#endif
/* __OMAP_SERIAL_H__ */
drivers/serial/Kconfig
浏览文件 @
69758ab7
...
...
@@ -1416,6 +1416,33 @@ config SERIAL_OF_PLATFORM
Currently, only 8250 compatible ports are supported, but
others can easily be added.
config SERIAL_OMAP
tristate "OMAP serial port support"
depends on ARCH_OMAP2 || ARCH_OMAP3 || ARCH_OMAP4
select SERIAL_CORE
help
If you have a machine based on an Texas Instruments OMAP CPU you
can enable its onboard serial ports by enabling this option.
By enabling this option you take advantage of dma feature available
with the omap-serial driver. DMA support can be enabled from platform
data.
config SERIAL_OMAP_CONSOLE
bool "Console on OMAP serial port"
depends on SERIAL_OMAP
select SERIAL_CORE_CONSOLE
help
Select this option if you would like to use omap serial port as
console.
Even if you say Y here, the currently visible virtual console
(/dev/tty0) will still be used as the system console by default, but
you can alter that using a kernel command line option such as
"console=ttyOx". (Try "man bootparam" or see the documentation of
your boot loader about how to pass options to the kernel at
boot time.)
config SERIAL_OF_PLATFORM_NWPSERIAL
tristate "NWP serial port driver"
depends on PPC_OF && PPC_DCR
...
...
drivers/serial/Makefile
浏览文件 @
69758ab7
...
...
@@ -88,3 +88,4 @@ obj-$(CONFIG_SERIAL_ALTERA_JTAGUART) += altera_jtaguart.o
obj-$(CONFIG_SERIAL_ALTERA_UART)
+=
altera_uart.o
obj-$(CONFIG_SERIAL_MRST_MAX3110)
+=
mrst_max3110.o
obj-$(CONFIG_SERIAL_MFD_HSU)
+=
mfd.o
obj-$(CONFIG_SERIAL_OMAP)
+=
omap-serial.o
drivers/serial/omap-serial.c
0 → 100644
浏览文件 @
69758ab7
此差异已折叠。
点击以展开。
include/linux/serial_core.h
浏览文件 @
69758ab7
...
...
@@ -196,6 +196,9 @@
/* High Speed UART for Medfield */
#define PORT_MFD 95
/* TI OMAP-UART */
#define PORT_OMAP 96
#ifdef __KERNEL__
#include <linux/compiler.h>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录