mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: "Robert P. J. Day" <rpjday@crashcourse.ca>
To: Sascha Hauer <s.hauer@pengutronix.de>
Cc: "U-Boot Version 2 (barebox)" <barebox@lists.infradead.org>
Subject: Re: what is the rationale for funny "0x100" offset for OMAP4 GPIO addresses?
Date: Wed, 5 Dec 2012 09:11:54 -0500 (EST)	[thread overview]
Message-ID: <alpine.DEB.2.02.1212050907470.12782@oneiric> (raw)
In-Reply-To: <20121205125830.GH10369@pengutronix.de>

On Wed, 5 Dec 2012, Sascha Hauer wrote:

> On Wed, Dec 05, 2012 at 07:54:51AM -0500, Robert P. J. Day wrote:
> >
> >   i was going to submit a patch to replace magic constants for OMAP4
> > with more meaningful names but i ran into an oddity.  here's
> > omap4-silicon.h:
> >
> > #define OMAP44XX_L4_WKUP_BASE           0x4A300000
> > #define OMAP44XX_L4_PER_BASE            0x48000000
> >
> > and here's part of an old posting to the linux-omap mailing list:
> >
> > +/* GPIO controller*/
> > +#define OMAP44XX_GPIO1_BASE             (L4_WK_44XX_BASE  + 0x10000)
> > +#define OMAP44XX_GPIO2_BASE             (L4_PER_44XX_BASE + 0x55000)
> > +#define OMAP44XX_GPIO3_BASE             (L4_PER_44XX_BASE + 0x57000)
> > +#define OMAP44XX_GPIO4_BASE             (L4_PER_44XX_BASE + 0x59000)
> > +#define OMAP44XX_GPIO5_BASE             (L4_PER_44XX_BASE + 0x5B000)
> > +#define OMAP44XX_GPIO6_BASE             (L4_PER_44XX_BASE + 0x5D000)
> >
> > but here's the tail end of omap4-generic.c:
> >
> > static int omap4_gpio_init(void)
> > {
> >         add_generic_device("omap-gpio", 0, NULL, 0x4a310100,
> >                                 0xf00, IORESOURCE_MEM, NULL);
> >         add_generic_device("omap-gpio", 1, NULL, 0x48055100,
> >                                 0xf00, IORESOURCE_MEM, NULL);
> >         add_generic_device("omap-gpio", 2, NULL, 0x48057100,
> >                                 0xf00, IORESOURCE_MEM, NULL);
> >         add_generic_device("omap-gpio", 3, NULL, 0x48059100,
> >                                 0xf00, IORESOURCE_MEM, NULL);
> >         add_generic_device("omap-gpio", 4, NULL, 0x4805b100,
> >                                 0xf00, IORESOURCE_MEM, NULL);
> >         add_generic_device("omap-gpio", 5, NULL, 0x4805d100,
> >                                 0xf00, IORESOURCE_MEM, NULL);
> >
> >         return 0;
> > }
> >
> >   as you can see, the numbers don't add up exactly -- the constants in
> > that final file are all 0x100 larger than a simple addition.  anyone
> > know where that comes from?
>
> This comes from the hardware. The GPIO controller is the same as on
> omap3, but the base addresses have an additional 0x100 offset.

  ok, i finally satisfied myself as to how this is being done, and why
it was so hard to find other evidence of this.  i checked what was
happening in u-boot and found this:

$ grep -r GPIO_CLEARDATAOUT *
arch/arm/include/asm/arch-omap5/cpu.h:#define OMAP_GPIO_CLEARDATAOUT		0x0190
arch/arm/include/asm/arch-omap4/cpu.h:#define OMAP_GPIO_CLEARDATAOUT		0x0190
arch/arm/include/asm/arch-omap3/cpu.h:#define OMAP_GPIO_CLEARDATAOUT		0x0090
arch/arm/include/asm/arch-am33xx/cpu.h:#define OMAP_GPIO_CLEARDATAOUT		0x0190
drivers/gpio/omap_gpio.c:			reg += OMAP_GPIO_CLEARDATAOUT;

and suddenly it all makes sense.

  so u-boot defines and uses the *non*-adding-0x100 offset addresses
for GPIO BASE addresses, but makes up for it by adding that necessary
offset into the subsequent macros (as you can see above).

  barebox, on the other hand, has a single definition for stuff like
that:

$ grep -r CLEARDATAOUT *
mach-omap/gpio.c:#define OMAP_GPIO_CLEARDATAOUT	0x0090
mach-omap/gpio.c:		base += OMAP_GPIO_CLEARDATAOUT;
$

so the offset has to be added to the base address to come out the
same.

  sorry for being so confused about this.

rday

-- 

========================================================================
Robert P. J. Day                                 Ottawa, Ontario, CANADA
                        http://crashcourse.ca

Twitter:                                       http://twitter.com/rpjday
LinkedIn:                               http://ca.linkedin.com/in/rpjday
========================================================================

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

      parent reply	other threads:[~2012-12-05 14:12 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-05 12:54 Robert P. J. Day
2012-12-05 12:58 ` Sascha Hauer
2012-12-05 13:01   ` Robert P. J. Day
2012-12-05 13:29   ` Robert P. J. Day
2012-12-05 14:11   ` Robert P. J. Day [this message]

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=alpine.DEB.2.02.1212050907470.12782@oneiric \
    --to=rpjday@crashcourse.ca \
    --cc=barebox@lists.infradead.org \
    --cc=s.hauer@pengutronix.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox