Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
2fb166e5
Commit
2fb166e5
authored
Jul 16, 2018
by
Ulf Hansson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'next_pxa_dma' into next
parents
9d3cce1e
399c4129
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
160 additions
and
272 deletions
+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
No files found.
arch/arm/mach-pxa/devices.c
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment