artpec6_pcie
switch (artpec6_pcie->mode) {
struct artpec6_pcie *artpec6_pcie = to_artpec6_pcie(pci);
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
struct artpec6_pcie *artpec6_pcie = to_artpec6_pcie(pci);
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
static void artpec6_pcie_wait_for_phy_a6(struct artpec6_pcie *artpec6_pcie)
struct dw_pcie *pci = artpec6_pcie->pci;
val = artpec6_pcie_readl(artpec6_pcie, NOCCFG);
val = readl(artpec6_pcie->phy_base + PHY_STATUS);
static void artpec6_pcie_wait_for_phy_a7(struct artpec6_pcie *artpec6_pcie)
struct dw_pcie *pci = artpec6_pcie->pci;
val = artpec6_pcie_readl(artpec6_pcie, NOCCFG);
phy_status_tx = readw(artpec6_pcie->phy_base + PHY_TX_ASIC_OUT);
phy_status_rx = readw(artpec6_pcie->phy_base + PHY_RX_ASIC_OUT);
static void artpec6_pcie_wait_for_phy(struct artpec6_pcie *artpec6_pcie)
switch (artpec6_pcie->variant) {
artpec6_pcie_wait_for_phy_a6(artpec6_pcie);
artpec6_pcie_wait_for_phy_a7(artpec6_pcie);
static void artpec6_pcie_init_phy_a6(struct artpec6_pcie *artpec6_pcie)
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
val = artpec6_pcie_readl(artpec6_pcie, NOCCFG);
artpec6_pcie_writel(artpec6_pcie, NOCCFG, val);
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
val = artpec6_pcie_readl(artpec6_pcie, NOCCFG);
artpec6_pcie_writel(artpec6_pcie, NOCCFG, val);
static void artpec6_pcie_init_phy_a7(struct artpec6_pcie *artpec6_pcie)
struct dw_pcie *pci = artpec6_pcie->pci;
val = artpec6_pcie_readl(artpec6_pcie, PCIESTAT);
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
val = artpec6_pcie_readl(artpec6_pcie, NOCCFG);
artpec6_pcie_writel(artpec6_pcie, NOCCFG, val);
val = artpec6_pcie_readl(artpec6_pcie, NOCCFG);
artpec6_pcie_writel(artpec6_pcie, NOCCFG, val);
static void artpec6_pcie_init_phy(struct artpec6_pcie *artpec6_pcie)
switch (artpec6_pcie->variant) {
artpec6_pcie_init_phy_a6(artpec6_pcie);
artpec6_pcie_init_phy_a7(artpec6_pcie);
static void artpec6_pcie_assert_core_reset(struct artpec6_pcie *artpec6_pcie)
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
switch (artpec6_pcie->variant) {
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
static void artpec6_pcie_deassert_core_reset(struct artpec6_pcie *artpec6_pcie)
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
switch (artpec6_pcie->variant) {
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
struct artpec6_pcie *artpec6_pcie = to_artpec6_pcie(pci);
if (artpec6_pcie->variant == ARTPEC7) {
artpec6_pcie_assert_core_reset(artpec6_pcie);
artpec6_pcie_init_phy(artpec6_pcie);
artpec6_pcie_deassert_core_reset(artpec6_pcie);
artpec6_pcie_wait_for_phy(artpec6_pcie);
struct artpec6_pcie *artpec6_pcie = to_artpec6_pcie(pci);
artpec6_pcie_assert_core_reset(artpec6_pcie);
artpec6_pcie_init_phy(artpec6_pcie);
artpec6_pcie_deassert_core_reset(artpec6_pcie);
artpec6_pcie_wait_for_phy(artpec6_pcie);
struct artpec6_pcie *artpec6_pcie;
artpec6_pcie = devm_kzalloc(dev, sizeof(*artpec6_pcie), GFP_KERNEL);
if (!artpec6_pcie)
artpec6_pcie->pci = pci;
artpec6_pcie->variant = variant;
artpec6_pcie->mode = mode;
artpec6_pcie->phy_base =
if (IS_ERR(artpec6_pcie->phy_base))
return PTR_ERR(artpec6_pcie->phy_base);
artpec6_pcie->regmap =
if (IS_ERR(artpec6_pcie->regmap))
return PTR_ERR(artpec6_pcie->regmap);
platform_set_drvdata(pdev, artpec6_pcie);
switch (artpec6_pcie->mode) {
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
dev_err(dev, "INVALID device type %d\n", artpec6_pcie->mode);
static u32 artpec6_pcie_readl(struct artpec6_pcie *artpec6_pcie, u32 offset)
regmap_read(artpec6_pcie->regmap, offset, &val);
static void artpec6_pcie_writel(struct artpec6_pcie *artpec6_pcie, u32 offset, u32 val)
regmap_write(artpec6_pcie->regmap, offset, val);
struct artpec6_pcie *artpec6_pcie = to_artpec6_pcie(pci);