All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Shilimkar, Santosh" <santosh.shilimkar@ti.com>
To: Paul Walmsley <paul@pwsan.com>,
	Kevin Hilman <khilman@deeprootsystems.com>
Cc: "linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>
Subject: RE: [PATCH 11/13] OMAP: create omap_devices for MPU, DSP, L3
Date: Thu, 24 Jun 2010 12:28:55 +0530	[thread overview]
Message-ID: <EAF47CD23C76F840A9E7FCE10091EFAB02C5D15E5B@dbde02.ent.ti.com> (raw)
In-Reply-To: <alpine.DEB.2.00.1006232325470.1550@utopia.booyaka.com>

> -----Original Message-----
> From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-owner@vger.kernel.org] On Behalf Of Paul
> Walmsley
> Sent: Thursday, June 24, 2010 11:57 AM
> To: Kevin Hilman
> Cc: linux-omap@vger.kernel.org
> Subject: Re: [PATCH 11/13] OMAP: create omap_devices for MPU, DSP, L3
> 
> Hi Kevin,
> 
> some comments below -
> 
> On Wed, 23 Jun 2010, Kevin Hilman wrote:
> 
> > Create simple omap_devices for the main processors and busses.
> >
> > This is required to support the forth-coming device-based OPP
> > approach, where OPPs are managed and tracked at the device level.
> >
> > So that these primary devices are available for early PM initialization,
> > they are created as early platform_devices.
> 
> The idea sounds good, but -
> 
> >
> > Cc: Paul Walmsley <paul@pwsan.com>
> > Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
> > ---
> >  arch/arm/mach-omap2/devices.c            |    2 +
> >  arch/arm/mach-omap2/io.c                 |   55 +++++++++++++++++++++++++++++-
> >  arch/arm/plat-omap/include/plat/common.h |    4 ++
> >  3 files changed, 60 insertions(+), 1 deletions(-)
> >
> > diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
> > index 03e6c9e..62920ac 100644
> > --- a/arch/arm/mach-omap2/devices.c
> > +++ b/arch/arm/mach-omap2/devices.c
> > @@ -15,6 +15,7 @@
> >  #include <linux/platform_device.h>
> >  #include <linux/io.h>
> >  #include <linux/clk.h>
> > +#include <linux/err.h>
> >
> >  #include <mach/hardware.h>
> >  #include <mach/irqs.h>
> > @@ -29,6 +30,7 @@
> >  #include <mach/gpio.h>
> >  #include <plat/mmc.h>
> >  #include <plat/dma.h>
> > +#include <plat/omap_device.h>
> >
> >  #include "mux.h"
> >
> > diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c
> > index 3cfb425..ecebbbf 100644
> > --- a/arch/arm/mach-omap2/io.c
> > +++ b/arch/arm/mach-omap2/io.c
> > @@ -45,7 +45,7 @@
> >
> >  #include <plat/clockdomain.h>
> >  #include "clockdomains.h"
> > -#include <plat/omap_hwmod.h>
> > +#include <plat/omap_device.h>
> >
> >  /*
> >   * The machine specific code may provide the extra mapping besides the
> > @@ -313,6 +313,58 @@ static int __init _omap2_init_reprogram_sdrc(void)
> >  	return v;
> >  }
> >
> > +static struct omap_device_pm_latency *pm_lats;
> > +
> > +static DEFINE_PER_CPU(struct device *, mpu_dev);
> > +static struct devicee *dsp_dev;
> > +static struct device *l3_dev;
> > +
> > +struct device *omap_get_mpu_device(void)
> > +{
> > +	mpu_dev = per_cpu(mpu_dev, smp_processor_id());
> 
> Looks like this will trash the per-CPU mpu_dev on SMP.  You'll need to
> rename one of these two mpu_devs.
> 
> Also, won't the use of smp_processor_id() mean that this will just return
> the struct device * for the MPU that is running this code?  So on a
> two-CPU system, it would be either CPU 0 or 1, randomly.  I guess one
> solution would be to pass in the processor ID to omap_get_mpu_device().
>
MPUSS and both CPU's are clocked from same clock source, so above assumption
still work on OMAP4.
 
> > +	WARN_ON_ONCE(!mpu_dev);
> > +	return mpu_dev;
> > +}
> > +
> > +struct device *omap_get_dsp_device(void)
> > +{
> > +	WARN_ON_ONCE(!dsp_dev);
> > +	return dsp_dev;
> > +}
> > +
> > +struct device *omap_get_l3_device(void)
> > +{
> > +	WARN_ON_ONCE(!l3_dev);
> > +	return l3_dev;
> > +}
> > +
> > +static int _init_omap_device(struct omap_hwmod *oh, void *user)
> > +{
> > +	struct omap_device *od;
> > +	const char *name = oh->name;
> > +	struct device **new_dev = (struct device **)user;
> > +
> > +	od = omap_device_build(name, 0, oh, NULL, 0, pm_lats, 0, true);
> > +	if (WARN(IS_ERR(od), "Could not build omap_device for %s\n", name))
> > +		return -ENODEV;
> > +
> > +	*new_dev = &od->pdev.dev;
> > +
> > +	return 0;
> > +}
> > +
> > +/*
> > + * Build omap_devices for processors and bus.
> > + */
> > +static void omap_init_processor_devices(void)
> > +{
> > +	mpu_dev = per_cpu(mpu_dev, smp_processor_id());
> 
> (same issues as above)
> 
> > +
> > +	omap_hwmod_for_each_by_class("mpu", _init_omap_device, &mpu_dev);
> 
> This won't work on SMP - it will use the same mpu_dev variable for each
> MPU, so mpu_dev will contain the struct device * for the last MPU hwmod
> iterated over.
> 
> Also, there is a hidden assumption that the hwmods of class "mpu" will be
> iterated over in the order that the per_cpu() variable expects...
> 
> > +	omap_hwmod_for_each_by_class("dsp", _init_omap_device, &dsp_dev);
> > +	omap_hwmod_for_each_by_class("l3", _init_omap_device, &l3_dev);
> 
> If there is more than one hwmod in these classes, these will lose the
> omap_device pointers for all but the final omap_hwmod iterated over.
> 
> It's probably easier to just call omap_hwmod_lookup()/_init_omap_device()
> directly and forget about omap_hwmod_for_each_by_class() for the above
> two cases - maybe all three...
> 
> > +}
> > +
> >  void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
> >  				 struct omap_sdrc_params *sdrc_cs1)
> >  {
> > @@ -342,6 +394,7 @@ void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
> >  	omap_serial_early_init();
> >  	if (cpu_is_omap24xx() || cpu_is_omap34xx())   /* FIXME: OMAP4 */
> >  		omap_hwmod_late_init();
> > +	omap_init_processor_devices();
> >  	omap_pm_if_init();
> >  	if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
> >  		omap2_sdrc_init(sdrc_cs0, sdrc_cs1);
> > diff --git a/arch/arm/plat-omap/include/plat/common.h b/arch/arm/plat-omap/include/plat/common.h
> > index d265018..0059dec 100644
> > --- a/arch/arm/plat-omap/include/plat/common.h
> > +++ b/arch/arm/plat-omap/include/plat/common.h
> > @@ -87,4 +87,8 @@ void omap2_set_globals_uart(struct omap_globals *);
> >  	}							\
> >  })
> >
> > +struct device *omap_get_mpu_device(void);
> > +struct device *omap_get_dsp_device(void);
> > +struct device *omap_get_l3_device(void);
> > +
> >  #endif /* __ARCH_ARM_MACH_OMAP_COMMON_H */
> > --
> > 1.7.0.2
> >
> 
> 
> - Paul
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2010-06-24  6:59 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-23 23:42 [PATCH 00/13] OMAP: CM, hwmod, omap_device fixes and updates Kevin Hilman
2010-06-23 23:42 ` [PATCH 01/13] OMAP24xx: CM: fix mask used for checking IDLEST status Kevin Hilman
2010-06-23 23:42 ` [PATCH 02/13] OMAP: hwmod: allow idle after HWMOD_INIT_NO_IDLE Kevin Hilman
2010-06-24  5:02   ` Paul Walmsley
2010-06-24 17:48     ` Kevin Hilman
2010-06-29 21:47       ` Kevin Hilman
2010-06-23 23:42 ` [PATCH 03/13] OMAP2/3: hwmod: L3 and L4 CORE/PER/WKUP hwmods don't have IDLEST Kevin Hilman
2010-06-23 23:42 ` [PATCH 04/13] OMAP: hwmod: Fix the missing braces Kevin Hilman
2010-06-23 23:46   ` Gadiyar, Anand
2010-06-24  0:19     ` Paul Walmsley
2010-06-23 23:42 ` [PATCH 05/13] OMAP2&3: hwmod: Remove _hwmod prefix in name string Kevin Hilman
2010-06-24  5:04   ` Paul Walmsley
2010-06-24 11:53     ` Cousson, Benoit
2010-07-02 11:47   ` Paul Walmsley
2010-06-23 23:42 ` [PATCH 06/13] OMAP: hwmod: add non-locking versions of enable and idle functions Kevin Hilman
2010-06-24  5:08   ` Paul Walmsley
2010-06-24 12:59     ` Basak, Partha
2010-06-24 17:55       ` Kevin Hilman
2010-06-24 17:55     ` Kevin Hilman
2010-06-23 23:42 ` [PATCH 07/13] OMAP: hwmod: don't auto-disable hwmod when !CONFIG_PM_RUNTIME Kevin Hilman
2010-07-02 11:38   ` Paul Walmsley
2010-06-23 23:42 ` [PATCH 08/13] OMAP4: hwmod: Enable omap_device build for OMAP4 Kevin Hilman
2010-06-24  5:11   ` Paul Walmsley
2010-06-24 14:23     ` Nayak, Rajendra
2010-06-24 17:52       ` Kevin Hilman
2010-06-24 19:29         ` Nayak, Rajendra
2010-06-24 21:47           ` Kevin Hilman
2010-07-02 11:46   ` Paul Walmsley
2010-06-23 23:42 ` [PATCH 09/13] OMAP: omap_device: ensure hwmod tracks attached omap_device pointer Kevin Hilman
2010-07-02 11:40   ` Paul Walmsley
2010-06-23 23:42 ` [PATCH 10/13] OMAP: omap_device: add flag to disable automatic bus-level suspend/resume Kevin Hilman
2010-06-24  3:40   ` Paul Walmsley
2010-06-24 17:39     ` Kevin Hilman
2010-06-24 18:06       ` Paul Walmsley
2010-06-24 18:28         ` Kevin Hilman
2010-06-23 23:42 ` [PATCH 11/13] OMAP: create omap_devices for MPU, DSP, L3 Kevin Hilman
2010-06-24  6:26   ` Paul Walmsley
2010-06-24  6:55     ` Paul Walmsley
2010-06-24 17:59       ` Kevin Hilman
2010-06-24  6:58     ` Shilimkar, Santosh [this message]
2010-06-24  7:19       ` Paul Walmsley
2010-06-24  7:27         ` Shilimkar, Santosh
2010-06-23 23:42 ` [PATCH 12/13] OMAP: hwmod data: add class for DSP hwmods Kevin Hilman
2010-06-24 18:44   ` Paul Walmsley
2010-06-24 20:35     ` Kevin Hilman
2010-06-24 21:26       ` Kevin Hilman
2010-06-24 21:34         ` Kevin Hilman
2010-06-23 23:42 ` [PATCH 13/13] OMAP3: hwmod data: add data for OMAP3 IVA2 Kevin Hilman
2010-06-24 20:43   ` Kevin Hilman
2010-06-24 21:36     ` Cousson, Benoit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=EAF47CD23C76F840A9E7FCE10091EFAB02C5D15E5B@dbde02.ent.ti.com \
    --to=santosh.shilimkar@ti.com \
    --cc=khilman@deeprootsystems.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=paul@pwsan.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.