[PATCH] powerpc: Add support for early debugging via Serial 16550 console

Christophe Leroy christophe.leroy at csgroup.eu
Tue Aug 23 00:09:46 AEST 2022



Le 20/08/2022 à 00:34, Randy Dunlap a écrit :
> Hi--
> 
> On 8/19/22 14:12, Pali Rohár wrote:
>> Currently powerpc early debugging contains lot of platform specific
>> options, but does not support standard UART / serial 16550 console.
>>
>> Later legacy_serial.c code supports registering UART as early debug console
>> from device tree but it is not early during booting, but rather later after
>> machine description code finishes.
>>
>> So for real early debugging via UART is current code unsuitable.
>>
>> Add support for new early debugging option CONFIG_PPC_EARLY_DEBUG_16550
>> which enable Serial 16550 console on address defined by new option
>> CONFIG_PPC_EARLY_DEBUG_16550_PHYSADDR and by stride by option
>> CONFIG_PPC_EARLY_DEBUG_16550_STRIDE.
>>
>> With this change it is possible to debug powerpc machine descriptor code.
>> For example this early debugging code can print on serial console also
>> "No suitable machine description found" error which is done before
>> legacy_serial.c code.
>>
>> Signed-off-by: Pali Rohár <pali at kernel.org>
>> ---
>> Tested on P2020 board. It allowed me do debug and implement this patch series:
>> https://lore.kernel.org/linuxppc-dev/20220819191557.28116-1-pali@kernel.org/
>> ---
>>   arch/powerpc/Kconfig.debug       | 14 ++++++++++++++
>>   arch/powerpc/include/asm/udbg.h  |  1 +
>>   arch/powerpc/kernel/udbg.c       |  2 ++
>>   arch/powerpc/kernel/udbg_16550.c | 33 ++++++++++++++++++++++++++++++++
>>   4 files changed, 50 insertions(+)
>>
>> diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug
>> index 9f363c143d86..a4e7d90a45d2 100644
>> --- a/arch/powerpc/Kconfig.debug
>> +++ b/arch/powerpc/Kconfig.debug
>> @@ -276,6 +276,11 @@ config PPC_EARLY_DEBUG_OPAL_HVSI
>>   	  Select this to enable early debugging for the PowerNV platform
>>   	  using an "hvsi" console
>>   
>> +config PPC_EARLY_DEBUG_16550
>> +	bool "Serial 16550"
>> +	help
>> +	  Select this to enable early debugging via Serial 16550 console
>> +
>>   config PPC_EARLY_DEBUG_MEMCONS
>>   	bool "In memory console"
>>   	help
>> @@ -355,6 +360,15 @@ config PPC_EARLY_DEBUG_CPM_ADDR
>>   	  platform probing is done, all platforms selected must
>>   	  share the same address.
>>   
>> +config PPC_EARLY_DEBUG_16550_PHYSADDR
>> +	hex "Early debug Serial 16550 physical address"
>> +	depends on PPC_EARLY_DEBUG_16550
> 
> Is there any chance that you could provide a default value here
> so that 'make olddefconfig' does not end up like it does
> without having a default value?

I did a few tests and it seems that a default doesn't help. I tried 
setting 'default n' to PPC_EARLY_DEBUG_16550 but I still get a prompt 
when doing an oldconfig. But only if you have CONFIG_PPC_EARLY_DEBUG=y 
in your old config. But that's expected behaviour when doing 'make 
oldconfig', isn't it ?

Or are you meaning a defconfig ? Because I get what you describe when 
doing 83xx/mpc836x_rdk_defconfig. And I agree with you this is going to 
create problems.

> 
> CONFIG_PPC_EARLY_DEBUG_16550=y
> # CONFIG_PPC_EARLY_DEBUG_MEMCONS is not set
> CONFIG_PPC_EARLY_DEBUG_16550_PHYSADDR=
> CONFIG_PPC_EARLY_DEBUG_16550_STRIDE=1
> 
> which then causes a kconfig prompt when starting
> the build...

Maybe a solution is to make PPC_EARLY_DEBUG_MEMCONS the default, doing 
that I get no change from before. But that changes the behaviour for 
mpc885_ads_defconfig, so it is not the solution.

So I think the only solution is to provide a default value to 
PPC_EARLY_DEBUG_16550_PHYSADDR, just like it is done for 
PPC_EARLY_DEBUG_CPM_ADDR.


> 
>> +
>> +config PPC_EARLY_DEBUG_16550_STRIDE
>> +	int "Early debug Serial 16550 stride"
>> +	depends on PPC_EARLY_DEBUG_16550
>> +	default 1
>> +
>>   config FAIL_IOMMU
>>   	bool "Fault-injection capability for IOMMU"
>>   	depends on FAULT_INJECTION
> 
> Thanks.


More information about the Linuxppc-dev mailing list