From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.9386.1588690241255026407 for ; Tue, 05 May 2020 07:50:41 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ard.biesheuvel@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BB2951FB; Tue, 5 May 2020 07:50:39 -0700 (PDT) Received: from e123331-lin.nice.arm.com (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 67ED93F68F; Tue, 5 May 2020 07:50:38 -0700 (PDT) From: "Ard Biesheuvel" To: devel@edk2.groups.io Cc: leif@nuviainc.com, pete@akeo.ie, andrey.warkentin@gmail.com, Ard Biesheuvel Subject: [PATCH edk2-platforms 0/5] Platform/RaspberryPi: fix serialportlib dependency hell Date: Tue, 5 May 2020 16:50:24 +0200 Message-Id: <20200505145029.29826-1-ard.biesheuvel@arm.com> X-Mailer: git-send-email 2.17.1 This proposes an alternative approach to the issue described in https://github.com/raspberrypi/firmware/issues/1376. Instead of fiddling with HobLib internals and relying on headers being included in the correct order, this replaces all DEBUG uses of SerialPortLib with an implementation that doesn't reprogram the UART at all (and so does not need to know the value of the base clock), and updates the two remaining users to query the firmware for the correct value before touching the h/w. NOTE: build tested only. Ard Biesheuvel (5): Platform/RaspberryPi/DualSerialPortLib: split up to ease reuse Platform/RaspberryPi: introduce DebugDualSerialPortLib Platform/RaspberryPi: fix 16550 divisor calculation logic Platform/RaspberryPi3: query firmware for 16550 input clock at boot Platform/RaspberryPi: create DXE phase SerialPortLib version for RPi3 Platform/RaspberryPi/RPi3/RPi3.dsc | 16 +- Platform/RaspberryPi/RPi4/RPi4.dsc | 14 +- .../DebugDualSerialPortLib.inf | 46 ++++ ...alPortLib.inf => DualSerialPortDxeLib.inf} | 30 ++- .../DualSerialPortLib/DualSerialPortLib.inf | 5 +- .../DualSerialPortLib/DualSerialPortLib.h | 82 ++++++ .../DebugDualSerialPortLib.c | 28 ++ .../DualSerialPortLib/DualSerialPortLib.c | 243 +----------------- .../DualSerialPortLibCommon.c | 218 ++++++++++++++++ .../DualSerialPortLibConstructor.c | 40 +++ .../PlatformLib/AArch64/RaspberryPiHelper.S | 25 +- 11 files changed, 494 insertions(+), 253 deletions(-) create mode 100644 Platform/RaspberryPi/Library/DualSerialPortLib/DebugDualSerialPortLib.inf copy Platform/RaspberryPi/Library/DualSerialPortLib/{DualSerialPortLib.inf => DualSerialPortDxeLib.inf} (69%) create mode 100644 Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLib.h create mode 100644 Platform/RaspberryPi/Library/DualSerialPortLib/DebugDualSerialPortLib.c create mode 100644 Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLibCommon.c create mode 100644 Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLibConstructor.c -- 2.17.1