Re: [PATCH] serial: max310x: Check the clock readiness

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 21, 2018 at 08:56:15AM +0200, Jan Kundrát wrote:
> On pátek 8. června 2018 14:27:00 CEST, Jan Kundrát wrote:
> > This chip has a diagnostics status bit informing about the state and
> > stability of the clock subsystem. According to the datasheet (STSint
> > register, bit 5, ClockReady), this bit works with the crystal
> > oscillator, but even without the PLL. Therefore:
> > 
> > - ensure that the clock check is done even when PLL is not active
> > - warn when the chip thinks that the clock is not ready yet
> > 
> > There are HW features which would let us wait asynchronously (there's a
> > maskable IRQ for that bit), but I think that even this simple check is a
> > net improvement. It would have saved me two days of debugging :).
> > 
> > Signed-off-by: Jan Kundrát <jan.kundrat@xxxxxxxxx>
> > ---
> >  drivers/tty/serial/max310x.c | 14 ++++++++++----
> >  1 file changed, 10 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c
> > index efe55a1a0615..3db48fcd6068 100644
> > --- a/drivers/tty/serial/max310x.c
> > +++ b/drivers/tty/serial/max310x.c
> > @@ -531,8 +531,8 @@ static int max310x_update_best_err(unsigned long f,
> > long *besterr)
> >  	return 1;
> >  }
> > -static int max310x_set_ref_clk(struct max310x_port *s, unsigned long freq,
> > -			       bool xtal)
> > +static int max310x_set_ref_clk(struct device *dev, struct max310x_port *s,
> > +			       unsigned long freq, bool xtal)
> >  {
> >  	unsigned int div, clksrc, pllcfg = 0;
> >  	long besterr = -1;
> > @@ -588,8 +588,14 @@ static int max310x_set_ref_clk(struct max310x_port
> > *s, unsigned long freq,
> >  	regmap_write(s->regmap, MAX310X_CLKSRC_REG, clksrc);
> >  	/* Wait for crystal */
> > -	if (pllcfg && xtal)
> > +	if (xtal) {
> > +		unsigned int val;
> >  		msleep(10);
> > +		regmap_read(s->regmap, MAX310X_STS_IRQSTS_REG, &val);
> > +		if (!(val & MAX310X_STS_CLKREADY_BIT)) {
> > +			dev_warn(dev, "clock is not stable yet\n");
> > +		}
> > +	}
> >  	return (int)bestfreq;
> >  }
> > @@ -1260,7 +1266,7 @@ static int max310x_probe(struct device *dev,
> > struct max310x_devtype *devtype,
> >  				   MAX310X_MODE1_AUTOSLEEP_BIT);
> >  	}
> > -	uartclk = max310x_set_ref_clk(s, freq, xtal);
> > +	uartclk = max310x_set_ref_clk(dev, s, freq, xtal);
> >  	dev_dbg(dev, "Reference clock set to %i Hz\n", uartclk);
> >  	mutex_init(&s->mutex);
> 
> Greg, can you review this patch, please?

$ mdfrm -c ~/mail/todo
1425 messages in /home/gregkh/mail/todo

It's in good company :)

Don't worry, it's not lost, I'm just at conferences for 2 weeks so patch
review is a bit delayed.  Please relax, it will be handled...

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux