[U-Boot] [PATCH v2 6/6] dm: sunxi: Add support for serial using driver model

Hans de Goede hdegoede at redhat.com
Thu Oct 30 10:36:35 CET 2014


Hi,

On 10/30/2014 10:08 AM, Ian Campbell wrote:
> On Wed, 2014-10-29 at 13:28 -0600, Simon Glass wrote:
>>> In the meantime could we somehow replace/augment the #ifdef chain in
>>> gpio_init with something keyed off the stdout alias perhaps?
>>
>> Tegra has code to convert a device interrupt number (which uniquely
>> identifies a peripheral in that SoC) to an internal peripheral ID,
>> then these is a function which can enable a peripheral given the ID
>> (funcmux). In some cases you could have multiple options for the
>> funcmux, but there is no easy way to support this.
> 
> I think that although there are multiple options for some functions
> (UARTs come to mind) we haven't yet found the need to make any dynamic
> choices, so it's all static right now.
> 
>>  But this approach
>> might be good enough for sunxi. We can easily write the function to
>> enable the pins for a particular port, and this could go in
>> arch/arm/...sunxi/ perhaps.
> 
> I'm ok with it so long as it isn't going to stand in the way of proper
> dt based pinmux in the future.
> 
> One way to help with that might be to use the allwinner,function
> property in DT as the funcmux name.
> 
> Hans, what do you think?

I'm not 100% sure what you're suggesting here, are you suggesting to
have a 1:1 mapping between function names as stored in allwinner,function
in dts and the value to pass to sunxi_gpio_set_cfgpin ?

This is not going to fly very far, e.g. the "uart0" function has cfg value
of 2 on portb while it has a value of 4 on portf.

So we will really need a sunxi specific function to go from port-no +
allwinner,function-string to a sunxi_gpio_set_cfgpin function.

I think the best thing we can do to not make this function too big is do 3
things:

1) Have a table which only contains mapping where the cfg value is not 2,
most ipblocks have a "primary" gpio port they are intended to be used with,
and this usage maps to a cfg value of 2, and most designs use this, so have
a list of exceptions and return 2 otherwise, this will make debugging of
issues where the mux is not setup a bit harder, but it will keep things a
lot smaller.

2) Only but things in there which are actually used by boards, or we expect
to need in the near future.

3) Have #ifndef CONFIG_SPL_BUILD .. #endif around anything but mmc / uart
entries in that table.

Together those should keep things small enough for the SPL.

Regards,

Hans




More information about the U-Boot mailing list