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
next prev parent 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