public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Vijayenthiran Subramaniam <vijayenthiran.subramaniam@arm.com>
To: ard.biesheuvel@linaro.org
Cc: edk2-devel@lists.01.org
Subject: Re: [PATCH v1 edk2-platforms 1/8] Platform/ARM/SgiPkg: Restructure virtio device registration
Date: Wed, 5 Dec 2018 11:40:12 +0530	[thread overview]
Message-ID: <CA+FsMCM5QQLRrEptVsDwCZ1kMfkZaRx=FQ3a0rJD-r22VLvPPw@mail.gmail.com> (raw)
In-Reply-To: <CAKv+Gu_sZQxGUXZ5UQTBNZgjQzTqYffw_DEp0FpTFKBb0ihjZQ@mail.gmail.com>

Hi Ard,

The virtio block device and virtio network device are available in software
model only. As of now, it exposes only one instance of each device.

On Tue, Dec 4, 2018 at 8:16 PM Ard Biesheuvel <ard.biesheuvel@linaro.org>
wrote:

> On Tue, 4 Dec 2018 at 10:12, Vijayenthiran Subramaniam
> <vijayenthiran.subramaniam@arm.com> wrote:
> >
> > From: Daniil Egranov <daniil.egranov@arm.com>
> >
> > SGI platforms support multiple virtio devices. So the existing code, that
> > supports registration of only the virtio disk, is restructured to
> > accommodate the registration of additional virtio devices.
> >
> > In addition to this, PCDs to represent the virtio controller base and
> > address space size are introduced.
> >
> > Contributed-under: TianoCore Contribution Agreement 1.1
> > Signed-off-by: Daniil Egranov <daniil.egranov@arm.com>
> > ---
> >  Platform/ARM/SgiPkg/SgiPlatform.dec
>       |  8 ++-
> >  Platform/ARM/SgiPkg/SgiPlatform.dsc
>       |  7 +-
> >  Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf
>       |  8 ++-
> >  Platform/ARM/SgiPkg/Include/Guid/SgiVirtioDevicesFormSet.h
>      | 21 ++++++
> >  Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c
>       | 14 +---
> >  Platform/ARM/SgiPkg/Drivers/PlatformDxe/{VirtioBlockIo.c =>
> VirtioDevices.c} | 67 ++++++++++++--------
> >  6 files changed, 81 insertions(+), 44 deletions(-)
> >
>
> Can these platforms only ever expose a single block device and a
> single network device?
>
> > diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dec
> b/Platform/ARM/SgiPkg/SgiPlatform.dec
> > index f6e0ba1e927a..ed29a4d5d91f 100644
> > --- a/Platform/ARM/SgiPkg/SgiPlatform.dec
> > +++ b/Platform/ARM/SgiPkg/SgiPlatform.dec
> > @@ -37,12 +37,16 @@ [Guids.common]
> >    gSgiClarkHeliosAcpiTablesFileGuid = { 0x2af40815, 0xa84e, 0x4de9, {
> 0x8c, 0x38, 0x91, 0x40, 0xb3, 0x54, 0x40, 0x73 } }
> >
> >  [PcdsFeatureFlag.common]
> > -  # Set this PCD to TRUE to enable virtio support.
> > -  gArmSgiTokenSpaceGuid.PcdVirtioSupported|TRUE|BOOLEAN|0x00000001
> > +  gArmSgiTokenSpaceGuid.PcdVirtioBlkSupported|FALSE|BOOLEAN|0x00000001
> >
> >  [PcdsFixedAtBuild]
> >    gArmSgiTokenSpaceGuid.PcdDramBlock2Base|0|UINT64|0x00000002
> >    gArmSgiTokenSpaceGuid.PcdDramBlock2Size|0|UINT64|0x00000003
> >
> > +  # Virtio Block device
> > +
> gArmSgiTokenSpaceGuid.PcdVirtioBlkBaseAddress|0x00000000|UINT32|0x00000004
> > +  gArmSgiTokenSpaceGuid.PcdVirtioBlkSize|0x00000000|UINT32|0x00000005
> > +
> gArmSgiTokenSpaceGuid.PcdVirtioBlkInterrupt|0x00000000|UINT32|0x00000006
> > +
> >  [Ppis]
> >    gHwConfigDtInfoPpiGuid     = { 0x6f606eb3, 0x9123, 0x4e15, { 0xa8,
> 0x9b, 0x0f, 0xac, 0x66, 0xef, 0xd0, 0x17 } }
> > diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dsc
> b/Platform/ARM/SgiPkg/SgiPlatform.dsc
> > index b3f76d2d9720..ada72be72f8a 100644
> > --- a/Platform/ARM/SgiPkg/SgiPlatform.dsc
> > +++ b/Platform/ARM/SgiPkg/SgiPlatform.dsc
> > @@ -98,7 +98,7 @@ [LibraryClasses.common.UEFI_DRIVER,
> LibraryClasses.common.UEFI_APPLICATION, Libr
> >
> ################################################################################
> >
> >  [PcdsFeatureFlag.common]
> > -  gArmSgiTokenSpaceGuid.PcdVirtioSupported|TRUE
> > +  gArmSgiTokenSpaceGuid.PcdVirtioBlkSupported|TRUE
> >
> >  [PcdsFixedAtBuild.common]
> >    gArmTokenSpaceGuid.PcdVFPEnabled|1
> > @@ -180,6 +180,11 @@ [PcdsFixedAtBuild.common]
> >    # Ethernet
> >    gEmbeddedTokenSpaceGuid.PcdLan91xDxeBaseAddress|0x18000000
> >
> > +  # Virtio Disk
> > +  gArmSgiTokenSpaceGuid.PcdVirtioBlkBaseAddress|0x1c130000
> > +  gArmSgiTokenSpaceGuid.PcdVirtioBlkSize|0x10000
> > +  gArmSgiTokenSpaceGuid.PcdVirtioBlkInterrupt|202
> > +
> >
> ################################################################################
> >  #
> >  # Components Section - list of all EDK II Modules needed by this
> Platform
> > diff --git a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf
> b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf
> > index d903ed8d3375..f920f6ecafb8 100644
> > --- a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf
> > +++ b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf
> > @@ -20,7 +20,7 @@ [Defines]
> >
> >  [Sources.common]
> >    PlatformDxe.c
> > -  VirtioBlockIo.c
> > +  VirtioDevices.c
> >
> >  [Packages]
> >    EmbeddedPkg/EmbeddedPkg.dec
> > @@ -41,7 +41,11 @@ [Guids]
> >    gSgiClarkHeliosAcpiTablesFileGuid
> >
> >  [FeaturePcd]
> > -  gArmSgiTokenSpaceGuid.PcdVirtioSupported
> > +  gArmSgiTokenSpaceGuid.PcdVirtioBlkSupported
> > +
> > +[FixedPcd]
> > +  gArmSgiTokenSpaceGuid.PcdVirtioBlkBaseAddress
> > +  gArmSgiTokenSpaceGuid.PcdVirtioBlkSize
> >
> >  [Depex]
> >    TRUE
> > diff --git a/Platform/ARM/SgiPkg/Include/Guid/SgiVirtioDevicesFormSet.h
> b/Platform/ARM/SgiPkg/Include/Guid/SgiVirtioDevicesFormSet.h
> > new file mode 100644
> > index 000000000000..80d3e3ae4f91
> > --- /dev/null
> > +++ b/Platform/ARM/SgiPkg/Include/Guid/SgiVirtioDevicesFormSet.h
> > @@ -0,0 +1,21 @@
> > +/** @file
> > +*
> > +*  Copyright (c) 2018, ARM Limited. All rights reserved.
> > +*
> > +*  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  __SGI_VIRTIO_DEVICES_FORMSET_H__
> > +#define  __SGI_VIRTIO_DEVICES_FORMSET_H__
> > +
> > +#define SGI_VIRTIO_BLOCK_GUID  \
> > +  { 0x5a96cdcd, 0x6116, 0x4929, { 0xb7, 0x01, 0x3a, 0xc2, 0xfb, 0x1c,
> 0xe2, 0x28 } }
> > +
> > +#endif
> > diff --git a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c
> b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c
> > index a8708a5c4ce5..aa032c41f686 100644
> > --- a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c
> > +++ b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c
> > @@ -17,9 +17,8 @@
> >  #include <Library/HobLib.h>
> >  #include <SgiPlatform.h>
> >
> > -EFI_STATUS
> > -InitVirtioBlockIo (
> > -  IN EFI_HANDLE         ImageHandle
> > +VOID
> > +InitVirtioDevices (
> >    );
> >
> >  EFI_STATUS
> > @@ -63,14 +62,7 @@ ArmSgiPkgEntryPoint (
> >      return Status;
> >    }
> >
> > -  Status = EFI_REQUEST_UNLOAD_IMAGE;
> > -  if (FeaturePcdGet (PcdVirtioSupported)) {
> > -    Status = InitVirtioBlockIo (ImageHandle);
> > -    if (EFI_ERROR (Status)) {
> > -      DEBUG ((DEBUG_ERROR, "%a: Failed to install Virtio Block
> device\n",
> > -        __FUNCTION__));
> > -    }
> > -  }
> > +  InitVirtioDevices ();
> >
> >    return Status;
> >  }
> > diff --git a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/VirtioBlockIo.c
> b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/VirtioDevices.c
> > similarity index 41%
> > rename from Platform/ARM/SgiPkg/Drivers/PlatformDxe/VirtioBlockIo.c
> > rename to Platform/ARM/SgiPkg/Drivers/PlatformDxe/VirtioDevices.c
> > index 5b5863f4b806..4703aec06968 100644
> > --- a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/VirtioBlockIo.c
> > +++ b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/VirtioDevices.c
> > @@ -12,6 +12,7 @@
> >
> >  **/
> >
> > +#include <Guid/SgiVirtioDevicesFormSet.h>
> >  #include <Library/VirtioMmioDeviceLib.h>
> >  #include <Library/DevicePathLib.h>
> >  #include <Library/DebugLib.h>
> > @@ -20,12 +21,12 @@
> >
> >  #pragma pack (1)
> >  typedef struct {
> > -  VENDOR_DEVICE_PATH                  Vendor;
> > +  VENDOR_DEVICE_PATH                  VendorDevicePath;
> >    EFI_DEVICE_PATH_PROTOCOL            End;
> > -} VIRTIO_BLK_DEVICE_PATH;
> > +} VIRTIO_DEVICE_PATH;
> >  #pragma pack ()
> >
> > -STATIC VIRTIO_BLK_DEVICE_PATH mVirtioBlockDevicePath =
> > +STATIC VIRTIO_DEVICE_PATH mVirtioBlockDevicePath =
> >  {
> >    {
> >      {
> > @@ -36,7 +37,7 @@ STATIC VIRTIO_BLK_DEVICE_PATH mVirtioBlockDevicePath =
> >          (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)
> >        }
> >      },
> > -    EFI_CALLER_ID_GUID,
> > +    SGI_VIRTIO_BLOCK_GUID,
> >    },
> >    {
> >      END_DEVICE_PATH_TYPE,
> > @@ -49,33 +50,43 @@ STATIC VIRTIO_BLK_DEVICE_PATH mVirtioBlockDevicePath
> =
> >  };
> >
> >  /**
> > - * Entrypoint for 'VirtioBlockIo' driver
> > - */
> > -EFI_STATUS
> > -InitVirtioBlockIo (
> > -   IN EFI_HANDLE         ImageHandle
> > +  Initialize platform Virtio devices.
> > +
> > +  @return None.
> > +**/
> > +VOID
> > +InitVirtioDevices (
> >    )
> >  {
> >    EFI_STATUS Status;
> > +  STATIC EFI_HANDLE mVirtIoBlkController = NULL;
> >
> > -  Status = gBS->InstallProtocolInterface (&ImageHandle,
> > -                  &gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE,
> > -                  &mVirtioBlockDevicePath);
> > -  if (EFI_ERROR (Status)) {
> > -    DEBUG ((DEBUG_ERROR, "%a: Failed to install the EFI_DEVICE_PATH "
> > -      "protocol for the virtio block device (Status == %r)\n",
> > -      __FUNCTION__, Status));
> > -    return Status;
> > +  // Install protocol interface for storage device
> > +  if ((FeaturePcdGet (PcdVirtioBlkSupported)) &&
> > +      (FixedPcdGet32 (PcdVirtioBlkBaseAddress))) {
> > +    Status = gBS->InstallProtocolInterface (&mVirtIoBlkController,
> > +                    &gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE,
> > +                    &mVirtioBlockDevicePath);
> > +    if (EFI_ERROR (Status)) {
> > +      DEBUG ((DEBUG_ERROR, "%a: Failed to install EFI_DEVICE_PATH
> protocol "
> > +        "for Virtio Block device (Status = %r)\n",
> > +        __FUNCTION__, Status));
> > +    } else {
> > +      // Declare the Virtio BlockIo device
> > +      Status = VirtioMmioInstallDevice (FixedPcdGet32
> (PcdVirtioBlkBaseAddress),
> > +                 mVirtIoBlkController);
> > +      if (EFI_ERROR (Status)) {
> > +        DEBUG ((DEBUG_ERROR, "%a: Unable to find Virtio Block MMIO
> device "
> > +          "(Status == %r)\n", __FUNCTION__, Status));
> > +        gBS->UninstallProtocolInterface (
> > +               mVirtIoBlkController,
> > +               &gEfiDevicePathProtocolGuid,
> > +               &mVirtioBlockDevicePath
> > +             );
> > +      } else {
> > +        DEBUG ((DEBUG_INIT, "%a: Installed Virtio Block device\n",
> > +          __FUNCTION__));
> > +      }
> > +    }
> >    }
> > -
> > -  Status = VirtioMmioInstallDevice (SGI_EXP_SYSPH_VIRTIO_BLOCK_BASE,
> ImageHandle);
> > -  if (EFI_ERROR (Status)) {
> > -    DEBUG ((DEBUG_ERROR,
> > -      "%a: Failed to install Virtio block device (Status == %r)\n",
> > -      __FUNCTION__, Status));
> > -    gBS->UninstallProtocolInterface (ImageHandle,
> > -           &gEfiDevicePathProtocolGuid, &mVirtioBlockDevicePath);
> > -  }
> > -
> > -  return Status;
> >  }
> > --
> > 2.7.4
> >
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
>


  reply	other threads:[~2018-12-05  6:10 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-04  9:12 [PATCH v1 edk2-platforms 0/8] Platform/ARM/Sgi: Add support for virtio network device Vijayenthiran Subramaniam
2018-12-04  9:12 ` [PATCH v1 edk2-platforms 1/8] Platform/ARM/SgiPkg: Restructure virtio device registration Vijayenthiran Subramaniam
2018-12-04 14:46   ` Ard Biesheuvel
2018-12-05  6:10     ` Vijayenthiran Subramaniam [this message]
2018-12-06 17:17       ` Ard Biesheuvel
2018-12-07  5:49         ` Vijayenthiran Subramaniam
2018-12-11  9:07           ` Vijayenthiran Subramaniam
2018-12-14 14:55             ` Ard Biesheuvel
2018-12-14 16:50               ` Vijayenthiran Subramaniam
2018-12-04  9:12 ` [PATCH v1 edk2-platforms 2/8] Platform/ARM/SgiPkg: Add support for virtio net device Vijayenthiran Subramaniam
2018-12-04  9:12 ` [PATCH v1 edk2-platforms 3/8] Sgi575: AcpiTables: Use PCDs for virtio disk Vijayenthiran Subramaniam
2018-12-04  9:12 ` [PATCH v1 edk2-platforms 4/8] Sgi575: AcpiTables: Add entry for virtio network device Vijayenthiran Subramaniam
2018-12-04  9:12 ` [PATCH v1 edk2-platforms 5/8] SgiClark.Ares: AcpiTables: Use PCDs for virtio disk Vijayenthiran Subramaniam
2018-12-04  9:12 ` [PATCH v1 edk2-platforms 6/8] SgiClark.Ares: AcpiTables: Add entry for virtio network device Vijayenthiran Subramaniam
2018-12-04  9:12 ` [PATCH v1 edk2-platforms 7/8] SgiClark.Helios: AcpiTables: Use PCDs for virtio disk Vijayenthiran Subramaniam
2018-12-04  9:12 ` [PATCH v1 edk2-platforms 8/8] SgiClark.Helios: AcpiTables: Add entry for virtio network device Vijayenthiran Subramaniam

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='CA+FsMCM5QQLRrEptVsDwCZ1kMfkZaRx=FQ3a0rJD-r22VLvPPw@mail.gmail.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