[edk2-devel] [edk2-platforms: PATCH 09/14] Marvell/Armada80x0McBin: Enable ACPI PCIE support

Leif Lindholm leif.lindholm at linaro.org
Fri May 10 15:54:32 UTC 2019


On Thu, May 09, 2019 at 11:53:37AM +0200, Marcin Wojtas wrote:
> This patch adds description of the PCIE controller in
> ACPI tables of MacchiatoBin community board.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Marcin Wojtas <mw at semihalf.com>
> ---
>  Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin.inf       |   1 +
>  Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Pcie.h    |  25 +++
>  Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Dsdt.asl  | 217 ++++++++++++++++++++
>  Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Mcfg.aslc |  47 +++++
>  4 files changed, 290 insertions(+)
>  create mode 100644 Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Pcie.h
>  create mode 100644 Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Mcfg.aslc
> 
> diff --git a/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin.inf b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin.inf
> index 9e52281..e627932 100644
> --- a/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin.inf
> +++ b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin.inf
> @@ -25,6 +25,7 @@
>  
>  [Sources]
>    Armada80x0McBin/Dsdt.asl
> +  Armada80x0McBin/Mcfg.aslc
>    Fadt.aslc
>    Gtdt.aslc
>    Madt.aslc
> diff --git a/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Pcie.h b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Pcie.h
> new file mode 100644
> index 0000000..93631c2
> --- /dev/null
> +++ b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Pcie.h

This file also has wrong line endings in your branch.

/
    Leif

> @@ -0,0 +1,25 @@
> +/**
> +
> +  Copyright (C) 2019, Marvell International Ltd. and its affiliates.
> +
> +  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.
> +
> +**/
> +
> +#define PCI_BUS_MIN        0x0
> +#define PCI_BUS_MAX        0x0
> +#define PCI_BUS_COUNT      0x1
> +#define PCI_MMIO32_BASE    0xC0000000
> +#define PCI_MMIO32_SIZE    0x20000000
> +#define PCI_MMIO64_BASE    0x800000000
> +#define PCI_MMIO64_SIZE    0x100000000
> +#define PCI_IO_BASE        0x0
> +#define PCI_IO_SIZE        0x10000
> +#define PCI_IO_TRANSLATION 0xEFF00000
> +#define PCI_ECAM_BASE      0xE0008000
> diff --git a/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Dsdt.asl b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Dsdt.asl
> index 87cb93a..caf5cb9 100644
> --- a/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Dsdt.asl
> +++ b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Dsdt.asl
> @@ -14,6 +14,7 @@
>  
>  **/
>  
> +#include "Armada80x0McBin/Pcie.h"
>  #include "IcuInterrupts.h"
>  
>  DefinitionBlock ("DSDT.aml", "DSDT", 2, "MVEBU ", "ARMADA8K", 3)
> @@ -306,5 +307,221 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, "MVEBU ", "ARMADA8K", 3)
>                  }
>              })
>          }
> +
> +        //
> +        // PCIe Root Bus
> +        //
> +        Device (PCI0)
> +        {
> +            Name (_HID, "PNP0A08" /* PCI Express Bus */)  // _HID: Hardware ID
> +            Name (_CID, "PNP0A03" /* PCI Bus */)  // _CID: Compatible ID
> +            Name (_SEG, 0x00)  // _SEG: PCI Segment
> +            Name (_BBN, 0x00)  // _BBN: BIOS Bus Number
> +            Name (_CCA, 0x01)  // _CCA: Cache Coherency Attribute
> +            Name (_PRT, Package ()  // _PRT: PCI Routing Table
> +            {
> +                Package () { 0xFFFF, 0x0, 0x0, 0x40 },
> +                Package () { 0xFFFF, 0x1, 0x0, 0x40 },
> +                Package () { 0xFFFF, 0x2, 0x0, 0x40 },
> +                Package () { 0xFFFF, 0x3, 0x0, 0x40 }
> +            })
> +
> +            Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings
> +            {
> +                Name (RBUF, ResourceTemplate ()
> +                {
> +                    WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
> +                        0x0000,                             // Granularity
> +                        PCI_BUS_MIN,                        // Range Minimum
> +                        PCI_BUS_MAX,                        // Range Maximum
> +                        0x0000,                             // Translation Offset
> +                        PCI_BUS_COUNT                       // Length
> +                        )
> +                    DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite,
> +                        0x00000000,                         // Granularity
> +                        PCI_MMIO32_BASE,                    // Range Minimum
> +                        0xDFFFFFFF,                         // Range Maximum
> +                        0x00000000,                         // Translation Offset
> +                        PCI_MMIO32_SIZE                     // Length
> +                        )
> +                    QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite,
> +                        0x0000000000000000,                 // Granularity
> +                        PCI_MMIO64_BASE,                    // Range Minimum
> +                        0x8FFFFFFFF,                        // Range Maximum
> +                        0x00000000,                         // Translation Offset
> +                        PCI_MMIO64_SIZE                     // Length
> +                        )
> +                    DWordIo (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
> +                        0x00000000,                         // Granularity
> +                        PCI_IO_BASE,                        // Range Minimum
> +                        0x0000FFFF,                         // Range Maximum
> +                        PCI_IO_TRANSLATION,                 // Translation Address
> +                        PCI_IO_SIZE,                        // Length
> +                        ,
> +                        ,
> +                        ,
> +                        TypeTranslation
> +                        )
> +                })
> +                Return (RBUF) /* \_SB_.PCI0._CRS.RBUF */
> +            } // Method(_CRS)
> +
> +            Device (RES0)
> +            {
> +                Name (_HID, "PNP0C02")
> +                Name (_CRS, ResourceTemplate ()
> +                {
> +                    Memory32Fixed (ReadWrite,
> +                                   PCI_ECAM_BASE,
> +                                   0x10000000
> +                                   )
> +                })
> +            }
> +            Name (SUPP, 0x00)
> +            Name (CTRL, 0x00)
> +            Method (_OSC, 4, NotSerialized)  // _OSC: Operating System Capabilities
> +            {
> +                CreateDWordField (Arg3, 0x00, CDW1)
> +                If (LEqual (Arg0, ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */))
> +                {
> +                    CreateDWordField (Arg3, 0x04, CDW2)
> +                    CreateDWordField (Arg3, 0x08, CDW3)
> +                    Store (CDW2, SUPP) /* \_SB_.PCI0.SUPP */
> +                    Store (CDW3, CTRL) /* \_SB_.PCI0.CTRL */
> +                    If (LNotEqual (And (SUPP, 0x16), 0x16))
> +                    {
> +                        And (CTRL, 0x1E, CTRL) /* \_SB_.PCI0.CTRL */
> +                    }
> +
> +                    And (CTRL, 0x1D, CTRL) /* \_SB_.PCI0.CTRL */
> +                    If (LNotEqual (Arg1, One))
> +                    {
> +                        Or (CDW1, 0x08, CDW1) /* \_SB_.PCI0._OSC.CDW1 */
> +                    }
> +
> +                    If (LNotEqual (CDW3, CTRL))
> +                    {
> +                        Or (CDW1, 0x10, CDW1) /* \_SB_.PCI0._OSC.CDW1 */
> +                    }
> +
> +                    Store (CTRL, CDW3) /* \_SB_.PCI0._OSC.CDW3 */
> +                    Return (Arg3)
> +                }
> +                Else
> +                {
> +                    Or (CDW1, 0x04, CDW1) /* \_SB_.PCI0._OSC.CDW1 */
> +                    Return (Arg3)
> +                }
> +            } // Method(_OSC)
> +
> +            //
> +            // Device-Specific Methods
> +            //
> +            Method(_DSM, 0x4, NotSerialized) {
> +              If (LEqual(Arg0, ToUUID("E5C937D0-3553-4d7a-9117-EA4D19C3434D"))) {
> +                switch (ToInteger(Arg2)) {
> +                  //
> +                  // Function 0: Return supported functions
> +                  //
> +                  case(0) {
> +                    Return (Buffer() {0xFF})
> +                  }
> +
> +                  //
> +                  // Function 1: Return PCIe Slot Information
> +                  //
> +                  case(1) {
> +                    Return (Package(2) {
> +                      One, // Success
> +                      Package(3) {
> +                        0x1,  // x1 PCIe link
> +                        0x1,  // PCI express card slot
> +                        0x1   // WAKE# signal supported
> +                      }
> +                    })
> +                  }
> +
> +                  //
> +                  // Function 2: Return PCIe Slot Number.
> +                  //
> +                  case(2) {
> +                    Return (Package(1) {
> +                      Package(4) {
> +                        2,  // Source ID
> +                        4,  // Token ID: ID refers to a slot
> +                        0,  // Start bit of the field to use.
> +                        7   // End bit of the field to use.
> +                      }
> +                    })
> +                  }
> +
> +                  //
> +                  // Function 4: Return PCI Bus Capabilities
> +                  //
> +                  case(4) {
> +                    Return (Package(2) {
> +                      One, // Success
> +                      Buffer() {
> +                        1,0,            // Version
> +                        0,0,            // Status, 0:Success
> +                        24,0,0,0,       // Length
> +                        1,0,            // PCI
> +                        16,0,           // Length
> +                        0,              // Attributes
> +                        0x0D,           // Current Speed/Mode
> +                        0x3F,0,         // Supported Speeds/Modes
> +                        0,              // Voltage
> +                        0,0,0,0,0,0,0   // Reserved
> +                      }
> +                    })
> +                  }
> +
> +                  //
> +                  // Function 5: Return Ignore PCI Boot Configuration
> +                  //
> +                  case(5) {
> +                    Return (Package(1) {1})
> +                  }
> +
> +                  //
> +                  // Function 6: Return LTR Maximum Latency
> +                  //
> +                  case(6) {
> +                    Return (Package(4) {
> +                      Package(1){0},  // Maximum Snoop Latency Scale
> +                      Package(1){0},  // Maximum Snoop Latency Value
> +                      Package(1){0},  // Maximum No-Snoop Latency Scale
> +                      Package(1){0}   // Maximum No-Snoop Latency Value
> +                    })
> +                  }
> +
> +                  //
> +                  // Function 7: Return PCI Express Naming
> +                  //
> +                  case(7) {
> +                    Return (Package(2) {
> +                      Package(1) {0},
> +                      Package(1) {Unicode("PCI0")}
> +                    })
> +                  }
> +
> +                  //
> +                  // Not supported
> +                  //
> +                  default {
> +                  }
> +                }
> +              }
> +              Return (Buffer(){0})
> +            } // Method(_DSM)
> +
> +            //
> +            // Root-Complex 0
> +            //
> +            Device (RP0)
> +            {
> +                Name (_ADR, PCI_ECAM_BASE)  // _ADR: Bus 0, Dev 0, Func 0
> +            }
> +        }
>      }
>  }
> diff --git a/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Mcfg.aslc b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Mcfg.aslc
> new file mode 100644
> index 0000000..bda5800
> --- /dev/null
> +++ b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada80x0McBin/Mcfg.aslc
> @@ -0,0 +1,47 @@
> +/** @file
> +
> +  Memory mapped config space base address table (MCFG)
> +
> +  Copyright (c) 2017, Linaro Ltd. All rights reserved.<BR>
> +  Copyright (c) 2019, Marvell International Ltd. and its affiliates.<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.
> +
> +**/
> +
> +#include <Library/AcpiLib.h>
> +
> +#include "AcpiHeader.h"
> +#include "Armada80x0McBin/Pcie.h"
> +
> +#include <IndustryStandard/MemoryMappedConfigurationSpaceAccessTable.h>
> +
> +#pragma pack(1)
> +typedef struct {
> +  EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_HEADER Header;
> +  EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_SPACE_BASE_ADDRESS_ALLOCATION_STRUCTURE Structure;
> +} ACPI_6_0_MCFG_STRUCTURE;
> +#pragma pack()
> +
> +STATIC ACPI_6_0_MCFG_STRUCTURE Mcfg = {
> +  {
> +    __ACPI_HEADER (EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE,
> +                   ACPI_6_0_MCFG_STRUCTURE,
> +                   EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_SPACE_ACCESS_TABLE_REVISION),
> +    EFI_ACPI_RESERVED_QWORD
> +  }, {
> +    PCI_ECAM_BASE,                   // BaseAddress
> +    0,                               // PciSegmentGroupNumber
> +    PCI_BUS_MIN,                     // StartBusNumber
> +    PCI_BUS_MAX,                     // EndBusNumber
> +    EFI_ACPI_RESERVED_DWORD          // Reserved
> +  }
> +};
> +
> +VOID CONST * CONST ReferenceAcpiTable = &Mcfg;
> -- 
> 2.7.4
> 

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#40446): https://edk2.groups.io/g/devel/message/40446
Mute This Topic: https://groups.io/mt/31553482/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list