From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@semihalf-com.20150623.gappssmtp.com header.s=20150623 header.b=svNIpjcA; spf=none, err=SPF record not found (domain: semihalf.com, ip: 209.85.208.196, mailfrom: mw@semihalf.com) Received: from mail-lj1-f196.google.com (mail-lj1-f196.google.com [209.85.208.196]) by groups.io with SMTP; Thu, 09 May 2019 02:54:12 -0700 Received: by mail-lj1-f196.google.com with SMTP id e13so1431378ljl.11 for ; Thu, 09 May 2019 02:54:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=F5DRNxZCES0DoKSyiM9mx856qw57/f9iHf4YQW945lY=; b=svNIpjcAbetaGoBtjIUKnQj4PDiBKz/mhUJUnZMqVaF2QeyLvtaxjv5T0qp49CWtpC nqqhTEae6C0fKWt8JFAnEzmntpnV51aU4P4X0eIuROoc40Fv14+rrcy7cEWtOsgXXfwv zrAfIDcYAvP6wyjjRLRSKfkmxv/X0GhyNv14AWN+scuVILLKi3/IdmnU4jKujI+x9mD5 zM4o85xIQOMM6cb0GMF3btaRDq6IpUgDhzKoYds8WAGSlbtT6+CsPSTWgxKLkYpx/X07 OS3t0Q3ub2Gm2MPlhfPivwfL6eY06Eiq2vp3IRPf1ogTpH/zwUCSe646yDkTqRVoav3d ahSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=F5DRNxZCES0DoKSyiM9mx856qw57/f9iHf4YQW945lY=; b=lFMfH2X4sGuU/GsYPgbhH+NBpGCaoNx++YPZXwJj4VcjzkOOpdK5fSdO+ujTP5UMZx OoNLxDqd/tZx17e131MCxtDoGMf8dLhO1hCzwMP7MCx5vv7rd8GpqGKa9CBWkagIvJ+V yXFTc4Ck3AVhvagO7zQoYtq0AG4KLmnsgtkB+XcfnyGnO9hd+riDghR7NndogaQrVJXx mmbCvplie5EtFlO6Sx2OAoLPuX3xgvVkDDjlKNCXcBwBNd2YXJz1KL8ymvwMuGb0P7FZ r+dPpa8PCSy+MLpWqUPVo/y5xiSlzhyNHuQZlYi/noO01mvJfsaXaZ1IPSH8J5cZYRge qwoA== X-Gm-Message-State: APjAAAVutEou+x4fGi9wnY0FRUS5gS9+p88T8w1FEUdk8ynuJybEDyFm M3LQ2YbamBaC4YgA9NAIr0eFe+Ic5ps= X-Google-Smtp-Source: APXvYqx42aVKJ2faaVxNbJ3WJpV9WdHO8DWVvxsFxh1VDoqV2tlwv/sTkWvJRSym3l6friT2qWUOOw== X-Received: by 2002:a2e:9c0a:: with SMTP id s10mr1765797lji.162.1557395649729; Thu, 09 May 2019 02:54:09 -0700 (PDT) Return-Path: Received: from gilgamesh.semihalf.com (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id l25sm276668lfk.57.2019.05.09.02.54.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 09 May 2019 02:54:08 -0700 (PDT) From: "Marcin Wojtas" To: devel@edk2.groups.io Cc: leif.lindholm@linaro.org, ard.biesheuvel@linaro.org, mw@semihalf.com, jsd@semihalf.com, jaz@semihalf.com, kostap@marvell.com, Jici.Gao@arm.com, rebecca@bluestop.org, kettenis@jive.eu Subject: [edk2-platforms: PATCH 11/14] Marvell/Armada70x0Db: Enable ACPI PCIE support Date: Thu, 9 May 2019 11:53:39 +0200 Message-Id: <1557395622-32425-12-git-send-email-mw@semihalf.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1557395622-32425-1-git-send-email-mw@semihalf.com> References: <1557395622-32425-1-git-send-email-mw@semihalf.com> This patch adds description of the PCIE controller in ACPI tables of Armada 7040 DB board. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Marcin Wojtas --- Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db.inf | 1 + Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Pcie.h | 25 +++ Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Dsdt.asl | 217 ++++++++++++++++++++ Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Mcfg.aslc | 47 +++++ 4 files changed, 290 insertions(+) create mode 100644 Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Pcie.h create mode 100644 Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Mcfg.aslc diff --git a/Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db.inf b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db.inf index 659c333..96bcdf0 100644 --- a/Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db.inf +++ b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db.inf @@ -25,6 +25,7 @@ [Sources] Armada70x0Db/Dsdt.asl + Armada70x0Db/Mcfg.aslc Fadt.aslc Gtdt.aslc Madt.aslc diff --git a/Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Pcie.h b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Pcie.h new file mode 100644 index 0000000..93631c2 --- /dev/null +++ b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Pcie.h @@ -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/Armada70x0Db/Dsdt.asl b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Dsdt.asl index 621b688..a23bd70 100644 --- a/Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Dsdt.asl +++ b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Dsdt.asl @@ -15,6 +15,7 @@ **/ +#include "Armada70x0Db/Pcie.h" #include "IcuInterrupts.h" DefinitionBlock ("DSDT.aml", "DSDT", 2, "MVEBU ", "ARMADA7K", 3) @@ -225,5 +226,221 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, "MVEBU ", "ARMADA7K", 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/Armada70x0Db/Mcfg.aslc b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Mcfg.aslc new file mode 100644 index 0000000..90bf163 --- /dev/null +++ b/Silicon/Marvell/Armada7k8k/AcpiTables/Armada70x0Db/Mcfg.aslc @@ -0,0 +1,47 @@ +/** @file + + Memory mapped config space base address table (MCFG) + + Copyright (c) 2017, Linaro Ltd. All rights reserved.
+ 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. + +**/ + +#include + +#include "AcpiHeader.h" +#include "Armada70x0Db/Pcie.h" + +#include + +#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