Lines Matching full:bp

28 static struct macb_dma_desc_ptp *macb_ptp_desc(struct macb *bp,  in macb_ptp_desc()  argument
31 if (bp->hw_dma_cap == HW_DMA_CAP_PTP) in macb_ptp_desc()
34 if (bp->hw_dma_cap == HW_DMA_CAP_64B_PTP) in macb_ptp_desc()
44 struct macb *bp = container_of(ptp, struct macb, ptp_clock_info); in gem_tsu_get_time() local
49 spin_lock_irqsave(&bp->tsu_clk_lock, flags); in gem_tsu_get_time()
51 first = gem_readl(bp, TN); in gem_tsu_get_time()
53 secl = gem_readl(bp, TSL); in gem_tsu_get_time()
54 sech = gem_readl(bp, TSH); in gem_tsu_get_time()
55 second = gem_readl(bp, TN); in gem_tsu_get_time()
63 ts->tv_nsec = gem_readl(bp, TN); in gem_tsu_get_time()
65 secl = gem_readl(bp, TSL); in gem_tsu_get_time()
66 sech = gem_readl(bp, TSH); in gem_tsu_get_time()
71 spin_unlock_irqrestore(&bp->tsu_clk_lock, flags); in gem_tsu_get_time()
80 struct macb *bp = container_of(ptp, struct macb, ptp_clock_info); in gem_tsu_set_time() local
88 spin_lock_irqsave(&bp->tsu_clk_lock, flags); in gem_tsu_set_time()
91 gem_writel(bp, TN, 0); /* clear to avoid overflow */ in gem_tsu_set_time()
92 gem_writel(bp, TSH, sech); in gem_tsu_set_time()
94 gem_writel(bp, TSL, secl); in gem_tsu_set_time()
95 gem_writel(bp, TN, ns); in gem_tsu_set_time()
97 spin_unlock_irqrestore(&bp->tsu_clk_lock, flags); in gem_tsu_set_time()
102 static int gem_tsu_incr_set(struct macb *bp, struct tsu_incr *incr_spec) in gem_tsu_incr_set() argument
111 spin_lock_irqsave(&bp->tsu_clk_lock, flags); in gem_tsu_incr_set()
113 gem_writel(bp, TISUBN, GEM_BF(SUBNSINCRL, incr_spec->sub_ns) | in gem_tsu_incr_set()
116 gem_writel(bp, TI, GEM_BF(NSINCR, incr_spec->ns)); in gem_tsu_incr_set()
117 spin_unlock_irqrestore(&bp->tsu_clk_lock, flags); in gem_tsu_incr_set()
124 struct macb *bp = container_of(ptp, struct macb, ptp_clock_info); in gem_ptp_adjfine() local
136 incr_spec.sub_ns = bp->tsu_incr.sub_ns; in gem_ptp_adjfine()
137 incr_spec.ns = bp->tsu_incr.ns; in gem_ptp_adjfine()
153 gem_tsu_incr_set(bp, &incr_spec); in gem_ptp_adjfine()
159 struct macb *bp = container_of(ptp, struct macb, ptp_clock_info); in gem_ptp_adjtime() local
169 gem_tsu_get_time(&bp->ptp_clock_info, &now, NULL); in gem_ptp_adjtime()
172 gem_tsu_set_time(&bp->ptp_clock_info, in gem_ptp_adjtime()
177 gem_writel(bp, TA, adj); in gem_ptp_adjtime()
205 static void gem_ptp_init_timer(struct macb *bp) in gem_ptp_init_timer() argument
210 bp->tsu_incr.ns = div_u64_rem(NSEC_PER_SEC, bp->tsu_rate, &rem); in gem_ptp_init_timer()
214 bp->tsu_incr.sub_ns = div_u64(adj, bp->tsu_rate); in gem_ptp_init_timer()
216 bp->tsu_incr.sub_ns = 0; in gem_ptp_init_timer()
220 static void gem_ptp_init_tsu(struct macb *bp) in gem_ptp_init_tsu() argument
228 gem_tsu_set_time(&bp->ptp_clock_info, &ts); in gem_ptp_init_tsu()
231 gem_tsu_incr_set(bp, &bp->tsu_incr); in gem_ptp_init_tsu()
233 gem_writel(bp, TA, 0); in gem_ptp_init_tsu()
236 static void gem_ptp_clear_timer(struct macb *bp) in gem_ptp_clear_timer() argument
238 bp->tsu_incr.sub_ns = 0; in gem_ptp_clear_timer()
239 bp->tsu_incr.ns = 0; in gem_ptp_clear_timer()
241 gem_writel(bp, TISUBN, GEM_BF(SUBNSINCR, 0)); in gem_ptp_clear_timer()
242 gem_writel(bp, TI, GEM_BF(NSINCR, 0)); in gem_ptp_clear_timer()
243 gem_writel(bp, TA, 0); in gem_ptp_clear_timer()
246 static int gem_hw_timestamp(struct macb *bp, u32 dma_desc_ts_1, in gem_hw_timestamp() argument
259 gem_tsu_get_time(&bp->ptp_clock_info, &tsu, NULL); in gem_hw_timestamp()
274 void gem_ptp_rxstamp(struct macb *bp, struct sk_buff *skb, in gem_ptp_rxstamp() argument
282 desc_ptp = macb_ptp_desc(bp, desc); in gem_ptp_rxstamp()
285 dev_warn_ratelimited(&bp->pdev->dev, in gem_ptp_rxstamp()
289 gem_hw_timestamp(bp, desc_ptp->ts_1, desc_ptp->ts_2, &ts); in gem_ptp_rxstamp()
295 void gem_ptp_txstamp(struct macb *bp, struct sk_buff *skb, in gem_ptp_txstamp() argument
303 dev_warn_ratelimited(&bp->pdev->dev, in gem_ptp_txstamp()
308 desc_ptp = macb_ptp_desc(bp, desc); in gem_ptp_txstamp()
311 dev_warn_ratelimited(&bp->pdev->dev, in gem_ptp_txstamp()
318 gem_hw_timestamp(bp, desc_ptp->ts_1, desc_ptp->ts_2, &ts); in gem_ptp_txstamp()
327 struct macb *bp = netdev_priv(dev); in gem_ptp_init() local
329 bp->ptp_clock_info = gem_ptp_caps_template; in gem_ptp_init()
332 bp->tsu_rate = bp->ptp_info->get_tsu_rate(bp); in gem_ptp_init()
333 bp->ptp_clock_info.max_adj = bp->ptp_info->get_ptp_max_adj(); in gem_ptp_init()
334 gem_ptp_init_timer(bp); in gem_ptp_init()
335 bp->ptp_clock = ptp_clock_register(&bp->ptp_clock_info, &dev->dev); in gem_ptp_init()
336 if (IS_ERR(bp->ptp_clock)) { in gem_ptp_init()
338 PTR_ERR(bp->ptp_clock)); in gem_ptp_init()
339 bp->ptp_clock = NULL; in gem_ptp_init()
341 } else if (bp->ptp_clock == NULL) { in gem_ptp_init()
346 spin_lock_init(&bp->tsu_clk_lock); in gem_ptp_init()
348 gem_ptp_init_tsu(bp); in gem_ptp_init()
350 dev_info(&bp->pdev->dev, "%s ptp clock registered.\n", in gem_ptp_init()
356 struct macb *bp = netdev_priv(ndev); in gem_ptp_remove() local
358 if (bp->ptp_clock) in gem_ptp_remove()
359 ptp_clock_unregister(bp->ptp_clock); in gem_ptp_remove()
361 gem_ptp_clear_timer(bp); in gem_ptp_remove()
363 dev_info(&bp->pdev->dev, "%s ptp clock unregistered.\n", in gem_ptp_remove()
367 static int gem_ptp_set_ts_mode(struct macb *bp, in gem_ptp_set_ts_mode() argument
371 gem_writel(bp, TXBDCTRL, GEM_BF(TXTSMODE, tx_bd_control)); in gem_ptp_set_ts_mode()
372 gem_writel(bp, RXBDCTRL, GEM_BF(RXTSMODE, rx_bd_control)); in gem_ptp_set_ts_mode()
380 struct macb *bp = netdev_priv(dev); in gem_get_hwtst() local
382 *tstamp_config = bp->tstamp_config; in gem_get_hwtst()
383 if ((bp->hw_dma_cap & HW_DMA_CAP_PTP) == 0) in gem_get_hwtst()
389 static void gem_ptp_set_one_step_sync(struct macb *bp, u8 enable) in gem_ptp_set_one_step_sync() argument
393 reg_val = macb_readl(bp, NCR); in gem_ptp_set_one_step_sync()
396 macb_writel(bp, NCR, reg_val | MACB_BIT(OSSMODE)); in gem_ptp_set_one_step_sync()
398 macb_writel(bp, NCR, reg_val & ~MACB_BIT(OSSMODE)); in gem_ptp_set_one_step_sync()
407 struct macb *bp = netdev_priv(dev); in gem_set_hwtst() local
410 if ((bp->hw_dma_cap & HW_DMA_CAP_PTP) == 0) in gem_set_hwtst()
417 gem_ptp_set_one_step_sync(bp, 1); in gem_set_hwtst()
421 gem_ptp_set_one_step_sync(bp, 0); in gem_set_hwtst()
446 regval = macb_readl(bp, NCR); in gem_set_hwtst()
447 macb_writel(bp, NCR, (regval | MACB_BIT(SRTSM))); in gem_set_hwtst()
459 bp->tstamp_config = *tstamp_config; in gem_set_hwtst()
461 if (gem_ptp_set_ts_mode(bp, tx_bd_control, rx_bd_control) != 0) in gem_set_hwtst()