PCI: artpec6: Add register accessors
Add device-specific register accessors for consistency across host drivers. No functional change intended. Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Jesper Nilsson <jesper.nilsson@axis.com>
This commit is contained in:
Родитель
f392bd11e6
Коммит
26fbcc5a45
|
@ -65,6 +65,19 @@ struct artpec6_pcie {
|
||||||
|
|
||||||
#define ARTPEC6_CPU_TO_BUS_ADDR 0x0fffffff
|
#define ARTPEC6_CPU_TO_BUS_ADDR 0x0fffffff
|
||||||
|
|
||||||
|
static u32 artpec6_pcie_readl(struct artpec6_pcie *artpec6_pcie, u32 offset)
|
||||||
|
{
|
||||||
|
u32 val;
|
||||||
|
|
||||||
|
regmap_read(artpec6_pcie->regmap, offset, &val);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void artpec6_pcie_writel(struct artpec6_pcie *artpec6_pcie, u32 offset, u32 val)
|
||||||
|
{
|
||||||
|
regmap_write(artpec6_pcie->regmap, offset, val);
|
||||||
|
}
|
||||||
|
|
||||||
static int artpec6_pcie_establish_link(struct pcie_port *pp)
|
static int artpec6_pcie_establish_link(struct pcie_port *pp)
|
||||||
{
|
{
|
||||||
struct artpec6_pcie *artpec6_pcie = to_artpec6_pcie(pp);
|
struct artpec6_pcie *artpec6_pcie = to_artpec6_pcie(pp);
|
||||||
|
@ -72,11 +85,11 @@ static int artpec6_pcie_establish_link(struct pcie_port *pp)
|
||||||
unsigned int retries;
|
unsigned int retries;
|
||||||
|
|
||||||
/* Hold DW core in reset */
|
/* Hold DW core in reset */
|
||||||
regmap_read(artpec6_pcie->regmap, PCIECFG, &val);
|
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
|
||||||
val |= PCIECFG_CORE_RESET_REQ;
|
val |= PCIECFG_CORE_RESET_REQ;
|
||||||
regmap_write(artpec6_pcie->regmap, PCIECFG, val);
|
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
|
||||||
|
|
||||||
regmap_read(artpec6_pcie->regmap, PCIECFG, &val);
|
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
|
||||||
val |= PCIECFG_RISRCREN | /* Receiver term. 50 Ohm */
|
val |= PCIECFG_RISRCREN | /* Receiver term. 50 Ohm */
|
||||||
PCIECFG_MODE_TX_DRV_EN |
|
PCIECFG_MODE_TX_DRV_EN |
|
||||||
PCIECFG_CISRREN | /* Reference clock term. 100 Ohm */
|
PCIECFG_CISRREN | /* Reference clock term. 100 Ohm */
|
||||||
|
@ -84,27 +97,27 @@ static int artpec6_pcie_establish_link(struct pcie_port *pp)
|
||||||
val |= PCIECFG_REFCLK_ENABLE;
|
val |= PCIECFG_REFCLK_ENABLE;
|
||||||
val &= ~PCIECFG_DBG_OEN;
|
val &= ~PCIECFG_DBG_OEN;
|
||||||
val &= ~PCIECFG_CLKREQ_B;
|
val &= ~PCIECFG_CLKREQ_B;
|
||||||
regmap_write(artpec6_pcie->regmap, PCIECFG, val);
|
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
|
||||||
usleep_range(5000, 6000);
|
usleep_range(5000, 6000);
|
||||||
|
|
||||||
regmap_read(artpec6_pcie->regmap, NOCCFG, &val);
|
val = artpec6_pcie_readl(artpec6_pcie, NOCCFG);
|
||||||
val |= NOCCFG_ENABLE_CLK_PCIE;
|
val |= NOCCFG_ENABLE_CLK_PCIE;
|
||||||
regmap_write(artpec6_pcie->regmap, NOCCFG, val);
|
artpec6_pcie_writel(artpec6_pcie, NOCCFG, val);
|
||||||
usleep_range(20, 30);
|
usleep_range(20, 30);
|
||||||
|
|
||||||
regmap_read(artpec6_pcie->regmap, PCIECFG, &val);
|
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
|
||||||
val |= PCIECFG_PCLK_ENABLE | PCIECFG_PLL_ENABLE;
|
val |= PCIECFG_PCLK_ENABLE | PCIECFG_PLL_ENABLE;
|
||||||
regmap_write(artpec6_pcie->regmap, PCIECFG, val);
|
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
|
||||||
usleep_range(6000, 7000);
|
usleep_range(6000, 7000);
|
||||||
|
|
||||||
regmap_read(artpec6_pcie->regmap, NOCCFG, &val);
|
val = artpec6_pcie_readl(artpec6_pcie, NOCCFG);
|
||||||
val &= ~NOCCFG_POWER_PCIE_IDLEREQ;
|
val &= ~NOCCFG_POWER_PCIE_IDLEREQ;
|
||||||
regmap_write(artpec6_pcie->regmap, NOCCFG, val);
|
artpec6_pcie_writel(artpec6_pcie, NOCCFG, val);
|
||||||
|
|
||||||
retries = 50;
|
retries = 50;
|
||||||
do {
|
do {
|
||||||
usleep_range(1000, 2000);
|
usleep_range(1000, 2000);
|
||||||
regmap_read(artpec6_pcie->regmap, NOCCFG, &val);
|
val = artpec6_pcie_readl(artpec6_pcie, NOCCFG);
|
||||||
retries--;
|
retries--;
|
||||||
} while (retries &&
|
} while (retries &&
|
||||||
(val & (NOCCFG_POWER_PCIE_IDLEACK | NOCCFG_POWER_PCIE_IDLE)));
|
(val & (NOCCFG_POWER_PCIE_IDLEACK | NOCCFG_POWER_PCIE_IDLE)));
|
||||||
|
@ -117,9 +130,9 @@ static int artpec6_pcie_establish_link(struct pcie_port *pp)
|
||||||
} while (retries && !(val & PHY_COSPLLLOCK));
|
} while (retries && !(val & PHY_COSPLLLOCK));
|
||||||
|
|
||||||
/* Take DW core out of reset */
|
/* Take DW core out of reset */
|
||||||
regmap_read(artpec6_pcie->regmap, PCIECFG, &val);
|
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
|
||||||
val &= ~PCIECFG_CORE_RESET_REQ;
|
val &= ~PCIECFG_CORE_RESET_REQ;
|
||||||
regmap_write(artpec6_pcie->regmap, PCIECFG, val);
|
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
|
||||||
usleep_range(100, 200);
|
usleep_range(100, 200);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -137,9 +150,9 @@ static int artpec6_pcie_establish_link(struct pcie_port *pp)
|
||||||
dw_pcie_setup_rc(pp);
|
dw_pcie_setup_rc(pp);
|
||||||
|
|
||||||
/* assert LTSSM enable */
|
/* assert LTSSM enable */
|
||||||
regmap_read(artpec6_pcie->regmap, PCIECFG, &val);
|
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
|
||||||
val |= PCIECFG_LTSSM_ENABLE;
|
val |= PCIECFG_LTSSM_ENABLE;
|
||||||
regmap_write(artpec6_pcie->regmap, PCIECFG, val);
|
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
|
||||||
|
|
||||||
/* check if the link is up or not */
|
/* check if the link is up or not */
|
||||||
if (!dw_pcie_wait_for_link(pp))
|
if (!dw_pcie_wait_for_link(pp))
|
||||||
|
|
Загрузка…
Ссылка в новой задаче