Message ID | 20220424145824.2931449-1-horatiu.vultur@microchip.com |
---|---|
Headers | show |
Series | net: lan966x: Add support for PTP programmable pins | expand |
On Sun, Apr 24, 2022 at 04:58:24PM +0200, Horatiu Vultur wrote: > @@ -321,6 +321,63 @@ irqreturn_t lan966x_ptp_irq_handler(int irq, void *args) > return IRQ_HANDLED; > } > > +irqreturn_t lan966x_ptp_ext_irq_handler(int irq, void *args) > +{ > + struct lan966x *lan966x = args; > + struct lan966x_phc *phc; > + unsigned long flags; > + u64 time = 0; > + time64_t s; > + int pin, i; > + s64 ns; > + > + if (!(lan_rd(lan966x, PTP_PIN_INTR))) > + return IRQ_NONE; > + > + /* Go through all domains and see which pin generated the interrupt */ > + for (i = 0; i < LAN966X_PHC_COUNT; ++i) { > + struct ptp_clock_event ptp_event = {0}; > + > + phc = &lan966x->phc[i]; > + pin = ptp_find_pin(phc->clock, PTP_PF_EXTTS, 0); Not safe to call ptp_find_pin() from ISR. See comment in include/linux/ptp_clock_kernel.h Thanks, Richard
The 04/24/2022 08:09, Richard Cochran wrote: Hi Richard, > > On Sun, Apr 24, 2022 at 04:58:24PM +0200, Horatiu Vultur wrote: > > > @@ -321,6 +321,63 @@ irqreturn_t lan966x_ptp_irq_handler(int irq, void *args) > > return IRQ_HANDLED; > > } > > > > +irqreturn_t lan966x_ptp_ext_irq_handler(int irq, void *args) > > +{ > > + struct lan966x *lan966x = args; > > + struct lan966x_phc *phc; > > + unsigned long flags; > > + u64 time = 0; > > + time64_t s; > > + int pin, i; > > + s64 ns; > > + > > + if (!(lan_rd(lan966x, PTP_PIN_INTR))) > > + return IRQ_NONE; > > + > > + /* Go through all domains and see which pin generated the interrupt */ > > + for (i = 0; i < LAN966X_PHC_COUNT; ++i) { > > + struct ptp_clock_event ptp_event = {0}; > > + > > + phc = &lan966x->phc[i]; > > + pin = ptp_find_pin(phc->clock, PTP_PF_EXTTS, 0); > > Not safe to call ptp_find_pin() from ISR. See comment in include/linux/ptp_clock_kernel.h Good catch. From what I can see, I should be able to use ptp_find_pin_unlocked. > > Thanks, > Richard