On 15 January 2016 at 18:32, Laszlo Ersek <ler...@redhat.com> wrote:
> On 01/15/16 18:59, Ryan Harkin wrote:
>> On 15 January 2016 at 17:39, Laszlo Ersek <ler...@redhat.com> wrote:
>>> On 01/15/16 18:33, Ryan Harkin wrote:
>>>> On 15 January 2016 at 17:05, Laszlo Ersek <ler...@redhat.com> wrote:
>
>>>>> Ryan, can you please test the following patch?
>>>>>
>>>>>> diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c 
>>>>>> b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
>>>>>> index 6fde3b2..e1a6527 100644
>>>>>> --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
>>>>>> +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
>>>>>> @@ -806,7 +806,7 @@ TerminalDriverBindingStart (
>>>>>>      Status = TerminalDevice->SerialIo->SetAttributes (
>>>>>>                                          TerminalDevice->SerialIo,
>>>>>>                                          Mode->BaudRate,
>>>>>> -                                        Mode->ReceiveFifoDepth,
>>>>>> +                                        0, // device's default FIFO 
>>>>>> depth.
>>>>>>                                          (UINT32) SerialInTimeOut,
>>>>>>                                          (EFI_PARITY_TYPE) 
>>>>>> (Mode->Parity),
>>>>>>                                          (UINT8) Mode->DataBits,
>>>>>> diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c 
>>>>>> b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
>>>>>> index 3be877b..ffdc8f2 100644
>>>>>> --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
>>>>>> +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
>>>>>> @@ -547,7 +547,7 @@ TerminalConInTimerHandler (
>>>>>>      Status = SerialIo->SetAttributes (
>>>>>>                          SerialIo,
>>>>>>                          Mode->BaudRate,
>>>>>> -                        Mode->ReceiveFifoDepth,
>>>>>> +                        0, // device's default FIFO depth.
>>>>>>                          (UINT32) SerialInTimeOut,
>>>>>>                          (EFI_PARITY_TYPE) (Mode->Parity),
>>>>>>                          (UINT8) Mode->DataBits,
>>>>>
>>>>
>>>> Yes, this works for me.
>>>
>>> Thanks for the testing (to Ard too)!
>>>
>>>> So what do you think the proper solution is?  Is Ard's patch not what
>>>> you were thinking?
>>>
>>> I think the UEFI spec is clear enough on EFI_SERIAL_IO_PROTOCOL that we
>>> can derive what the right thing is:
>>>
>>> - SerialDxe needs a fix so that not only its ReceiveFifoDepth defaults
>>> are correct (beause they are correct now!), but also the Timeout defaults.
>>>
>>> - TerminalDxe needs a fix too: it should recognize the defaults set by
>>> SerialDxe (as per UEFI spec requirements), and set ReceiveFifoDepth
>>> explicitly, with a SetAttributes() call. A good value for that looks
>>> like zero (= device's default FIFO depth). I believe the value zero also
>>> happens to restore the previous behavior, in practice -- it's just not
>>> SerialDxe's responsibility.
>>>
>>
>> The problem I have is that is someone decides that TerminalDxe needs
>> to set the depth to 1 again, or some other value, the ARM platforms
>> will break, because they clearly can set that value, but it isn't
>> useful/usable.  So perhaps PL011 needs to use the device's default
>> value, irrespective of what TerminalDxe asks for?
>
> "irrespective" would be a violation of the UEFI spec (end to end);

What if the spec changes and the device cannot support the spec?
Surely it has to do something sane?

> the
> Serial IO Protocol implementation must not set a larger queue depth than
> what the client requests. If the client requests 1, the driver must not
> set 16 (for example).
>

Even if it cannot support the value requested?


> In my reading, the Serial IO Protocol spec is reasonably flexible, and
> considers the case when a given serial port cannot provide the exact
> queue depth requested. I think if the SerialDxe driver sticks to the
> UEFI spec requirements, and the TerminalDxe driver also assumes nothing
> more and nothing less (about the Serial IO Protocol) than specified,
> then things should "just work".
>
> Your concern applies to all drivers and libraries under MdeModulePkg --
> some of the central modules have the potential to break any and all
> platforms. I don't think we should try to work around that in
> platform-specific libraries that the central modules delegate some work
> to, especially if the UEFI spec goes into some detail on the relevant
> behavior.
>
> Anyway, I wouldn't like to force my opinion on others -- I just thought
> it was an interesting problem, with the solution coming more or less
> directly from the spec. Admittedly, there are places where edk2 deviates
> from the spec. At the moment I think it wouldn't be justified here.
>

To be fair, I don't know why I'm getting involved.  I'd simply like to
rebase to the tip of Tianocore and for it to actually work.
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to