From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by mx.groups.io with SMTP id smtpd.web12.3676.1570748674585745575 for ; Thu, 10 Oct 2019 16:04:34 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=Rhp0mC53; spf=pass (domain: linaro.org, ip: 209.85.128.67, mailfrom: leif.lindholm@linaro.org) Received: by mail-wm1-f67.google.com with SMTP id v17so8331015wml.4 for ; Thu, 10 Oct 2019 16:04:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=y6SJcXvY42Z6/QsCj0urtT3N0Ci1k7BMeFWSvYsD0SI=; b=Rhp0mC53jq4mcDlkMJke9glVfeuum1nG4ccgAh3j3GODP7hynOkpV8+4siR3nWPP7a +/DuabtPPWs+gYiXWUVDY9yZMHd9iSx17ZW+NlfeTIexjJvVb5iSwM9nZjegDee9KOAI nBKMCbuOxq4NcPvfgXfo/ueEgdn/TLeiiTEIVExgA8RLbh2nDEDt8kFf7G65f955EMEu wlRJXY6KZLG5lOWrjDPp+8tfCmJuH90u1JFrA4gN0piTxa8OV287lfAUaUuJ5kEVcrAw PjZ5IBn20MZaTYPOIcAH2p1S+POL1ny8Qo8USBQiATVDp3RiMgoN4Q+5X4/TGuCFRUEe ficA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=y6SJcXvY42Z6/QsCj0urtT3N0Ci1k7BMeFWSvYsD0SI=; b=ZTtQyhQeAm+UYN/ktuVEKH+/uyKKgE4UvWZD7jWAI4KCZE+RneHH2L0Gj+gdNcCNRS /019GAsB/ZQ5kNAUz3Nti6mxn5BjIzujX5yuxmBQSdS+wgUMKdSh+QXk35OAZmrE3yDI u2bIgwhIkIA9llfPR+VCwvxEHR9P45iOKZyxlY23uZGVQeggOXxM83ylDdsyjDHonWOP CauldpGJKKHUmCcIEUDn+Li8ijt1Pga3i8hL6rMfLIVRVOx0yCwhNYNR7eI6GYNNI/0p O1C81dDDVqm0mHvVgUa/4X9zU0fU/A+4pTZxxz0jIbby/YbyFakWxVb67wX/zp5t3gSP w6gg== X-Gm-Message-State: APjAAAWEhngmaQ4/7F10s/mBfpPSyLTZ/PnModWSxzOmXKpa7gUioTyq B6OWPTx/swekvRxCOe3B/4duWg== X-Google-Smtp-Source: APXvYqyz1/04iipLp6mq47iEd4vW8+pYq+5Z0xVc3W+/yD7MXmtNskqRHuoc/lJdt6sLqweuysO0+g== X-Received: by 2002:a05:600c:2291:: with SMTP id 17mr573192wmf.171.1570748673005; Thu, 10 Oct 2019 16:04:33 -0700 (PDT) Return-Path: Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id u68sm10673035wmu.12.2019.10.10.16.04.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Oct 2019 16:04:32 -0700 (PDT) Date: Fri, 11 Oct 2019 00:04:30 +0100 From: "Leif Lindholm" To: Marcin Wojtas Cc: devel@edk2.groups.io, ard.biesheuvel@linaro.org, jsd@semihalf.com, jaz@semihalf.com, kostap@marvell.com, Patryk Duda Subject: Re: [edk2-platforms: PATCH v3 8/9] Marvell/Drivers: SmbiosPlatformDxe: Load SMBIOS strings from PCD Message-ID: <20191010230430.GX25504@bivouac.eciton.net> References: <1570686139-25182-1-git-send-email-mw@semihalf.com> <1570686139-25182-9-git-send-email-mw@semihalf.com> MIME-Version: 1.0 In-Reply-To: <1570686139-25182-9-git-send-email-mw@semihalf.com> User-Agent: Mutt/1.10.1 (2018-07-13) Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Thu, Oct 10, 2019 at 07:42:18AM +0200, Marcin Wojtas wrote: > From: Patryk Duda > > This patch implements convenient way of changing strings included > in SMBIOS Table1, Table2, Table3. > > Strings can be altered by defining following PCDs: > gMarvellTokenSpaceGuid.PcdProductManufacturer > gMarvellTokenSpaceGuid.PcdProductPlatformName > gMarvellTokenSpaceGuid.PcdProductVersion > gMarvellTokenSpaceGuid.PcdProductSerial > > This patch adds also limit for length of string which can be increased > if necessary in future. > > Signed-off-by: Patryk Duda > --- > Silicon/Marvell/Marvell.dec | 6 ++ > Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf | 4 + > Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c | 79 +++++++++++++++++--- > 3 files changed, 78 insertions(+), 11 deletions(-) > > diff --git a/Silicon/Marvell/Marvell.dec b/Silicon/Marvell/Marvell.dec > index d337d3e..a84b056 100644 > --- a/Silicon/Marvell/Marvell.dec > +++ b/Silicon/Marvell/Marvell.dec > @@ -169,6 +169,12 @@ > gMarvellTokenSpaceGuid.PcdPciEAhci|{ 0x0 }|VOID*|0x3000034 > gMarvellTokenSpaceGuid.PcdPciESdhci|{ 0x0 }|VOID*|0x3000035 > > +#Platform description > + gMarvellTokenSpaceGuid.PcdProductManufacturer|"Marvell \0"|VOID*|0x50000100 > + gMarvellTokenSpaceGuid.PcdProductPlatformName|"Marvell Development Board \0"|VOID*|0x50000101 > + gMarvellTokenSpaceGuid.PcdProductSerial|"Serial Not Set \0"|VOID*|0x50000103 > + gMarvellTokenSpaceGuid.PcdProductVersion|"Revision unknown \0"|VOID*|0x50000102 > + I'm not too pleased about this random number of spaces. I'm cool with the strings, but they should be treated as such, not magical data structures. > #RTC > gMarvellTokenSpaceGuid.PcdRtcBaseAddress|0x0|UINT64|0x40000052 > > diff --git a/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf b/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf > index 8b4586c..7722146 100644 > --- a/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf > +++ b/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf > @@ -36,6 +36,10 @@ > > [FixedPcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareRevision > + gMarvellTokenSpaceGuid.PcdProductManufacturer > + gMarvellTokenSpaceGuid.PcdProductPlatformName > + gMarvellTokenSpaceGuid.PcdProductSerial > + gMarvellTokenSpaceGuid.PcdProductVersion > > [Protocols] > gEfiSmbiosProtocolGuid # PROTOCOL ALWAYS_CONSUMED > diff --git a/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c b/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c > index 08f4fa7..c5b1d77 100644 > --- a/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c > +++ b/Silicon/Marvell/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c > @@ -21,6 +21,22 @@ > #include > > // > +// SMBIOS specification indicates that there is no limit for string size. > +// However, some strings are printed in UEFI and OS. Printing very big string > +// can lead to unexpected behaviour. Second reason of string size definition > +// is that static buffers can be used instead of dynamic ones. > +// > +// Nevertheless, this value can be increased if necessary > +// > + > +#define MV_SMBIOS_STRING_MAX_SIZE 32 > + > +STATIC CHAR8 mSysInfoManufacturer[MV_SMBIOS_STRING_MAX_SIZE]; > +STATIC CHAR8 mSysInfoProductName[MV_SMBIOS_STRING_MAX_SIZE]; > +STATIC CHAR8 mSysInfoVersion[MV_SMBIOS_STRING_MAX_SIZE]; > +STATIC CHAR8 mSysInfoSerial[MV_SMBIOS_STRING_MAX_SIZE]; > + > +// > // SMBIOS tables often reference each other using > // fixed constants, define a list of these constants > // for our hardcoded tables > @@ -101,10 +117,10 @@ STATIC SMBIOS_TABLE_TYPE1 mArmadaDefaultType1 = { > }; > > STATIC CHAR8 CONST *mArmadaDefaultType1Strings[] = { > - "Marvell \0",/* Manufacturer */ > - "Armada 7k/8k Family Board \0",/* Product Name placeholder*/ > - "Revision unknown \0",/* Version placeholder */ > - " \0",/* 32 character buffer */ > + mSysInfoManufacturer, > + mSysInfoProductName, > + mSysInfoVersion, > + mSysInfoSerial, > NULL > }; > > @@ -129,10 +145,10 @@ STATIC SMBIOS_TABLE_TYPE2 mArmadaDefaultType2 = { > }; > > STATIC CHAR8 CONST *mArmadaDefaultType2Strings[] = { > - "Marvell \0",/* Manufacturer */ > - "Armada 7k/8k Family Board \0",/* Product Name placeholder*/ > - "Revision unknown \0",/* Version placeholder */ > - "Serial Not Set \0",/* Serial */ > + mSysInfoManufacturer, > + mSysInfoProductName, > + mSysInfoVersion, > + mSysInfoSerial, > "Base of Chassis \0",/* Board location */ > NULL > }; > @@ -160,9 +176,9 @@ STATIC SMBIOS_TABLE_TYPE3 mArmadaDefaultType3 = { > }; > > STATIC CHAR8 CONST *mArmadaDefaultType3Strings[] = { > - "Marvell \0",/* Manufacturer placeholder */ > - "Revision unknown \0",/* Version placeholder */ > - "Serial Not Set \0",/* Serial placeholder */ > + mSysInfoManufacturer, > + mSysInfoVersion, > + mSysInfoSerial, > NULL > }; > > @@ -743,6 +759,45 @@ SmbiosMemoryInstall ( > } > > /** > + Copy Type1, Type2, Type3 strings form PCD > +**/ > + > +STATIC > +VOID > +MvSmbiosCopyStrings ( > + VOID > + ) > +{ > + EFI_STATUS Status; > + > + ASSERT (AsciiStrnLenS ((CHAR8 *)PcdGetPtr (PcdProductManufacturer), > + MV_SMBIOS_STRING_MAX_SIZE) < MV_SMBIOS_STRING_MAX_SIZE); > + ASSERT (AsciiStrnLenS ((CHAR8 *)PcdGetPtr (PcdProductPlatformName), > + MV_SMBIOS_STRING_MAX_SIZE) < MV_SMBIOS_STRING_MAX_SIZE); > + ASSERT (AsciiStrnLenS ((CHAR8 *)PcdGetPtr (PcdProductVersion), > + MV_SMBIOS_STRING_MAX_SIZE) < MV_SMBIOS_STRING_MAX_SIZE); > + ASSERT (AsciiStrnLenS ((CHAR8 *)PcdGetPtr (PcdProductSerial), > + MV_SMBIOS_STRING_MAX_SIZE) < MV_SMBIOS_STRING_MAX_SIZE); Especially given the current design, these ASSERTs seem a bit ... unhelpful. In fact, this whole MAX_SIZE thing seems ... restricted by the implementation, not by external constraints. What is the benefit? Not having to do a bunch of pointer conversions at SetVirtualAddressMap? / Leif > + > + Status = AsciiStrCpyS (mSysInfoManufacturer, > + MV_SMBIOS_STRING_MAX_SIZE, > + (CHAR8 *)PcdGetPtr (PcdProductManufacturer)); > + ASSERT_EFI_ERROR (Status); > + Status = AsciiStrCpyS (mSysInfoProductName, > + MV_SMBIOS_STRING_MAX_SIZE, > + (CHAR8 *)PcdGetPtr (PcdProductPlatformName)); > + ASSERT_EFI_ERROR (Status); > + Status = AsciiStrCpyS (mSysInfoVersion, > + MV_SMBIOS_STRING_MAX_SIZE, > + (CHAR8 *)PcdGetPtr (PcdProductVersion)); > + ASSERT_EFI_ERROR (Status); > + Status = AsciiStrCpyS (mSysInfoSerial, > + MV_SMBIOS_STRING_MAX_SIZE, > + (CHAR8 *)PcdGetPtr (PcdProductSerial)); > + ASSERT_EFI_ERROR (Status); > +} > + > +/** > Install all structures from the DefaultTables structure > > @param Smbios SMBIOS protocol > @@ -760,6 +815,8 @@ SmbiosInstallAllStructures ( > FirmwareMajorRevisionNumber = (PcdGet32 (PcdFirmwareRevision) >> 16) & 0xFF; > FirmwareMinorRevisionNumber = PcdGet32 (PcdFirmwareRevision) & 0xFF; > > + MvSmbiosCopyStrings(); > + > // > // Update Firmware Revision, CPU and DRAM frequencies. > // > -- > 2.7.4 >