1a7294abaSHou Zhiqiang /* 2e809e747SPriyanka Jain * Copyright 2017 NXP 3a7294abaSHou Zhiqiang * Copyright 2014-2015 Freescale Semiconductor, Inc. 4a7294abaSHou Zhiqiang * Layerscape PCIe driver 5a7294abaSHou Zhiqiang * 6a7294abaSHou Zhiqiang * SPDX-License-Identifier: GPL-2.0+ 7a7294abaSHou Zhiqiang */ 8a7294abaSHou Zhiqiang 9a7294abaSHou Zhiqiang #ifndef _PCIE_LAYERSCAPE_H_ 10a7294abaSHou Zhiqiang #define _PCIE_LAYERSCAPE_H_ 11a7294abaSHou Zhiqiang #include <pci.h> 129fa2a4fcSMinghuan Lian #include <dm.h> 13a7294abaSHou Zhiqiang 14a7294abaSHou Zhiqiang #ifndef CONFIG_SYS_PCI_MEMORY_BUS 15a7294abaSHou Zhiqiang #define CONFIG_SYS_PCI_MEMORY_BUS CONFIG_SYS_SDRAM_BASE 16a7294abaSHou Zhiqiang #endif 17a7294abaSHou Zhiqiang 18a7294abaSHou Zhiqiang #ifndef CONFIG_SYS_PCI_MEMORY_PHYS 19a7294abaSHou Zhiqiang #define CONFIG_SYS_PCI_MEMORY_PHYS CONFIG_SYS_SDRAM_BASE 20a7294abaSHou Zhiqiang #endif 21a7294abaSHou Zhiqiang 22a7294abaSHou Zhiqiang #ifndef CONFIG_SYS_PCI_MEMORY_SIZE 23a7294abaSHou Zhiqiang #define CONFIG_SYS_PCI_MEMORY_SIZE (2 * 1024 * 1024 * 1024UL) /* 2G */ 24a7294abaSHou Zhiqiang #endif 25a7294abaSHou Zhiqiang 26a7294abaSHou Zhiqiang #ifndef CONFIG_SYS_PCI_EP_MEMORY_BASE 27a7294abaSHou Zhiqiang #define CONFIG_SYS_PCI_EP_MEMORY_BASE CONFIG_SYS_LOAD_ADDR 28a7294abaSHou Zhiqiang #endif 29a7294abaSHou Zhiqiang 303d8553f0SHou Zhiqiang #define PCIE_PHYS_SIZE 0x200000000 313d8553f0SHou Zhiqiang #define LS2088A_PCIE_PHYS_SIZE 0x800000000 323d8553f0SHou Zhiqiang #define LS2088A_PCIE1_PHYS_ADDR 0x2000000000 333d8553f0SHou Zhiqiang 34a7294abaSHou Zhiqiang /* iATU registers */ 35a7294abaSHou Zhiqiang #define PCIE_ATU_VIEWPORT 0x900 36a7294abaSHou Zhiqiang #define PCIE_ATU_REGION_INBOUND (0x1 << 31) 37a7294abaSHou Zhiqiang #define PCIE_ATU_REGION_OUTBOUND (0x0 << 31) 38a7294abaSHou Zhiqiang #define PCIE_ATU_REGION_INDEX0 (0x0 << 0) 39a7294abaSHou Zhiqiang #define PCIE_ATU_REGION_INDEX1 (0x1 << 0) 40a7294abaSHou Zhiqiang #define PCIE_ATU_REGION_INDEX2 (0x2 << 0) 41a7294abaSHou Zhiqiang #define PCIE_ATU_REGION_INDEX3 (0x3 << 0) 42a7294abaSHou Zhiqiang #define PCIE_ATU_REGION_NUM 6 43a7294abaSHou Zhiqiang #define PCIE_ATU_CR1 0x904 44a7294abaSHou Zhiqiang #define PCIE_ATU_TYPE_MEM (0x0 << 0) 45a7294abaSHou Zhiqiang #define PCIE_ATU_TYPE_IO (0x2 << 0) 46a7294abaSHou Zhiqiang #define PCIE_ATU_TYPE_CFG0 (0x4 << 0) 47a7294abaSHou Zhiqiang #define PCIE_ATU_TYPE_CFG1 (0x5 << 0) 48a7294abaSHou Zhiqiang #define PCIE_ATU_CR2 0x908 49a7294abaSHou Zhiqiang #define PCIE_ATU_ENABLE (0x1 << 31) 50a7294abaSHou Zhiqiang #define PCIE_ATU_BAR_MODE_ENABLE (0x1 << 30) 51a7294abaSHou Zhiqiang #define PCIE_ATU_BAR_NUM(bar) ((bar) << 8) 52a7294abaSHou Zhiqiang #define PCIE_ATU_LOWER_BASE 0x90C 53a7294abaSHou Zhiqiang #define PCIE_ATU_UPPER_BASE 0x910 54a7294abaSHou Zhiqiang #define PCIE_ATU_LIMIT 0x914 55a7294abaSHou Zhiqiang #define PCIE_ATU_LOWER_TARGET 0x918 56a7294abaSHou Zhiqiang #define PCIE_ATU_BUS(x) (((x) & 0xff) << 24) 57a7294abaSHou Zhiqiang #define PCIE_ATU_DEV(x) (((x) & 0x1f) << 19) 58a7294abaSHou Zhiqiang #define PCIE_ATU_FUNC(x) (((x) & 0x7) << 16) 59a7294abaSHou Zhiqiang #define PCIE_ATU_UPPER_TARGET 0x91C 60a7294abaSHou Zhiqiang 61a7294abaSHou Zhiqiang /* DBI registers */ 62a7294abaSHou Zhiqiang #define PCIE_SRIOV 0x178 63a7294abaSHou Zhiqiang #define PCIE_STRFMR1 0x71c /* Symbol Timer & Filter Mask Register1 */ 64a7294abaSHou Zhiqiang #define PCIE_DBI_RO_WR_EN 0x8bc 65a7294abaSHou Zhiqiang 66a7294abaSHou Zhiqiang #define PCIE_LINK_CAP 0x7c 67a7294abaSHou Zhiqiang #define PCIE_LINK_SPEED_MASK 0xf 68a7294abaSHou Zhiqiang #define PCIE_LINK_WIDTH_MASK 0x3f0 69a7294abaSHou Zhiqiang #define PCIE_LINK_STA 0x82 70a7294abaSHou Zhiqiang 71a7294abaSHou Zhiqiang #define LTSSM_STATE_MASK 0x3f 72a7294abaSHou Zhiqiang #define LTSSM_PCIE_L0 0x11 /* L0 state */ 73a7294abaSHou Zhiqiang 74a7294abaSHou Zhiqiang #define PCIE_DBI_SIZE 0x100000 /* 1M */ 75a7294abaSHou Zhiqiang 76a7294abaSHou Zhiqiang #define PCIE_LCTRL0_CFG2_ENABLE (1 << 31) 77a7294abaSHou Zhiqiang #define PCIE_LCTRL0_VF(vf) ((vf) << 22) 78a7294abaSHou Zhiqiang #define PCIE_LCTRL0_PF(pf) ((pf) << 16) 79a7294abaSHou Zhiqiang #define PCIE_LCTRL0_VF_ACTIVE (1 << 21) 80a7294abaSHou Zhiqiang #define PCIE_LCTRL0_VAL(pf, vf) (PCIE_LCTRL0_PF(pf) | \ 81a7294abaSHou Zhiqiang PCIE_LCTRL0_VF(vf) | \ 82a7294abaSHou Zhiqiang ((vf) == 0 ? 0 : PCIE_LCTRL0_VF_ACTIVE) | \ 83a7294abaSHou Zhiqiang PCIE_LCTRL0_CFG2_ENABLE) 84a7294abaSHou Zhiqiang 85a7294abaSHou Zhiqiang #define PCIE_NO_SRIOV_BAR_BASE 0x1000 86a7294abaSHou Zhiqiang 87a7294abaSHou Zhiqiang #define PCIE_PF_NUM 2 88a7294abaSHou Zhiqiang #define PCIE_VF_NUM 64 89a7294abaSHou Zhiqiang 90a7294abaSHou Zhiqiang #define PCIE_BAR0_SIZE (4 * 1024) /* 4K */ 91a7294abaSHou Zhiqiang #define PCIE_BAR1_SIZE (8 * 1024) /* 8K for MSIX */ 92a7294abaSHou Zhiqiang #define PCIE_BAR2_SIZE (4 * 1024) /* 4K */ 93a7294abaSHou Zhiqiang #define PCIE_BAR4_SIZE (1 * 1024 * 1024) /* 1M */ 94a7294abaSHou Zhiqiang 9580afc63fSMinghuan Lian /* LUT registers */ 9680afc63fSMinghuan Lian #define PCIE_LUT_UDR(n) (0x800 + (n) * 8) 9780afc63fSMinghuan Lian #define PCIE_LUT_LDR(n) (0x804 + (n) * 8) 9880afc63fSMinghuan Lian #define PCIE_LUT_ENABLE (1 << 31) 9980afc63fSMinghuan Lian #define PCIE_LUT_ENTRY_COUNT 32 10080afc63fSMinghuan Lian 10180afc63fSMinghuan Lian /* PF Controll registers */ 102d170aca1SHou Zhiqiang #define PCIE_PF_CONFIG 0x14 10380afc63fSMinghuan Lian #define PCIE_PF_VF_CTRL 0x7F8 10480afc63fSMinghuan Lian #define PCIE_PF_DBG 0x7FC 105d170aca1SHou Zhiqiang #define PCIE_CONFIG_READY (1 << 0) 10680afc63fSMinghuan Lian 10780afc63fSMinghuan Lian #define PCIE_SRDS_PRTCL(idx) (PCIE1 + (idx)) 10880afc63fSMinghuan Lian #define PCIE_SYS_BASE_ADDR 0x3400000 10980afc63fSMinghuan Lian #define PCIE_CCSR_SIZE 0x0100000 11080afc63fSMinghuan Lian 11180afc63fSMinghuan Lian /* CS2 */ 11280afc63fSMinghuan Lian #define PCIE_CS2_OFFSET 0x1000 /* For PCIe without SR-IOV */ 11380afc63fSMinghuan Lian 11480afc63fSMinghuan Lian #define SVR_LS102XA 0 11580afc63fSMinghuan Lian #define SVR_VAR_PER_SHIFT 8 11680afc63fSMinghuan Lian #define SVR_LS102XA_MASK 0x700 1173d8553f0SHou Zhiqiang #define SVR_LS2088A 0x870900 1183d8553f0SHou Zhiqiang #define SVR_LS2084A 0x870910 1193d8553f0SHou Zhiqiang #define SVR_LS2048A 0x870920 1203d8553f0SHou Zhiqiang #define SVR_LS2044A 0x870930 121*ec8a7d77SSantan Kumar #define SVR_LS2081A 0x870918 122*ec8a7d77SSantan Kumar #define SVR_LS2041A 0x870914 12380afc63fSMinghuan Lian 12480afc63fSMinghuan Lian /* LS1021a PCIE space */ 12580afc63fSMinghuan Lian #define LS1021_PCIE_SPACE_OFFSET 0x4000000000ULL 12680afc63fSMinghuan Lian #define LS1021_PCIE_SPACE_SIZE 0x0800000000ULL 12780afc63fSMinghuan Lian 12880afc63fSMinghuan Lian /* LS1021a PEX1/2 Misc Ports Status Register */ 12980afc63fSMinghuan Lian #define LS1021_PEXMSCPORTSR(pex_idx) (0x94 + (pex_idx) * 4) 13080afc63fSMinghuan Lian #define LS1021_LTSSM_STATE_SHIFT 20 13180afc63fSMinghuan Lian 13280afc63fSMinghuan Lian struct ls_pcie { 13380afc63fSMinghuan Lian int idx; 13480afc63fSMinghuan Lian struct list_head list; 13580afc63fSMinghuan Lian struct udevice *bus; 13680afc63fSMinghuan Lian struct fdt_resource dbi_res; 13780afc63fSMinghuan Lian struct fdt_resource lut_res; 13880afc63fSMinghuan Lian struct fdt_resource ctrl_res; 13980afc63fSMinghuan Lian struct fdt_resource cfg_res; 14080afc63fSMinghuan Lian void __iomem *dbi; 14180afc63fSMinghuan Lian void __iomem *lut; 14280afc63fSMinghuan Lian void __iomem *ctrl; 14380afc63fSMinghuan Lian void __iomem *cfg0; 14480afc63fSMinghuan Lian void __iomem *cfg1; 14580afc63fSMinghuan Lian bool big_endian; 14680afc63fSMinghuan Lian bool enabled; 14780afc63fSMinghuan Lian int next_lut_index; 14880afc63fSMinghuan Lian struct pci_controller hose; 14980afc63fSMinghuan Lian }; 15080afc63fSMinghuan Lian 15180afc63fSMinghuan Lian extern struct list_head ls_pcie_list; 15280afc63fSMinghuan Lian 153a7294abaSHou Zhiqiang #endif /* _PCIE_LAYERSCAPE_H_ */ 154