From nobody Sat Apr 20 04:09:24 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+100882+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+100882+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1678317537; cv=none; d=zohomail.com; s=zohoarc; b=j9GbqOuoKkA7BUOBb6UgjLx/miJj+Pqy4k4zEgxSU08BmrI+iDPTcvVYHk5bmgf1zioeS6WnxzCVsUEhF7Tx5REyUDw3ZX/rhAp9z8czkIOlyAA8hPdlYhXdIahHMX8sBU3YrBLtqbcfLId8yZycVDl1IbMAMuFvdGQs0BZN/o0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678317537; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject; bh=cxnD8lhiqERupWLyMszaEf0msQIIpVGqDqlJPX4KQgc=; b=Nbr+7/IEATWe97lCb5Wy9Kq4lTs7Zldz+NoCjr9l9xj3tZRJIY94rqDyq9R1aNExnoEebXTkjagG4j+ur4IftxyXsgPDVmEBU8JNr4OQrOoA0ibZxRP5ZD7VXz2wZFa9orbOvmzN8yOahrXgT3PFXueoDKkvpZbUGkA/pNUSKmQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+100882+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1678317537751133.16203345165798; Wed, 8 Mar 2023 15:18:57 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id VetFYY1788612xMtbHpfRBIc; Wed, 08 Mar 2023 15:18:57 -0800 X-Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) by mx.groups.io with SMTP id smtpd.web11.188.1678317536431357158 for ; Wed, 08 Mar 2023 15:18:56 -0800 X-Received: by mail-lj1-f176.google.com with SMTP id h3so15862lja.12 for ; Wed, 08 Mar 2023 15:18:56 -0800 (PST) X-Gm-Message-State: tLdN7ltg98GCZ9sgX8umd5IYx1787277AA= X-Google-Smtp-Source: AK7set+IoC7i3L0yzljS/1hvs9qnMXFkhWFflJ3sMrHH6WJzCdl9atCDuzsWjDvtM2xvbhiPjKkWFA== X-Received: by 2002:a2e:b006:0:b0:295:b0cd:519 with SMTP id y6-20020a2eb006000000b00295b0cd0519mr6547893ljk.3.1678317534578; Wed, 08 Mar 2023 15:18:54 -0800 (PST) X-Received: from localhost.localdomain ([79.164.221.98]) by smtp.gmail.com with ESMTPSA id w11-20020a05651c102b00b00293526a0c87sm2726630ljm.41.2023.03.08.15.18.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Mar 2023 15:18:54 -0800 (PST) From: "Mike Maslenkin" To: Cc: devel@edk2.groups.io, Mike Maslenkin , Isaac Oram , Nate DeSimone , Liming Gao Subject: [edk2-devel] [PATCH edk2-platforms v2 1/3] IpmiFeaturePkg: fix IPMI GetSelfTest command response parsing Date: Thu, 9 Mar 2023 02:18:43 +0300 Message-Id: <20230308231845.10895-2-mike.maslenkin@gmail.com> In-Reply-To: <20230308231845.10895-1-mike.maslenkin@gmail.com> References: <20230308231845.10895-1-mike.maslenkin@gmail.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,mike.maslenkin@gmail.com Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1678317537; bh=MdH7BzVrsW1+ug+tExiqpK924mxcV3+/4zT5kIt9t1s=; h=Cc:Date:From:Reply-To:Subject:To; b=fAUY8VLwkDqo6I3pJH+908nHvi2dKrrzXywx4LcpQKumt8sgWbI4x3kSvm/IHUm5jc0 XWkvnXMiNaz8rnIkz/kX6qzXWG2Nt7WJYrm1y01lGM8iBANy6D6ZS7UGj4IYRot3JEaBi UzbB7PxWEZLiK2jxnkX5ag076FJsn+ns+VA= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1678317538410100003 Content-Type: text/plain; charset="utf-8" Byte 0 of a response contains completion code for the command. So, the examined data starts from byte 1. It's easy to make a mistake here since specification counts response data from 1. For the "Get Self Test Results" command Intelligent Platform Management Interface Specification v2.0 rev 1.1 paragraph 20.4 defines response as: +-----+---------------------------------------------------------------+ |byte | data field | +-----+---------------------------------------------------------------+ | 1 | Completion Code | | | | | 2 | 55h =3D No error. All Self Tests Passed. | | | 56h =3D Self Test function not implemented in this controller. | | | 57h =3D Corrupted or inaccessible data or devices | | | 58h =3D Fatal hardware error | | | | | 3 | For byte 2 =3D 55h, 56h, FFh: 00h | | | For byte 2 =3D 58h, all other: Device-specific | | | For byte 2 =3D 57h: self-test error bitfield. | +-----+---------------------------------------------------------------+ Signed-off-by: Mike Maslenkin Reviewed-by: Isaac Oram Cc: Nate DeSimone Cc: Liming Gao --- .../IpmiFeaturePkg/GenericIpmi/Dxe/IpmiInit.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/= Dxe/IpmiInit.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericI= pmi/Dxe/IpmiInit.c index d788b4886723..aeaefaad642e 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/Ipm= iInit.c +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/Ipm= iInit.c @@ -161,7 +161,7 @@ Returns: // Check the IPMI defined self test results. // Additional Cases are device specific test results. // - switch (IpmiInstance->TempData[0]) { + switch (IpmiInstance->TempData[1]) { case IPMI_APP_SELFTEST_NO_ERROR: case IPMI_APP_SELFTEST_NOT_IMPLEMENTED: IpmiInstance->BmcStatus =3D BMC_OK; @@ -173,7 +173,7 @@ Returns: // BootBlock Firmware corruption, and Operational Firmware Corrupt= ion. All // other errors are BMC soft failures. // - if ((IpmiInstance->TempData[1] & (IPMI_APP_SELFTEST_FRU_CORRUPT | = IPMI_APP_SELFTEST_FW_BOOTBLOCK_CORRUPT | IPMI_APP_SELFTEST_FW_CORRUPT)) != =3D 0) { + if ((IpmiInstance->TempData[2] & (IPMI_APP_SELFTEST_FRU_CORRUPT | = IPMI_APP_SELFTEST_FW_BOOTBLOCK_CORRUPT | IPMI_APP_SELFTEST_FW_CORRUPT)) != =3D 0) { IpmiInstance->BmcStatus =3D BMC_HARDFAIL; } else { IpmiInstance->BmcStatus =3D BMC_SOFTFAIL; @@ -181,7 +181,7 @@ Returns: // // Check if SDR repository is empty and report it if it is. // - if ((IpmiInstance->TempData[1] & IPMI_APP_SELFTEST_SDR_REPOSITORY_= EMPTY) !=3D 0) { + if ((IpmiInstance->TempData[2] & IPMI_APP_SELFTEST_SDR_REPOSITORY_= EMPTY) !=3D 0) { if (*ErrorCount < MAX_SOFT_COUNT) { StatusCodeValue[*ErrorCount] =3D EFI_COMPUTING_UNIT_FIRMWARE_P= ROCESSOR | CU_FP_EC_SDR_EMPTY; (*ErrorCount)++; --=20 2.35.3 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#100882): https://edk2.groups.io/g/devel/message/100882 Mute This Topic: https://groups.io/mt/97485241/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sat Apr 20 04:09:24 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+100883+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+100883+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1678317538; cv=none; d=zohomail.com; s=zohoarc; b=Hg2FDXK+3wRjrolk791fpqXMj9UaYuOH1mMSM4hj4C5RsdljN850gOqcWsQrix2TiziVDkEjwVPy+9pIX17EZm0dti2NwZeOYqiugaIR+943FHnnK+wsZs+BbnjbisowimGr0J4VAk5Cxu+peoTUIjTPXy9ecfN3pEGrVPkoh2Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678317538; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject; bh=/Urd89gp5IZm5rke94+7Zj/lAEVn92+/UX4NHeR8THc=; b=nmwDmgsMvrnV0GJPqWmiRZlgtWlEqYk7JT0/s4bj727OcyYe2B+N6yxOaARUIGIwBH/JrbSK038InlF+MBaW6RqDx2YSdAKaa4nkrBR+GD9ikPHvGHlgcF4VS7ow2Y40hwTOymx4C1/yZxhD0A9yfySBWJlyS3+Zzi+T4KnjoV0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+100883+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1678317538502408.86682613054427; Wed, 8 Mar 2023 15:18:58 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id Yh72YY1788612xR2hZczmWy9; Wed, 08 Mar 2023 15:18:58 -0800 X-Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) by mx.groups.io with SMTP id smtpd.web11.189.1678317537157303913 for ; Wed, 08 Mar 2023 15:18:57 -0800 X-Received: by mail-lj1-f176.google.com with SMTP id b10so84648ljr.0 for ; Wed, 08 Mar 2023 15:18:56 -0800 (PST) X-Gm-Message-State: qFNXaV52CWVUsotZBupDJRLMx1787277AA= X-Google-Smtp-Source: AK7set9gH/KrLLcAp7S5/k63WNIsJD9YBaeY+2VcrymoG6CYUIITkOXXN0g452dsPUhL8ThUNYBKLQ== X-Received: by 2002:a2e:921a:0:b0:295:9970:9f73 with SMTP id k26-20020a2e921a000000b0029599709f73mr5285140ljg.29.1678317535337; Wed, 08 Mar 2023 15:18:55 -0800 (PST) X-Received: from localhost.localdomain ([79.164.221.98]) by smtp.gmail.com with ESMTPSA id w11-20020a05651c102b00b00293526a0c87sm2726630ljm.41.2023.03.08.15.18.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Mar 2023 15:18:54 -0800 (PST) From: "Mike Maslenkin" To: Cc: devel@edk2.groups.io, Mike Maslenkin , Isaac Oram , Nate DeSimone , Liming Gao Subject: [edk2-devel] [PATCH edk2-platforms v2 2/3] IpmiFeaturePkg: remove buffer temporary buffer from BMC instance structure Date: Thu, 9 Mar 2023 02:18:44 +0300 Message-Id: <20230308231845.10895-3-mike.maslenkin@gmail.com> In-Reply-To: <20230308231845.10895-1-mike.maslenkin@gmail.com> References: <20230308231845.10895-1-mike.maslenkin@gmail.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,mike.maslenkin@gmail.com Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1678317538; bh=/rKERgGeqVKfSkgplW/QNeGeVMJC+S1/gOaY0H98T4s=; h=Cc:Date:From:Reply-To:Subject:To; b=QFbBvbf2jgoCDBSEyJlu9LQ4azQ/HzTngOGq05hNmDnX3/bwpSlFxtQAHEdE4Qqt2VG NkOIiek2ObIwsyNMLVR0ioX7OPcpsAvOzakKkztGK3z5AoPrpqvleTkSFbj7lgGbXOPOi D4Z8JNQNkQMish/tnCFSFIO5kPIXSDtQIpc= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1678317540512100011 Content-Type: text/plain; charset="utf-8" There is no point to have temporary buffer in BMC instance data used only for synchronous IPMI command as a transfer buffer. Using local variables make things much simpler. Signed-off-by: Mike Maslenkin Cc: Isaac Oram Cc: Nate DeSimone Cc: Liming Gao --- .../GenericIpmi/Common/IpmiBmc.c | 5 ++- .../GenericIpmi/Common/IpmiBmcCommon.h | 1 - .../IpmiFeaturePkg/GenericIpmi/Dxe/IpmiInit.c | 39 ++++++++++--------- .../GenericIpmi/Pei/PeiGenericIpmi.c | 11 +++--- .../GenericIpmi/Pei/PeiIpmiBmc.c | 5 ++- .../GenericIpmi/Pei/PeiIpmiBmcDef.h | 1 - .../GenericIpmi/Smm/SmmGenericIpmi.c | 5 ++- 7 files changed, 36 insertions(+), 31 deletions(-) diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/= Common/IpmiBmc.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Generi= cIpmi/Common/IpmiBmc.c index 03b8174e3786..a6be2f46e84e 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/= IpmiBmc.c +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/= IpmiBmc.c @@ -101,6 +101,7 @@ Returns: IPMI_RESPONSE *IpmiResponse; UINT8 RetryCnt =3D IPMI_SEND_COMMAND_MAX_RETRY; UINT8 Index; + UINT8 TempData[MAX_TEMP_DATA]; =20 IpmiInstance =3D INSTANCE_FROM_SM_IPMI_BMC_THIS (This); =20 @@ -110,8 +111,8 @@ Returns: // response data. Since the command format is different from the resp= onse // format, the buffer is cast to both structure definitions. // - IpmiCommand =3D (IPMI_COMMAND*) IpmiInstance->TempData; - IpmiResponse =3D (IPMI_RESPONSE*) IpmiInstance->TempData; + IpmiCommand =3D (IPMI_COMMAND*) TempData; + IpmiResponse =3D (IPMI_RESPONSE*) TempData; =20 // // Send IPMI command to BMC diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/= Common/IpmiBmcCommon.h b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/= GenericIpmi/Common/IpmiBmcCommon.h index 1e5dfd81f1fb..06eab62aaec9 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/= IpmiBmcCommon.h +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/= IpmiBmcCommon.h @@ -50,7 +50,6 @@ typedef struct { UINTN Signature; UINT64 KcsTimeoutPeriod; UINT8 SlaveAddress; - UINT8 TempData[MAX_TEMP_DATA]; BMC_STATUS BmcStatus; UINT64 ErrorStatus; UINT8 SoftErrorCount; diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/= Dxe/IpmiInit.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericI= pmi/Dxe/IpmiInit.c index aeaefaad642e..8a0c596a6434 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/Ipm= iInit.c +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/Ipm= iInit.c @@ -84,6 +84,7 @@ Returns: UINT8 *TempPtr; UINT32 Retries; BOOLEAN bResultFlag =3D FALSE; + UINT8 TempData[MAX_TEMP_DATA]; =20 // // Get the SELF TEST Results. @@ -97,9 +98,9 @@ Returns: Retries =3D PcdGet8 (PcdIpmiBmcReadyDelayTimer); } =20 - DataSize =3D sizeof (IpmiInstance->TempData); + DataSize =3D sizeof (TempData); =20 - IpmiInstance->TempData[1] =3D 0; + TempData[1] =3D 0; =20 do { Status =3D IpmiSendCommand ( @@ -109,11 +110,11 @@ Returns: IPMI_APP_GET_SELFTEST_RESULTS, NULL, 0, - IpmiInstance->TempData, + TempData, &DataSize ); if (Status =3D=3D EFI_SUCCESS) { - switch (IpmiInstance->TempData[1]) { + switch (TempData[1]) { case IPMI_APP_SELFTEST_NO_ERROR: case IPMI_APP_SELFTEST_NOT_IMPLEMENTED: case IPMI_APP_SELFTEST_ERROR: @@ -146,7 +147,7 @@ Returns: IpmiInstance->BmcStatus =3D BMC_HARDFAIL; return Status; } else { - DEBUG ((EFI_D_INFO, "[IPMI] BMC self-test result: %02X-%02X\n", IpmiIn= stance->TempData[1], IpmiInstance->TempData[2])); + DEBUG ((DEBUG_INFO, "[IPMI] BMC self-test result: %02X-%02X\n", TempDa= ta[1], TempData[2])); // // Copy the Self test results to Error Status. Data will be copied as= long as it // does not exceed the size of the ErrorStatus variable. @@ -155,13 +156,13 @@ Returns: (Index < DataSize) && (Index < sizeof (IpmiInstance->ErrorStatus)= ); Index++, TempPtr++ ) { - *TempPtr =3D IpmiInstance->TempData[Index]; + *TempPtr =3D TempData[Index]; } // // Check the IPMI defined self test results. // Additional Cases are device specific test results. // - switch (IpmiInstance->TempData[1]) { + switch (TempData[1]) { case IPMI_APP_SELFTEST_NO_ERROR: case IPMI_APP_SELFTEST_NOT_IMPLEMENTED: IpmiInstance->BmcStatus =3D BMC_OK; @@ -173,7 +174,7 @@ Returns: // BootBlock Firmware corruption, and Operational Firmware Corrupt= ion. All // other errors are BMC soft failures. // - if ((IpmiInstance->TempData[2] & (IPMI_APP_SELFTEST_FRU_CORRUPT | = IPMI_APP_SELFTEST_FW_BOOTBLOCK_CORRUPT | IPMI_APP_SELFTEST_FW_CORRUPT)) != =3D 0) { + if ((TempData[2] & (IPMI_APP_SELFTEST_FRU_CORRUPT | IPMI_APP_SELFT= EST_FW_BOOTBLOCK_CORRUPT | IPMI_APP_SELFTEST_FW_CORRUPT)) !=3D 0) { IpmiInstance->BmcStatus =3D BMC_HARDFAIL; } else { IpmiInstance->BmcStatus =3D BMC_SOFTFAIL; @@ -181,7 +182,7 @@ Returns: // // Check if SDR repository is empty and report it if it is. // - if ((IpmiInstance->TempData[2] & IPMI_APP_SELFTEST_SDR_REPOSITORY_= EMPTY) !=3D 0) { + if ((TempData[2] & IPMI_APP_SELFTEST_SDR_REPOSITORY_EMPTY) !=3D 0)= { if (*ErrorCount < MAX_SOFT_COUNT) { StatusCodeValue[*ErrorCount] =3D EFI_COMPUTING_UNIT_FIRMWARE_P= ROCESSOR | CU_FP_EC_SDR_EMPTY; (*ErrorCount)++; @@ -244,6 +245,8 @@ Returns: SM_CTRL_INFO *pBmcInfo; IPMI_MSG_GET_BMC_EXEC_RSP *pBmcExecContext; UINT32 Retries; + UINT8 TempData[MAX_TEMP_DATA]; + #ifdef FAST_VIDEO_SUPPORT EFI_VIDEOPRINT_PROTOCOL *VideoPrintProtocol; EFI_STATUS VideoPrintStatus; @@ -266,16 +269,16 @@ Returns: // // Get the device ID information for the BMC. // - DataSize =3D sizeof (IpmiInstance->TempData); + DataSize =3D sizeof (TempData); while (EFI_ERROR (Status =3D IpmiSendCommand ( &IpmiInstance->IpmiTransport, IPMI_NETFN_APP, 0, IPMI_APP_GET_DEVICE_ID, NULL, 0, - IpmiInstance->TempData, &DataSize)) + TempData, &DataSize)) ) { DEBUG ((DEBUG_ERROR, "[IPMI] BMC does not respond by Get BMC DID (stat= us: %r), %d retries left, ResponseData: 0x%lx\n", - Status, Retries, IpmiInstance->TempData)); + Status, Retries, TempData)); =20 if (Retries-- =3D=3D 0) { IpmiInstance->BmcStatus =3D BMC_HARDFAIL; @@ -287,7 +290,7 @@ Returns: MicroSecondDelay (1*1000*1000); } =20 - pBmcInfo =3D (SM_CTRL_INFO*)&IpmiInstance->TempData[0]; + pBmcInfo =3D (SM_CTRL_INFO*)&TempData[0]; DEBUG ((EFI_D_ERROR, "[IPMI] BMC Device ID: 0x%02X, firmware version: %d= .%02X UpdateMode:%x\n", pBmcInfo->DeviceId, pBmcInfo->MajorFirmwareRev, pBm= cInfo->MinorFirmwareRev,pBmcInfo->UpdateMode)); // // In OpenBMC, UpdateMode: the bit 7 of byte 4 in get device id command = is used for the BMC status: @@ -303,10 +306,10 @@ Returns: IPMI_NETFN_FIRMWARE, 0, IPMI_GET_BMC_EXECUTION_CONTEXT, NULL, 0, - IpmiInstance->TempData, &DataSize + TempData, &DataSize ); =20 - pBmcExecContext =3D (IPMI_MSG_GET_BMC_EXEC_RSP*)&IpmiInstance->TempDat= a[0]; + pBmcExecContext =3D (IPMI_MSG_GET_BMC_EXEC_RSP*)&TempData[0]; DEBUG ((DEBUG_INFO, "[IPMI] Operational status of BMC: 0x%x\n", pBmcEx= ecContext->CurrentExecutionContext)); if ((pBmcExecContext->CurrentExecutionContext =3D=3D IPMI_BMC_IN_FORCE= D_UPDATE_MODE) && !EFI_ERROR (Status)) { @@ -324,12 +327,12 @@ Returns: IPMI_NETFN_APP, 0, IPMI_APP_GET_DEVICE_ID, NULL, 0, - IpmiInstance->TempData, &DataSize + TempData, &DataSize ); =20 if (!EFI_ERROR (Status)) { - pBmcInfo =3D (SM_CTRL_INFO*)&IpmiInstance->TempData[0]; - DEBUG ((EFI_D_ERROR, "[IPMI] UpdateMode Retries: %d pBmcInfo->= UpdateMode:%x, Status: %r, Response Data: 0x%lx\n",Retries, pBmcInfo->Updat= eMode, Status, IpmiInstance->TempData)); + pBmcInfo =3D (SM_CTRL_INFO*)&TempData[0]; + DEBUG ((DEBUG_ERROR, "[IPMI] UpdateMode Retries: %d pBmcInfo->= UpdateMode:%x, Status: %r, Response Data: 0x%lx\n",Retries, pBmcInfo->Updat= eMode, Status, TempData)); if (pBmcInfo->UpdateMode =3D=3D BMC_READY) { mIpmiInstance->BmcStatus =3D BMC_OK; return EFI_SUCCESS; diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/= Pei/PeiGenericIpmi.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Ge= nericIpmi/Pei/PeiGenericIpmi.c index 3efb772b684f..e8b99b6900c5 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Pei/Pei= GenericIpmi.c +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Pei/Pei= GenericIpmi.c @@ -288,6 +288,7 @@ Returns: UINT32 DataSize; SM_CTRL_INFO *pBmcInfo; UINTN Retries; + UINT8 TempData[MAX_TEMP_DATA]; =20 // // Set up a loop to retry for up to PcdIpmiBmcReadyDelayTimer seconds. C= alculate retries not timeout @@ -298,7 +299,7 @@ Returns: // // Get the device ID information for the BMC. // - DataSize =3D sizeof (mIpmiInstance->TempData); + DataSize =3D sizeof (TempData); while (EFI_ERROR (Status =3D PeiIpmiSendCommand ( &mIpmiInstance->IpmiTransportPpi, IPMI_NETFN_APP, @@ -306,7 +307,7 @@ Returns: IPMI_APP_GET_DEVICE_ID, NULL, 0, - mIpmiInstance->TempData, + TempData, &DataSize ))) { DEBUG ((EFI_D_ERROR, "[IPMI] BMC does not respond (status: %r), %d ret= ries left\n", @@ -322,7 +323,7 @@ Returns: // MicroSecondDelay (1*1000*1000); } - pBmcInfo =3D (SM_CTRL_INFO*) &mIpmiInstance->TempData[0]; + pBmcInfo =3D (SM_CTRL_INFO*) &TempData[0]; DEBUG ((DEBUG_INFO, "[IPMI PEI] BMC Device ID: 0x%02X, firmware version:= %d.%02X UpdateMode:%x\n", pBmcInfo->DeviceId, pBmcInfo->MajorFirmwareRev, pBmcInfo->MinorF= irmwareRev, pBmcInfo->UpdateMode)); // @@ -347,11 +348,11 @@ Returns: IPMI_APP_GET_DEVICE_ID, NULL, 0, - mIpmiInstance->TempData, + TempData, &DataSize ); if (!EFI_ERROR (Status)) { - pBmcInfo =3D (SM_CTRL_INFO*) &mIpmiInstance->TempData[0]; + pBmcInfo =3D (SM_CTRL_INFO*) &TempData[0]; DEBUG ((DEBUG_INFO, "[IPMI PEI] UpdateMode Retries:%x pBmcInfo->= UpdateMode:%x\n", Retries, pBmcInfo->UpdateMode)); if (pBmcInfo->UpdateMode =3D=3D BMC_READY) { mIpmiInstance->BmcStatus =3D BMC_OK; diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/= Pei/PeiIpmiBmc.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Generi= cIpmi/Pei/PeiIpmiBmc.c index 32665b3e2244..dbe25421ae49 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Pei/Pei= IpmiBmc.c +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Pei/Pei= IpmiBmc.c @@ -99,6 +99,7 @@ Returns: IPMI_COMMAND *IpmiCommand; IPMI_RESPONSE *IpmiResponse; UINT8 Index; + UINT8 TempData[MAX_TEMP_DATA]; =20 IpmiInstance =3D INSTANCE_FROM_PEI_SM_IPMI_BMC_THIS (This); =20 @@ -107,8 +108,8 @@ Returns: // response data. Since the command format is different from the respon= se // format, the buffer is cast to both structure definitions. // - IpmiCommand =3D (IPMI_COMMAND*) IpmiInstance->TempData; - IpmiResponse =3D (IPMI_RESPONSE*) IpmiInstance->TempData; + IpmiCommand =3D (IPMI_COMMAND*) TempData; + IpmiResponse =3D (IPMI_RESPONSE*) TempData; =20 // // Send IPMI command to BMC diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/= Pei/PeiIpmiBmcDef.h b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Gen= ericIpmi/Pei/PeiIpmiBmcDef.h index 3fbe70ce629d..fc9fbacf1a2b 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Pei/Pei= IpmiBmcDef.h +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Pei/Pei= IpmiBmcDef.h @@ -49,7 +49,6 @@ typedef struct { UINTN Signature; UINT64 KcsTimeoutPeriod; UINT8 SlaveAddress; - UINT8 TempData[MAX_TEMP_DATA]; BMC_STATUS BmcStatus; UINT64 ErrorStatus; UINT8 SoftErrorCount; diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/= Smm/SmmGenericIpmi.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Ge= nericIpmi/Smm/SmmGenericIpmi.c index fda215baaad0..1af2d18f791b 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Smm/Smm= GenericIpmi.c +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Smm/Smm= GenericIpmi.c @@ -56,6 +56,7 @@ Returns: SM_CTRL_INFO *ControllerInfo; UINT8 TimeOut; UINT8 Retries; + UINT8 TempData[MAX_TEMP_DATA]; =20 TimeOut =3D 0; Retries =3D PcdGet8 (PcdIpmiBmcReadyDelayTimer); @@ -72,7 +73,7 @@ Returns: IPMI_APP_GET_DEVICE_ID, NULL, 0, - IpmiInstance->TempData, + TempData, &DataSize ); if (Status =3D=3D EFI_SUCCESS) { @@ -96,7 +97,7 @@ Returns: // If there is no error then proceed to check the data returned by the B= MC // if (!EFI_ERROR (Status)) { - ControllerInfo =3D (SM_CTRL_INFO *) IpmiInstance->TempData; + ControllerInfo =3D (SM_CTRL_INFO *) TempData; // // If the controller is in Update Mode and the maximum number of error= s has not been exceeded, then // save the error code to the StatusCode array and increment the count= er. Set the BMC Status to indicate --=20 2.35.3 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#100883): https://edk2.groups.io/g/devel/message/100883 Mute This Topic: https://groups.io/mt/97485242/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sat Apr 20 04:09:24 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+100884+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+100884+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1678317538; cv=none; d=zohomail.com; s=zohoarc; b=M24dg5v7DUIeMDuaSu0Oavtgxr++QX9KiBGw7zzsjnG72lznWIXKbkex1tGSo7hxaZgGvvqI3VmWgzDnPpBTX4TdOzS7nPks5SfetWMjg67AebUXwctDXC7vrGGXdDwLAIoL/D+zF0ly14R12ZBxPmDBspvVwnlR+GXWp325V/c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678317538; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject; bh=KWhrwj9Oq5MrBKneMF6aBc6M5wTruIaHKsAJKRg7Z9I=; b=dmSGfXckAaGurJ/ct3NRD4si1Z8LrLwR+Aqi/VGWvq24Q8u++j+IIXXZew6rnQwc7rQZ926rT11RymAf45Ga/EYG9gxUtt1AIBUa+GtDtJRnKQVgg2hq6UG8kys1uPKc9HkI/T9Z5XF929VZB44+7Vo94Ep3RcgLWyv9XE8xqew= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+100884+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1678317538966131.16432760951966; Wed, 8 Mar 2023 15:18:58 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id EA3eYY1788612xNrpSRzjGdT; Wed, 08 Mar 2023 15:18:58 -0800 X-Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) by mx.groups.io with SMTP id smtpd.web10.223.1678317537909317430 for ; Wed, 08 Mar 2023 15:18:58 -0800 X-Received: by mail-lj1-f170.google.com with SMTP id a32so60301ljq.1 for ; Wed, 08 Mar 2023 15:18:57 -0800 (PST) X-Gm-Message-State: GlcciZd9KLi7Gybx7tsoVmo6x1787277AA= X-Google-Smtp-Source: AK7set/zgKz2DTtpKEr7nqraDy7PH2OEpw5m/uVgOeqa+lY+hpeNZxc7O8qyyb8VnRElY/gE/v1XYA== X-Received: by 2002:a2e:a549:0:b0:298:6a87:7611 with SMTP id e9-20020a2ea549000000b002986a877611mr1540581ljn.50.1678317536120; Wed, 08 Mar 2023 15:18:56 -0800 (PST) X-Received: from localhost.localdomain ([79.164.221.98]) by smtp.gmail.com with ESMTPSA id w11-20020a05651c102b00b00293526a0c87sm2726630ljm.41.2023.03.08.15.18.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Mar 2023 15:18:55 -0800 (PST) From: "Mike Maslenkin" To: Cc: devel@edk2.groups.io, Mike Maslenkin , Isaac Oram , Nate DeSimone , Liming Gao Subject: [edk2-devel] [PATCH edk2-platforms v2 3/3] IpmiFeaturePkg: refine GetSelfTest function Date: Thu, 9 Mar 2023 02:18:45 +0300 Message-Id: <20230308231845.10895-4-mike.maslenkin@gmail.com> In-Reply-To: <20230308231845.10895-1-mike.maslenkin@gmail.com> References: <20230308231845.10895-1-mike.maslenkin@gmail.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,mike.maslenkin@gmail.com Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1678317538; bh=FM/JSJpU7cq1fWORrgJg8kJpIhCmolHRNdQTsPvtaiU=; h=Cc:Date:From:Reply-To:Subject:To; b=bDwEzagQ4Ecj8667S6N0fwWj4ZVN591PXEq8zYODJJuGZtZlnGxf3VpX/uoy4fq8w9K GMvcrLn2ub9osiK7fPH7GpfTC8uEeERvT8F9nplemv+ztwgl5Z2tP/m3oV0lAHpNpA147 MJur79PS7e+hMRo8pp02l3e0Q+WEH2im01A= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1678317540483100009 Content-Type: text/plain; charset="utf-8" Use predefined type while accessing IPMI command returned data instead of raw byte array. Signed-off-by: Mike Maslenkin Cc: Isaac Oram Cc: Nate DeSimone Cc: Liming Gao --- .../IpmiFeaturePkg/GenericIpmi/Dxe/IpmiInit.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/= Dxe/IpmiInit.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericI= pmi/Dxe/IpmiInit.c index 8a0c596a6434..79eb5f2b86e9 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/Ipm= iInit.c +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/Ipm= iInit.c @@ -86,6 +86,8 @@ Returns: BOOLEAN bResultFlag =3D FALSE; UINT8 TempData[MAX_TEMP_DATA]; =20 + IPMI_SELF_TEST_RESULT_RESPONSE *SelfTestResult; + // // Get the SELF TEST Results. // @@ -100,7 +102,8 @@ Returns: =20 DataSize =3D sizeof (TempData); =20 - TempData[1] =3D 0; + SelfTestResult =3D (IPMI_SELF_TEST_RESULT_RESPONSE *) &TempData[0]; + SelfTestResult->Result =3D 0; =20 do { Status =3D IpmiSendCommand ( @@ -114,7 +117,7 @@ Returns: &DataSize ); if (Status =3D=3D EFI_SUCCESS) { - switch (TempData[1]) { + switch (SelfTestResult->Result) { case IPMI_APP_SELFTEST_NO_ERROR: case IPMI_APP_SELFTEST_NOT_IMPLEMENTED: case IPMI_APP_SELFTEST_ERROR: @@ -147,7 +150,7 @@ Returns: IpmiInstance->BmcStatus =3D BMC_HARDFAIL; return Status; } else { - DEBUG ((DEBUG_INFO, "[IPMI] BMC self-test result: %02X-%02X\n", TempDa= ta[1], TempData[2])); + DEBUG ((DEBUG_INFO, "[IPMI] BMC self-test result: %02X-%02X\n", SelfTe= stResult->Result, SelfTestResult->Param)); // // Copy the Self test results to Error Status. Data will be copied as= long as it // does not exceed the size of the ErrorStatus variable. @@ -162,7 +165,7 @@ Returns: // Check the IPMI defined self test results. // Additional Cases are device specific test results. // - switch (TempData[1]) { + switch (SelfTestResult->Result) { case IPMI_APP_SELFTEST_NO_ERROR: case IPMI_APP_SELFTEST_NOT_IMPLEMENTED: IpmiInstance->BmcStatus =3D BMC_OK; @@ -174,7 +177,7 @@ Returns: // BootBlock Firmware corruption, and Operational Firmware Corrupt= ion. All // other errors are BMC soft failures. // - if ((TempData[2] & (IPMI_APP_SELFTEST_FRU_CORRUPT | IPMI_APP_SELFT= EST_FW_BOOTBLOCK_CORRUPT | IPMI_APP_SELFTEST_FW_CORRUPT)) !=3D 0) { + if ((SelfTestResult->Param & (IPMI_APP_SELFTEST_FRU_CORRUPT | IPMI= _APP_SELFTEST_FW_BOOTBLOCK_CORRUPT | IPMI_APP_SELFTEST_FW_CORRUPT)) !=3D 0)= { IpmiInstance->BmcStatus =3D BMC_HARDFAIL; } else { IpmiInstance->BmcStatus =3D BMC_SOFTFAIL; @@ -182,7 +185,7 @@ Returns: // // Check if SDR repository is empty and report it if it is. // - if ((TempData[2] & IPMI_APP_SELFTEST_SDR_REPOSITORY_EMPTY) !=3D 0)= { + if ((SelfTestResult->Param & IPMI_APP_SELFTEST_SDR_REPOSITORY_EMPT= Y) !=3D 0) { if (*ErrorCount < MAX_SOFT_COUNT) { StatusCodeValue[*ErrorCount] =3D EFI_COMPUTING_UNIT_FIRMWARE_P= ROCESSOR | CU_FP_EC_SDR_EMPTY; (*ErrorCount)++; --=20 2.35.3 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#100884): https://edk2.groups.io/g/devel/message/100884 Mute This Topic: https://groups.io/mt/97485243/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-