brintos

brintos / linux-shallow public Read only

0
0
Text · 49.1 KiB · 1e410eb Raw
1291 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Copyright (c) 2024 AIROHA Inc4 * Author: Lorenzo Bianconi <lorenzo@kernel.org>5 */6 7#include <linux/bitfield.h>8#include <linux/delay.h>9#include <linux/io.h>10#include <linux/module.h>11#include <linux/of.h>12#include <linux/phy/phy.h>13#include <linux/platform_device.h>14#include <linux/slab.h>15 16#include "phy-airoha-pcie-regs.h"17 18#define LEQ_LEN_CTRL_MAX_VAL	719#define FREQ_LOCK_MAX_ATTEMPT	1020 21/* PCIe-PHY initialization time in ms needed by the hw to complete */22#define PHY_HW_INIT_TIME_MS	3023 24enum airoha_pcie_port_gen {25	PCIE_PORT_GEN1 = 1,26	PCIE_PORT_GEN2,27	PCIE_PORT_GEN3,28};29 30/**31 * struct airoha_pcie_phy - PCIe phy driver main structure32 * @dev: pointer to device33 * @phy: pointer to generic phy34 * @csr_2l: Analogic lane IO mapped register base address35 * @pma0: IO mapped register base address of PMA0-PCIe36 * @pma1: IO mapped register base address of PMA1-PCIe37 * @p0_xr_dtime: IO mapped register base address of port0 Tx-Rx detection time38 * @p1_xr_dtime: IO mapped register base address of port1 Tx-Rx detection time39 * @rx_aeq: IO mapped register base address of Rx AEQ training40 */41struct airoha_pcie_phy {42	struct device *dev;43	struct phy *phy;44	void __iomem *csr_2l;45	void __iomem *pma0;46	void __iomem *pma1;47	void __iomem *p0_xr_dtime;48	void __iomem *p1_xr_dtime;49	void __iomem *rx_aeq;50};51 52static void airoha_phy_clear_bits(void __iomem *reg, u32 mask)53{54	u32 val = readl(reg) & ~mask;55 56	writel(val, reg);57}58 59static void airoha_phy_set_bits(void __iomem *reg, u32 mask)60{61	u32 val = readl(reg) | mask;62 63	writel(val, reg);64}65 66static void airoha_phy_update_bits(void __iomem *reg, u32 mask, u32 val)67{68	u32 tmp = readl(reg);69 70	tmp &= ~mask;71	tmp |= val & mask;72	writel(tmp, reg);73}74 75#define airoha_phy_update_field(reg, mask, val)					\76	do {									\77		BUILD_BUG_ON_MSG(!__builtin_constant_p((mask)),			\78				 "mask is not constant");			\79		airoha_phy_update_bits((reg), (mask),				\80				       FIELD_PREP((mask), (val)));		\81	} while (0)82 83#define airoha_phy_csr_2l_clear_bits(pcie_phy, reg, mask)			\84	airoha_phy_clear_bits((pcie_phy)->csr_2l + (reg), (mask))85#define airoha_phy_csr_2l_set_bits(pcie_phy, reg, mask)				\86	airoha_phy_set_bits((pcie_phy)->csr_2l + (reg), (mask))87#define airoha_phy_csr_2l_update_field(pcie_phy, reg, mask, val)		\88	airoha_phy_update_field((pcie_phy)->csr_2l + (reg), (mask), (val))89#define airoha_phy_pma0_clear_bits(pcie_phy, reg, mask)				\90	airoha_phy_clear_bits((pcie_phy)->pma0 + (reg), (mask))91#define airoha_phy_pma1_clear_bits(pcie_phy, reg, mask)				\92	airoha_phy_clear_bits((pcie_phy)->pma1 + (reg), (mask))93#define airoha_phy_pma0_set_bits(pcie_phy, reg, mask)				\94	airoha_phy_set_bits((pcie_phy)->pma0 + (reg), (mask))95#define airoha_phy_pma1_set_bits(pcie_phy, reg, mask)				\96	airoha_phy_set_bits((pcie_phy)->pma1 + (reg), (mask))97#define airoha_phy_pma0_update_field(pcie_phy, reg, mask, val)			\98	airoha_phy_update_field((pcie_phy)->pma0 + (reg), (mask), (val))99#define airoha_phy_pma1_update_field(pcie_phy, reg, mask, val)			\100	airoha_phy_update_field((pcie_phy)->pma1 + (reg), (mask), (val))101 102static void103airoha_phy_init_lane0_rx_fw_pre_calib(struct airoha_pcie_phy *pcie_phy,104				      enum airoha_pcie_port_gen gen)105{106	u32 fl_out_target = gen == PCIE_PORT_GEN3 ? 41600 : 41941;107	u32 lock_cyclecnt = gen == PCIE_PORT_GEN3 ? 26000 : 32767;108	u32 pr_idac, val, cdr_pr_idac_tmp = 0;109	int i;110 111	airoha_phy_pma0_set_bits(pcie_phy,112				 REG_PCIE_PMA_SS_LCPLL_PWCTL_SETTING_1,113				 PCIE_LCPLL_MAN_PWDB);114	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET2,115				     PCIE_LOCK_TARGET_BEG,116				     fl_out_target - 100);117	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET2,118				     PCIE_LOCK_TARGET_END,119				     fl_out_target + 100);120	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET1,121				     PCIE_PLL_FT_LOCK_CYCLECNT, lock_cyclecnt);122	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET4,123				     PCIE_LOCK_LOCKTH, 0x3);124	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET3,125				     PCIE_UNLOCK_TARGET_BEG,126				     fl_out_target - 100);127	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET3,128				     PCIE_UNLOCK_TARGET_END,129				     fl_out_target + 100);130	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET1,131				     PCIE_PLL_FT_UNLOCK_CYCLECNT,132				     lock_cyclecnt);133	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET4,134				     PCIE_UNLOCK_LOCKTH, 0x3);135 136	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR0_PR_INJ_MODE,137				   CSR_2L_PXP_CDR0_INJ_FORCE_OFF);138 139	airoha_phy_pma0_set_bits(pcie_phy,140				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C,141				 PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_R_EN);142	airoha_phy_pma0_set_bits(pcie_phy,143				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C,144				 PCIE_FORCE_DA_PXP_CDR_PR_LPF_R_EN);145	airoha_phy_pma0_set_bits(pcie_phy,146				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C,147				 PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_C_EN);148	airoha_phy_pma0_clear_bits(pcie_phy,149				   REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C,150				   PCIE_FORCE_DA_PXP_CDR_PR_LPF_C_EN);151	airoha_phy_pma0_set_bits(pcie_phy,152				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,153				 PCIE_FORCE_SEL_DA_PXP_CDR_PR_IDAC);154 155	airoha_phy_pma0_set_bits(pcie_phy,156				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB,157				 PCIE_FORCE_SEL_DA_PXP_CDR_PR_PWDB);158	airoha_phy_pma0_clear_bits(pcie_phy,159				   REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB,160				   PCIE_FORCE_DA_PXP_CDR_PR_PWDB);161	airoha_phy_pma0_set_bits(pcie_phy,162				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB,163				 PCIE_FORCE_DA_PXP_CDR_PR_PWDB);164 165	for (i = 0; i < LEQ_LEN_CTRL_MAX_VAL; i++) {166		airoha_phy_pma0_update_field(pcie_phy,167				REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,168				PCIE_FORCE_DA_PXP_CDR_PR_IDAC, i << 8);169		airoha_phy_pma0_clear_bits(pcie_phy,170					   REG_PCIE_PMA_SS_RX_FREQ_DET4,171					   PCIE_FREQLOCK_DET_EN);172		airoha_phy_pma0_update_field(pcie_phy,173					     REG_PCIE_PMA_SS_RX_FREQ_DET4,174					     PCIE_FREQLOCK_DET_EN, 0x3);175 176		usleep_range(10000, 15000);177 178		val = FIELD_GET(PCIE_RO_FL_OUT,179				readl(pcie_phy->pma0 +180				      REG_PCIE_PMA_RO_RX_FREQDET));181		if (val > fl_out_target)182			cdr_pr_idac_tmp = i << 8;183	}184 185	for (i = LEQ_LEN_CTRL_MAX_VAL; i >= 0; i--) {186		pr_idac = cdr_pr_idac_tmp | (0x1 << i);187		airoha_phy_pma0_update_field(pcie_phy,188				REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,189				PCIE_FORCE_DA_PXP_CDR_PR_IDAC, pr_idac);190		airoha_phy_pma0_clear_bits(pcie_phy,191					   REG_PCIE_PMA_SS_RX_FREQ_DET4,192					   PCIE_FREQLOCK_DET_EN);193		airoha_phy_pma0_update_field(pcie_phy,194					     REG_PCIE_PMA_SS_RX_FREQ_DET4,195					     PCIE_FREQLOCK_DET_EN, 0x3);196 197		usleep_range(10000, 15000);198 199		val = FIELD_GET(PCIE_RO_FL_OUT,200				readl(pcie_phy->pma0 +201				      REG_PCIE_PMA_RO_RX_FREQDET));202		if (val < fl_out_target)203			pr_idac &= ~(0x1 << i);204 205		cdr_pr_idac_tmp = pr_idac;206	}207 208	airoha_phy_pma0_update_field(pcie_phy,209				     REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,210				     PCIE_FORCE_DA_PXP_CDR_PR_IDAC,211				     cdr_pr_idac_tmp);212 213	for (i = 0; i < FREQ_LOCK_MAX_ATTEMPT; i++) {214		u32 val;215 216		airoha_phy_pma0_clear_bits(pcie_phy,217					   REG_PCIE_PMA_SS_RX_FREQ_DET4,218					   PCIE_FREQLOCK_DET_EN);219		airoha_phy_pma0_update_field(pcie_phy,220					     REG_PCIE_PMA_SS_RX_FREQ_DET4,221					     PCIE_FREQLOCK_DET_EN, 0x3);222 223		usleep_range(10000, 15000);224 225		val = readl(pcie_phy->pma0 + REG_PCIE_PMA_RO_RX_FREQDET);226		if (val & PCIE_RO_FBCK_LOCK)227			break;228	}229 230	/* turn off force mode and update band values */231	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR0_PR_INJ_MODE,232				     CSR_2L_PXP_CDR0_INJ_FORCE_OFF);233 234	airoha_phy_pma0_clear_bits(pcie_phy,235				   REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C,236				   PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_R_EN);237	airoha_phy_pma0_clear_bits(pcie_phy,238				   REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C,239				   PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_C_EN);240	airoha_phy_pma0_clear_bits(pcie_phy,241				   REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB,242				   PCIE_FORCE_SEL_DA_PXP_CDR_PR_PWDB);243	airoha_phy_pma0_clear_bits(pcie_phy,244				   REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,245				   PCIE_FORCE_SEL_DA_PXP_CDR_PR_IDAC);246	if (gen == PCIE_PORT_GEN3) {247		airoha_phy_pma0_update_field(pcie_phy,248					     REG_PCIE_PMA_DIG_RESERVE_14,249					     PCIE_FLL_IDAC_PCIEG3,250					     cdr_pr_idac_tmp);251	} else {252		airoha_phy_pma0_update_field(pcie_phy,253					     REG_PCIE_PMA_DIG_RESERVE_13,254					     PCIE_FLL_IDAC_PCIEG1,255					     cdr_pr_idac_tmp);256		airoha_phy_pma0_update_field(pcie_phy,257					     REG_PCIE_PMA_DIG_RESERVE_13,258					     PCIE_FLL_IDAC_PCIEG2,259					     cdr_pr_idac_tmp);260	}261}262 263static void264airoha_phy_init_lane1_rx_fw_pre_calib(struct airoha_pcie_phy *pcie_phy,265				      enum airoha_pcie_port_gen gen)266{267	u32 fl_out_target = gen == PCIE_PORT_GEN3 ? 41600 : 41941;268	u32 lock_cyclecnt = gen == PCIE_PORT_GEN3 ? 26000 : 32767;269	u32 pr_idac, val, cdr_pr_idac_tmp = 0;270	int i;271 272	airoha_phy_pma1_set_bits(pcie_phy,273				 REG_PCIE_PMA_SS_LCPLL_PWCTL_SETTING_1,274				 PCIE_LCPLL_MAN_PWDB);275	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET2,276				     PCIE_LOCK_TARGET_BEG,277				     fl_out_target - 100);278	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET2,279				     PCIE_LOCK_TARGET_END,280				     fl_out_target + 100);281	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET1,282				     PCIE_PLL_FT_LOCK_CYCLECNT, lock_cyclecnt);283	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET4,284				     PCIE_LOCK_LOCKTH, 0x3);285	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET3,286				     PCIE_UNLOCK_TARGET_BEG,287				     fl_out_target - 100);288	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET3,289				     PCIE_UNLOCK_TARGET_END,290				     fl_out_target + 100);291	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET1,292				     PCIE_PLL_FT_UNLOCK_CYCLECNT,293				     lock_cyclecnt);294	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET4,295				     PCIE_UNLOCK_LOCKTH, 0x3);296 297	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR1_PR_INJ_MODE,298				   CSR_2L_PXP_CDR1_INJ_FORCE_OFF);299 300	airoha_phy_pma1_set_bits(pcie_phy,301				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C,302				 PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_R_EN);303	airoha_phy_pma1_set_bits(pcie_phy,304				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C,305				 PCIE_FORCE_DA_PXP_CDR_PR_LPF_R_EN);306	airoha_phy_pma1_set_bits(pcie_phy,307				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C,308				 PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_C_EN);309	airoha_phy_pma1_clear_bits(pcie_phy,310				   REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C,311				   PCIE_FORCE_DA_PXP_CDR_PR_LPF_C_EN);312	airoha_phy_pma1_set_bits(pcie_phy,313				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,314				 PCIE_FORCE_SEL_DA_PXP_CDR_PR_IDAC);315	airoha_phy_pma1_set_bits(pcie_phy,316				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB,317				 PCIE_FORCE_SEL_DA_PXP_CDR_PR_PWDB);318	airoha_phy_pma1_clear_bits(pcie_phy,319				   REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB,320				   PCIE_FORCE_DA_PXP_CDR_PR_PWDB);321	airoha_phy_pma1_set_bits(pcie_phy,322				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB,323				 PCIE_FORCE_DA_PXP_CDR_PR_PWDB);324 325	for (i = 0; i < LEQ_LEN_CTRL_MAX_VAL; i++) {326		airoha_phy_pma1_update_field(pcie_phy,327				REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,328				PCIE_FORCE_DA_PXP_CDR_PR_IDAC, i << 8);329		airoha_phy_pma1_clear_bits(pcie_phy,330					   REG_PCIE_PMA_SS_RX_FREQ_DET4,331					   PCIE_FREQLOCK_DET_EN);332		airoha_phy_pma1_update_field(pcie_phy,333					     REG_PCIE_PMA_SS_RX_FREQ_DET4,334					     PCIE_FREQLOCK_DET_EN, 0x3);335 336		usleep_range(10000, 15000);337 338		val = FIELD_GET(PCIE_RO_FL_OUT,339				readl(pcie_phy->pma1 +340				      REG_PCIE_PMA_RO_RX_FREQDET));341		if (val > fl_out_target)342			cdr_pr_idac_tmp = i << 8;343	}344 345	for (i = LEQ_LEN_CTRL_MAX_VAL; i >= 0; i--) {346		pr_idac = cdr_pr_idac_tmp | (0x1 << i);347		airoha_phy_pma1_update_field(pcie_phy,348				REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,349				PCIE_FORCE_DA_PXP_CDR_PR_IDAC, pr_idac);350		airoha_phy_pma1_clear_bits(pcie_phy,351					   REG_PCIE_PMA_SS_RX_FREQ_DET4,352					   PCIE_FREQLOCK_DET_EN);353		airoha_phy_pma1_update_field(pcie_phy,354					     REG_PCIE_PMA_SS_RX_FREQ_DET4,355					     PCIE_FREQLOCK_DET_EN, 0x3);356 357		usleep_range(10000, 15000);358 359		val = FIELD_GET(PCIE_RO_FL_OUT,360				readl(pcie_phy->pma1 +361				      REG_PCIE_PMA_RO_RX_FREQDET));362		if (val < fl_out_target)363			pr_idac &= ~(0x1 << i);364 365		cdr_pr_idac_tmp = pr_idac;366	}367 368	airoha_phy_pma1_update_field(pcie_phy,369				     REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,370				     PCIE_FORCE_DA_PXP_CDR_PR_IDAC,371				     cdr_pr_idac_tmp);372 373	for (i = 0; i < FREQ_LOCK_MAX_ATTEMPT; i++) {374		u32 val;375 376		airoha_phy_pma1_clear_bits(pcie_phy,377					   REG_PCIE_PMA_SS_RX_FREQ_DET4,378					   PCIE_FREQLOCK_DET_EN);379		airoha_phy_pma1_update_field(pcie_phy,380					     REG_PCIE_PMA_SS_RX_FREQ_DET4,381					     PCIE_FREQLOCK_DET_EN, 0x3);382 383		usleep_range(10000, 15000);384 385		val = readl(pcie_phy->pma1 + REG_PCIE_PMA_RO_RX_FREQDET);386		if (val & PCIE_RO_FBCK_LOCK)387			break;388	}389 390	/* turn off force mode and update band values */391	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR1_PR_INJ_MODE,392				     CSR_2L_PXP_CDR1_INJ_FORCE_OFF);393 394	airoha_phy_pma1_clear_bits(pcie_phy,395				   REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C,396				   PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_R_EN);397	airoha_phy_pma1_clear_bits(pcie_phy,398				   REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C,399				   PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_C_EN);400	airoha_phy_pma1_clear_bits(pcie_phy,401				   REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB,402				   PCIE_FORCE_SEL_DA_PXP_CDR_PR_PWDB);403	airoha_phy_pma1_clear_bits(pcie_phy,404				   REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,405				   PCIE_FORCE_SEL_DA_PXP_CDR_PR_IDAC);406	if (gen == PCIE_PORT_GEN3) {407		airoha_phy_pma1_update_field(pcie_phy,408					     REG_PCIE_PMA_DIG_RESERVE_14,409					     PCIE_FLL_IDAC_PCIEG3,410					     cdr_pr_idac_tmp);411	} else {412		airoha_phy_pma1_update_field(pcie_phy,413					     REG_PCIE_PMA_DIG_RESERVE_13,414					     PCIE_FLL_IDAC_PCIEG1,415					     cdr_pr_idac_tmp);416		airoha_phy_pma1_update_field(pcie_phy,417					     REG_PCIE_PMA_DIG_RESERVE_13,418					     PCIE_FLL_IDAC_PCIEG2,419					     cdr_pr_idac_tmp);420	}421}422 423static void airoha_pcie_phy_init_default(struct airoha_pcie_phy *pcie_phy)424{425	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CMN,426				       CSR_2L_PXP_CMN_TRIM_MASK, 0x10);427	writel(0xcccbcccb, pcie_phy->pma0 + REG_PCIE_PMA_DIG_RESERVE_21);428	writel(0xcccb, pcie_phy->pma0 + REG_PCIE_PMA_DIG_RESERVE_22);429	writel(0xcccbcccb, pcie_phy->pma1 + REG_PCIE_PMA_DIG_RESERVE_21);430	writel(0xcccb, pcie_phy->pma1 + REG_PCIE_PMA_DIG_RESERVE_22);431	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CMN,432				   CSR_2L_PXP_CMN_LANE_EN);433}434 435static void airoha_pcie_phy_init_clk_out(struct airoha_pcie_phy *pcie_phy)436{437	airoha_phy_csr_2l_update_field(pcie_phy,438				       REG_CSR_2L_TXPLL_POSTDIV_D256,439				       CSR_2L_PXP_CLKTX0_AMP, 0x5);440	airoha_phy_csr_2l_update_field(pcie_phy,441				       REG_CSR_2L_CLKTX0_FORCE_OUT1,442				       CSR_2L_PXP_CLKTX1_AMP, 0x5);443	airoha_phy_csr_2l_update_field(pcie_phy,444				       REG_CSR_2L_TXPLL_POSTDIV_D256,445				       CSR_2L_PXP_CLKTX0_OFFSET, 0x2);446	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CLKTX1_OFFSET,447				       CSR_2L_PXP_CLKTX1_OFFSET, 0x2);448	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CLKTX0_FORCE_OUT1,449				     CSR_2L_PXP_CLKTX0_HZ);450	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CLKTX1_OFFSET,451				     CSR_2L_PXP_CLKTX1_HZ);452	airoha_phy_csr_2l_update_field(pcie_phy,453				       REG_CSR_2L_CLKTX0_FORCE_OUT1,454				       CSR_2L_PXP_CLKTX0_IMP_SEL, 0x12);455	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CLKTX1_IMP_SEL,456				       CSR_2L_PXP_CLKTX1_IMP_SEL, 0x12);457	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_POSTDIV_D256,458				     CSR_2L_PXP_CLKTX0_SR);459	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CLKTX1_OFFSET,460				     CSR_2L_PXP_CLKTX1_SR);461	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_PLL_CMN_RESERVE0,462				       CSR_2L_PXP_PLL_RESERVE_MASK, 0xdd);463}464 465static void airoha_pcie_phy_init_csr_2l(struct airoha_pcie_phy *pcie_phy)466{467	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_SW_RESET,468				 PCIE_SW_XFI_RXPCS_RST | PCIE_SW_REF_RST |469				 PCIE_SW_RX_RST);470	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_SW_RESET,471				 PCIE_SW_XFI_RXPCS_RST | PCIE_SW_REF_RST |472				 PCIE_SW_RX_RST);473	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_TX_RESET,474				 PCIE_TX_TOP_RST | REG_PCIE_PMA_TX_RESET);475	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_TX_RESET,476				 PCIE_TX_TOP_RST | REG_PCIE_PMA_TX_RESET);477}478 479static void airoha_pcie_phy_init_rx(struct airoha_pcie_phy *pcie_phy)480{481	writel(0x2a00090b, pcie_phy->pma0 + REG_PCIE_PMA_DIG_RESERVE_17);482	writel(0x2a00090b, pcie_phy->pma1 + REG_PCIE_PMA_DIG_RESERVE_17);483	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR0_PR_MONPI,484				   CSR_2L_PXP_CDR0_PR_XFICK_EN);485	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR1_PR_MONPI,486				   CSR_2L_PXP_CDR1_PR_XFICK_EN);487	airoha_phy_csr_2l_clear_bits(pcie_phy,488				     REG_CSR_2L_CDR0_PD_PICAL_CKD8_INV,489				     CSR_2L_PXP_CDR0_PD_EDGE_DISABLE);490	airoha_phy_csr_2l_clear_bits(pcie_phy,491				     REG_CSR_2L_CDR1_PD_PICAL_CKD8_INV,492				     CSR_2L_PXP_CDR1_PD_EDGE_DISABLE);493	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_PHYCK_DIV,494				       CSR_2L_PXP_RX0_PHYCK_SEL, 0x1);495	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_PHYCK_DIV,496				       CSR_2L_PXP_RX1_PHYCK_SEL, 0x1);497}498 499static void airoha_pcie_phy_init_jcpll(struct airoha_pcie_phy *pcie_phy)500{501	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT,502				 PCIE_FORCE_SEL_DA_PXP_JCPLL_EN);503	airoha_phy_pma0_clear_bits(pcie_phy,504				   REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT,505				   PCIE_FORCE_DA_PXP_JCPLL_EN);506	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT,507				 PCIE_FORCE_SEL_DA_PXP_JCPLL_EN);508	airoha_phy_pma1_clear_bits(pcie_phy,509				   REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT,510				   PCIE_FORCE_DA_PXP_JCPLL_EN);511	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_TCL_VTP_EN,512				       CSR_2L_PXP_JCPLL_SPARE_LOW, 0x20);513	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_RST_DLY,514				   CSR_2L_PXP_JCPLL_RST);515	writel(0x0, pcie_phy->csr_2l + REG_CSR_2L_JCPLL_SSC_DELTA1);516	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC_PERIOD,517				     CSR_2L_PXP_JCPLL_SSC_PERIOD);518	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC,519				     CSR_2L_PXP_JCPLL_SSC_PHASE_INI);520	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC,521				     CSR_2L_PXP_JCPLL_SSC_TRI_EN);522	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BR,523				       CSR_2L_PXP_JCPLL_LPF_BR, 0xa);524	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BR,525				       CSR_2L_PXP_JCPLL_LPF_BP, 0xc);526	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BR,527				       CSR_2L_PXP_JCPLL_LPF_BC, 0x1f);528	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BWC,529				       CSR_2L_PXP_JCPLL_LPF_BWC, 0x1e);530	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BR,531				       CSR_2L_PXP_JCPLL_LPF_BWR, 0xa);532	airoha_phy_csr_2l_update_field(pcie_phy,533				       REG_CSR_2L_JCPLL_MMD_PREDIV_MODE,534				       CSR_2L_PXP_JCPLL_MMD_PREDIV_MODE,535				       0x1);536	airoha_phy_csr_2l_clear_bits(pcie_phy, CSR_2L_PXP_JCPLL_MONCK,537				     CSR_2L_PXP_JCPLL_REFIN_DIV);538 539	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_VOS,540				 PCIE_FORCE_SEL_DA_PXP_JCPLL_SDM_PCW);541	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_VOS,542				 PCIE_FORCE_SEL_DA_PXP_JCPLL_SDM_PCW);543	airoha_phy_pma0_update_field(pcie_phy,544				     REG_PCIE_PMA_FORCE_DA_PXP_JCPLL_SDM_PCW,545				     PCIE_FORCE_DA_PXP_JCPLL_SDM_PCW,546				     0x50000000);547	airoha_phy_pma1_update_field(pcie_phy,548				     REG_PCIE_PMA_FORCE_DA_PXP_JCPLL_SDM_PCW,549				     PCIE_FORCE_DA_PXP_JCPLL_SDM_PCW,550				     0x50000000);551 552	airoha_phy_csr_2l_set_bits(pcie_phy,553				   REG_CSR_2L_JCPLL_MMD_PREDIV_MODE,554				   CSR_2L_PXP_JCPLL_POSTDIV_D5);555	airoha_phy_csr_2l_set_bits(pcie_phy,556				   REG_CSR_2L_JCPLL_MMD_PREDIV_MODE,557				   CSR_2L_PXP_JCPLL_POSTDIV_D2);558	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_RST_DLY,559				       CSR_2L_PXP_JCPLL_RST_DLY, 0x4);560	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_RST_DLY,561				     CSR_2L_PXP_JCPLL_SDM_DI_LS);562	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_TCL_KBAND_VREF,563				     CSR_2L_PXP_JCPLL_VCO_KBAND_MEAS_EN);564	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_IB_EXT,565				     CSR_2L_PXP_JCPLL_CHP_IOFST);566	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_IB_EXT,567				       CSR_2L_PXP_JCPLL_CHP_IBIAS, 0xc);568	airoha_phy_csr_2l_update_field(pcie_phy,569				       REG_CSR_2L_JCPLL_MMD_PREDIV_MODE,570				       CSR_2L_PXP_JCPLL_MMD_PREDIV_MODE,571				       0x1);572	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_VCODIV,573				   CSR_2L_PXP_JCPLL_VCO_HALFLSB_EN);574	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_VCODIV,575				       CSR_2L_PXP_JCPLL_VCO_CFIX, 0x1);576	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_VCODIV,577				       CSR_2L_PXP_JCPLL_VCO_SCAPWR, 0x4);578	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_IB_EXT,579				     REG_CSR_2L_JCPLL_LPF_SHCK_EN);580	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_KBAND_KFC,581				   CSR_2L_PXP_JCPLL_POSTDIV_EN);582	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_KBAND_KFC,583				     CSR_2L_PXP_JCPLL_KBAND_KFC);584	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_KBAND_KFC,585				       CSR_2L_PXP_JCPLL_KBAND_KF, 0x3);586	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_KBAND_KFC,587				     CSR_2L_PXP_JCPLL_KBAND_KS);588	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BWC,589				       CSR_2L_PXP_JCPLL_KBAND_DIV, 0x1);590 591	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_SCAN_MODE,592				 PCIE_FORCE_SEL_DA_PXP_JCPLL_KBAND_LOAD_EN);593	airoha_phy_pma0_clear_bits(pcie_phy, REG_PCIE_PMA_SCAN_MODE,594				   PCIE_FORCE_DA_PXP_JCPLL_KBAND_LOAD_EN);595 596	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BWC,597				       CSR_2L_PXP_JCPLL_KBAND_CODE, 0xe4);598	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SDM_HREN,599				   CSR_2L_PXP_JCPLL_TCL_AMP_EN);600	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_TCL_CMP,601				   CSR_2L_PXP_JCPLL_TCL_LPF_EN);602	airoha_phy_csr_2l_update_field(pcie_phy,603				       REG_CSR_2L_JCPLL_TCL_KBAND_VREF,604				       CSR_2L_PXP_JCPLL_TCL_KBAND_VREF, 0xf);605	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_SDM_HREN,606				       CSR_2L_PXP_JCPLL_TCL_AMP_GAIN, 0x1);607	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_SDM_HREN,608				       CSR_2L_PXP_JCPLL_TCL_AMP_VREF, 0x5);609	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_TCL_CMP,610				       CSR_2L_PXP_JCPLL_TCL_LPF_BW, 0x1);611	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_VCO_TCLVAR,612				       CSR_2L_PXP_JCPLL_VCO_TCLVAR, 0x3);613 614	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT,615				 PCIE_FORCE_SEL_DA_PXP_JCPLL_CKOUT_EN);616	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT,617				 PCIE_FORCE_DA_PXP_JCPLL_CKOUT_EN);618	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT,619				 PCIE_FORCE_SEL_DA_PXP_JCPLL_CKOUT_EN);620	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT,621				 PCIE_FORCE_DA_PXP_JCPLL_CKOUT_EN);622	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT,623				 PCIE_FORCE_SEL_DA_PXP_JCPLL_EN);624	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT,625				 PCIE_FORCE_DA_PXP_JCPLL_EN);626	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT,627				 PCIE_FORCE_SEL_DA_PXP_JCPLL_EN);628	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT,629				 PCIE_FORCE_DA_PXP_JCPLL_EN);630}631 632static void airoha_pcie_phy_txpll(struct airoha_pcie_phy *pcie_phy)633{634	airoha_phy_pma0_set_bits(pcie_phy,635				 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT,636				 PCIE_FORCE_SEL_DA_PXP_TXPLL_EN);637	airoha_phy_pma0_clear_bits(pcie_phy,638				   REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT,639				   PCIE_FORCE_DA_PXP_TXPLL_EN);640	airoha_phy_pma1_set_bits(pcie_phy,641				 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT,642				 PCIE_FORCE_SEL_DA_PXP_TXPLL_EN);643	airoha_phy_pma1_clear_bits(pcie_phy,644				   REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT,645				   PCIE_FORCE_DA_PXP_TXPLL_EN);646 647	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TXPLL_REFIN_DIV,648				   CSR_2L_PXP_TXPLL_PLL_RSTB);649	writel(0x0, pcie_phy->csr_2l + REG_CSR_2L_TXPLL_SSC_DELTA1);650	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_SSC_PERIOD,651				     CSR_2L_PXP_txpll_SSC_PERIOD);652	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_CHP_IOFST,653				       CSR_2L_PXP_TXPLL_CHP_IOFST, 0x1);654	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_750M_SYS_CK,655				       CSR_2L_PXP_TXPLL_CHP_IBIAS, 0x2d);656	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_REFIN_DIV,657				     CSR_2L_PXP_TXPLL_REFIN_DIV);658	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_TCL_LPF_BW,659				       CSR_2L_PXP_TXPLL_VCO_CFIX, 0x3);660 661	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,662				 PCIE_FORCE_SEL_DA_PXP_TXPLL_SDM_PCW);663	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,664				 PCIE_FORCE_SEL_DA_PXP_TXPLL_SDM_PCW);665	airoha_phy_pma0_update_field(pcie_phy,666				     REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_SDM_PCW,667				     PCIE_FORCE_DA_PXP_TXPLL_SDM_PCW,668				     0xc800000);669	airoha_phy_pma1_update_field(pcie_phy,670				     REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_SDM_PCW,671				     PCIE_FORCE_DA_PXP_TXPLL_SDM_PCW,672				     0xc800000);673 674	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_SDM_DI_LS,675				     CSR_2L_PXP_TXPLL_SDM_IFM);676	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_SSC,677				     CSR_2L_PXP_TXPLL_SSC_PHASE_INI);678	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_REFIN_DIV,679				       CSR_2L_PXP_TXPLL_RST_DLY, 0x4);680	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_SDM_DI_LS,681				     CSR_2L_PXP_TXPLL_SDM_DI_LS);682	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_SDM_DI_LS,683				       CSR_2L_PXP_TXPLL_SDM_ORD, 0x3);684	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_TCL_KBAND_VREF,685				     CSR_2L_PXP_TXPLL_VCO_KBAND_MEAS_EN);686	writel(0x0, pcie_phy->csr_2l + REG_CSR_2L_TXPLL_SSC_DELTA1);687	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_CHP_IOFST,688				       CSR_2L_PXP_TXPLL_LPF_BP, 0x1);689	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_CHP_IOFST,690				       CSR_2L_PXP_TXPLL_LPF_BC, 0x18);691	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_CHP_IOFST,692				       CSR_2L_PXP_TXPLL_LPF_BR, 0x5);693	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_CHP_IOFST,694				       CSR_2L_PXP_TXPLL_CHP_IOFST, 0x1);695	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_750M_SYS_CK,696				       CSR_2L_PXP_TXPLL_CHP_IBIAS, 0x2d);697	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_TCL_VTP,698				       CSR_2L_PXP_TXPLL_SPARE_L, 0x1);699	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_LPF_BWR,700				     CSR_2L_PXP_TXPLL_LPF_BWC);701	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_POSTDIV,702				     CSR_2L_PXP_TXPLL_MMD_PREDIV_MODE);703	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_REFIN_DIV,704				     CSR_2L_PXP_TXPLL_REFIN_DIV);705	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TXPLL_TCL_LPF_BW,706				   CSR_2L_PXP_TXPLL_VCO_HALFLSB_EN);707	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_VCO_SCAPWR,708				       CSR_2L_PXP_TXPLL_VCO_SCAPWR, 0x7);709	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_TCL_LPF_BW,710				       CSR_2L_PXP_TXPLL_VCO_CFIX, 0x3);711 712	airoha_phy_pma0_set_bits(pcie_phy,713				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,714				 PCIE_FORCE_SEL_DA_PXP_TXPLL_SDM_PCW);715	airoha_phy_pma1_set_bits(pcie_phy,716				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC,717				 PCIE_FORCE_SEL_DA_PXP_TXPLL_SDM_PCW);718 719	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_SSC,720				     CSR_2L_PXP_TXPLL_SSC_PHASE_INI);721	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_LPF_BWR,722				     CSR_2L_PXP_TXPLL_LPF_BWR);723	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TXPLL_PHY_CK2,724				   CSR_2L_PXP_TXPLL_REFIN_INTERNAL);725	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_TCL_KBAND_VREF,726				     CSR_2L_PXP_TXPLL_VCO_KBAND_MEAS_EN);727	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_VTP,728				     CSR_2L_PXP_TXPLL_VTP_EN);729	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_POSTDIV,730				     CSR_2L_PXP_TXPLL_PHY_CK1_EN);731	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TXPLL_PHY_CK2,732				   CSR_2L_PXP_TXPLL_REFIN_INTERNAL);733	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_SSC,734				     CSR_2L_PXP_TXPLL_SSC_EN);735	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_750M_SYS_CK,736				     CSR_2L_PXP_TXPLL_LPF_SHCK_EN);737	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_POSTDIV,738				     CSR_2L_PXP_TXPLL_POSTDIV_EN);739	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_KBAND_DIV,740				     CSR_2L_PXP_TXPLL_KBAND_KFC);741	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_KBAND_DIV,742				       CSR_2L_PXP_TXPLL_KBAND_KF, 0x3);743	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_KBAND_DIV,744				       CSR_2L_PXP_txpll_KBAND_KS, 0x1);745	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_KBAND_DIV,746				       CSR_2L_PXP_TXPLL_KBAND_DIV, 0x4);747	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_LPF_BWR,748				       CSR_2L_PXP_TXPLL_KBAND_CODE, 0xe4);749	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TXPLL_SDM_OUT,750				   CSR_2L_PXP_TXPLL_TCL_AMP_EN);751	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TXPLL_TCL_AMP_VREF,752				   CSR_2L_PXP_TXPLL_TCL_LPF_EN);753	airoha_phy_csr_2l_update_field(pcie_phy,754				       REG_CSR_2L_TXPLL_TCL_KBAND_VREF,755				       CSR_2L_PXP_TXPLL_TCL_KBAND_VREF, 0xf);756	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_SDM_OUT,757				       CSR_2L_PXP_TXPLL_TCL_AMP_GAIN, 0x3);758	airoha_phy_csr_2l_update_field(pcie_phy,759				       REG_CSR_2L_TXPLL_TCL_AMP_VREF,760				       CSR_2L_PXP_TXPLL_TCL_AMP_VREF, 0xb);761	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_TCL_LPF_BW,762				       CSR_2L_PXP_TXPLL_TCL_LPF_BW, 0x3);763 764	airoha_phy_pma0_set_bits(pcie_phy,765				 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT,766				 PCIE_FORCE_SEL_DA_PXP_TXPLL_CKOUT_EN);767	airoha_phy_pma0_set_bits(pcie_phy,768				 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT,769				 PCIE_FORCE_DA_PXP_TXPLL_CKOUT_EN);770	airoha_phy_pma1_set_bits(pcie_phy,771				 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT,772				 PCIE_FORCE_SEL_DA_PXP_TXPLL_CKOUT_EN);773	airoha_phy_pma1_set_bits(pcie_phy,774				 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT,775				 PCIE_FORCE_DA_PXP_TXPLL_CKOUT_EN);776	airoha_phy_pma0_set_bits(pcie_phy,777				 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT,778				 PCIE_FORCE_SEL_DA_PXP_TXPLL_EN);779	airoha_phy_pma0_set_bits(pcie_phy,780				 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT,781				 PCIE_FORCE_DA_PXP_TXPLL_EN);782	airoha_phy_pma1_set_bits(pcie_phy,783				 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT,784				 PCIE_FORCE_SEL_DA_PXP_TXPLL_EN);785	airoha_phy_pma1_set_bits(pcie_phy,786				 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT,787				 PCIE_FORCE_DA_PXP_TXPLL_EN);788}789 790static void airoha_pcie_phy_init_ssc_jcpll(struct airoha_pcie_phy *pcie_phy)791{792	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_SSC_DELTA1,793				       CSR_2L_PXP_JCPLL_SSC_DELTA1, 0x106);794	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_SSC_DELTA1,795				       CSR_2L_PXP_JCPLL_SSC_DELTA, 0x106);796	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_SSC_PERIOD,797				       CSR_2L_PXP_JCPLL_SSC_PERIOD, 0x31b);798	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC,799				   CSR_2L_PXP_JCPLL_SSC_PHASE_INI);800	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC,801				   CSR_2L_PXP_JCPLL_SSC_EN);802	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SDM_IFM,803				   CSR_2L_PXP_JCPLL_SDM_IFM);804	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SDM_HREN,805				   REG_CSR_2L_JCPLL_SDM_HREN);806	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_RST_DLY,807				     CSR_2L_PXP_JCPLL_SDM_DI_EN);808	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC,809				   CSR_2L_PXP_JCPLL_SSC_TRI_EN);810}811 812static void813airoha_pcie_phy_set_rxlan0_signal_detect(struct airoha_pcie_phy *pcie_phy)814{815	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR0_PR_COR_HBW,816				   CSR_2L_PXP_CDR0_PR_LDO_FORCE_ON);817 818	usleep_range(100, 200);819 820	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_19,821				     PCIE_PCP_RX_REV0_PCIE_GEN1, 0x18b0);822	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_20,823				     PCIE_PCP_RX_REV0_PCIE_GEN2, 0x18b0);824	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_20,825				     PCIE_PCP_RX_REV0_PCIE_GEN3, 0x1030);826 827	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_SIGDET_DCTEST,828				       CSR_2L_PXP_RX0_SIGDET_PEAK, 0x2);829	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_SIGDET_VTH_SEL,830				       CSR_2L_PXP_RX0_SIGDET_VTH_SEL, 0x5);831	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_REV0,832				       CSR_2L_PXP_VOS_PNINV, 0x2);833	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_SIGDET_DCTEST,834				       CSR_2L_PXP_RX0_SIGDET_LPF_CTRL, 0x1);835 836	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_CAL2,837				     PCIE_CAL_OUT_OS, 0x0);838 839	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_PXP_RX0_FE_VB_EQ2,840				   CSR_2L_PXP_RX0_FE_VCM_GEN_PWDB);841 842	airoha_phy_pma0_set_bits(pcie_phy,843				 REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_GAIN_CTRL,844				 PCIE_FORCE_SEL_DA_PXP_RX_FE_PWDB);845	airoha_phy_pma0_update_field(pcie_phy,846				     REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_GAIN_CTRL,847				     PCIE_FORCE_DA_PXP_RX_FE_GAIN_CTRL, 0x3);848	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_RX_FORCE_MODE0,849				     PCIE_FORCE_DA_XPON_RX_FE_GAIN_CTRL, 0x1);850	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_SIGDET0,851				     PCIE_SIGDET_WIN_NONVLD_TIMES, 0x3);852	airoha_phy_pma0_clear_bits(pcie_phy, REG_PCIE_PMA_SEQUENCE_DISB_CTRL1,853				   PCIE_DISB_RX_SDCAL_EN);854 855	airoha_phy_pma0_set_bits(pcie_phy,856				 REG_PCIE_PMA_CTRL_SEQUENCE_FORCE_CTRL1,857				 PCIE_FORCE_RX_SDCAL_EN);858	usleep_range(150, 200);859	airoha_phy_pma0_clear_bits(pcie_phy,860				   REG_PCIE_PMA_CTRL_SEQUENCE_FORCE_CTRL1,861				   PCIE_FORCE_RX_SDCAL_EN);862}863 864static void865airoha_pcie_phy_set_rxlan1_signal_detect(struct airoha_pcie_phy *pcie_phy)866{867	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR1_PR_COR_HBW,868				   CSR_2L_PXP_CDR1_PR_LDO_FORCE_ON);869 870	usleep_range(100, 200);871 872	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_19,873				     PCIE_PCP_RX_REV0_PCIE_GEN1, 0x18b0);874	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_20,875				     PCIE_PCP_RX_REV0_PCIE_GEN2, 0x18b0);876	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_20,877				     PCIE_PCP_RX_REV0_PCIE_GEN3, 0x1030);878 879	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_SIGDET_NOVTH,880				       CSR_2L_PXP_RX1_SIGDET_PEAK, 0x2);881	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_SIGDET_NOVTH,882				       CSR_2L_PXP_RX1_SIGDET_VTH_SEL, 0x5);883	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_REV0,884				       CSR_2L_PXP_VOS_PNINV, 0x2);885	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_DAC_RANGE_EYE,886				       CSR_2L_PXP_RX1_SIGDET_LPF_CTRL, 0x1);887 888	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_CAL2,889				     PCIE_CAL_OUT_OS, 0x0);890 891	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_RX1_FE_VB_EQ1,892				   CSR_2L_PXP_RX1_FE_VCM_GEN_PWDB);893 894	airoha_phy_pma1_set_bits(pcie_phy,895				 REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_GAIN_CTRL,896				 PCIE_FORCE_SEL_DA_PXP_RX_FE_PWDB);897	airoha_phy_pma1_update_field(pcie_phy,898				     REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_GAIN_CTRL,899				     PCIE_FORCE_DA_PXP_RX_FE_GAIN_CTRL, 0x3);900	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_RX_FORCE_MODE0,901				     PCIE_FORCE_DA_XPON_RX_FE_GAIN_CTRL, 0x1);902	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_SIGDET0,903				     PCIE_SIGDET_WIN_NONVLD_TIMES, 0x3);904	airoha_phy_pma1_clear_bits(pcie_phy, REG_PCIE_PMA_SEQUENCE_DISB_CTRL1,905				   PCIE_DISB_RX_SDCAL_EN);906 907	airoha_phy_pma1_set_bits(pcie_phy,908				 REG_PCIE_PMA_CTRL_SEQUENCE_FORCE_CTRL1,909				 PCIE_FORCE_RX_SDCAL_EN);910	usleep_range(150, 200);911	airoha_phy_pma1_clear_bits(pcie_phy,912				   REG_PCIE_PMA_CTRL_SEQUENCE_FORCE_CTRL1,913				   PCIE_FORCE_RX_SDCAL_EN);914}915 916static void airoha_pcie_phy_set_rxflow(struct airoha_pcie_phy *pcie_phy)917{918	airoha_phy_pma0_set_bits(pcie_phy,919				 REG_PCIE_PMA_FORCE_DA_PXP_RX_SCAN_RST,920				 PCIE_FORCE_DA_PXP_RX_SIGDET_PWDB |921				 PCIE_FORCE_SEL_DA_PXP_RX_SIGDET_PWDB);922	airoha_phy_pma1_set_bits(pcie_phy,923				 REG_PCIE_PMA_FORCE_DA_PXP_RX_SCAN_RST,924				 PCIE_FORCE_DA_PXP_RX_SIGDET_PWDB |925				 PCIE_FORCE_SEL_DA_PXP_RX_SIGDET_PWDB);926 927	airoha_phy_pma0_set_bits(pcie_phy,928				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PD_PWDB,929				 PCIE_FORCE_DA_PXP_CDR_PD_PWDB |930				 PCIE_FORCE_SEL_DA_PXP_CDR_PD_PWDB);931	airoha_phy_pma0_set_bits(pcie_phy,932				 REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_PWDB,933				 PCIE_FORCE_DA_PXP_RX_FE_PWDB |934				 PCIE_FORCE_SEL_DA_PXP_RX_FE_PWDB);935	airoha_phy_pma1_set_bits(pcie_phy,936				 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PD_PWDB,937				 PCIE_FORCE_DA_PXP_CDR_PD_PWDB |938				 PCIE_FORCE_SEL_DA_PXP_CDR_PD_PWDB);939	airoha_phy_pma1_set_bits(pcie_phy,940				 REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_PWDB,941				 PCIE_FORCE_DA_PXP_RX_FE_PWDB |942				 PCIE_FORCE_SEL_DA_PXP_RX_FE_PWDB);943 944	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_RX0_PHYCK_DIV,945				   CSR_2L_PXP_RX0_PHYCK_RSTB |946				   CSR_2L_PXP_RX0_TDC_CK_SEL);947	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_RX1_PHYCK_DIV,948				   CSR_2L_PXP_RX1_PHYCK_RSTB |949				   CSR_2L_PXP_RX1_TDC_CK_SEL);950 951	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_SW_RESET,952				 PCIE_SW_RX_FIFO_RST | PCIE_SW_TX_RST |953				 PCIE_SW_PMA_RST | PCIE_SW_ALLPCS_RST |954				 PCIE_SW_TX_FIFO_RST);955	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_SW_RESET,956				 PCIE_SW_RX_FIFO_RST | PCIE_SW_TX_RST |957				 PCIE_SW_PMA_RST | PCIE_SW_ALLPCS_RST |958				 PCIE_SW_TX_FIFO_RST);959 960	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_PXP_RX0_FE_VB_EQ2,961				   CSR_2L_PXP_RX0_FE_VB_EQ2_EN |962				   CSR_2L_PXP_RX0_FE_VB_EQ3_EN);963	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_RX0_SIGDET_VTH_SEL,964				   CSR_2L_PXP_RX0_FE_VB_EQ1_EN);965	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_RX1_FE_VB_EQ1,966				   CSR_2L_PXP_RX1_FE_VB_EQ1_EN |967				   CSR_2L_PXP_RX1_FE_VB_EQ2_EN |968				   CSR_2L_PXP_RX1_FE_VB_EQ3_EN);969 970	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_REV0,971				       CSR_2L_PXP_FE_GAIN_NORMAL_MODE, 0x4);972	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_REV0,973				       CSR_2L_PXP_FE_GAIN_TRAIN_MODE, 0x4);974	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_REV0,975				       CSR_2L_PXP_FE_GAIN_NORMAL_MODE, 0x4);976	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_REV0,977				       CSR_2L_PXP_FE_GAIN_TRAIN_MODE, 0x4);978}979 980static void airoha_pcie_phy_set_pr(struct airoha_pcie_phy *pcie_phy)981{982	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR0_PR_VREG_IBAND,983				       CSR_2L_PXP_CDR0_PR_VREG_IBAND, 0x5);984	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR0_PR_VREG_IBAND,985				       CSR_2L_PXP_CDR0_PR_VREG_CKBUF, 0x5);986 987	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR0_PR_CKREF_DIV,988				     CSR_2L_PXP_CDR0_PR_CKREF_DIV);989	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR0_PR_COR_HBW,990				     CSR_2L_PXP_CDR0_PR_CKREF_DIV1);991 992	airoha_phy_csr_2l_update_field(pcie_phy,993				       REG_CSR_2L_CDR1_PR_VREG_IBAND_VAL,994				       CSR_2L_PXP_CDR1_PR_VREG_IBAND, 0x5);995	airoha_phy_csr_2l_update_field(pcie_phy,996				       REG_CSR_2L_CDR1_PR_VREG_IBAND_VAL,997				       CSR_2L_PXP_CDR1_PR_VREG_CKBUF, 0x5);998 999	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR1_PR_CKREF_DIV,1000				     CSR_2L_PXP_CDR1_PR_CKREF_DIV);1001	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR1_PR_COR_HBW,1002				     CSR_2L_PXP_CDR1_PR_CKREF_DIV1);1003 1004	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR0_LPF_RATIO,1005				       CSR_2L_PXP_CDR0_LPF_TOP_LIM, 0x20000);1006	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR1_LPF_RATIO,1007				       CSR_2L_PXP_CDR1_LPF_TOP_LIM, 0x20000);1008 1009	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR0_PR_BETA_DAC,1010				       CSR_2L_PXP_CDR0_PR_BETA_SEL, 0x2);1011	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR1_PR_BETA_DAC,1012				       CSR_2L_PXP_CDR1_PR_BETA_SEL, 0x2);1013	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR0_PR_BETA_DAC,1014				       CSR_2L_PXP_CDR0_PR_KBAND_DIV, 0x4);1015	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR1_PR_BETA_DAC,1016				       CSR_2L_PXP_CDR1_PR_KBAND_DIV, 0x4);1017}1018 1019static void airoha_pcie_phy_set_txflow(struct airoha_pcie_phy *pcie_phy)1020{1021	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TX0_CKLDO,1022				   CSR_2L_PXP_TX0_CKLDO_EN);1023	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TX1_CKLDO,1024				   CSR_2L_PXP_TX1_CKLDO_EN);1025 1026	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TX0_CKLDO,1027				   CSR_2L_PXP_TX0_DMEDGEGEN_EN);1028	airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TX1_CKLDO,1029				   CSR_2L_PXP_TX1_DMEDGEGEN_EN);1030	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TX1_MULTLANE,1031				     CSR_2L_PXP_TX1_MULTLANE_EN);1032}1033 1034static void airoha_pcie_phy_set_rx_mode(struct airoha_pcie_phy *pcie_phy)1035{1036	writel(0x804000, pcie_phy->pma0 + REG_PCIE_PMA_DIG_RESERVE_27);1037	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_18,1038				     PCIE_PXP_RX_VTH_SEL_PCIE_G1, 0x5);1039	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_18,1040				     PCIE_PXP_RX_VTH_SEL_PCIE_G2, 0x5);1041	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_18,1042				     PCIE_PXP_RX_VTH_SEL_PCIE_G3, 0x5);1043	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_30,1044				 0x77700);1045 1046	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR0_PR_MONCK,1047				     CSR_2L_PXP_CDR0_PR_MONCK_ENABLE);1048	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR0_PR_MONCK,1049				       CSR_2L_PXP_CDR0_PR_RESERVE0, 0x2);1050	airoha_phy_csr_2l_update_field(pcie_phy,1051				       REG_CSR_2L_PXP_RX0_OSCAL_CTLE1IOS,1052				       CSR_2L_PXP_RX0_PR_OSCAL_VGA1IOS, 0x19);1053	airoha_phy_csr_2l_update_field(pcie_phy,1054				       REG_CSR_2L_PXP_RX0_OSCA_VGA1VOS,1055				       CSR_2L_PXP_RX0_PR_OSCAL_VGA1VOS, 0x19);1056	airoha_phy_csr_2l_update_field(pcie_phy,1057				       REG_CSR_2L_PXP_RX0_OSCA_VGA1VOS,1058				       CSR_2L_PXP_RX0_PR_OSCAL_VGA2IOS, 0x14);1059 1060	writel(0x804000, pcie_phy->pma1 + REG_PCIE_PMA_DIG_RESERVE_27);1061	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_18,1062				     PCIE_PXP_RX_VTH_SEL_PCIE_G1, 0x5);1063	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_18,1064				     PCIE_PXP_RX_VTH_SEL_PCIE_G2, 0x5);1065	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_18,1066				     PCIE_PXP_RX_VTH_SEL_PCIE_G3, 0x5);1067 1068	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_30,1069				 0x77700);1070 1071	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR1_PR_MONCK,1072				     CSR_2L_PXP_CDR1_PR_MONCK_ENABLE);1073	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR1_PR_MONCK,1074				       CSR_2L_PXP_CDR1_PR_RESERVE0, 0x2);1075	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_OSCAL_VGA1IOS,1076				       CSR_2L_PXP_RX1_PR_OSCAL_VGA1IOS, 0x19);1077	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_OSCAL_VGA1IOS,1078				       CSR_2L_PXP_RX1_PR_OSCAL_VGA1VOS, 0x19);1079	airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_OSCAL_VGA1IOS,1080				       CSR_2L_PXP_RX1_PR_OSCAL_VGA2IOS, 0x14);1081}1082 1083static void airoha_pcie_phy_load_kflow(struct airoha_pcie_phy *pcie_phy)1084{1085	airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_12,1086				     PCIE_FORCE_PMA_RX_SPEED, 0xa);1087	airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_12,1088				     PCIE_FORCE_PMA_RX_SPEED, 0xa);1089	airoha_phy_init_lane0_rx_fw_pre_calib(pcie_phy, PCIE_PORT_GEN3);1090	airoha_phy_init_lane1_rx_fw_pre_calib(pcie_phy, PCIE_PORT_GEN3);1091 1092	airoha_phy_pma0_clear_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_12,1093				   PCIE_FORCE_PMA_RX_SPEED);1094	airoha_phy_pma1_clear_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_12,1095				   PCIE_FORCE_PMA_RX_SPEED);1096	usleep_range(100, 200);1097 1098	airoha_phy_init_lane0_rx_fw_pre_calib(pcie_phy, PCIE_PORT_GEN2);1099	airoha_phy_init_lane1_rx_fw_pre_calib(pcie_phy, PCIE_PORT_GEN2);1100}1101 1102/**1103 * airoha_pcie_phy_init() - Initialize the phy1104 * @phy: the phy to be initialized1105 *1106 * Initialize the phy registers.1107 * The hardware settings will be reset during suspend, it should be1108 * reinitialized when the consumer calls phy_init() again on resume.1109 */1110static int airoha_pcie_phy_init(struct phy *phy)1111{1112	struct airoha_pcie_phy *pcie_phy = phy_get_drvdata(phy);1113	u32 val;1114 1115	/* Setup Tx-Rx detection time */1116	val = FIELD_PREP(PCIE_XTP_RXDET_VCM_OFF_STB_T_SEL, 0x33) |1117	      FIELD_PREP(PCIE_XTP_RXDET_EN_STB_T_SEL, 0x1) |1118	      FIELD_PREP(PCIE_XTP_RXDET_FINISH_STB_T_SEL, 0x2) |1119	      FIELD_PREP(PCIE_XTP_TXPD_TX_DATA_EN_DLY, 0x3) |1120	      FIELD_PREP(PCIE_XTP_RXDET_LATCH_STB_T_SEL, 0x1);1121	writel(val, pcie_phy->p0_xr_dtime + REG_PCIE_PEXTP_DIG_GLB44);1122	writel(val, pcie_phy->p1_xr_dtime + REG_PCIE_PEXTP_DIG_GLB44);1123	/* Setup Rx AEQ training time */1124	val = FIELD_PREP(PCIE_XTP_LN_RX_PDOWN_L1P2_EXIT_WAIT, 0x32) |1125	      FIELD_PREP(PCIE_XTP_LN_RX_PDOWN_E0_AEQEN_WAIT, 0x5050);1126	writel(val, pcie_phy->rx_aeq + REG_PCIE_PEXTP_DIG_LN_RX30_P0);1127	writel(val, pcie_phy->rx_aeq + REG_PCIE_PEXTP_DIG_LN_RX30_P1);1128 1129	/* enable load FLL-K flow */1130	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_14,1131				 PCIE_FLL_LOAD_EN);1132	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_14,1133				 PCIE_FLL_LOAD_EN);1134 1135	airoha_pcie_phy_init_default(pcie_phy);1136	airoha_pcie_phy_init_clk_out(pcie_phy);1137	airoha_pcie_phy_init_csr_2l(pcie_phy);1138 1139	usleep_range(100, 200);1140 1141	airoha_pcie_phy_init_rx(pcie_phy);1142	/* phase 1, no ssc for K TXPLL */1143	airoha_pcie_phy_init_jcpll(pcie_phy);1144 1145	usleep_range(500, 600);1146 1147	/* TX PLL settings */1148	airoha_pcie_phy_txpll(pcie_phy);1149 1150	usleep_range(200, 300);1151 1152	/* SSC JCPLL setting */1153	airoha_pcie_phy_init_ssc_jcpll(pcie_phy);1154 1155	usleep_range(100, 200);1156 1157	/* Rx lan0 signal detect */1158	airoha_pcie_phy_set_rxlan0_signal_detect(pcie_phy);1159	/* Rx lan1 signal detect */1160	airoha_pcie_phy_set_rxlan1_signal_detect(pcie_phy);1161	/* RX FLOW */1162	airoha_pcie_phy_set_rxflow(pcie_phy);1163 1164	usleep_range(100, 200);1165 1166	airoha_pcie_phy_set_pr(pcie_phy);1167	/* TX FLOW */1168	airoha_pcie_phy_set_txflow(pcie_phy);1169 1170	usleep_range(100, 200);1171	/* RX mode setting */1172	airoha_pcie_phy_set_rx_mode(pcie_phy);1173	/* Load K-Flow */1174	airoha_pcie_phy_load_kflow(pcie_phy);1175	airoha_phy_pma0_clear_bits(pcie_phy, REG_PCIE_PMA_SS_DA_XPON_PWDB0,1176				   PCIE_DA_XPON_CDR_PR_PWDB);1177	airoha_phy_pma1_clear_bits(pcie_phy, REG_PCIE_PMA_SS_DA_XPON_PWDB0,1178				   PCIE_DA_XPON_CDR_PR_PWDB);1179 1180	usleep_range(100, 200);1181 1182	airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_SS_DA_XPON_PWDB0,1183				 PCIE_DA_XPON_CDR_PR_PWDB);1184	airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_SS_DA_XPON_PWDB0,1185				 PCIE_DA_XPON_CDR_PR_PWDB);1186 1187	/* Wait for the PCIe PHY to complete initialization before returning */1188	msleep(PHY_HW_INIT_TIME_MS);1189 1190	return 0;1191}1192 1193static int airoha_pcie_phy_exit(struct phy *phy)1194{1195	struct airoha_pcie_phy *pcie_phy = phy_get_drvdata(phy);1196 1197	airoha_phy_pma0_clear_bits(pcie_phy, REG_PCIE_PMA_SW_RESET,1198				   PCIE_PMA_SW_RST);1199	airoha_phy_pma1_clear_bits(pcie_phy, REG_PCIE_PMA_SW_RESET,1200				   PCIE_PMA_SW_RST);1201	airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC,1202				     CSR_2L_PXP_JCPLL_SSC_PHASE_INI |1203				     CSR_2L_PXP_JCPLL_SSC_TRI_EN |1204				     CSR_2L_PXP_JCPLL_SSC_EN);1205 1206	return 0;1207}1208 1209static const struct phy_ops airoha_pcie_phy_ops = {1210	.init = airoha_pcie_phy_init,1211	.exit = airoha_pcie_phy_exit,1212	.owner = THIS_MODULE,1213};1214 1215static int airoha_pcie_phy_probe(struct platform_device *pdev)1216{1217	struct airoha_pcie_phy *pcie_phy;1218	struct device *dev = &pdev->dev;1219	struct phy_provider *provider;1220 1221	pcie_phy = devm_kzalloc(dev, sizeof(*pcie_phy), GFP_KERNEL);1222	if (!pcie_phy)1223		return -ENOMEM;1224 1225	pcie_phy->csr_2l = devm_platform_ioremap_resource_byname(pdev, "csr-2l");1226	if (IS_ERR(pcie_phy->csr_2l))1227		return dev_err_probe(dev, PTR_ERR(pcie_phy->csr_2l),1228				     "Failed to map phy-csr-2l base\n");1229 1230	pcie_phy->pma0 = devm_platform_ioremap_resource_byname(pdev, "pma0");1231	if (IS_ERR(pcie_phy->pma0))1232		return dev_err_probe(dev, PTR_ERR(pcie_phy->pma0),1233				     "Failed to map phy-pma0 base\n");1234 1235	pcie_phy->pma1 = devm_platform_ioremap_resource_byname(pdev, "pma1");1236	if (IS_ERR(pcie_phy->pma1))1237		return dev_err_probe(dev, PTR_ERR(pcie_phy->pma1),1238				     "Failed to map phy-pma1 base\n");1239 1240	pcie_phy->phy = devm_phy_create(dev, dev->of_node, &airoha_pcie_phy_ops);1241	if (IS_ERR(pcie_phy->phy))1242		return dev_err_probe(dev, PTR_ERR(pcie_phy->phy),1243				     "Failed to create PCIe phy\n");1244 1245	pcie_phy->p0_xr_dtime =1246		devm_platform_ioremap_resource_byname(pdev, "p0-xr-dtime");1247	if (IS_ERR(pcie_phy->p0_xr_dtime))1248		return dev_err_probe(dev, PTR_ERR(pcie_phy->p0_xr_dtime),1249				     "Failed to map P0 Tx-Rx dtime base\n");1250 1251	pcie_phy->p1_xr_dtime =1252		devm_platform_ioremap_resource_byname(pdev, "p1-xr-dtime");1253	if (IS_ERR(pcie_phy->p1_xr_dtime))1254		return dev_err_probe(dev, PTR_ERR(pcie_phy->p1_xr_dtime),1255				     "Failed to map P1 Tx-Rx dtime base\n");1256 1257	pcie_phy->rx_aeq = devm_platform_ioremap_resource_byname(pdev, "rx-aeq");1258	if (IS_ERR(pcie_phy->rx_aeq))1259		return dev_err_probe(dev, PTR_ERR(pcie_phy->rx_aeq),1260				     "Failed to map Rx AEQ base\n");1261 1262	pcie_phy->dev = dev;1263	phy_set_drvdata(pcie_phy->phy, pcie_phy);1264 1265	provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);1266	if (IS_ERR(provider))1267		return dev_err_probe(dev, PTR_ERR(provider),1268				     "PCIe phy probe failed\n");1269 1270	return 0;1271}1272 1273static const struct of_device_id airoha_pcie_phy_of_match[] = {1274	{ .compatible = "airoha,en7581-pcie-phy" },1275	{ /* sentinel */ }1276};1277MODULE_DEVICE_TABLE(of, airoha_pcie_phy_of_match);1278 1279static struct platform_driver airoha_pcie_phy_driver = {1280	.probe	= airoha_pcie_phy_probe,1281	.driver	= {1282		.name = "airoha-pcie-phy",1283		.of_match_table = airoha_pcie_phy_of_match,1284	},1285};1286module_platform_driver(airoha_pcie_phy_driver);1287 1288MODULE_DESCRIPTION("Airoha PCIe PHY driver");1289MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>");1290MODULE_LICENSE("GPL");1291