u-boot-brain/drivers/pci/pcie_fsl.h
Hou Zhiqiang fbcb2ff5c6 dm: pcie_fsl: Fix the calculation of controller index
The PCIe controller register address in CCSR is different
on various platforms, the current code erroneously use
the hardcoded address (0xffe240000) and stride (0x10000)
to calculate the controller's index.

Fix it by adding the related info to the driver data
structure.

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>
2019-08-28 13:47:44 +05:30

67 lines
1.6 KiB
C

/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Copyright 2019 NXP
*
* PCIe DM U-Boot driver for Freescale PowerPC SoCs
* Author: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
*/
#ifndef _PCIE_FSL_H_
#define _PCIE_FSL_H_
/* GPEX CSR */
#define CSR_CLASSCODE 0x474
#ifdef CONFIG_SYS_FSL_PCI_VER_3_X
#define FSL_PCIE_CAP_ID 0x70
#else
#define FSL_PCIE_CAP_ID 0x4c
#endif
/* PCIe Device Control Register */
#define PCI_DCR (FSL_PCIE_CAP_ID + 0x08)
/* PCIe Device Status Register */
#define PCI_DSR (FSL_PCIE_CAP_ID + 0x0a)
/* PCIe Link Control Register */
#define PCI_LCR (FSL_PCIE_CAP_ID + 0x10)
/* PCIe Link Status Register */
#define PCI_LSR (FSL_PCIE_CAP_ID + 0x12)
#ifndef CONFIG_SYS_PCI_MEMORY_BUS
#define CONFIG_SYS_PCI_MEMORY_BUS 0
#endif
#ifndef CONFIG_SYS_PCI_MEMORY_PHYS
#define CONFIG_SYS_PCI_MEMORY_PHYS 0
#endif
#if defined(CONFIG_SYS_PCI_64BIT) && !defined(CONFIG_SYS_PCI64_MEMORY_BUS)
#define CONFIG_SYS_PCI64_MEMORY_BUS (64ull * 1024 * 1024 * 1024)
#endif
#define PEX_CSR0_LTSSM_MASK 0xFC
#define PEX_CSR0_LTSSM_SHIFT 2
#define LTSSM_L0_REV3 0x11
#define LTSSM_L0 0x16
struct fsl_pcie_data {
u32 block_offset; /* Offset from CCSR of 1st controller */
u32 block_offset_mask; /* Mask out the CCSR base */
u32 stride; /* Offset stride between controllers */
};
struct fsl_pcie {
int idx;
struct udevice *bus;
void __iomem *regs;
u32 law_trgt_if; /* LAW target ID */
u32 block_rev; /* IP block revision */
bool mode; /* RC&EP mode flag */
bool enabled; /* Enable status */
struct list_head list;
struct fsl_pcie_data *info;
};
extern struct list_head fsl_pcie_list;
#endif /* _PCIE_FSL_H_ */