aboutsummaryrefslogtreecommitdiff
path: root/drivers/serial/serial_bcm283x_mu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/serial/serial_bcm283x_mu.c')
-rw-r--r--drivers/serial/serial_bcm283x_mu.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/serial/serial_bcm283x_mu.c b/drivers/serial/serial_bcm283x_mu.c
index 40029fa..d87b44e 100644
--- a/drivers/serial/serial_bcm283x_mu.c
+++ b/drivers/serial/serial_bcm283x_mu.c
@@ -51,6 +51,8 @@ struct bcm283x_mu_priv {
struct bcm283x_mu_regs *regs;
};
+static int bcm283x_mu_serial_getc(struct udevice *dev);
+
static int bcm283x_mu_serial_setbrg(struct udevice *dev, int baudrate)
{
struct bcm283x_mu_serial_platdata *plat = dev_get_platdata(dev);
@@ -59,13 +61,17 @@ static int bcm283x_mu_serial_setbrg(struct udevice *dev, int baudrate)
u32 divider;
if (plat->skip_init)
- return 0;
+ goto out;
divider = plat->clock / (baudrate * 8);
writel(BCM283X_MU_LCR_DATA_SIZE_8, &regs->lcr);
writel(divider - 1, &regs->baud);
+out:
+ /* Flush the RX queue - all data in there is bogus */
+ while (bcm283x_mu_serial_getc(dev) != -EAGAIN) ;
+
return 0;
}