Hi Manic, thanks a lot for spending time on this!
Laszlo On 04/12/22 20:40, Manickavasakam Karpagavinayagam wrote: > Laszlo : > > Checked internally and came to know that Aptio BIOS for this platform doesn't > support the serial redirection support during POST. > > Thank you > > -Manic > > -----Original Message----- > From: Laszlo Ersek <ler...@redhat.com> > Sent: Friday, April 8, 2022 5:20 AM > To: Manickavasakam Karpagavinayagam <manickavasak...@ami.com>; Gerd Hoffmann > <kra...@redhat.com>; Srini Narayana <sri...@ami.com>; KarenLee [李致瑤] > <karen...@ami.com>; Harikrishna Doppalapudi <harikrish...@ami.com> > Cc: devel@edk2.groups.io; Ramesh R. <rame...@ami.com>; Sivaraman Nainar > <sivaram...@ami.com> > Subject: Re: [EXTERNAL] Re: [edk2-devel] Intel NUC platform firmware -- no > serial I/O support? > > Hi Manic, > > On 04/07/22 19:04, Manickavasakam Karpagavinayagam wrote: >> Laszlo/Gred : >> >> Can you please let us know the GITHUB project location from where you have >> downloaded the source ? > > I didn't download any new source code. I've just had my local edk2 clone as > always, and the small patch at the bottom (adding "NucSerialPkg", just for > the sake of buildig SerialDxe and TerminalDxe in separation) applies on top > of current master. > > Thanks > Laszlo > >> >> Thank you >> >> -Manic >> >> -----Original Message----- >> From: Laszlo Ersek <ler...@redhat.com> >> Sent: Thursday, April 7, 2022 10:12 AM >> To: Gerd Hoffmann <kra...@redhat.com> >> Cc: devel@edk2.groups.io; Ramesh R. <rame...@ami.com>; Sivaraman >> Nainar <sivaram...@ami.com>; Manickavasakam Karpagavinayagam >> <manickavasak...@ami.com> >> Subject: [EXTERNAL] Re: [edk2-devel] Intel NUC platform firmware -- no >> serial I/O support? >> >> >> **CAUTION: The e-mail below is from an external source. Please >> exercise caution before opening attachments, clicking links, or >> following guidance.** >> >> On 04/07/22 14:50, Gerd Hoffmann wrote: >> >>> Well, it at least looks like 16550 / ide hardware. Not sure how this >>> is actually implemented, I suspect it is virtual, maybe port access >>> traps into SMM and it's emulated there. Or the management engine can >>> intercept those port accesses somehow. >> >>> If today's hardware still works the same way I'd expect you have a >>> little driver taking the role of SioBusDxe, but binding to >>> PCI_CLASS_COMMUNICATION_SERIAL devices instead of a LPC bridge with >>> isa serial ports behind it. Possibly the AMI drivers you've seen are >>> just that. >>> >>> Does the NUC accept unsigned firmware updates? If so we can maybe >>> just add a SioBusDxe driver variant customized for the NUC hardware >> >> You are spot on, but reality is even simpler than this. :) >> >> Here's what I've done: >> >> (1) I cross-referenced three lists of PCI IDs: >> >> (1.1) The supported IDs in the windows UART driver INF file, downloaded from >> Intel, for this NUC. >> >> (1.2) The "lspci" output on the NUC. >> >> (1.3) The "drivers/mfd/intel-lpss-pci.c" file in the Linux tree. >> >> Result: there is no separate PCI device on this NUC that stands for a >> serial controller. Furthermore, "intel-lpss-pci.c" suggests all the >> "LPSS" serial ports (UARTs) are 16550 compatible -- see the reference >> chain >> >> <all UART IDs> -> spt_uart_info -> uart_node -> uart_properties -> >> "snps,uart-16550-compatible". >> >> (2) While navigating the (graphical) Setup UI, I noticed that HII debug >> messages *were* sent to the serial port, by this nice, graphical, Setup >> Browser. >> >> (3) The particular (non-Linux) kernel that I booted on this NUC could >> flawlessly drive the serial port for input and output just by my >> specification of the bog standard params baud-rate=115200, 8 data bits, no >> parity, 1 stop bit. >> >> That gave me the following idea: >> >>> commit 0e794fe273b77830532ffb003b0d5539d7ae9823 (HEAD -> >>> nuc_serial_pkg) >>> Author: Laszlo Ersek <ler...@redhat.com> >>> Date: Thu Apr 7 14:37:13 2022 +0200 >>> >>> add NucSerialPkg: build SerialDxe and TerminalDxe for the >>> NUC8i3PNH >>> >>> Signed-off-by: Laszlo Ersek <ler...@redhat.com> >>> >>> diff --git a/NucSerialPkg/NucSerialPkg.dec >>> b/NucSerialPkg/NucSerialPkg.dec new file mode 100644 index >>> 000000000000..b077cde229c0 >>> --- /dev/null >>> +++ b/NucSerialPkg/NucSerialPkg.dec >>> @@ -0,0 +1,13 @@ >>> +## @file >>> +# UART 16650 serial port driver build for the NUC8i3PNH. >>> +# >>> +# Copyright (c) 2022, Red Hat, Inc. >>> +# >>> +# SPDX-License-Identifier: BSD-2-Clause-Patent ## >>> + >>> +[Defines] >>> + DEC_SPECIFICATION = 1.29 >>> + PACKAGE_NAME = NucSerialPkg >>> + PACKAGE_GUID = afdaaf17-4a06-4d97-a456-1ede0db46bc0 >>> + PACKAGE_VERSION = 0.1 >>> diff --git a/NucSerialPkg/NucSerialPkg.dsc >>> b/NucSerialPkg/NucSerialPkg.dsc new file mode 100644 index >>> 000000000000..971fb2f96a43 >>> --- /dev/null >>> +++ b/NucSerialPkg/NucSerialPkg.dsc >>> @@ -0,0 +1,46 @@ >>> +## @file >>> +# UART 16650 serial port driver build for the NUC8i3PNH. >>> +# >>> +# Copyright (c) 2022, Red Hat, Inc. >>> +# >>> +# SPDX-License-Identifier: BSD-2-Clause-Patent ## >>> + >>> +[Defines] >>> + PLATFORM_NAME = NucSerial >>> + PLATFORM_GUID = 30c397cf-a446-4f41-858f-9ae677547094 >>> + PLATFORM_VERSION = 0.1 >>> + DSC_SPECIFICATION = 1.30 >>> + OUTPUT_DIRECTORY = Build/NucSerial >>> + SUPPORTED_ARCHITECTURES = X64 >>> + BUILD_TARGETS = NOOPT|DEBUG|RELEASE >>> + SKUID_IDENTIFIER = DEFAULT >>> + >>> +[BuildOptions] >>> + GCC:RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG >>> + RELEASE_*_*_GENFW_FLAGS = --zero >>> + GCC:*_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES >>> + >>> +[LibraryClasses] >>> + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf >>> + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf >>> + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf >>> + >>> +DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf >>> + IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf >>> + >>> +MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemor >>> +MemoryAllocationLib|y >>> +AllocationLib.inf >>> + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf >>> + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf >>> + >>> +RegisterFilterLib|MdePkg/Library/RegisterFilterLibNull/RegisterFilte >>> +RegisterFilterLib|r >>> +LibNull.inf >>> + >>> +ReportStatusCodeLib|MdePkg/Library/BaseReportStatusCodeLibNull/BaseR >>> +ReportStatusCodeLib|e >>> +portStatusCodeLibNull.inf >>> + SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf >>> + >>> +UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/Uef >>> +UefiBootServicesTableLib|i >>> +BootServicesTableLib.inf >>> + >>> +UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverE >>> +UefiDriverEntryPoint|n >>> +tryPoint.inf >>> + UefiLib|MdePkg/Library/UefiLib/UefiLib.inf >>> + >>> +UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableL >>> +UefiRuntimeServicesTableLib|i >>> +b/UefiRuntimeServicesTableLib.inf >>> + >>> +[PcdsFeatureFlag] >>> + gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport|FALSE >>> + >>> +[Components] >>> + MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf >>> + MdeModulePkg/Universal/SerialDxe/SerialDxe.inf >> >> The key line is the following lib class resolution: >> >> SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf >> >> It's the simplest possible (= most compatible) approach on X64. >> >> And It Just Works (TM), with the following two commands in the UEFI shell >> (after I copied the binaries to the USB stick, alongside the UEFI Shell >> binary I built earlier): >> >>> Shell> fs0: >>> FS0:\> cd efi\boot >>> FS0:\efi\boot\> load SerialDxe.efi >>> Image 'FS0:\EFI\BOOT\SerialDxe.efi' loaded at 2C801000 - Success >>> FS0:\efi\boot\> load TerminalDxe.efi Image >>> 'FS0:\EFI\BOOT\TerminalDxe.efi' loaded at 2C7FB000 - Success >>> FS0:\efi\boot\> >> >> At this point, the UEFI console is properly multiplexed to both serial and >> HDMI+USB. >> >> (Side comment: SerialDxe is not even a UEFI_DRIVER just a DXE_DRIVER, >> so it produces SerialIo immediately.) >> >> With the serial console up, I can provide a "drivers" output too: >> >>> FS0:\efi\boot\> drivers >>> T D >>> D Y C I >>> R P F A >>> V VERSION E G G #D #C DRIVER NAME IMAGE NAME >>> == ======== = = = == == =================================== ========== >>> 49 00000017 D - - 1 - AMI USB Driver Uhcd >>> 4B 00000017 B - - 1 3 AMI USB Bus Driver Uhcd >>> 4C 00000002 D - - 2 - AMI USB Hid Driver Uhcd >>> 4D 00000001 D - - 1 - AMI USB Mass Storage Driver Uhcd >>> 78 00010000 ? - - - - AMI NTFS Driver NTFS >>> 7A 00000001 D - - 2 - <null string> MouseDriver >>> 7D 00000001 D - - 1 - AMI AHCI BUS Driver Ahci >>> 7F 00000010 ? - - - - AMI Serial I/O Driver SerialIo >>> 83 00000001 B - - 1 1 AMI NVMe BUS Driver Nvme >>> 124 00000010 D - - 1 - Serial ATA Controller Initializatio >>> SataController >>> 132 00000010 B - - 2 2 AMI Console Splitter Text Out Drive >>> ConSplitter >>> 133 00000010 B - - 2 2 AMI Console Splitter Text In Driver >>> ConSplitter >>> 134 00000010 B - - 1 1 AMI Console Splitter Pointer Driver ConSplitter >>> 137 00000010 D - - 1 - AMI Graphic Console Driver GraphicsConsole >>> 138 0000000A D - - 8 - Generic Disk I/O Driver DiskIoDxe >>> 139 0000000B B - - 2 6 Partition Driver(MBR/GPT/El Torito) PartitionDxe >>> 13D 00000000 ? - - - - Integrated Touch Driver IntegratedTouch >>> 13E 0000000A ? - - - - Bluetooth Bus Driver BluetoothBusDxe >>> 13F 0000000A ? - - - - <null string> BluetoothBusDxe >>> 140 0000000A ? - - - - Bluetooth Connection Manager >>> BluetoothConfigDxe >>> 141 0000000A ? - - - - Bluetooth HID Driver BluetoothHidDxe >>> 142 0000000A ? - - - - Hid Keyboard Driver HidKbDxe >>> 143 0000000A ? - - - - Hid Mouse Driver HidMouseDxe >>> 147 00000010 D - - 1 - AMI Generic LPC Super I/O Driver GenericSio >>> 149 00A50111 B - - 1 17 AMI PCI Bus Driver PciBus >>> 14B 00000010 ? - - - - AMI PS/2 Driver Ps2Main >>> 14D 00000010 ? - - - - AMI Terminal Driver TerminalSrc >>> 14E 0000000A ? - - - - IpSec Driver IpSecDxe >>> 150 0000000A ? - - - - IpSec Driver IpSecDxe >>> 151 0000000A ? - - - - VLAN Configuration Driver VlanConfigDxe >>> 152 0000000A ? - - - - HttpDxe HttpDxe >>> 153 0000000A ? - - - - HttpDxe HttpDxe >>> 154 00000000 ? - - - - DNS Network Service Driver DnsDxe >>> 155 00000000 ? - - - - DNS Network Service Driver DnsDxe >>> 158 0000000A D - - 4 - FAT File System Driver Fat >>> 159 0000000A ? - - - - iSCSI Driver IScsiDxe >>> 15A 0000000A ? - - - - iSCSI Driver IScsiDxe >>> 15C 0000000A ? - - - - SCSI Bus Driver ScsiBus >>> 15D 0000000A ? - - - - Scsi Disk Driver ScsiDisk >>> 16A 0900044A B - - 1 1 Intel(R) GOP Driver [9.0.1098] >>> MemoryMapped(0x3,0x29A33018,0x29A44A98) >>> 19B 0000000A B - - 1 1 Serial Terminal Driver >>> \EFI\BOOT\TerminalDxe.efi >> >> SerialDxe is not in the list, as it is not a UEFI driver (it does not >> install an instance of the Driver Binding protocol). >> >> The curious parts are: >> >> - what the "TerminalSrc" driver ("AMI Terminal Driver") stands for (it >> does not bind the SerialIo instance installed by SerialDxe, not even >> after "connect -r" -- that's why I need TerminalDxe from edk2), >> >> - why the platform firmware packager thought it would be a good idea to >> *exclude* the SerialDxe and TerminalDxe drivers -- these binaries >> weigh in at 23 KB together, in a DEBUG build! And the hardware is >> there... >> >> Thanks, >> Laszlo >> >> -The information contained in this message may be confidential and >> proprietary to American Megatrends (AMI). This communication is intended to >> be read only by the individual or entity to whom it is addressed or by their >> designee. If the reader of this message is not the intended recipient, you >> are on notice that any distribution of this message, in any form, is >> strictly prohibited. Please promptly notify the sender by reply e-mail or by >> telephone at 770-246-8600, and then delete or destroy all copies of the >> transmission. >> > > -The information contained in this message may be confidential and > proprietary to American Megatrends (AMI). This communication is intended to > be read only by the individual or entity to whom it is addressed or by their > designee. If the reader of this message is not the intended recipient, you > are on notice that any distribution of this message, in any form, is strictly > prohibited. Please promptly notify the sender by reply e-mail or by telephone > at 770-246-8600, and then delete or destroy all copies of the transmission. > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#88843): https://edk2.groups.io/g/devel/message/88843 Mute This Topic: https://groups.io/mt/90308335/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-