Date: Tue, 8 Sep 2015 10:10:02 -0700 From: Nathan Whitehorn <nwhitehorn@freebsd.org> To: Andrew Turner <andrew@freebsd.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r287565 - head/sys/dev/uart Message-ID: <55EF166A.40703@freebsd.org> In-Reply-To: <201509081606.t88G64l5067029@repo.freebsd.org> References: <201509081606.t88G64l5067029@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Nice work! You might want to look at uart_cpu_powerpc.c, which already supports stdout-path and various related things. -Nathan On 09/08/15 09:06, Andrew Turner wrote: > Author: andrew > Date: Tue Sep 8 16:06:04 2015 > New Revision: 287565 > URL: https://svnweb.freebsd.org/changeset/base/287565 > > Log: > Allow us to set the console device tree node. This is needed as not all > vendor supplied device trees contain the needed properties for us to select > the correct uart to use as the kernel console. > > An example of this would be to add the following to loader.conf. > hw.fdt.console="/smb/uart@f7113000" > > The intention of this is slightly different than the existing > hw.uart.console option. The new option will mean the boot serial > configuration will be derived from the device node, while the existing > option expects the user to configure all this themselves. > > Further work is planned to allow the uart configuration to be set based on > the stdout-path property devicetree bindings. > > Sponsored by: ABT Systems Ltd > Differential Revision: https://reviews.freebsd.org/D3559 > > Modified: > head/sys/dev/uart/uart_cpu_fdt.c > > Modified: head/sys/dev/uart/uart_cpu_fdt.c > ============================================================================== > --- head/sys/dev/uart/uart_cpu_fdt.c Tue Sep 8 16:05:18 2015 (r287564) > +++ head/sys/dev/uart/uart_cpu_fdt.c Tue Sep 8 16:06:04 2015 (r287565) > @@ -134,6 +134,7 @@ uart_cpu_getdev(int devtype, struct uart > phandle_t node, chosen; > pcell_t shift, br, rclk; > u_long start, size, pbase, psize; > + char *cp; > int err; > > uart_bus_space_mem = fdtbus_bs_tag; > @@ -148,18 +149,25 @@ uart_cpu_getdev(int devtype, struct uart > if (devtype != UART_DEV_CONSOLE) > return (ENXIO); > > - /* > - * Retrieve /chosen/std{in,out}. > - */ > - node = -1; > - if ((chosen = OF_finddevice("/chosen")) != -1) { > - for (name = propnames; *name != NULL; name++) { > - if (phandle_chosen_propdev(chosen, *name, &node) == 0) > - break; > + /* Has the user forced a specific device node? */ > + cp = kern_getenv("hw.fdt.console"); > + if (cp == NULL) { > + /* > + * Retrieve /chosen/std{in,out}. > + */ > + node = -1; > + if ((chosen = OF_finddevice("/chosen")) != -1) { > + for (name = propnames; *name != NULL; name++) { > + if (phandle_chosen_propdev(chosen, *name, > + &node) == 0) > + break; > + } > } > + if (chosen == -1 || *name == NULL) > + node = OF_finddevice("serial0"); /* Last ditch */ > + } else { > + node = OF_finddevice(cp); > } > - if (chosen == -1 || *name == NULL) > - node = OF_finddevice("serial0"); /* Last ditch */ > > if (node == -1) /* Can't find anything */ > return (ENXIO); >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?55EF166A.40703>