Re: [U-Boot] [PATCH 7/9] serial: bcm283x_mu: support disabling after initialization

2016-09-26 Thread Simon Glass
On 26 September 2016 at 06:26, Fabian Vogt  wrote:
> For the Raspberry Pi 3 it needs to be possible to disable the serial
> device after initialization happens, as only after the GPIO device is 
> available
> it is known whether the mini uart is usable.
>
> Signed-off-by: Fabian Vogt 
> ---
>  drivers/serial/serial_bcm283x_mu.c | 18 --
>  1 file changed, 16 insertions(+), 2 deletions(-)

Reviewed-by: Simon Glass 
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 7/9] serial: bcm283x_mu: support disabling after initialization

2016-09-26 Thread Fabian Vogt
For the Raspberry Pi 3 it needs to be possible to disable the serial
device after initialization happens, as only after the GPIO device is available
it is known whether the mini uart is usable.

Signed-off-by: Fabian Vogt 
---
 drivers/serial/serial_bcm283x_mu.c | 18 --
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/drivers/serial/serial_bcm283x_mu.c 
b/drivers/serial/serial_bcm283x_mu.c
index e361909..3884f74 100644
--- a/drivers/serial/serial_bcm283x_mu.c
+++ b/drivers/serial/serial_bcm283x_mu.c
@@ -59,7 +59,7 @@ static int bcm283x_mu_serial_setbrg(struct udevice *dev, int 
baudrate)
struct bcm283x_mu_regs *regs = priv->regs;
u32 divider;
 
-   if (plat->skip_init)
+   if (plat->disabled || plat->skip_init)
return 0;
 
divider = plat->clock / (baudrate * 8);
@@ -85,10 +85,14 @@ static int bcm283x_mu_serial_probe(struct udevice *dev)
 
 static int bcm283x_mu_serial_getc(struct udevice *dev)
 {
+   struct bcm283x_mu_serial_platdata *plat = dev_get_platdata(dev);
struct bcm283x_mu_priv *priv = dev_get_priv(dev);
struct bcm283x_mu_regs *regs = priv->regs;
u32 data;
 
+   if (plat->disabled)
+   return -EAGAIN;
+
/* Wait until there is data in the FIFO */
if (!(readl(>lsr) & BCM283X_MU_LSR_RX_READY))
return -EAGAIN;
@@ -100,9 +104,13 @@ static int bcm283x_mu_serial_getc(struct udevice *dev)
 
 static int bcm283x_mu_serial_putc(struct udevice *dev, const char data)
 {
+   struct bcm283x_mu_serial_platdata *plat = dev_get_platdata(dev);
struct bcm283x_mu_priv *priv = dev_get_priv(dev);
struct bcm283x_mu_regs *regs = priv->regs;
 
+   if (plat->disabled)
+   return 0;
+
/* Wait until there is space in the FIFO */
if (!(readl(>lsr) & BCM283X_MU_LSR_TX_EMPTY))
return -EAGAIN;
@@ -115,9 +123,15 @@ static int bcm283x_mu_serial_putc(struct udevice *dev, 
const char data)
 
 static int bcm283x_mu_serial_pending(struct udevice *dev, bool input)
 {
+   struct bcm283x_mu_serial_platdata *plat = dev_get_platdata(dev);
struct bcm283x_mu_priv *priv = dev_get_priv(dev);
struct bcm283x_mu_regs *regs = priv->regs;
-   unsigned int lsr = readl(>lsr);
+   unsigned int lsr;
+
+   if (plat->disabled)
+   return 0;
+
+   lsr = readl(>lsr);
 
if (input) {
WATCHDOG_RESET();
-- 
2.6.2

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot