public inbox for linux-rockchip@lists.infradead.org
 help / color / mirror / Atom feed
From: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
To: "David.Wu" <david.wu-TNX95d0MmH7DzftRWevZcw@public.gmane.org>,
	linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Cc: Kever Yang <kever.yang-TNX95d0MmH7DzftRWevZcw@public.gmane.org>,
	Doug Anderson <dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
Subject: Re: Boundary between pinctrl and peripheral settings
Date: Mon, 22 May 2017 18:29:28 +0200	[thread overview]
Message-ID: <2621764.2a2E3U2WOa@phil> (raw)
In-Reply-To: <97536e9f-7ad9-032b-d2dd-921f97464123-TNX95d0MmH7DzftRWevZcw@public.gmane.org>

Hi David,

[I've dropped Linus Walleij, so we don't spam him with our discussions :-) .
 I've kept the list though, so people can read up on it if necessary ]

Am Montag, 22. Mai 2017, 21:58:00 CEST schrieb David.Wu:
> 在 2017/5/19 17:13, Heiko Stuebner 写道:
> >> If a pin-routing contains a few pins as gmac, need all the pins (pin,
> >> pinfunc) to be configured correctly from DT, then the corresponding GRF
> >> setting is configured.
> >> If configured grf-setting per pin, assuming that one of the pin's
> >> pinfunc is wrong, it may cause pin-routing not to be effective or wrong.
> > 
> > I still think it should be enough to watch for one pin of a specifc group
> > to be set to its special pinmux function. If the pinmux setting is wrong
> > for that pin the ip block won't work correctly anyway (independent of
> > its inner-soc routing).
> > 
> > Our pinctrl groups also are defined on a global per-soc level
> > (rk3399.dtsi etc) and thus if they are really wrong, a lot of people will
> > complain anyway ;-) .
> > 
> > So for example just take
> > uart2dbga_sin, uart2dbgb_sin, uart2dbgc_sin on rk3399
> > as pins to watch, some thing like
> > 
> > struct rk3399_pinrouting[] = {
> > 	{
> > 		/* uart2dbga */
> > 		.bank = 4,
> > 		.pin = 8,
> > 		.func = 2,
> > 		.route_offset = 0x0e21c,
> > 		.route_val = (3 << (10+16)),
> > 	}, {
> > 		/* uart2dbgb */
> > 		.bank = 4,
> > 		.pin = 16,
> > 		.func = 2,
> > 		.route_offset = 0x0e21c,
> > 		.route_val = (3 << (10+16) | 1 << 10),
> > 	},
> > ...
> > };
> > 
> > That way you can just hook it into the rockchip_set_mux function similar
> > to the recalc stuff, without to much trouble.
> >
> The gmac_m1_sel is different, it need to configure both bit[10] and 
> bit[2] with value:1, used after optimization. The gmac_m1 after 
> optimization need to configure all pins iomux of gmac_m1 and tx pins 
> iomux of gmac_m0. The tx pins iomux of gmac_m0 is also required,so it is 
> conflict of gmac_m1 after optimization. Besides, we don't need to use 
> m1, because m1 's signal is bad, don't think about it, but
> gmac_m1 after optimization is obligatory.

I'm not sure I understand the paragraph above. Especially what is the
"optimization" thing.

But if I understand you correctly, that still leaves us with only 2 settings.
gmac-m0 and gmac-m1-optimized (or whatever we want to call it).

For gmac-m0 just hook it onto mac_rxd0, which is only used on m0;
just use any of the gmac-m1 pins for that gmac-m1-optimized state;
and as yo wrote just ignore the gmac-m1 state, as it is bad anyway.


Heiko


> >> So i think the smallest cell is a group, which contains the pins for the
> >> pin-routing.
> > 
> > Though that creates more ABI between kernel and devicetree (pingroup
> > names), which will most likely bite us some time in the future. Also I'd
> > like to keep these dependencies as minimal as possible, as depending on
> > how much more funny inventions we accumulate, we might want to restructure
> > (or split) the driver at some later point - without breaking devicetrees.
> > 
> > 
> > Heiko
> > 
> > 
> >> 在 2017/5/18 16:48, Heiko Stübner 写道:
> >>> Hi Kever, David,
> >>>
> >>> Am Donnerstag, 18. Mai 2017, 16:21:09 CEST schrieb Kever Yang:
> >>>> Hi Heiko, Linus,
> >>>>       Is there any news to handle this kind of IOMUX?
> >>>
> >>> I was talking with David Wu about that a short while ago as well :-) .
> >>>
> >>>  From what I've heared, in the future socs may be able to select that
> >>> routing themselfs based on the iomux and having had time to ponder
> >>> the whole issue for some time now, I do guess some sort of list would be
> >>> the least intrusive solution.
> >>>
> >>> It seems we're talking about only a handful of such routings per soc,
> >>> so I guess having the iomux setting check a list
> >>>
> >>> 	(pin, pinfunc) -> grf-setting for the pin-routing
> >>>
> >>> really is the least intrusive thing to do - as iomux settings really
> >>> aren't changed that often on a running device and adding more
> >>> stuff on top would just complicate everything.
> >>>
> >>>
> >>> Heiko
> >>>
> >>>
> >>>> Thanks,
> >>>> - Kever
> >>>>
> >>>> On 08/05/2016 07:36 AM, Heiko Stübner wrote:
> >>>>> Hi Linus,
> >>>>>
> >>>>>
> >>>>> on the rk3399 we found an interesting new feature and would like to get
> >>>>> some input from the pinctrl expert :-) , as Doug and me currently are of
> >>>>> differing opinions on where specific control elements belong.
> >>>>>
> >>>>>
> >>>>> In a nutshell on the rk3399 some things like one specific uart can use
> >>>>> multiple pins to output data, but control of that seems to be split. The
> >>>>> actual pin config is identical for all pins - each needs to be configured
> >>>>> to function 2, pulls set etc. Then somewhere between the pin io-cells and
> >>>>> the uart it seems to have some sort of switch to decide to which pin to
> >>>>> actually route the data.
> >>>>>
> >>>>>
> >>>>> +-------+    +--------+  /- GPIO4_B1 (pinmux 2)
> >>>>>
> >>>>> | uart2 | -- | switch | --- GPIO4_C1 (pinmux 2)
> >>>>>
> >>>>> +-------+    +--------+  \- GPIO4_C4 (pinmux 2)
> >>>>> (switch selects one of the 3 pins to actually output data to)
> >>>>>
> >>>>>
> >>>>> So the question now is, should the pinctrl driver also flip that switch to
> >>>>> the correct position itself when pin-function 2 of say gpio4_bq gets
> >>>>> selected or is that routing outside of pinctrl's scope?
> >>>>>
> >>>>> -----
> >>>>>
> >>>>> I hope to have presented the core issue above somewhat neutrally, below
> >>>>> are
> >>>>> my personal worries about doing that in pinctrl :-) .
> >>>>>
> >>>>>
> >>>>> Apart from it feeling "bolted-on" to me, I have two main worries with that
> >>>>> approach:
> >>>>> (1) Right now the unused pins are really unused on the same iomux, so when
> >>>>> flipping the switch it essentially does
> >>>>>
> >>>>>    uart-sout    unused
> >>>>>
> >>>>>     |(iomux2)    |(iomux2)
> >>>>>
> >>>>> +----------+ +----------+
> >>>>>
> >>>>> | gpio4_b0 | | gpio4_c0 |
> >>>>>
> >>>>> +----------+ +----------+
> >>>>>
> >>>>> going to
> >>>>>
> >>>>>    unused       uart-sout
> >>>>>
> >>>>>     |(iomux2)    |(iomux2)
> >>>>>
> >>>>> +----------+ +----------+
> >>>>>
> >>>>> | gpio4_b0 | | gpio4_c0 |
> >>>>>
> >>>>> +----------+ +----------+
> >>>>>
> >>>>> but nothing keeps designers from doing
> >>>>>
> >>>>>    uart-sout    special1
> >>>>>
> >>>>>     |(iomux2)    |(iomux2)
> >>>>>
> >>>>> +----------+ +----------+
> >>>>>
> >>>>> | gpio4_b0 | | gpio4_c0 |
> >>>>>
> >>>>> +----------+ +----------+
> >>>>>
> >>>>> going to
> >>>>>
> >>>>>    special2     uart-sout
> >>>>>
> >>>>>     |(iomux2)    |(iomux2)
> >>>>>
> >>>>> +----------+ +----------+
> >>>>>
> >>>>> | gpio4_b0 | | gpio4_c0 |
> >>>>>
> >>>>> +----------+ +----------+
> >>>>>
> >>>>> somewhere down the road, so relying on following the selected iomux feels
> >>>>> not future proof.
> >>>>>
> >>>>> (2) Looking at [0] we already have a similar case, where we configure the
> >>>>> pins for rgmii but still tell the gmac controller that it is supposed to
> >>>>> do
> >>>>> rgmii instead of rmii.
> >>>>>
> >>>>> Here the pinmux is the same for all pins, rmii just uses less pins when
> >>>>> compared to rgmii, so binding that to the pinmux isn't even possible.
> >>>>>
> >>>>> And doing it one way here and another way for the switch feels very
> >>>>> strange.
> >>>>>
> >>>>>
> >>>>> I hope this overly long mail was not to confusing and hope for some words
> >>>>> of wisdom ;-)
> >>>>>
> >>>>>
> >>>>> Big thanks
> >>>>> Heiko
> >>>>>
> >>>>>
> >>>>> [0]
> >>>>> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/
> >>>>> arm/boot/dts/rk3288-miqi.dts#n139
> >>>>>
> >>>>>
> >>>>> _______________________________________________
> >>>>> Linux-rockchip mailing list
> >>>>> Linux-rockchip@lists.infradead.org
> >>>>> http://lists.infradead.org/mailman/listinfo/linux-rockchip
> >>>
> >>>
> >>>
> >>>
> >>>
> >>
> > 
> > 
> > 
> > 
> > 
> 
> 
> 



_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

  parent reply	other threads:[~2017-05-22 16:29 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-04 23:36 Boundary between pinctrl and peripheral settings Heiko Stübner
2016-08-10 13:32 ` Linus Walleij
     [not found]   ` <CACRpkdb=ju0i9x3rtRz0OvUkrsGBSBLymnzLqWNZ=WWJ6CKryQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-08-22 17:10     ` Heiko Stuebner
2017-05-18  8:21 ` Kever Yang
     [not found]   ` <2f1d45cb-8869-94fc-98b1-952d0f12d343-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2017-05-18  8:48     ` Heiko Stübner
2017-05-18 14:39       ` David.Wu
     [not found]         ` <a865024c-98d4-4349-6a33-e29fbc3cd7a7-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2017-05-19  9:13           ` Heiko Stuebner
2017-05-22 13:58             ` David.Wu
     [not found]               ` <97536e9f-7ad9-032b-d2dd-921f97464123-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2017-05-22 16:29                 ` Heiko Stuebner [this message]
2017-05-23 13:05                   ` David.Wu
2017-07-21  6:33                   ` David.Wu
     [not found]                     ` <d0ade22d-3e3d-6bf3-3a06-e85e74360147-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2017-07-21  9:28                       ` Heiko Stuebner

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=2621764.2a2E3U2WOa@phil \
    --to=heiko-4mtyjxux2i+zqb+pc5nmwq@public.gmane.org \
    --cc=david.wu-TNX95d0MmH7DzftRWevZcw@public.gmane.org \
    --cc=dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
    --cc=kever.yang-TNX95d0MmH7DzftRWevZcw@public.gmane.org \
    --cc=linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.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