1 /** @file 2 * Header containing the Xpress-RICH3 PCIe Root Complex specific values 3 * 4 * Copyright (c) 2011-2015, ARM Ltd. All rights reserved. 5 * 6 * This program and the accompanying materials 7 * are licensed and made available under the terms and conditions of the BSD License 8 * which accompanies this distribution. The full text of the license may be found at 9 * http://opensource.org/licenses/bsd-license.php 10 * 11 * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 * 14 **/ 15 16 #ifndef __XPRESS_RICH3_H__ 17 #define __XPRESS_RICH3_H__ 18 19 #include <Protocol/CpuIo2.h> 20 #include <Library/PcdLib.h> 21 22 #define PCI_ECAM_BASE FixedPcdGet64 (PcdPciConfigurationSpaceBaseAddress) 23 #define PCI_ECAM_SIZE FixedPcdGet64 (PcdPciConfigurationSpaceSize) 24 #define PCI_IO_BASE FixedPcdGet64 (PcdPciIoBase) 25 #define PCI_IO_SIZE FixedPcdGet64 (PcdPciIoSize) 26 #define PCI_MEM32_BASE FixedPcdGet64 (PcdPciMmio32Base) 27 #define PCI_MEM32_SIZE FixedPcdGet64 (PcdPciMmio32Size) 28 #define PCI_MEM64_BASE FixedPcdGet64 (PcdPciMmio64Base) 29 #define PCI_MEM64_SIZE FixedPcdGet64 (PcdPciMmio64Size) 30 31 /* 32 * Bridge Internal Registers 33 */ 34 35 // PCIe Available Credit Settings 36 #define PCIE_VC_CRED 0x090 37 // PCIe PCI Standard Configuration Identification Settings registers 38 #define PCIE_PCI_IDS 0x098 39 #define PCIE_PCI_IDS_CLASSCODE_OFFSET 0x4 40 // PCIe Specific 2 Capabilities Settings 41 #define PCIE_PEX_SPC2 0x0d8 42 // PCIe Windows Settings register 43 #define PCIE_BAR_WIN 0x0FC 44 // Local Processor Interrupt Mask 45 #define PCIE_IMASK_LOCAL 0x180 46 47 #define PCIE_BAR_WIN_SUPPORT_IO BIT0 48 #define PCIE_BAR_WIN_SUPPORT_IO32 BIT1 49 #define PCIE_BAR_WIN_SUPPORT_MEM BIT2 50 #define PCIE_BAR_WIN_SUPPORT_MEM64 BIT3 51 52 #define PCIE_INT_MSI BIT28 53 #define PCIE_INT_A BIT24 54 #define PCIE_INT_B BIT25 55 #define PCIE_INT_C BIT26 56 #define PCIE_INT_D BIT27 57 #define PCIE_INT_INTx (PCIE_INT_A | PCIE_INT_B |\ 58 PCIE_INT_C | PCIE_INT_D) 59 60 /* 61 * PCIe Control Registers 62 */ 63 #define PCIE_CONTROL_RST_CTL 0x1004 64 #define PCIE_CONTROL_RST_STS 0x1008 65 66 /* 67 * PCI Express Address Translation registers 68 * All are offsets from PcdPcieControlBaseAddress 69 */ 70 #define VEXPRESS_ATR_PCIE_WIN0 0x600 71 #define VEXPRESS_ATR_AXI4_SLV0 0x800 72 #define VEXPRESS_ATR_AXI4_SLV1 0x820 73 74 #define PCI_ATR_ENTRY_SIZE 0x20 75 #define PCI_ATR_SRC_ADDR_LOW_SIZE 0 76 #define PCI_ATR_SRC_ADDR_HI 0x4 77 #define PCI_ATR_TRSL_ADDR_LOW 0x8 78 #define PCI_ATR_TRSL_ADDR_HI 0xc 79 #define PCI_ATR_TRSL_PARAM 0x10 80 81 #define PCI_ATR_TRSLID_AXIDEVICE 0x420004 82 #define PCI_ATR_TRSLID_AXIMEMORY 0x4e0004 83 #define PCI_ATR_TRSLID_PCIE_CONF 0x000001 84 #define PCI_ATR_TRSLID_PCIE_IO 0x020000 85 #define PCI_ATR_TRSLID_PCIE_MEMORY 0x000000 86 87 #define PCIE_CONTROL_RST_CTL_RC_REL (1 << 1) 88 #define PCIE_CONTROL_RST_CTL_PHY_REL (1 << 0) 89 #define PCIE_CONTROL_RST_CTL_RCPHY_REL (PCIE_CONTROL_RST_CTL_RC_REL | PCIE_CONTROL_RST_CTL_PHY_REL) 90 91 #define PCIE_CONTROL_RST_STS_RC_ST (1 << 2) 92 #define PCIE_CONTROL_RST_STS_PHY_ST (1 << 1) 93 #define PCIE_CONTROL_RST_STS_PLL_ST (1 << 0) 94 #define PCIE_CONTROL_RST_STS_RCPHYPLL_OUT (PCIE_CONTROL_RST_STS_RC_ST | PCIE_CONTROL_RST_STS_PHY_ST | PCIE_CONTROL_RST_STS_PLL_ST) 95 96 #define VEXPRESS_BASIC_STATUS 0x18 97 #define LINK_UP 0xff 98 99 /* 100 * Initialize Versatile Express PCIe Host Bridge 101 */ 102 EFI_STATUS 103 VExpressPciRbInit ( 104 IN EFI_CPU_IO2_PROTOCOL *CpuIo 105 ); 106 107 // Does not support neither EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM 108 // nor EFI_PCI_HOST_BRIDGE_MEM64_DECODE 109 #define PCI_MEMORY_ALLOCATION_ATTRIBUTES 0 110 111 #endif 112