Lines Matching full:lp

69 static u32 _temac_ior_be(struct temac_local *lp, int offset)  in _temac_ior_be()  argument
71 return ioread32be(lp->regs + offset); in _temac_ior_be()
74 static void _temac_iow_be(struct temac_local *lp, int offset, u32 value) in _temac_iow_be() argument
76 return iowrite32be(value, lp->regs + offset); in _temac_iow_be()
79 static u32 _temac_ior_le(struct temac_local *lp, int offset) in _temac_ior_le() argument
81 return ioread32(lp->regs + offset); in _temac_ior_le()
84 static void _temac_iow_le(struct temac_local *lp, int offset, u32 value) in _temac_iow_le() argument
86 return iowrite32(value, lp->regs + offset); in _temac_iow_le()
89 static bool hard_acs_rdy(struct temac_local *lp) in hard_acs_rdy() argument
91 return temac_ior(lp, XTE_RDY0_OFFSET) & XTE_RDY0_HARD_ACS_RDY_MASK; in hard_acs_rdy()
94 static bool hard_acs_rdy_or_timeout(struct temac_local *lp, ktime_t timeout) in hard_acs_rdy_or_timeout() argument
98 return hard_acs_rdy(lp) || ktime_after(cur, timeout); in hard_acs_rdy_or_timeout()
111 int temac_indirect_busywait(struct temac_local *lp) in temac_indirect_busywait() argument
115 spin_until_cond(hard_acs_rdy_or_timeout(lp, timeout)); in temac_indirect_busywait()
116 if (WARN_ON(!hard_acs_rdy(lp))) in temac_indirect_busywait()
124 * must be called without lp->indirect_lock being held.
126 u32 temac_indirect_in32(struct temac_local *lp, int reg) in temac_indirect_in32() argument
131 spin_lock_irqsave(lp->indirect_lock, flags); in temac_indirect_in32()
132 val = temac_indirect_in32_locked(lp, reg); in temac_indirect_in32()
133 spin_unlock_irqrestore(lp->indirect_lock, flags); in temac_indirect_in32()
139 * function must be called with lp->indirect_lock being held. Use
144 u32 temac_indirect_in32_locked(struct temac_local *lp, int reg) in temac_indirect_in32_locked() argument
150 if (WARN_ON(temac_indirect_busywait(lp))) in temac_indirect_in32_locked()
153 temac_iow(lp, XTE_CTL0_OFFSET, reg); in temac_indirect_in32_locked()
159 if (WARN_ON(temac_indirect_busywait(lp))) in temac_indirect_in32_locked()
162 return temac_ior(lp, XTE_LSW0_OFFSET); in temac_indirect_in32_locked()
167 * must be called without lp->indirect_lock being held.
169 void temac_indirect_out32(struct temac_local *lp, int reg, u32 value) in temac_indirect_out32() argument
173 spin_lock_irqsave(lp->indirect_lock, flags); in temac_indirect_out32()
174 temac_indirect_out32_locked(lp, reg, value); in temac_indirect_out32()
175 spin_unlock_irqrestore(lp->indirect_lock, flags); in temac_indirect_out32()
180 * function must be called with lp->indirect_lock being held. Use
185 void temac_indirect_out32_locked(struct temac_local *lp, int reg, u32 value) in temac_indirect_out32_locked() argument
191 if (WARN_ON(temac_indirect_busywait(lp))) in temac_indirect_out32_locked()
194 temac_iow(lp, XTE_LSW0_OFFSET, value); in temac_indirect_out32_locked()
195 temac_iow(lp, XTE_CTL0_OFFSET, CNTLREG_WRITE_ENABLE_MASK | reg); in temac_indirect_out32_locked()
200 WARN_ON(temac_indirect_busywait(lp)); in temac_indirect_out32_locked()
207 * lp->dma_in32.
209 static u32 temac_dma_in32_be(struct temac_local *lp, int reg) in temac_dma_in32_be() argument
211 return ioread32be(lp->sdma_regs + (reg << 2)); in temac_dma_in32_be()
214 static u32 temac_dma_in32_le(struct temac_local *lp, int reg) in temac_dma_in32_le() argument
216 return ioread32(lp->sdma_regs + (reg << 2)); in temac_dma_in32_le()
223 * lp->dma_out32.
225 static void temac_dma_out32_be(struct temac_local *lp, int reg, u32 value) in temac_dma_out32_be() argument
227 iowrite32be(value, lp->sdma_regs + (reg << 2)); in temac_dma_out32_be()
230 static void temac_dma_out32_le(struct temac_local *lp, int reg, u32 value) in temac_dma_out32_le() argument
232 iowrite32(value, lp->sdma_regs + (reg << 2)); in temac_dma_out32_le()
244 static u32 temac_dma_dcr_in(struct temac_local *lp, int reg) in temac_dma_dcr_in() argument
246 return dcr_read(lp->sdma_dcrs, reg); in temac_dma_dcr_in()
252 static void temac_dma_dcr_out(struct temac_local *lp, int reg, u32 value) in temac_dma_dcr_out() argument
254 dcr_write(lp->sdma_dcrs, reg, value); in temac_dma_dcr_out()
261 static int temac_dcr_setup(struct temac_local *lp, struct platform_device *op, in temac_dcr_setup() argument
270 lp->sdma_dcrs = dcr_map(np, dcrs, dcr_resource_len(np, 0)); in temac_dcr_setup()
271 lp->dma_in = temac_dma_dcr_in; in temac_dcr_setup()
272 lp->dma_out = temac_dma_dcr_out; in temac_dcr_setup()
286 static int temac_dcr_setup(struct temac_local *lp, struct platform_device *op, in temac_dcr_setup() argument
299 struct temac_local *lp = netdev_priv(ndev); in temac_dma_bd_release() local
303 lp->dma_out(lp, DMA_CONTROL_REG, DMA_CONTROL_RST); in temac_dma_bd_release()
305 for (i = 0; i < lp->rx_bd_num; i++) { in temac_dma_bd_release()
306 if (!lp->rx_skb[i]) in temac_dma_bd_release()
308 dma_unmap_single(ndev->dev.parent, lp->rx_bd_v[i].phys, in temac_dma_bd_release()
310 dev_kfree_skb(lp->rx_skb[i]); in temac_dma_bd_release()
312 if (lp->rx_bd_v) in temac_dma_bd_release()
314 sizeof(*lp->rx_bd_v) * lp->rx_bd_num, in temac_dma_bd_release()
315 lp->rx_bd_v, lp->rx_bd_p); in temac_dma_bd_release()
316 if (lp->tx_bd_v) in temac_dma_bd_release()
318 sizeof(*lp->tx_bd_v) * lp->tx_bd_num, in temac_dma_bd_release()
319 lp->tx_bd_v, lp->tx_bd_p); in temac_dma_bd_release()
327 struct temac_local *lp = netdev_priv(ndev); in temac_dma_bd_init() local
332 lp->rx_skb = devm_kcalloc(&ndev->dev, lp->rx_bd_num, in temac_dma_bd_init()
333 sizeof(*lp->rx_skb), GFP_KERNEL); in temac_dma_bd_init()
334 if (!lp->rx_skb) in temac_dma_bd_init()
339 lp->tx_bd_v = dma_alloc_coherent(ndev->dev.parent, in temac_dma_bd_init()
340 sizeof(*lp->tx_bd_v) * lp->tx_bd_num, in temac_dma_bd_init()
341 &lp->tx_bd_p, GFP_KERNEL); in temac_dma_bd_init()
342 if (!lp->tx_bd_v) in temac_dma_bd_init()
345 lp->rx_bd_v = dma_alloc_coherent(ndev->dev.parent, in temac_dma_bd_init()
346 sizeof(*lp->rx_bd_v) * lp->rx_bd_num, in temac_dma_bd_init()
347 &lp->rx_bd_p, GFP_KERNEL); in temac_dma_bd_init()
348 if (!lp->rx_bd_v) in temac_dma_bd_init()
351 for (i = 0; i < lp->tx_bd_num; i++) { in temac_dma_bd_init()
352 lp->tx_bd_v[i].next = cpu_to_be32(lp->tx_bd_p in temac_dma_bd_init()
353 + sizeof(*lp->tx_bd_v) * ((i + 1) % lp->tx_bd_num)); in temac_dma_bd_init()
356 for (i = 0; i < lp->rx_bd_num; i++) { in temac_dma_bd_init()
357 lp->rx_bd_v[i].next = cpu_to_be32(lp->rx_bd_p in temac_dma_bd_init()
358 + sizeof(*lp->rx_bd_v) * ((i + 1) % lp->rx_bd_num)); in temac_dma_bd_init()
366 lp->rx_skb[i] = skb; in temac_dma_bd_init()
373 lp->rx_bd_v[i].phys = cpu_to_be32(skb_dma_addr); in temac_dma_bd_init()
374 lp->rx_bd_v[i].len = cpu_to_be32(XTE_MAX_JUMBO_FRAME_SIZE); in temac_dma_bd_init()
375 lp->rx_bd_v[i].app0 = cpu_to_be32(STS_CTRL_APP0_IRQONEND); in temac_dma_bd_init()
379 lp->dma_out(lp, TX_CHNL_CTRL, in temac_dma_bd_init()
380 lp->coalesce_delay_tx << 24 | lp->coalesce_count_tx << 16 | in temac_dma_bd_init()
384 lp->dma_out(lp, RX_CHNL_CTRL, in temac_dma_bd_init()
385 lp->coalesce_delay_rx << 24 | lp->coalesce_count_rx << 16 | in temac_dma_bd_init()
391 lp->tx_bd_ci = 0; in temac_dma_bd_init()
392 lp->tx_bd_tail = 0; in temac_dma_bd_init()
393 lp->rx_bd_ci = 0; in temac_dma_bd_init()
394 lp->rx_bd_tail = lp->rx_bd_num - 1; in temac_dma_bd_init()
398 lp->dma_out(lp, RX_CURDESC_PTR, lp->rx_bd_p); in temac_dma_bd_init()
399 lp->dma_out(lp, RX_TAILDESC_PTR, in temac_dma_bd_init()
400 lp->rx_bd_p + (sizeof(*lp->rx_bd_v) * lp->rx_bd_tail)); in temac_dma_bd_init()
403 lp->dma_out(lp, TX_CURDESC_PTR, lp->tx_bd_p); in temac_dma_bd_init()
418 struct temac_local *lp = netdev_priv(ndev); in temac_do_set_mac_address() local
422 spin_lock_irqsave(lp->indirect_lock, flags); in temac_do_set_mac_address()
423 temac_indirect_out32_locked(lp, XTE_UAW0_OFFSET, in temac_do_set_mac_address()
431 temac_indirect_out32_locked(lp, XTE_UAW1_OFFSET, in temac_do_set_mac_address()
434 spin_unlock_irqrestore(lp->indirect_lock, flags); in temac_do_set_mac_address()
459 struct temac_local *lp = netdev_priv(ndev); in temac_set_multicast_list() local
467 temac_indirect_out32(lp, XTE_AFM_OFFSET, XTE_AFM_EPPRM_MASK); in temac_set_multicast_list()
472 spin_lock_irqsave(lp->indirect_lock, flags); in temac_set_multicast_list()
484 temac_indirect_out32_locked(lp, XTE_MAW0_OFFSET, in temac_set_multicast_list()
488 temac_indirect_out32_locked(lp, XTE_MAW1_OFFSET, in temac_set_multicast_list()
496 temac_indirect_out32_locked(lp, XTE_MAW0_OFFSET, 0); in temac_set_multicast_list()
497 temac_indirect_out32_locked(lp, XTE_MAW1_OFFSET, i << 16); in temac_set_multicast_list()
502 if (temac_indirect_in32_locked(lp, XTE_AFM_OFFSET) in temac_set_multicast_list()
504 temac_indirect_out32_locked(lp, XTE_AFM_OFFSET, 0); in temac_set_multicast_list()
508 spin_unlock_irqrestore(lp->indirect_lock, flags); in temac_set_multicast_list()
599 struct temac_local *lp = netdev_priv(ndev); in temac_setoptions() local
604 spin_lock_irqsave(lp->indirect_lock, flags); in temac_setoptions()
606 reg = temac_indirect_in32_locked(lp, tp->reg) & ~tp->m_or; in temac_setoptions()
609 temac_indirect_out32_locked(lp, tp->reg, reg); in temac_setoptions()
613 spin_unlock_irqrestore(lp->indirect_lock, flags); in temac_setoptions()
614 lp->options |= options; in temac_setoptions()
622 struct temac_local *lp = netdev_priv(ndev); in temac_device_reset() local
635 temac_indirect_out32(lp, XTE_RXC1_OFFSET, XTE_RXC1_RXRST_MASK); in temac_device_reset()
637 while (temac_indirect_in32(lp, XTE_RXC1_OFFSET) & XTE_RXC1_RXRST_MASK) { in temac_device_reset()
647 temac_indirect_out32(lp, XTE_TXC_OFFSET, XTE_TXC_TXRST_MASK); in temac_device_reset()
649 while (temac_indirect_in32(lp, XTE_TXC_OFFSET) & XTE_TXC_TXRST_MASK) { in temac_device_reset()
659 spin_lock_irqsave(lp->indirect_lock, flags); in temac_device_reset()
660 val = temac_indirect_in32_locked(lp, XTE_RXC1_OFFSET); in temac_device_reset()
661 temac_indirect_out32_locked(lp, XTE_RXC1_OFFSET, in temac_device_reset()
663 spin_unlock_irqrestore(lp->indirect_lock, flags); in temac_device_reset()
666 lp->dma_out(lp, DMA_CONTROL_REG, DMA_CONTROL_RST); in temac_device_reset()
668 while (lp->dma_in(lp, DMA_CONTROL_REG) & DMA_CONTROL_RST) { in temac_device_reset()
676 lp->dma_out(lp, DMA_CONTROL_REG, DMA_TAIL_ENABLE); in temac_device_reset()
683 spin_lock_irqsave(lp->indirect_lock, flags); in temac_device_reset()
684 temac_indirect_out32_locked(lp, XTE_RXC0_OFFSET, 0); in temac_device_reset()
685 temac_indirect_out32_locked(lp, XTE_RXC1_OFFSET, 0); in temac_device_reset()
686 temac_indirect_out32_locked(lp, XTE_TXC_OFFSET, 0); in temac_device_reset()
687 temac_indirect_out32_locked(lp, XTE_FCC_OFFSET, XTE_FCC_RXFLO_MASK); in temac_device_reset()
688 spin_unlock_irqrestore(lp->indirect_lock, flags); in temac_device_reset()
694 lp->options & ~(XTE_OPTION_TXEN | XTE_OPTION_RXEN)); in temac_device_reset()
700 if (temac_setoptions(ndev, lp->options)) in temac_device_reset()
709 struct temac_local *lp = netdev_priv(ndev); in temac_adjust_link() local
718 if (lp->last_link != link_state) { in temac_adjust_link()
719 spin_lock_irqsave(lp->indirect_lock, flags); in temac_adjust_link()
720 mii_speed = temac_indirect_in32_locked(lp, XTE_EMCFG_OFFSET); in temac_adjust_link()
736 temac_indirect_out32_locked(lp, XTE_EMCFG_OFFSET, mii_speed); in temac_adjust_link()
737 spin_unlock_irqrestore(lp->indirect_lock, flags); in temac_adjust_link()
739 lp->last_link = link_state; in temac_adjust_link()
773 struct temac_local *lp = netdev_priv(ndev); in temac_start_xmit_done() local
778 cur_p = &lp->tx_bd_v[lp->tx_bd_ci]; in temac_start_xmit_done()
805 lp->tx_bd_ci++; in temac_start_xmit_done()
806 if (lp->tx_bd_ci >= lp->tx_bd_num) in temac_start_xmit_done()
807 lp->tx_bd_ci = 0; in temac_start_xmit_done()
809 cur_p = &lp->tx_bd_v[lp->tx_bd_ci]; in temac_start_xmit_done()
819 static inline int temac_check_tx_bd_space(struct temac_local *lp, int num_frag) in temac_check_tx_bd_space() argument
824 tail = lp->tx_bd_tail; in temac_check_tx_bd_space()
825 cur_p = &lp->tx_bd_v[tail]; in temac_check_tx_bd_space()
835 if (tail >= lp->tx_bd_num) in temac_check_tx_bd_space()
838 cur_p = &lp->tx_bd_v[tail]; in temac_check_tx_bd_space()
848 struct temac_local *lp = netdev_priv(ndev); in temac_start_xmit() local
857 cur_p = &lp->tx_bd_v[lp->tx_bd_tail]; in temac_start_xmit()
859 if (temac_check_tx_bd_space(lp, num_frag + 1)) { in temac_start_xmit()
869 if (temac_check_tx_bd_space(lp, num_frag + 1)) in temac_start_xmit()
898 if (++lp->tx_bd_tail >= lp->tx_bd_num) in temac_start_xmit()
899 lp->tx_bd_tail = 0; in temac_start_xmit()
901 cur_p = &lp->tx_bd_v[lp->tx_bd_tail]; in temac_start_xmit()
907 if (--lp->tx_bd_tail < 0) in temac_start_xmit()
908 lp->tx_bd_tail = lp->tx_bd_num - 1; in temac_start_xmit()
909 cur_p = &lp->tx_bd_v[lp->tx_bd_tail]; in temac_start_xmit()
916 if (--lp->tx_bd_tail < 0) in temac_start_xmit()
917 lp->tx_bd_tail = lp->tx_bd_num - 1; in temac_start_xmit()
918 cur_p = &lp->tx_bd_v[lp->tx_bd_tail]; in temac_start_xmit()
939 tail_p = lp->tx_bd_p + sizeof(*lp->tx_bd_v) * lp->tx_bd_tail; in temac_start_xmit()
940 lp->tx_bd_tail++; in temac_start_xmit()
941 if (lp->tx_bd_tail >= lp->tx_bd_num) in temac_start_xmit()
942 lp->tx_bd_tail = 0; in temac_start_xmit()
948 lp->dma_out(lp, TX_TAILDESC_PTR, tail_p); /* DMA start */ in temac_start_xmit()
950 if (temac_check_tx_bd_space(lp, MAX_SKB_FRAGS + 1)) in temac_start_xmit()
956 static int ll_temac_recv_buffers_available(struct temac_local *lp) in ll_temac_recv_buffers_available() argument
960 if (!lp->rx_skb[lp->rx_bd_ci]) in ll_temac_recv_buffers_available()
962 available = 1 + lp->rx_bd_tail - lp->rx_bd_ci; in ll_temac_recv_buffers_available()
964 available += lp->rx_bd_num; in ll_temac_recv_buffers_available()
970 struct temac_local *lp = netdev_priv(ndev); in ll_temac_recv() local
975 spin_lock_irqsave(&lp->rx_lock, flags); in ll_temac_recv()
983 struct cdmac_bd *bd = &lp->rx_bd_v[lp->rx_bd_ci]; in ll_temac_recv()
984 struct sk_buff *skb = lp->rx_skb[lp->rx_bd_ci]; in ll_temac_recv()
1011 if (((lp->temac_features & TEMAC_FEATURE_RX_CSUM) != 0) && in ll_temac_recv()
1026 lp->rx_skb[lp->rx_bd_ci] = NULL; in ll_temac_recv()
1031 rx_bd = lp->rx_bd_ci; in ll_temac_recv()
1032 if (++lp->rx_bd_ci >= lp->rx_bd_num) in ll_temac_recv()
1033 lp->rx_bd_ci = 0; in ll_temac_recv()
1034 } while (rx_bd != lp->rx_bd_tail); in ll_temac_recv()
1045 if (ll_temac_recv_buffers_available(lp) < lp->coalesce_count_rx) in ll_temac_recv()
1046 schedule_delayed_work(&lp->restart_work, HZ / 1000); in ll_temac_recv()
1062 rx_bd = lp->rx_bd_tail + 1; in ll_temac_recv()
1063 if (rx_bd >= lp->rx_bd_num) in ll_temac_recv()
1065 bd = &lp->rx_bd_v[rx_bd]; in ll_temac_recv()
1088 lp->rx_skb[rx_bd] = skb; in ll_temac_recv()
1090 lp->rx_bd_tail = rx_bd; in ll_temac_recv()
1096 lp->dma_out(lp, RX_TAILDESC_PTR, in ll_temac_recv()
1097 lp->rx_bd_p + sizeof(*lp->rx_bd_v) * lp->rx_bd_tail); in ll_temac_recv()
1100 spin_unlock_irqrestore(&lp->rx_lock, flags); in ll_temac_recv()
1108 struct temac_local *lp = container_of(work, struct temac_local, in ll_temac_restart_work_func() local
1110 struct net_device *ndev = lp->ndev; in ll_temac_restart_work_func()
1118 struct temac_local *lp = netdev_priv(ndev); in ll_temac_tx_irq() local
1121 status = lp->dma_in(lp, TX_IRQ_REG); in ll_temac_tx_irq()
1122 lp->dma_out(lp, TX_IRQ_REG, status); in ll_temac_tx_irq()
1125 temac_start_xmit_done(lp->ndev); in ll_temac_tx_irq()
1129 status, lp->dma_in(lp, TX_CHNL_STS)); in ll_temac_tx_irq()
1137 struct temac_local *lp = netdev_priv(ndev); in ll_temac_rx_irq() local
1141 status = lp->dma_in(lp, RX_IRQ_REG); in ll_temac_rx_irq()
1142 lp->dma_out(lp, RX_IRQ_REG, status); in ll_temac_rx_irq()
1145 ll_temac_recv(lp->ndev); in ll_temac_rx_irq()
1149 status, lp->dma_in(lp, RX_CHNL_STS)); in ll_temac_rx_irq()
1156 struct temac_local *lp = netdev_priv(ndev); in temac_open() local
1162 if (lp->phy_node) { in temac_open()
1163 phydev = of_phy_connect(lp->ndev, lp->phy_node, in temac_open()
1166 dev_err(lp->dev, "of_phy_connect() failed\n"); in temac_open()
1170 } else if (strlen(lp->phy_name) > 0) { in temac_open()
1171 phydev = phy_connect(lp->ndev, lp->phy_name, temac_adjust_link, in temac_open()
1172 lp->phy_interface); in temac_open()
1174 dev_err(lp->dev, "phy_connect() failed\n"); in temac_open()
1182 rc = request_irq(lp->tx_irq, ll_temac_tx_irq, 0, ndev->name, ndev); in temac_open()
1185 rc = request_irq(lp->rx_irq, ll_temac_rx_irq, 0, ndev->name, ndev); in temac_open()
1192 free_irq(lp->tx_irq, ndev); in temac_open()
1196 dev_err(lp->dev, "request_irq() failed\n"); in temac_open()
1202 struct temac_local *lp = netdev_priv(ndev); in temac_stop() local
1207 cancel_delayed_work_sync(&lp->restart_work); in temac_stop()
1209 free_irq(lp->tx_irq, ndev); in temac_stop()
1210 free_irq(lp->rx_irq, ndev); in temac_stop()
1224 struct temac_local *lp = netdev_priv(ndev); in temac_poll_controller() local
1226 disable_irq(lp->tx_irq); in temac_poll_controller()
1227 disable_irq(lp->rx_irq); in temac_poll_controller()
1229 ll_temac_rx_irq(lp->tx_irq, ndev); in temac_poll_controller()
1230 ll_temac_tx_irq(lp->rx_irq, ndev); in temac_poll_controller()
1232 enable_irq(lp->tx_irq); in temac_poll_controller()
1233 enable_irq(lp->rx_irq); in temac_poll_controller()
1257 struct temac_local *lp = netdev_priv(ndev); in temac_show_llink_regs() local
1261 len += sprintf(buf + len, "%.8x%s", lp->dma_in(lp, i), in temac_show_llink_regs()
1289 struct temac_local *lp = netdev_priv(ndev); in ll_temac_ethtools_get_ringparam() local
1295 ering->rx_pending = lp->rx_bd_num; in ll_temac_ethtools_get_ringparam()
1298 ering->tx_pending = lp->tx_bd_num; in ll_temac_ethtools_get_ringparam()
1307 struct temac_local *lp = netdev_priv(ndev); in ll_temac_ethtools_set_ringparam() local
1318 lp->rx_bd_num = ering->rx_pending; in ll_temac_ethtools_set_ringparam()
1319 lp->tx_bd_num = ering->tx_pending; in ll_temac_ethtools_set_ringparam()
1329 struct temac_local *lp = netdev_priv(ndev); in ll_temac_ethtools_get_coalesce() local
1331 ec->rx_max_coalesced_frames = lp->coalesce_count_rx; in ll_temac_ethtools_get_coalesce()
1332 ec->tx_max_coalesced_frames = lp->coalesce_count_tx; in ll_temac_ethtools_get_coalesce()
1333 ec->rx_coalesce_usecs = (lp->coalesce_delay_rx * 512) / 100; in ll_temac_ethtools_get_coalesce()
1334 ec->tx_coalesce_usecs = (lp->coalesce_delay_tx * 512) / 100; in ll_temac_ethtools_get_coalesce()
1344 struct temac_local *lp = netdev_priv(ndev); in ll_temac_ethtools_set_coalesce() local
1353 lp->coalesce_count_rx = ec->rx_max_coalesced_frames; in ll_temac_ethtools_set_coalesce()
1355 lp->coalesce_count_tx = ec->tx_max_coalesced_frames; in ll_temac_ethtools_set_coalesce()
1360 lp->coalesce_delay_rx = in ll_temac_ethtools_set_coalesce()
1363 lp->coalesce_delay_tx = in ll_temac_ethtools_set_coalesce()
1387 struct temac_local *lp; in temac_probe() local
1395 ndev = devm_alloc_etherdev(&pdev->dev, sizeof(*lp)); in temac_probe()
1419 lp = netdev_priv(ndev); in temac_probe()
1420 lp->ndev = ndev; in temac_probe()
1421 lp->dev = &pdev->dev; in temac_probe()
1422 lp->options = XTE_OPTION_DEFAULTS; in temac_probe()
1423 lp->rx_bd_num = RX_BD_NUM_DEFAULT; in temac_probe()
1424 lp->tx_bd_num = TX_BD_NUM_DEFAULT; in temac_probe()
1425 spin_lock_init(&lp->rx_lock); in temac_probe()
1426 INIT_DELAYED_WORK(&lp->restart_work, ll_temac_restart_work_func); in temac_probe()
1435 lp->indirect_lock = pdata->indirect_lock; in temac_probe()
1437 lp->indirect_lock = devm_kmalloc(&pdev->dev, in temac_probe()
1438 sizeof(*lp->indirect_lock), in temac_probe()
1440 if (!lp->indirect_lock) in temac_probe()
1442 spin_lock_init(lp->indirect_lock); in temac_probe()
1446 lp->regs = devm_platform_ioremap_resource(pdev, 0); in temac_probe()
1447 if (IS_ERR(lp->regs)) { in temac_probe()
1462 lp->temac_ior = _temac_ior_le; in temac_probe()
1463 lp->temac_iow = _temac_iow_le; in temac_probe()
1465 lp->temac_ior = _temac_ior_be; in temac_probe()
1466 lp->temac_iow = _temac_iow_be; in temac_probe()
1470 lp->temac_features = 0; in temac_probe()
1474 lp->temac_features |= TEMAC_FEATURE_TX_CSUM; in temac_probe()
1477 lp->temac_features |= TEMAC_FEATURE_RX_CSUM; in temac_probe()
1480 lp->temac_features |= TEMAC_FEATURE_TX_CSUM; in temac_probe()
1482 lp->temac_features |= TEMAC_FEATURE_RX_CSUM; in temac_probe()
1484 if (lp->temac_features & TEMAC_FEATURE_TX_CSUM) in temac_probe()
1491 lp->coalesce_delay_tx = 0x10; in temac_probe()
1492 lp->coalesce_count_tx = 0x22; in temac_probe()
1493 lp->coalesce_delay_rx = 0xff; in temac_probe()
1494 lp->coalesce_count_rx = 0x07; in temac_probe()
1510 if (temac_dcr_setup(lp, pdev, dma_np)) { in temac_probe()
1512 lp->sdma_regs = devm_of_iomap(&pdev->dev, dma_np, 0, in temac_probe()
1514 if (IS_ERR(lp->sdma_regs)) { in temac_probe()
1518 return PTR_ERR(lp->sdma_regs); in temac_probe()
1521 lp->dma_in = temac_dma_in32_le; in temac_probe()
1522 lp->dma_out = temac_dma_out32_le; in temac_probe()
1524 lp->dma_in = temac_dma_in32_be; in temac_probe()
1525 lp->dma_out = temac_dma_out32_be; in temac_probe()
1527 dev_dbg(&pdev->dev, "MEM base: %p\n", lp->sdma_regs); in temac_probe()
1531 lp->rx_irq = irq_of_parse_and_map(dma_np, 0); in temac_probe()
1532 lp->tx_irq = irq_of_parse_and_map(dma_np, 1); in temac_probe()
1538 lp->sdma_regs = devm_platform_ioremap_resource(pdev, 1); in temac_probe()
1539 if (IS_ERR(lp->sdma_regs)) { in temac_probe()
1542 return PTR_ERR(lp->sdma_regs); in temac_probe()
1545 lp->dma_in = temac_dma_in32_le; in temac_probe()
1546 lp->dma_out = temac_dma_out32_le; in temac_probe()
1548 lp->dma_in = temac_dma_in32_be; in temac_probe()
1549 lp->dma_out = temac_dma_out32_be; in temac_probe()
1553 lp->rx_irq = platform_get_irq(pdev, 0); in temac_probe()
1554 lp->tx_irq = platform_get_irq(pdev, 1); in temac_probe()
1558 lp->coalesce_delay_tx = pdata->tx_irq_timeout; in temac_probe()
1559 lp->coalesce_count_tx = pdata->tx_irq_count; in temac_probe()
1562 lp->coalesce_delay_rx = pdata->rx_irq_timeout; in temac_probe()
1563 lp->coalesce_count_rx = pdata->rx_irq_count; in temac_probe()
1568 if (lp->rx_irq <= 0) { in temac_probe()
1569 rc = lp->rx_irq ?: -EINVAL; in temac_probe()
1573 if (lp->tx_irq <= 0) { in temac_probe()
1574 rc = lp->tx_irq ?: -EINVAL; in temac_probe()
1591 rc = temac_mdio_setup(lp, pdev); in temac_probe()
1596 lp->phy_node = of_parse_phandle(temac_np, "phy-handle", 0); in temac_probe()
1597 if (lp->phy_node) in temac_probe()
1598 dev_dbg(lp->dev, "using PHY node %pOF\n", temac_np); in temac_probe()
1600 snprintf(lp->phy_name, sizeof(lp->phy_name), in temac_probe()
1601 PHY_ID_FMT, lp->mii_bus->id, pdata->phy_addr); in temac_probe()
1602 lp->phy_interface = pdata->phy_interface; in temac_probe()
1606 rc = sysfs_create_group(&lp->dev->kobj, &temac_attr_group); in temac_probe()
1608 dev_err(lp->dev, "Error creating sysfs files\n"); in temac_probe()
1612 rc = register_netdev(lp->ndev); in temac_probe()
1614 dev_err(lp->dev, "register_netdev() error (%i)\n", rc); in temac_probe()
1621 sysfs_remove_group(&lp->dev->kobj, &temac_attr_group); in temac_probe()
1623 if (lp->phy_node) in temac_probe()
1624 of_node_put(lp->phy_node); in temac_probe()
1625 temac_mdio_teardown(lp); in temac_probe()
1632 struct temac_local *lp = netdev_priv(ndev); in temac_remove() local
1635 sysfs_remove_group(&lp->dev->kobj, &temac_attr_group); in temac_remove()
1636 if (lp->phy_node) in temac_remove()
1637 of_node_put(lp->phy_node); in temac_remove()
1638 temac_mdio_teardown(lp); in temac_remove()