public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 07/15] serial_bcm283x_mu: Fail loading if not muxed
Date: Thu, 25 Jan 2018 12:05:48 +0100	[thread overview]
Message-ID: <20180125110556.76352-8-agraf@suse.de> (raw)
In-Reply-To: <20180125110556.76352-1-agraf@suse.de>

The bcm283x mini-uart is only really usable as U-Boot serial output
when it is muxed to the UART pins of the RPi pin header.

So fail probing in case it is not muxed correctly, as in that case
firmware did not initialize it properly either.

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 drivers/serial/serial_bcm283x_mu.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/drivers/serial/serial_bcm283x_mu.c b/drivers/serial/serial_bcm283x_mu.c
index c6132b4463..40029fadbc 100644
--- a/drivers/serial/serial_bcm283x_mu.c
+++ b/drivers/serial/serial_bcm283x_mu.c
@@ -19,9 +19,11 @@
 #include <dm.h>
 #include <errno.h>
 #include <watchdog.h>
+#include <asm/gpio.h>
 #include <asm/io.h>
 #include <serial.h>
 #include <dm/platform_data/serial_bcm283x_mu.h>
+#include <dm/pinctrl.h>
 #include <linux/compiler.h>
 
 struct bcm283x_mu_regs {
@@ -136,11 +138,37 @@ static const struct udevice_id bcm283x_mu_serial_id[] = {
 	{}
 };
 
+/*
+ * Check if this serial device is muxed
+ *
+ * The serial device will only work properly if it has been muxed to the serial
+ * pins by firmware. Check whether that happened here.
+ *
+ * @return true if serial device is muxed, false if not
+ */
+static bool bcm283x_is_serial_muxed(void)
+{
+	int serial_gpio = 15;
+	struct udevice *dev;
+
+	if (uclass_first_device(UCLASS_PINCTRL, &dev) || !dev)
+		return false;
+
+	if (pinctrl_get_gpio_mux(dev, 0, serial_gpio) != BCM2835_GPIO_ALT5)
+		return false;
+
+	return true;
+}
+
 static int bcm283x_mu_serial_ofdata_to_platdata(struct udevice *dev)
 {
 	struct bcm283x_mu_serial_platdata *plat = dev_get_platdata(dev);
 	fdt_addr_t addr;
 
+	/* Don't spawn the device if it's not muxed */
+	if (!bcm283x_is_serial_muxed())
+		return -ENODEV;
+
 	addr = devfdt_get_addr(dev);
 	if (addr == FDT_ADDR_T_NONE)
 		return -EINVAL;
-- 
2.12.3

  parent reply	other threads:[~2018-01-25 11:05 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-25 11:05 [U-Boot] [PATCH v3 00/15] RPi: Properly handle dynamic serial configuration Alexander Graf
2018-01-25 11:05 ` [U-Boot] [PATCH v3 01/15] serial: Use next serial device if probing fails Alexander Graf
2018-01-28 18:54   ` [U-Boot] [U-Boot, v3, " Tom Rini
2018-01-29  3:27     ` Derald D. Woods
2018-01-29 10:17       ` Alexander Graf
2018-01-29 22:40       ` Alexander Graf
2018-01-25 11:05 ` [U-Boot] [PATCH v3 02/15] rpi: Remove runtime disabling support for serial Alexander Graf
2018-01-28 18:54   ` [U-Boot] [U-Boot, v3, " Tom Rini
2018-01-25 11:05 ` [U-Boot] [PATCH v3 03/15] serial: bcm283x_mu: Remove support for post-init disabling Alexander Graf
2018-01-28 18:54   ` [U-Boot] [U-Boot, v3, " Tom Rini
2018-01-25 11:05 ` [U-Boot] [PATCH v3 04/15] rpi: Determine PL011/Mini-UART availability at runtime Alexander Graf
2018-01-28 18:55   ` [U-Boot] [U-Boot, v3, " Tom Rini
2018-01-25 11:05 ` [U-Boot] [PATCH v3 05/15] serial_bcm283x_mu: Convert to dev_read Alexander Graf
2018-01-28 18:55   ` [U-Boot] [U-Boot, v3, " Tom Rini
2018-01-25 11:05 ` [U-Boot] [PATCH v3 06/15] serial_bcm283x_mu: Always skip init Alexander Graf
2018-01-28 18:55   ` [U-Boot] [U-Boot,v3,06/15] " Tom Rini
2018-01-25 11:05 ` Alexander Graf [this message]
2018-01-28 18:55   ` [U-Boot] [U-Boot, v3, 07/15] serial_bcm283x_mu: Fail loading if not muxed Tom Rini
2018-01-25 11:05 ` [U-Boot] [PATCH v3 08/15] pl01x: Convert to dev_read Alexander Graf
2018-01-28 18:55   ` [U-Boot] [U-Boot,v3,08/15] " Tom Rini
2018-01-25 11:05 ` [U-Boot] [PATCH v3 09/15] pl010: Convert CONFIG_PL010_SERIAL to Kconfig Alexander Graf
2018-01-28 18:55   ` [U-Boot] [U-Boot, v3, " Tom Rini
2018-01-25 11:05 ` [U-Boot] [PATCH v3 10/15] pl011: Convert CONFIG_PL011_SERIAL " Alexander Graf
2018-01-28 18:55   ` [U-Boot] [U-Boot, v3, " Tom Rini
2018-01-25 11:05 ` [U-Boot] [PATCH v3 11/15] pl01x: Convert CONFIG_PL01X_SERIAL " Alexander Graf
2018-01-28 18:55   ` [U-Boot] [U-Boot, v3, " Tom Rini
2018-01-25 11:05 ` [U-Boot] [PATCH v3 12/15] bcm2835_mu_serial: Convert " Alexander Graf
2018-01-28 18:55   ` [U-Boot] [U-Boot, v3, " Tom Rini
2018-01-25 11:05 ` [U-Boot] [PATCH v3 13/15] MAINTAINERS: Take over BCM2835 maintainership Alexander Graf
2018-01-28 18:55   ` [U-Boot] [U-Boot, v3, " Tom Rini
2018-01-31  8:34   ` [U-Boot] [PATCH v3 " Wolfgang Denk
2018-01-31  8:52     ` Alexander Graf
2018-01-31 13:04       ` Wolfgang Denk
2018-01-25 11:05 ` [U-Boot] [PATCH v3 14/15] bcm2835_pl011_serial: Add BCM2835 specific serial driver Alexander Graf
2018-01-28 18:55   ` [U-Boot] [U-Boot, v3, " Tom Rini
2018-01-25 11:05 ` [U-Boot] [PATCH v3 15/15] bcm2835_pinctrl: Probe pre-reloc Alexander Graf
2018-01-28 18:55   ` [U-Boot] [U-Boot,v3,15/15] " Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180125110556.76352-8-agraf@suse.de \
    --to=agraf@suse.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox