All of lore.kernel.org
 help / color / mirror / Atom feed
* How to add GPIO outputs to the PXA2xx MFP configuration?
@ 2012-03-28 18:12 Paul Parsons
  2012-03-30  1:33 ` Haojian Zhuang
  2012-03-30 14:59 ` Igor Grinberg
  0 siblings, 2 replies; 14+ messages in thread
From: Paul Parsons @ 2012-03-28 18:12 UTC (permalink / raw)
  To: linux-arm-kernel

On PXA2xx platforms, the MFP API (described in Documentation/arm/pxa/mfp.txt)
provides values for the following:

1. GPIO inputs (e.g. GPIO105_GPIO).
2. Alternate function inputs (e.g. GPIO105_CIF_DD_1).
3. Alternate function outputs (e.g. GPIO105_KP_MKOUT_2).

It does not provide values for GPIO outputs (i.e. AF0 outputs).

One cannot use the macro used by the MFP API internally - MFP_CFG_OUT() - to
define new GPIO output values, since that macro is forbidden in platform code.

Without the ability to add GPIO outputs to the MFP configuration, it is not
possible to drive GPIO outputs high during sleep mode.

This would be useful, for example, on the hx4700 platform, where driving the
infrared powerdown GPIO 105 high during sleep mode would save some mA.

So my question is: what method should one use to add GPIO outputs to the MFP
configuration?

One possible method, namely manually defining values in the platform code:

	MFP_PIN_GPIO105 | MFP_AF0 | MFP_DIR_OUT | MFP_LPM_DRIVE_HIGH,

is essentially no different from using the forbidden MFP_CFG_OUT() macro.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-28 18:12 How to add GPIO outputs to the PXA2xx MFP configuration? Paul Parsons
@ 2012-03-30  1:33 ` Haojian Zhuang
  2012-03-30 10:41   ` Paul Parsons
  2012-03-30 14:59 ` Igor Grinberg
  1 sibling, 1 reply; 14+ messages in thread
From: Haojian Zhuang @ 2012-03-30  1:33 UTC (permalink / raw)
  To: linux-arm-kernel

On Thu, Mar 29, 2012 at 2:12 AM, Paul Parsons <lost.distance@yahoo.com> wrote:
> On PXA2xx platforms, the MFP API (described in Documentation/arm/pxa/mfp.txt)
> provides values for the following:
>
> 1. GPIO inputs (e.g. GPIO105_GPIO).
> 2. Alternate function inputs (e.g. GPIO105_CIF_DD_1).
> 3. Alternate function outputs (e.g. GPIO105_KP_MKOUT_2).
>
> It does not provide values for GPIO outputs (i.e. AF0 outputs).
>
> One cannot use the macro used by the MFP API internally - MFP_CFG_OUT() - to
> define new GPIO output values, since that macro is forbidden in platform code.
>
> Without the ability to add GPIO outputs to the MFP configuration, it is not
> possible to drive GPIO outputs high during sleep mode.
>
> This would be useful, for example, on the hx4700 platform, where driving the
> infrared powerdown GPIO 105 high during sleep mode would save some mA.
>
> So my question is: what method should one use to add GPIO outputs to the MFP
> configuration?
>
> One possible method, namely manually defining values in the platform code:
>
> ? ? ? ?MFP_PIN_GPIO105 | MFP_AF0 | MFP_DIR_OUT | MFP_LPM_DRIVE_HIGH,
>
> is essentially no different from using the forbidden MFP_CFG_OUT() macro.
>

Does MFP_CFG_OUT() help you? This macro is defined in mfp-pxa2xx.h.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-30  1:33 ` Haojian Zhuang
@ 2012-03-30 10:41   ` Paul Parsons
  2012-03-30 13:25     ` Haojian Zhuang
  0 siblings, 1 reply; 14+ messages in thread
From: Paul Parsons @ 2012-03-30 10:41 UTC (permalink / raw)
  To: linux-arm-kernel

--- On Fri, 30/3/12, Haojian Zhuang <haojian.zhuang@gmail.com> wrote:
> On Thu, Mar 29, 2012 at 2:12 AM, Paul
> Parsons <lost.distance@yahoo.com>
> wrote:
> > On PXA2xx platforms, the MFP API (described in
> Documentation/arm/pxa/mfp.txt)
> > provides values for the following:
> >
> > 1. GPIO inputs (e.g. GPIO105_GPIO).
> > 2. Alternate function inputs (e.g. GPIO105_CIF_DD_1).
> > 3. Alternate function outputs (e.g.
> GPIO105_KP_MKOUT_2).
> >
> > It does not provide values for GPIO outputs (i.e. AF0
> outputs).
> >
> > One cannot use the macro used by the MFP API internally
> - MFP_CFG_OUT() - to
> > define new GPIO output values, since that macro is
> forbidden in platform code.
> >
> > Without the ability to add GPIO outputs to the MFP
> configuration, it is not
> > possible to drive GPIO outputs high during sleep mode.
> >
> > This would be useful, for example, on the hx4700
> platform, where driving the
> > infrared powerdown GPIO 105 high during sleep mode
> would save some mA.
> >
> > So my question is: what method should one use to add
> GPIO outputs to the MFP
> > configuration?
> >
> > One possible method, namely manually defining values in
> the platform code:
> >
> > ? ? ? ?MFP_PIN_GPIO105 | MFP_AF0 | MFP_DIR_OUT |
> MFP_LPM_DRIVE_HIGH,
> >
> > is essentially no different from using the forbidden
> MFP_CFG_OUT() macro.
> >
> 
> Does MFP_CFG_OUT() help you? This macro is defined in
> mfp-pxa2xx.h.

Yes, MFP_CFG_OUT() does help. But it has been pointed out that
MFP_CFG_OUT() is not allowed to be used in board support code:

http://lists.infradead.org/pipermail/linux-arm-kernel/2012-February/086456.html

Is that no longer true?

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-30 10:41   ` Paul Parsons
@ 2012-03-30 13:25     ` Haojian Zhuang
  2012-03-30 14:30       ` Paul Parsons
  0 siblings, 1 reply; 14+ messages in thread
From: Haojian Zhuang @ 2012-03-30 13:25 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Mar 30, 2012 at 6:41 PM, Paul Parsons <lost.distance@yahoo.com> wrote:
> --- On Fri, 30/3/12, Haojian Zhuang <haojian.zhuang@gmail.com> wrote:
>> On Thu, Mar 29, 2012 at 2:12 AM, Paul
>> Parsons <lost.distance@yahoo.com>
>> wrote:
>> > On PXA2xx platforms, the MFP API (described in
>> Documentation/arm/pxa/mfp.txt)
>> > provides values for the following:
>> >
>> > 1. GPIO inputs (e.g. GPIO105_GPIO).
>> > 2. Alternate function inputs (e.g. GPIO105_CIF_DD_1).
>> > 3. Alternate function outputs (e.g.
>> GPIO105_KP_MKOUT_2).
>> >
>> > It does not provide values for GPIO outputs (i.e. AF0
>> outputs).
>> >
>> > One cannot use the macro used by the MFP API internally
>> - MFP_CFG_OUT() - to
>> > define new GPIO output values, since that macro is
>> forbidden in platform code.
>> >
>> > Without the ability to add GPIO outputs to the MFP
>> configuration, it is not
>> > possible to drive GPIO outputs high during sleep mode.
>> >
>> > This would be useful, for example, on the hx4700
>> platform, where driving the
>> > infrared powerdown GPIO 105 high during sleep mode
>> would save some mA.
>> >
>> > So my question is: what method should one use to add
>> GPIO outputs to the MFP
>> > configuration?
>> >
>> > One possible method, namely manually defining values in
>> the platform code:
>> >
>> > ? ? ? ?MFP_PIN_GPIO105 | MFP_AF0 | MFP_DIR_OUT |
>> MFP_LPM_DRIVE_HIGH,
>> >
>> > is essentially no different from using the forbidden
>> MFP_CFG_OUT() macro.
>> >
>>
>> Does MFP_CFG_OUT() help you? This macro is defined in
>> mfp-pxa2xx.h.
>
> Yes, MFP_CFG_OUT() does help. But it has been pointed out that
> MFP_CFG_OUT() is not allowed to be used in board support code:
>
> http://lists.infradead.org/pipermail/linux-arm-kernel/2012-February/086456.html
>
> Is that no longer true?

I'm sorry that I messed it. Since GPIOxx_GPIO is always defined as MFP_CFG_IN().
It seems that you're blocked to specify MFP_CFG_OUT().

Actually it's not a problem. While you're using it as output, you must
assign special
usage for this pin, like some peripheral rest signal. So I think that
you can define new
macro GPIOxx_yy() in mfp-pxa27x.h, like GPIO9_HZ_CLK(). Is it meaningful?

Best Regards
Haojian

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-30 13:25     ` Haojian Zhuang
@ 2012-03-30 14:30       ` Paul Parsons
  2012-03-30 14:50         ` Haojian Zhuang
  0 siblings, 1 reply; 14+ messages in thread
From: Paul Parsons @ 2012-03-30 14:30 UTC (permalink / raw)
  To: linux-arm-kernel

--- On Fri, 30/3/12, Haojian Zhuang <haojian.zhuang@gmail.com> wrote:
> On Fri, Mar 30, 2012 at 6:41 PM, Paul
> Parsons <lost.distance@yahoo.com>
> wrote:
> > --- On Fri, 30/3/12, Haojian Zhuang <haojian.zhuang@gmail.com>
> wrote:
> >> On Thu, Mar 29, 2012 at 2:12 AM, Paul
> >> Parsons <lost.distance@yahoo.com>
> >> wrote:
> >> > On PXA2xx platforms, the MFP API (described
> in
> >> Documentation/arm/pxa/mfp.txt)
> >> > provides values for the following:
> >> >
> >> > 1. GPIO inputs (e.g. GPIO105_GPIO).
> >> > 2. Alternate function inputs (e.g.
> GPIO105_CIF_DD_1).
> >> > 3. Alternate function outputs (e.g.
> >> GPIO105_KP_MKOUT_2).
> >> >
> >> > It does not provide values for GPIO outputs
> (i.e. AF0
> >> outputs).
> >> >
> >> > One cannot use the macro used by the MFP API
> internally
> >> - MFP_CFG_OUT() - to
> >> > define new GPIO output values, since that
> macro is
> >> forbidden in platform code.
> >> >
> >> > Without the ability to add GPIO outputs to the
> MFP
> >> configuration, it is not
> >> > possible to drive GPIO outputs high during
> sleep mode.
> >> >
> >> > This would be useful, for example, on the
> hx4700
> >> platform, where driving the
> >> > infrared powerdown GPIO 105 high during sleep
> mode
> >> would save some mA.
> >> >
> >> > So my question is: what method should one use
> to add
> >> GPIO outputs to the MFP
> >> > configuration?
> >> >
> >> > One possible method, namely manually defining
> values in
> >> the platform code:
> >> >
> >> > ? ? ? ?MFP_PIN_GPIO105 | MFP_AF0 |
> MFP_DIR_OUT |
> >> MFP_LPM_DRIVE_HIGH,
> >> >
> >> > is essentially no different from using the
> forbidden
> >> MFP_CFG_OUT() macro.
> >> >
> >>
> >> Does MFP_CFG_OUT() help you? This macro is defined
> in
> >> mfp-pxa2xx.h.
> >
> > Yes, MFP_CFG_OUT() does help. But it has been pointed
> out that
> > MFP_CFG_OUT() is not allowed to be used in board
> support code:
> >
> > http://lists.infradead.org/pipermail/linux-arm-kernel/2012-February/086456.html
> >
> > Is that no longer true?
> 
> I'm sorry that I messed it. Since GPIOxx_GPIO is always
> defined as MFP_CFG_IN().
> It seems that you're blocked to specify MFP_CFG_OUT().
> 
> Actually it's not a problem. While you're using it as
> output, you must
> assign special
> usage for this pin, like some peripheral rest signal. So I
> think that
> you can define new
> macro GPIOxx_yy() in mfp-pxa27x.h, like GPIO9_HZ_CLK(). Is
> it meaningful?

The GPIO output value I wish to add is specific to the hx4700 platform;
it is not defined in any PXA27x documentation.

Is it acceptable to add such platform-specific values to the generic
mfp-pxa27x.h file?

Regards,
Paul

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-30 14:30       ` Paul Parsons
@ 2012-03-30 14:50         ` Haojian Zhuang
  0 siblings, 0 replies; 14+ messages in thread
From: Haojian Zhuang @ 2012-03-30 14:50 UTC (permalink / raw)
  To: linux-arm-kernel

>
> The GPIO output value I wish to add is specific to the hx4700 platform;
> it is not defined in any PXA27x documentation.
>
> Is it acceptable to add such platform-specific values to the generic
> mfp-pxa27x.h file?
>
Unless we append a new macro to resolve this issue. But I don't want to
put too much effort on MFP code. I'm planning to migrate to pinmux driver
since it could integrate with gpio and suspend code better.

Actually I appended pinmux driver for pxa3xx/mmp. They could be found
in linux-next tree. For next stage, I'll add support for DT and suspend.
If you like, you can also add pxa2xx support.

So I prefer you change mfp-pxa27x.h directly.

Best Regards
Haojian

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-28 18:12 How to add GPIO outputs to the PXA2xx MFP configuration? Paul Parsons
  2012-03-30  1:33 ` Haojian Zhuang
@ 2012-03-30 14:59 ` Igor Grinberg
  2012-03-30 15:06   ` Paul Parsons
  1 sibling, 1 reply; 14+ messages in thread
From: Igor Grinberg @ 2012-03-30 14:59 UTC (permalink / raw)
  To: linux-arm-kernel

On 03/28/12 20:12, Paul Parsons wrote:
> On PXA2xx platforms, the MFP API (described in Documentation/arm/pxa/mfp.txt)
> provides values for the following:
> 
> 1. GPIO inputs (e.g. GPIO105_GPIO).
> 2. Alternate function inputs (e.g. GPIO105_CIF_DD_1).
> 3. Alternate function outputs (e.g. GPIO105_KP_MKOUT_2).
> 
> It does not provide values for GPIO outputs (i.e. AF0 outputs).
> 
> One cannot use the macro used by the MFP API internally - MFP_CFG_OUT() - to
> define new GPIO output values, since that macro is forbidden in platform code.
> 
> Without the ability to add GPIO outputs to the MFP configuration, it is not
> possible to drive GPIO outputs high during sleep mode.
> 
> This would be useful, for example, on the hx4700 platform, where driving the
> infrared powerdown GPIO 105 high during sleep mode would save some mA.
> 
> So my question is: what method should one use to add GPIO outputs to the MFP
> configuration?
> 
> One possible method, namely manually defining values in the platform code:
> 
> 	MFP_PIN_GPIO105 | MFP_AF0 | MFP_DIR_OUT | MFP_LPM_DRIVE_HIGH,

Have you tried:
GPIO105_GPIO | MFP_LPM_DRIVE_HIGH,
?

This way it works on other boards.


-- 
Regards,
Igor.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-30 14:59 ` Igor Grinberg
@ 2012-03-30 15:06   ` Paul Parsons
  2012-03-30 15:28     ` Igor Grinberg
  2012-03-30 15:34     ` Igor Grinberg
  0 siblings, 2 replies; 14+ messages in thread
From: Paul Parsons @ 2012-03-30 15:06 UTC (permalink / raw)
  To: linux-arm-kernel

--- On Fri, 30/3/12, Igor Grinberg <grinberg@compulab.co.il> wrote:
> On 03/28/12 20:12, Paul Parsons
> wrote:
> > On PXA2xx platforms, the MFP API (described in
> Documentation/arm/pxa/mfp.txt)
> > provides values for the following:
> > 
> > 1. GPIO inputs (e.g. GPIO105_GPIO).
> > 2. Alternate function inputs (e.g. GPIO105_CIF_DD_1).
> > 3. Alternate function outputs (e.g.
> GPIO105_KP_MKOUT_2).
> > 
> > It does not provide values for GPIO outputs (i.e. AF0
> outputs).
> > 
> > One cannot use the macro used by the MFP API internally
> - MFP_CFG_OUT() - to
> > define new GPIO output values, since that macro is
> forbidden in platform code.
> > 
> > Without the ability to add GPIO outputs to the MFP
> configuration, it is not
> > possible to drive GPIO outputs high during sleep mode.
> > 
> > This would be useful, for example, on the hx4700
> platform, where driving the
> > infrared powerdown GPIO 105 high during sleep mode
> would save some mA.
> > 
> > So my question is: what method should one use to add
> GPIO outputs to the MFP
> > configuration?
> > 
> > One possible method, namely manually defining values in
> the platform code:
> > 
> > ??? MFP_PIN_GPIO105 | MFP_AF0 |
> MFP_DIR_OUT | MFP_LPM_DRIVE_HIGH,
> 
> Have you tried:
> GPIO105_GPIO | MFP_LPM_DRIVE_HIGH,
> ?
> 
> This way it works on other boards.

Hello Igor,

GPIO105_GPIO expands to a GPIO input - MFP_CFG_IN(GPIO105, AF0) -
not an output.

Regards,
Paul

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-30 15:06   ` Paul Parsons
@ 2012-03-30 15:28     ` Igor Grinberg
  2012-03-30 15:34     ` Igor Grinberg
  1 sibling, 0 replies; 14+ messages in thread
From: Igor Grinberg @ 2012-03-30 15:28 UTC (permalink / raw)
  To: linux-arm-kernel

On 03/30/12 18:06, Paul Parsons wrote:
> --- On Fri, 30/3/12, Igor Grinberg <grinberg@compulab.co.il> wrote:
>> On 03/28/12 20:12, Paul Parsons
>> wrote:
>>> On PXA2xx platforms, the MFP API (described in
>> Documentation/arm/pxa/mfp.txt)
>>> provides values for the following:
>>>
>>> 1. GPIO inputs (e.g. GPIO105_GPIO).
>>> 2. Alternate function inputs (e.g. GPIO105_CIF_DD_1).
>>> 3. Alternate function outputs (e.g.
>> GPIO105_KP_MKOUT_2).
>>>
>>> It does not provide values for GPIO outputs (i.e. AF0
>> outputs).
>>>
>>> One cannot use the macro used by the MFP API internally
>> - MFP_CFG_OUT() - to
>>> define new GPIO output values, since that macro is
>> forbidden in platform code.
>>>
>>> Without the ability to add GPIO outputs to the MFP
>> configuration, it is not
>>> possible to drive GPIO outputs high during sleep mode.
>>>
>>> This would be useful, for example, on the hx4700
>> platform, where driving the
>>> infrared powerdown GPIO 105 high during sleep mode
>> would save some mA.
>>>
>>> So my question is: what method should one use to add
>> GPIO outputs to the MFP
>>> configuration?
>>>
>>> One possible method, namely manually defining values in
>> the platform code:
>>>
>>>     MFP_PIN_GPIO105 | MFP_AF0 |
>> MFP_DIR_OUT | MFP_LPM_DRIVE_HIGH,
>>
>> Have you tried:
>> GPIO105_GPIO | MFP_LPM_DRIVE_HIGH,
>> ?
>>
>> This way it works on other boards.
> 
> Hello Igor,
> 
> GPIO105_GPIO expands to a GPIO input - MFP_CFG_IN(GPIO105, AF0) -
> not an output.

Yeah, I know... but read in mfp-pxa2xx.h, lines 6-20:
/*
 * the following MFP_xxx bit definitions in mfp.h are re-used for pxa2xx:
 *
 *  MFP_PIN(x)
 *  MFP_AFx
 *  MFP_LPM_DRIVE_{LOW, HIGH}
 *  MFP_LPM_EDGE_x
 *
 * other MFP_x bit definitions will be ignored
 *
 * and adds the below two bits specifically for pxa2xx:
 *
 * bit     23 - Input/Output (PXA2xx specific)
 * bit     24 - Wakeup Enable(PXA2xx specific)
 */

Also, PXA2xx h/w does not have an MFP registers, but only AF setting regs,
So the whole MFP for PXA2xx is only to conform to newer "PXA" platform features...

-- 
Regards,
Igor.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-30 15:06   ` Paul Parsons
  2012-03-30 15:28     ` Igor Grinberg
@ 2012-03-30 15:34     ` Igor Grinberg
  2012-03-30 15:52       ` Paul Parsons
  1 sibling, 1 reply; 14+ messages in thread
From: Igor Grinberg @ 2012-03-30 15:34 UTC (permalink / raw)
  To: linux-arm-kernel



On 03/30/12 18:06, Paul Parsons wrote:
> --- On Fri, 30/3/12, Igor Grinberg <grinberg@compulab.co.il> wrote:
>> On 03/28/12 20:12, Paul Parsons
>> wrote:
>>> On PXA2xx platforms, the MFP API (described in
>> Documentation/arm/pxa/mfp.txt)
>>> provides values for the following:
>>>
>>> 1. GPIO inputs (e.g. GPIO105_GPIO).
>>> 2. Alternate function inputs (e.g. GPIO105_CIF_DD_1).
>>> 3. Alternate function outputs (e.g.
>> GPIO105_KP_MKOUT_2).
>>>
>>> It does not provide values for GPIO outputs (i.e. AF0
>> outputs).
>>>
>>> One cannot use the macro used by the MFP API internally
>> - MFP_CFG_OUT() - to
>>> define new GPIO output values, since that macro is
>> forbidden in platform code.
>>>
>>> Without the ability to add GPIO outputs to the MFP
>> configuration, it is not
>>> possible to drive GPIO outputs high during sleep mode.
>>>
>>> This would be useful, for example, on the hx4700
>> platform, where driving the
>>> infrared powerdown GPIO 105 high during sleep mode
>> would save some mA.
>>>
>>> So my question is: what method should one use to add
>> GPIO outputs to the MFP
>>> configuration?
>>>
>>> One possible method, namely manually defining values in
>> the platform code:
>>>
>>>     MFP_PIN_GPIO105 | MFP_AF0 |
>> MFP_DIR_OUT | MFP_LPM_DRIVE_HIGH,
>>
>> Have you tried:
>> GPIO105_GPIO | MFP_LPM_DRIVE_HIGH,
>> ?
>>
>> This way it works on other boards.
> 
> Hello Igor,
> 
> GPIO105_GPIO expands to a GPIO input - MFP_CFG_IN(GPIO105, AF0) -
> not an output.

Yeah, I know... but read in mfp-pxa2xx.h, lines 6-20:
/*
 * the following MFP_xxx bit definitions in mfp.h are re-used for pxa2xx:
 *
 *  MFP_PIN(x)
 *  MFP_AFx
 *  MFP_LPM_DRIVE_{LOW, HIGH}
 *  MFP_LPM_EDGE_x
 *
 * other MFP_x bit definitions will be ignored
 *
 * and adds the below two bits specifically for pxa2xx:
 *
 * bit     23 - Input/Output (PXA2xx specific)
 * bit     24 - Wakeup Enable(PXA2xx specific)
 */

This means, that there is no difference between: MFP_CFG_IN and MFP_CFG_OUT for PXA2xx.
The reason for this is that PXA2xx h/w does not have a dedicated MFP registers.
All goes through the GPIO controller, so the whole MFP for PXA2xx is only to conform
to newer "PXA" platform features...


-- 
Regards,
Igor.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-30 15:34     ` Igor Grinberg
@ 2012-03-30 15:52       ` Paul Parsons
  2012-03-30 17:59         ` Igor Grinberg
  0 siblings, 1 reply; 14+ messages in thread
From: Paul Parsons @ 2012-03-30 15:52 UTC (permalink / raw)
  To: linux-arm-kernel

--- On Fri, 30/3/12, Igor Grinberg <grinberg@compulab.co.il> wrote:
> On 03/30/12 18:06, Paul Parsons wrote:
> > --- On Fri, 30/3/12, Igor Grinberg <grinberg@compulab.co.il>
> wrote:
> >> On 03/28/12 20:12, Paul Parsons
> >> wrote:
> >>> On PXA2xx platforms, the MFP API (described in
> >> Documentation/arm/pxa/mfp.txt)
> >>> provides values for the following:
> >>>
> >>> 1. GPIO inputs (e.g. GPIO105_GPIO).
> >>> 2. Alternate function inputs (e.g.
> GPIO105_CIF_DD_1).
> >>> 3. Alternate function outputs (e.g.
> >> GPIO105_KP_MKOUT_2).
> >>>
> >>> It does not provide values for GPIO outputs
> (i.e. AF0
> >> outputs).
> >>>
> >>> One cannot use the macro used by the MFP API
> internally
> >> - MFP_CFG_OUT() - to
> >>> define new GPIO output values, since that macro
> is
> >> forbidden in platform code.
> >>>
> >>> Without the ability to add GPIO outputs to the
> MFP
> >> configuration, it is not
> >>> possible to drive GPIO outputs high during
> sleep mode.
> >>>
> >>> This would be useful, for example, on the
> hx4700
> >> platform, where driving the
> >>> infrared powerdown GPIO 105 high during sleep
> mode
> >> would save some mA.
> >>>
> >>> So my question is: what method should one use
> to add
> >> GPIO outputs to the MFP
> >>> configuration?
> >>>
> >>> One possible method, namely manually defining
> values in
> >> the platform code:
> >>>
> >>>? ???MFP_PIN_GPIO105 |
> MFP_AF0 |
> >> MFP_DIR_OUT | MFP_LPM_DRIVE_HIGH,
> >>
> >> Have you tried:
> >> GPIO105_GPIO | MFP_LPM_DRIVE_HIGH,
> >> ?
> >>
> >> This way it works on other boards.
> > 
> > Hello Igor,
> > 
> > GPIO105_GPIO expands to a GPIO input -
> MFP_CFG_IN(GPIO105, AF0) -
> > not an output.
> 
> Yeah, I know... but read in mfp-pxa2xx.h, lines 6-20:
> /*
>  * the following MFP_xxx bit definitions in mfp.h are
> re-used for pxa2xx:
>  *
>  *? MFP_PIN(x)
>  *? MFP_AFx
>  *? MFP_LPM_DRIVE_{LOW, HIGH}
>  *? MFP_LPM_EDGE_x
>  *
>  * other MFP_x bit definitions will be ignored
>  *
>  * and adds the below two bits specifically for pxa2xx:
>  *
>  * bit? ???23 - Input/Output (PXA2xx
> specific)
>  * bit? ???24 - Wakeup Enable(PXA2xx
> specific)
>  */
> 
> This means, that there is no difference between: MFP_CFG_IN
> and MFP_CFG_OUT for PXA2xx.

The mfp-pxa2xx.c code says otherwise. It uses the MFP direction bit
to set the GPDR registers on entering sleep mode:

   353	static int pxa2xx_mfp_suspend(void)
   354	{
   355		int i;
        ...
   368		for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++) {
   369	
        ...
   375			GPDR(i * 32) = gpdr_lpm[i];
   376		}
   377		return 0;
   378	}

gpdr_lpm[] is initialized@startup to the current GPDR values, and
thereafter is updated by the value of the MFP_DIR_OUT bit in calls to
__mfp_config_gpio().

> The reason for this is that PXA2xx h/w does not have a
> dedicated MFP registers.
> All goes through the GPIO controller, so the whole MFP for
> PXA2xx is only to conform
> to newer "PXA" platform features...

Regards,
Paul

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-30 15:52       ` Paul Parsons
@ 2012-03-30 17:59         ` Igor Grinberg
  2012-03-30 21:13           ` Paul Parsons
  0 siblings, 1 reply; 14+ messages in thread
From: Igor Grinberg @ 2012-03-30 17:59 UTC (permalink / raw)
  To: linux-arm-kernel

On 03/30/12 18:52, Paul Parsons wrote:
> --- On Fri, 30/3/12, Igor Grinberg <grinberg@compulab.co.il> wrote:
>> On 03/30/12 18:06, Paul Parsons wrote:
>>> --- On Fri, 30/3/12, Igor Grinberg <grinberg@compulab.co.il>
>> wrote:
>>>> On 03/28/12 20:12, Paul Parsons
>>>> wrote:
>>>>> On PXA2xx platforms, the MFP API (described in
>>>> Documentation/arm/pxa/mfp.txt)
>>>>> provides values for the following:
>>>>>
>>>>> 1. GPIO inputs (e.g. GPIO105_GPIO).
>>>>> 2. Alternate function inputs (e.g.
>> GPIO105_CIF_DD_1).
>>>>> 3. Alternate function outputs (e.g.
>>>> GPIO105_KP_MKOUT_2).
>>>>>
>>>>> It does not provide values for GPIO outputs
>> (i.e. AF0
>>>> outputs).
>>>>>
>>>>> One cannot use the macro used by the MFP API
>> internally
>>>> - MFP_CFG_OUT() - to
>>>>> define new GPIO output values, since that macro
>> is
>>>> forbidden in platform code.
>>>>>
>>>>> Without the ability to add GPIO outputs to the
>> MFP
>>>> configuration, it is not
>>>>> possible to drive GPIO outputs high during
>> sleep mode.
>>>>>
>>>>> This would be useful, for example, on the
>> hx4700
>>>> platform, where driving the
>>>>> infrared powerdown GPIO 105 high during sleep
>> mode
>>>> would save some mA.
>>>>>
>>>>> So my question is: what method should one use
>> to add
>>>> GPIO outputs to the MFP
>>>>> configuration?
>>>>>
>>>>> One possible method, namely manually defining
>> values in
>>>> the platform code:
>>>>>
>>>>>      MFP_PIN_GPIO105 |
>> MFP_AF0 |
>>>> MFP_DIR_OUT | MFP_LPM_DRIVE_HIGH,
>>>>
>>>> Have you tried:
>>>> GPIO105_GPIO | MFP_LPM_DRIVE_HIGH,
>>>> ?
>>>>
>>>> This way it works on other boards.
>>>
>>> Hello Igor,
>>>
>>> GPIO105_GPIO expands to a GPIO input -
>> MFP_CFG_IN(GPIO105, AF0) -
>>> not an output.
>>
>> Yeah, I know... but read in mfp-pxa2xx.h, lines 6-20:
>> /*
>>  * the following MFP_xxx bit definitions in mfp.h are
>> re-used for pxa2xx:
>>  *
>>  *  MFP_PIN(x)
>>  *  MFP_AFx
>>  *  MFP_LPM_DRIVE_{LOW, HIGH}
>>  *  MFP_LPM_EDGE_x
>>  *
>>  * other MFP_x bit definitions will be ignored
>>  *
>>  * and adds the below two bits specifically for pxa2xx:
>>  *
>>  * bit     23 - Input/Output (PXA2xx
>> specific)
>>  * bit     24 - Wakeup Enable(PXA2xx
>> specific)
>>  */
>>
>> This means, that there is no difference between: MFP_CFG_IN
>> and MFP_CFG_OUT for PXA2xx.
> 
> The mfp-pxa2xx.c code says otherwise.

That's just great... outdated documentation...

> It uses the MFP direction bit
> to set the GPDR registers on entering sleep mode:
> 
>    353	static int pxa2xx_mfp_suspend(void)
>    354	{
>    355		int i;
>         ...
>    368		for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++) {
>    369	
>         ...
>    375			GPDR(i * 32) = gpdr_lpm[i];
>    376		}
>    377		return 0;
>    378	}
> 
> gpdr_lpm[] is initialized at startup to the current GPDR values, and
> thereafter is updated by the value of the MFP_DIR_OUT bit in calls to
> __mfp_config_gpio().

static int __mfp_config_gpio(unsigned gpio, unsigned long c)
{
	unsigned long gafr, mask = GPIO_bit(gpio);
	int bank = gpio_to_bank(gpio);
	int uorl = !!(gpio & 0x10); /* GAFRx_U or GAFRx_L ? */
	int shft = (gpio & 0xf) << 1;
	int fn = MFP_AF(c);
	int is_out = (c & MFP_DIR_OUT) ? 1 : 0;

[...]

	/* alternate function and direction@low power mode */
	switch (c & MFP_LPM_STATE_MASK) {
	case MFP_LPM_DRIVE_HIGH:
		PGSR(bank) |= mask;
		is_out = 1;
		break;
	case MFP_LPM_DRIVE_LOW:
		PGSR(bank) &= ~mask;
		is_out = 1;
		break;

And in the lines above, it gets overridden by MFP_LPM_DRIVE_*,
or am I missing something?
[...]

	if (is_out ^ gpio_desc[gpio].dir_inverted)
		gpdr_lpm[bank] |= mask;
	else
		gpdr_lpm[bank] &= ~mask;


So, I think,
GPIO105_GPIO | MFP_LPM_DRIVE_HIGH,
as I've proposed in my first email, should still work for you.

-- 
Regards,
Igor.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-30 17:59         ` Igor Grinberg
@ 2012-03-30 21:13           ` Paul Parsons
  2012-03-30 21:40             ` Paul Parsons
  0 siblings, 1 reply; 14+ messages in thread
From: Paul Parsons @ 2012-03-30 21:13 UTC (permalink / raw)
  To: linux-arm-kernel

--- On Fri, 30/3/12, Igor Grinberg <grinberg@compulab.co.il> wrote:
> On 03/30/12 18:52, Paul Parsons
> wrote:
> > --- On Fri, 30/3/12, Igor Grinberg <grinberg@compulab.co.il>
> wrote:
> >> On 03/30/12 18:06, Paul Parsons wrote:
> >>> --- On Fri, 30/3/12, Igor Grinberg <grinberg@compulab.co.il>
> >> wrote:
> >>>> On 03/28/12 20:12, Paul Parsons
> >>>> wrote:
> >>>>> On PXA2xx platforms, the MFP API
> (described in
> >>>> Documentation/arm/pxa/mfp.txt)
> >>>>> provides values for the following:
> >>>>>
> >>>>> 1. GPIO inputs (e.g. GPIO105_GPIO).
> >>>>> 2. Alternate function inputs (e.g.
> >> GPIO105_CIF_DD_1).
> >>>>> 3. Alternate function outputs (e.g.
> >>>> GPIO105_KP_MKOUT_2).
> >>>>>
> >>>>> It does not provide values for GPIO
> outputs
> >> (i.e. AF0
> >>>> outputs).
> >>>>>
> >>>>> One cannot use the macro used by the
> MFP API
> >> internally
> >>>> - MFP_CFG_OUT() - to
> >>>>> define new GPIO output values, since
> that macro
> >> is
> >>>> forbidden in platform code.
> >>>>>
> >>>>> Without the ability to add GPIO outputs
> to the
> >> MFP
> >>>> configuration, it is not
> >>>>> possible to drive GPIO outputs high
> during
> >> sleep mode.
> >>>>>
> >>>>> This would be useful, for example, on
> the
> >> hx4700
> >>>> platform, where driving the
> >>>>> infrared powerdown GPIO 105 high during
> sleep
> >> mode
> >>>> would save some mA.
> >>>>>
> >>>>> So my question is: what method should
> one use
> >> to add
> >>>> GPIO outputs to the MFP
> >>>>> configuration?
> >>>>>
> >>>>> One possible method, namely manually
> defining
> >> values in
> >>>> the platform code:
> >>>>>
> >>>>>? ? ? MFP_PIN_GPIO105 |
> >> MFP_AF0 |
> >>>> MFP_DIR_OUT | MFP_LPM_DRIVE_HIGH,
> >>>>
> >>>> Have you tried:
> >>>> GPIO105_GPIO | MFP_LPM_DRIVE_HIGH,
> >>>> ?
> >>>>
> >>>> This way it works on other boards.
> >>>
> >>> Hello Igor,
> >>>
> >>> GPIO105_GPIO expands to a GPIO input -
> >> MFP_CFG_IN(GPIO105, AF0) -
> >>> not an output.
> >>
> >> Yeah, I know... but read in mfp-pxa2xx.h, lines
> 6-20:
> >> /*
> >>? * the following MFP_xxx bit definitions in
> mfp.h are
> >> re-used for pxa2xx:
> >>? *
> >>? *? MFP_PIN(x)
> >>? *? MFP_AFx
> >>? *? MFP_LPM_DRIVE_{LOW, HIGH}
> >>? *? MFP_LPM_EDGE_x
> >>? *
> >>? * other MFP_x bit definitions will be
> ignored
> >>? *
> >>? * and adds the below two bits specifically
> for pxa2xx:
> >>? *
> >>? * bit? ???23 -
> Input/Output (PXA2xx
> >> specific)
> >>? * bit? ???24 - Wakeup
> Enable(PXA2xx
> >> specific)
> >>? */
> >>
> >> This means, that there is no difference between:
> MFP_CFG_IN
> >> and MFP_CFG_OUT for PXA2xx.
> > 
> > The mfp-pxa2xx.c code says otherwise.
> 
> That's just great... outdated documentation...
> 
> > It uses the MFP direction bit
> > to set the GPDR registers on entering sleep mode:
> > 
> >? ? 353??? static int
> pxa2xx_mfp_suspend(void)
> >? ? 354??? {
> >? ? 355??? ???
> int i;
> >? ? ? ???...
> >? ? 368??? ???
> for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++) {
> >? ? 369??? 
> >? ? ? ???...
> >? ? 375??? ???
> ??? GPDR(i * 32) = gpdr_lpm[i];
> >? ? 376??? ???
> }
> >? ? 377??? ???
> return 0;
> >? ? 378??? }
> > 
> > gpdr_lpm[] is initialized at startup to the current
> GPDR values, and
> > thereafter is updated by the value of the MFP_DIR_OUT
> bit in calls to
> > __mfp_config_gpio().
> 
> static int __mfp_config_gpio(unsigned gpio, unsigned long
> c)
> {
> ??? unsigned long gafr, mask =
> GPIO_bit(gpio);
> ??? int bank = gpio_to_bank(gpio);
> ??? int uorl = !!(gpio & 0x10); /*
> GAFRx_U or GAFRx_L ? */
> ??? int shft = (gpio & 0xf) << 1;
> ??? int fn = MFP_AF(c);
> ??? int is_out = (c & MFP_DIR_OUT) ? 1 :
> 0;
> 
> [...]
> 
> ??? /* alternate function and direction at
> low power mode */
> ??? switch (c & MFP_LPM_STATE_MASK) {
> ??? case MFP_LPM_DRIVE_HIGH:
> ??? ??? PGSR(bank) |= mask;
> ??? ??? is_out = 1;
> ??? ??? break;
> ??? case MFP_LPM_DRIVE_LOW:
> ??? ??? PGSR(bank) &=
> ~mask;
> ??? ??? is_out = 1;
> ??? ??? break;
> 
> And in the lines above, it gets overridden by
> MFP_LPM_DRIVE_*,
> or am I missing something?

No, that looks to be the case: the LPM states DRIVE_HIGH and DRIVE_LOW
override the sleep mode direction. I completely missed that.

> [...]
> 
> ??? if (is_out ^
> gpio_desc[gpio].dir_inverted)
> ??? ??? gpdr_lpm[bank] |=
> mask;
> ??? else
> ??? ??? gpdr_lpm[bank] &=
> ~mask;
> 
> 
> So, I think,
> GPIO105_GPIO | MFP_LPM_DRIVE_HIGH,
> as I've proposed in my first email, should still work for
> you.

Yes it should. Thanks.

Regards,
Paul

^ permalink raw reply	[flat|nested] 14+ messages in thread

* How to add GPIO outputs to the PXA2xx MFP configuration?
  2012-03-30 21:13           ` Paul Parsons
@ 2012-03-30 21:40             ` Paul Parsons
  0 siblings, 0 replies; 14+ messages in thread
From: Paul Parsons @ 2012-03-30 21:40 UTC (permalink / raw)
  To: linux-arm-kernel

--- On Fri, 30/3/12, Paul Parsons <lost.distance@yahoo.com> wrote:
> --- On Fri, 30/3/12, Igor Grinberg
> <grinberg@compulab.co.il>
> wrote:
> > On 03/30/12 18:52, Paul Parsons
> > wrote:
> > > --- On Fri, 30/3/12, Igor Grinberg <grinberg@compulab.co.il>
> > wrote:
> > >> On 03/30/12 18:06, Paul Parsons wrote:
> > >>> --- On Fri, 30/3/12, Igor Grinberg <grinberg@compulab.co.il>
> > >> wrote:
> > >>>> On 03/28/12 20:12, Paul Parsons
> > >>>> wrote:
> > >>>>> On PXA2xx platforms, the MFP API
> > (described in
> > >>>> Documentation/arm/pxa/mfp.txt)
> > >>>>> provides values for the
> following:
> > >>>>>
> > >>>>> 1. GPIO inputs (e.g.
> GPIO105_GPIO).
> > >>>>> 2. Alternate function inputs
> (e.g.
> > >> GPIO105_CIF_DD_1).
> > >>>>> 3. Alternate function outputs
> (e.g.
> > >>>> GPIO105_KP_MKOUT_2).
> > >>>>>
> > >>>>> It does not provide values for
> GPIO
> > outputs
> > >> (i.e. AF0
> > >>>> outputs).
> > >>>>>
> > >>>>> One cannot use the macro used by
> the
> > MFP API
> > >> internally
> > >>>> - MFP_CFG_OUT() - to
> > >>>>> define new GPIO output values,
> since
> > that macro
> > >> is
> > >>>> forbidden in platform code.
> > >>>>>
> > >>>>> Without the ability to add GPIO
> outputs
> > to the
> > >> MFP
> > >>>> configuration, it is not
> > >>>>> possible to drive GPIO outputs
> high
> > during
> > >> sleep mode.
> > >>>>>
> > >>>>> This would be useful, for example,
> on
> > the
> > >> hx4700
> > >>>> platform, where driving the
> > >>>>> infrared powerdown GPIO 105 high
> during
> > sleep
> > >> mode
> > >>>> would save some mA.
> > >>>>>
> > >>>>> So my question is: what method
> should
> > one use
> > >> to add
> > >>>> GPIO outputs to the MFP
> > >>>>> configuration?
> > >>>>>
> > >>>>> One possible method, namely
> manually
> > defining
> > >> values in
> > >>>> the platform code:
> > >>>>>
> > >>>>>? ? ? MFP_PIN_GPIO105 |
> > >> MFP_AF0 |
> > >>>> MFP_DIR_OUT | MFP_LPM_DRIVE_HIGH,
> > >>>>
> > >>>> Have you tried:
> > >>>> GPIO105_GPIO | MFP_LPM_DRIVE_HIGH,
> > >>>> ?
> > >>>>
> > >>>> This way it works on other boards.
> > >>>
> > >>> Hello Igor,
> > >>>
> > >>> GPIO105_GPIO expands to a GPIO input -
> > >> MFP_CFG_IN(GPIO105, AF0) -
> > >>> not an output.
> > >>
> > >> Yeah, I know... but read in mfp-pxa2xx.h,
> lines
> > 6-20:
> > >> /*
> > >>? * the following MFP_xxx bit definitions in
> > mfp.h are
> > >> re-used for pxa2xx:
> > >>? *
> > >>? *? MFP_PIN(x)
> > >>? *? MFP_AFx
> > >>? *? MFP_LPM_DRIVE_{LOW, HIGH}
> > >>? *? MFP_LPM_EDGE_x
> > >>? *
> > >>? * other MFP_x bit definitions will be
> > ignored
> > >>? *
> > >>? * and adds the below two bits specifically
> > for pxa2xx:
> > >>? *
> > >>? * bit? ???23 -
> > Input/Output (PXA2xx
> > >> specific)
> > >>? * bit? ???24 - Wakeup
> > Enable(PXA2xx
> > >> specific)
> > >>? */
> > >>
> > >> This means, that there is no difference
> between:
> > MFP_CFG_IN
> > >> and MFP_CFG_OUT for PXA2xx.
> > > 
> > > The mfp-pxa2xx.c code says otherwise.
> > 
> > That's just great... outdated documentation...
> > 
> > > It uses the MFP direction bit
> > > to set the GPDR registers on entering sleep mode:
> > > 
> > >? ? 353??? static int
> > pxa2xx_mfp_suspend(void)
> > >? ? 354??? {
> > >? ? 355??? ???
> > int i;
> > >? ? ? ???...
> > >? ? 368??? ???
> > for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++)
> {
> > >? ? 369??? 
> > >? ? ? ???...
> > >? ? 375??? ???
> > ??? GPDR(i * 32) = gpdr_lpm[i];
> > >? ? 376??? ???
> > }
> > >? ? 377??? ???
> > return 0;
> > >? ? 378??? }
> > > 
> > > gpdr_lpm[] is initialized at startup to the
> current
> > GPDR values, and
> > > thereafter is updated by the value of the
> MFP_DIR_OUT
> > bit in calls to
> > > __mfp_config_gpio().
> > 
> > static int __mfp_config_gpio(unsigned gpio, unsigned
> long
> > c)
> > {
> > ??? unsigned long gafr, mask =
> > GPIO_bit(gpio);
> > ??? int bank = gpio_to_bank(gpio);
> > ??? int uorl = !!(gpio & 0x10); /*
> > GAFRx_U or GAFRx_L ? */
> > ??? int shft = (gpio & 0xf) << 1;
> > ??? int fn = MFP_AF(c);
> > ??? int is_out = (c & MFP_DIR_OUT) ? 1 :
> > 0;
> > 
> > [...]
> > 
> > ??? /* alternate function and direction at
> > low power mode */
> > ??? switch (c & MFP_LPM_STATE_MASK) {
> > ??? case MFP_LPM_DRIVE_HIGH:
> > ??? ??? PGSR(bank) |= mask;
> > ??? ??? is_out = 1;
> > ??? ??? break;
> > ??? case MFP_LPM_DRIVE_LOW:
> > ??? ??? PGSR(bank) &=
> > ~mask;
> > ??? ??? is_out = 1;
> > ??? ??? break;
> > 
> > And in the lines above, it gets overridden by
> > MFP_LPM_DRIVE_*,
> > or am I missing something?
> 
> No, that looks to be the case: the LPM states DRIVE_HIGH and
> DRIVE_LOW
> override the sleep mode direction. I completely missed
> that.
> 
> > [...]
> > 
> > ??? if (is_out ^
> > gpio_desc[gpio].dir_inverted)
> > ??? ??? gpdr_lpm[bank] |=
> > mask;
> > ??? else
> > ??? ??? gpdr_lpm[bank] &=
> > ~mask;
> > 
> > 
> > So, I think,
> > GPIO105_GPIO | MFP_LPM_DRIVE_HIGH,
> > as I've proposed in my first email, should still work
> for
> > you.
> 
> Yes it should. Thanks.

However MFP_LPM_KEEP_OUTPUT does not do likewise, so for example:

    GPIO72_GPIO | MFP_LPM_KEEP_OUTPUT,

will set GPIO72 as an input in sleep mode. hmm...

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2012-03-30 21:40 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-28 18:12 How to add GPIO outputs to the PXA2xx MFP configuration? Paul Parsons
2012-03-30  1:33 ` Haojian Zhuang
2012-03-30 10:41   ` Paul Parsons
2012-03-30 13:25     ` Haojian Zhuang
2012-03-30 14:30       ` Paul Parsons
2012-03-30 14:50         ` Haojian Zhuang
2012-03-30 14:59 ` Igor Grinberg
2012-03-30 15:06   ` Paul Parsons
2012-03-30 15:28     ` Igor Grinberg
2012-03-30 15:34     ` Igor Grinberg
2012-03-30 15:52       ` Paul Parsons
2012-03-30 17:59         ` Igor Grinberg
2012-03-30 21:13           ` Paul Parsons
2012-03-30 21:40             ` Paul Parsons

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.