PowerPC: Fix find_legacy_serial_ports on OPB.
PATCH 1/1 PowerPC: Fix find_legacy_serial_ports on OPB.
Currently find_legacy_serial_ports() can find no serial ports on the OPB. Thus no legacy boot console can be initialized. Just the early udbg console works, which is initialized with udbg_init_44x_as1() on the UART's physical address specified in kernel config. This happens because we look for ns16750 and higher serial devices only and expect opb node to have a device type property. This patch makes it look for ns16550 compatible devices and use of_device_is_compatible() for opb instead of checking device type. Lack of legacy serial ports found causes problems for KGDB over serial.
--- arch/powerpc/kernel/legacy_serial.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
arch/powerpc/kernel/legacy_serial.c +2 -2
@@ -340,9 +340,9 @@ void __init find_legacy_serial_ports(voi }/* First fill our array with opb bus ports */ -for (np =NULL ; (np =of_find_compatible_node (np,"serial" ,"ns16750" )) !=NULL ;) { +for (np =NULL ; (np =of_find_compatible_node (np,"serial" ,"ns16550" )) !=NULL ;) {struct device_node *opb =of_get_parent (np); -if (opb && !strcmp (opb->type,"opb" )) { +if (opb &&of_device_is_compatible (opb,"ibm,opb" )) { index =add_legacy_soc_port (np, np);if (index >=0 && np == stdout) legacy_serial_console = index;
Quoted 10 lines · Valentine Barshak
Currently
find_legacy_serial_ports()can find no serial ports on the OPB. Thus no legacy boot console can be initialized. Just the early udbg console works, which is initialized withudbg_init_44x_as1()on the UART's physical address specified in kernel config. This happens because we look for ns16750 and higher serial devices only and expect opb node to have a device type property. This patch makes it look for ns16550 compatible devices and useof_device_is_compatible()for opb instead of checking device type. Lack of legacy serial ports found causes problems for KGDB over serial.Signed-off-by Valentine Barshak <[email protected]>
The patch would make sense if we were only dealing with flattened device tree systems at this point. Unfortunately, IBM is shipping hardware that encodes the serial port in exactly the way that find_legacy_serial_ports is looking for (parent->type == "opb", compatible = "ns16750" "ns16550" "ns16450" i8250").
Changing the search for ns16750 to ns16550 should be fine, but unnecessary because AFAIK, all OPB serial imlpementations are actually ns16750 and should have that in the device tree as well.
For the device type of the bus, please check for both compatible and type, so that it still works on machines that are missing the compatible property.
Arnd <><
Quoted 18 lines · Arnd Bergmann
Quoted 10 lines · Valentine Barshak
Currently
find_legacy_serial_ports()can find no serial ports on the OPB. Thus no legacy boot console can be initialized. Just the early udbg console works, which is initialized withudbg_init_44x_as1()on the UART's physical address specified in kernel config. This happens because we look for ns16750 and higher serial devices only and expect opb node to have a device type property. This patch makes it look for ns16550 compatible devices and useof_device_is_compatible()for opb instead of checking device type. Lack of legacy serial ports found causes problems for KGDB over serial.Signed-off-by Valentine Barshak <[email protected]>The patch would make sense if we were only dealing with flattened device tree systems at this point. Unfortunately, IBM is shipping hardware that encodes the serial port in exactly the way that
find_legacy_serial_portsis looking for (parent->type== "opb", compatible = "ns16750" "ns16550" "ns16450" i8250").
Quoted 7 lines
Changing the search for ns16750 to ns16550 should be fine, but unnecessary because AFAIK, all OPB serial imlpementations are actually ns16750 and should have that in the device tree as well.
For the device type of the bus, please check for both compatible and type, so that it still works on machines that are missing the compatible property.
Wait, no. We already had this discussion months ago when David was working on the original Ebony port. It was declared that legacy_serial is not how serial should be done on 4xx and the serial_of driver was supposed to be used instead.
Have we changed our stance on that? If not, then perhaps KGDB should be fixed to work with serial_of.
josh
Quoted 7 lines · Josh Boyer
Wait, no. =A0We already had this discussion months ago when David was working on the original Ebony port. =A0It was declared that
legacy_serialis not how serial should be done on 4xx and theserial_ofdriver was supposed to be used instead.
=20
Have we changed our stance on that? =A0If not, then perhaps KGDB should be fixed to work withserial_of.
I guess I'm fine with a patch that removes the OPB probing from legacy_serial, but as long as it's there it should work on all platforms.
Note that of_serial and legacy_serial are not exclusive, as of_serial will simply take over all ports that have previously been registered by the legacy code. Probing them early has the advantage that you can see many printk messages earlier when the of_serial initialization has not been called yet.
Arnd <><
PATCH 1/1 PowerPC: Add legacy serial support for OPB with flattened device tree.
Currently find_legacy_serial_ports() can find no serial ports on the OPB with flattened device. Thus no legacy boot console can be initialized. Just the early udbg console works, which is initialized with udbg_init_44x_as1 on the UART's physical address specified in kernel config. This happens because we look for ns16750 serial devices only and expect opb node to have a device type property. This patch makes it look for ns16550-compatible devices and use of_device_is_compatible() for opb in case device type is not specified.
--- arch/powerpc/kernel/legacy_serial.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
arch/powerpc/kernel/legacy_serial.c +3 -2
@@ -340,9 +340,10 @@ void __init find_legacy_serial_ports(voi }/* First fill our array with opb bus ports */ -for (np =NULL ; (np =of_find_compatible_node (np,"serial" ,"ns16750" )) !=NULL ;) { +for (np =NULL ; (np =of_find_compatible_node (np,"serial" ,"ns16550" )) !=NULL ;) {struct device_node *opb =of_get_parent (np); -if (opb && !strcmp (opb->type,"opb" )) { +if (opb && (!strcmp (opb->type,"opb" ) || +of_device_is_compatible (opb,"ibm,opb" ))) { index =add_legacy_soc_port (np, np);if (index >=0 && np == stdout) legacy_serial_console = index;
Re: [PATCH] PowerPC: Add legacy serial support for OPB with flattened device tree.
Quoted 10 lines · Valentine Barshak
Currently
find_legacy_serial_ports()can find no serial ports on the OPB with flattened device. Thus no legacy boot console can be initialized. Just the early udbg console works, which is initialized withudbg_init_44x_as1on the UART's physical address specified in kernel config. This happens because we look for ns16750 serial devices only and expect opb node to have a device type property. This patch makes it look for ns16550-compatible devices and useof_device_is_compatible()for opb in case device type is not specified.Signed-off-by Valentine Barshak <[email protected]>
Looks correct for QS21 now.
Quoted 26 lines · Josh Boyer
Quoted 17 lines · Arnd Bergmann
Quoted 10 lines · Valentine Barshak
Currently
find_legacy_serial_ports()can find no serial ports on the OPB. Thus no legacy boot console can be initialized. Just the early udbg console works, which is initialized withudbg_init_44x_as1()on the UART's physical address specified in kernel config. This happens because we look for ns16750 and higher serial devices only and expect opb node to have a device type property. This patch makes it look for ns16550 compatible devices and useof_device_is_compatible()for opb instead of checking device type. Lack of legacy serial ports found causes problems for KGDB over serial.Signed-off-by Valentine Barshak <[email protected]>The patch would make sense if we were only dealing with flattened device tree systems at this point. Unfortunately, IBM is shipping hardware that encodes the serial port in exactly the way that
find_legacy_serial_portsis looking for (parent->type== "opb", compatible = "ns16750" "ns16550" "ns16450" i8250").Quoted 7 lines
Changing the search for ns16750 to ns16550 should be fine, but unnecessary because AFAIK, all OPB serial imlpementations are actually ns16750 and should have that in the device tree as well.
For the device type of the bus, please check for both compatible and type, so that it still works on machines that are missing the compatible property.
Quoted 7 lines
Wait, no. We already had this discussion months ago when David was working on the original Ebony port. It was declared that
legacy_serialis not how serial should be done on 4xx and theserial_ofdriver was supposed to be used instead.Have we changed our stance on that? If not, then perhaps KGDB should be fixed to work with
serial_of.
Actually I don't see any reason not to use legacy_serial stuff for early console. We could split the kernel configured very early debug output, which uses PPC_EARLY_DEBUG_44x_PHYSLOW/PHYSHIGH (since it's really dangerous) and early console things by using legacy serial. We could use
early boot console without PPC_EARLY_DEBUG_44x.
Thanks,
Valentine.
Quoted 7 lines
josh
_______________________________________________
Linuxppc-dev mailing list
[email protected]
https://ozlabs.org/mailman/listinfo/linuxppc-dev
Quoted 32 lines · Valentine Barshak
Quoted 31 lines · Josh Boyer
Quoted 17 lines · Arnd Bergmann
Quoted 10 lines · Valentine Barshak
Currently
find_legacy_serial_ports()can find no serial ports on the OPB. Thus no legacy boot console can be initialized. Just the early udbg console works, which is initialized withudbg_init_44x_as1()on the UART's physical address specified in kernel config. This happens because we look for ns16750 and higher serial devices only and expect opb node to have a device type property. This patch makes it look for ns16550 compatible devices and useof_device_is_compatible()for opb instead of checking device type. Lack of legacy serial ports found causes problems for KGDB over serial.Signed-off-by Valentine Barshak <[email protected]>The patch would make sense if we were only dealing with flattened device tree systems at this point. Unfortunately, IBM is shipping hardware that encodes the serial port in exactly the way that
find_legacy_serial_portsis looking for (parent->type== "opb", compatible = "ns16750" "ns16550" "ns16450" i8250").Quoted 7 lines
Changing the search for ns16750 to ns16550 should be fine, but unnecessary because AFAIK, all OPB serial imlpementations are actually ns16750 and should have that in the device tree as well.
For the device type of the bus, please check for both compatible and type, so that it still works on machines that are missing the compatible property.
Wait, no. We already had this discussion months ago when David was working on the original Ebony port. It was declared that
legacy_serialis not how serial should be done on 4xx and theserial_ofdriver was supposed to be used instead.
Quoted 8 lines
Quoted 2 lines
Have we changed our stance on that? If not, then perhaps KGDB should be fixed to work with
serial_of.Actually I don't see any reason not to use
legacy_serialstuff for early console. We could split the kernel configured very early debug output, which uses PPC_EARLY_DEBUG_44x_PHYSLOW/PHYSHIGH (since it's really dangerous) and early console things by using legacy serial. We could use
early boot console withoutPPC_EARLY_DEBUG_44x.
That was exactly my thinking when this first came up. I'd like to hear David's opinion on it.
josh
Quoted 36 lines · Josh Boyer
Quoted 35 lines · Valentine Barshak
Quoted 33 lines · Josh Boyer
Quoted 17 lines · Arnd Bergmann
Quoted 10 lines · Valentine Barshak
Currently
find_legacy_serial_ports()can find no serial ports on the OPB. Thus no legacy boot console can be initialized. Just the early udbg console works, which is initialized withudbg_init_44x_as1()on the UART's physical address specified in kernel config. This happens because we look for ns16750 and higher serial devices only and expect opb node to have a device type property. This patch makes it look for ns16550 compatible devices and useof_device_is_compatible()for opb instead of checking device type. Lack of legacy serial ports found causes problems for KGDB over serial.Signed-off-by Valentine Barshak <[email protected]>The patch would make sense if we were only dealing with flattened device tree systems at this point. Unfortunately, IBM is shipping hardware that encodes the serial port in exactly the way that
find_legacy_serial_portsis looking for (parent->type== "opb", compatible = "ns16750" "ns16550" "ns16450" i8250").Quoted 7 lines
Changing the search for ns16750 to ns16550 should be fine, but unnecessary because AFAIK, all OPB serial imlpementations are actually ns16750 and should have that in the device tree as well.
For the device type of the bus, please check for both compatible and type, so that it still works on machines that are missing the compatible property.
Wait, no. We already had this discussion months ago when David was working on the original Ebony port. It was declared that
legacy_serialis not how serial should be done on 4xx and theserial_ofdriver was supposed to be used instead.Have we changed our stance on that? If not, then perhaps KGDB should be fixed to work with
serial_of.
Quoted 8 lines
Quoted 5 lines
Actually I don't see any reason not to use
legacy_serialstuff for early console. We could split the kernel configured very early debug output, which uses PPC_EARLY_DEBUG_44x_PHYSLOW/PHYSHIGH (since it's really dangerous) and early console things by using legacy serial. We could use
early boot console withoutPPC_EARLY_DEBUG_44x.That was exactly my thinking when this first came up. I'd like to hear David's opinion on it.
Yeah, I think I misinterpreted BenH way back when. This looks ok, and means serial will be initialized earlier than of_serial, which would be nice.
Signature · 4 lines
David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
Quoted 43 lines · David Gibson
Quoted 42 lines · Josh Boyer
Quoted 40 lines · Valentine Barshak
Quoted 26 lines · Josh Boyer
Quoted 17 lines · Arnd Bergmann
Quoted 10 lines · Valentine Barshak
Currently
find_legacy_serial_ports()can find no serial ports on the OPB. Thus no legacy boot console can be initialized. Just the early udbg console works, which is initialized withudbg_init_44x_as1()on the UART's physical address specified in kernel config. This happens because we look for ns16750 and higher serial devices only and expect opb node to have a device type property. This patch makes it look for ns16550 compatible devices and useof_device_is_compatible()for opb instead of checking device type. Lack of legacy serial ports found causes problems for KGDB over serial.Signed-off-by Valentine Barshak <[email protected]>The patch would make sense if we were only dealing with flattened device tree systems at this point. Unfortunately, IBM is shipping hardware that encodes the serial port in exactly the way that
find_legacy_serial_portsis looking for (parent->type== "opb", compatible = "ns16750" "ns16550" "ns16450" i8250").Quoted 7 lines
Changing the search for ns16750 to ns16550 should be fine, but unnecessary because AFAIK, all OPB serial imlpementations are actually ns16750 and should have that in the device tree as well.
For the device type of the bus, please check for both compatible and type, so that it still works on machines that are missing the compatible property.
Quoted 7 lines
Wait, no. We already had this discussion months ago when David was working on the original Ebony port. It was declared that
legacy_serialis not how serial should be done on 4xx and theserial_ofdriver was supposed to be used instead.Have we changed our stance on that? If not, then perhaps KGDB should be fixed to work with
serial_of.Actually I don't see any reason not to use
legacy_serialstuff for early console. We could split the kernel configured very early debug output, which uses PPC_EARLY_DEBUG_44x_PHYSLOW/PHYSHIGH (since it's really dangerous) and early console things by using legacy serial. We could use
early boot console withoutPPC_EARLY_DEBUG_44x.
Quoted 6 lines
Quoted 2 lines
That was exactly my thinking when this first came up. I'd like to hear David's opinion on it.
Yeah, I think I misinterpreted BenH way back when. This looks ok, and means serial will be initialized earlier than
of_serial, which would be nice.
Great. It seems Paul pulled it into his tree already as well, which suits me just fine.
josh
Quoted 18 lines · Arnd Bergmann
Quoted 10 lines · Valentine Barshak
Currently
find_legacy_serial_ports()can find no serial ports on the OPB. Thus no legacy boot console can be initialized. Just the early udbg console works, which is initialized withudbg_init_44x_as1()on the UART's physical address specified in kernel config. This happens because we look for ns16750 and higher serial devices only and expect opb node to have a device type property. This patch makes it look for ns16550 compatible devices and useof_device_is_compatible()for opb instead of checking device type. Lack of legacy serial ports found causes problems for KGDB over serial.Signed-off-by Valentine Barshak <[email protected]>The patch would make sense if we were only dealing with flattened device tree systems at this point. Unfortunately, IBM is shipping hardware that encodes the serial port in exactly the way that
find_legacy_serial_portsis looking for (parent->type== "opb", compatible = "ns16750" "ns16550" "ns16450" i8250").
Quoted 3 lines
Changing the search for ns16750 to ns16550 should be fine, but unnecessary because AFAIK, all OPB serial imlpementations are actually ns16750 and should have that in the device tree as well.
This is a bit odd. The docs say that uart chips on the ppc44x processors are registry-compatible to 16750, but have 16-byte FIFO's. This is OK for legacy serial stuff (since it really needs the chip to be 16550-compatible), but the 8250 driver expects 64-byte FIFO size for 16750. I guess that's why 44x uart dts entries don't have 16750 compatible property.
Quoted 6 lines
For the device type of the bus, please check for both compatible and type, so that it still works on machines that are missing the compatible property.
Arnd <><