1*57e920b9SAlex Elder // SPDX-License-Identifier: GPL-2.0 2*57e920b9SAlex Elder /* 3*57e920b9SAlex Elder * SpacemiT K1 PCIe and PCIe/USB 3 combo PHY driver 4*57e920b9SAlex Elder * 5*57e920b9SAlex Elder * Copyright (C) 2025 by RISCstar Solutions Corporation. All rights reserved. 6*57e920b9SAlex Elder */ 7*57e920b9SAlex Elder 8*57e920b9SAlex Elder #include <linux/bitfield.h> 9*57e920b9SAlex Elder #include <linux/clk.h> 10*57e920b9SAlex Elder #include <linux/clk-provider.h> 11*57e920b9SAlex Elder #include <linux/iopoll.h> 12*57e920b9SAlex Elder #include <linux/kernel.h> 13*57e920b9SAlex Elder #include <linux/mfd/syscon.h> 14*57e920b9SAlex Elder #include <linux/module.h> 15*57e920b9SAlex Elder #include <linux/phy/phy.h> 16*57e920b9SAlex Elder #include <linux/platform_device.h> 17*57e920b9SAlex Elder #include <linux/regmap.h> 18*57e920b9SAlex Elder #include <linux/reset.h> 19*57e920b9SAlex Elder 20*57e920b9SAlex Elder #include <dt-bindings/phy/phy.h> 21*57e920b9SAlex Elder 22*57e920b9SAlex Elder /* 23*57e920b9SAlex Elder * Three PCIe ports are supported in the SpacemiT K1 SoC, and this driver 24*57e920b9SAlex Elder * supports their PHYs. 25*57e920b9SAlex Elder * 26*57e920b9SAlex Elder * The PHY for PCIe port A is different from the PHYs for ports B and C: 27*57e920b9SAlex Elder * - It has one lane, while ports B and C have two 28*57e920b9SAlex Elder * - It is a combo PHY can be used for PCIe or USB 3 29*57e920b9SAlex Elder * - It can automatically calibrate PCIe TX and RX termination settings 30*57e920b9SAlex Elder * 31*57e920b9SAlex Elder * The PHY functionality for PCIe ports B and C is identical: 32*57e920b9SAlex Elder * - They have two PCIe lanes (but can be restricted to 1 via device tree) 33*57e920b9SAlex Elder * - They are used for PCIe only 34*57e920b9SAlex Elder * - They are configured using TX and RX values computed for port A 35*57e920b9SAlex Elder * 36*57e920b9SAlex Elder * A given board is designed to use the combo PHY for either PCIe or USB 3. 37*57e920b9SAlex Elder * Whether the combo PHY is configured for PCIe or USB 3 is specified in 38*57e920b9SAlex Elder * device tree using a phandle plus an argument. The argument indicates 39*57e920b9SAlex Elder * the type (either PHY_TYPE_PCIE or PHY_TYPE_USB3). 40*57e920b9SAlex Elder * 41*57e920b9SAlex Elder * Each PHY has a reset that it gets and deasserts during initialization. 42*57e920b9SAlex Elder * Each depends also on other clocks and resets provided by the controller 43*57e920b9SAlex Elder * hardware (PCIe or USB) it is associated with. The controller drivers 44*57e920b9SAlex Elder * are required to enable any clocks and de-assert any resets that affect 45*57e920b9SAlex Elder * PHY operation. In addition each PHY implements an internal PLL, driven 46*57e920b9SAlex Elder * by an external (24 MHz) oscillator. 47*57e920b9SAlex Elder * 48*57e920b9SAlex Elder * PCIe PHYs must be programmed with RX and TX calibration values. The 49*57e920b9SAlex Elder * combo PHY is the only one that can determine these values. They are 50*57e920b9SAlex Elder * determined by temporarily enabling the combo PHY in PCIe mode at probe 51*57e920b9SAlex Elder * time (if necessary). This calibration only needs to be done once, and 52*57e920b9SAlex Elder * when it has completed the TX and RX values are saved. 53*57e920b9SAlex Elder * 54*57e920b9SAlex Elder * To allow the combo PHY to be enabled for calibration, the resets and 55*57e920b9SAlex Elder * clocks it uses in PCIe mode must be supplied. 56*57e920b9SAlex Elder */ 57*57e920b9SAlex Elder 58*57e920b9SAlex Elder struct k1_pcie_phy { 59*57e920b9SAlex Elder struct device *dev; /* PHY provider device */ 60*57e920b9SAlex Elder struct phy *phy; 61*57e920b9SAlex Elder void __iomem *regs; 62*57e920b9SAlex Elder u32 pcie_lanes; /* Max (1 or 2) unless limited by DT */ 63*57e920b9SAlex Elder struct clk *pll; 64*57e920b9SAlex Elder struct clk_hw pll_hw; /* Private PLL clock */ 65*57e920b9SAlex Elder 66*57e920b9SAlex Elder /* The remaining fields are only used for the combo PHY */ 67*57e920b9SAlex Elder u32 type; /* PHY_TYPE_PCIE or PHY_TYPE_USB3 */ 68*57e920b9SAlex Elder struct regmap *pmu; /* MMIO regmap (no errors) */ 69*57e920b9SAlex Elder }; 70*57e920b9SAlex Elder 71*57e920b9SAlex Elder #define CALIBRATION_TIMEOUT 500000 /* For combo PHY (usec) */ 72*57e920b9SAlex Elder #define PLL_TIMEOUT 500000 /* For PHY PLL lock (usec) */ 73*57e920b9SAlex Elder #define POLL_DELAY 500 /* Time between polls (usec) */ 74*57e920b9SAlex Elder 75*57e920b9SAlex Elder /* Selecting the combo PHY operating mode requires APMU regmap access */ 76*57e920b9SAlex Elder #define SYSCON_APMU "spacemit,apmu" 77*57e920b9SAlex Elder 78*57e920b9SAlex Elder /* PMU space, for selecting between PCIe and USB 3 mode (combo PHY only) */ 79*57e920b9SAlex Elder 80*57e920b9SAlex Elder #define PMUA_USB_PHY_CTRL0 0x0110 81*57e920b9SAlex Elder #define COMBO_PHY_SEL BIT(3) /* 0: PCIe; 1: USB 3 */ 82*57e920b9SAlex Elder 83*57e920b9SAlex Elder #define PCIE_CLK_RES_CTRL 0x03cc 84*57e920b9SAlex Elder #define PCIE_APP_HOLD_PHY_RST BIT(30) 85*57e920b9SAlex Elder 86*57e920b9SAlex Elder /* PHY register space */ 87*57e920b9SAlex Elder 88*57e920b9SAlex Elder /* Offset between lane 0 and lane 1 registers when there are two */ 89*57e920b9SAlex Elder #define PHY_LANE_OFFSET 0x0400 90*57e920b9SAlex Elder 91*57e920b9SAlex Elder /* PHY PLL configuration */ 92*57e920b9SAlex Elder #define PCIE_PU_ADDR_CLK_CFG 0x0008 93*57e920b9SAlex Elder #define PLL_READY BIT(0) /* read-only */ 94*57e920b9SAlex Elder #define CFG_INTERNAL_TIMER_ADJ GENMASK(10, 7) 95*57e920b9SAlex Elder #define TIMER_ADJ_USB 0x2 96*57e920b9SAlex Elder #define TIMER_ADJ_PCIE 0x6 97*57e920b9SAlex Elder #define CFG_SW_PHY_INIT_DONE BIT(11) /* We set after PLL config */ 98*57e920b9SAlex Elder 99*57e920b9SAlex Elder #define PCIE_RC_DONE_STATUS 0x0018 100*57e920b9SAlex Elder #define CFG_FORCE_RCV_RETRY BIT(10) /* Used for PCIe */ 101*57e920b9SAlex Elder 102*57e920b9SAlex Elder /* PCIe PHY lane calibration; assumes 24MHz input clock */ 103*57e920b9SAlex Elder #define PCIE_RC_CAL_REG2 0x0020 104*57e920b9SAlex Elder #define RC_CAL_TOGGLE BIT(22) 105*57e920b9SAlex Elder #define CLKSEL GENMASK(31, 29) 106*57e920b9SAlex Elder #define CLKSEL_24M 0x3 107*57e920b9SAlex Elder 108*57e920b9SAlex Elder /* Additional PHY PLL configuration (USB 3 and PCIe) */ 109*57e920b9SAlex Elder #define PCIE_PU_PLL_1 0x0048 110*57e920b9SAlex Elder #define REF_100_WSSC BIT(12) /* 1: input is 100MHz, SSC */ 111*57e920b9SAlex Elder #define FREF_SEL GENMASK(15, 13) 112*57e920b9SAlex Elder #define FREF_24M 0x1 113*57e920b9SAlex Elder #define SSC_DEP_SEL GENMASK(19, 16) 114*57e920b9SAlex Elder #define SSC_DEP_NONE 0x0 115*57e920b9SAlex Elder #define SSC_DEP_5000PPM 0xa 116*57e920b9SAlex Elder 117*57e920b9SAlex Elder /* PCIe PHY configuration */ 118*57e920b9SAlex Elder #define PCIE_PU_PLL_2 0x004c 119*57e920b9SAlex Elder #define GEN_REF100 BIT(4) /* 1: generate 100MHz clk */ 120*57e920b9SAlex Elder 121*57e920b9SAlex Elder #define PCIE_RX_REG1 0x0050 122*57e920b9SAlex Elder #define EN_RTERM BIT(3) 123*57e920b9SAlex Elder #define AFE_RTERM_REG GENMASK(11, 8) 124*57e920b9SAlex Elder 125*57e920b9SAlex Elder #define PCIE_RX_REG2 0x0054 126*57e920b9SAlex Elder #define RX_RTERM_SEL BIT(5) /* 0: use AFE_RTERM_REG value */ 127*57e920b9SAlex Elder 128*57e920b9SAlex Elder #define PCIE_LTSSM_DIS_ENTRY 0x005c 129*57e920b9SAlex Elder #define CFG_REFCLK_MODE GENMASK(9, 8) 130*57e920b9SAlex Elder #define RFCLK_MODE_DRIVER 0x1 131*57e920b9SAlex Elder #define OVRD_REFCLK_MODE BIT(10) /* 1: use CFG_RFCLK_MODE */ 132*57e920b9SAlex Elder 133*57e920b9SAlex Elder #define PCIE_TX_REG1 0x0064 134*57e920b9SAlex Elder #define TX_RTERM_REG GENMASK(15, 12) 135*57e920b9SAlex Elder #define TX_RTERM_SEL BIT(25) /* 1: use TX_RTERM_REG */ 136*57e920b9SAlex Elder 137*57e920b9SAlex Elder /* Zeroed for the combo PHY operating in USB mode */ 138*57e920b9SAlex Elder #define USB3_TEST_CTRL 0x0068 139*57e920b9SAlex Elder 140*57e920b9SAlex Elder /* PHY calibration values, determined by the combo PHY at probe time */ 141*57e920b9SAlex Elder #define PCIE_RCAL_RESULT 0x0084 /* Port A PHY only */ 142*57e920b9SAlex Elder #define RTERM_VALUE_RX GENMASK(3, 0) 143*57e920b9SAlex Elder #define RTERM_VALUE_TX GENMASK(7, 4) 144*57e920b9SAlex Elder #define R_TUNE_DONE BIT(10) 145*57e920b9SAlex Elder 146*57e920b9SAlex Elder static u32 k1_phy_rterm = ~0; /* Invalid initial value */ 147*57e920b9SAlex Elder 148*57e920b9SAlex Elder /* Save the RX and TX receiver termination values */ 149*57e920b9SAlex Elder static void k1_phy_rterm_set(u32 val) 150*57e920b9SAlex Elder { 151*57e920b9SAlex Elder k1_phy_rterm = val & (RTERM_VALUE_RX | RTERM_VALUE_TX); 152*57e920b9SAlex Elder } 153*57e920b9SAlex Elder 154*57e920b9SAlex Elder static bool k1_phy_rterm_valid(void) 155*57e920b9SAlex Elder { 156*57e920b9SAlex Elder /* Valid if no bits outside those we care about are set */ 157*57e920b9SAlex Elder return !(k1_phy_rterm & ~(RTERM_VALUE_RX | RTERM_VALUE_TX)); 158*57e920b9SAlex Elder } 159*57e920b9SAlex Elder 160*57e920b9SAlex Elder static u32 k1_phy_rterm_rx(void) 161*57e920b9SAlex Elder { 162*57e920b9SAlex Elder return FIELD_GET(RTERM_VALUE_RX, k1_phy_rterm); 163*57e920b9SAlex Elder } 164*57e920b9SAlex Elder 165*57e920b9SAlex Elder static u32 k1_phy_rterm_tx(void) 166*57e920b9SAlex Elder { 167*57e920b9SAlex Elder return FIELD_GET(RTERM_VALUE_TX, k1_phy_rterm); 168*57e920b9SAlex Elder } 169*57e920b9SAlex Elder 170*57e920b9SAlex Elder /* Only the combo PHY has a PMU pointer defined */ 171*57e920b9SAlex Elder static bool k1_phy_port_a(struct k1_pcie_phy *k1_phy) 172*57e920b9SAlex Elder { 173*57e920b9SAlex Elder return !!k1_phy->pmu; 174*57e920b9SAlex Elder } 175*57e920b9SAlex Elder 176*57e920b9SAlex Elder /* The PLL clocks are driven by the external oscillator */ 177*57e920b9SAlex Elder static const struct clk_parent_data k1_pcie_phy_data[] = { 178*57e920b9SAlex Elder { .fw_name = "refclk", }, 179*57e920b9SAlex Elder }; 180*57e920b9SAlex Elder 181*57e920b9SAlex Elder static struct k1_pcie_phy *clk_hw_to_k1_phy(struct clk_hw *clk_hw) 182*57e920b9SAlex Elder { 183*57e920b9SAlex Elder return container_of(clk_hw, struct k1_pcie_phy, pll_hw); 184*57e920b9SAlex Elder } 185*57e920b9SAlex Elder 186*57e920b9SAlex Elder /* USB mode only works on the combo PHY, which has only one lane */ 187*57e920b9SAlex Elder static void k1_pcie_phy_pll_prepare_usb(struct k1_pcie_phy *k1_phy) 188*57e920b9SAlex Elder { 189*57e920b9SAlex Elder void __iomem *regs = k1_phy->regs; 190*57e920b9SAlex Elder u32 val; 191*57e920b9SAlex Elder 192*57e920b9SAlex Elder val = readl(regs + PCIE_PU_ADDR_CLK_CFG); 193*57e920b9SAlex Elder val &= ~CFG_INTERNAL_TIMER_ADJ; 194*57e920b9SAlex Elder val |= FIELD_PREP(CFG_INTERNAL_TIMER_ADJ, TIMER_ADJ_USB); 195*57e920b9SAlex Elder writel(val, regs + PCIE_PU_ADDR_CLK_CFG); 196*57e920b9SAlex Elder 197*57e920b9SAlex Elder val = readl(regs + PCIE_PU_PLL_1); 198*57e920b9SAlex Elder val &= ~SSC_DEP_SEL; 199*57e920b9SAlex Elder val |= FIELD_PREP(SSC_DEP_SEL, SSC_DEP_5000PPM); 200*57e920b9SAlex Elder writel(val, regs + PCIE_PU_PLL_1); 201*57e920b9SAlex Elder } 202*57e920b9SAlex Elder 203*57e920b9SAlex Elder /* Perform PCIe-specific register updates before starting the PLL clock */ 204*57e920b9SAlex Elder static void k1_pcie_phy_pll_prepare_pcie(struct k1_pcie_phy *k1_phy) 205*57e920b9SAlex Elder { 206*57e920b9SAlex Elder void __iomem *regs = k1_phy->regs; 207*57e920b9SAlex Elder u32 val; 208*57e920b9SAlex Elder u32 i; 209*57e920b9SAlex Elder 210*57e920b9SAlex Elder for (i = 0; i < k1_phy->pcie_lanes; i++) { 211*57e920b9SAlex Elder val = readl(regs + PCIE_PU_ADDR_CLK_CFG); 212*57e920b9SAlex Elder val &= ~CFG_INTERNAL_TIMER_ADJ; 213*57e920b9SAlex Elder val |= FIELD_PREP(CFG_INTERNAL_TIMER_ADJ, TIMER_ADJ_PCIE); 214*57e920b9SAlex Elder writel(val, regs + PCIE_PU_ADDR_CLK_CFG); 215*57e920b9SAlex Elder 216*57e920b9SAlex Elder regs += PHY_LANE_OFFSET; /* Next lane */ 217*57e920b9SAlex Elder } 218*57e920b9SAlex Elder 219*57e920b9SAlex Elder regs = k1_phy->regs; 220*57e920b9SAlex Elder val = readl(regs + PCIE_RC_DONE_STATUS); 221*57e920b9SAlex Elder val |= CFG_FORCE_RCV_RETRY; 222*57e920b9SAlex Elder writel(val, regs + PCIE_RC_DONE_STATUS); 223*57e920b9SAlex Elder 224*57e920b9SAlex Elder val = readl(regs + PCIE_PU_PLL_1); 225*57e920b9SAlex Elder val &= ~SSC_DEP_SEL; 226*57e920b9SAlex Elder val |= FIELD_PREP(SSC_DEP_SEL, SSC_DEP_NONE); 227*57e920b9SAlex Elder writel(val, regs + PCIE_PU_PLL_1); 228*57e920b9SAlex Elder 229*57e920b9SAlex Elder val = readl(regs + PCIE_PU_PLL_2); 230*57e920b9SAlex Elder val |= GEN_REF100; /* Enable 100 MHz PLL output clock */ 231*57e920b9SAlex Elder writel(val, regs + PCIE_PU_PLL_2); 232*57e920b9SAlex Elder } 233*57e920b9SAlex Elder 234*57e920b9SAlex Elder static int k1_pcie_phy_pll_prepare(struct clk_hw *clk_hw) 235*57e920b9SAlex Elder { 236*57e920b9SAlex Elder struct k1_pcie_phy *k1_phy = clk_hw_to_k1_phy(clk_hw); 237*57e920b9SAlex Elder void __iomem *regs = k1_phy->regs; 238*57e920b9SAlex Elder u32 val; 239*57e920b9SAlex Elder u32 i; 240*57e920b9SAlex Elder 241*57e920b9SAlex Elder if (k1_phy_port_a(k1_phy) && k1_phy->type == PHY_TYPE_USB3) 242*57e920b9SAlex Elder k1_pcie_phy_pll_prepare_usb(k1_phy); 243*57e920b9SAlex Elder else 244*57e920b9SAlex Elder k1_pcie_phy_pll_prepare_pcie(k1_phy); 245*57e920b9SAlex Elder 246*57e920b9SAlex Elder /* 247*57e920b9SAlex Elder * Disable 100 MHz input reference with spread-spectrum 248*57e920b9SAlex Elder * clocking and select the 24 MHz clock input frequency 249*57e920b9SAlex Elder */ 250*57e920b9SAlex Elder val = readl(regs + PCIE_PU_PLL_1); 251*57e920b9SAlex Elder val &= ~REF_100_WSSC; 252*57e920b9SAlex Elder val &= ~FREF_SEL; 253*57e920b9SAlex Elder val |= FIELD_PREP(FREF_SEL, FREF_24M); 254*57e920b9SAlex Elder writel(val, regs + PCIE_PU_PLL_1); 255*57e920b9SAlex Elder 256*57e920b9SAlex Elder /* Mark PLL configuration done on all lanes */ 257*57e920b9SAlex Elder for (i = 0; i < k1_phy->pcie_lanes; i++) { 258*57e920b9SAlex Elder val = readl(regs + PCIE_PU_ADDR_CLK_CFG); 259*57e920b9SAlex Elder val |= CFG_SW_PHY_INIT_DONE; 260*57e920b9SAlex Elder writel(val, regs + PCIE_PU_ADDR_CLK_CFG); 261*57e920b9SAlex Elder 262*57e920b9SAlex Elder regs += PHY_LANE_OFFSET; /* Next lane */ 263*57e920b9SAlex Elder } 264*57e920b9SAlex Elder 265*57e920b9SAlex Elder /* 266*57e920b9SAlex Elder * Wait for indication the PHY PLL is locked. Lanes for ports 267*57e920b9SAlex Elder * B and C share a PLL, so it's enough to sample just lane 0. 268*57e920b9SAlex Elder */ 269*57e920b9SAlex Elder return readl_poll_timeout(k1_phy->regs + PCIE_PU_ADDR_CLK_CFG, 270*57e920b9SAlex Elder val, val & PLL_READY, 271*57e920b9SAlex Elder POLL_DELAY, PLL_TIMEOUT); 272*57e920b9SAlex Elder } 273*57e920b9SAlex Elder 274*57e920b9SAlex Elder /* Prepare implies enable, and once enabled, it's always on */ 275*57e920b9SAlex Elder static const struct clk_ops k1_pcie_phy_pll_ops = { 276*57e920b9SAlex Elder .prepare = k1_pcie_phy_pll_prepare, 277*57e920b9SAlex Elder }; 278*57e920b9SAlex Elder 279*57e920b9SAlex Elder /* We represent the PHY PLL as a private clock */ 280*57e920b9SAlex Elder static int k1_pcie_phy_pll_setup(struct k1_pcie_phy *k1_phy) 281*57e920b9SAlex Elder { 282*57e920b9SAlex Elder struct clk_hw *hw = &k1_phy->pll_hw; 283*57e920b9SAlex Elder struct device *dev = k1_phy->dev; 284*57e920b9SAlex Elder struct clk_init_data init = { }; 285*57e920b9SAlex Elder char *name; 286*57e920b9SAlex Elder int ret; 287*57e920b9SAlex Elder 288*57e920b9SAlex Elder name = kasprintf(GFP_KERNEL, "pcie%u_phy_pll", k1_phy->phy->id); 289*57e920b9SAlex Elder if (!name) 290*57e920b9SAlex Elder return -ENOMEM; 291*57e920b9SAlex Elder 292*57e920b9SAlex Elder init.name = name; 293*57e920b9SAlex Elder init.ops = &k1_pcie_phy_pll_ops; 294*57e920b9SAlex Elder init.parent_data = k1_pcie_phy_data; 295*57e920b9SAlex Elder init.num_parents = ARRAY_SIZE(k1_pcie_phy_data); 296*57e920b9SAlex Elder 297*57e920b9SAlex Elder hw->init = &init; 298*57e920b9SAlex Elder 299*57e920b9SAlex Elder ret = devm_clk_hw_register(dev, hw); 300*57e920b9SAlex Elder 301*57e920b9SAlex Elder kfree(name); /* __clk_register() duplicates the name we provide */ 302*57e920b9SAlex Elder 303*57e920b9SAlex Elder if (ret) 304*57e920b9SAlex Elder return ret; 305*57e920b9SAlex Elder 306*57e920b9SAlex Elder k1_phy->pll = devm_clk_hw_get_clk(dev, hw, "pll"); 307*57e920b9SAlex Elder if (IS_ERR(k1_phy->pll)) 308*57e920b9SAlex Elder return PTR_ERR(k1_phy->pll); 309*57e920b9SAlex Elder 310*57e920b9SAlex Elder return 0; 311*57e920b9SAlex Elder } 312*57e920b9SAlex Elder 313*57e920b9SAlex Elder /* Select PCIe or USB 3 mode for the combo PHY. */ 314*57e920b9SAlex Elder static void k1_combo_phy_sel(struct k1_pcie_phy *k1_phy, bool usb) 315*57e920b9SAlex Elder { 316*57e920b9SAlex Elder struct regmap *pmu = k1_phy->pmu; 317*57e920b9SAlex Elder 318*57e920b9SAlex Elder /* Only change it if it's not already in the desired state */ 319*57e920b9SAlex Elder if (!regmap_test_bits(pmu, PMUA_USB_PHY_CTRL0, COMBO_PHY_SEL) == usb) 320*57e920b9SAlex Elder regmap_assign_bits(pmu, PMUA_USB_PHY_CTRL0, COMBO_PHY_SEL, usb); 321*57e920b9SAlex Elder } 322*57e920b9SAlex Elder 323*57e920b9SAlex Elder static void k1_pcie_phy_init_pcie(struct k1_pcie_phy *k1_phy) 324*57e920b9SAlex Elder { 325*57e920b9SAlex Elder u32 rx_rterm = k1_phy_rterm_rx(); 326*57e920b9SAlex Elder u32 tx_rterm = k1_phy_rterm_tx(); 327*57e920b9SAlex Elder void __iomem *regs; 328*57e920b9SAlex Elder u32 val; 329*57e920b9SAlex Elder int i; 330*57e920b9SAlex Elder 331*57e920b9SAlex Elder /* For the combo PHY, set PHY to PCIe mode */ 332*57e920b9SAlex Elder if (k1_phy_port_a(k1_phy)) 333*57e920b9SAlex Elder k1_combo_phy_sel(k1_phy, false); 334*57e920b9SAlex Elder 335*57e920b9SAlex Elder regs = k1_phy->regs; 336*57e920b9SAlex Elder for (i = 0; i < k1_phy->pcie_lanes; i++) { 337*57e920b9SAlex Elder val = readl(regs + PCIE_RX_REG1); 338*57e920b9SAlex Elder 339*57e920b9SAlex Elder /* Set RX analog front-end receiver termination value */ 340*57e920b9SAlex Elder val &= ~AFE_RTERM_REG; 341*57e920b9SAlex Elder val |= FIELD_PREP(AFE_RTERM_REG, rx_rterm); 342*57e920b9SAlex Elder 343*57e920b9SAlex Elder /* And enable refclock receiver termination */ 344*57e920b9SAlex Elder val |= EN_RTERM; 345*57e920b9SAlex Elder writel(val, regs + PCIE_RX_REG1); 346*57e920b9SAlex Elder 347*57e920b9SAlex Elder val = readl(regs + PCIE_RX_REG2); 348*57e920b9SAlex Elder /* Use PCIE_RX_REG1 AFE_RTERM_REG value */ 349*57e920b9SAlex Elder val &= ~RX_RTERM_SEL; 350*57e920b9SAlex Elder writel(val, regs + PCIE_RX_REG2); 351*57e920b9SAlex Elder 352*57e920b9SAlex Elder val = readl(regs + PCIE_TX_REG1); 353*57e920b9SAlex Elder 354*57e920b9SAlex Elder /* Set TX driver termination value */ 355*57e920b9SAlex Elder val &= ~TX_RTERM_REG; 356*57e920b9SAlex Elder val |= FIELD_PREP(TX_RTERM_REG, tx_rterm); 357*57e920b9SAlex Elder 358*57e920b9SAlex Elder /* Use PCIE_TX_REG1 TX_RTERM_REG value */ 359*57e920b9SAlex Elder val |= TX_RTERM_SEL; 360*57e920b9SAlex Elder writel(val, regs + PCIE_TX_REG1); 361*57e920b9SAlex Elder 362*57e920b9SAlex Elder /* Set the input clock to 24 MHz, and clear RC_CAL_TOGGLE */ 363*57e920b9SAlex Elder val = readl(regs + PCIE_RC_CAL_REG2); 364*57e920b9SAlex Elder val &= CLKSEL; 365*57e920b9SAlex Elder val |= FIELD_PREP(CLKSEL, CLKSEL_24M); 366*57e920b9SAlex Elder val &= ~RC_CAL_TOGGLE; 367*57e920b9SAlex Elder writel(val, regs + PCIE_RC_CAL_REG2); 368*57e920b9SAlex Elder 369*57e920b9SAlex Elder /* Now trigger recalibration by setting RC_CAL_TOGGLE again */ 370*57e920b9SAlex Elder val |= RC_CAL_TOGGLE; 371*57e920b9SAlex Elder writel(val, regs + PCIE_RC_CAL_REG2); 372*57e920b9SAlex Elder 373*57e920b9SAlex Elder val = readl(regs + PCIE_LTSSM_DIS_ENTRY); 374*57e920b9SAlex Elder /* Override the reference clock; set to refclk driver mode */ 375*57e920b9SAlex Elder val |= OVRD_REFCLK_MODE; 376*57e920b9SAlex Elder val &= ~CFG_REFCLK_MODE; 377*57e920b9SAlex Elder val |= FIELD_PREP(CFG_REFCLK_MODE, RFCLK_MODE_DRIVER); 378*57e920b9SAlex Elder writel(val, regs + PCIE_LTSSM_DIS_ENTRY); 379*57e920b9SAlex Elder 380*57e920b9SAlex Elder regs += PHY_LANE_OFFSET; /* Next lane */ 381*57e920b9SAlex Elder } 382*57e920b9SAlex Elder } 383*57e920b9SAlex Elder 384*57e920b9SAlex Elder /* Only called for combo PHY */ 385*57e920b9SAlex Elder static void k1_pcie_phy_init_usb(struct k1_pcie_phy *k1_phy) 386*57e920b9SAlex Elder { 387*57e920b9SAlex Elder k1_combo_phy_sel(k1_phy, true); 388*57e920b9SAlex Elder 389*57e920b9SAlex Elder /* We're not doing any testing */ 390*57e920b9SAlex Elder writel(0, k1_phy->regs + USB3_TEST_CTRL); 391*57e920b9SAlex Elder } 392*57e920b9SAlex Elder 393*57e920b9SAlex Elder static int k1_pcie_phy_init(struct phy *phy) 394*57e920b9SAlex Elder { 395*57e920b9SAlex Elder struct k1_pcie_phy *k1_phy = phy_get_drvdata(phy); 396*57e920b9SAlex Elder 397*57e920b9SAlex Elder /* Note: port type is only valid for port A (both checks needed) */ 398*57e920b9SAlex Elder if (k1_phy_port_a(k1_phy) && k1_phy->type == PHY_TYPE_USB3) 399*57e920b9SAlex Elder k1_pcie_phy_init_usb(k1_phy); 400*57e920b9SAlex Elder else 401*57e920b9SAlex Elder k1_pcie_phy_init_pcie(k1_phy); 402*57e920b9SAlex Elder 403*57e920b9SAlex Elder 404*57e920b9SAlex Elder return clk_prepare_enable(k1_phy->pll); 405*57e920b9SAlex Elder } 406*57e920b9SAlex Elder 407*57e920b9SAlex Elder static int k1_pcie_phy_exit(struct phy *phy) 408*57e920b9SAlex Elder { 409*57e920b9SAlex Elder struct k1_pcie_phy *k1_phy = phy_get_drvdata(phy); 410*57e920b9SAlex Elder 411*57e920b9SAlex Elder clk_disable_unprepare(k1_phy->pll); 412*57e920b9SAlex Elder 413*57e920b9SAlex Elder return 0; 414*57e920b9SAlex Elder } 415*57e920b9SAlex Elder 416*57e920b9SAlex Elder static const struct phy_ops k1_pcie_phy_ops = { 417*57e920b9SAlex Elder .init = k1_pcie_phy_init, 418*57e920b9SAlex Elder .exit = k1_pcie_phy_exit, 419*57e920b9SAlex Elder .owner = THIS_MODULE, 420*57e920b9SAlex Elder }; 421*57e920b9SAlex Elder 422*57e920b9SAlex Elder /* 423*57e920b9SAlex Elder * Get values needed for calibrating PHYs operating in PCIe mode. Only 424*57e920b9SAlex Elder * the combo PHY is able to do this, and its calibration values are used 425*57e920b9SAlex Elder * for configuring all PCIe PHYs. 426*57e920b9SAlex Elder * 427*57e920b9SAlex Elder * We always need to de-assert the "global" reset on the combo PHY, 428*57e920b9SAlex Elder * because the USB driver depends on it. If used for PCIe, that driver 429*57e920b9SAlex Elder * will (also) de-assert this, but by leaving it de-asserted for the 430*57e920b9SAlex Elder * combo PHY, the USB driver doesn't have to do this. Note: although 431*57e920b9SAlex Elder * SpacemiT refers to this as the global reset, we name the "phy" reset. 432*57e920b9SAlex Elder * 433*57e920b9SAlex Elder * In addition, we guarantee the APP_HOLD_PHY_RESET bit is clear for the 434*57e920b9SAlex Elder * combo PHY, so the USB driver doesn't have to manage that either. The 435*57e920b9SAlex Elder * PCIe driver is free to change this bit for normal operation. 436*57e920b9SAlex Elder * 437*57e920b9SAlex Elder * Calibration only needs to be done once. It's possible calibration has 438*57e920b9SAlex Elder * already completed (e.g., it might have happened in the boot loader, or 439*57e920b9SAlex Elder * -EPROBE_DEFER might result in this function being called again). So we 440*57e920b9SAlex Elder * check that early too, to avoid doing it more than once. 441*57e920b9SAlex Elder * 442*57e920b9SAlex Elder * Otherwise we temporarily power up the PHY using the PCIe app clocks 443*57e920b9SAlex Elder * and resets, wait for the hardware to indicate calibration is done, 444*57e920b9SAlex Elder * grab the value, then shut the PHY down again. 445*57e920b9SAlex Elder */ 446*57e920b9SAlex Elder static int k1_pcie_combo_phy_calibrate(struct k1_pcie_phy *k1_phy) 447*57e920b9SAlex Elder { 448*57e920b9SAlex Elder struct reset_control_bulk_data resets[] = { 449*57e920b9SAlex Elder { .id = "dbi", }, 450*57e920b9SAlex Elder { .id = "mstr", }, 451*57e920b9SAlex Elder { .id = "slv", }, 452*57e920b9SAlex Elder }; 453*57e920b9SAlex Elder struct clk_bulk_data clocks[] = { 454*57e920b9SAlex Elder { .id = "dbi", }, 455*57e920b9SAlex Elder { .id = "mstr", }, 456*57e920b9SAlex Elder { .id = "slv", }, 457*57e920b9SAlex Elder }; 458*57e920b9SAlex Elder struct device *dev = k1_phy->dev; 459*57e920b9SAlex Elder int ret = 0; 460*57e920b9SAlex Elder int val; 461*57e920b9SAlex Elder 462*57e920b9SAlex Elder /* Nothing to do if we already set the receiver termination value */ 463*57e920b9SAlex Elder if (k1_phy_rterm_valid()) 464*57e920b9SAlex Elder return 0; 465*57e920b9SAlex Elder 466*57e920b9SAlex Elder /* 467*57e920b9SAlex Elder * We also guarantee the APP_HOLD_PHY_RESET bit is clear. We can 468*57e920b9SAlex Elder * leave this bit clear even if an error happens below. 469*57e920b9SAlex Elder */ 470*57e920b9SAlex Elder regmap_assign_bits(k1_phy->pmu, PCIE_CLK_RES_CTRL, 471*57e920b9SAlex Elder PCIE_APP_HOLD_PHY_RST, false); 472*57e920b9SAlex Elder 473*57e920b9SAlex Elder /* If the calibration already completed (e.g. by U-Boot), we're done */ 474*57e920b9SAlex Elder val = readl(k1_phy->regs + PCIE_RCAL_RESULT); 475*57e920b9SAlex Elder if (val & R_TUNE_DONE) 476*57e920b9SAlex Elder goto out_tune_done; 477*57e920b9SAlex Elder 478*57e920b9SAlex Elder /* Put the PHY into PCIe mode */ 479*57e920b9SAlex Elder k1_combo_phy_sel(k1_phy, false); 480*57e920b9SAlex Elder 481*57e920b9SAlex Elder /* Get and enable the PCIe app clocks */ 482*57e920b9SAlex Elder ret = clk_bulk_get(dev, ARRAY_SIZE(clocks), clocks); 483*57e920b9SAlex Elder if (ret < 0) 484*57e920b9SAlex Elder goto out_tune_done; 485*57e920b9SAlex Elder ret = clk_bulk_prepare_enable(ARRAY_SIZE(clocks), clocks); 486*57e920b9SAlex Elder if (ret) 487*57e920b9SAlex Elder goto out_put_clocks; 488*57e920b9SAlex Elder 489*57e920b9SAlex Elder /* Get the PCIe application resets (not the PHY reset) */ 490*57e920b9SAlex Elder ret = reset_control_bulk_get_shared(dev, ARRAY_SIZE(resets), resets); 491*57e920b9SAlex Elder if (ret) 492*57e920b9SAlex Elder goto out_disable_clocks; 493*57e920b9SAlex Elder 494*57e920b9SAlex Elder /* De-assert the PCIe application resets */ 495*57e920b9SAlex Elder ret = reset_control_bulk_deassert(ARRAY_SIZE(resets), resets); 496*57e920b9SAlex Elder if (ret) 497*57e920b9SAlex Elder goto out_put_resets; 498*57e920b9SAlex Elder 499*57e920b9SAlex Elder /* 500*57e920b9SAlex Elder * This is the core activity here. Wait for the hardware to 501*57e920b9SAlex Elder * signal that it has completed calibration/tuning. Once it 502*57e920b9SAlex Elder * has, the register value will contain the values we'll 503*57e920b9SAlex Elder * use to configure PCIe PHYs. 504*57e920b9SAlex Elder */ 505*57e920b9SAlex Elder ret = readl_poll_timeout(k1_phy->regs + PCIE_RCAL_RESULT, 506*57e920b9SAlex Elder val, val & R_TUNE_DONE, 507*57e920b9SAlex Elder POLL_DELAY, CALIBRATION_TIMEOUT); 508*57e920b9SAlex Elder 509*57e920b9SAlex Elder /* Clean up. We're done with the resets and clocks */ 510*57e920b9SAlex Elder reset_control_bulk_assert(ARRAY_SIZE(resets), resets); 511*57e920b9SAlex Elder out_put_resets: 512*57e920b9SAlex Elder reset_control_bulk_put(ARRAY_SIZE(resets), resets); 513*57e920b9SAlex Elder out_disable_clocks: 514*57e920b9SAlex Elder clk_bulk_disable_unprepare(ARRAY_SIZE(clocks), clocks); 515*57e920b9SAlex Elder out_put_clocks: 516*57e920b9SAlex Elder clk_bulk_put(ARRAY_SIZE(clocks), clocks); 517*57e920b9SAlex Elder out_tune_done: 518*57e920b9SAlex Elder /* If we got the value without timing out, set k1_phy_rterm */ 519*57e920b9SAlex Elder if (!ret) 520*57e920b9SAlex Elder k1_phy_rterm_set(val); 521*57e920b9SAlex Elder 522*57e920b9SAlex Elder return ret; 523*57e920b9SAlex Elder } 524*57e920b9SAlex Elder 525*57e920b9SAlex Elder static struct phy * 526*57e920b9SAlex Elder k1_pcie_combo_phy_xlate(struct device *dev, const struct of_phandle_args *args) 527*57e920b9SAlex Elder { 528*57e920b9SAlex Elder struct k1_pcie_phy *k1_phy = dev_get_drvdata(dev); 529*57e920b9SAlex Elder u32 type; 530*57e920b9SAlex Elder 531*57e920b9SAlex Elder /* The argument specifying the PHY mode is required */ 532*57e920b9SAlex Elder if (args->args_count != 1) 533*57e920b9SAlex Elder return ERR_PTR(-EINVAL); 534*57e920b9SAlex Elder 535*57e920b9SAlex Elder /* We only support PCIe and USB 3 mode */ 536*57e920b9SAlex Elder type = args->args[0]; 537*57e920b9SAlex Elder if (type != PHY_TYPE_PCIE && type != PHY_TYPE_USB3) 538*57e920b9SAlex Elder return ERR_PTR(-EINVAL); 539*57e920b9SAlex Elder 540*57e920b9SAlex Elder /* This PHY can only be used once */ 541*57e920b9SAlex Elder if (k1_phy->type != PHY_NONE) 542*57e920b9SAlex Elder return ERR_PTR(-EBUSY); 543*57e920b9SAlex Elder 544*57e920b9SAlex Elder k1_phy->type = type; 545*57e920b9SAlex Elder 546*57e920b9SAlex Elder return k1_phy->phy; 547*57e920b9SAlex Elder } 548*57e920b9SAlex Elder 549*57e920b9SAlex Elder /* Use the maximum number of PCIe lanes unless limited by device tree */ 550*57e920b9SAlex Elder static u32 k1_pcie_num_lanes(struct k1_pcie_phy *k1_phy, bool port_a) 551*57e920b9SAlex Elder { 552*57e920b9SAlex Elder struct device *dev = k1_phy->dev; 553*57e920b9SAlex Elder u32 count = 0; 554*57e920b9SAlex Elder u32 max; 555*57e920b9SAlex Elder int ret; 556*57e920b9SAlex Elder 557*57e920b9SAlex Elder ret = of_property_read_u32(dev_of_node(dev), "num-lanes", &count); 558*57e920b9SAlex Elder if (count == 1) 559*57e920b9SAlex Elder return 1; 560*57e920b9SAlex Elder 561*57e920b9SAlex Elder if (count == 2 && !port_a) 562*57e920b9SAlex Elder return 2; 563*57e920b9SAlex Elder 564*57e920b9SAlex Elder max = port_a ? 1 : 2; 565*57e920b9SAlex Elder if (ret != -EINVAL) 566*57e920b9SAlex Elder dev_warn(dev, "bad lane count %u for port; using %u\n", 567*57e920b9SAlex Elder count, max); 568*57e920b9SAlex Elder 569*57e920b9SAlex Elder return max; 570*57e920b9SAlex Elder } 571*57e920b9SAlex Elder 572*57e920b9SAlex Elder static int k1_pcie_combo_phy_probe(struct k1_pcie_phy *k1_phy) 573*57e920b9SAlex Elder { 574*57e920b9SAlex Elder struct device *dev = k1_phy->dev; 575*57e920b9SAlex Elder struct regmap *regmap; 576*57e920b9SAlex Elder int ret; 577*57e920b9SAlex Elder 578*57e920b9SAlex Elder /* Setting the PHY mode requires access to the PMU regmap */ 579*57e920b9SAlex Elder regmap = syscon_regmap_lookup_by_phandle(dev_of_node(dev), SYSCON_APMU); 580*57e920b9SAlex Elder if (IS_ERR(regmap)) 581*57e920b9SAlex Elder return dev_err_probe(dev, PTR_ERR(regmap), "failed to get PMU\n"); 582*57e920b9SAlex Elder k1_phy->pmu = regmap; 583*57e920b9SAlex Elder 584*57e920b9SAlex Elder ret = k1_pcie_combo_phy_calibrate(k1_phy); 585*57e920b9SAlex Elder if (ret) 586*57e920b9SAlex Elder return dev_err_probe(dev, ret, "calibration failed\n"); 587*57e920b9SAlex Elder 588*57e920b9SAlex Elder /* Needed by k1_pcie_combo_phy_xlate(), which also sets k1_phy->type */ 589*57e920b9SAlex Elder dev_set_drvdata(dev, k1_phy); 590*57e920b9SAlex Elder 591*57e920b9SAlex Elder return 0; 592*57e920b9SAlex Elder } 593*57e920b9SAlex Elder 594*57e920b9SAlex Elder static int k1_pcie_phy_probe(struct platform_device *pdev) 595*57e920b9SAlex Elder { 596*57e920b9SAlex Elder struct phy *(*xlate)(struct device *dev, 597*57e920b9SAlex Elder const struct of_phandle_args *args); 598*57e920b9SAlex Elder struct device *dev = &pdev->dev; 599*57e920b9SAlex Elder struct reset_control *phy_reset; 600*57e920b9SAlex Elder struct phy_provider *provider; 601*57e920b9SAlex Elder struct k1_pcie_phy *k1_phy; 602*57e920b9SAlex Elder bool probing_port_a; 603*57e920b9SAlex Elder int ret; 604*57e920b9SAlex Elder 605*57e920b9SAlex Elder xlate = of_device_get_match_data(dev); 606*57e920b9SAlex Elder probing_port_a = xlate == k1_pcie_combo_phy_xlate; 607*57e920b9SAlex Elder 608*57e920b9SAlex Elder /* Only the combo PHY can calibrate, so it must probe first */ 609*57e920b9SAlex Elder if (!k1_phy_rterm_valid() && !probing_port_a) 610*57e920b9SAlex Elder return -EPROBE_DEFER; 611*57e920b9SAlex Elder 612*57e920b9SAlex Elder k1_phy = devm_kzalloc(dev, sizeof(*k1_phy), GFP_KERNEL); 613*57e920b9SAlex Elder if (!k1_phy) 614*57e920b9SAlex Elder return -ENOMEM; 615*57e920b9SAlex Elder k1_phy->dev = dev; 616*57e920b9SAlex Elder 617*57e920b9SAlex Elder k1_phy->regs = devm_platform_ioremap_resource(pdev, 0); 618*57e920b9SAlex Elder if (IS_ERR(k1_phy->regs)) 619*57e920b9SAlex Elder return dev_err_probe(dev, PTR_ERR(k1_phy->regs), 620*57e920b9SAlex Elder "error mapping registers\n"); 621*57e920b9SAlex Elder 622*57e920b9SAlex Elder /* De-assert the PHY (global) reset and leave it that way */ 623*57e920b9SAlex Elder phy_reset = devm_reset_control_get_exclusive_deasserted(dev, "phy"); 624*57e920b9SAlex Elder if (IS_ERR(phy_reset)) 625*57e920b9SAlex Elder return PTR_ERR(phy_reset); 626*57e920b9SAlex Elder 627*57e920b9SAlex Elder if (probing_port_a) { 628*57e920b9SAlex Elder ret = k1_pcie_combo_phy_probe(k1_phy); 629*57e920b9SAlex Elder if (ret) 630*57e920b9SAlex Elder return dev_err_probe(dev, ret, 631*57e920b9SAlex Elder "error probing combo phy\n"); 632*57e920b9SAlex Elder } 633*57e920b9SAlex Elder 634*57e920b9SAlex Elder k1_phy->pcie_lanes = k1_pcie_num_lanes(k1_phy, probing_port_a); 635*57e920b9SAlex Elder 636*57e920b9SAlex Elder k1_phy->phy = devm_phy_create(dev, NULL, &k1_pcie_phy_ops); 637*57e920b9SAlex Elder if (IS_ERR(k1_phy->phy)) 638*57e920b9SAlex Elder return dev_err_probe(dev, PTR_ERR(k1_phy->phy), 639*57e920b9SAlex Elder "error creating phy\n"); 640*57e920b9SAlex Elder phy_set_drvdata(k1_phy->phy, k1_phy); 641*57e920b9SAlex Elder 642*57e920b9SAlex Elder ret = k1_pcie_phy_pll_setup(k1_phy); 643*57e920b9SAlex Elder if (ret) 644*57e920b9SAlex Elder return dev_err_probe(dev, ret, "error initializing clock\n"); 645*57e920b9SAlex Elder 646*57e920b9SAlex Elder provider = devm_of_phy_provider_register(dev, xlate); 647*57e920b9SAlex Elder if (IS_ERR(provider)) 648*57e920b9SAlex Elder return dev_err_probe(dev, PTR_ERR(provider), 649*57e920b9SAlex Elder "error registering provider\n"); 650*57e920b9SAlex Elder return 0; 651*57e920b9SAlex Elder } 652*57e920b9SAlex Elder 653*57e920b9SAlex Elder static const struct of_device_id k1_pcie_phy_of_match[] = { 654*57e920b9SAlex Elder { .compatible = "spacemit,k1-combo-phy", k1_pcie_combo_phy_xlate, }, 655*57e920b9SAlex Elder { .compatible = "spacemit,k1-pcie-phy", of_phy_simple_xlate, }, 656*57e920b9SAlex Elder { }, 657*57e920b9SAlex Elder }; 658*57e920b9SAlex Elder MODULE_DEVICE_TABLE(of, k1_pcie_phy_of_match); 659*57e920b9SAlex Elder 660*57e920b9SAlex Elder static struct platform_driver k1_pcie_phy_driver = { 661*57e920b9SAlex Elder .probe = k1_pcie_phy_probe, 662*57e920b9SAlex Elder .driver = { 663*57e920b9SAlex Elder .of_match_table = k1_pcie_phy_of_match, 664*57e920b9SAlex Elder .name = "spacemit-k1-pcie-phy", 665*57e920b9SAlex Elder } 666*57e920b9SAlex Elder }; 667*57e920b9SAlex Elder module_platform_driver(k1_pcie_phy_driver); 668*57e920b9SAlex Elder 669*57e920b9SAlex Elder MODULE_DESCRIPTION("SpacemiT K1 PCIe and USB 3 PHY driver"); 670*57e920b9SAlex Elder MODULE_LICENSE("GPL"); 671