Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 331320
b: refs/heads/master
c: ee75d95
h: refs/heads/master
v: v3
  • Loading branch information
Jon Hunter authored and Paul Walmsley committed Sep 23, 2012
1 parent ab1415a commit 8a85f5d
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 30 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c7dad45f351e9bea8ebaa974f01b01c8f69432b4
refs/heads/master: ee75d95cea05bd4f42a5db7b17dd8529d25beddd
1 change: 1 addition & 0 deletions trunk/arch/arm/mach-omap2/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ obj-$(CONFIG_ARCH_OMAP4) += omap_hwmod_44xx_data.o

# EMU peripherals
obj-$(CONFIG_OMAP3_EMU) += emu.o
obj-$(CONFIG_HW_PERF_EVENTS) += pmu.o

# L3 interconnect
obj-$(CONFIG_ARCH_OMAP3) += omap_l3_smx.o
Expand Down
29 changes: 0 additions & 29 deletions trunk/arch/arm/mach-omap2/devices.c
Original file line number Diff line number Diff line change
Expand Up @@ -434,34 +434,6 @@ static void omap_init_mcspi(void)
static inline void omap_init_mcspi(void) {}
#endif

static struct resource omap2_pmu_resource = {
.start = 3 + OMAP_INTC_START,
.flags = IORESOURCE_IRQ,
};

static struct resource omap3_pmu_resource = {
.start = 3 + OMAP_INTC_START,
.flags = IORESOURCE_IRQ,
};

static struct platform_device omap_pmu_device = {
.name = "arm-pmu",
.id = ARM_PMU_DEVICE_CPU,
.num_resources = 1,
};

static void omap_init_pmu(void)
{
if (cpu_is_omap24xx())
omap_pmu_device.resource = &omap2_pmu_resource;
else if (cpu_is_omap34xx())
omap_pmu_device.resource = &omap3_pmu_resource;
else
return;

platform_device_register(&omap_pmu_device);
}

/**
* omap_init_rng - bind the RNG hwmod to the RNG omap_device
*
Expand Down Expand Up @@ -664,7 +636,6 @@ static int __init omap2_init_devices(void)
omap_init_mcpdm();
omap_init_mcspi();
}
omap_init_pmu();
omap_init_sti();
omap_init_rng();
omap_init_sham();
Expand Down
6 changes: 6 additions & 0 deletions trunk/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c
Original file line number Diff line number Diff line change
Expand Up @@ -218,8 +218,14 @@ struct omap_hwmod omap2xxx_l4_wkup_hwmod = {
};

/* MPU */
static struct omap_hwmod_irq_info omap2xxx_mpu_irqs[] = {
{ .name = "pmu", .irq = 3 },
{ .irq = -1 }
};

struct omap_hwmod omap2xxx_mpu_hwmod = {
.name = "mpu",
.mpu_irqs = omap2xxx_mpu_irqs,
.class = &mpu_hwmod_class,
.main_clk = "mpu_ck",
};
Expand Down
6 changes: 6 additions & 0 deletions trunk/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,14 @@ static struct omap_hwmod omap3xxx_l4_sec_hwmod = {
};

/* MPU */
static struct omap_hwmod_irq_info omap3xxx_mpu_irqs[] = {
{ .name = "pmu", .irq = 3 },
{ .irq = -1 }
};

static struct omap_hwmod omap3xxx_mpu_hwmod = {
.name = "mpu",
.mpu_irqs = omap3xxx_mpu_irqs,
.class = &mpu_hwmod_class,
.main_clk = "arm_fck",
};
Expand Down
82 changes: 82 additions & 0 deletions trunk/arch/arm/mach-omap2/pmu.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
* OMAP2 ARM Performance Monitoring Unit (PMU) Support
*
* Copyright (C) 2012 Texas Instruments, Inc.
*
* Contacts:
* Jon Hunter <jon-hunter@ti.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/

#include <asm/pmu.h>

#include <plat/omap_hwmod.h>
#include <plat/omap_device.h>

static char *omap2_pmu_oh_names[] = {"mpu"};
static char *omap3_pmu_oh_names[] = {"mpu", "debugss"};
static struct platform_device *omap_pmu_dev;

/**
* omap2_init_pmu - creates and registers PMU platform device
* @oh_num: Number of OMAP HWMODs required to create PMU device
* @oh_names: Array of OMAP HWMODS names required to create PMU device
*
* Uses OMAP HWMOD framework to create and register an ARM PMU device
* from a list of HWMOD names passed. Currently supports OMAP2 and
* OMAP3 devices.
*/
static int __init omap2_init_pmu(unsigned oh_num, char *oh_names[])
{
int i;
struct omap_hwmod *oh[2];
char *dev_name = "arm-pmu";

if ((!oh_num) || (oh_num > 2))
return -EINVAL;

for (i = 0; i < oh_num; i++) {
oh[i] = omap_hwmod_lookup(oh_names[i]);
if (!oh[i]) {
pr_err("Could not look up %s hwmod\n", oh_names[i]);
return -ENODEV;
}
}

omap_pmu_dev = omap_device_build_ss(dev_name, -1, oh, oh_num, NULL, 0,
NULL, 0, 0);
WARN(IS_ERR(omap_pmu_dev), "Can't build omap_device for %s.\n",
dev_name);

return IS_ERR(omap_pmu_dev) ? PTR_ERR(omap_pmu_dev) : 0;
}

static int __init omap_init_pmu(void)
{
unsigned oh_num;
char **oh_names;

/*
* To create an ARM-PMU device the following HWMODs
* are required for the various OMAP2+ devices.
*
* OMAP24xx: mpu
* OMAP3xxx: mpu, debugss
*/
if (cpu_is_omap24xx()) {
oh_num = ARRAY_SIZE(omap2_pmu_oh_names);
oh_names = omap2_pmu_oh_names;
} else if (cpu_is_omap34xx()) {
oh_num = ARRAY_SIZE(omap3_pmu_oh_names);
oh_names = omap3_pmu_oh_names;
} else {
return 0;
}

return omap2_init_pmu(oh_num, oh_names);
}
subsys_initcall(omap_init_pmu);

0 comments on commit 8a85f5d

Please sign in to comment.