From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by mx.groups.io with SMTP id smtpd.web11.3993.1689361731233021650 for ; Fri, 14 Jul 2023 12:08:51 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="signature has expired" header.i=@ventanamicro.com header.s=google header.b=aFN4ebM9; spf=pass (domain: ventanamicro.com, ip: 209.85.214.181, mailfrom: tphan@ventanamicro.com) Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-1b9e93a538dso12477615ad.3 for ; Fri, 14 Jul 2023 12:08:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1689361730; x=1691953730; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XsEodZYT1PBhwBnSXPgqqP7rVj+VyTJd5eAUus6j93c=; b=aFN4ebM9hrcVm9zLSDYduxC683JfNc99rlFrlokDVqo4iKfYtMQCHPOALobzVQHxRe kPev8FL7X2Q0Tcqupyexk0+MAN7NoD9bz4wV3k7O5GFw0JZcQSGl1GVJr1cVTaPcagiG 3pG5twYtoWyEGJ8XDxuu+ROpdPwpOofysNhnnzW1FpmIgAThgo+MHZAp2K+JZdHl+06o 4kmuJ27MyMV7FhBg3CZOhnUP+/fp8avQdkhb+NwDmrCW7fOse/HxEWhpg8Sni+OA4ZG6 EylPy/kDTYLqxMlmKyHMnCw5RDIeIm50kLlzLCMcc6Z9TxsOke2HvvYGkEz8twwjrGqH SnTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689361730; x=1691953730; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XsEodZYT1PBhwBnSXPgqqP7rVj+VyTJd5eAUus6j93c=; b=Dp8s8HKh8DqP3DZW8niJjLnaSzW/GeaeNQ6U86tAJvTvUibhYxQ8iSUSG2lg/fbKDT 7Jqmq1hBvJDNG4MdKx4RoMhXfY7gnPNjjAjms9/H0G+kpMRd+Dboa198RyqeJHtZhztK B7w/KoHVp6e0ajCdt78I8qAyzJDg7q1WhtXQglEi3fYOxWBuP9an2QXHheZF/QtyClzq Cmc/b7zMYoDexGf/r5rVOtxBv6OxqfFjdHBoaKMY01rUT2CxtALKY7EP9/3TkfQgR/cC 7eixNmZK5x/6xV8YQMgZDbyZoqWLwbQ3FBy67qccYMTAUaRA09dK0QUWvKCL5j1pcamZ Aw0g== X-Gm-Message-State: ABy/qLYPHhwUkwr8pUiG/4x3hqX5HkPQKqnnNqNesG2sEgkDE/1P5IRE JCp7XuspjM1mXi9MRuBoFUwtR84B+zKaSxosUNrxnQ== X-Google-Smtp-Source: APBJJlHfGFiAIXjGKhy2n+fKpW4q3f8lSIjuPvcX5y62j8NHck4diG/mUUBlZM84060kQbvYdBz2Qg== X-Received: by 2002:a17:902:da8f:b0:1b8:8b2e:ae36 with SMTP id j15-20020a170902da8f00b001b88b2eae36mr4471335plx.3.1689361730275; Fri, 14 Jul 2023 12:08:50 -0700 (PDT) Return-Path: Received: from localhost.localdomain (c-174-50-177-95.hsd1.ca.comcast.net. [174.50.177.95]) by smtp.gmail.com with ESMTPSA id p18-20020a170902ead200b001a98f844e60sm8041413pld.263.2023.07.14.12.08.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Jul 2023 12:08:49 -0700 (PDT) From: "Tuan Phan" To: devel@edk2.groups.io Cc: michael.d.kinney@intel.com, gaoliming@byosoft.com.cn, zhiguang.liu@intel.com, sunilvl@ventanamicro.com, git@danielschaefer.me, andrei.warkentin@intel.com, ardb+tianocore@kernel.org, Tuan Phan Subject: [PATCH v5 4/7] OvmfPkg/RiscVVirt: SEC: Add IO memory resource hob for platform devices Date: Fri, 14 Jul 2023 12:08:21 -0700 Message-Id: <20230714190824.16552-5-tphan@ventanamicro.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230714190824.16552-1-tphan@ventanamicro.com> References: <20230714190824.16552-1-tphan@ventanamicro.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Normally, DXE driver would add device resource to GCD before start using. But some key resources such as uart used for printing info at very early stage. Those resources should be populated to HOB in SEC phase so they are added to GCD before MMU enabled. Signed-off-by: Tuan Phan Reviewed-by: Andrei Warkentin --- OvmfPkg/RiscVVirt/Sec/Platform.c | 62 ++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/OvmfPkg/RiscVVirt/Sec/Platform.c b/OvmfPkg/RiscVVirt/Sec/Platf= orm.c index 3645c27b0b12..c66432473067 100644 --- a/OvmfPkg/RiscVVirt/Sec/Platform.c +++ b/OvmfPkg/RiscVVirt/Sec/Platform.c @@ -21,6 +21,64 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include =0D #include =0D =0D +/**=0D + Build memory map I/O range resource HOB using the=0D + base address and size.=0D +=0D + @param MemoryBase Memory map I/O base.=0D + @param MemorySize Memory map I/O size.=0D +=0D +**/=0D +STATIC=0D +VOID=0D +AddIoMemoryBaseSizeHob (=0D + EFI_PHYSICAL_ADDRESS MemoryBase,=0D + UINT64 MemorySize=0D + )=0D +{=0D + /* Align to EFI_PAGE_SIZE */=0D + MemorySize =3D ALIGN_VALUE (MemorySize, EFI_PAGE_SIZE);=0D + BuildResourceDescriptorHob (=0D + EFI_RESOURCE_MEMORY_MAPPED_IO,=0D + EFI_RESOURCE_ATTRIBUTE_PRESENT |=0D + EFI_RESOURCE_ATTRIBUTE_INITIALIZED |=0D + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |=0D + EFI_RESOURCE_ATTRIBUTE_TESTED,=0D + MemoryBase,=0D + MemorySize=0D + );=0D +}=0D +=0D +/**=0D + Populate IO resources from FDT that not added to GCD by its=0D + driver in the DXE phase.=0D +=0D + @param FdtBase Fdt base address=0D + @param Compatible Compatible string=0D +=0D +**/=0D +STATIC=0D +VOID=0D +PopulateIoResources (=0D + VOID *FdtBase,=0D + CONST CHAR8 *Compatible=0D + )=0D +{=0D + UINT64 *Reg;=0D + INT32 Node, LenP;=0D +=0D + Node =3D fdt_node_offset_by_compatible (FdtBase, -1, Compatible);=0D + while (Node !=3D -FDT_ERR_NOTFOUND) {=0D + Reg =3D (UINT64 *)fdt_getprop (FdtBase, Node, "reg", &LenP);=0D + if (Reg) {=0D + ASSERT (LenP =3D=3D (2 * sizeof (UINT64)));=0D + AddIoMemoryBaseSizeHob (SwapBytes64 (Reg[0]), SwapBytes64 (Reg[1]));= =0D + }=0D +=0D + Node =3D fdt_node_offset_by_compatible (FdtBase, Node, Compatible);=0D + }=0D +}=0D +=0D /**=0D @retval EFI_SUCCESS The address of FDT is passed in HOB.=0D EFI_UNSUPPORTED Can't locate FDT.=0D @@ -80,5 +138,9 @@ PlatformPeimInitialization ( =0D BuildFvHob (PcdGet32 (PcdOvmfDxeMemFvBase), PcdGet32 (PcdOvmfDxeMemFvSiz= e));=0D =0D + PopulateIoResources (Base, "ns16550a");=0D + PopulateIoResources (Base, "qemu,fw-cfg-mmio");=0D + PopulateIoResources (Base, "virtio,mmio");=0D +=0D return EFI_SUCCESS;=0D }=0D --=20 2.25.1