[U-Boot] [PATCH 3/6] serial: Reorder serial_assign()

Allen Martin amartin at nvidia.com
Thu Oct 25 23:31:26 CEST 2012


On Thu, Oct 25, 2012 at 02:27:24PM -0700, Tom Rini wrote:
> * PGP Signed by an unknown key
> 
> On 10/25/12 14:19, Allen Martin wrote:
> > On Thu, Oct 25, 2012 at 02:02:55PM -0700, Simon Glass wrote:
> >> Hi,
> >> 
> >> On Thu, Oct 25, 2012 at 12:03 PM, Marek Vasut <marex at denx.de> 
> >> wrote:
> >>> Dear Simon Glass,
> >>> 
> >>>> Hi,
> >>>> 
> >>>> On Mon, Oct 22, 2012 at 10:23 AM, Allen Martin 
> >>>> <amartin at nvidia.com> wrote:
> >>>>> On Sat, Oct 20, 2012 at 01:19:00AM -0700, Marek Vasut 
> >>>>> wrote:
> >>>>>> Dear Allen Martin,
> >>>>>> 
> >>>>>> [...]
> >>>>>> 
> >>>>>>> Hi Marek, the change to return value here broke serial
> >>>>>>>  output on tegra.  What I see is that the serial device
> >>>>>>>  name (s->name) is "eserial0" as set by 
> >>>>>>> serial_ns16550.c, and the name passed in from the 
> >>>>>>> stdout environment is "serial" so they don't match and
> >>>>>>>  it fails.  This always used to be ok because the 
> >>>>>>> return code didn't indicate failure and iomux_doenv() 
> >>>>>>> would continue on happily, but now it causes 
> >>>>>>> iomux_doenv() to fail and no printfs() work after 
> >>>>>>> that.
> >>>>>>> 
> >>>>>>> Not sure what the right fix is, should stdout really be
> >>>>>>> set to "eserial0"?  It seems "serial" should mean "the
> >>>>>>> default serial device" which for the normal case is the
> >>>>>>> one and only device.
> >>>>>> 
> >>>>>> Looking at the source, the obvious course of action is to
> >>>>>> fix iomux.c .
> >>>>> 
> >>>>> I've been looking at this call to serial_assign() from 
> >>>>> iomux.c and I'm not convinced this code does anything 
> >>>>> meaningful at all.  It passes the name of a struct 
> >>>>> stdio_dev device which serial_assign() then tries to match
> >>>>>  against the registered struct serial_devices, which will 
> >>>>> never match.
> >>>>> 
> >>>>> What I don't understand is the case where you have a board
> >>>>>  that actually has more than one physical serial port and 
> >>>>> how the mapping from stdio_dev to serial_device happens.
> >>>>> 
> >>>>> Also, looking at the code to cmd_nvedit, I think your 
> >>>>> change also broke "setenv stdout" for boards that don't 
> >>>>> define CONFIG_CONSOLE_MUX.  We always have this on for 
> >>>>> tegra, so we don't go down this code path, but it looks 
> >>>>> identical to the code in iomux.c
> >>>> 
> >>>> Sorry if I missed it - what was the resolution here? Should 
> >>>> we revert that change?
> >>> 
> >>> Definitelly not. We should fix the iomux.c , possibly by 
> >>> flipping the inequation mark as a short term solution.
> >> 
> >> OK that's fine. Is someone working on a patch?
> >> 
> > 
> > I'll send out my proposal for a patch.  Unfortunately I don't have
> >  a board with multiple serial ports to correctly test 
> > CONFIG_SERIAL_MULTI
> 
> Andrew's recent set of patches for am335x means I do.  If I follow
> correctly, you're describing the case where >1 port for a driver is
> known, we default to say 0 but want to use 1, via the env?

Yes, exactly.  I assume that's what the current calls to
serial_assign() were supposed to be doing, but weren't.

-Allen
-- 
nvpublic


More information about the U-Boot mailing list