From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174]) by mx.groups.io with SMTP id smtpd.web09.44445.1628900698864501197 for ; Fri, 13 Aug 2021 17:24:59 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20161025 header.b=RkR4tisL; spf=pass (domain: gmail.com, ip: 209.85.160.174, mailfrom: benjamin.doron00@gmail.com) Received: by mail-qt1-f174.google.com with SMTP id z24so9714517qtn.8 for ; Fri, 13 Aug 2021 17:24:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Hwal205YFonm/lwPdZwnB0FYa6VtrKHukxN9TEXIQDw=; b=RkR4tisLED+cdXqy85eEgCsG8Qz9V6DAW36pYRv+LfYH/YvFidvYt1cteSiJWwqE50 iPpItRIF59X+2+prA5MXg8TtoykUFee7hibHUhF88XYohLBSK6Z8/VpyraV/ZcqciJ5I 6hcWRudQvf/tH7MIEySAlzHDJPqGaa2RiPuspVpIfQXDSQH56DJnEIJpOTiDsiNmPhwL FVEah2EGK8fVIuKbYmK2ev4Wm5nyBiHTGmvxtMrmPCygzUQdHuvqIrrfkddFPgc6CnUm N1x3q3Z3soJE5LCA8ZaEgLAyHZFY4Bg6cqzTY/tGwmMobneqaCP42yozG6CYai4z5jvq E5EA== 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:mime-version:content-transfer-encoding; bh=Hwal205YFonm/lwPdZwnB0FYa6VtrKHukxN9TEXIQDw=; b=qPj2PeQfTPCumyeOzicZWTDPlmhJmKAp/zZ1fzmrglkEsc0sgURwqjn8ud322GEQj2 t8ABsH8piVBbTDYdqVpSawFpJP5krR9nUnBJT7K/3nN06J4c6gdrK2xAy9YJ3JUZpit0 nF489Tz2V1B+kKAgf2rYRgZZ2dZDcIWfqrMTeXeVk2LfLcRfNx2FufK+VWs98/S06cOX qNNL0cbGCnFrgeFnSBMQN3jHtnQrvfd8zESDelL1HH7f+mN3xXKUf33xD6tFbLTAXKk7 JLDXK9dR8OTt+diw1T5RpBUOsEGVQGMs7nbWTSWKtBBTTUvfr4WIkgzm8U0XT4k7nzoM 5DdQ== X-Gm-Message-State: AOAM530hIvmgQJ/JS7UhcjcfHi8BlmbcGjwXJp43mhAYTt9pl0BMSbIf 1cF1ngMlr+BDRhFBqiAfHJDk1Qw+bBU= X-Google-Smtp-Source: ABdhPJzxWAY8cpcWSFc+vG4R57DLC9Zuj6TQNE2gDnn+Dg0ifELdVitaw7McLkm2x4i9pIaUGrfJMg== X-Received: by 2002:a05:622a:289:: with SMTP id z9mr4255055qtw.67.1628900697976; Fri, 13 Aug 2021 17:24:57 -0700 (PDT) Return-Path: Received: from benjamind-benjamindomain.. ([2607:f2c0:e98c:24:2974:7c11:a389:1a47]) by smtp.gmail.com with ESMTPSA id 19sm1494161qty.97.2021.08.13.17.24.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Aug 2021 17:24:57 -0700 (PDT) From: "Benjamin Doron" To: devel@edk2.groups.io Cc: Chasel Chiu , Nate DeSimone , Michael Kubacki Subject: [edk2-platforms][PATCH v2 1/5] KabylakeOpenBoardPkg/BaseEcLib: Add some common EC commands Date: Fri, 13 Aug 2021 20:24:41 -0400 Message-Id: <20210814002445.10084-2-benjamin.doron00@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210814002445.10084-1-benjamin.doron00@gmail.com> References: <20210804203630.7080-1-benjamin.doron00@gmail.com> <20210814002445.10084-1-benjamin.doron00@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Add EC read (0x80) and write (0x81) commands, as defined by ACPI. Cc: Chasel Chiu Cc: Nate DeSimone Cc: Michael Kubacki Signed-off-by: Benjamin Doron --- Platform/Intel/KabylakeOpenBoardPkg/Include/Library/EcLib.h | 32= +++++++++ Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/Include/EcCommands.h | 2= + Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/BaseEcLib.c | 4= +- Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/BaseEcLib.inf | 1= + Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/EcCommands.c | 76= ++++++++++++++++++++ 5 files changed, 114 insertions(+), 1 deletion(-) diff --git a/Platform/Intel/KabylakeOpenBoardPkg/Include/Library/EcLib.h b/= Platform/Intel/KabylakeOpenBoardPkg/Include/Library/EcLib.h index 04ce076f91b7..7c58e592d965 100644 --- a/Platform/Intel/KabylakeOpenBoardPkg/Include/Library/EcLib.h +++ b/Platform/Intel/KabylakeOpenBoardPkg/Include/Library/EcLib.h @@ -103,4 +103,36 @@ LpcEcInterface ( IN OUT UINT8 *DataBuffer=0D );=0D =0D +/**=0D + Read a byte of EC RAM.=0D +=0D + @param[in] Address Address to read=0D + @param[out] Data Data received=0D +=0D + @retval EFI_SUCCESS Command success=0D + @retval EFI_DEVICE_ERROR Command error=0D + @retval EFI_TIMEOUT Command timeout=0D +**/=0D +EFI_STATUS=0D +EcRead (=0D + IN UINT8 Address,=0D + OUT UINT8 *Data=0D + );=0D +=0D +/**=0D + Write a byte of EC RAM.=0D +=0D + @param[in] Address Address to write=0D + @param[in] Data Data to write=0D +=0D + @retval EFI_SUCCESS Command success=0D + @retval EFI_DEVICE_ERROR Command error=0D + @retval EFI_TIMEOUT Command timeout=0D +**/=0D +EFI_STATUS=0D +EcWrite (=0D + IN UINT8 Address,=0D + IN UINT8 Data=0D + );=0D +=0D #endif=0D diff --git a/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/Include/EcCom= mands.h b/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/Include/EcComman= ds.h index be56d134edc7..a4ab192d8ce1 100644 --- a/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/Include/EcCommands.h +++ b/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/Include/EcCommands.h @@ -40,5 +40,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // Data read from the EC data port is valid only when OBF=3D1.=0D //=0D #define EC_C_FAB_ID 0x0D // Get the board fab ID in = the lower 3 bits=0D +#define EC_C_ACPI_READ 0x80 // Read a byte of EC RAM=0D +#define EC_C_ACPI_WRITE 0x81 // Write a byte of EC RAM=0D =0D #endif // EC_COMMANDS_H_=0D diff --git a/Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/BaseEcLi= b.c b/Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/BaseEcLib.c index eda6f7d2e142..66bd478906fb 100644 --- a/Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/BaseEcLib.c +++ b/Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/BaseEcLib.c @@ -32,7 +32,9 @@ typedef struct { } EC_COMMAND_TABLE;=0D =0D EC_COMMAND_TABLE mEcCommand[] =3D {=0D - {EC_C_FAB_ID , 0, 2, TRUE} // Get the board fab ID i= n the lower 3 bits=0D + {EC_C_FAB_ID , 0, 2, TRUE}, // Get the board fab ID i= n the lower 3 bits=0D + {EC_C_ACPI_READ , 1, 1, TRUE}, // Read a byte of EC RAM= =0D + {EC_C_ACPI_WRITE , 2, 0, TRUE} // Write a byte of EC RAM= =0D };=0D =0D //=0D diff --git a/Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/BaseEcLi= b.inf b/Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/BaseEcLib.inf index c7de77d80f3d..f0b4c67fffc2 100644 --- a/Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/BaseEcLib.inf +++ b/Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/BaseEcLib.inf @@ -27,3 +27,4 @@ =0D [Sources]=0D BaseEcLib.c=0D + EcCommands.c=0D diff --git a/Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/EcComman= ds.c b/Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/EcCommands.c new file mode 100644 index 000000000000..d14edb75de36 --- /dev/null +++ b/Platform/Intel/KabylakeOpenBoardPkg/Library/BaseEcLib/EcCommands.c @@ -0,0 +1,76 @@ +/** @file=0D + Common EC commands.=0D +=0D +Copyright (c) 2019, Intel Corporation. All rights reserved.
=0D +SPDX-License-Identifier: BSD-2-Clause-Patent=0D +=0D +**/=0D +=0D +#include =0D +#include =0D +#include =0D +=0D +/**=0D + Read a byte of EC RAM.=0D +=0D + @param[in] Address Address to read=0D + @param[out] Data Data received=0D +=0D + @retval EFI_SUCCESS Command success=0D + @retval EFI_DEVICE_ERROR Command error=0D + @retval EFI_TIMEOUT Command timeout=0D +**/=0D +EFI_STATUS=0D +EcRead (=0D + IN UINT8 Address,=0D + OUT UINT8 *Data=0D + )=0D +{=0D + UINT8 DataSize;=0D + UINT8 DataBuffer[1];=0D + EFI_STATUS Status;=0D +=0D + if (Data =3D=3D NULL) {=0D + return EFI_INVALID_PARAMETER;=0D + }=0D +=0D + // Prepare arguments for LpcEcInterface()=0D + DataSize =3D 1;=0D + DataBuffer[0] =3D Address;=0D +=0D + Status =3D LpcEcInterface (EC_C_ACPI_READ, &DataSize, DataBuffer);=0D + if (EFI_ERROR(Status)) {=0D + return Status;=0D + }=0D +=0D + // Write caller's pointer from returned data and return success=0D + *Data =3D DataBuffer[0];=0D + return EFI_SUCCESS;=0D +}=0D +=0D +/**=0D + Write a byte of EC RAM.=0D +=0D + @param[in] Address Address to write=0D + @param[in] Data Data to write=0D +=0D + @retval EFI_SUCCESS Command success=0D + @retval EFI_DEVICE_ERROR Command error=0D + @retval EFI_TIMEOUT Command timeout=0D +**/=0D +EFI_STATUS=0D +EcWrite (=0D + IN UINT8 Address,=0D + IN UINT8 Data=0D + )=0D +{=0D + UINT8 DataSize;=0D + UINT8 DataBuffer[2];=0D +=0D + // Prepare arguments for LpcEcInterface()=0D + DataSize =3D 2;=0D + DataBuffer[0] =3D Address;=0D + DataBuffer[1] =3D Data;=0D +=0D + return LpcEcInterface (EC_C_ACPI_WRITE, &DataSize, DataBuffer);=0D +}=0D --=20 2.31.1