RE: [PATCH v6 2/2] ARM: davinci: Remoteproc platform device creation data/code

2013-01-28 Thread Tivy, Robert
Hi Sergei,

 -Original Message-
 From: Sergei Shtylyov [mailto:sshtyl...@mvista.com]
 Sent: Saturday, January 26, 2013 6:43 AM
 
 Hello.
 
 On 26-01-2013 6:45, Robert Tivy wrote:
 
  Added a new remoteproc platform device for DA8XX.  Contains CMA-based
  reservation of physical memory block.  A new kernel command-line
  parameter has been added to allow boot-time specification of the
  physical memory block.
 
 No signoff again.

Thanks, I will fix this.

 
  diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-
 davinci/devices-da8xx.c
  index fb2f51b..a455e5c 100644
  --- a/arch/arm/mach-davinci/devices-da8xx.c
  +++ b/arch/arm/mach-davinci/devices-da8xx.c
 [...]
  @@ -706,6 +706,96 @@ int __init da850_register_mmcsd1(struct
 davinci_mmc_config *config)
}
#endif
 
  +static struct resource da8xx_rproc_resources[] = {
  +   { /* DSP boot address */
  +   .start  = DA8XX_SYSCFG0_BASE +
 DA8XX_HOST1CFG_REG,
  +   .end= DA8XX_SYSCFG0_BASE + DA8XX_HOST1CFG_REG + 3,
  +   .flags  = IORESOURCE_MEM,
  +   },
  +   { /* DSP interrupt registers */
  +   .start  = DA8XX_SYSCFG0_BASE + DA8XX_CHIPSIG_REG,
  +   .end= DA8XX_SYSCFG0_BASE + DA8XX_CHIPSIG_REG + 7,
  +   .flags  = IORESOURCE_MEM,
 
 Does it really make sense to pass these as 2 resources -- they have
 the
 same base address?

I didn't want to impart that knowledge on the remoteproc driver.  As far as the 
driver is concerned, there is a boot address register and some 
interrupt-related registers.  That the boot address and interrupt-related 
registers share the same base address is a device-specific fact.

 
  +int __init da8xx_register_rproc(void)
  +{
  +   int ret;
  +
  +   ret = platform_device_register(da8xx_dsp);
  +   if (ret) {
  +   pr_err(%s: platform_device_register: %d\n, __func__,
 ret);
 
 Better message would be can't register DSP device.

Agreed, I will change this.

 
  +
 
 Empty line hardly needed here.
 
  +   return ret;
 
 Not needed here, just move it outside the {} to replace 'return 0'.

Thanks, I will change this.

Regards,

- Rob

 
  +   }
  +
  +   return 0;
  +};
  +
 
 WBR, Sergei

___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH v6 2/2] ARM: davinci: Remoteproc platform device creation data/code

2013-01-26 Thread Sergei Shtylyov

Hello.

On 26-01-2013 6:45, Robert Tivy wrote:


Added a new remoteproc platform device for DA8XX.  Contains CMA-based
reservation of physical memory block.  A new kernel command-line
parameter has been added to allow boot-time specification of the
physical memory block.


   No signoff again.


diff --git a/arch/arm/mach-davinci/devices-da8xx.c 
b/arch/arm/mach-davinci/devices-da8xx.c
index fb2f51b..a455e5c 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c

[...]

@@ -706,6 +706,96 @@ int __init da850_register_mmcsd1(struct davinci_mmc_config 
*config)
  }
  #endif

+static struct resource da8xx_rproc_resources[] = {
+   { /* DSP boot address */
+   .start  = DA8XX_SYSCFG0_BASE + DA8XX_HOST1CFG_REG,
+   .end= DA8XX_SYSCFG0_BASE + DA8XX_HOST1CFG_REG + 3,
+   .flags  = IORESOURCE_MEM,
+   },
+   { /* DSP interrupt registers */
+   .start  = DA8XX_SYSCFG0_BASE + DA8XX_CHIPSIG_REG,
+   .end= DA8XX_SYSCFG0_BASE + DA8XX_CHIPSIG_REG + 7,
+   .flags  = IORESOURCE_MEM,


   Does it really make sense to pass these as 2 resources -- they have the 
same base address?



+int __init da8xx_register_rproc(void)
+{
+   int ret;
+
+   ret = platform_device_register(da8xx_dsp);
+   if (ret) {
+   pr_err(%s: platform_device_register: %d\n, __func__, ret);


   Better message would be can't register DSP device.


+


   Empty line hardly needed here.


+   return ret;


   Not needed here, just move it outside the {} to replace 'return 0'.


+   }
+
+   return 0;
+};
+


WBR, Sergei

___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


[PATCH v6 2/2] ARM: davinci: Remoteproc platform device creation data/code

2013-01-25 Thread Robert Tivy
Added a new remoteproc platform device for DA8XX.  Contains CMA-based
reservation of physical memory block.  A new kernel command-line
parameter has been added to allow boot-time specification of the
physical memory block.

diff --git a/Documentation/kernel-parameters.txt 
b/Documentation/kernel-parameters.txt
index 363e348..f7ba70f3 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -44,6 +44,7 @@ parameter is applicable:
AVR32   AVR32 architecture is enabled.
AX25Appropriate AX.25 support is enabled.
BLACKFIN Blackfin architecture is enabled.
+   CMA Contiguous Memory Area support is enabled.
DRM Direct Rendering Management support is enabled.
DYNAMIC_DEBUG Build in debug messages and enable them at runtime
EDD BIOS Enhanced Disk Drive Services (EDD) is enabled
@@ -2634,6 +2635,11 @@ bytes respectively. Such letter suffixes can also be 
entirely omitted.
Useful for devices that are detected asynchronously
(e.g. USB and MMC devices).
 
+   rproc_mem=nn[KMG][@address]
+   [KNL,ARM,CMA] Remoteproc physical memory block.
+   Memory area to be used by remote processor image,
+   managed by CMA.
+
rw  [KNL] Mount root device read-write on boot
 
S   [KNL] Run init in single mode
diff --git a/arch/arm/mach-davinci/devices-da8xx.c 
b/arch/arm/mach-davinci/devices-da8xx.c
index fb2f51b..a455e5c 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -12,7 +12,7 @@
  */
 #include linux/init.h
 #include linux/platform_device.h
-#include linux/dma-mapping.h
+#include linux/dma-contiguous.h
 #include linux/serial_8250.h
 #include linux/ahci_platform.h
 #include linux/clk.h
@@ -706,6 +706,96 @@ int __init da850_register_mmcsd1(struct davinci_mmc_config 
*config)
 }
 #endif
 
+static struct resource da8xx_rproc_resources[] = {
+   { /* DSP boot address */
+   .start  = DA8XX_SYSCFG0_BASE + DA8XX_HOST1CFG_REG,
+   .end= DA8XX_SYSCFG0_BASE + DA8XX_HOST1CFG_REG + 3,
+   .flags  = IORESOURCE_MEM,
+   },
+   { /* DSP interrupt registers */
+   .start  = DA8XX_SYSCFG0_BASE + DA8XX_CHIPSIG_REG,
+   .end= DA8XX_SYSCFG0_BASE + DA8XX_CHIPSIG_REG + 7,
+   .flags  = IORESOURCE_MEM,
+   },
+   { /* dsp irq */
+   .start  = IRQ_DA8XX_CHIPINT0,
+   .end= IRQ_DA8XX_CHIPINT0,
+   .flags  = IORESOURCE_IRQ,
+   },
+};
+
+static struct platform_device da8xx_dsp = {
+   .name   = davinci-rproc,
+   .id = 0,
+   .dev= {
+   .coherent_dma_mask  = DMA_BIT_MASK(32),
+   },
+   .num_resources  = ARRAY_SIZE(da8xx_rproc_resources),
+   .resource   = da8xx_rproc_resources,
+};
+
+#if IS_ENABLED(CONFIG_DA8XX_REMOTEPROC)
+
+static phys_addr_t rproc_base __initdata;
+static unsigned long rproc_size __initdata;
+
+static int __init early_rproc_mem(char *p)
+{
+   char *endp;
+
+   if (p == NULL)
+   return 0;
+
+   rproc_size = memparse(p, endp);
+   if (*endp == '@')
+   rproc_base = memparse(endp + 1, NULL);
+
+   return 0;
+}
+early_param(rproc_mem, early_rproc_mem);
+
+void __init da8xx_rproc_reserve_cma(void)
+{
+   int ret;
+
+   if (!rproc_base || !rproc_size) {
+   pr_err(%s: 'rproc_mem=nn@address' badly specified\n
+  'nn' and 'address' must both be non-zero\n,
+  __func__);
+
+   return;
+   }
+
+   pr_info(%s: reserving 0x%lx @ 0x%lx...\n,
+   __func__, rproc_size, (unsigned long)rproc_base);
+
+   ret = dma_declare_contiguous(da8xx_dsp.dev, rproc_size, rproc_base, 0);
+   if (ret)
+   pr_err(%s: dma_declare_contiguous failed %d\n, __func__, ret);
+}
+
+#else
+
+void __init da8xx_rproc_reserve_cma(void)
+{
+}
+
+#endif
+
+int __init da8xx_register_rproc(void)
+{
+   int ret;
+
+   ret = platform_device_register(da8xx_dsp);
+   if (ret) {
+   pr_err(%s: platform_device_register: %d\n, __func__, ret);
+
+   return ret;
+   }
+
+   return 0;
+};
+
 static struct resource da8xx_rtc_resources[] = {
{
.start  = DA8XX_RTC_BASE,
diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h 
b/arch/arm/mach-davinci/include/mach/da8xx.h
index 700d311..1fcb106 100644
--- a/arch/arm/mach-davinci/include/mach/da8xx.h
+++ b/arch/arm/mach-davinci/include/mach/da8xx.h
@@ -54,6 +54,8 @@ extern unsigned int da850_max_speed;
 #define DA8XX_SYSCFG0_BASE (IO_PHYS + 0x14000)
 #define DA8XX_SYSCFG0_VIRT(x)  (da8xx_syscfg0_base + (x))
 #define DA8XX_JTAG_ID_REG  0x18