"Rajashekhara, Sudhakar" <[email protected]> writes:

> Dave,
>
>> I'll disagree with a few of Felipe's points here, and offer
>> a few other comments.
>> 
>> 
>> On Wednesday 10 December 2008, Felipe Balbi wrote:
>> > On Wed, Dec 10, 2008 at 03:35:28PM +0530, Sudhakar Rajashekhara wrote:
>> > > Generalizes dm644x pinmux.
>> > >
>> > > The existing pinmux layer works only when the PINMUX register has
>> single bit
>> > > field to enable the secondary function. DM646x can support secondary as
>> well
>> > > as tertiary pin functions. This new pinmux layer is similar to the one
>> being
>> > > used by OMAP architecture.
>> 
>> As I said before:  I think this is the right general idea.
>> 
>> Though for generality, I'd like to see at least partial
>> DM355 support here too ... that's a good way to help ensure
>> that DM644x-specific assumptions are minimized!  Minimally,
>> just add the other PINMUX registers and provide a table with
>> a few DM355 pinmux options (to be completed later).  Maybe
>> the same for DM646x too.
>
> I'll be adding the minimal DM646x and DM355 defines.
>
>> 
>> 
>> > but most likely you want something like:
>> >
>> > +#define MUX_REG(reg, mode_offset, mode_mask, mux_mode)       \
>> > +     {                                               \
>> > +             .mux_reg_name = "PINMUX"#reg,           \
>> > +             .mux_reg = PINMUX##reg,                 \
>> > +             .mask_offset = mode_offset,             \
>> > +             .mask = mode_mask,                      \
>> > +             .mode = mux_mode,                       \
>> > +     },
>> 
>> Or better yet:
>> 
>> +#define MUX_REG(reg, mode_offset, mode_mask, mux_mode) \
>> +  [SOC##_##reg] = { ...
>> 
>> then #define SOC to DM644X before the table of pinmux configs
>> for those chips, redefine to DM355 for its set, and so on.
>
> I will be leaving it as it is for now.

Please follow Dave's suggestion.  It will lead to much more readable
code when mulitple chips are present.

Kevin


>> 
>> 
>> > > +config DAVINCI_MUX_WARNINGS
>> > > +        bool "Warn about pins the bootloader didn't set up"
>> >
>> > I'd say we shouldn't rely on bootloader to setup mux config, so this
>> > would be quite useless.
>> 
>> Not relying on the boot loader is a good general policy;
>> but the thing with policies like that is that there are
>> sometimes good reasons to use different ones.  I have
>> no problems leaving this warning mechanism in place, and
>> would certainly prefer to have the option of leaving all
>> the pinmux code out of a kernel.
>> 
>> 
>> > >   * 2007 (c) MontaVista Software, Inc.
>> 
>> Really?  Not TI?  And no TI copyright at all??
>
> I'll be adding TI copyright.
>
>> 
>> 
>> > >  #ifndef __ASM_ARCH_MUX_H
>> > >  #define __ASM_ARCH_MUX_H
>> 
>> It's not <asm/arch/mux.h> it's <mach/mux.h> so I'd suggest
>> using a different #include guard.  :)
>> 
>
> Agree.
>
>> 
>> > > --- a/arch/arm/mach-davinci/mux.c
>> > > +++ b/arch/arm/mach-davinci/mux.c
>> > > @@ -1,8 +1,12 @@
>> > >  /*
>> > > - * DaVinci pin multiplexing configurations
>> > > + * Utility to set the DAVINCI MUX register from a table in mux.h
>> >
>> > the table should probably be chip-specific.
>> 
>> And it is!  But it's in mux_cfg.c ... which might eventually
>> get split into chip-specific files, though I don't see a need
>> to do that yet.  It's just a bunch of data, most of which gets
>> compiled out because non-development kernels don't support very
>> many chips (usually just one).
>> 
>> 
>> > > +/*
>> > > + * Sets the DAVINCI MUX register based on the table
>> > > + */
>> > > +int __init_or_module davinci_cfg_reg(const unsigned long index)
>> >
>> > this cannot be called by modules, or at least shouldn't. So __init
>> > should be safe.
>> 
>> Disagree for two reasons.  One is just the observation
>> that developers on platforms which started with such
>> code living in __init sections have needed to change
>> that so that it could be called later.  As I noted
>> earlier:  this kind of policy needs exceptions.
>> (Like being able to briefly use a pin as a GPIO,
>> before re-associating it with some controller.)
>> 
>> The other is that DaVinci (at least DM6446) has at
>> least one fairly common reason to want to tweak the
>> pinmux settings at runtime.  IDE and NOR flash are
>> mutually exclusive ... systems that need to use
>> both of them are going to need to remux things.
>> 
>> 
>> > > +   if (index >= pin_table_sz) {
>> > > +           printk(KERN_ERR "Invalid pin mux index: %lu (%lu)\n",
>> > > +                  index, pin_table_sz);
>> > > +           dump_stack();
>> > > +           return -ENODEV;
>> > > +   }
>> > > +
>> > > +   cfg = (struct pin_config *)&pin_table[index];
>> 
>> No cast needed ... and the paranoia in me wants to see
>> the pinmux tables always be "const" data, to minimize
>> ways that memory-trashing bugs can cause major goofage.
>> 
>> Also check to make sure that what cfg points to is
>> valid.  Now that you've moved away from relying on
>> the enum order being the same as the table order (yay!
>> another type of programmer oversight becomes innocuous!),
>> there's the possibility for a table entry not to have
>> been initialized (except to all-zeroes).
>
> Agree.
>
> Regards, Sudhakar
>
>> 
>> 
>> > > +void __init davinci_mux_init(void)
>> > > +{
>> > > +   if (cpu_is_davinci_dm644x())
>> > > +           davinci_mux_register(davinci_dm644x_pins,
>> > > +                                ARRAY_SIZE(davinci_dm644x_pins));
>> > > +   else
>> > > +           printk(KERN_ERR "PSC: no mux hook for this CPU\n");
>> >
>> > you should pass the mux table as a parameter to this function.
>> 
>> I think it's simpler to do it this way.  It *could* be done with
>> several CPU-specific files calling to davinci_mux_register(),
>> but there's no need to do that ... if this file holds tables
>> for dm644x, dm355, dm646x and so on, it's clear enough and will
>> not cause maintainance headaches for some time.
>> 
>> - Dave_______________________________________________
> Davinci-linux-open-source mailing list
> [email protected]
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to