From: "Duran, Leo" <leo.duran@amd.com>
To: "Kinney, Michael D" <michael.d.kinney@intel.com>,
"edk2-devel@ml01.01.org" <edk2-devel@ml01.01.org>
Cc: Laszlo Ersek <lersek@redhat.com>,
"Tian, Feng" <feng.tian@intel.com>,
"Singh, Brijesh" <brijesh.singh@amd.com>,
"Zeng, Star" <star.zeng@intel.com>
Subject: Re: [PATCH] MdeModulePkg: Add EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL
Date: Wed, 12 Apr 2017 20:34:19 +0000 [thread overview]
Message-ID: <DM5PR12MB12435C98B56581BB0E8F38DDF9030@DM5PR12MB1243.namprd12.prod.outlook.com> (raw)
In-Reply-To: <E92EE9817A31E24EB0585FDF735412F57D168BF2@ORSMSX113.amr.corp.intel.com>
Hi Mike,
Please see my replies below.
Leo.
> -----Original Message-----
> From: Kinney, Michael D [mailto:michael.d.kinney@intel.com]
> Sent: Wednesday, April 12, 2017 2:39 PM
> To: Duran, Leo <leo.duran@amd.com>; edk2-devel@ml01.01.org; Kinney,
> Michael D <michael.d.kinney@intel.com>
> Cc: Laszlo Ersek <lersek@redhat.com>; Tian, Feng <feng.tian@intel.com>;
> Singh, Brijesh <brijesh.singh@amd.com>; Zeng, Star <star.zeng@intel.com>
> Subject: RE: [edk2] [PATCH] MdeModulePkg: Add
> EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL
>
> Hi Leo,
>
> DXE Main is supposed to use Arch Protocols for platform specific behavior.
>
> In this case, can the CPU Arch Protocol SetMemoryAttributes() function be
> used to customize behavior?
[Duran, Leo] DxeMain supports a list of Arch protocols and also a list of optional protocols.
SetMemoryAttributes() is a service provided by GCD, via CoreConvertSpace(), just as Add/RemoveMemorySpace().
The behavior we need is a notification into OvmfPkg as GCD gets called to Add/RemoveMemorySpace(), not just if/when GCD gets called to SetMemoryAttributes().
BTW, SetMemoryAttributes() may get called on any range, without specifying type (whereas we're interested in MMIO ranges, which are specified in ADD operations)
>
> In other modules that add/remove/modify MMIO, gDS-
> >SetMemorySpaceAttributes() Is called to set memory space attributed such
> as cachability. Can the module that is adding/removing memory regions from
> GCD also call
> gDS-> SetMemorySpaceAttributes() so a CPU specific module can perform
> extra actions?
>
> Thanks,
>
> Mike
>
>
>
> > -----Original Message-----
> > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of
> > Leo Duran
> > Sent: Wednesday, April 12, 2017 11:57 AM
> > To: edk2-devel@ml01.01.org
> > Cc: Laszlo Ersek <lersek@redhat.com>; Tian, Feng
> > <feng.tian@intel.com>; Leo Duran <leo.duran@amd.com>; Brijesh Singh
> > <brijesh.singh@amd.com>; Zeng, Star <star.zeng@intel.com>
> > Subject: [edk2] [PATCH] MdeModulePkg: Add
> > EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL
> >
> > GCD consumes the protocol to issue a Notify() on Add/Remove operations.
> >
> > The intended use-case is to allow OvmfPkg take actions on behalf of an
> > SEV-enabled guest.
> >
> > The new protocol is simply added to the list of optional protocols
> > handled by DxeMain, and as such leverages the existing DxeProtocolNotify
> framework.
> >
> > Cc: Feng Tian <feng.tian@intel.com>
> > Cc: Star Zeng <star.zeng@intel.com>
> > Cc: Laszlo Ersek <lersek@redhat.com>
> > Cc: Brijesh Singh <brijesh.singh@amd.com>
> > Contributed-under: TianoCore Contribution Agreement 1.0
> > Signed-off-by: Leo Duran <leo.duran@amd.com>
> > ---
> > MdeModulePkg/Core/Dxe/DxeMain.h | 10 +++-
> > MdeModulePkg/Core/Dxe/DxeMain.inf | 4 ++
> > MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c | 7 +++
> > MdeModulePkg/Core/Dxe/DxeMain/DxeProtocolNotify.c | 9 ++-
> > MdeModulePkg/Core/Dxe/Gcd/Gcd.c | 8 +++
> > .../Include/Protocol/GcdMemorySpaceNotify.h | 65
> ++++++++++++++++++++++
> > MdeModulePkg/MdeModulePkg.dec | 3 +
> > 7 files changed, 100 insertions(+), 6 deletions(-) create mode
> > 100644 MdeModulePkg/Include/Protocol/GcdMemorySpaceNotify.h
> >
> > diff --git a/MdeModulePkg/Core/Dxe/DxeMain.h
> > b/MdeModulePkg/Core/Dxe/DxeMain.h index 1a0babb..8a037ff 100644
> > --- a/MdeModulePkg/Core/Dxe/DxeMain.h
> > +++ b/MdeModulePkg/Core/Dxe/DxeMain.h
> > @@ -3,6 +3,8 @@
> > internal structure and functions used by DxeCore module.
> >
> > Copyright (c) 2006 - 2017, Intel Corporation. All rights
> > reserved.<BR>
> > +Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
> > +
> > This program and the accompanying materials are licensed and made
> > available under the terms and conditions of the BSD License which
> > accompanies this distribution. The full text of the license may be
> > found at @@ -17,7 +19,6 @@ WITHOUT WARRANTIES OR
> REPRESENTATIONS OF
> > ANY KIND, EITHER EXPRESS OR IMPLIED.
> > #define _DXE_MAIN_H_
> >
> >
> > -
> > #include <PiDxe.h>
> >
> > #include <Protocol/LoadedImage.h>
> > @@ -53,6 +54,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF
> ANY KIND,
> > EITHER EXPRESS OR IMPLIED.
> > #include <Protocol/TcgService.h>
> > #include <Protocol/HiiPackageList.h>
> > #include <Protocol/SmmBase2.h>
> > +#include <Protocol/GcdMemorySpaceNotify.h>
> > +
> > #include <Guid/MemoryTypeInformation.h> #include
> > <Guid/FirmwareFileSystem2.h> #include <Guid/FirmwareFileSystem3.h>
> @@
> > -296,12 +299,13 @@ extern EFI_RUNTIME_ARCH_PROTOCOL
> gRuntimeTemplate;
> >
> > extern EFI_LOAD_FIXED_ADDRESS_CONFIGURATION_TABLE
> > gLoadModuleAtFixAddressConfigurationTable;
> > extern BOOLEAN
> > gLoadFixedAddressCodeMemoryReady;
> > +
> > +extern EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL
> *gGcdMemorySpaceNotify;
> > +
> > //
> > // Service Initialization Functions
> > //
> >
> > -
> > -
> > /**
> > Called to initialize the pool.
> >
> > diff --git a/MdeModulePkg/Core/Dxe/DxeMain.inf
> > b/MdeModulePkg/Core/Dxe/DxeMain.inf
> > index 30d5984..888a16f 100644
> > --- a/MdeModulePkg/Core/Dxe/DxeMain.inf
> > +++ b/MdeModulePkg/Core/Dxe/DxeMain.inf
> > @@ -4,6 +4,8 @@
> > # It provides an implementation of DXE Core that is compliant with DXE
> CIS.
> > #
> > # Copyright (c) 2006 - 2017, Intel Corporation. All rights
> > reserved.<BR>
> > +# Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR> #
> > # This program and the accompanying materials # are licensed and
> > made available under the terms and conditions of the BSD License #
> > which accompanies this distribution. The full text of the license may
> > be found at @@ -162,6 +164,8 @@
> > gEfiSmmBase2ProtocolGuid ## SOMETIMES_CONSUMES
> > gEfiBlockIoProtocolGuid ## SOMETIMES_CONSUMES
> >
> > + gEfiGcdMemorySpaceNotifyProtocolGuid ## CONSUMES
> > +
> > # Arch Protocols
> > gEfiBdsArchProtocolGuid ## CONSUMES
> > gEfiCpuArchProtocolGuid ## CONSUMES
> > diff --git a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c
> > b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c
> > index 91e94a7..46b68da 100644
> > --- a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c
> > +++ b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c
> > @@ -2,6 +2,8 @@
> > DXE Core Main Entry Point
> >
> > Copyright (c) 2006 - 2017, Intel Corporation. All rights
> > reserved.<BR>
> > +Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
> > +
> > This program and the accompanying materials are licensed and made
> > available under the terms and conditions of the BSD License which
> > accompanies this distribution. The full text of the license may be
> > found at
> > @@ -42,6 +44,11 @@ EFI_GUID *gDxeCoreFileName;
> > EFI_LOADED_IMAGE_PROTOCOL *gDxeCoreLoadedImage;
> >
> > //
> > +// DXE Core global for GCD notification protocol //
> > +EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL
> *gGcdMemorySpaceNotify = NULL;
> > +
> > +//
> > // DXE Core Module Variables
> > //
> > EFI_BOOT_SERVICES mBootServices = {
> > diff --git a/MdeModulePkg/Core/Dxe/DxeMain/DxeProtocolNotify.c
> > b/MdeModulePkg/Core/Dxe/DxeMain/DxeProtocolNotify.c
> > index ea7c610..2314e34 100644
> > --- a/MdeModulePkg/Core/Dxe/DxeMain/DxeProtocolNotify.c
> > +++ b/MdeModulePkg/Core/Dxe/DxeMain/DxeProtocolNotify.c
> > @@ -4,6 +4,8 @@
> > events that represent the Architectural Protocols.
> >
> > Copyright (c) 2006 - 2014, Intel Corporation. All rights
> > reserved.<BR>
> > +Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
> > +
> > This program and the accompanying materials are licensed and made
> > available under the terms and conditions of the BSD License which
> > accompanies this distribution. The full text of the license may be
> > found at @@ -45,9 +47,10 @@ EFI_CORE_PROTOCOL_NOTIFY_ENTRY
> > mArchProtocols[] = { // Optional protocols that the DXE Core will use
> > if they are present // EFI_CORE_PROTOCOL_NOTIFY_ENTRY
> > mOptionalProtocols[] = {
> > - { &gEfiSecurity2ArchProtocolGuid, (VOID **)&gSecurity2, NULL,
> NULL,
> > FALSE },
> > - { &gEfiSmmBase2ProtocolGuid, (VOID **)&gSmmBase2, NULL,
> NULL,
> > FALSE },
> > - { NULL, (VOID **)NULL, NULL, NULL,
> > FALSE }
> > + { &gEfiSecurity2ArchProtocolGuid, (VOID **)&gSecurity2,
> > NULL, NULL, FALSE },
> > + { &gEfiSmmBase2ProtocolGuid, (VOID **)&gSmmBase2,
> > NULL, NULL, FALSE },
> > + { &gEfiGcdMemorySpaceNotifyProtocolGuid, (VOID
> > + **)&gGcdMemorySpaceNotify,
> > NULL, NULL, FALSE },
> > + { NULL, (VOID **)NULL,
> > NULL, NULL, FALSE }
> > };
> >
> > //
> > diff --git a/MdeModulePkg/Core/Dxe/Gcd/Gcd.c
> > b/MdeModulePkg/Core/Dxe/Gcd/Gcd.c index a06f8bb..223fcd8 100644
> > --- a/MdeModulePkg/Core/Dxe/Gcd/Gcd.c
> > +++ b/MdeModulePkg/Core/Dxe/Gcd/Gcd.c
> > @@ -4,6 +4,8 @@
> > are accessible to the CPU that is executing the DXE core.
> >
> > Copyright (c) 2006 - 2017, Intel Corporation. All rights
> > reserved.<BR>
> > +Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
> > +
> > This program and the accompanying materials are licensed and made
> > available under the terms and conditions of the BSD License which
> > accompanies this distribution. The full text of the license may be
> > found at @@ -896,6 +898,9 @@ CoreConvertSpace (
> > } else {
> > Entry->Capabilities = Capabilities | EFI_MEMORY_RUNTIME;
> > }
> > + if (gGcdMemorySpaceNotify) {
> > + gGcdMemorySpaceNotify->MemorySpaceAddNotify
> (GcdMemoryType,
> > + BaseAddress,
> > Length, Entry->Capabilities);
> > + }
> > break;
> > case GCD_ADD_IO_OPERATION:
> > Entry->GcdIoType = GcdIoType;
> > @@ -914,6 +919,9 @@ CoreConvertSpace (
> > case GCD_REMOVE_MEMORY_OPERATION:
> > Entry->GcdMemoryType = EfiGcdMemoryTypeNonExistent;
> > Entry->Capabilities = 0;
> > + if (gGcdMemorySpaceNotify) {
> > + gGcdMemorySpaceNotify->MemorySpaceRemoveNotify
> (BaseAddress, Length);
> > + }
> > break;
> > case GCD_REMOVE_IO_OPERATION:
> > Entry->GcdIoType = EfiGcdIoTypeNonExistent; diff --git
> > a/MdeModulePkg/Include/Protocol/GcdMemorySpaceNotify.h
> > b/MdeModulePkg/Include/Protocol/GcdMemorySpaceNotify.h
> > new file mode 100644
> > index 0000000..9174957
> > --- /dev/null
> > +++ b/MdeModulePkg/Include/Protocol/GcdMemorySpaceNotify.h
> > @@ -0,0 +1,65 @@
> > +/** @file
> > + This file declares the GcdMemorySpaceNotify Protocol.
> > +
> > + This Protocol is consumed by GCD to issue notications during
> > + ADD/REMOVE
> > operations.
> > +
> > + Copyright (c) 2017, AMD Inc. All rights reserved.<BR>
> > +
> > + This program and the accompanying materials are licensed and made
> > + available under the terms and conditions of the BSD
> > License
> > + which accompanies this distribution. The full text of the license
> > + may be
> > found at
> > + http://opensource.org/licenses/bsd-license.php
> > +
> > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> > + BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND,
> EITHER EXPRESS OR IMPLIED.
> > +
> > +**/
> > +
> > +#ifndef __EFI_GCD_MEMORY_SPACE_NOTIFY_H__ #define
> > +__EFI_GCD_MEMORY_SPACE_NOTIFY_H__
> > +
> > +#define EFI_GCD_MEMORY_SPACE_NOTIFY_GUID \
> > + { \
> > + 0xc842db69, 0x610e, 0x401a, {0x90, 0xd0, 0x88, 0x41, 0xf1, 0xdc,
> > +0x53, 0x79
> > } \
> > + }
> > +
> > +/**
> > + Notify on: Add a segment of memory to GCD map.
> > +
> > + @param GcdMemoryType Memory type of the segment.
> > + @param BaseAddress Base address of the segment.
> > + @param Length Length of the segment.
> > + @param Capabilities Alterable attributes of the segment.
> > +
> > +**/
> > +typedef
> > +VOID
> > +(EFIAPI *GCD_ADD_MEMORY_NOTIFY) (
> > + IN EFI_GCD_MEMORY_TYPE GcdMemoryType,
> > + IN EFI_PHYSICAL_ADDRESS BaseAddress,
> > + IN UINT64 Length,
> > + IN UINT64 Capabilities
> > +);
> > +
> > +/**
> > + Notify on: Remove a segment of memory to GCD map.
> > +
> > + @param BaseAddress Base address of the segment.
> > + @param Length Length of the segment.
> > +
> > +**/
> > +typedef
> > +VOID
> > +(EFIAPI *GCD_REMOVE_MEMORY_NOTIFY) (
> > + IN EFI_PHYSICAL_ADDRESS BaseAddress,
> > + IN UINT64 Length
> > +);
> > +
> > +typedef struct {
> > + GCD_ADD_MEMORY_NOTIFY MemorySpaceAddNotify;
> > + GCD_REMOVE_MEMORY_NOTIFY MemorySpaceRemoveNotify; }
> > +EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL;
> > +
> > +extern EFI_GUID gEfiGcdMemorySpaceNotifyProtocolGuid;
> > +
> > +#endif
> > diff --git a/MdeModulePkg/MdeModulePkg.dec
> > b/MdeModulePkg/MdeModulePkg.dec index ca09cbc..95f9311 100644
> > --- a/MdeModulePkg/MdeModulePkg.dec
> > +++ b/MdeModulePkg/MdeModulePkg.dec
> > @@ -546,6 +546,9 @@
> > ## Include/Protocol/NonDiscoverableDevice.h
> > gEdkiiNonDiscoverableDeviceProtocolGuid = { 0x0d51905b, 0xb77e,
> > 0x452a, {0xa2, 0xc0, 0xec, 0xa0, 0xcc, 0x8d, 0x51, 0x4a } }
> >
> > + ## Include/Protocol/GcdMemorySpaceNotify.h
> > + gEfiGcdMemorySpaceNotifyProtocolGuid = { 0xc842db69, 0x610e,
> > + 0x401a, {0x90,
> > 0xd0, 0x88, 0x41, 0xf1, 0xdc, 0x53, 0x79 } }
> > +
> > #
> > # [Error.gEfiMdeModulePkgTokenSpaceGuid]
> > # 0x80000001 | Invalid value provided.
> > --
> > 2.7.4
> >
> > _______________________________________________
> > edk2-devel mailing list
> > edk2-devel@lists.01.org
> > https://lists.01.org/mailman/listinfo/edk2-devel
prev parent reply other threads:[~2017-04-12 20:34 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-12 18:56 [PATCH] MdeModulePkg: Add EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL Leo Duran
2017-04-12 18:56 ` Leo Duran
2017-04-12 19:39 ` Kinney, Michael D
2017-04-12 20:32 ` Laszlo Ersek
2017-04-13 0:58 ` Kinney, Michael D
2017-04-13 2:13 ` Zeng, Star
2017-04-13 2:35 ` Duran, Leo
2017-04-13 2:40 ` Yao, Jiewen
2017-04-13 2:44 ` Duran, Leo
2017-04-13 3:05 ` Yao, Jiewen
2017-04-14 14:10 ` Duran, Leo
2017-04-13 2:27 ` Duran, Leo
2017-04-12 20:34 ` Duran, Leo [this message]
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=DM5PR12MB12435C98B56581BB0E8F38DDF9030@DM5PR12MB1243.namprd12.prod.outlook.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