From: "Marcin Wojtas" <mw@semihalf.com>
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 <pdk@semihalf.com>
Subject: [edk2-platforms: PATCH v3 8/9] Marvell/Drivers: SmbiosPlatformDxe: Load SMBIOS strings from PCD
Date: Thu, 10 Oct 2019 07:42:18 +0200 [thread overview]
Message-ID: <1570686139-25182-9-git-send-email-mw@semihalf.com> (raw)
In-Reply-To: <1570686139-25182-1-git-send-email-mw@semihalf.com>
From: Patryk Duda <pdk@semihalf.com>
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 <pdk@semihalf.com>
---
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 <IndustryStandard/SmBios.h>
//
+// 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
next prev parent reply other threads:[~2019-10-10 5:42 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-10 5:42 [edk2-platforms: PATCH v3 0/9] Marvell Octeon CN913X SoC family support Marcin Wojtas
2019-10-10 5:42 ` [edk2-platforms: PATCH v3 1/9] Marvell/Armada7k8k: Fix 32-bit compilation Marcin Wojtas
2019-10-10 22:47 ` Leif Lindholm
2019-10-10 5:42 ` [edk2-platforms: PATCH v3 2/9] Marvell/Cn9130Db: Add ACPI tables Marcin Wojtas
2019-10-10 5:42 ` [edk2-platforms: PATCH v3 3/9] Marvell/Cn9130Db: Introduce board support Marcin Wojtas
2019-10-10 22:52 ` Leif Lindholm
2019-10-10 5:42 ` [edk2-platforms: PATCH v3 4/9] Marvell/Library: ArmadaSoCDescLib/MppLib: Extend Xenon information Marcin Wojtas
2019-10-10 22:55 ` Leif Lindholm
2019-10-10 5:42 ` [edk2-platforms: PATCH v3 5/9] Marvell/Library: IcuLib: Fix debug information Marcin Wojtas
2019-10-10 5:42 ` [edk2-platforms: PATCH v3 6/9] Marvell/Cn9131Db: Introduce board support Marcin Wojtas
2019-10-10 22:56 ` Leif Lindholm
2019-10-10 5:42 ` [edk2-platforms: PATCH v3 7/9] Marvell/Cn9132Db: " Marcin Wojtas
2019-10-10 22:57 ` Leif Lindholm
2019-10-10 5:42 ` Marcin Wojtas [this message]
2019-10-10 23:04 ` [edk2-platforms: PATCH v3 8/9] Marvell/Drivers: SmbiosPlatformDxe: Load SMBIOS strings from PCD Leif Lindholm
2019-10-10 23:33 ` Marcin Wojtas
2019-10-10 23:51 ` Leif Lindholm
2019-10-11 7:30 ` Marcin Wojtas
2019-10-11 8:17 ` Marcin Wojtas
2019-10-10 5:42 ` [edk2-platforms: PATCH v3 9/9] Marvell: Customize per-board SBMIOS strings Marcin Wojtas
2019-10-10 23:07 ` Leif Lindholm
2019-10-10 23:16 ` Marcin Wojtas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1570686139-25182-9-git-send-email-mw@semihalf.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox