2015-02-10 14:02:42

by Peter Ujfalusi

[permalink] [raw]
Subject: [PATCH 0/7] ARM: davinci: McASP related cleanups and fixes

Hi,

Clean up series of McASP device creation for da8xx and dm646x DMSoCs.

Patch5 (dm646x: Clean up the McASP DMA resources) depends on a patch queed for
3.20 via ASoC:
http://mailman.alsa-project.org/pipermail/alsa-devel/2015-February/087321.html

There is another daVinci related fix going via ASoC for da830, which have shared
irq line for all it's McASP ip:
http://mailman.alsa-project.org/pipermail/alsa-devel/2015-February/087322.html

Regards,
Peter
---
Peter Ujfalusi (7):
ARM: davinci: devices-da8xx: Add resource name for the McASP DMA
request
ARM: davinci: devices-da8xx: Add interrupt resource to McASP structs
ARM: davinci: devices-da8xx: Clean up and correct the McASP device
creation
ARM: davinci: devices-da8xx: Add support for McASP2 on da830
ARM: davinci: dm646x: Clean up the McASP DMA resources
ARM: davinci: irqs: Correct McASP1 TX interrupt definition for DM646x
ARM: davinci: dm646x: Add interrupt resource for McASPs

arch/arm/mach-davinci/asp.h | 7 +++
arch/arm/mach-davinci/devices-da8xx.c | 80 ++++++++++++++++++++++++++++---
arch/arm/mach-davinci/dm646x.c | 23 ++++++---
arch/arm/mach-davinci/include/mach/irqs.h | 2 +-
4 files changed, 98 insertions(+), 14 deletions(-)

--
2.3.0


2015-02-10 13:59:16

by Peter Ujfalusi

[permalink] [raw]
Subject: [PATCH 1/7] ARM: davinci: devices-da8xx: Add resource name for the McASP DMA request

Add "tx" or "rx" as resource name for the DMA resources.

Signed-off-by: Peter Ujfalusi <[email protected]>
---
arch/arm/mach-davinci/devices-da8xx.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
index b85b781b05fd..f35174317770 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -463,12 +463,14 @@ static struct resource da830_mcasp1_resources[] = {
},
/* TX event */
{
+ .name = "tx",
.start = DAVINCI_DA830_DMA_MCASP1_AXEVT,
.end = DAVINCI_DA830_DMA_MCASP1_AXEVT,
.flags = IORESOURCE_DMA,
},
/* RX event */
{
+ .name = "rx",
.start = DAVINCI_DA830_DMA_MCASP1_AREVT,
.end = DAVINCI_DA830_DMA_MCASP1_AREVT,
.flags = IORESOURCE_DMA,
@@ -491,12 +493,14 @@ static struct resource da850_mcasp_resources[] = {
},
/* TX event */
{
+ .name = "tx",
.start = DAVINCI_DA8XX_DMA_MCASP0_AXEVT,
.end = DAVINCI_DA8XX_DMA_MCASP0_AXEVT,
.flags = IORESOURCE_DMA,
},
/* RX event */
{
+ .name = "rx",
.start = DAVINCI_DA8XX_DMA_MCASP0_AREVT,
.end = DAVINCI_DA8XX_DMA_MCASP0_AREVT,
.flags = IORESOURCE_DMA,
--
2.3.0

2015-02-10 13:59:21

by Peter Ujfalusi

[permalink] [raw]
Subject: [PATCH 2/7] ARM: davinci: devices-da8xx: Add interrupt resource to McASP structs

On da8xx McASP TX/RX interrupt requests are combined.
The interrupt can be used for error recovery.

Signed-off-by: Peter Ujfalusi <[email protected]>
---
arch/arm/mach-davinci/devices-da8xx.c | 10 ++++++++++
1 file changed, 10 insertions(+)

diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
index f35174317770..e15e046c5438 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -475,6 +475,11 @@ static struct resource da830_mcasp1_resources[] = {
.end = DAVINCI_DA830_DMA_MCASP1_AREVT,
.flags = IORESOURCE_DMA,
},
+ {
+ .name = "common",
+ .start = IRQ_DA8XX_MCASPINT,
+ .flags = IORESOURCE_IRQ,
+ },
};

static struct platform_device da830_mcasp1_device = {
@@ -505,6 +510,11 @@ static struct resource da850_mcasp_resources[] = {
.end = DAVINCI_DA8XX_DMA_MCASP0_AREVT,
.flags = IORESOURCE_DMA,
},
+ {
+ .name = "common",
+ .start = IRQ_DA8XX_MCASPINT,
+ .flags = IORESOURCE_IRQ,
+ },
};

static struct platform_device da850_mcasp_device = {
--
2.3.0

2015-02-10 14:02:43

by Peter Ujfalusi

[permalink] [raw]
Subject: [PATCH 3/7] ARM: davinci: devices-da8xx: Clean up and correct the McASP device creation

Both DA830 and DA850 has McASP0 module, so do not restrict the use of
McASP0 for da850 only.

Signed-off-by: Peter Ujfalusi <[email protected]>
---
arch/arm/mach-davinci/devices-da8xx.c | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
index e15e046c5438..fdc3219ba684 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -526,14 +526,25 @@ static struct platform_device da850_mcasp_device = {

void __init da8xx_register_mcasp(int id, struct snd_platform_data *pdata)
{
- /* DA830/OMAP-L137 has 3 instances of McASP */
- if (cpu_is_davinci_da830() && id == 1) {
- da830_mcasp1_device.dev.platform_data = pdata;
- platform_device_register(&da830_mcasp1_device);
- } else if (cpu_is_davinci_da850()) {
- da850_mcasp_device.dev.platform_data = pdata;
- platform_device_register(&da850_mcasp_device);
+ struct platform_device *pdev;
+
+ switch (id) {
+ case 0:
+ /* Valid for DA830/OMAP-L137 or DA850/OMAP-L138 */
+ pdev = &da850_mcasp_device;
+ break;
+ case 1:
+ /* Valid for DA830/OMAP-L137 only */
+ if (!cpu_is_davinci_da830())
+ return;
+ pdev = &da830_mcasp1_device;
+ break;
+ default:
+ return;
}
+
+ pdev->dev.platform_data = pdata;
+ platform_device_register(pdev);
}

static struct resource da8xx_pruss_resources[] = {
--
2.3.0

2015-02-10 13:59:19

by Peter Ujfalusi

[permalink] [raw]
Subject: [PATCH 4/7] ARM: davinci: devices-da8xx: Add support for McASP2 on da830

da830 has three McASP blocks.

Signed-off-by: Peter Ujfalusi <[email protected]>
---
arch/arm/mach-davinci/asp.h | 7 ++++++
arch/arm/mach-davinci/devices-da8xx.c | 41 +++++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+)

diff --git a/arch/arm/mach-davinci/asp.h b/arch/arm/mach-davinci/asp.h
index d9b2acd12393..1128e1d8e4b4 100644
--- a/arch/arm/mach-davinci/asp.h
+++ b/arch/arm/mach-davinci/asp.h
@@ -21,6 +21,9 @@
/* Bases of da830 McASP1 register banks */
#define DAVINCI_DA830_MCASP1_REG_BASE 0x01D04000

+/* Bases of da830 McASP2 register banks */
+#define DAVINCI_DA830_MCASP2_REG_BASE 0x01D08000
+
/* EDMA channels of dm644x and dm355 */
#define DAVINCI_DMA_ASP0_TX 2
#define DAVINCI_DMA_ASP0_RX 3
@@ -40,6 +43,10 @@
#define DAVINCI_DA830_DMA_MCASP1_AREVT 2
#define DAVINCI_DA830_DMA_MCASP1_AXEVT 3

+/* EDMA channels of da830 McASP2 */
+#define DAVINCI_DA830_DMA_MCASP2_AREVT 4
+#define DAVINCI_DA830_DMA_MCASP2_AXEVT 5
+
/* Interrupts */
#define DAVINCI_ASP0_RX_INT IRQ_MBRINT
#define DAVINCI_ASP0_TX_INT IRQ_MBXINT
diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
index fdc3219ba684..ddfdd820e6f2 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -489,6 +489,41 @@ static struct platform_device da830_mcasp1_device = {
.resource = da830_mcasp1_resources,
};

+static struct resource da830_mcasp2_resources[] = {
+ {
+ .name = "mpu",
+ .start = DAVINCI_DA830_MCASP2_REG_BASE,
+ .end = DAVINCI_DA830_MCASP2_REG_BASE + (SZ_1K * 12) - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ /* TX event */
+ {
+ .name = "tx",
+ .start = DAVINCI_DA830_DMA_MCASP2_AXEVT,
+ .end = DAVINCI_DA830_DMA_MCASP2_AXEVT,
+ .flags = IORESOURCE_DMA,
+ },
+ /* RX event */
+ {
+ .name = "rx",
+ .start = DAVINCI_DA830_DMA_MCASP2_AREVT,
+ .end = DAVINCI_DA830_DMA_MCASP2_AREVT,
+ .flags = IORESOURCE_DMA,
+ },
+ {
+ .name = "common",
+ .start = IRQ_DA8XX_MCASPINT,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+static struct platform_device da830_mcasp2_device = {
+ .name = "davinci-mcasp",
+ .id = 2,
+ .num_resources = ARRAY_SIZE(da830_mcasp2_resources),
+ .resource = da830_mcasp2_resources,
+};
+
static struct resource da850_mcasp_resources[] = {
{
.name = "mpu",
@@ -539,6 +574,12 @@ void __init da8xx_register_mcasp(int id, struct snd_platform_data *pdata)
return;
pdev = &da830_mcasp1_device;
break;
+ case 2:
+ /* Valid for DA830/OMAP-L137 only */
+ if (!cpu_is_davinci_da830())
+ return;
+ pdev = &da830_mcasp2_device;
+ break;
default:
return;
}
--
2.3.0

2015-02-10 14:01:57

by Peter Ujfalusi

[permalink] [raw]
Subject: [PATCH 5/7] ARM: davinci: dm646x: Clean up the McASP DMA resources

Add names to the DMA resources and remove the RX DMA dummy part for McASP1.

Signed-off-by: Peter Ujfalusi <[email protected]>
---
arch/arm/mach-davinci/dm646x.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c
index 6c3bbea7d77d..d2a2619aee81 100644
--- a/arch/arm/mach-davinci/dm646x.c
+++ b/arch/arm/mach-davinci/dm646x.c
@@ -610,19 +610,21 @@ static struct resource dm646x_mcasp0_resources[] = {
.end = DAVINCI_DM646X_MCASP0_REG_BASE + (SZ_1K << 1) - 1,
.flags = IORESOURCE_MEM,
},
- /* first TX, then RX */
{
+ .name = "tx",
.start = DAVINCI_DM646X_DMA_MCASP0_AXEVT0,
.end = DAVINCI_DM646X_DMA_MCASP0_AXEVT0,
.flags = IORESOURCE_DMA,
},
{
+ .name = "rx",
.start = DAVINCI_DM646X_DMA_MCASP0_AREVT0,
.end = DAVINCI_DM646X_DMA_MCASP0_AREVT0,
.flags = IORESOURCE_DMA,
},
};

+/* DIT mode only, rx is not supported */
static struct resource dm646x_mcasp1_resources[] = {
{
.name = "mpu",
@@ -630,18 +632,12 @@ static struct resource dm646x_mcasp1_resources[] = {
.end = DAVINCI_DM646X_MCASP1_REG_BASE + (SZ_1K << 1) - 1,
.flags = IORESOURCE_MEM,
},
- /* DIT mode, only TX event */
{
+ .name = "tx",
.start = DAVINCI_DM646X_DMA_MCASP1_AXEVT1,
.end = DAVINCI_DM646X_DMA_MCASP1_AXEVT1,
.flags = IORESOURCE_DMA,
},
- /* DIT mode, dummy entry */
- {
- .start = -1,
- .end = -1,
- .flags = IORESOURCE_DMA,
- },
};

static struct platform_device dm646x_mcasp0_device = {
--
2.3.0

2015-02-10 14:01:04

by Peter Ujfalusi

[permalink] [raw]
Subject: [PATCH 6/7] ARM: davinci: irqs: Correct McASP1 TX interrupt definition for DM646x

McASP1 TX interrupt is 30, not 32 on DM646x DMSoC

Signed-off-by: Peter Ujfalusi <[email protected]>
---
arch/arm/mach-davinci/include/mach/irqs.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/mach-davinci/include/mach/irqs.h b/arch/arm/mach-davinci/include/mach/irqs.h
index 354af71798dc..edb2ca62321a 100644
--- a/arch/arm/mach-davinci/include/mach/irqs.h
+++ b/arch/arm/mach-davinci/include/mach/irqs.h
@@ -129,8 +129,8 @@
#define IRQ_DM646X_EMACMISCINT 27
#define IRQ_DM646X_MCASP0TXINT 28
#define IRQ_DM646X_MCASP0RXINT 29
+#define IRQ_DM646X_MCASP1TXINT 30
#define IRQ_DM646X_RESERVED_3 31
-#define IRQ_DM646X_MCASP1TXINT 32
#define IRQ_DM646X_VLQINT 38
#define IRQ_DM646X_UARTINT2 42
#define IRQ_DM646X_SPINT0 43
--
2.3.0

2015-02-10 13:59:26

by Peter Ujfalusi

[permalink] [raw]
Subject: [PATCH 7/7] ARM: davinci: dm646x: Add interrupt resource for McASPs

The interrupt can be used for error recovery.

Signed-off-by: Peter Ujfalusi <[email protected]>
---
arch/arm/mach-davinci/dm646x.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)

diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c
index d2a2619aee81..c86e0d503b68 100644
--- a/arch/arm/mach-davinci/dm646x.c
+++ b/arch/arm/mach-davinci/dm646x.c
@@ -622,6 +622,16 @@ static struct resource dm646x_mcasp0_resources[] = {
.end = DAVINCI_DM646X_DMA_MCASP0_AREVT0,
.flags = IORESOURCE_DMA,
},
+ {
+ .name = "tx",
+ .start = IRQ_DM646X_MCASP0TXINT,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .name = "rx",
+ .start = IRQ_DM646X_MCASP0RXINT,
+ .flags = IORESOURCE_IRQ,
+ },
};

/* DIT mode only, rx is not supported */
@@ -638,6 +648,11 @@ static struct resource dm646x_mcasp1_resources[] = {
.end = DAVINCI_DM646X_DMA_MCASP1_AXEVT1,
.flags = IORESOURCE_DMA,
},
+ {
+ .name = "tx",
+ .start = IRQ_DM646X_MCASP1TXINT,
+ .flags = IORESOURCE_IRQ,
+ },
};

static struct platform_device dm646x_mcasp0_device = {
--
2.3.0