Hi Julien,

On 18/11/2022 10:58, Julien Grall wrote:
> 
> 
> On 17/11/2022 12:52, Michal Orzel wrote:
>>
>>
>> On 17/11/2022 10:53, Michal Orzel wrote:
>>>
>>>
>>> Hi Julien,
>>>
>>> On 17/11/2022 10:29, Julien Grall wrote:
>>>>
>>>>
>>>> On 17/11/2022 08:34, Michal Orzel wrote:
>>>>> Hi Julien,
>>>>>
>>>>> On 16/11/2022 19:37, Julien Grall wrote:
>>>>>>
>>>>>>
>>>>>> Hi Michal,
>>>>>>
>>>>>> On 16/11/2022 18:05, Michal Orzel wrote:
>>>>>>> On 16/11/2022 16:56, Julien Grall wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> On 16/11/2022 14:45, Michal Orzel wrote:
>>>>>>>>> Hi Julien,
>>>>>>>>
>>>>>>>> Hi Michal,
>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> and use it in the pl011-debug files (+ there is a question whether 
>>>>>>>>>>> we should define WLEN_7-5 for completeness).
>>>>>>>>>>
>>>>>>>>>> I would not define WLEN_7-5. That said, I wonder if we really need to
>>>>>>>>>> set the baud rate & co here?
>>>>>>>>>>
>>>>>>>>>> AFAICT the runtime driver never touch them. The reasoning is the
>>>>>>>>>> firmware is responsible to configure the serial. Therefore, I would
>>>>>>>>>> consider to drop the code (setting UARTCR might still be necessary).
>>>>>>>>> I do not really agree because the current behavior was done on 
>>>>>>>>> purpose.
>>>>>>>>
>>>>>>>> EARLY_UART_PL011_BAUD_RATE is only used for very early debugging (this
>>>>>>>> is protected by CONFIG_DEBUG and CONFIG_EXPERT). This is not a
>>>>>>>> production ready code.
>>>>>>> I am fully aware of it. I just found it useful but I understand the 
>>>>>>> global reasoning.
>>>>>>>
>>>>>>>>
>>>>>>>>> At the moment early_uart_init is called only if 
>>>>>>>>> EARLY_UART_PL011_BAUD_RATE is set to a value != 0.
>>>>>>>>> This is done in order to have flexibility to either stick to what 
>>>>>>>>> firmware/bootloader configured or to change this
>>>>>>>>> configuration by specifying the EARLY_UART_PL011_BAUD_RATE (useful 
>>>>>>>>> when you do not know what
>>>>>>>>> the firmware configured).
>>>>>>>> The chances are that you want to use the baud rate that was configured
>>>>>>>> by the firmware. Otherwise, you would need to change the configuration
>>>>>>>> of minicom (or whatever you used) to get proper output for the firmware
>>>>>>>> and then Xen.
>>>>>>>>
>>>>>>>> Furthermore, as I wrote before, the runtime driver doesn't configure 
>>>>>>>> the
>>>>>>>> baud rate. This was removed in Xen 4.7 (see commit 2048e17ca9df
>>>>>>>> "drivers/pl011: Don't configure baudrate") because it was buggy and 
>>>>>>>> this
>>>>>>>> code is not simple.
>>>>>>>>
>>>>>>>> So it makes no sense to configure the baud rate when using early printk
>>>>>>>> but not the runtime driver.
>>>>>>> Ok, so we will get rid of EARLY_UART_PL011_BAUD_RATE config and setting 
>>>>>>> the bd
>>>>>>> in the early uart code. Now, what about setting "8n1"? The runtime 
>>>>>>> driver sets them
>>>>>>> as well as the early code. It can also be set to a different value from 
>>>>>>> the firmware
>>>>>>> (unlikely but it can happen I think). In any case, if we decide to do 
>>>>>>> what the runtime driver
>>>>>>> does, I reckon setting LCR_H should be kept in early code.
>>>>>>
>>>>>> Good question. I think, you would end up with the same issue I mentioned
>>>>>> above if the firmware and Xen have different line control registers
>>>>>> (tools like minicom/screen would ask for it).
>>>>>>
>>>>>> So I am on the fence here. In one way, it seems pointless keep it. But
>>>>>> on the other hand, Xen has always set it. So I have no data to prove
>>>>>> this will be fine everywhere.
>>>>> If we are relying on the firmware[1] to configure the baud rate, it is 
>>>>> not very wise
>>>>> not to rely on it to configure the LCR. Looking at the other serial 
>>>>> drivers in Xen,
>>>>> we have a real mismatch in what is being configured. Some of the drivers 
>>>>> (omap, imx),
>>>>> apart from setting 8n1 also set the baud rate explicitly to 115200 and 
>>>>> almost all of them
>>>>> do set 8n1. In that case we will not benefit too much from fixing just 
>>>>> pl011.
>>>> It is not great that Xen hardcode the baud rate (I can't remember
>>>> whether there was a reason), but I don't think the consistency is
>>>> necessary here (see more below).
>>>>
>>>>>
>>>>> On the other hand, Xen follows the zImage/Image protocols for ARM [2] 
>>>>> which do not
>>>>> state that serial port initializing is something mandatory. This could 
>>>>> indicate that
>>>>> the firmware does not really need to configure the serial.
>>>>
>>>> The firmware doesn't need to configure the serial and yes in theory Xen
>>>> should configure the baud rate and parity based on the firmware table.
>>>>
>>>> However, this is a trade off between complexity and benefits. The patch
>>>> I mentioned earlier has been removed nearly 6 years ago and I haven't
>>>> seen anyone reporting any issues.
>>>>
>>>> Hence why I think for the PL011 it is not worth looking [3] at the baud
>>>> rate and instead removing it completely in the early PL011 code as well.
>>>>
>>>> That said, if you feel strongly adding support for baud rate then I will
>>>> be happy to review the patch.
>>> I'm not in favor of this approach either. That said, I will prepare patches 
>>> to remove
>>> CONFIG_EARLY_UART_PL011_BAUD_RATE and its usage in early printk code as we 
>>> agreed earlier.
>>> As for the LCR setting, I will keep it in early printk code to maintain the 
>>> same behavior as
>>> runtime driver who sets them.
>> Actually, there is one more thing to consider.
>> early_uart_init, even though it also sets LCR apart from the baud rate, is 
>> called when CONFIG_EARLY_UART_INIT is set.
>> The latter depends on EARLY_UART_PL011 && EARLY_UART_PL011_BAUD_RATE != 0.
>> If we remove EARLY_UART_PL011_BAUD_RATE, we need to decide when do we want 
>> early_uart_init to be called. It is defined only for pl011
>> (it is also defined for meson but this is an unreachable code, as 
>> EARLY_UART_PL011 is 0 for meson), so we have the following options:
> 
> Good spot. I am not sure why the function was defined for Meson if it
> does nothing. I would drop it but keep the comment explaining why we
> don't have the helper.
Hmm, other drivers do not have such a comment but I can leave it there if you 
want.
Although, it should then be slightly modified to avoid ambiguity after removing 
macro:
/*
 * No need for early_uart_init, as UART has already been initialized
 * by Firmware, for instance by TF-A.
 */

> 
>> 2. Keep CONFIG_EARLY_UART_INIT so that future drivers can use it (?) and 
>> mark it as n by default
> 
> Based on the discussion with Bertrand, I would keep
> CONFIG_EARLY_UART_INIT in case someone wants to use a different UART for
> Xen and the firmware output.
> 
> Also, I would like to revise my opinion from earlier. I now think we
> should keep the baud rate part in early PL011 code even this means
> inconsistency between the early and runtime driver.
Ok, in this case I will just create a series containing this patch without any 
modifications,
the meson fix + macro for 8n1 to be used in early code as agreed earlier.

> 
> Cheers,
> 
> --
> Julien Grall

~Michal

Reply via email to