Skip to content

Commit 172db5f

Browse files
Maciej Machnikowskianguy11
authored andcommitted
ice: add support for auxiliary input/output pins
The E810 device supports programmable pins for enabling both input and output events related to the PTP hardware clock. This includes both output signals with programmable period, as well as timestamping of events on input pins. Add support for enabling these using the CONFIG_PTP_1588_CLOCK interface. This allows programming the software defined pins to take advantage of the hardware clock features. Signed-off-by: Maciej Machnikowski <[email protected]> Signed-off-by: Jacob Keller <[email protected]> Signed-off-by: Tony Nguyen <[email protected]>
1 parent 3089cf6 commit 172db5f

File tree

4 files changed

+366
-0
lines changed

4 files changed

+366
-0
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@
138138
#define GLGEN_CLKSTAT_SRC_PSM_CLK_SRC_S 4
139139
#define GLGEN_CLKSTAT_SRC_PSM_CLK_SRC_M ICE_M(0x3, 4)
140140
#define GLGEN_CLKSTAT_SRC 0x000B826C
141+
#define GLGEN_GPIO_CTL(_i) (0x000880C8 + ((_i) * 4))
142+
#define GLGEN_GPIO_CTL_PIN_DIR_M BIT(4)
143+
#define GLGEN_GPIO_CTL_PIN_FUNC_S 8
144+
#define GLGEN_GPIO_CTL_PIN_FUNC_M ICE_M(0xF, 8)
141145
#define GLGEN_RSTAT 0x000B8188
142146
#define GLGEN_RSTAT_DEVSTATE_M ICE_M(0x3, 0)
143147
#define GLGEN_RSTCTL 0x000B8180
@@ -203,6 +207,7 @@
203207
#define PFINT_MBX_CTL_CAUSE_ENA_M BIT(30)
204208
#define PFINT_OICR 0x0016CA00
205209
#define PFINT_OICR_TSYN_TX_M BIT(11)
210+
#define PFINT_OICR_TSYN_EVNT_M BIT(12)
206211
#define PFINT_OICR_ECC_ERR_M BIT(16)
207212
#define PFINT_OICR_MAL_DETECT_M BIT(19)
208213
#define PFINT_OICR_GRST_M BIT(20)
@@ -434,10 +439,18 @@
434439
#define GLV_UPRCL(_i) (0x003B2000 + ((_i) * 8))
435440
#define GLV_UPTCL(_i) (0x0030A000 + ((_i) * 8))
436441
#define PRTRPB_RDPC 0x000AC260
442+
#define GLTSYN_AUX_IN_0(_i) (0x000889D8 + ((_i) * 4))
443+
#define GLTSYN_AUX_IN_0_INT_ENA_M BIT(4)
444+
#define GLTSYN_AUX_OUT_0(_i) (0x00088998 + ((_i) * 4))
445+
#define GLTSYN_AUX_OUT_0_OUT_ENA_M BIT(0)
446+
#define GLTSYN_AUX_OUT_0_OUTMOD_M ICE_M(0x3, 1)
447+
#define GLTSYN_CLKO_0(_i) (0x000889B8 + ((_i) * 4))
437448
#define GLTSYN_CMD 0x00088810
438449
#define GLTSYN_CMD_SYNC 0x00088814
439450
#define GLTSYN_ENA(_i) (0x00088808 + ((_i) * 4))
440451
#define GLTSYN_ENA_TSYN_ENA_M BIT(0)
452+
#define GLTSYN_EVNT_H_0(_i) (0x00088970 + ((_i) * 4))
453+
#define GLTSYN_EVNT_L_0(_i) (0x00088968 + ((_i) * 4))
441454
#define GLTSYN_INCVAL_H(_i) (0x00088920 + ((_i) * 4))
442455
#define GLTSYN_INCVAL_L(_i) (0x00088918 + ((_i) * 4))
443456
#define GLTSYN_SHADJ_H(_i) (0x00088910 + ((_i) * 4))
@@ -446,7 +459,12 @@
446459
#define GLTSYN_SHTIME_H(_i) (0x000888F0 + ((_i) * 4))
447460
#define GLTSYN_SHTIME_L(_i) (0x000888E8 + ((_i) * 4))
448461
#define GLTSYN_STAT(_i) (0x000888C0 + ((_i) * 4))
462+
#define GLTSYN_STAT_EVENT0_M BIT(0)
463+
#define GLTSYN_STAT_EVENT1_M BIT(1)
464+
#define GLTSYN_STAT_EVENT2_M BIT(2)
449465
#define GLTSYN_SYNC_DLAY 0x00088818
466+
#define GLTSYN_TGT_H_0(_i) (0x00088930 + ((_i) * 4))
467+
#define GLTSYN_TGT_L_0(_i) (0x00088928 + ((_i) * 4))
450468
#define GLTSYN_TIME_H(_i) (0x000888D8 + ((_i) * 4))
451469
#define GLTSYN_TIME_L(_i) (0x000888D0 + ((_i) * 4))
452470
#define PFTSYN_SEM 0x00088880

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2817,6 +2817,18 @@ static irqreturn_t ice_misc_intr(int __always_unused irq, void *data)
28172817
ice_ptp_process_ts(pf);
28182818
}
28192819

2820+
if (oicr & PFINT_OICR_TSYN_EVNT_M) {
2821+
u8 tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
2822+
u32 gltsyn_stat = rd32(hw, GLTSYN_STAT(tmr_idx));
2823+
2824+
/* Save EVENTs from GTSYN register */
2825+
pf->ptp.ext_ts_irq |= gltsyn_stat & (GLTSYN_STAT_EVENT0_M |
2826+
GLTSYN_STAT_EVENT1_M |
2827+
GLTSYN_STAT_EVENT2_M);
2828+
ena_mask &= ~PFINT_OICR_TSYN_EVNT_M;
2829+
kthread_queue_work(pf->ptp.kworker, &pf->ptp.extts_work);
2830+
}
2831+
28202832
#define ICE_AUX_CRIT_ERR (PFINT_OICR_PE_CRITERR_M | PFINT_OICR_HMC_ERR_M | PFINT_OICR_PE_PUSH_M)
28212833
if (oicr & ICE_AUX_CRIT_ERR) {
28222834
struct iidc_event *event;

0 commit comments

Comments
 (0)