Skip to content

Commit 713dcad

Browse files
mmichaliINTCkuba-moo
authored andcommitted
ice: Add support for E825-C TS PLL handling
The CGU layout of E825-C is a little different than E822/E823. Add support the new hardware adding relevant functions. Signed-off-by: Michal Michalik <[email protected]> Reviewed-by: Przemek Kitszel <[email protected]> Reviewed-by: Arkadiusz Kubalewski <[email protected]> Signed-off-by: Karol Kolacinski <[email protected]> Tested-by: Pucha Himasekhar Reddy <[email protected]> Signed-off-by: Jacob Keller <[email protected]> Link: https://lore.kernel.org/r/20240528-next-2024-05-28-ptp-refactors-v1-9-c082739bb6f6@intel.com Signed-off-by: Jakub Kicinski <[email protected]>
1 parent b390ecc commit 713dcad

File tree

6 files changed

+429
-19
lines changed

6 files changed

+429
-19
lines changed

drivers/net/ethernet/intel/ice/ice_cgu_regs.h

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,17 @@ union nac_cgu_dword9 {
2727
u32 val;
2828
};
2929

30+
#define NAC_CGU_DWORD16_E825C 0x40
31+
union nac_cgu_dword16_e825c {
32+
struct {
33+
u32 synce_remndr : 6;
34+
u32 synce_phlmt_en : 1;
35+
u32 misc13 : 17;
36+
u32 tspll_ck_refclkfreq : 8;
37+
};
38+
u32 val;
39+
};
40+
3041
#define NAC_CGU_DWORD19 0x4c
3142
union nac_cgu_dword19 {
3243
struct {
@@ -67,6 +78,22 @@ union nac_cgu_dword22 {
6778
u32 val;
6879
};
6980

81+
#define NAC_CGU_DWORD23_E825C 0x5C
82+
union nac_cgu_dword23_e825c {
83+
struct {
84+
u32 cgupll_fbdiv_intgr : 10;
85+
u32 ux56pll_fbdiv_intgr : 10;
86+
u32 misc20 : 4;
87+
u32 ts_pll_enable : 1;
88+
u32 time_sync_tspll_align_sel : 1;
89+
u32 ext_synce_sel : 1;
90+
u32 ref1588_ck_div : 4;
91+
u32 time_ref_sel : 1;
92+
93+
};
94+
u32 val;
95+
};
96+
7097
#define NAC_CGU_DWORD24 0x60
7198
union nac_cgu_dword24 {
7299
struct {
@@ -113,4 +140,42 @@ union tspll_ro_bwm_lf {
113140
u32 val;
114141
};
115142

143+
#define TSPLL_RO_LOCK_E825C 0x3f0
144+
union tspll_ro_lock_e825c {
145+
struct {
146+
u32 bw_freqov_high_cri_7_0 : 8;
147+
u32 bw_freqov_high_cri_9_8 : 2;
148+
u32 reserved455 : 1;
149+
u32 plllock_gain_tran_cri : 1;
150+
u32 plllock_true_lock_cri : 1;
151+
u32 pllunlock_flag_cri : 1;
152+
u32 afcerr_cri : 1;
153+
u32 afcdone_cri : 1;
154+
u32 feedfwrdgain_cal_cri_7_0 : 8;
155+
u32 reserved462 : 8;
156+
};
157+
u32 val;
158+
};
159+
160+
#define TSPLL_BW_TDC_E825C 0x31c
161+
union tspll_bw_tdc_e825c {
162+
struct {
163+
u32 i_tdc_offset_lock_1_0 : 2;
164+
u32 i_bbthresh1_2_0 : 3;
165+
u32 i_bbthresh2_2_0 : 3;
166+
u32 i_tdcsel_1_0 : 2;
167+
u32 i_tdcovccorr_en_h : 1;
168+
u32 i_divretimeren : 1;
169+
u32 i_bw_ampmeas_window : 1;
170+
u32 i_bw_lowerbound_2_0 : 3;
171+
u32 i_bw_upperbound_2_0 : 3;
172+
u32 i_bw_mode_1_0 : 2;
173+
u32 i_ft_mode_sel_2_0 : 3;
174+
u32 i_bwphase_4_0 : 5;
175+
u32 i_plllock_sel_1_0 : 2;
176+
u32 i_afc_divratio : 1;
177+
};
178+
u32 val;
179+
};
180+
116181
#endif /* _ICE_CGU_REGS_H_ */

drivers/net/ethernet/intel/ice/ice_common.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2314,8 +2314,13 @@ ice_parse_1588_func_caps(struct ice_hw *hw, struct ice_hw_func_caps *func_p,
23142314
info->tmr_index_owned = ((number & ICE_TS_TMR_IDX_OWND_M) != 0);
23152315
info->tmr_index_assoc = ((number & ICE_TS_TMR_IDX_ASSOC_M) != 0);
23162316

2317-
info->clk_freq = FIELD_GET(ICE_TS_CLK_FREQ_M, number);
2318-
info->clk_src = ((number & ICE_TS_CLK_SRC_M) != 0);
2317+
if (!ice_is_e825c(hw)) {
2318+
info->clk_freq = FIELD_GET(ICE_TS_CLK_FREQ_M, number);
2319+
info->clk_src = ((number & ICE_TS_CLK_SRC_M) != 0);
2320+
} else {
2321+
info->clk_freq = ICE_TIME_REF_FREQ_156_250;
2322+
info->clk_src = ICE_CLK_SRC_TCXO;
2323+
}
23192324

23202325
if (info->clk_freq < NUM_ICE_TIME_REF_FREQ) {
23212326
info->time_ref = (enum ice_time_ref_freq)info->clk_freq;

drivers/net/ethernet/intel/ice/ice_ptp_consts.h

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,93 @@ const struct ice_cgu_pll_params_e82x e822_cgu_params[NUM_ICE_TIME_REF_FREQ] = {
470470
},
471471
};
472472

473+
const
474+
struct ice_cgu_pll_params_e825c e825c_cgu_params[NUM_ICE_TIME_REF_FREQ] = {
475+
/* ICE_TIME_REF_FREQ_25_000 -> 25 MHz */
476+
{
477+
/* tspll_ck_refclkfreq */
478+
0x19,
479+
/* tspll_ndivratio */
480+
1,
481+
/* tspll_fbdiv_intgr */
482+
320,
483+
/* tspll_fbdiv_frac */
484+
0,
485+
/* ref1588_ck_div */
486+
0,
487+
},
488+
489+
/* ICE_TIME_REF_FREQ_122_880 -> 122.88 MHz */
490+
{
491+
/* tspll_ck_refclkfreq */
492+
0x29,
493+
/* tspll_ndivratio */
494+
3,
495+
/* tspll_fbdiv_intgr */
496+
195,
497+
/* tspll_fbdiv_frac */
498+
1342177280UL,
499+
/* ref1588_ck_div */
500+
0,
501+
},
502+
503+
/* ICE_TIME_REF_FREQ_125_000 -> 125 MHz */
504+
{
505+
/* tspll_ck_refclkfreq */
506+
0x3E,
507+
/* tspll_ndivratio */
508+
2,
509+
/* tspll_fbdiv_intgr */
510+
128,
511+
/* tspll_fbdiv_frac */
512+
0,
513+
/* ref1588_ck_div */
514+
0,
515+
},
516+
517+
/* ICE_TIME_REF_FREQ_153_600 -> 153.6 MHz */
518+
{
519+
/* tspll_ck_refclkfreq */
520+
0x33,
521+
/* tspll_ndivratio */
522+
3,
523+
/* tspll_fbdiv_intgr */
524+
156,
525+
/* tspll_fbdiv_frac */
526+
1073741824UL,
527+
/* ref1588_ck_div */
528+
0,
529+
},
530+
531+
/* ICE_TIME_REF_FREQ_156_250 -> 156.25 MHz */
532+
{
533+
/* tspll_ck_refclkfreq */
534+
0x1F,
535+
/* tspll_ndivratio */
536+
5,
537+
/* tspll_fbdiv_intgr */
538+
256,
539+
/* tspll_fbdiv_frac */
540+
0,
541+
/* ref1588_ck_div */
542+
0,
543+
},
544+
545+
/* ICE_TIME_REF_FREQ_245_760 -> 245.76 MHz */
546+
{
547+
/* tspll_ck_refclkfreq */
548+
0x52,
549+
/* tspll_ndivratio */
550+
3,
551+
/* tspll_fbdiv_intgr */
552+
97,
553+
/* tspll_fbdiv_frac */
554+
2818572288UL,
555+
/* ref1588_ck_div */
556+
0,
557+
},
558+
};
559+
473560
/* struct ice_vernier_info_e82x
474561
*
475562
* E822 hardware calibrates the delay of the timestamp indication from the

0 commit comments

Comments
 (0)