Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

phy: cadence-torrent: Add USXGMII(156.25MHz) + SGMII/QSGMII(100MHz) multilink configuration

Add register sequences for USXGMII(156.25MHz) + SGMII/QSGMII(100MHz)
multilink configuration. USXGMII uses PLL0 and SGMII/QSGMII uses PLL1.

Signed-off-by: Swapnil Jakhade <sjakhade@cadence.com>
Reviewed-by: Roger Quadros <rogerq@kernel.org>
Link: https://lore.kernel.org/r/20240104133013.2911035-4-sjakhade@cadence.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>

authored by

Swapnil Jakhade and committed by
Vinod Koul
c8369091 b426146a

+101
+101
drivers/phy/cadence/phy-cadence-torrent.c
··· 3106 3106 .num_regs = ARRAY_SIZE(dp_usb_xcvr_diag_ln_regs), 3107 3107 }; 3108 3108 3109 + /* USXGMII and SGMII/QSGMII link configuration */ 3110 + static struct cdns_reg_pairs usxgmii_sgmii_link_cmn_regs[] = { 3111 + {0x0002, PHY_PLL_CFG}, 3112 + {0x0400, CMN_PDIAG_PLL0_CLK_SEL_M0}, 3113 + {0x0601, CMN_PDIAG_PLL1_CLK_SEL_M0} 3114 + }; 3115 + 3116 + static struct cdns_reg_pairs usxgmii_sgmii_xcvr_diag_ln_regs[] = { 3117 + {0x0000, XCVR_DIAG_HSCLK_SEL}, 3118 + {0x0001, XCVR_DIAG_HSCLK_DIV}, 3119 + {0x0001, XCVR_DIAG_PLLDRC_CTRL} 3120 + }; 3121 + 3122 + static struct cdns_reg_pairs sgmii_usxgmii_xcvr_diag_ln_regs[] = { 3123 + {0x0111, XCVR_DIAG_HSCLK_SEL}, 3124 + {0x0103, XCVR_DIAG_HSCLK_DIV}, 3125 + {0x0A9B, XCVR_DIAG_PLLDRC_CTRL} 3126 + }; 3127 + 3128 + static struct cdns_torrent_vals usxgmii_sgmii_link_cmn_vals = { 3129 + .reg_pairs = usxgmii_sgmii_link_cmn_regs, 3130 + .num_regs = ARRAY_SIZE(usxgmii_sgmii_link_cmn_regs), 3131 + }; 3132 + 3133 + static struct cdns_torrent_vals usxgmii_sgmii_xcvr_diag_ln_vals = { 3134 + .reg_pairs = usxgmii_sgmii_xcvr_diag_ln_regs, 3135 + .num_regs = ARRAY_SIZE(usxgmii_sgmii_xcvr_diag_ln_regs), 3136 + }; 3137 + 3138 + static struct cdns_torrent_vals sgmii_usxgmii_xcvr_diag_ln_vals = { 3139 + .reg_pairs = sgmii_usxgmii_xcvr_diag_ln_regs, 3140 + .num_regs = ARRAY_SIZE(sgmii_usxgmii_xcvr_diag_ln_regs), 3141 + }; 3142 + 3143 + /* Multilink USXGMII, using PLL0, 156.25 MHz Ref clk, no SSC */ 3144 + static struct cdns_reg_pairs ml_usxgmii_pll0_156_25_no_ssc_cmn_regs[] = { 3145 + {0x0014, CMN_PLL0_DSM_FBH_OVRD_M0}, 3146 + {0x0005, CMN_PLL0_DSM_FBL_OVRD_M0}, 3147 + {0x061B, CMN_PLL0_VCOCAL_INIT_TMR}, 3148 + {0x0019, CMN_PLL0_VCOCAL_ITER_TMR}, 3149 + {0x1354, CMN_PLL0_VCOCAL_REFTIM_START}, 3150 + {0x1354, CMN_PLL0_VCOCAL_PLLCNT_START}, 3151 + {0x0003, CMN_PLL0_VCOCAL_TCTRL}, 3152 + {0x0138, CMN_PLL0_LOCK_REFCNT_START}, 3153 + {0x0138, CMN_PLL0_LOCK_PLLCNT_START} 3154 + }; 3155 + 3156 + static struct cdns_torrent_vals ml_usxgmii_pll0_156_25_no_ssc_cmn_vals = { 3157 + .reg_pairs = ml_usxgmii_pll0_156_25_no_ssc_cmn_regs, 3158 + .num_regs = ARRAY_SIZE(ml_usxgmii_pll0_156_25_no_ssc_cmn_regs), 3159 + }; 3160 + 3161 + /* Multilink SGMII/QSGMII, using PLL1, 100 MHz Ref clk, no SSC */ 3162 + static struct cdns_reg_pairs ml_sgmii_pll1_100_no_ssc_cmn_regs[] = { 3163 + {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0}, 3164 + {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0}, 3165 + {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0}, 3166 + {0x0003, CMN_PLL1_VCOCAL_TCTRL}, 3167 + {0x007F, CMN_TXPUCAL_TUNE}, 3168 + {0x007F, CMN_TXPDCAL_TUNE} 3169 + }; 3170 + 3171 + static struct cdns_torrent_vals ml_sgmii_pll1_100_no_ssc_cmn_vals = { 3172 + .reg_pairs = ml_sgmii_pll1_100_no_ssc_cmn_regs, 3173 + .num_regs = ARRAY_SIZE(ml_sgmii_pll1_100_no_ssc_cmn_regs), 3174 + }; 3175 + 3109 3176 /* PCIe and USXGMII link configuration */ 3110 3177 static struct cdns_reg_pairs pcie_usxgmii_link_cmn_regs[] = { 3111 3178 {0x0003, PHY_PLL_CFG}, ··· 4404 4337 {CDNS_TORRENT_KEY_ANYCLK(TYPE_SGMII, TYPE_NONE), &sl_sgmii_link_cmn_vals}, 4405 4338 {CDNS_TORRENT_KEY_ANYCLK(TYPE_SGMII, TYPE_PCIE), &pcie_sgmii_link_cmn_vals}, 4406 4339 {CDNS_TORRENT_KEY_ANYCLK(TYPE_SGMII, TYPE_USB), &usb_sgmii_link_cmn_vals}, 4340 + {CDNS_TORRENT_KEY_ANYCLK(TYPE_SGMII, TYPE_USXGMII), &usxgmii_sgmii_link_cmn_vals}, 4407 4341 4408 4342 {CDNS_TORRENT_KEY_ANYCLK(TYPE_QSGMII, TYPE_NONE), &sl_sgmii_link_cmn_vals}, 4409 4343 {CDNS_TORRENT_KEY_ANYCLK(TYPE_QSGMII, TYPE_PCIE), &pcie_sgmii_link_cmn_vals}, 4410 4344 {CDNS_TORRENT_KEY_ANYCLK(TYPE_QSGMII, TYPE_USB), &usb_sgmii_link_cmn_vals}, 4345 + {CDNS_TORRENT_KEY_ANYCLK(TYPE_QSGMII, TYPE_USXGMII), &usxgmii_sgmii_link_cmn_vals}, 4411 4346 4412 4347 {CDNS_TORRENT_KEY_ANYCLK(TYPE_USB, TYPE_NONE), &sl_usb_link_cmn_vals}, 4413 4348 {CDNS_TORRENT_KEY_ANYCLK(TYPE_USB, TYPE_PCIE), &pcie_usb_link_cmn_vals}, ··· 4419 4350 4420 4351 {CDNS_TORRENT_KEY_ANYCLK(TYPE_USXGMII, TYPE_NONE), &sl_usxgmii_link_cmn_vals}, 4421 4352 {CDNS_TORRENT_KEY_ANYCLK(TYPE_USXGMII, TYPE_PCIE), &pcie_usxgmii_link_cmn_vals}, 4353 + {CDNS_TORRENT_KEY_ANYCLK(TYPE_USXGMII, TYPE_SGMII), &usxgmii_sgmii_link_cmn_vals}, 4354 + {CDNS_TORRENT_KEY_ANYCLK(TYPE_USXGMII, TYPE_QSGMII), &usxgmii_sgmii_link_cmn_vals}, 4422 4355 }; 4423 4356 4424 4357 static struct cdns_torrent_vals_entry xcvr_diag_vals_entries[] = { ··· 4438 4367 {CDNS_TORRENT_KEY_ANYCLK(TYPE_SGMII, TYPE_NONE), &sl_sgmii_xcvr_diag_ln_vals}, 4439 4368 {CDNS_TORRENT_KEY_ANYCLK(TYPE_SGMII, TYPE_PCIE), &sgmii_pcie_xcvr_diag_ln_vals}, 4440 4369 {CDNS_TORRENT_KEY_ANYCLK(TYPE_SGMII, TYPE_USB), &sgmii_usb_xcvr_diag_ln_vals}, 4370 + {CDNS_TORRENT_KEY_ANYCLK(TYPE_SGMII, TYPE_USXGMII), &sgmii_usxgmii_xcvr_diag_ln_vals}, 4441 4371 4442 4372 {CDNS_TORRENT_KEY_ANYCLK(TYPE_QSGMII, TYPE_NONE), &sl_sgmii_xcvr_diag_ln_vals}, 4443 4373 {CDNS_TORRENT_KEY_ANYCLK(TYPE_QSGMII, TYPE_PCIE), &sgmii_pcie_xcvr_diag_ln_vals}, 4444 4374 {CDNS_TORRENT_KEY_ANYCLK(TYPE_QSGMII, TYPE_USB), &sgmii_usb_xcvr_diag_ln_vals}, 4375 + {CDNS_TORRENT_KEY_ANYCLK(TYPE_QSGMII, TYPE_USXGMII), &sgmii_usxgmii_xcvr_diag_ln_vals}, 4445 4376 4446 4377 {CDNS_TORRENT_KEY_ANYCLK(TYPE_USB, TYPE_NONE), &sl_usb_xcvr_diag_ln_vals}, 4447 4378 {CDNS_TORRENT_KEY_ANYCLK(TYPE_USB, TYPE_PCIE), &usb_pcie_xcvr_diag_ln_vals}, ··· 4453 4380 4454 4381 {CDNS_TORRENT_KEY_ANYCLK(TYPE_USXGMII, TYPE_NONE), &sl_usxgmii_xcvr_diag_ln_vals}, 4455 4382 {CDNS_TORRENT_KEY_ANYCLK(TYPE_USXGMII, TYPE_PCIE), &usxgmii_pcie_xcvr_diag_ln_vals}, 4383 + {CDNS_TORRENT_KEY_ANYCLK(TYPE_USXGMII, TYPE_SGMII), &usxgmii_sgmii_xcvr_diag_ln_vals}, 4384 + {CDNS_TORRENT_KEY_ANYCLK(TYPE_USXGMII, TYPE_QSGMII), &usxgmii_sgmii_xcvr_diag_ln_vals}, 4456 4385 }; 4457 4386 4458 4387 static struct cdns_torrent_vals_entry pcs_cmn_vals_entries[] = { ··· 4534 4459 /* Dual refclk */ 4535 4460 {CDNS_TORRENT_KEY(CLK_100_MHZ, CLK_156_25_MHZ, TYPE_PCIE, TYPE_USXGMII, NO_SSC), NULL}, 4536 4461 4462 + {CDNS_TORRENT_KEY(CLK_100_MHZ, CLK_156_25_MHZ, TYPE_SGMII, TYPE_USXGMII, NO_SSC), &ml_sgmii_pll1_100_no_ssc_cmn_vals}, 4463 + 4464 + {CDNS_TORRENT_KEY(CLK_100_MHZ, CLK_156_25_MHZ, TYPE_QSGMII, TYPE_USXGMII, NO_SSC), &ml_sgmii_pll1_100_no_ssc_cmn_vals}, 4465 + 4537 4466 {CDNS_TORRENT_KEY(CLK_156_25_MHZ, CLK_100_MHZ, TYPE_USXGMII, TYPE_PCIE, NO_SSC), &ml_usxgmii_pll1_156_25_no_ssc_cmn_vals}, 4467 + {CDNS_TORRENT_KEY(CLK_156_25_MHZ, CLK_100_MHZ, TYPE_USXGMII, TYPE_SGMII, NO_SSC), &ml_usxgmii_pll0_156_25_no_ssc_cmn_vals}, 4468 + {CDNS_TORRENT_KEY(CLK_156_25_MHZ, CLK_100_MHZ, TYPE_USXGMII, TYPE_QSGMII, NO_SSC), &ml_usxgmii_pll0_156_25_no_ssc_cmn_vals}, 4538 4469 }; 4539 4470 4540 4471 static struct cdns_torrent_vals_entry cdns_tx_ln_vals_entries[] = { ··· 4612 4531 /* Dual refclk */ 4613 4532 {CDNS_TORRENT_KEY(CLK_100_MHZ, CLK_156_25_MHZ, TYPE_PCIE, TYPE_USXGMII, NO_SSC), NULL}, 4614 4533 4534 + {CDNS_TORRENT_KEY(CLK_100_MHZ, CLK_156_25_MHZ, TYPE_SGMII, TYPE_USXGMII, NO_SSC), &sgmii_100_no_ssc_tx_ln_vals}, 4535 + 4536 + {CDNS_TORRENT_KEY(CLK_100_MHZ, CLK_156_25_MHZ, TYPE_QSGMII, TYPE_USXGMII, NO_SSC), &qsgmii_100_no_ssc_tx_ln_vals}, 4537 + 4615 4538 {CDNS_TORRENT_KEY(CLK_156_25_MHZ, CLK_100_MHZ, TYPE_USXGMII, TYPE_PCIE, NO_SSC), &ml_usxgmii_156_25_no_ssc_tx_ln_vals}, 4539 + {CDNS_TORRENT_KEY(CLK_156_25_MHZ, CLK_100_MHZ, TYPE_USXGMII, TYPE_SGMII, NO_SSC), &ml_usxgmii_156_25_no_ssc_tx_ln_vals}, 4540 + {CDNS_TORRENT_KEY(CLK_156_25_MHZ, CLK_100_MHZ, TYPE_USXGMII, TYPE_QSGMII, NO_SSC), &ml_usxgmii_156_25_no_ssc_tx_ln_vals}, 4616 4541 }; 4617 4542 4618 4543 static struct cdns_torrent_vals_entry cdns_rx_ln_vals_entries[] = { ··· 4690 4603 /* Dual refclk */ 4691 4604 {CDNS_TORRENT_KEY(CLK_100_MHZ, CLK_156_25_MHZ, TYPE_PCIE, TYPE_USXGMII, NO_SSC), &pcie_100_no_ssc_rx_ln_vals}, 4692 4605 4606 + {CDNS_TORRENT_KEY(CLK_100_MHZ, CLK_156_25_MHZ, TYPE_SGMII, TYPE_USXGMII, NO_SSC), &sgmii_100_no_ssc_rx_ln_vals}, 4607 + 4608 + {CDNS_TORRENT_KEY(CLK_100_MHZ, CLK_156_25_MHZ, TYPE_QSGMII, TYPE_USXGMII, NO_SSC), &qsgmii_100_no_ssc_rx_ln_vals}, 4609 + 4693 4610 {CDNS_TORRENT_KEY(CLK_156_25_MHZ, CLK_100_MHZ, TYPE_USXGMII, TYPE_PCIE, NO_SSC), &ml_usxgmii_156_25_no_ssc_rx_ln_vals}, 4611 + {CDNS_TORRENT_KEY(CLK_156_25_MHZ, CLK_100_MHZ, TYPE_USXGMII, TYPE_SGMII, NO_SSC), &ml_usxgmii_156_25_no_ssc_rx_ln_vals}, 4612 + {CDNS_TORRENT_KEY(CLK_156_25_MHZ, CLK_100_MHZ, TYPE_USXGMII, TYPE_QSGMII, NO_SSC), &ml_usxgmii_156_25_no_ssc_rx_ln_vals}, 4694 4613 }; 4695 4614 4696 4615 static const struct cdns_torrent_data cdns_map_torrent = { ··· 4731 4638 static struct cdns_torrent_vals_entry j721e_phy_pma_cmn_vals_entries[] = { 4732 4639 {CDNS_TORRENT_KEY_ANYCLK(TYPE_USXGMII, TYPE_NONE), &ti_usxgmii_phy_pma_cmn_vals}, 4733 4640 {CDNS_TORRENT_KEY_ANYCLK(TYPE_USXGMII, TYPE_PCIE), &ti_usxgmii_phy_pma_cmn_vals}, 4641 + {CDNS_TORRENT_KEY_ANYCLK(TYPE_USXGMII, TYPE_SGMII), &ti_usxgmii_phy_pma_cmn_vals}, 4642 + {CDNS_TORRENT_KEY_ANYCLK(TYPE_USXGMII, TYPE_QSGMII), &ti_usxgmii_phy_pma_cmn_vals}, 4734 4643 }; 4735 4644 4736 4645 static struct cdns_torrent_vals_entry ti_tx_ln_vals_entries[] = { ··· 4804 4709 /* Dual refclk */ 4805 4710 {CDNS_TORRENT_KEY(CLK_100_MHZ, CLK_156_25_MHZ, TYPE_PCIE, TYPE_USXGMII, NO_SSC), NULL}, 4806 4711 4712 + {CDNS_TORRENT_KEY(CLK_100_MHZ, CLK_156_25_MHZ, TYPE_SGMII, TYPE_USXGMII, NO_SSC), &ti_sgmii_100_no_ssc_tx_ln_vals}, 4713 + 4714 + {CDNS_TORRENT_KEY(CLK_100_MHZ, CLK_156_25_MHZ, TYPE_QSGMII, TYPE_USXGMII, NO_SSC), &ti_qsgmii_100_no_ssc_tx_ln_vals}, 4715 + 4807 4716 {CDNS_TORRENT_KEY(CLK_156_25_MHZ, CLK_100_MHZ, TYPE_USXGMII, TYPE_PCIE, NO_SSC), &ml_usxgmii_156_25_no_ssc_tx_ln_vals}, 4717 + {CDNS_TORRENT_KEY(CLK_156_25_MHZ, CLK_100_MHZ, TYPE_USXGMII, TYPE_SGMII, NO_SSC), &ml_usxgmii_156_25_no_ssc_tx_ln_vals}, 4718 + {CDNS_TORRENT_KEY(CLK_156_25_MHZ, CLK_100_MHZ, TYPE_USXGMII, TYPE_QSGMII, NO_SSC), &ml_usxgmii_156_25_no_ssc_tx_ln_vals}, 4808 4719 }; 4809 4720 4810 4721 static const struct cdns_torrent_data ti_j721e_map_torrent = {