Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
2fb166e5
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
161
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看板
提交
2fb166e5
编写于
7月 16, 2018
作者:
U
Ulf Hansson
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'next_pxa_dma' into next
上级
9d3cce1e
399c4129
变更
15
隐藏空白更改
内联
并排
Showing
15 changed file
with
160 addition
and
272 deletion
+160
-272
arch/arm/mach-pxa/devices.c
arch/arm/mach-pxa/devices.c
+3
-145
arch/arm/mach-pxa/devices.h
arch/arm/mach-pxa/devices.h
+5
-1
arch/arm/mach-pxa/pxa25x.c
arch/arm/mach-pxa/pxa25x.c
+37
-1
arch/arm/mach-pxa/pxa27x.c
arch/arm/mach-pxa/pxa27x.c
+38
-1
arch/arm/mach-pxa/pxa3xx.c
arch/arm/mach-pxa/pxa3xx.c
+40
-1
arch/arm/plat-pxa/ssp.c
arch/arm/plat-pxa/ssp.c
+0
-47
drivers/ata/pata_pxa.c
drivers/ata/pata_pxa.c
+1
-9
drivers/dma/pxa_dma.c
drivers/dma/pxa_dma.c
+14
-1
drivers/media/platform/pxa_camera.c
drivers/media/platform/pxa_camera.c
+3
-19
drivers/mmc/host/pxamci.c
drivers/mmc/host/pxamci.c
+3
-26
drivers/mtd/nand/raw/marvell_nand.c
drivers/mtd/nand/raw/marvell_nand.c
+1
-16
include/linux/dma/pxa-dma.h
include/linux/dma/pxa-dma.h
+9
-0
include/linux/platform_data/mmp_dma.h
include/linux/platform_data/mmp_dma.h
+4
-0
include/linux/pxa2xx_ssp.h
include/linux/pxa2xx_ssp.h
+0
-2
sound/soc/pxa/pxa-ssp.c
sound/soc/pxa/pxa-ssp.c
+2
-3
未找到文件。
arch/arm/mach-pxa/devices.c
浏览文件 @
2fb166e5
...
...
@@ -4,6 +4,7 @@
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <linux/dmaengine.h>
#include <linux/spi/pxa2xx_spi.h>
#include <linux/platform_data/i2c-pxa.h>
...
...
@@ -59,16 +60,6 @@ static struct resource pxamci_resources[] = {
.
end
=
IRQ_MMC
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
.
start
=
21
,
.
end
=
21
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
.
start
=
22
,
.
end
=
22
,
.
flags
=
IORESOURCE_DMA
,
},
};
static
u64
pxamci_dmamask
=
0xffffffffUL
;
...
...
@@ -406,16 +397,6 @@ static struct resource pxa_ir_resources[] = {
.
end
=
0x40700023
,
.
flags
=
IORESOURCE_MEM
,
},
[
5
]
=
{
.
start
=
17
,
.
end
=
17
,
.
flags
=
IORESOURCE_DMA
,
},
[
6
]
=
{
.
start
=
18
,
.
end
=
18
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
pxa_device_ficp
=
{
...
...
@@ -544,18 +525,6 @@ static struct resource pxa25x_resource_ssp[] = {
.
end
=
IRQ_SSP
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
/* DRCMR for RX */
.
start
=
13
,
.
end
=
13
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
/* DRCMR for TX */
.
start
=
14
,
.
end
=
14
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
pxa25x_device_ssp
=
{
...
...
@@ -582,18 +551,6 @@ static struct resource pxa25x_resource_nssp[] = {
.
end
=
IRQ_NSSP
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
/* DRCMR for RX */
.
start
=
15
,
.
end
=
15
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
/* DRCMR for TX */
.
start
=
16
,
.
end
=
16
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
pxa25x_device_nssp
=
{
...
...
@@ -620,18 +577,6 @@ static struct resource pxa25x_resource_assp[] = {
.
end
=
IRQ_ASSP
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
/* DRCMR for RX */
.
start
=
23
,
.
end
=
23
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
/* DRCMR for TX */
.
start
=
24
,
.
end
=
24
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
pxa25x_device_assp
=
{
...
...
@@ -750,18 +695,6 @@ static struct resource pxa27x_resource_ssp1[] = {
.
end
=
IRQ_SSP
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
/* DRCMR for RX */
.
start
=
13
,
.
end
=
13
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
/* DRCMR for TX */
.
start
=
14
,
.
end
=
14
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
pxa27x_device_ssp1
=
{
...
...
@@ -788,18 +721,6 @@ static struct resource pxa27x_resource_ssp2[] = {
.
end
=
IRQ_SSP2
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
/* DRCMR for RX */
.
start
=
15
,
.
end
=
15
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
/* DRCMR for TX */
.
start
=
16
,
.
end
=
16
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
pxa27x_device_ssp2
=
{
...
...
@@ -826,18 +747,6 @@ static struct resource pxa27x_resource_ssp3[] = {
.
end
=
IRQ_SSP3
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
/* DRCMR for RX */
.
start
=
66
,
.
end
=
66
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
/* DRCMR for TX */
.
start
=
67
,
.
end
=
67
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
pxa27x_device_ssp3
=
{
...
...
@@ -894,16 +803,6 @@ static struct resource pxa3xx_resources_mci2[] = {
.
end
=
IRQ_MMC2
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
.
start
=
93
,
.
end
=
93
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
.
start
=
94
,
.
end
=
94
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
pxa3xx_device_mci2
=
{
...
...
@@ -933,16 +832,6 @@ static struct resource pxa3xx_resources_mci3[] = {
.
end
=
IRQ_MMC3
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
.
start
=
100
,
.
end
=
100
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
.
start
=
101
,
.
end
=
101
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
pxa3xx_device_mci3
=
{
...
...
@@ -1020,18 +909,6 @@ static struct resource pxa3xx_resources_nand[] = {
.
end
=
IRQ_NAND
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
/* DRCMR for Data DMA */
.
start
=
97
,
.
end
=
97
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
/* DRCMR for Command DMA */
.
start
=
99
,
.
end
=
99
,
.
flags
=
IORESOURCE_DMA
,
},
};
static
u64
pxa3xx_nand_dma_mask
=
DMA_BIT_MASK
(
32
);
...
...
@@ -1065,18 +942,6 @@ static struct resource pxa3xx_resource_ssp4[] = {
.
end
=
IRQ_SSP4
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
/* DRCMR for RX */
.
start
=
2
,
.
end
=
2
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
/* DRCMR for TX */
.
start
=
3
,
.
end
=
3
,
.
flags
=
IORESOURCE_DMA
,
},
};
/*
...
...
@@ -1202,11 +1067,6 @@ void __init pxa2xx_set_spi_info(unsigned id, struct pxa2xx_spi_master *info)
platform_device_add
(
pd
);
}
static
struct
mmp_dma_platdata
pxa_dma_pdata
=
{
.
dma_channels
=
0
,
.
nb_requestors
=
0
,
};
static
struct
resource
pxa_dma_resource
[]
=
{
[
0
]
=
{
.
start
=
0x40000000
,
...
...
@@ -1233,9 +1093,7 @@ static struct platform_device pxa2xx_pxa_dma = {
.
resource
=
pxa_dma_resource
,
};
void
__init
pxa2xx_set_dmac_info
(
int
nb_channels
,
int
nb_requestors
)
void
__init
pxa2xx_set_dmac_info
(
struct
mmp_dma_platdata
*
dma_pdata
)
{
pxa_dma_pdata
.
dma_channels
=
nb_channels
;
pxa_dma_pdata
.
nb_requestors
=
nb_requestors
;
pxa_register_device
(
&
pxa2xx_pxa_dma
,
&
pxa_dma_pdata
);
pxa_register_device
(
&
pxa2xx_pxa_dma
,
dma_pdata
);
}
arch/arm/mach-pxa/devices.h
浏览文件 @
2fb166e5
/* SPDX-License-Identifier: GPL-2.0 */
#define PDMA_FILTER_PARAM(_prio, _requestor) (&(struct pxad_param) { \
.prio = PXAD_PRIO_##_prio, .drcmr = _requestor })
struct
mmp_dma_platdata
;
extern
struct
platform_device
pxa_device_pmu
;
extern
struct
platform_device
pxa_device_mci
;
extern
struct
platform_device
pxa3xx_device_mci2
;
...
...
@@ -55,7 +59,7 @@ extern struct platform_device pxa3xx_device_gpio;
extern
struct
platform_device
pxa93x_device_gpio
;
void
__init
pxa_register_device
(
struct
platform_device
*
dev
,
void
*
data
);
void
__init
pxa2xx_set_dmac_info
(
int
nb_channels
,
int
nb_requestors
);
void
__init
pxa2xx_set_dmac_info
(
struct
mmp_dma_platdata
*
dma_pdata
);
struct
i2c_pxa_platform_data
;
extern
void
pxa_set_i2c_info
(
struct
i2c_pxa_platform_data
*
info
);
...
...
arch/arm/mach-pxa/pxa25x.c
浏览文件 @
2fb166e5
...
...
@@ -16,6 +16,8 @@
* initialization stuff for PXA machines which can be overridden later if
* need be.
*/
#include <linux/dmaengine.h>
#include <linux/dma/pxa-dma.h>
#include <linux/gpio.h>
#include <linux/gpio-pxa.h>
#include <linux/module.h>
...
...
@@ -26,6 +28,7 @@
#include <linux/syscore_ops.h>
#include <linux/irq.h>
#include <linux/irqchip.h>
#include <linux/platform_data/mmp_dma.h>
#include <asm/mach/map.h>
#include <asm/suspend.h>
...
...
@@ -201,6 +204,39 @@ static struct platform_device *pxa25x_devices[] __initdata = {
&
pxa_device_asoc_platform
,
};
static
const
struct
dma_slave_map
pxa25x_slave_map
[]
=
{
/* PXA25x, PXA27x and PXA3xx common entries */
{
"pxa2xx-ac97"
,
"pcm_pcm_mic_mono"
,
PDMA_FILTER_PARAM
(
LOWEST
,
8
)
},
{
"pxa2xx-ac97"
,
"pcm_pcm_aux_mono_in"
,
PDMA_FILTER_PARAM
(
LOWEST
,
9
)
},
{
"pxa2xx-ac97"
,
"pcm_pcm_aux_mono_out"
,
PDMA_FILTER_PARAM
(
LOWEST
,
10
)
},
{
"pxa2xx-ac97"
,
"pcm_pcm_stereo_in"
,
PDMA_FILTER_PARAM
(
LOWEST
,
11
)
},
{
"pxa2xx-ac97"
,
"pcm_pcm_stereo_out"
,
PDMA_FILTER_PARAM
(
LOWEST
,
12
)
},
{
"pxa-ssp-dai.1"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
13
)
},
{
"pxa-ssp-dai.1"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
14
)
},
{
"pxa-ssp-dai.2"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
15
)
},
{
"pxa-ssp-dai.2"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
16
)
},
{
"pxa2xx-ir"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
17
)
},
{
"pxa2xx-ir"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
18
)
},
{
"pxa2xx-mci.0"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
21
)
},
{
"pxa2xx-mci.0"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
22
)
},
/* PXA25x specific map */
{
"pxa25x-ssp.0"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
13
)
},
{
"pxa25x-ssp.0"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
14
)
},
{
"pxa25x-nssp.1"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
15
)
},
{
"pxa25x-nssp.1"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
16
)
},
{
"pxa25x-nssp.2"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
23
)
},
{
"pxa25x-nssp.2"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
24
)
},
};
static
struct
mmp_dma_platdata
pxa25x_dma_pdata
=
{
.
dma_channels
=
16
,
.
nb_requestors
=
40
,
.
slave_map
=
pxa25x_slave_map
,
.
slave_map_cnt
=
ARRAY_SIZE
(
pxa25x_slave_map
),
};
static
int
__init
pxa25x_init
(
void
)
{
int
ret
=
0
;
...
...
@@ -215,7 +251,7 @@ static int __init pxa25x_init(void)
register_syscore_ops
(
&
pxa2xx_mfp_syscore_ops
);
if
(
!
of_have_populated_dt
())
{
pxa2xx_set_dmac_info
(
16
,
40
);
pxa2xx_set_dmac_info
(
&
pxa25x_dma_pdata
);
pxa_register_device
(
&
pxa25x_device_gpio
,
&
pxa25x_gpio_info
);
ret
=
platform_add_devices
(
pxa25x_devices
,
ARRAY_SIZE
(
pxa25x_devices
));
...
...
arch/arm/mach-pxa/pxa27x.c
浏览文件 @
2fb166e5
...
...
@@ -11,6 +11,8 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/dmaengine.h>
#include <linux/dma/pxa-dma.h>
#include <linux/gpio.h>
#include <linux/gpio-pxa.h>
#include <linux/module.h>
...
...
@@ -23,6 +25,7 @@
#include <linux/io.h>
#include <linux/irq.h>
#include <linux/platform_data/i2c-pxa.h>
#include <linux/platform_data/mmp_dma.h>
#include <asm/mach/map.h>
#include <mach/hardware.h>
...
...
@@ -297,6 +300,40 @@ static struct platform_device *devices[] __initdata = {
&
pxa27x_device_pwm1
,
};
static
const
struct
dma_slave_map
pxa27x_slave_map
[]
=
{
/* PXA25x, PXA27x and PXA3xx common entries */
{
"pxa2xx-ac97"
,
"pcm_pcm_mic_mono"
,
PDMA_FILTER_PARAM
(
LOWEST
,
8
)
},
{
"pxa2xx-ac97"
,
"pcm_pcm_aux_mono_in"
,
PDMA_FILTER_PARAM
(
LOWEST
,
9
)
},
{
"pxa2xx-ac97"
,
"pcm_pcm_aux_mono_out"
,
PDMA_FILTER_PARAM
(
LOWEST
,
10
)
},
{
"pxa2xx-ac97"
,
"pcm_pcm_stereo_in"
,
PDMA_FILTER_PARAM
(
LOWEST
,
11
)
},
{
"pxa2xx-ac97"
,
"pcm_pcm_stereo_out"
,
PDMA_FILTER_PARAM
(
LOWEST
,
12
)
},
{
"pxa-ssp-dai.0"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
13
)
},
{
"pxa-ssp-dai.0"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
14
)
},
{
"pxa-ssp-dai.1"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
15
)
},
{
"pxa-ssp-dai.1"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
16
)
},
{
"pxa2xx-ir"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
17
)
},
{
"pxa2xx-ir"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
18
)
},
{
"pxa2xx-mci.0"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
21
)
},
{
"pxa2xx-mci.0"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
22
)
},
{
"pxa-ssp-dai.2"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
66
)
},
{
"pxa-ssp-dai.2"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
67
)
},
/* PXA27x specific map */
{
"pxa2xx-i2s"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
2
)
},
{
"pxa2xx-i2s"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
3
)
},
{
"pxa27x-camera.0"
,
"CI_Y"
,
PDMA_FILTER_PARAM
(
HIGHEST
,
68
)
},
{
"pxa27x-camera.0"
,
"CI_U"
,
PDMA_FILTER_PARAM
(
HIGHEST
,
69
)
},
{
"pxa27x-camera.0"
,
"CI_V"
,
PDMA_FILTER_PARAM
(
HIGHEST
,
70
)
},
};
static
struct
mmp_dma_platdata
pxa27x_dma_pdata
=
{
.
dma_channels
=
32
,
.
nb_requestors
=
75
,
.
slave_map
=
pxa27x_slave_map
,
.
slave_map_cnt
=
ARRAY_SIZE
(
pxa27x_slave_map
),
};
static
int
__init
pxa27x_init
(
void
)
{
int
ret
=
0
;
...
...
@@ -313,7 +350,7 @@ static int __init pxa27x_init(void)
if
(
!
of_have_populated_dt
())
{
pxa_register_device
(
&
pxa27x_device_gpio
,
&
pxa27x_gpio_info
);
pxa2xx_set_dmac_info
(
32
,
75
);
pxa2xx_set_dmac_info
(
&
pxa27x_dma_pdata
);
ret
=
platform_add_devices
(
devices
,
ARRAY_SIZE
(
devices
));
}
...
...
arch/arm/mach-pxa/pxa3xx.c
浏览文件 @
2fb166e5
...
...
@@ -12,6 +12,8 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/dmaengine.h>
#include <linux/dma/pxa-dma.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
...
...
@@ -24,6 +26,7 @@
#include <linux/of.h>
#include <linux/syscore_ops.h>
#include <linux/platform_data/i2c-pxa.h>
#include <linux/platform_data/mmp_dma.h>
#include <asm/mach/map.h>
#include <asm/suspend.h>
...
...
@@ -421,6 +424,42 @@ static struct platform_device *devices[] __initdata = {
&
pxa27x_device_pwm1
,
};
static
const
struct
dma_slave_map
pxa3xx_slave_map
[]
=
{
/* PXA25x, PXA27x and PXA3xx common entries */
{
"pxa2xx-ac97"
,
"pcm_pcm_mic_mono"
,
PDMA_FILTER_PARAM
(
LOWEST
,
8
)
},
{
"pxa2xx-ac97"
,
"pcm_pcm_aux_mono_in"
,
PDMA_FILTER_PARAM
(
LOWEST
,
9
)
},
{
"pxa2xx-ac97"
,
"pcm_pcm_aux_mono_out"
,
PDMA_FILTER_PARAM
(
LOWEST
,
10
)
},
{
"pxa2xx-ac97"
,
"pcm_pcm_stereo_in"
,
PDMA_FILTER_PARAM
(
LOWEST
,
11
)
},
{
"pxa2xx-ac97"
,
"pcm_pcm_stereo_out"
,
PDMA_FILTER_PARAM
(
LOWEST
,
12
)
},
{
"pxa-ssp-dai.0"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
13
)
},
{
"pxa-ssp-dai.0"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
14
)
},
{
"pxa-ssp-dai.1"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
15
)
},
{
"pxa-ssp-dai.1"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
16
)
},
{
"pxa2xx-ir"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
17
)
},
{
"pxa2xx-ir"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
18
)
},
{
"pxa2xx-mci.0"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
21
)
},
{
"pxa2xx-mci.0"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
22
)
},
{
"pxa-ssp-dai.2"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
66
)
},
{
"pxa-ssp-dai.2"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
67
)
},
/* PXA3xx specific map */
{
"pxa-ssp-dai.3"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
2
)
},
{
"pxa-ssp-dai.3"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
3
)
},
{
"pxa2xx-mci.1"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
93
)
},
{
"pxa2xx-mci.1"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
94
)
},
{
"pxa3xx-nand"
,
"data"
,
PDMA_FILTER_PARAM
(
LOWEST
,
97
)
},
{
"pxa2xx-mci.2"
,
"rx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
100
)
},
{
"pxa2xx-mci.2"
,
"tx"
,
PDMA_FILTER_PARAM
(
LOWEST
,
101
)
},
};
static
struct
mmp_dma_platdata
pxa3xx_dma_pdata
=
{
.
dma_channels
=
32
,
.
nb_requestors
=
100
,
.
slave_map
=
pxa3xx_slave_map
,
.
slave_map_cnt
=
ARRAY_SIZE
(
pxa3xx_slave_map
),
};
static
int
__init
pxa3xx_init
(
void
)
{
int
ret
=
0
;
...
...
@@ -456,7 +495,7 @@ static int __init pxa3xx_init(void)
if
(
of_have_populated_dt
())
return
0
;
pxa2xx_set_dmac_info
(
32
,
100
);
pxa2xx_set_dmac_info
(
&
pxa3xx_dma_pdata
);
ret
=
platform_add_devices
(
devices
,
ARRAY_SIZE
(
devices
));
if
(
ret
)
return
ret
;
...
...
arch/arm/plat-pxa/ssp.c
浏览文件 @
2fb166e5
...
...
@@ -127,53 +127,6 @@ static int pxa_ssp_probe(struct platform_device *pdev)
if
(
IS_ERR
(
ssp
->
clk
))
return
PTR_ERR
(
ssp
->
clk
);
if
(
dev
->
of_node
)
{
struct
of_phandle_args
dma_spec
;
struct
device_node
*
np
=
dev
->
of_node
;
int
ret
;
/*
* FIXME: we should allocate the DMA channel from this
* context and pass the channel down to the ssp users.
* For now, we lookup the rx and tx indices manually
*/
/* rx */
ret
=
of_parse_phandle_with_args
(
np
,
"dmas"
,
"#dma-cells"
,
0
,
&
dma_spec
);
if
(
ret
)
{
dev_err
(
dev
,
"Can't parse dmas property
\n
"
);
return
-
ENODEV
;
}
ssp
->
drcmr_rx
=
dma_spec
.
args
[
0
];
of_node_put
(
dma_spec
.
np
);
/* tx */
ret
=
of_parse_phandle_with_args
(
np
,
"dmas"
,
"#dma-cells"
,
1
,
&
dma_spec
);
if
(
ret
)
{
dev_err
(
dev
,
"Can't parse dmas property
\n
"
);
return
-
ENODEV
;
}
ssp
->
drcmr_tx
=
dma_spec
.
args
[
0
];
of_node_put
(
dma_spec
.
np
);
}
else
{
res
=
platform_get_resource
(
pdev
,
IORESOURCE_DMA
,
0
);
if
(
res
==
NULL
)
{
dev_err
(
dev
,
"no SSP RX DRCMR defined
\n
"
);
return
-
ENODEV
;
}
ssp
->
drcmr_rx
=
res
->
start
;
res
=
platform_get_resource
(
pdev
,
IORESOURCE_DMA
,
1
);
if
(
res
==
NULL
)
{
dev_err
(
dev
,
"no SSP TX DRCMR defined
\n
"
);
return
-
ENODEV
;
}
ssp
->
drcmr_tx
=
res
->
start
;
}
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
if
(
res
==
NULL
)
{
dev_err
(
dev
,
"no memory resource defined
\n
"
);
...
...
drivers/ata/pata_pxa.c
浏览文件 @
2fb166e5
...
...
@@ -25,7 +25,6 @@
#include <linux/libata.h>
#include <linux/platform_device.h>
#include <linux/dmaengine.h>
#include <linux/dma/pxa-dma.h>
#include <linux/gpio.h>
#include <linux/slab.h>
#include <linux/completion.h>
...
...
@@ -180,8 +179,6 @@ static int pxa_ata_probe(struct platform_device *pdev)
struct
resource
*
irq_res
;
struct
pata_pxa_pdata
*
pdata
=
dev_get_platdata
(
&
pdev
->
dev
);
struct
dma_slave_config
config
;
dma_cap_mask_t
mask
;
struct
pxad_param
param
;
int
ret
=
0
;
/*
...
...
@@ -278,10 +275,6 @@ static int pxa_ata_probe(struct platform_device *pdev)
ap
->
private_data
=
data
;
dma_cap_zero
(
mask
);
dma_cap_set
(
DMA_SLAVE
,
mask
);
param
.
prio
=
PXAD_PRIO_LOWEST
;
param
.
drcmr
=
pdata
->
dma_dreq
;
memset
(
&
config
,
0
,
sizeof
(
config
));
config
.
src_addr_width
=
DMA_SLAVE_BUSWIDTH_2_BYTES
;
config
.
dst_addr_width
=
DMA_SLAVE_BUSWIDTH_2_BYTES
;
...
...
@@ -294,8 +287,7 @@ static int pxa_ata_probe(struct platform_device *pdev)
* Request the DMA channel
*/
data
->
dma_chan
=
dma_request_slave_channel_compat
(
mask
,
pxad_filter_fn
,
&
param
,
&
pdev
->
dev
,
"data"
);
dma_request_slave_channel
(
&
pdev
->
dev
,
"data"
);
if
(
!
data
->
dma_chan
)
return
-
EBUSY
;
ret
=
dmaengine_slave_config
(
data
->
dma_chan
,
&
config
);
...
...
drivers/dma/pxa_dma.c
浏览文件 @
2fb166e5
...
...
@@ -179,6 +179,8 @@ static unsigned int pxad_drcmr(unsigned int line)
return
0x1000
+
line
*
4
;
}
bool
pxad_filter_fn
(
struct
dma_chan
*
chan
,
void
*
param
);
/*
* Debug fs
*/
...
...
@@ -760,6 +762,8 @@ static void pxad_free_chan_resources(struct dma_chan *dchan)
dma_pool_destroy
(
chan
->
desc_pool
);
chan
->
desc_pool
=
NULL
;
chan
->
drcmr
=
U32_MAX
;
chan
->
prio
=
PXAD_PRIO_LOWEST
;
}
static
void
pxad_free_desc
(
struct
virt_dma_desc
*
vd
)
...
...
@@ -1384,6 +1388,9 @@ static int pxad_init_dmadev(struct platform_device *op,
c
=
devm_kzalloc
(
&
op
->
dev
,
sizeof
(
*
c
),
GFP_KERNEL
);
if
(
!
c
)
return
-
ENOMEM
;
c
->
drcmr
=
U32_MAX
;
c
->
prio
=
PXAD_PRIO_LOWEST
;
c
->
vc
.
desc_free
=
pxad_free_desc
;
vchan_init
(
&
c
->
vc
,
&
pdev
->
slave
);
init_waitqueue_head
(
&
c
->
wq_state
);
...
...
@@ -1396,9 +1403,10 @@ static int pxad_probe(struct platform_device *op)
{
struct
pxad_device
*
pdev
;
const
struct
of_device_id
*
of_id
;
const
struct
dma_slave_map
*
slave_map
=
NULL
;
struct
mmp_dma_platdata
*
pdata
=
dev_get_platdata
(
&
op
->
dev
);
struct
resource
*
iores
;
int
ret
,
dma_channels
=
0
,
nb_requestors
=
0
;
int
ret
,
dma_channels
=
0
,
nb_requestors
=
0
,
slave_map_cnt
=
0
;
const
enum
dma_slave_buswidth
widths
=
DMA_SLAVE_BUSWIDTH_1_BYTE
|
DMA_SLAVE_BUSWIDTH_2_BYTES
|
DMA_SLAVE_BUSWIDTH_4_BYTES
;
...
...
@@ -1429,6 +1437,8 @@ static int pxad_probe(struct platform_device *op)
}
else
if
(
pdata
&&
pdata
->
dma_channels
)
{
dma_channels
=
pdata
->
dma_channels
;
nb_requestors
=
pdata
->
nb_requestors
;
slave_map
=
pdata
->
slave_map
;
slave_map_cnt
=
pdata
->
slave_map_cnt
;
}
else
{
dma_channels
=
32
;
/* default 32 channel */
}
...
...
@@ -1440,6 +1450,9 @@ static int pxad_probe(struct platform_device *op)
pdev
->
slave
.
device_prep_dma_memcpy
=
pxad_prep_memcpy
;
pdev
->
slave
.
device_prep_slave_sg
=
pxad_prep_slave_sg
;
pdev
->
slave
.
device_prep_dma_cyclic
=
pxad_prep_dma_cyclic
;
pdev
->
slave
.
filter
.
map
=
slave_map
;
pdev
->
slave
.
filter
.
mapcnt
=
slave_map_cnt
;
pdev
->
slave
.
filter
.
fn
=
pxad_filter_fn
;
pdev
->
slave
.
copy_align
=
PDMA_ALIGNMENT
;
pdev
->
slave
.
src_addr_widths
=
widths
;
...
...
drivers/media/platform/pxa_camera.c
浏览文件 @
2fb166e5
...
...
@@ -2375,8 +2375,6 @@ static int pxa_camera_probe(struct platform_device *pdev)
.
src_maxburst
=
8
,
.
direction
=
DMA_DEV_TO_MEM
,
};
dma_cap_mask_t
mask
;
struct
pxad_param
params
;
char
clk_name
[
V4L2_CLK_NAME_SIZE
];
int
irq
;
int
err
=
0
,
i
;
...
...
@@ -2450,34 +2448,20 @@ static int pxa_camera_probe(struct platform_device *pdev)
pcdev
->
base
=
base
;
/* request dma */
dma_cap_zero
(
mask
);
dma_cap_set
(
DMA_SLAVE
,
mask
);
dma_cap_set
(
DMA_PRIVATE
,
mask
);
params
.
prio
=
0
;
params
.
drcmr
=
68
;
pcdev
->
dma_chans
[
0
]
=
dma_request_slave_channel_compat
(
mask
,
pxad_filter_fn
,
&
params
,
&
pdev
->
dev
,
"CI_Y"
);
pcdev
->
dma_chans
[
0
]
=
dma_request_slave_channel
(
&
pdev
->
dev
,
"CI_Y"
);
if
(
!
pcdev
->
dma_chans
[
0
])
{
dev_err
(
&
pdev
->
dev
,
"Can't request DMA for Y
\n
"
);
return
-
ENODEV
;
}
params
.
drcmr
=
69
;
pcdev
->
dma_chans
[
1
]
=
dma_request_slave_channel_compat
(
mask
,
pxad_filter_fn
,
&
params
,
&
pdev
->
dev
,
"CI_U"
);
pcdev
->
dma_chans
[
1
]
=
dma_request_slave_channel
(
&
pdev
->
dev
,
"CI_U"
);
if
(
!
pcdev
->
dma_chans
[
1
])
{
dev_err
(
&
pdev
->
dev
,
"Can't request DMA for Y
\n
"
);
err
=
-
ENODEV
;
goto
exit_free_dma_y
;
}
params
.
drcmr
=
70
;
pcdev
->
dma_chans
[
2
]
=
dma_request_slave_channel_compat
(
mask
,
pxad_filter_fn
,
&
params
,
&
pdev
->
dev
,
"CI_V"
);
pcdev
->
dma_chans
[
2
]
=
dma_request_slave_channel
(
&
pdev
->
dev
,
"CI_V"
);
if
(
!
pcdev
->
dma_chans
[
2
])
{
dev_err
(
&
pdev
->
dev
,
"Can't request DMA for V
\n
"
);
err
=
-
ENODEV
;
...
...
drivers/mmc/host/pxamci.c
浏览文件 @
2fb166e5
...
...
@@ -24,7 +24,6 @@
#include <linux/interrupt.h>
#include <linux/dmaengine.h>
#include <linux/dma-mapping.h>
#include <linux/dma/pxa-dma.h>
#include <linux/clk.h>
#include <linux/err.h>
#include <linux/mmc/host.h>
...
...
@@ -637,10 +636,8 @@ static int pxamci_probe(struct platform_device *pdev)
{
struct
mmc_host
*
mmc
;
struct
pxamci_host
*
host
=
NULL
;
struct
resource
*
r
,
*
dmarx
,
*
dmatx
;
struct
pxad_param
param_rx
,
param_tx
;
struct
resource
*
r
;
int
ret
,
irq
,
gpio_cd
=
-
1
,
gpio_ro
=
-
1
,
gpio_power
=
-
1
;
dma_cap_mask_t
mask
;
ret
=
pxamci_of_init
(
pdev
);
if
(
ret
)
...
...
@@ -739,34 +736,14 @@ static int pxamci_probe(struct platform_device *pdev)
platform_set_drvdata
(
pdev
,
mmc
);
if
(
!
pdev
->
dev
.
of_node
)
{
dmarx
=
platform_get_resource
(
pdev
,
IORESOURCE_DMA
,
0
);
dmatx
=
platform_get_resource
(
pdev
,
IORESOURCE_DMA
,
1
);
if
(
!
dmarx
||
!
dmatx
)
{
ret
=
-
ENXIO
;
goto
out
;
}
param_rx
.
prio
=
PXAD_PRIO_LOWEST
;
param_rx
.
drcmr
=
dmarx
->
start
;
param_tx
.
prio
=
PXAD_PRIO_LOWEST
;
param_tx
.
drcmr
=
dmatx
->
start
;
}
dma_cap_zero
(
mask
);
dma_cap_set
(
DMA_SLAVE
,
mask
);
host
->
dma_chan_rx
=
dma_request_slave_channel_compat
(
mask
,
pxad_filter_fn
,
&
param_rx
,
&
pdev
->
dev
,
"rx"
);
host
->
dma_chan_rx
=
dma_request_slave_channel
(
&
pdev
->
dev
,
"rx"
);
if
(
host
->
dma_chan_rx
==
NULL
)
{
dev_err
(
&
pdev
->
dev
,
"unable to request rx dma channel
\n
"
);
ret
=
-
ENODEV
;
goto
out
;
}
host
->
dma_chan_tx
=
dma_request_slave_channel_compat
(
mask
,
pxad_filter_fn
,
&
param_tx
,
&
pdev
->
dev
,
"tx"
);
host
->
dma_chan_tx
=
dma_request_slave_channel
(
&
pdev
->
dev
,
"tx"
);
if
(
host
->
dma_chan_tx
==
NULL
)
{
dev_err
(
&
pdev
->
dev
,
"unable to request tx dma channel
\n
"
);
ret
=
-
ENODEV
;
...
...
drivers/mtd/nand/raw/marvell_nand.c
浏览文件 @
2fb166e5
...
...
@@ -2612,8 +2612,6 @@ static int marvell_nfc_init_dma(struct marvell_nfc *nfc)
dev
);
struct
dma_slave_config
config
=
{};
struct
resource
*
r
;
dma_cap_mask_t
mask
;
struct
pxad_param
param
;
int
ret
;
if
(
!
IS_ENABLED
(
CONFIG_PXA_DMA
))
{
...
...
@@ -2626,20 +2624,7 @@ static int marvell_nfc_init_dma(struct marvell_nfc *nfc)
if
(
ret
)
return
ret
;
r
=
platform_get_resource
(
pdev
,
IORESOURCE_DMA
,
0
);
if
(
!
r
)
{
dev_err
(
nfc
->
dev
,
"No resource defined for data DMA
\n
"
);
return
-
ENXIO
;
}
param
.
drcmr
=
r
->
start
;
param
.
prio
=
PXAD_PRIO_LOWEST
;
dma_cap_zero
(
mask
);
dma_cap_set
(
DMA_SLAVE
,
mask
);
nfc
->
dma_chan
=
dma_request_slave_channel_compat
(
mask
,
pxad_filter_fn
,
&
param
,
nfc
->
dev
,
"data"
);
nfc
->
dma_chan
=
dma_request_slave_channel
(
nfc
->
dev
,
"data"
);
if
(
!
nfc
->
dma_chan
)
{
dev_err
(
nfc
->
dev
,
"Unable to request data DMA channel
\n
"
);
...
...
include/linux/dma/pxa-dma.h
浏览文件 @
2fb166e5
...
...
@@ -9,6 +9,15 @@ enum pxad_chan_prio {
PXAD_PRIO_LOWEST
,
};
/**
* struct pxad_param - dma channel request parameters
* @drcmr: requestor line number
* @prio: minimal mandatory priority of the channel
*
* If a requested channel is granted, its priority will be at least @prio,
* ie. if PXAD_PRIO_LOW is required, the requested channel will be either
* PXAD_PRIO_LOW, PXAD_PRIO_NORMAL or PXAD_PRIO_HIGHEST.
*/
struct
pxad_param
{
unsigned
int
drcmr
;
enum
pxad_chan_prio
prio
;
...
...
include/linux/platform_data/mmp_dma.h
浏览文件 @
2fb166e5
...
...
@@ -12,9 +12,13 @@
#ifndef MMP_DMA_H
#define MMP_DMA_H
struct
dma_slave_map
;
struct
mmp_dma_platdata
{
int
dma_channels
;
int
nb_requestors
;
int
slave_map_cnt
;
const
struct
dma_slave_map
*
slave_map
;
};
#endif
/* MMP_DMA_H */
include/linux/pxa2xx_ssp.h
浏览文件 @
2fb166e5
...
...
@@ -212,8 +212,6 @@ struct ssp_device {
int
type
;
int
use_count
;
int
irq
;
int
drcmr_rx
;
int
drcmr_tx
;
struct
device_node
*
of_node
;
};
...
...
sound/soc/pxa/pxa-ssp.c
浏览文件 @
2fb166e5
...
...
@@ -105,9 +105,8 @@ static int pxa_ssp_startup(struct snd_pcm_substream *substream,
dma
=
kzalloc
(
sizeof
(
struct
snd_dmaengine_dai_dma_data
),
GFP_KERNEL
);
if
(
!
dma
)
return
-
ENOMEM
;
dma
->
filter_data
=
substream
->
stream
==
SNDRV_PCM_STREAM_PLAYBACK
?
&
ssp
->
drcmr_tx
:
&
ssp
->
drcmr_rx
;
dma
->
chan_name
=
substream
->
stream
==
SNDRV_PCM_STREAM_PLAYBACK
?
"tx"
:
"rx"
;
snd_soc_dai_set_dma_data
(
cpu_dai
,
substream
,
dma
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录