public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
From: Tony Lindgren <tony@atomide.com>
To: Peter Barada <peterb@logicpd.com>
Cc: Philip Balister <philip@balister.org>,
	"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>
Subject: Re: MMC3 Overo
Date: Fri, 7 Aug 2009 11:21:18 +0300	[thread overview]
Message-ID: <20090807082115.GY2358@atomide.com> (raw)
In-Reply-To: <1249574990.10885.43.camel@blitz>

* Peter Barada <peterb@logicpd.com> [090806 19:31]:
> On Thu, 2009-08-06 at 11:09 -0400, Philip Balister wrote:
> > Kevin Hilman wrote:
> > > John Sarman <johnsarman@gmail.com> writes:
> > > 
> > >> On Wed, Aug 5, 2009 at 2:35 PM, Kevin Hilman<khilman@deeprootsystems.com> wrote:
> > >>> Steve Sakoman wrote:
> > >>>> On Wed, Aug 5, 2009 at 10:58 AM, Kevin
> > >>>> Hilman<khilman@deeprootsystems.com> wrote:
> > >>>>> Steve Sakoman wrote:
> > >>>>>> And up to now in each case I shrug and say "no time to do that now,
> > >>>>>> I'll just leave kernel pinmuxing turned off and do it in u-boot"
> > >>>>> I agree there are lots of shortcomings in the current mux code and we've
> > >>>>> been hitting them regularily lately.
> > >>>>>
> > >>>>> That being said, for mux settings that done one-time only at boot, what
> > >>>>> are
> > >>>>> the problems you're running into?
> > >>>> It's been a few months since I last encountered this, so the exact
> > >>>> details are a bit fuzzy.
> > >>>>
> > >>>> I seem to recall that there were some basic issues with enabling
> > >>>> kernel pinmuxing in that some of the setup that was done for all
> > >>>> machines was just wrong for my particular machine.  IIRC, it was due
> > >>>> to assumptions about which pad was used for a particular function (for
> > >>>> those functions which can be steered to multiple GPIO pads).
> > >>>>
> > >>>> So I faced having to undo that change in my board file as well as any
> > >>>> issues that may have arisen from glitches on the GPIO pins during the
> > >>>> process.  And since there were several of these I gave up and turned
> > >>>> off kernel pinmuxing.
> > >>>>
> > >>>> I'd be happy if we cleaned up the "one size fits all" pinmuxing to
> > >>>> just that subset that truly does fit all boards, and leave the rest to
> > >>>> the board files.  I'd also be content to have it all done in the board
> > >>>> file for each machine.
> > >>> Indeed, any assumptions about common muxing that are not indeed common are
> > >>> bugs and should be fixed.
> > >>>
> > >>> The "right" solution is to have everything in the kernel, and split across
> > >>> SoC "common" init and board specific init.  Of course u-boot
> > >>> will still have to do some early muxing, but it should be redone in
> > >>> the kernel so it's trivial to change bootloaders.
> > >>>
> > >>> So the real missing piece is someone to step up and rework the mux code.
> > >>> The bigger problem is that the vast majority of folks don't care about the
> > >>> common case and only care about getting thing working for a specific
> > >>> platform.
> > >>>
> > >>> Kevin
> > >>>
> > >> I  like the idea of having the board file configure the mux.  First of
> > >> all lets address the shortcomings of mux.h.  The Pin values are
> > >> labeled as so:
> > >> <snip from mux.h>
> > >> * NOTE: Please use the following naming style for new pin entries.
> > >>  *       For example, W8_1610_MMC2_DAT0, where:
> > >>  *       - W8        = ball
> > >>  *       - 1610      = 1510 or 1610, none if common for both 1510 and 1610
> > >>  *       - MMC2_DAT0 = function
> > >>
> > >> But lets take the 3530 as an example.
> > >>  The 3530 has three separate packages.  CBB, CBC, and CUS.  Now lets
> > >> look at MMC3_clk (the root of my original problem that started this
> > >> thread)
> > >>                        CBB              CBC            CUS
> > >> mmc3_clk         AB1 / AF10    R9 / AB2     AC1
> > >>
> > >> So to properly add these to mux.h we need to add 5 entries for mmc3_clk
> > >>       AB1_35XXCBB_MMC3_CLK
> > >>       AF10_35XXCBB_MMC3_CLK
> > >>       R9_35XXCBC_MMC3_CLK
> > >>       AB2_35XXCBC_MMC3_CLK
> > >>       AC1_35XXCUS_MMC3_CLK
> > >> We would then have to update mux.c making sure the position matches
> > >> and add the proper settings.
> > >>
> > >> So this is obviously a maintenance nightmare.
> > > 
> > > So why don't we drop the ball (pun intended.) ;)
> > > 
> > > This is what I proposed to Phillip Ballister for his SPI changes for Beagle.
> > > 
> > > Though I haven't looked at the details for each package, I have a hard
> > > time imagining that the reg offsets and functionality for each package
> > > is different.  In fact, I'm pretty sure they're even the same between
> > > 34xx and 35xx.  
> > > 
> > > IOW, why not just name it OMAP3_MMC3_CLK and have a single entry.
> > > 
> > > Then each board file that cares simply has to call omap_cfg_reg() on
> > > that name and not care about the package.
> > 
> > They first problem I see is the MMC3_CLK is available on multiple balls, 
> > so the mux files need to list them all.
> > 
> > Unless you are proposing custom mux files for each board? Is this is 
> > good idea (just had this thought). In other words, instead of trying to 
> > come up with one set of mux files, make them board specific.
> 
> Here's an idea:
> 
> 1) Replace index with enum search in pin table - this breaks the
> requirement that the enum list and table align - a good thing as
> misalingment has bitten me multiple times when adding pins to the
> current mux table.  Also, pinmux setup is done infrequently, so the
> search doesn't add much overall execution time.

Yeh something like that sounds good. We should just move the omap1
specific code to live in mach-omap1 and keep it as it is for now.

You might also want to take a look at what the sh people have done:

$ find arch/sh -name \*mux*
 
> 2) Break up mux table into two parts, the "common" mux list, and a
> "custom" mux list - the latter in the board file, and add a function to
> add the custom mux list to mux lists searched by omap_cfg_reg().
> 
> 3) Search the custom mux list first (if specified - allows replacing an
> entry in the common table if hardware required differences in
> termination, custom pins for GPIO, etc).
> 
> For example, on the OMAP3530, balls H18-H21 can be associated with
> either UART3, or GPIOs 163-166. In the common mux list (where multiple
> boards use those pins for UART3, the common mux file can have the
> entries:
> 
> H18_35XX_UART3_CTS
> H19_35XX_UART3_RTS
> H20_35XX_UART3_RX
> H21_35XX_UART_TX
> 
> that sets up the mux for those pines as a UART.  If a board wants to use
> those pins instead for GPIO, then in the board file it can have a custom
> mux list with:
> 
> H18_35XX_GPIO_163
> H19_35XX_GPIO_164
> H20_35XX_GPIO_165
> H21_35XX_GPIO_166
> 
> and call into the mux code to add the custom mux list to be searched
> first.
> 
> Thoughts?

Sounds pretty good to me!

Tony

  reply	other threads:[~2009-08-07  8:21 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-30 15:49 MMC3 Overo John Sarman
2009-07-30 19:23 ` John Sarman
2009-08-03  1:20   ` Paul Walmsley
2009-08-03 10:33     ` John Sarman
     [not found]       ` <52AC0DF6-BA95-421B-8C56-5F3DC62279DF@mac.com>
     [not found]         ` <bb2708720908030356p6d7b1cdegf0bd8c39a5c4ecd9@mail.gmail.com>
2009-08-03 10:57           ` Fwd: " John Sarman
2009-08-03 11:11       ` Paul Walmsley
2009-08-04 12:21     ` John Sarman
2009-08-05  8:32 ` Grazvydas Ignotas
     [not found]   ` <bb2708720908050901lbc67b1cx5a75a7667fa36fd1@mail.gmail.com>
2009-08-05 16:02     ` Fwd: " John Sarman
2009-08-05 16:25       ` Kevin Hilman
2009-08-05 16:35         ` John Sarman
2009-08-05 17:51           ` Steve Sakoman
2009-08-05 17:56             ` Gadiyar, Anand
2009-08-05 17:58             ` Kevin Hilman
2009-08-05 18:21               ` Steve Sakoman
2009-08-05 18:35                 ` Kevin Hilman
2009-08-05 18:55                   ` Philip Balister
2009-08-06  2:13                     ` Hunyue Yau
     [not found]                   ` <bb2708720908051229x49f10094w9b19b468d4bfaec8@mail.gmail.com>
2009-08-06  2:02                     ` John Sarman
2009-08-06  6:44                       ` Tony Lindgren
2009-08-06 14:30                       ` Kevin Hilman
2009-08-06 14:44                         ` Vladimir Pantelic
2009-08-06 15:16                           ` Kevin Hilman
2009-08-06 15:35                             ` Steve Sakoman
2009-08-06 15:09                         ` Philip Balister
2009-08-06 16:09                           ` Peter Barada
2009-08-07  8:21                             ` Tony Lindgren [this message]
2009-08-07  9:24                               ` Vladimir Pantelic
2009-08-07  9:55                                 ` Tony Lindgren
2009-08-07 13:24                                   ` Steve Sakoman

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=20090807082115.GY2358@atomide.com \
    --to=tony@atomide.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=peterb@logicpd.com \
    --cc=philip@balister.org \
    /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