[RFC 1/1] powerpc: legacy serial port use device tree cell-index property
Curt Brune
curt at cumulusnetworks.com
Thu Dec 31 03:37:02 AEDT 2015
On Mon Dec 21 21:42, Scott Wood wrote:
> On Wed, 2015-11-25 at 10:46 -0800, Curt Brune wrote:
> > Currently for PowerPC systems using device tree, the legacy serial
> > ports are allocated in the order by which they are found in the device
> > tree structure.
> >
> > This can cause problems in cases where the device tree nodes are
> > sysnthesized by an external program (kexec for example), which may not
> > preserve the original order of the device tree nodes. This in turn
> > can result in the serial console changing from ttyS0 to ttyS1
> > unexpectedly.
> >
> > This patch uses the 'cell-index' property (if present) to map UART
> > device tree nodes to legacy serial port number. The cell-index
> > property is widely used in all the Freescale .dts files for PowerPC.
> >
> > Signed-off-by: Curt Brune <curt at cumulusnetworks.com>
> > ---
> > arch/powerpc/kernel/legacy_serial.c | 11 +++++++++--
> > 1 file changed, 9 insertions(+), 2 deletions(-)
> >
> > diff --git a/arch/powerpc/kernel/legacy_serial.c
> > b/arch/powerpc/kernel/legacy_serial.c
> > index 7b750c4..b717133 100644
> > --- a/arch/powerpc/kernel/legacy_serial.c
> > +++ b/arch/powerpc/kernel/legacy_serial.c
> > @@ -164,6 +164,8 @@ static int __init add_legacy_soc_port(struct device_node
> > *np,
> > u64 addr;
> > const __be32 *addrp;
> > struct device_node *tsi = of_get_parent(np);
> > + int index = -1, len;
> > + u32 *indexp;
> >
> > /* We only support ports that have a clock frequency properly
> > * encoded in the device-tree.
> > @@ -188,14 +190,19 @@ static int __init add_legacy_soc_port(struct
> > device_node *np,
> > if (addr == OF_BAD_ADDR)
> > return -1;
> >
> > + /* Check if the ports have an ordering, defined by 'cell-index' */
> > + if (((indexp = (u32*)of_get_property(np, "cell-index", &len)) !=
> > NULL) &&
> > + (len == sizeof(u32)))
> > + index = *indexp;
>
> const u32 *
>
> Or better, use of_read_number() or similar.
>
> -Scott
>
Ack. Thanks for the pointer.
-Curt
More information about the Linuxppc-dev
mailing list