From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michal Simek Date: Mon, 31 Aug 2015 13:13:14 +0200 Subject: [U-Boot] [PATCH 04/13] dm: serial: Deal with stdout-path with an alias In-Reply-To: <1440861022-22674-5-git-send-email-sjg@chromium.org> References: <1440861022-22674-1-git-send-email-sjg@chromium.org> <1440861022-22674-5-git-send-email-sjg@chromium.org> Message-ID: <55E436CA.70008@monstr.eu> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 08/29/2015 05:10 PM, Simon Glass wrote: > Sometimes stdout-path contains a UART alias along with speed, etc. For > example: > > stdout-path = "serial0:115200n8"; > > Add support for decoding this. > > Signed-off-by: Simon Glass > --- > > drivers/serial/serial-uclass.c | 30 +++++++++++++++++++++++++----- > 1 file changed, 25 insertions(+), 5 deletions(-) > > diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c > index 55011cc..842f78b 100644 > --- a/drivers/serial/serial-uclass.c > +++ b/drivers/serial/serial-uclass.c > @@ -29,14 +29,34 @@ static const unsigned long baudrate_table[] = CONFIG_SYS_BAUDRATE_TABLE; > > static void serial_find_console_or_panic(void) > { > + const void *blob = gd->fdt_blob; This is one change and should be separated from the rest. > struct udevice *dev; > int node; > > - if (CONFIG_IS_ENABLED(OF_CONTROL) && gd->fdt_blob) { > + if (CONFIG_IS_ENABLED(OF_CONTROL) && blob) { > /* Check for a chosen console */ > - node = fdtdec_get_chosen_node(gd->fdt_blob, "stdout-path"); > + node = fdtdec_get_chosen_node(blob, "stdout-path"); > + if (node < 0) { > + const char *str, *p, *name; > + > + /* > + * Deal with things like > + * stdout-path = "serial0:115200n8"; > + * > + * We need to look up the alias and then follow it to > + * the correct node. > + */ > + str = fdtdec_get_chosen_prop(blob, "stdout-path"); > + if (str) { > + p = strchr(str, ':'); > + name = fdt_get_alias_namelen(blob, str, > + p ? p - str : strlen(str)); > + if (name) > + node = fdt_path_offset(blob, name); > + } > + } And this is second. > if (node < 0) You have if (node < 0) above too which looks pretty odd. > - node = fdt_path_offset(gd->fdt_blob, "console"); > + node = fdt_path_offset(blob, "console"); > if (!uclass_get_device_by_of_offset(UCLASS_SERIAL, node, > &dev)) { > gd->cur_serial_dev = dev; > @@ -48,14 +68,14 @@ static void serial_find_console_or_panic(void) > * bind it anyway. > */ > if (node > 0 && > - !lists_bind_fdt(gd->dm_root, gd->fdt_blob, node, &dev)) { > + !lists_bind_fdt(gd->dm_root, blob, node, &dev)) { > if (!device_probe(dev)) { > gd->cur_serial_dev = dev; > return; > } > } > } > - if (!SPL_BUILD || !CONFIG_IS_ENABLED(OF_CONTROL) || !gd->fdt_blob) { > + if (!SPL_BUILD || !CONFIG_IS_ENABLED(OF_CONTROL) || !blob) { > /* > * Try to use CONFIG_CONS_INDEX if available (it is numbered > * from 1!). > Thanks, Michal -- Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91 w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/ Maintainer of Linux kernel - Xilinx Zynq ARM architecture Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: OpenPGP digital signature URL: