Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
3c814be9
K
Kernel
项目概览
openeuler
/
Kernel
接近 2 年 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
3c814be9
编写于
6月 09, 2014
作者:
V
Vinod Koul
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'topic/dw' into for-linus
上级
877d8425
1222934e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
40 addition
and
24 deletion
+40
-24
drivers/dma/dw/core.c
drivers/dma/dw/core.c
+39
-19
drivers/dma/sa11x0-dma.c
drivers/dma/sa11x0-dma.c
+0
-4
include/linux/omap-dma.h
include/linux/omap-dma.h
+1
-1
未找到文件。
drivers/dma/dw/core.c
浏览文件 @
3c814be9
...
...
@@ -1493,6 +1493,13 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
dw
->
regs
=
chip
->
regs
;
chip
->
dw
=
dw
;
dw
->
clk
=
devm_clk_get
(
chip
->
dev
,
"hclk"
);
if
(
IS_ERR
(
dw
->
clk
))
return
PTR_ERR
(
dw
->
clk
);
err
=
clk_prepare_enable
(
dw
->
clk
);
if
(
err
)
return
err
;
dw_params
=
dma_read_byaddr
(
chip
->
regs
,
DW_PARAMS
);
autocfg
=
dw_params
>>
DW_PARAMS_EN
&
0x1
;
...
...
@@ -1500,15 +1507,19 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
if
(
!
pdata
&&
autocfg
)
{
pdata
=
devm_kzalloc
(
chip
->
dev
,
sizeof
(
*
pdata
),
GFP_KERNEL
);
if
(
!
pdata
)
return
-
ENOMEM
;
if
(
!
pdata
)
{
err
=
-
ENOMEM
;
goto
err_pdata
;
}
/* Fill platform data with the default values */
pdata
->
is_private
=
true
;
pdata
->
chan_allocation_order
=
CHAN_ALLOCATION_ASCENDING
;
pdata
->
chan_priority
=
CHAN_PRIORITY_ASCENDING
;
}
else
if
(
!
pdata
||
pdata
->
nr_channels
>
DW_DMA_MAX_NR_CHANNELS
)
return
-
EINVAL
;
}
else
if
(
!
pdata
||
pdata
->
nr_channels
>
DW_DMA_MAX_NR_CHANNELS
)
{
err
=
-
EINVAL
;
goto
err_pdata
;
}
if
(
autocfg
)
nr_channels
=
(
dw_params
>>
DW_PARAMS_NR_CHAN
&
0x7
)
+
1
;
...
...
@@ -1517,13 +1528,10 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
dw
->
chan
=
devm_kcalloc
(
chip
->
dev
,
nr_channels
,
sizeof
(
*
dw
->
chan
),
GFP_KERNEL
);
if
(
!
dw
->
chan
)
return
-
ENOMEM
;
dw
->
clk
=
devm_clk_get
(
chip
->
dev
,
"hclk"
);
if
(
IS_ERR
(
dw
->
clk
))
return
PTR_ERR
(
dw
->
clk
);
clk_prepare_enable
(
dw
->
clk
);
if
(
!
dw
->
chan
)
{
err
=
-
ENOMEM
;
goto
err_pdata
;
}
/* Get hardware configuration parameters */
if
(
autocfg
)
{
...
...
@@ -1548,21 +1556,22 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
/* Disable BLOCK interrupts as well */
channel_clear_bit
(
dw
,
MASK
.
BLOCK
,
dw
->
all_chan_mask
);
err
=
devm_request_irq
(
chip
->
dev
,
chip
->
irq
,
dw_dma_interrupt
,
IRQF_SHARED
,
"dw_dmac"
,
dw
);
if
(
err
)
return
err
;
/* Create a pool of consistent memory blocks for hardware descriptors */
dw
->
desc_pool
=
dmam_pool_create
(
"dw_dmac_desc_pool"
,
chip
->
dev
,
sizeof
(
struct
dw_desc
),
4
,
0
);
if
(
!
dw
->
desc_pool
)
{
dev_err
(
chip
->
dev
,
"No memory for descriptors dma pool
\n
"
);
return
-
ENOMEM
;
err
=
-
ENOMEM
;
goto
err_pdata
;
}
tasklet_init
(
&
dw
->
tasklet
,
dw_dma_tasklet
,
(
unsigned
long
)
dw
);
err
=
request_irq
(
chip
->
irq
,
dw_dma_interrupt
,
IRQF_SHARED
,
"dw_dmac"
,
dw
);
if
(
err
)
goto
err_pdata
;
INIT_LIST_HEAD
(
&
dw
->
dma
.
channels
);
for
(
i
=
0
;
i
<
nr_channels
;
i
++
)
{
struct
dw_dma_chan
*
dwc
=
&
dw
->
chan
[
i
];
...
...
@@ -1650,12 +1659,20 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
dma_writel
(
dw
,
CFG
,
DW_CFG_DMA_EN
);
err
=
dma_async_device_register
(
&
dw
->
dma
);
if
(
err
)
goto
err_dma_register
;
dev_info
(
chip
->
dev
,
"DesignWare DMA Controller, %d channels
\n
"
,
nr_channels
);
dma_async_device_register
(
&
dw
->
dma
);
return
0
;
err_dma_register:
free_irq
(
chip
->
irq
,
dw
);
err_pdata:
clk_disable_unprepare
(
dw
->
clk
);
return
err
;
}
EXPORT_SYMBOL_GPL
(
dw_dma_probe
);
...
...
@@ -1667,6 +1684,7 @@ int dw_dma_remove(struct dw_dma_chip *chip)
dw_dma_off
(
dw
);
dma_async_device_unregister
(
&
dw
->
dma
);
free_irq
(
chip
->
irq
,
dw
);
tasklet_kill
(
&
dw
->
tasklet
);
list_for_each_entry_safe
(
dwc
,
_dwc
,
&
dw
->
dma
.
channels
,
...
...
@@ -1675,6 +1693,8 @@ int dw_dma_remove(struct dw_dma_chip *chip)
channel_clear_bit
(
dw
,
CH_EN
,
dwc
->
mask
);
}
clk_disable_unprepare
(
dw
->
clk
);
return
0
;
}
EXPORT_SYMBOL_GPL
(
dw_dma_remove
);
...
...
drivers/dma/sa11x0-dma.c
浏览文件 @
3c814be9
...
...
@@ -113,11 +113,9 @@ struct sa11x0_dma_phy {
struct
sa11x0_dma_desc
*
txd_load
;
unsigned
sg_done
;
struct
sa11x0_dma_desc
*
txd_done
;
#ifdef CONFIG_PM_SLEEP
u32
dbs
[
2
];
u32
dbt
[
2
];
u32
dcsr
;
#endif
};
struct
sa11x0_dma_dev
{
...
...
@@ -984,7 +982,6 @@ static int sa11x0_dma_remove(struct platform_device *pdev)
return
0
;
}
#ifdef CONFIG_PM_SLEEP
static
int
sa11x0_dma_suspend
(
struct
device
*
dev
)
{
struct
sa11x0_dma_dev
*
d
=
dev_get_drvdata
(
dev
);
...
...
@@ -1054,7 +1051,6 @@ static int sa11x0_dma_resume(struct device *dev)
return
0
;
}
#endif
static
const
struct
dev_pm_ops
sa11x0_dma_pm_ops
=
{
.
suspend_noirq
=
sa11x0_dma_suspend
,
...
...
include/linux/omap-dma.h
浏览文件 @
3c814be9
...
...
@@ -10,7 +10,7 @@
struct
dma_chan
;
#if defined(CONFIG_DMA_OMAP) ||
defined(CONFIG_DMA_OMAP_MODULE
)
#if defined(CONFIG_DMA_OMAP) ||
(defined(CONFIG_DMA_OMAP_MODULE) && defined(MODULE)
)
bool
omap_dma_filter_fn
(
struct
dma_chan
*
,
void
*
);
#else
static
inline
bool
omap_dma_filter_fn
(
struct
dma_chan
*
c
,
void
*
d
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录