[edk2-devel] [PATCH V2 08/10] Platform/RaspberryPi: Allow pin function selection at runtime
Jeremy Linton
jeremy.linton at arm.com
Sun Jan 2 05:49:22 UTC 2022
Update GpioLib slightly so that we can change the GPIO pin
muxing at runtime. For the moment only the GpioPinFuncGet/Set()
routines are used at runtime, and only by the Variable service.
Tested-by: Ard Biesheuvel <ardb at kernel.org>
Signed-off-by: Jeremy Linton <jeremy.linton at arm.com>
---
Silicon/Broadcom/Bcm283x/Include/Library/GpioLib.h | 6 ++++++
Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.c | 16 ++++++++++++++--
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/Silicon/Broadcom/Bcm283x/Include/Library/GpioLib.h b/Silicon/Broadcom/Bcm283x/Include/Library/GpioLib.h
index 1f7d2204e0..79765be4fb 100644
--- a/Silicon/Broadcom/Bcm283x/Include/Library/GpioLib.h
+++ b/Silicon/Broadcom/Bcm283x/Include/Library/GpioLib.h
@@ -45,4 +45,10 @@ GpioSetPull (
IN UINTN Pud
);
+VOID
+GpioSetupRuntime (
+ VOID
+);
+
+
#endif /* __GPIO_LIB__ */
diff --git a/Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.c b/Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.c
index eaf53e5369..fc1f928e6b 100644
--- a/Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.c
+++ b/Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.c
@@ -15,10 +15,22 @@
#include <Library/DebugLib.h>
#include <Library/IoLib.h>
#include <Library/GpioLib.h>
+#include <Library/UefiRuntimeLib.h>
#include <Library/TimerLib.h>
#include <IndustryStandard/Bcm2836.h>
#include <IndustryStandard/Bcm2836Gpio.h>
+
+STATIC EFI_PHYSICAL_ADDRESS GpioGfpSel0 = GPIO_GPFSEL0;
+
+VOID
+GpioSetupRuntime (
+ VOID
+ )
+{
+ EfiConvertPointer (0x0, (VOID**)&GpioGfpSel0);
+}
+
STATIC
VOID
GpioFSELModify (
@@ -30,7 +42,7 @@ GpioFSELModify (
UINT32 Val;
EFI_PHYSICAL_ADDRESS Reg;
- Reg = RegIndex * sizeof (UINT32) + GPIO_GPFSEL0;
+ Reg = RegIndex * sizeof (UINT32) + GpioGfpSel0;
ASSERT (Reg <= GPIO_GPFSEL5);
ASSERT ((~ModifyMask & FunctionMask) == 0);
@@ -77,7 +89,7 @@ GpioPinFuncGet (
RegIndex = Pin / 10;
SelIndex = Pin % 10;
- Reg = RegIndex * sizeof (UINT32) + GPIO_GPFSEL0;
+ Reg = RegIndex * sizeof (UINT32) + GpioGfpSel0;
Val = MmioRead32 (Reg);
Val >>= SelIndex * GPIO_FSEL_BITS_PER_PIN;
--
2.13.7
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#85256): https://edk2.groups.io/g/devel/message/85256
Mute This Topic: https://groups.io/mt/88087670/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list