Project Mu BaseCore
Перейти к файлу
joe da188b3909
MdeModulePkg/PciHostBridgeDxe: Add readback after final Cfg-Write (#599)
## Description

Problem Report:

On AARCH64, there is no ordering guarantee between configuration
space (ECAM) writes and memory space reads (MMIO). ARM AMBA CHI
only guarantees ordering for reads and writes within a single address
region,
however, on some systems MMIO and ECAM may be split into separate
address regions.

A problem may arise when an ECAM write is issued a completion before a
subsequent
MMIO read is issued and receives a completion.

For example, a typical PCI software flow is the following:

1. ECAM write to device command register to enable memory space
2. MMIO read from device memory space for which access was enabled
   in step 1.

There is no guarantee that step 2. will not begin before the completion
of step 1.
on systems where ECAM/MMIO are specified as separate address regions,
even
if both spaces have the memory attributes device-nGnRnE.

- Add a read after the final PCI Configuration space write
in RootBridgeIoPciAccess. Configuration space reads should not have
side-efects.

- When configuration space is strongly ordered, this ensures
that program execution cannot continue until the completion
is received for the previous Cfg-Write, which may have side-effects.

- Risk of reading a "write-only" register and causing a CA which leaves
the device
unresponsive. The expectation based on the PCI Base Spec v6.1 section
7.4 is that
all PCI Spec-defined registers will be readable, however, there may
exist
design-specific registers that fall into this category.

- [X] Impacts functionality?
- **Functionality** - Does the change ultimately impact how firmware
functions?
- Examples: Add a new library, publish a new PPI, update an algorithm,
...
- [ ] Impacts security?
- **Security** - Does the change have a direct security impact on an
application,
    flow, or firmware?
  - Examples: Crypto algorithm change, buffer overflow fix, parameter
    validation improvement, ...
- [ ] Breaking change?
- **Breaking change** - Will anyone consuming this change experience a
break
    in build or boot behavior?
- Examples: Add a new library class, move a module to a different repo,
call
    a function in a new library class in a pre-existing module, ...
- [ ] Includes tests?
  - **Tests** - Does the change include any explicit test code?
  - Examples: Unit tests, integration tests, robot tests, ...
- [ ] Includes documentation?
- **Documentation** - Does the change contain explicit documentation
additions
    outside direct code modifications (and comments)?
- Examples: Update readme file, add feature readme file, link to
documentation
    on an a separate Web page, ...

## How This Was Tested

- AARCH64 platform on real silicon

## Integration Instructions

N/A

---------

Co-authored-by: joelopez <joelopez@microsoft.com>
2023-11-07 23:48:59 +00:00
.azurepipelines .pytool/CISettings.py: Re-enable Code Coverage (#614) 2023-11-07 14:40:33 -08:00
.config Add CredScan suppressions for test certs and examples 2023-05-03 17:35:39 -07:00
.devcontainer Repo File Sync: Update to Mu DevOps v6.1.0 (#538) 2023-08-29 20:50:28 -04:00
.github Repo File Sync: MuDevOpsWrapper.yml - Add code coverage calculation parameter (#612) 2023-11-06 17:23:34 -05:00
.pytool .pytool/CISettings.py: Re-enable Code Coverage (#614) 2023-11-07 14:40:33 -08:00
BaseTools BaseTools/Plugin/RustEnvironmentCheck: Add rust-src component check (#611) 2023-11-06 17:22:37 -05:00
CryptoPkg CryptEc.c CodeQL Fix (#492) 2023-07-19 23:50:55 +00:00
Docs Move Rust documentation to Project Mu repo 2023-09-06 15:20:52 -04:00
MdeModulePkg MdeModulePkg/PciHostBridgeDxe: Add readback after final Cfg-Write (#599) 2023-11-07 23:48:59 +00:00
MdePkg MdePkg/GoogleTest: Add GetTime() RT service mock interface (#607) 2023-11-03 18:52:11 +00:00
NetworkPkg Use gMuEventPreExitBootServicesGuid for SnpDxe to issue PxeShutdown (#522) 2023-08-14 18:27:08 -04:00
PcAtChipsetPkg PcAtChipsetPkg: Remove UefiCpuLib reference 2023-08-31 10:53:17 -04:00
PerformancePkg/Application/FbptDump Convert relevant files to CRLF 2023-05-08 17:19:43 -07:00
PolicyServicePkg [PolicyServicePkg] Adding MemoryAllocationLib to library classes that rely on it (#597) 2023-10-19 22:13:58 +00:00
ShellPkg [CHERRY-PICK] ShellPkg/UefiShellNetwork2CommandsLib: Check array index before access 2023-09-08 20:16:43 -04:00
StandaloneMmPkg Integrate PrEval Policy 5 (#423) 2023-06-02 14:27:24 -07:00
UefiCpuPkg MdeModulePkg and UefiCpuPkg CodeQL Fixes (#561) 2023-10-23 09:21:51 -07:00
UnitTestFrameworkPkg Fix CodeQL errors (#490) 2023-07-14 08:33:13 -07:00
.gitignore TCMORPH: Remove unused packages from Tiano (command in comments). 2023-04-27 14:24:39 -07:00
.gitmodules [CHERRY-PICK] UnitTestFrameworkPkg: Add subhook submodule required for gmock 2023-05-08 17:19:46 -07:00
.markdownlint.yaml Repo File Sync: Synced file(s) with microsoft/mu_devops (#191) 2023-05-08 17:19:41 -07:00
.markdownlintignore UnitTestFrameworkPkg: Fix markdownlint issues 2023-05-09 09:12:30 -07:00
CONTRIBUTING.md Repo File Sync: Synced file(s) with microsoft/mu_devops (#191) 2023-05-08 17:19:41 -07:00
CodeQlFilters.yml Enable new CodeQL queries (17 total) 2023-09-08 20:16:43 -04:00
License-History.txt edk2: Add License-History.txt 2019-04-09 09:10:18 -07:00
License.txt edk2: Change License.txt from 2-Clause BSD to BSD+Patent 2019-04-09 09:10:18 -07:00
Makefile.toml Repo File Sync: synced file(s) with microsoft/mu_devops (#576) 2023-09-26 17:36:36 +00:00
ReadMe.rst REBASE: Updated readme with changes for 202302 2023-05-09 14:42:43 -07:00
RepoDetails.md Move Rust documentation to Project Mu repo 2023-09-06 15:20:52 -04:00
SECURITY.md Repo File Sync: Synced file(s) with microsoft/mu_devops (#191) 2023-05-08 17:19:41 -07:00
edk2_core_path_env.json Convert relevant files to CRLF 2023-05-08 17:19:43 -07:00
pip-requirements.txt .pytool/CISettings.py: Re-enable Code Coverage (#614) 2023-11-07 14:40:33 -08:00
rust-toolchain.toml Repo File Sync: Update to Mu DevOps 7.0.1 and Rust 1.73.0 (#593) 2023-10-14 01:54:19 -04:00
rustfmt.toml Repo File Sync: Update to Mu DevOps v6.1.0 (#538) 2023-08-29 20:50:28 -04:00

ReadMe.rst

Этот файл содержит невидимые символы Юникода!

Этот файл содержит невидимые символы Юникода, которые могут быть отображены не так, как показано ниже. Если это намеренно, можете спокойно проигнорировать это предупреждение. Используйте кнопку Экранировать, чтобы показать скрытые символы.

==============================
Project Mu Basecore Repository
==============================

============================= ================= =============== ===================
 Host Type & Toolchain        Build Status      Test Status     Code Coverage
============================= ================= =============== ===================
Windows_VS2022_               |WindowsCiBuild|  |WindowsCiTest| |WindowsCiCoverage|
Ubuntu_GCC5_                  |UbuntuCiBuild|   |UbuntuCiTest|  |UbuntuCiCoverage|
============================= ================= =============== ===================

This repository is part of Project Mu.  Please see Project Mu for details https://microsoft.github.io/mu

For more details about the repository, refer to `RepoDetails.md`_.

.. _`RepoDetails.md`: https://github.com/microsoft/mu_basecore/blob/HEAD/RepoDetails.md

Branch Status - release/202302
==============================

:Status:
  In Development

:Entered Development:
  2023/04/27

:Anticipated Stabilization:
  Aug 2023

Branch Changes - release/202302
===============================

Breaking Changes-dev
--------------------

- Incomplete

Main Changes-dev
----------------

- Integrated reworked Openssl crypto.  Instead of having separate INF files for each architecture it is now consolidated
  into a single Accel INF.
- CodeQL fixes were applied throughout the repo to address some vulnerabilities.
- Memory protections were cleaned up and reworked to make its progression more clear in history.
- Integrated Google Test into project MU.
- Removed VS2015 and VS2017 support from packages.
- Added additional ARM packages for build capability.

Bug Fixes-dev
-------------

- Fixed some TPL restore calls that were incorrect.

2302_RefBoot Changes
--------------------

- Incomplete

2302_CIBuild Changes
--------------------

- Additional refactoring in CryptoPkg

2302_Rebase Changes
-------------------

| Starting commit: 082b06d160 ("Edk2ToolsBuild.py: set arch to host arch if not specified on linux", 2023-04-27)
| Destination Commit from upstream edk2: f80f052277 ("OvmfPkg/RiscVVirt: Add Stack HOB", 2023-03-01)

- Many conflicts in CryptoPkg that needed to be resolved.

Code of Conduct
===============

This project has adopted the Microsoft Open Source Code of Conduct https://opensource.microsoft.com/codeofconduct/

For more information see the Code of Conduct FAQ https://opensource.microsoft.com/codeofconduct/faq/
or contact `opencode@microsoft.com <mailto:opencode@microsoft.com>`_. with any additional questions or comments.

Contributions
=============

Contributions are always welcome and encouraged!
Please open any issues in the Project Mu GitHub tracker and read https://microsoft.github.io/mu/How/contributing/

For documentation:

Copyright & License
===================

| Copyright (C) Microsoft Corporation
| SPDX-License-Identifier: BSD-2-Clause-Patent

Upstream License (TianoCore)
============================

Copyright (c) 2019, TianoCore and contributors.  All rights reserved.

SPDX-License-Identifier: BSD-2-Clause-Patent

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice,
   this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

Subject to the terms and conditions of this license, each copyright holder
and contributor hereby grants to those receiving rights under this license
a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except for failure to satisfy the conditions of this license) patent
license to make, have made, use, offer to sell, sell, import, and otherwise
transfer this software, where such license applies only to those patent
claims, already acquired or hereafter acquired, licensable by such copyright
holder or contributor that are necessarily infringed by:

(a) their Contribution(s) (the licensed copyrights of copyright holders and
    non-copyrightable additions of contributors, in source or binary form)
    alone; or

(b) combination of their Contribution(s) with the work of authorship to
    which such Contribution(s) was added by such copyright holder or
    contributor, if, at the time the Contribution is added, such addition
    causes such combination to be necessarily infringed. The patent license
    shall not apply to any other combinations which include the
    Contribution.

Except as expressly stated above, no rights or licenses from any copyright
holder or contributor is granted under this license, whether expressly, by
implication, estoppel or otherwise.

DISCLAIMER

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

.. ===================================================================
.. This is a bunch of directives to make the README file more readable
.. ===================================================================

.. CoreCI

.. _Windows_VS2019: https://dev.azure.com/projectmu/mu/_build/latest?definitionId=39&&branchName=release%2F202302
.. |WindowsCiBuild| image:: https://dev.azure.com/projectmu/mu/_apis/build/status/CI/Mu%20Basecore%20CI%20VS2019?branchName=release%2F202302
.. |WindowsCiTest| image:: https://img.shields.io/azure-devops/tests/projectmu/mu/39.svg
.. |WindowsCiCoverage| image:: https://img.shields.io/badge/coverage-coming_soon-blue

.. _Ubuntu_GCC5: https://dev.azure.com/projectmu/mu/_build/latest?definitionId=40&branchName=release%2F202302
.. |UbuntuCiBuild| image:: https://dev.azure.com/projectmu/mu/_apis/build/status/CI/Mu%20Basecore%20CI%20Ubuntu%20GCC5?branchName=release%2F202302
.. |UbuntuCiTest| image:: https://img.shields.io/azure-devops/tests/projectmu/mu/40.svg
.. |UbuntuCiCoverage| image:: https://img.shields.io/badge/coverage-coming_soon-blue

.. |build_status_windows| image:: https://dev.azure.com/projectmu/mu/_apis/build/status/CI/Mu%20Basecore%20CI%20VS2019?branchName=release%2F202302