Thanks Sunil, I have in fact missed your email. Will apply your feedback, retest and resend.
A > -----Original Message----- > From: Sunil V L <suni...@ventanamicro.com> > Sent: Thursday, April 6, 2023 12:00 AM > To: Warkentin, Andrei <andrei.warken...@intel.com> > Cc: devel@edk2.groups.io; Daniel Schaefer <g...@danielschaefer.me>; > Kinney, Michael D <michael.d.kin...@intel.com>; Gao, Liming > <gaolim...@byosoft.com.cn>; Liu, Zhiguang <zhiguang....@intel.com>; Gerd > Hoffmann <kra...@redhat.com> > Subject: Re: [PATCH v6 2/3] MdePkg: add SBI-based SerialPortLib for RISC-V > > Hi Andrei, > > I had couple of questions on previous version of this patch. Adding them > inline again in case you had missed them. Please check if they are valid. > > Also, I think it would be better to have single directory > BaseSerialPortLibRiscVSbiLib and inside that we can have both INF files. > This way we can share UNI files etc between both libraries. > > On Tue, Apr 04, 2023 at 11:43:58AM -0500, Andrei Warkentin wrote: > > These are implementations of SerialPortLib using SBI console services. > > - BaseSerialPortLibRiscVSbiLib is appropriate for SEC/PEI (XIP) > > environments > > - BaseSerialPortLibRiscVSbiLibRam is appropriate for PrePI/DXE > > environments > > > > Tested with: > > - Qemu RiscVVirt (non-DBCN case, backed by UART) > > - TinyEMU + RiscVVirt (non-DBCN case, HTIF) > > - TinyEMU + RiscVVirt (DBCN case, HTIF) > > > > Cc: Daniel Schaefer <g...@danielschaefer.me> > > Cc: Sunil V L <suni...@ventanamicro.com> > > Cc: Michael D Kinney <michael.d.kin...@intel.com> > > Cc: Liming Gao <gaolim...@byosoft.com.cn> > > Cc: Zhiguang Liu <zhiguang....@intel.com> > > Acked-by: Gerd Hoffmann <kra...@redhat.com> > > Signed-off-by: Andrei Warkentin <andrei.warken...@intel.com> > > --- > > MdePkg/MdePkg.dsc > > | 2 + > > > MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSbiLib.in > f | 39 +++ > > > MdePkg/Library/BaseSerialPortLibRiscVSbiLibRam/BaseSerialPortLibRiscVSbiL > ibRam.inf | 36 +++ > > > MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSbiLib.c > | 233 ++++++++++++++++ > > > MdePkg/Library/BaseSerialPortLibRiscVSbiLibRam/BaseSerialPortLibRiscVSbiL > ibRam.c | 288 ++++++++++++++++++++ > > > MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSbiLib.u > ni | 16 ++ > > > > MdePkg/Library/BaseSerialPortLibRiscVSbiLibRam/BaseSerialPortLibRiscVS > > biLibRam.uni | 16 ++ > > 7 files changed, 630 insertions(+) > > > > diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc index > > 0ac7618b4623..ceccc078ff04 100644 > > --- a/MdePkg/MdePkg.dsc > > +++ b/MdePkg/MdePkg.dsc > > @@ -192,5 +192,7 @@ [Components.ARM, Components.AARCH64] > > > > [Components.RISCV64] > > MdePkg/Library/BaseRiscVSbiLib/BaseRiscVSbiLib.inf > > + > > + MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSb > > + iLib.inf > > + MdePkg/Library/BaseSerialPortLibRiscVSbiLibRam/BaseSerialPortLibRisc > > + VSbiLibRam.inf > > > > [BuildOptions] > > diff --git > > a/MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSb > > iLib.inf > > b/MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSb > > iLib.inf > > new file mode 100644 > > index 000000000000..09cf59f190f6 > > --- /dev/null > > +++ b/MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRis > > +++ cVSbiLib.inf > > @@ -0,0 +1,39 @@ > > +## @file > > +# Serial Port Library backed by SBI console. > > +# > > +# Meant for SEC and PEI (XIP) environments. > > +# > > +# Due to limitations of SBI console interface and XIP environments # > > +(on use of globals), this library instance does not implement reading > > +# and polling the serial port. See PrePiDxeSerialPortLibRiscVSbi for > > +# the full-featured variant meant for PrePi and DXE environments. > > +# > > +# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR> # > > +# SPDX-License-Identifier: BSD-2-Clause-Patent # # ## > > + > > +[Defines] > > + INF_VERSION = 0x0001001B > > + BASE_NAME = BaseSerialPortLibRiscVSbiLib > > + MODULE_UNI_FILE = BaseSerialPortLibRiscVSbiLib.uni > > + FILE_GUID = 639fad38-4bfd-4eb9-9f09-e97c7947d480 > > + MODULE_TYPE = BASE > > + VERSION_STRING = 1.0 > > + LIBRARY_CLASS = SerialPortLib | SEC PEI_CORE PEIM > > + > > + > > +# > > +# VALID_ARCHITECTURES = RISCV64 > > +# > > + > > +[Sources] > > + BaseSerialPortLibRiscVSbiLib.c > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + > > +[LibraryClasses] > > + RiscVSbiLib > > diff --git > > a/MdePkg/Library/BaseSerialPortLibRiscVSbiLibRam/BaseSerialPortLibRisc > > VSbiLibRam.inf > > b/MdePkg/Library/BaseSerialPortLibRiscVSbiLibRam/BaseSerialPortLibRisc > > VSbiLibRam.inf > > new file mode 100644 > > index 000000000000..b7ad1548a309 > > --- /dev/null > > +++ b/MdePkg/Library/BaseSerialPortLibRiscVSbiLibRam/BaseSerialPortLib > > +++ RiscVSbiLibRam.inf > > @@ -0,0 +1,36 @@ > > +## @file > > +# Serial Port Library backed by SBI console. > > +# > > +# Meant for PrePi and DXE environments (where globals are allowed). > > +See # BaseSerialPortLibRiscVSbiLib for a reduced variant appropriate > > +for SEC # and PEI (XIP) environments. > > +# > > +# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR> # > > +# SPDX-License-Identifier: BSD-2-Clause-Patent # # ## > > + > > +[Defines] > > + INF_VERSION = 0x0001001B > > + BASE_NAME = BaseSerialPortLibRiscVSbiLibRam > > + MODULE_UNI_FILE = BaseSerialPortLibRiscVSbiLibRam.uni > > + FILE_GUID = 872af743-ab56-45b4-a065-602567f4820c > > + MODULE_TYPE = BASE > > + VERSION_STRING = 1.0 > > + LIBRARY_CLASS = SerialPortLib | SEC DXE_CORE DXE_DRIVER > DXE_RUNTIME_DRIVER UEFI_DRIVER UEFI_APPLICATION > > + > > + > > +# > > +# VALID_ARCHITECTURES = RISCV64 > > +# > > + > > +[Sources] > > + BaseSerialPortLibRiscVSbiLibRam.c > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + > > +[LibraryClasses] > > + RiscVSbiLib > > diff --git > > a/MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSb > > iLib.c > > b/MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSb > > iLib.c > > new file mode 100644 > > index 000000000000..0ad5931be3ae > > --- /dev/null > > +++ b/MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRis > > +++ cVSbiLib.c > > @@ -0,0 +1,233 @@ > > +/** @file > > + Serial Port Library backed by SBI console. > > + > > + Meant for SEC and PEI (XIP) environments. > > + > > + Due to limitations of SBI console interface and XIP environments > > + (on use of globals), this library instance does not implement > > + reading and polling the serial port. See > > + PrePiDxeSerialPortLibRiscVSbi for the full-featured variant meant for > PrePi and DXE environments. > > + > > + Copyright (c) 2023, Intel Corporation. All rights reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include <Base.h> > > +#include <Library/SerialPortLib.h> > > +#include <Library/BaseRiscVSbiLib.h> > > + > > +/** > > + Initialize the serial device hardware. > > + > > + If no initialization is required, then return RETURN_SUCCESS. > > + If the serial device was successfully initialized, then return > RETURN_SUCCESS. > > + If the serial device could not be initialized, then return > RETURN_DEVICE_ERROR. > > + > > + @retval RETURN_SUCCESS The serial device was initialized. > > + @retval RETURN_DEVICE_ERROR The serial device could not be > initialized. > > + > > +**/ > > +RETURN_STATUS > > +EFIAPI > > +SerialPortInitialize ( > > + VOID > > + ) > > +{ > > + return RETURN_SUCCESS; > > +} > > + > > +/** > > + Write data from buffer to serial device. > > + > > + Writes NumberOfBytes data bytes from Buffer to the serial device. > > + The number of bytes actually written to the serial device is returned. > > + If the return value is less than NumberOfBytes, then the write operation > failed. > > + If Buffer is NULL, then ASSERT(). > > + If NumberOfBytes is zero, then return 0. > > + > > + @param Buffer The pointer to the data buffer to be written. > > + @param NumberOfBytes The number of bytes to written to the serial > device. > > + > > + @retval 0 NumberOfBytes is 0. > > + @retval >0 The number of bytes written to the serial > > device. > > + If this value is less than NumberOfBytes, then > > the write > operation failed. > > + > > +**/ > > +UINTN > > +EFIAPI > > +SerialPortWrite ( > > + IN UINT8 *Buffer, > > + IN UINTN NumberOfBytes > > + ) > > +{ > > + SBI_RET Ret; > > + UINTN Index; > > + > > + Ret = SbiCall (SBI_EXT_BASE, SBI_EXT_BASE_PROBE_EXT, 1, > > + SBI_EXT_DBCN); if ((TranslateError (Ret.Error) == EFI_SUCCESS) && > > + (Ret.Value != 0)) > > + { > > + Ret = SbiCall ( > > + SBI_EXT_DBCN, > > + SBI_EXT_DBCN_WRITE, > > + 3, > > + NumberOfBytes, > > + ((UINTN)Buffer), > > + 0 > > + ); > > + if (TranslateError (Ret.Error) != EFI_SUCCESS) { > > + return 0; > > + } > > + > > + return Ret.Value; > > + } > > + > > + Ret = SbiCall (SBI_EXT_BASE, SBI_EXT_BASE_PROBE_EXT, 1, > > + SBI_EXT_0_1_CONSOLE_PUTCHAR); if ((TranslateError (Ret.Error) == > EFI_SUCCESS) && > > + (Ret.Value != 0)) > > + { > > + for (Index = 0; Index < NumberOfBytes; Index++) { > > + SbiCall (SBI_EXT_0_1_CONSOLE_PUTCHAR, 0, 1, Buffer[Index]); > What happens if it fails? Shouldn't it return immediately instead of > continuing with the loop? > > > + } > > + > > + return Index; > > + } > > + > > + /* > > + * Neither DBCN or legacy extension were present. > > + */ > > + return NumberOfBytes; > Isn't it an error? And for earlier DBCN_WRITE error, 0 is returned. So, > shouldn't we return 0 here also instead of NumberOfBytes? > > Same questions for similar place in other library also. -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#102662): https://edk2.groups.io/g/devel/message/102662 Mute This Topic: https://groups.io/mt/98064147/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-