This patch adds the platform device and assignes the platform resources
for the PRUSS mfd driver.
Signed-off-by: Subhasish Ghosh <[email protected]>
---
arch/arm/mach-davinci/da850.c | 7 +++
arch/arm/mach-davinci/devices-da8xx.c | 65 ++++++++++++++++++++++++++++
arch/arm/mach-davinci/include/mach/da8xx.h | 2 +
3 files changed, 74 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c
index 8a4de97..a098263 100644
--- a/arch/arm/mach-davinci/da850.c
+++ b/arch/arm/mach-davinci/da850.c
@@ -238,6 +238,12 @@ static struct clk tptc2_clk = {
.flags = ALWAYS_ENABLED,
};
+static struct clk pruss_clk = {
+ .name = "pruss",
+ .parent = &pll0_sysclk2,
+ .lpsc = DA8XX_LPSC0_PRUSS,
+};
+
static struct clk uart0_clk = {
.name = "uart0",
.parent = &pll0_sysclk2,
@@ -387,6 +393,7 @@ static struct clk_lookup da850_clks[] = {
CLK(NULL, "tpcc1", &tpcc1_clk),
CLK(NULL, "tptc2", &tptc2_clk),
CLK(NULL, "uart0", &uart0_clk),
+ CLK(NULL, "pruss", &pruss_clk),
CLK(NULL, "uart1", &uart1_clk),
CLK(NULL, "uart2", &uart2_clk),
CLK(NULL, "aintc", &aintc_clk),
diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
index beda8a4..e15de72 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -20,6 +20,7 @@
#include <mach/time.h>
#include <mach/da8xx.h>
#include <mach/cpuidle.h>
+#include <linux/mfd/pruss/da8xx_pru.h>
#include "clock.h"
@@ -499,6 +500,70 @@ void __init da8xx_register_mcasp(int id, struct snd_platform_data *pdata)
}
}
+#define DA8XX_PRUSS_MEM_BASE 0x01C30000
+
+static struct resource da8xx_pruss_resources[] = {
+ {
+ .name = "da8xx_pruss",
+ .start = DA8XX_PRUSS_MEM_BASE,
+ .end = DA8XX_PRUSS_MEM_BASE + 0xFFFF,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = IRQ_DA8XX_EVTOUT0,
+ .end = IRQ_DA8XX_EVTOUT0,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .start = IRQ_DA8XX_EVTOUT1,
+ .end = IRQ_DA8XX_EVTOUT1,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .start = IRQ_DA8XX_EVTOUT2,
+ .end = IRQ_DA8XX_EVTOUT2,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .start = IRQ_DA8XX_EVTOUT3,
+ .end = IRQ_DA8XX_EVTOUT3,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .start = IRQ_DA8XX_EVTOUT4,
+ .end = IRQ_DA8XX_EVTOUT4,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .start = IRQ_DA8XX_EVTOUT5,
+ .end = IRQ_DA8XX_EVTOUT5,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .start = IRQ_DA8XX_EVTOUT6,
+ .end = IRQ_DA8XX_EVTOUT6,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .start = IRQ_DA8XX_EVTOUT7,
+ .end = IRQ_DA8XX_EVTOUT7,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+struct platform_device da8xx_pruss_dev = {
+ .name = "da8xx_pruss",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(da8xx_pruss_resources),
+ .resource = da8xx_pruss_resources,
+};
+
+int __init da8xx_register_pruss(struct da8xx_pruss_devices *pruss_device)
+{
+ da8xx_pruss_dev.dev.platform_data = pruss_device;
+ return platform_device_register(&da8xx_pruss_dev);
+}
+
static const struct display_panel disp_panel = {
QVGA,
16,
diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h
index c3c3339..2c400d4 100644
--- a/arch/arm/mach-davinci/include/mach/da8xx.h
+++ b/arch/arm/mach-davinci/include/mach/da8xx.h
@@ -15,6 +15,7 @@
#include <linux/platform_device.h>
#include <linux/davinci_emac.h>
+#include <linux/mfd/pruss/da8xx_pru.h>
#include <mach/serial.h>
#include <mach/edma.h>
@@ -82,6 +83,7 @@ int da8xx_register_watchdog(void);
int da8xx_register_usb20(unsigned mA, unsigned potpgt);
int da8xx_register_usb11(struct da8xx_ohci_root_hub *pdata);
int da8xx_register_emac(void);
+int da8xx_register_pruss(struct da8xx_pruss_devices *);
int da8xx_register_lcdc(struct da8xx_lcdc_platform_data *pdata);
int da8xx_register_mmcsd0(struct davinci_mmc_config *config);
int da850_register_mmcsd1(struct davinci_mmc_config *config);
--
1.7.2.3
Hello.
Subhasish Ghosh wrote:
> This patch adds the platform device and assignes the platform resources
> for the PRUSS mfd driver.
You also add the PRUSS clock (and I would have done that as a separate patch).
> Signed-off-by: Subhasish Ghosh <[email protected]>
You should have noted the patch dependency here -- this patch depends on the
one nenaming DA8XX_LPSC0_DMAX.
WBR, Sergei
--------------------------------------------------
From: "Sergei Shtylyov" <[email protected]>
Sent: Saturday, February 12, 2011 12:11 AM
To: "Subhasish Ghosh" <[email protected]>
Cc: <[email protected]>;
<[email protected]>; <[email protected]>;
<[email protected]>; <[email protected]>; "Kevin Hilman (supporter:TI
DAVINCI MACHIN...,commit_signer:16/18=89%)" <[email protected]>;
"Russell King (maintainer:ARM PORT)" <[email protected]>; "Michael
Williamson (commit_signer:5/18=28%)" <[email protected]>;
"Cyril Chemparathy (commit_signer:3/18=17%)" <[email protected]>; "Sergei
Shtylyov (commit_signer:3/18=17%)" <[email protected]>; "open list"
<[email protected]>
Subject: Re: [PATCH v2 02/13] da850: pruss platform specific additions.
> Hello.
>
> Subhasish Ghosh wrote:
>
>> This patch adds the platform device and assignes the platform resources
>> for the PRUSS mfd driver.
>
> You also add the PRUSS clock (and I would have done that as a separate
> patch).
>
>> Signed-off-by: Subhasish Ghosh <[email protected]>
>
> You should have noted the patch dependency here -- this patch depends
> on the one nenaming DA8XX_LPSC0_DMAX.
SG - Will do
>
> WBR, Sergei
Hi,
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf
> Of Subhasish Ghosh
> Sent: Friday, February 11, 2011 8:21 PM
> To: [email protected]
> Cc: [email protected]; Russell King; Kevin Hilman; Subhasish
> Ghosh; open list; Watkins, Melissa; [email protected]
> Subject: [PATCH v2 02/13] da850: pruss platform specific additions.
>
> This patch adds the platform device and assignes the platform resources
> for the PRUSS mfd driver.
>
> Signed-off-by: Subhasish Ghosh <[email protected]>
> ---
> +struct platform_device da8xx_pruss_dev = {
Can you please rename this to da8xx_pruss_mfddev?
> + .name = "da8xx_pruss",
Can you please rename name string as pruss_mfd? This will help to
base my UIO patches on top of yours.
> + .id = -1,
> + .num_resources = ARRAY_SIZE(da8xx_pruss_resources),
> + .resource = da8xx_pruss_resources,
> +};
> +
> +int __init da8xx_register_pruss(struct da8xx_pruss_devices *pruss_device)
Please rename this to da8xx_register_pruss_mfd
Thanks,
Pratheesh
Hello,
Can we not have the PRU UIO also as a part of the MFD framework.
I know that the UIO is not really a device, but I feel its incorrect to
register the same device twice.
Instead we can have a single entry as the MFD framework and the UIO, as a
child device, based upon the MFD driver APIs.
All that we need to do is add an entry into the da8xx_pruss_devices
structure
and the MFD driver will do the rest to get the UIO probe called.
--------------------------------------------------
From: "TK, Pratheesh Gangadhar" <[email protected]>
Sent: Monday, February 28, 2011 6:34 PM
To: "Subhasish Ghosh" <[email protected]>;
<[email protected]>
Cc: <[email protected]>; "Russell King" <[email protected]>;
"Kevin Hilman" <[email protected]>; "open list"
<[email protected]>; "Watkins, Melissa" <[email protected]>;
<[email protected]>
Subject: RE: [PATCH v2 02/13] da850: pruss platform specific additions.
> Hi,
>
>> -----Original Message-----
>> From: [email protected]
>> [mailto:[email protected]] On Behalf
>> Of Subhasish Ghosh
>> Sent: Friday, February 11, 2011 8:21 PM
>> To: [email protected]
>> Cc: [email protected]; Russell King; Kevin Hilman; Subhasish
>> Ghosh; open list; Watkins, Melissa; [email protected]
>> Subject: [PATCH v2 02/13] da850: pruss platform specific additions.
>>
>> This patch adds the platform device and assignes the platform resources
>> for the PRUSS mfd driver.
>>
>> Signed-off-by: Subhasish Ghosh <[email protected]>
>> ---
>> +struct platform_device da8xx_pruss_dev = {
> Can you please rename this to da8xx_pruss_mfddev?
>> + .name = "da8xx_pruss",
> Can you please rename name string as pruss_mfd? This will help to
> base my UIO patches on top of yours.
>> + .id = -1,
>> + .num_resources = ARRAY_SIZE(da8xx_pruss_resources),
>> + .resource = da8xx_pruss_resources,
>> +};
>> +
>> +int __init da8xx_register_pruss(struct da8xx_pruss_devices
>> *pruss_device)
> Please rename this to da8xx_register_pruss_mfd
>
> Thanks,
> Pratheesh
Hi,
> -----Original Message-----
> From: Subhasish Ghosh [mailto:[email protected]]
> Sent: Tuesday, March 01, 2011 12:29 PM
> Hello,
>
> Can we not have the PRU UIO also as a part of the MFD framework.
> I know that the UIO is not really a device, but I feel its incorrect to
> register the same device twice.
> Instead we can have a single entry as the MFD framework and the UIO, as a
> child device, based upon the MFD driver APIs.
>
> All that we need to do is add an entry into the da8xx_pruss_devices
> structure
> and the MFD driver will do the rest to get the UIO probe called.
>
Well I see the need for MFD for in-kernel PRUSS based drivers like UART/CAN,
but UIO use cases are typically mutually exclusive to this. UIO driver
exports whole PRUSS I/O region and Interrupts to user space application and
all the tasks including PRUSS INTC setup, loading firmware and
enable/disable PRUs are handled by PRUSS user driver.
I feel it will be a nightmare to make them co-exist unless say we have
2 instances of PRUSS in a SOC. Think about kernel driver setting up PRUSS, PINTC and loading firmware and user land overriding and vice versa. Things are much simpler if we make the usage model mutually exclusive.
Also I don't see any overlap in functionality and reuse UIO can gain from
MFD driver.
Since we can't register device twice - I would prefer KConfig based check
for the same.
Also can you point me where you add UART and CAN driver as children to PRUSS
MFD driver - I can't seem to find this in patches.
Thanks,
Pratheesh