Re: [patch v3 3/3] arm: omap4: support pmu

2011-03-07 Thread Jean Pihet
On Fri, Mar 4, 2011 at 7:16 AM, Santosh Shilimkar
santosh.shilim...@ti.com wrote:
 -Original Message-
 From: tom.leim...@gmail.com [mailto:tom.leim...@gmail.com]
 Sent: Thursday, March 03, 2011 4:24 PM
 To: li...@arm.linux.org.uk
 Cc: linux-arm-ker...@lists.infradead.org; will.dea...@arm.com; Ming
 Lei; Santosh Shilimkar; Woodruff Richard; Tony Lindgren; linux-
 o...@vger.kernel.org
 Subject: [patch v3 3/3] arm: omap4: support pmu

 From: Ming Lei tom.leim...@gmail.com

 This patch supports pmu irq routed from CTI, so
 make pmu/perf working on OMAP4.

 The idea is from Woodruff Richard in the disscussion
 about Oprofile on Pandaboard / Omap4 on
 pandabo...@googlegroups.com.

 Cc: Santosh Shilimkar santosh.shilim...@ti.com
 Cc: Woodruff Richard r-woodru...@ti.com
 Cc: Tony Lindgren t...@atomide.com
 Cc: linux-omap@vger.kernel.org
 Signed-off-by: Ming Lei tom.leim...@gmail.com
 ---
 Looks good.
 Acked-by: Santosh Shilimkar santosh.shilim...@ti.com

Great!

Acked-by: Jean Pihet j-pi...@ti.com

Thanks,
Jean


  arch/arm/mach-omap2/devices.c              |   82
 +++-
  arch/arm/plat-omap/include/plat/omap44xx.h |    2 +
  2 files changed, 81 insertions(+), 3 deletions(-)

 diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-
 omap2/devices.c
 index d216976..d97bb5a 100644
 --- a/arch/arm/mach-omap2/devices.c
 +++ b/arch/arm/mach-omap2/devices.c
 @@ -22,6 +22,7 @@
  #include asm/mach-types.h
  #include asm/mach/map.h
  #include asm/pmu.h
 +#include asm/cti.h

  #include plat/tc.h
  #include plat/board.h
 @@ -322,20 +323,95 @@ static struct resource omap3_pmu_resource = {
       .flags  = IORESOURCE_IRQ,
  };

 +static struct resource omap4_pmu_resource[] = {
 +     {
 +             .start  = OMAP44XX_IRQ_CTI0,
 +             .end    = OMAP44XX_IRQ_CTI0,
 +             .flags  = IORESOURCE_IRQ,
 +     },
 +     {
 +             .start  = OMAP44XX_IRQ_CTI1,
 +             .end    = OMAP44XX_IRQ_CTI1,
 +             .flags  = IORESOURCE_IRQ,
 +     }
 +};
 +
  static struct platform_device omap_pmu_device = {
       .name           = arm-pmu,
       .id             = ARM_PMU_DEVICE_CPU,
       .num_resources  = 1,
  };

 +static struct arm_pmu_platdata omap4_pmu_data;
 +static struct cti omap4_cti[2];
 +
 +static void omap4_enable_cti(int irq)
 +{
 +     if (irq == OMAP44XX_IRQ_CTI0)
 +             cti_enable(omap4_cti[0]);
 +     else if (irq == OMAP44XX_IRQ_CTI1)
 +             cti_enable(omap4_cti[1]);
 +}
 +
 +static void omap4_disable_cti(int irq)
 +{
 +     if (irq == OMAP44XX_IRQ_CTI0)
 +             cti_disable(omap4_cti[0]);
 +     else if (irq == OMAP44XX_IRQ_CTI1)
 +             cti_disable(omap4_cti[1]);
 +}
 +
 +static irqreturn_t omap4_pmu_handler(int irq, void *dev,
 irq_handler_t handler)
 +{
 +     if (irq == OMAP44XX_IRQ_CTI0)
 +             cti_irq_ack(omap4_cti[0]);
 +     else if (irq == OMAP44XX_IRQ_CTI1)
 +             cti_irq_ack(omap4_cti[1]);
 +
 +     return handler(irq, dev);
 +}
 +
 +static void omap4_configure_pmu_irq(void)
 +{
 +     void __iomem *base0;
 +     void __iomem *base1;
 +
 +     base0 = ioremap(OMAP44XX_CTI0_BASE, SZ_4K);
 +     base1 = ioremap(OMAP44XX_CTI1_BASE, SZ_4K);
 +     if (!base0  !base1) {
 +             pr_err(ioremap for OMAP4 CTI failed\n);
 +             return;
 +     }
 +
 +     /*configure CTI0 for pmu irq routing*/
 +     cti_init(omap4_cti[0], base0, OMAP44XX_IRQ_CTI0, 6);
 +     cti_unlock(omap4_cti[0]);
 +     cti_map_trigger(omap4_cti[0], 1, 6, 2);
 +
 +     /*configure CTI1 for pmu irq routing*/
 +     cti_init(omap4_cti[1], base1, OMAP44XX_IRQ_CTI1, 6);
 +     cti_unlock(omap4_cti[1]);
 +     cti_map_trigger(omap4_cti[1], 1, 6, 2);
 +
 +     omap4_pmu_data.handle_irq = omap4_pmu_handler;
 +     omap4_pmu_data.enable_irq = omap4_enable_cti;
 +     omap4_pmu_data.disable_irq = omap4_disable_cti;
 +}
 +
  static void omap_init_pmu(void)
  {
 -     if (cpu_is_omap24xx())
 +     if (cpu_is_omap24xx()) {
               omap_pmu_device.resource = omap2_pmu_resource;
 -     else if (cpu_is_omap34xx())
 +     } else if (cpu_is_omap34xx()) {
               omap_pmu_device.resource = omap3_pmu_resource;
 -     else
 +     } else if (cpu_is_omap44xx()) {
 +             omap_pmu_device.resource = omap4_pmu_resource;
 +             omap_pmu_device.num_resources = 2;
 +             omap_pmu_device.dev.platform_data = omap4_pmu_data;
 +             omap4_configure_pmu_irq();
 +     } else {
               return;
 +     }

       platform_device_register(omap_pmu_device);
  }
 diff --git a/arch/arm/plat-omap/include/plat/omap44xx.h
 b/arch/arm/plat-omap/include/plat/omap44xx.h
 index ea2b8a6..b127a16 100644
 --- a/arch/arm/plat-omap/include/plat/omap44xx.h
 +++ b/arch/arm/plat-omap/include/plat/omap44xx.h
 @@ -57,5 +57,7 @@
  #define OMAP44XX_HSUSB_OHCI_BASE     (L4_44XX_BASE + 0x64800)
  #define OMAP44XX_HSUSB_EHCI_BASE     (L4_44XX_BASE + 0x64C00)

 +#define OMAP44XX_CTI0_BASE           0x54148000
 +#define

[patch v3 3/3] arm: omap4: support pmu

2011-03-03 Thread tom . leiming
From: Ming Lei tom.leim...@gmail.com

This patch supports pmu irq routed from CTI, so
make pmu/perf working on OMAP4.

The idea is from Woodruff Richard in the disscussion
about Oprofile on Pandaboard / Omap4 on pandabo...@googlegroups.com.

Cc: Santosh Shilimkar santosh.shilim...@ti.com
Cc: Woodruff Richard r-woodru...@ti.com
Cc: Tony Lindgren t...@atomide.com
Cc: linux-omap@vger.kernel.org
Signed-off-by: Ming Lei tom.leim...@gmail.com
---
 arch/arm/mach-omap2/devices.c  |   82 +++-
 arch/arm/plat-omap/include/plat/omap44xx.h |2 +
 2 files changed, 81 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
index d216976..d97bb5a 100644
--- a/arch/arm/mach-omap2/devices.c
+++ b/arch/arm/mach-omap2/devices.c
@@ -22,6 +22,7 @@
 #include asm/mach-types.h
 #include asm/mach/map.h
 #include asm/pmu.h
+#include asm/cti.h
 
 #include plat/tc.h
 #include plat/board.h
@@ -322,20 +323,95 @@ static struct resource omap3_pmu_resource = {
.flags  = IORESOURCE_IRQ,
 };
 
+static struct resource omap4_pmu_resource[] = {
+   {
+   .start  = OMAP44XX_IRQ_CTI0,
+   .end= OMAP44XX_IRQ_CTI0,
+   .flags  = IORESOURCE_IRQ,
+   },
+   {
+   .start  = OMAP44XX_IRQ_CTI1,
+   .end= OMAP44XX_IRQ_CTI1,
+   .flags  = IORESOURCE_IRQ,
+   }
+};
+
 static struct platform_device omap_pmu_device = {
.name   = arm-pmu,
.id = ARM_PMU_DEVICE_CPU,
.num_resources  = 1,
 };
 
+static struct arm_pmu_platdata omap4_pmu_data;
+static struct cti omap4_cti[2];
+
+static void omap4_enable_cti(int irq)
+{
+   if (irq == OMAP44XX_IRQ_CTI0)
+   cti_enable(omap4_cti[0]);
+   else if (irq == OMAP44XX_IRQ_CTI1)
+   cti_enable(omap4_cti[1]);
+}
+
+static void omap4_disable_cti(int irq)
+{
+   if (irq == OMAP44XX_IRQ_CTI0)
+   cti_disable(omap4_cti[0]);
+   else if (irq == OMAP44XX_IRQ_CTI1)
+   cti_disable(omap4_cti[1]);
+}
+
+static irqreturn_t omap4_pmu_handler(int irq, void *dev, irq_handler_t handler)
+{
+   if (irq == OMAP44XX_IRQ_CTI0)
+   cti_irq_ack(omap4_cti[0]);
+   else if (irq == OMAP44XX_IRQ_CTI1)
+   cti_irq_ack(omap4_cti[1]);
+
+   return handler(irq, dev);
+}
+
+static void omap4_configure_pmu_irq(void)
+{
+   void __iomem *base0;
+   void __iomem *base1;
+
+   base0 = ioremap(OMAP44XX_CTI0_BASE, SZ_4K);
+   base1 = ioremap(OMAP44XX_CTI1_BASE, SZ_4K);
+   if (!base0  !base1) {
+   pr_err(ioremap for OMAP4 CTI failed\n);
+   return;
+   }
+
+   /*configure CTI0 for pmu irq routing*/
+   cti_init(omap4_cti[0], base0, OMAP44XX_IRQ_CTI0, 6);
+   cti_unlock(omap4_cti[0]);
+   cti_map_trigger(omap4_cti[0], 1, 6, 2);
+
+   /*configure CTI1 for pmu irq routing*/
+   cti_init(omap4_cti[1], base1, OMAP44XX_IRQ_CTI1, 6);
+   cti_unlock(omap4_cti[1]);
+   cti_map_trigger(omap4_cti[1], 1, 6, 2);
+
+   omap4_pmu_data.handle_irq = omap4_pmu_handler;
+   omap4_pmu_data.enable_irq = omap4_enable_cti;
+   omap4_pmu_data.disable_irq = omap4_disable_cti;
+}
+
 static void omap_init_pmu(void)
 {
-   if (cpu_is_omap24xx())
+   if (cpu_is_omap24xx()) {
omap_pmu_device.resource = omap2_pmu_resource;
-   else if (cpu_is_omap34xx())
+   } else if (cpu_is_omap34xx()) {
omap_pmu_device.resource = omap3_pmu_resource;
-   else
+   } else if (cpu_is_omap44xx()) {
+   omap_pmu_device.resource = omap4_pmu_resource;
+   omap_pmu_device.num_resources = 2;
+   omap_pmu_device.dev.platform_data = omap4_pmu_data;
+   omap4_configure_pmu_irq();
+   } else {
return;
+   }
 
platform_device_register(omap_pmu_device);
 }
diff --git a/arch/arm/plat-omap/include/plat/omap44xx.h 
b/arch/arm/plat-omap/include/plat/omap44xx.h
index ea2b8a6..b127a16 100644
--- a/arch/arm/plat-omap/include/plat/omap44xx.h
+++ b/arch/arm/plat-omap/include/plat/omap44xx.h
@@ -57,5 +57,7 @@
 #define OMAP44XX_HSUSB_OHCI_BASE   (L4_44XX_BASE + 0x64800)
 #define OMAP44XX_HSUSB_EHCI_BASE   (L4_44XX_BASE + 0x64C00)
 
+#define OMAP44XX_CTI0_BASE 0x54148000
+#define OMAP44XX_CTI1_BASE 0x54149000
 #endif /* __ASM_ARCH_OMAP44XX_H */
 
-- 
1.7.3

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [patch v3 3/3] arm: omap4: support pmu

2011-03-03 Thread Tony Lindgren
* tom.leim...@gmail.com tom.leim...@gmail.com [110303 02:52]:
 From: Ming Lei tom.leim...@gmail.com
 
 This patch supports pmu irq routed from CTI, so
 make pmu/perf working on OMAP4.
 
 The idea is from Woodruff Richard in the disscussion
 about Oprofile on Pandaboard / Omap4 on pandabo...@googlegroups.com.
 
 Cc: Santosh Shilimkar santosh.shilim...@ti.com
 Cc: Woodruff Richard r-woodru...@ti.com
 Cc: Tony Lindgren t...@atomide.com
 Cc: linux-omap@vger.kernel.org
 Signed-off-by: Ming Lei tom.leim...@gmail.com

You'll probably want to queue this along with the to other
patches via the Russell, so:

Acked-by: Tony Lindgren t...@atomide.com
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [patch v3 3/3] arm: omap4: support pmu

2011-03-03 Thread Santosh Shilimkar
 -Original Message-
 From: tom.leim...@gmail.com [mailto:tom.leim...@gmail.com]
 Sent: Thursday, March 03, 2011 4:24 PM
 To: li...@arm.linux.org.uk
 Cc: linux-arm-ker...@lists.infradead.org; will.dea...@arm.com; Ming
 Lei; Santosh Shilimkar; Woodruff Richard; Tony Lindgren; linux-
 o...@vger.kernel.org
 Subject: [patch v3 3/3] arm: omap4: support pmu

 From: Ming Lei tom.leim...@gmail.com

 This patch supports pmu irq routed from CTI, so
 make pmu/perf working on OMAP4.

 The idea is from Woodruff Richard in the disscussion
 about Oprofile on Pandaboard / Omap4 on
 pandabo...@googlegroups.com.

 Cc: Santosh Shilimkar santosh.shilim...@ti.com
 Cc: Woodruff Richard r-woodru...@ti.com
 Cc: Tony Lindgren t...@atomide.com
 Cc: linux-omap@vger.kernel.org
 Signed-off-by: Ming Lei tom.leim...@gmail.com
 ---
Looks good.
Acked-by: Santosh Shilimkar santosh.shilim...@ti.com

  arch/arm/mach-omap2/devices.c  |   82
 +++-
  arch/arm/plat-omap/include/plat/omap44xx.h |2 +
  2 files changed, 81 insertions(+), 3 deletions(-)

 diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-
 omap2/devices.c
 index d216976..d97bb5a 100644
 --- a/arch/arm/mach-omap2/devices.c
 +++ b/arch/arm/mach-omap2/devices.c
 @@ -22,6 +22,7 @@
  #include asm/mach-types.h
  #include asm/mach/map.h
  #include asm/pmu.h
 +#include asm/cti.h

  #include plat/tc.h
  #include plat/board.h
 @@ -322,20 +323,95 @@ static struct resource omap3_pmu_resource = {
   .flags  = IORESOURCE_IRQ,
  };

 +static struct resource omap4_pmu_resource[] = {
 + {
 + .start  = OMAP44XX_IRQ_CTI0,
 + .end= OMAP44XX_IRQ_CTI0,
 + .flags  = IORESOURCE_IRQ,
 + },
 + {
 + .start  = OMAP44XX_IRQ_CTI1,
 + .end= OMAP44XX_IRQ_CTI1,
 + .flags  = IORESOURCE_IRQ,
 + }
 +};
 +
  static struct platform_device omap_pmu_device = {
   .name   = arm-pmu,
   .id = ARM_PMU_DEVICE_CPU,
   .num_resources  = 1,
  };

 +static struct arm_pmu_platdata omap4_pmu_data;
 +static struct cti omap4_cti[2];
 +
 +static void omap4_enable_cti(int irq)
 +{
 + if (irq == OMAP44XX_IRQ_CTI0)
 + cti_enable(omap4_cti[0]);
 + else if (irq == OMAP44XX_IRQ_CTI1)
 + cti_enable(omap4_cti[1]);
 +}
 +
 +static void omap4_disable_cti(int irq)
 +{
 + if (irq == OMAP44XX_IRQ_CTI0)
 + cti_disable(omap4_cti[0]);
 + else if (irq == OMAP44XX_IRQ_CTI1)
 + cti_disable(omap4_cti[1]);
 +}
 +
 +static irqreturn_t omap4_pmu_handler(int irq, void *dev,
 irq_handler_t handler)
 +{
 + if (irq == OMAP44XX_IRQ_CTI0)
 + cti_irq_ack(omap4_cti[0]);
 + else if (irq == OMAP44XX_IRQ_CTI1)
 + cti_irq_ack(omap4_cti[1]);
 +
 + return handler(irq, dev);
 +}
 +
 +static void omap4_configure_pmu_irq(void)
 +{
 + void __iomem *base0;
 + void __iomem *base1;
 +
 + base0 = ioremap(OMAP44XX_CTI0_BASE, SZ_4K);
 + base1 = ioremap(OMAP44XX_CTI1_BASE, SZ_4K);
 + if (!base0  !base1) {
 + pr_err(ioremap for OMAP4 CTI failed\n);
 + return;
 + }
 +
 + /*configure CTI0 for pmu irq routing*/
 + cti_init(omap4_cti[0], base0, OMAP44XX_IRQ_CTI0, 6);
 + cti_unlock(omap4_cti[0]);
 + cti_map_trigger(omap4_cti[0], 1, 6, 2);
 +
 + /*configure CTI1 for pmu irq routing*/
 + cti_init(omap4_cti[1], base1, OMAP44XX_IRQ_CTI1, 6);
 + cti_unlock(omap4_cti[1]);
 + cti_map_trigger(omap4_cti[1], 1, 6, 2);
 +
 + omap4_pmu_data.handle_irq = omap4_pmu_handler;
 + omap4_pmu_data.enable_irq = omap4_enable_cti;
 + omap4_pmu_data.disable_irq = omap4_disable_cti;
 +}
 +
  static void omap_init_pmu(void)
  {
 - if (cpu_is_omap24xx())
 + if (cpu_is_omap24xx()) {
   omap_pmu_device.resource = omap2_pmu_resource;
 - else if (cpu_is_omap34xx())
 + } else if (cpu_is_omap34xx()) {
   omap_pmu_device.resource = omap3_pmu_resource;
 - else
 + } else if (cpu_is_omap44xx()) {
 + omap_pmu_device.resource = omap4_pmu_resource;
 + omap_pmu_device.num_resources = 2;
 + omap_pmu_device.dev.platform_data = omap4_pmu_data;
 + omap4_configure_pmu_irq();
 + } else {
   return;
 + }

   platform_device_register(omap_pmu_device);
  }
 diff --git a/arch/arm/plat-omap/include/plat/omap44xx.h
 b/arch/arm/plat-omap/include/plat/omap44xx.h
 index ea2b8a6..b127a16 100644
 --- a/arch/arm/plat-omap/include/plat/omap44xx.h
 +++ b/arch/arm/plat-omap/include/plat/omap44xx.h
 @@ -57,5 +57,7 @@
  #define OMAP44XX_HSUSB_OHCI_BASE (L4_44XX_BASE + 0x64800)
  #define OMAP44XX_HSUSB_EHCI_BASE (L4_44XX_BASE + 0x64C00)

 +#define OMAP44XX_CTI0_BASE   0x54148000
 +#define OMAP44XX_CTI1_BASE   0x54149000
  #endif /* __ASM_ARCH_OMAP44XX_H */

 --
 1.7.3
--
To unsubscribe from this list: send the line unsubscribe linux