From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by mx.groups.io with SMTP id smtpd.web11.1971.1583231856325252314 for ; Tue, 03 Mar 2020 02:37:36 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=wqGU+668; spf=pass (domain: linaro.org, ip: 209.85.221.66, mailfrom: ard.biesheuvel@linaro.org) Received: by mail-wr1-f66.google.com with SMTP id h9so2700377wrr.10 for ; Tue, 03 Mar 2020 02:37:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=sa1N98Hmxj8LU44YSopP76VTl3CFoq1w3hpEhPCFq4k=; b=wqGU+668iz+y2vUo3cskVuAha/iGTzQw5niFf/kYX9X6eCCwsmnl9ImF5FhFvCt2bz xbZrWBqZRb+SAY9lFGJI28S0wWBnjneybsKaP2Vq2WIxsg+mGR7rfDrg8VhMRXLGSKRz pedMGpHWbkJjTo8KYQxYUsU032KniTTPTs4HAwdPfjPmJ45j3K1pz9EK7810frDaTf9/ nlYWdvw/8KrWUdocVsKxeZHXrriifJRSP1IWesl/miMZ8Zci39t4PdtDZGeIdsXo77/F bnnLcDpD9Y7VERnPkIPcaalNL8n1ZqsfF8buf5U5bLmYeBKqr0yGCOzVhQI9XoT7lhDg y73g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=sa1N98Hmxj8LU44YSopP76VTl3CFoq1w3hpEhPCFq4k=; b=pHajwEpS4MxHTJ3qj/NfVVGBF7QjE8mDWlEf34wyJg5uN7pCb3NQzql4iHbUP9aL7x rPUhNMc2O+93m0XeKvpghk2Azp/5SnHHeSomwQABsIHJeAtxBoeV5STk+MbjnvYbNHgj QLryoWxJQFboqqnhs4LvQYzo1I94xjCPf888xAdcupS9Q5zo2GgMhZzooTMHPoGq75tF 5lsJr6IiND0xgjIfe2OzjD/66sNO09VDcdJ0vfLi4hEksWLbRdzIDdnQXuSeLQjZuFFX aXCAnpi3IWvpKGI7+S5j89J/eJmyxm0logJF9rdv2B5YA6hQ6aucmk5cVsL4ESys/If/ RQ+g== X-Gm-Message-State: ANhLgQ2zPtBWdy59meRNDRsnwxRThXMUiCWe8Kj/MQF2Djb20ppRJ8bi b0aN4gtI4QBYmKX8mHM7S3hmBWyfYeTlABZfSv9Cnw== X-Google-Smtp-Source: ADFU+vuFijZJorMr5bnYPRGa1rTMEbjhHk4yoNrdAh53j4BjcxF26JprkYhhASkP8aojRm1+cJxgx7KC1m6IjsOWw3w= X-Received: by 2002:adf:a411:: with SMTP id d17mr4798035wra.126.1583231854784; Tue, 03 Mar 2020 02:37:34 -0800 (PST) MIME-Version: 1.0 References: <20200303103339.7468-1-pete@akeo.ie> <20200303103339.7468-2-pete@akeo.ie> In-Reply-To: <20200303103339.7468-2-pete@akeo.ie> From: "Ard Biesheuvel" Date: Tue, 3 Mar 2020 11:37:23 +0100 Message-ID: Subject: Re: [edk2-devel][PATCH 1/5] Platform/RPi: Add firmware call to read installed memory size To: Pete Batard Cc: edk2-devel-groups-io , Leif Lindholm , =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= , Andrei Warkentin Content-Type: text/plain; charset="UTF-8" On Tue, 3 Mar 2020 at 11:33, Pete Batard wrote: > > From: Andrei Warkentin > > Add a new RPiFirmwareGetModelInstalledMB () call in RpiFirmwareDxe > to return the amount of detected installed RAM on the system (in MB). > > Use the new call in PlatformSmbiosDxe. > > Signed-off-by: Pete Batard Please split this into two patches > --- > Platform/RaspberryPi/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.c | 10 ++--- > Platform/RaspberryPi/Drivers/RpiFirmwareDxe/RpiFirmwareDxe.c | 29 +++++++++++- > Platform/RaspberryPi/Include/Protocol/RpiFirmware.h | 47 +++++++++++--------- > 3 files changed, 59 insertions(+), 27 deletions(-) > > diff --git a/Platform/RaspberryPi/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.c b/Platform/RaspberryPi/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.c > index f25c439f89c8..5585cb846f41 100644 > --- a/Platform/RaspberryPi/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.c > +++ b/Platform/RaspberryPi/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.c > @@ -870,21 +870,19 @@ MemArrMapInfoUpdateSmbiosType19 ( > ) > { > EFI_STATUS Status; > - UINT32 BoardRevision = 0; > + UINT32 InstalledMB = 0; > > // Note: Type 19 addresses are expressed in KB, not bytes > // The memory layout used in all known Pi SoC's starts at 0 > mMemArrMapInfoType19.StartingAddress = 0; > + > // The minimum RAM size used on any Raspberry Pi model is 256 MB > mMemArrMapInfoType19.EndingAddress = 256 * 1024; > - Status = mFwProtocol->GetModelRevision (&BoardRevision); > + Status = mFwProtocol->GetModelInstalledMB (&InstalledMB); > if (Status != EFI_SUCCESS) { > DEBUG ((DEBUG_WARN, "Couldn't get the board memory size - defaulting to 256 MB: %r\n", Status)); > } else { > - // www.raspberrypi.org/documentation/hardware/raspberrypi/revision-codes/README.md > - // Bits [20-22] indicate the amount of memory starting with 256MB (000b) > - // and doubling in size for each value (001b = 512 MB, 010b = 1GB, etc.) > - mMemArrMapInfoType19.EndingAddress <<= (BoardRevision >> 20) & 0x07; > + mMemArrMapInfoType19.EndingAddress = InstalledMB * 1024; > } > mMemArrMapInfoType19.EndingAddress -= 1; > > diff --git a/Platform/RaspberryPi/Drivers/RpiFirmwareDxe/RpiFirmwareDxe.c b/Platform/RaspberryPi/Drivers/RpiFirmwareDxe/RpiFirmwareDxe.c > index 75826fdc0e53..40c78b5d57cf 100644 > --- a/Platform/RaspberryPi/Drivers/RpiFirmwareDxe/RpiFirmwareDxe.c > +++ b/Platform/RaspberryPi/Drivers/RpiFirmwareDxe/RpiFirmwareDxe.c > @@ -606,6 +606,32 @@ RpiFirmwareGetModelName ( > } > } > > +STATIC > +EFI_STATUS > +EFIAPI > +RPiFirmwareGetModelInstalledMB ( > + OUT UINT32 *InstalledMB > + ) > +{ > + EFI_STATUS Status; > + UINT32 Revision; > + > + Status = RpiFirmwareGetModelRevision(&Revision); > + if (EFI_ERROR(Status)) { > + DEBUG ((DEBUG_ERROR, "%a: Could not get the board revision: Status == %r\n", > + __FUNCTION__, Status)); > + return EFI_DEVICE_ERROR; > + } > + > + // > + // www.raspberrypi.org/documentation/hardware/raspberrypi/revision-codes/README.md > + // Bits [20-22] indicate the amount of memory starting with 256MB (000b) > + // and doubling in size for each value (001b = 512 MB, 010b = 1GB, etc.) > + // > + *InstalledMB = 256 << ((Revision >> 20) & 0x07); > + return EFI_SUCCESS; > +} > + > STATIC > EFI_STATUS > EFIAPI > @@ -1236,7 +1262,8 @@ STATIC RASPBERRY_PI_FIRMWARE_PROTOCOL mRpiFirmwareProtocol = { > RpiFirmwareGetFirmwareRevision, > RpiFirmwareGetManufacturerName, > RpiFirmwareGetCpuName, > - RpiFirmwareGetArmMemory > + RpiFirmwareGetArmMemory, > + RPiFirmwareGetModelInstalledMB, > }; > > /** > diff --git a/Platform/RaspberryPi/Include/Protocol/RpiFirmware.h b/Platform/RaspberryPi/Include/Protocol/RpiFirmware.h > index e3287e3c040f..108becbd3b6d 100644 > --- a/Platform/RaspberryPi/Include/Protocol/RpiFirmware.h > +++ b/Platform/RaspberryPi/Include/Protocol/RpiFirmware.h > @@ -115,6 +115,12 @@ EFI_STATUS > UINT32 *Revision > ); > > +typedef > +EFI_STATUS > +(EFIAPI *GET_MODEL_INSTALLED_MB) ( > + UINT32 *InstalledMB > + ); > + > typedef > CHAR8* > (EFIAPI *GET_MANUFACTURER_NAME) ( > @@ -135,26 +141,27 @@ EFI_STATUS > ); > > typedef struct { > - SET_POWER_STATE SetPowerState; > - GET_MAC_ADDRESS GetMacAddress; > - GET_COMMAND_LINE GetCommandLine; > - GET_CLOCK_RATE GetClockRate; > - GET_CLOCK_RATE GetMaxClockRate; > - GET_CLOCK_RATE GetMinClockRate; > - SET_CLOCK_RATE SetClockRate; > - GET_FB GetFB; > - FREE_FB FreeFB; > - GET_FB_SIZE GetFBSize; > - SET_LED SetLed; > - GET_SERIAL GetSerial; > - GET_MODEL GetModel; > - GET_MODEL_REVISION GetModelRevision; > - GET_MODEL_NAME GetModelName; > - GET_MODEL_FAMILY GetModelFamily; > - GET_FIRMWARE_REVISION GetFirmwareRevision; > - GET_MANUFACTURER_NAME GetManufacturerName; > - GET_CPU_NAME GetCpuName; > - GET_ARM_MEM GetArmMem; > + SET_POWER_STATE SetPowerState; > + GET_MAC_ADDRESS GetMacAddress; > + GET_COMMAND_LINE GetCommandLine; > + GET_CLOCK_RATE GetClockRate; > + GET_CLOCK_RATE GetMaxClockRate; > + GET_CLOCK_RATE GetMinClockRate; > + SET_CLOCK_RATE SetClockRate; > + GET_FB GetFB; > + FREE_FB FreeFB; > + GET_FB_SIZE GetFBSize; > + SET_LED SetLed; > + GET_SERIAL GetSerial; > + GET_MODEL GetModel; > + GET_MODEL_REVISION GetModelRevision; > + GET_MODEL_NAME GetModelName; > + GET_MODEL_FAMILY GetModelFamily; > + GET_FIRMWARE_REVISION GetFirmwareRevision; > + GET_MANUFACTURER_NAME GetManufacturerName; > + GET_CPU_NAME GetCpuName; > + GET_ARM_MEM GetArmMem; > + GET_MODEL_INSTALLED_MB GetModelInstalledMB; > } RASPBERRY_PI_FIRMWARE_PROTOCOL; > > extern EFI_GUID gRaspberryPiFirmwareProtocolGuid; > -- > 2.21.0.windows.1 >