From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lj1-f195.google.com (mail-lj1-f195.google.com [209.85.208.195]) by mx.groups.io with SMTP id smtpd.web10.2530.1570686159869148185 for ; Wed, 09 Oct 2019 22:42:40 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@semihalf-com.20150623.gappssmtp.com header.s=20150623 header.b=Jr7xjchF; spf=none, err=SPF record not found (domain: semihalf.com, ip: 209.85.208.195, mailfrom: mw@semihalf.com) Received: by mail-lj1-f195.google.com with SMTP id n14so4817226ljj.10 for ; Wed, 09 Oct 2019 22:42:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Z27/qQwKqL76txBbZ/+L2/j5IsTVQu3lJbV583KvoTY=; b=Jr7xjchFLF+QtoDQLqEdKhdJSbbWgOi8KesSbL41efQk0uJhnprL7i32VTnZ1jUcb9 ltlr0RYl/Y/3gxuZq7i6rahdgbgGipJ/FrU8fWPKh6R4D6wOVf1B7gX8iYOl38vSsg1Q d+4gnySV5MNLaT3KfLb3KB/1Dn0tIaUVvjBVhu7NkRwMFGh6h4m/ViUYVXnyqcp3R3ob kp1L7b9ry7UHpyygj2OuuphQKgJCDBbRmdbwPuzrLf1KFldHB/6FH4yPCxeu23TPKo9K +oXnN3pgkBZp26hehb0xuVywGM8hXjDiIz4SgV0AyZX3nTcBYm91oGMzSI9vupUNm7Bs iUwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Z27/qQwKqL76txBbZ/+L2/j5IsTVQu3lJbV583KvoTY=; b=cK3nU0Kc4PWm4vrqnIxuQIlL/DNvUuhb/Y3cPlxrKpcwDHVbnT4FGZe53/zmJronZw pvaK3z/qr4UtAJgofUZ6+yt+LY1W8lxT33ljVEDTEk6Y/nkhHRCuPDSHxxEjJEB7DbLt 95oTPGE3tUm/59u256Wu3IhB8nE4NlDHvngJWx/yPqqGTDWa8UYIsD7u3iTne5MMPD/A //ciJZMVuxufuTL61SeMquYrIEeXR3CYBSLyhVRldEDW1f0RMaAaCSpr1sISyW535HYo OeRYAhoXMLojslLcSh/GFO4IouBlApEyNLm6JNpv9U5puRekV94OoY6uueM/fScPt1Ft dLWQ== X-Gm-Message-State: APjAAAWMzAYL6YPZZqTxL0e93n01J52mzRPUsFYcpSrPGvw4UXze8Dm+ 9sjTAzwpxz44oRiRgDmD5PEQUkz7Znr3NQ== X-Google-Smtp-Source: APXvYqz/Zsobkt5tShxD8SSTejqjO7IUArV5l4yqt0XAIZo5yUSu9AZSK5hM3b9WRFMys6UTkQ5KsQ== X-Received: by 2002:a2e:9e85:: with SMTP id f5mr5063291ljk.203.1570686157823; Wed, 09 Oct 2019 22:42:37 -0700 (PDT) Return-Path: Received: from gilgamesh.semihalf.com (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id p27sm1001481lfo.95.2019.10.09.22.42.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 09 Oct 2019 22:42:37 -0700 (PDT) From: "Marcin Wojtas" To: devel@edk2.groups.io Cc: leif.lindholm@linaro.org, ard.biesheuvel@linaro.org, mw@semihalf.com, jsd@semihalf.com, jaz@semihalf.com, kostap@marvell.com, Patryk Duda Subject: [edk2-platforms: PATCH v3 8/9] Marvell/Drivers: SmbiosPlatformDxe: Load SMBIOS strings from PCD Date: Thu, 10 Oct 2019 07:42:18 +0200 Message-Id: <1570686139-25182-9-git-send-email-mw@semihalf.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1570686139-25182-1-git-send-email-mw@semihalf.com> References: <1570686139-25182-1-git-send-email-mw@semihalf.com> 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 + #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); + + 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