Lines Matching refs:lp
124 static inline u32 axienet_dma_in32(struct axienet_local *lp, off_t reg) in axienet_dma_in32() argument
126 return in_be32(lp->dma_regs + reg); in axienet_dma_in32()
138 static inline void axienet_dma_out32(struct axienet_local *lp, in axienet_dma_out32() argument
141 out_be32((lp->dma_regs + reg), value); in axienet_dma_out32()
155 struct axienet_local *lp = netdev_priv(ndev); in axienet_dma_bd_release() local
158 dma_unmap_single(ndev->dev.parent, lp->rx_bd_v[i].phys, in axienet_dma_bd_release()
159 lp->max_frm_size, DMA_FROM_DEVICE); in axienet_dma_bd_release()
161 (lp->rx_bd_v[i].sw_id_offset)); in axienet_dma_bd_release()
164 if (lp->rx_bd_v) { in axienet_dma_bd_release()
166 sizeof(*lp->rx_bd_v) * RX_BD_NUM, in axienet_dma_bd_release()
167 lp->rx_bd_v, in axienet_dma_bd_release()
168 lp->rx_bd_p); in axienet_dma_bd_release()
170 if (lp->tx_bd_v) { in axienet_dma_bd_release()
172 sizeof(*lp->tx_bd_v) * TX_BD_NUM, in axienet_dma_bd_release()
173 lp->tx_bd_v, in axienet_dma_bd_release()
174 lp->tx_bd_p); in axienet_dma_bd_release()
193 struct axienet_local *lp = netdev_priv(ndev); in axienet_dma_bd_init() local
196 lp->tx_bd_ci = 0; in axienet_dma_bd_init()
197 lp->tx_bd_tail = 0; in axienet_dma_bd_init()
198 lp->rx_bd_ci = 0; in axienet_dma_bd_init()
201 lp->tx_bd_v = dma_zalloc_coherent(ndev->dev.parent, in axienet_dma_bd_init()
202 sizeof(*lp->tx_bd_v) * TX_BD_NUM, in axienet_dma_bd_init()
203 &lp->tx_bd_p, GFP_KERNEL); in axienet_dma_bd_init()
204 if (!lp->tx_bd_v) in axienet_dma_bd_init()
207 lp->rx_bd_v = dma_zalloc_coherent(ndev->dev.parent, in axienet_dma_bd_init()
208 sizeof(*lp->rx_bd_v) * RX_BD_NUM, in axienet_dma_bd_init()
209 &lp->rx_bd_p, GFP_KERNEL); in axienet_dma_bd_init()
210 if (!lp->rx_bd_v) in axienet_dma_bd_init()
214 lp->tx_bd_v[i].next = lp->tx_bd_p + in axienet_dma_bd_init()
215 sizeof(*lp->tx_bd_v) * in axienet_dma_bd_init()
220 lp->rx_bd_v[i].next = lp->rx_bd_p + in axienet_dma_bd_init()
221 sizeof(*lp->rx_bd_v) * in axienet_dma_bd_init()
224 skb = netdev_alloc_skb_ip_align(ndev, lp->max_frm_size); in axienet_dma_bd_init()
228 lp->rx_bd_v[i].sw_id_offset = (u32) skb; in axienet_dma_bd_init()
229 lp->rx_bd_v[i].phys = dma_map_single(ndev->dev.parent, in axienet_dma_bd_init()
231 lp->max_frm_size, in axienet_dma_bd_init()
233 lp->rx_bd_v[i].cntrl = lp->max_frm_size; in axienet_dma_bd_init()
237 cr = axienet_dma_in32(lp, XAXIDMA_RX_CR_OFFSET); in axienet_dma_bd_init()
240 ((lp->coalesce_count_rx) << XAXIDMA_COALESCE_SHIFT)); in axienet_dma_bd_init()
247 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, cr); in axienet_dma_bd_init()
250 cr = axienet_dma_in32(lp, XAXIDMA_TX_CR_OFFSET); in axienet_dma_bd_init()
253 ((lp->coalesce_count_tx) << XAXIDMA_COALESCE_SHIFT)); in axienet_dma_bd_init()
260 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, cr); in axienet_dma_bd_init()
265 axienet_dma_out32(lp, XAXIDMA_RX_CDESC_OFFSET, lp->rx_bd_p); in axienet_dma_bd_init()
266 cr = axienet_dma_in32(lp, XAXIDMA_RX_CR_OFFSET); in axienet_dma_bd_init()
267 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, in axienet_dma_bd_init()
269 axienet_dma_out32(lp, XAXIDMA_RX_TDESC_OFFSET, lp->rx_bd_p + in axienet_dma_bd_init()
270 (sizeof(*lp->rx_bd_v) * (RX_BD_NUM - 1))); in axienet_dma_bd_init()
276 axienet_dma_out32(lp, XAXIDMA_TX_CDESC_OFFSET, lp->tx_bd_p); in axienet_dma_bd_init()
277 cr = axienet_dma_in32(lp, XAXIDMA_TX_CR_OFFSET); in axienet_dma_bd_init()
278 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, in axienet_dma_bd_init()
297 struct axienet_local *lp = netdev_priv(ndev); in axienet_set_mac_address() local
305 axienet_iow(lp, XAE_UAW0_OFFSET, in axienet_set_mac_address()
310 axienet_iow(lp, XAE_UAW1_OFFSET, in axienet_set_mac_address()
311 (((axienet_ior(lp, XAE_UAW1_OFFSET)) & in axienet_set_mac_address()
350 struct axienet_local *lp = netdev_priv(ndev); in axienet_set_multicast_list() local
359 reg = axienet_ior(lp, XAE_FMI_OFFSET); in axienet_set_multicast_list()
361 axienet_iow(lp, XAE_FMI_OFFSET, reg); in axienet_set_multicast_list()
379 reg = axienet_ior(lp, XAE_FMI_OFFSET) & 0xFFFFFF00; in axienet_set_multicast_list()
382 axienet_iow(lp, XAE_FMI_OFFSET, reg); in axienet_set_multicast_list()
383 axienet_iow(lp, XAE_AF0_OFFSET, af0reg); in axienet_set_multicast_list()
384 axienet_iow(lp, XAE_AF1_OFFSET, af1reg); in axienet_set_multicast_list()
388 reg = axienet_ior(lp, XAE_FMI_OFFSET); in axienet_set_multicast_list()
391 axienet_iow(lp, XAE_FMI_OFFSET, reg); in axienet_set_multicast_list()
394 reg = axienet_ior(lp, XAE_FMI_OFFSET) & 0xFFFFFF00; in axienet_set_multicast_list()
397 axienet_iow(lp, XAE_FMI_OFFSET, reg); in axienet_set_multicast_list()
398 axienet_iow(lp, XAE_AF0_OFFSET, 0); in axienet_set_multicast_list()
399 axienet_iow(lp, XAE_AF1_OFFSET, 0); in axienet_set_multicast_list()
420 struct axienet_local *lp = netdev_priv(ndev); in axienet_setoptions() local
424 reg = ((axienet_ior(lp, tp->reg)) & ~(tp->m_or)); in axienet_setoptions()
427 axienet_iow(lp, tp->reg, reg); in axienet_setoptions()
431 lp->options |= options; in axienet_setoptions()
434 static void __axienet_device_reset(struct axienet_local *lp, in __axienet_device_reset() argument
443 axienet_dma_out32(lp, offset, XAXIDMA_CR_RESET_MASK); in __axienet_device_reset()
445 while (axienet_dma_in32(lp, offset) & XAXIDMA_CR_RESET_MASK) { in __axienet_device_reset()
448 netdev_err(lp->ndev, "%s: DMA reset timeout!\n", in __axienet_device_reset()
469 struct axienet_local *lp = netdev_priv(ndev); in axienet_device_reset() local
471 __axienet_device_reset(lp, &ndev->dev, XAXIDMA_TX_CR_OFFSET); in axienet_device_reset()
472 __axienet_device_reset(lp, &ndev->dev, XAXIDMA_RX_CR_OFFSET); in axienet_device_reset()
474 lp->max_frm_size = XAE_MAX_VLAN_FRAME_SIZE; in axienet_device_reset()
475 lp->options |= XAE_OPTION_VLAN; in axienet_device_reset()
476 lp->options &= (~XAE_OPTION_JUMBO); in axienet_device_reset()
480 lp->max_frm_size = ndev->mtu + VLAN_ETH_HLEN + in axienet_device_reset()
483 if (lp->max_frm_size <= lp->rxmem) in axienet_device_reset()
484 lp->options |= XAE_OPTION_JUMBO; in axienet_device_reset()
492 axienet_status = axienet_ior(lp, XAE_RCW1_OFFSET); in axienet_device_reset()
494 axienet_iow(lp, XAE_RCW1_OFFSET, axienet_status); in axienet_device_reset()
496 axienet_status = axienet_ior(lp, XAE_IP_OFFSET); in axienet_device_reset()
498 axienet_iow(lp, XAE_IS_OFFSET, XAE_INT_RXRJECT_MASK); in axienet_device_reset()
500 axienet_iow(lp, XAE_FCC_OFFSET, XAE_FCC_FCRX_MASK); in axienet_device_reset()
505 axienet_setoptions(ndev, lp->options & in axienet_device_reset()
509 axienet_setoptions(ndev, lp->options); in axienet_device_reset()
527 struct axienet_local *lp = netdev_priv(ndev); in axienet_adjust_link() local
528 struct phy_device *phy = lp->phy_dev; in axienet_adjust_link()
531 if (lp->last_link != link_state) { in axienet_adjust_link()
533 if (lp->phy_type == XAE_PHY_TYPE_1000BASE_X) in axienet_adjust_link()
537 (lp->phy_type == XAE_PHY_TYPE_MII)) in axienet_adjust_link()
542 emmc_reg = axienet_ior(lp, XAE_EMMC_OFFSET); in axienet_adjust_link()
561 axienet_iow(lp, XAE_EMMC_OFFSET, emmc_reg); in axienet_adjust_link()
562 lp->last_link = link_state; in axienet_adjust_link()
586 struct axienet_local *lp = netdev_priv(ndev); in axienet_start_xmit_done() local
590 cur_p = &lp->tx_bd_v[lp->tx_bd_ci]; in axienet_start_xmit_done()
608 ++lp->tx_bd_ci; in axienet_start_xmit_done()
609 lp->tx_bd_ci %= TX_BD_NUM; in axienet_start_xmit_done()
610 cur_p = &lp->tx_bd_v[lp->tx_bd_ci]; in axienet_start_xmit_done()
632 static inline int axienet_check_tx_bd_space(struct axienet_local *lp, in axienet_check_tx_bd_space() argument
636 cur_p = &lp->tx_bd_v[(lp->tx_bd_tail + num_frag) % TX_BD_NUM]; in axienet_check_tx_bd_space()
663 struct axienet_local *lp = netdev_priv(ndev); in axienet_start_xmit() local
667 cur_p = &lp->tx_bd_v[lp->tx_bd_tail]; in axienet_start_xmit()
669 if (axienet_check_tx_bd_space(lp, num_frag)) { in axienet_start_xmit()
676 if (lp->features & XAE_FEATURE_FULL_TX_CSUM) { in axienet_start_xmit()
679 } else if (lp->features & XAE_FEATURE_PARTIAL_RX_CSUM) { in axienet_start_xmit()
695 ++lp->tx_bd_tail; in axienet_start_xmit()
696 lp->tx_bd_tail %= TX_BD_NUM; in axienet_start_xmit()
697 cur_p = &lp->tx_bd_v[lp->tx_bd_tail]; in axienet_start_xmit()
709 tail_p = lp->tx_bd_p + sizeof(*lp->tx_bd_v) * lp->tx_bd_tail; in axienet_start_xmit()
711 axienet_dma_out32(lp, XAXIDMA_TX_TDESC_OFFSET, tail_p); in axienet_start_xmit()
712 ++lp->tx_bd_tail; in axienet_start_xmit()
713 lp->tx_bd_tail %= TX_BD_NUM; in axienet_start_xmit()
734 struct axienet_local *lp = netdev_priv(ndev); in axienet_recv() local
738 cur_p = &lp->rx_bd_v[lp->rx_bd_ci]; in axienet_recv()
741 tail_p = lp->rx_bd_p + sizeof(*lp->rx_bd_v) * lp->rx_bd_ci; in axienet_recv()
746 lp->max_frm_size, in axienet_recv()
755 if (lp->features & XAE_FEATURE_FULL_RX_CSUM) { in axienet_recv()
762 } else if ((lp->features & XAE_FEATURE_PARTIAL_RX_CSUM) != 0 && in axienet_recv()
774 new_skb = netdev_alloc_skb_ip_align(ndev, lp->max_frm_size); in axienet_recv()
779 lp->max_frm_size, in axienet_recv()
781 cur_p->cntrl = lp->max_frm_size; in axienet_recv()
785 ++lp->rx_bd_ci; in axienet_recv()
786 lp->rx_bd_ci %= RX_BD_NUM; in axienet_recv()
787 cur_p = &lp->rx_bd_v[lp->rx_bd_ci]; in axienet_recv()
794 axienet_dma_out32(lp, XAXIDMA_RX_TDESC_OFFSET, tail_p); in axienet_recv()
812 struct axienet_local *lp = netdev_priv(ndev); in axienet_tx_irq() local
814 status = axienet_dma_in32(lp, XAXIDMA_TX_SR_OFFSET); in axienet_tx_irq()
816 axienet_dma_out32(lp, XAXIDMA_TX_SR_OFFSET, status); in axienet_tx_irq()
817 axienet_start_xmit_done(lp->ndev); in axienet_tx_irq()
825 (lp->tx_bd_v[lp->tx_bd_ci]).phys); in axienet_tx_irq()
827 cr = axienet_dma_in32(lp, XAXIDMA_TX_CR_OFFSET); in axienet_tx_irq()
831 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, cr); in axienet_tx_irq()
833 cr = axienet_dma_in32(lp, XAXIDMA_RX_CR_OFFSET); in axienet_tx_irq()
837 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, cr); in axienet_tx_irq()
839 tasklet_schedule(&lp->dma_err_tasklet); in axienet_tx_irq()
840 axienet_dma_out32(lp, XAXIDMA_TX_SR_OFFSET, status); in axienet_tx_irq()
861 struct axienet_local *lp = netdev_priv(ndev); in axienet_rx_irq() local
863 status = axienet_dma_in32(lp, XAXIDMA_RX_SR_OFFSET); in axienet_rx_irq()
865 axienet_dma_out32(lp, XAXIDMA_RX_SR_OFFSET, status); in axienet_rx_irq()
866 axienet_recv(lp->ndev); in axienet_rx_irq()
874 (lp->rx_bd_v[lp->rx_bd_ci]).phys); in axienet_rx_irq()
876 cr = axienet_dma_in32(lp, XAXIDMA_TX_CR_OFFSET); in axienet_rx_irq()
880 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, cr); in axienet_rx_irq()
882 cr = axienet_dma_in32(lp, XAXIDMA_RX_CR_OFFSET); in axienet_rx_irq()
886 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, cr); in axienet_rx_irq()
888 tasklet_schedule(&lp->dma_err_tasklet); in axienet_rx_irq()
889 axienet_dma_out32(lp, XAXIDMA_RX_SR_OFFSET, status); in axienet_rx_irq()
913 struct axienet_local *lp = netdev_priv(ndev); in axienet_open() local
917 mdio_mcreg = axienet_ior(lp, XAE_MDIO_MC_OFFSET); in axienet_open()
918 ret = axienet_mdio_wait_until_ready(lp); in axienet_open()
926 axienet_iow(lp, XAE_MDIO_MC_OFFSET, in axienet_open()
930 axienet_iow(lp, XAE_MDIO_MC_OFFSET, mdio_mcreg); in axienet_open()
931 ret = axienet_mdio_wait_until_ready(lp); in axienet_open()
935 if (lp->phy_node) { in axienet_open()
936 if (lp->phy_type == XAE_PHY_TYPE_GMII) { in axienet_open()
937 lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node, in axienet_open()
940 } else if (lp->phy_type == XAE_PHY_TYPE_RGMII_2_0) { in axienet_open()
941 lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node, in axienet_open()
946 if (!lp->phy_dev) in axienet_open()
947 dev_err(lp->dev, "of_phy_connect() failed\n"); in axienet_open()
949 phy_start(lp->phy_dev); in axienet_open()
953 tasklet_init(&lp->dma_err_tasklet, axienet_dma_err_handler, in axienet_open()
954 (unsigned long) lp); in axienet_open()
957 ret = request_irq(lp->tx_irq, axienet_tx_irq, 0, ndev->name, ndev); in axienet_open()
961 ret = request_irq(lp->rx_irq, axienet_rx_irq, 0, ndev->name, ndev); in axienet_open()
968 free_irq(lp->tx_irq, ndev); in axienet_open()
970 if (lp->phy_dev) in axienet_open()
971 phy_disconnect(lp->phy_dev); in axienet_open()
972 lp->phy_dev = NULL; in axienet_open()
973 tasklet_kill(&lp->dma_err_tasklet); in axienet_open()
974 dev_err(lp->dev, "request_irq() failed\n"); in axienet_open()
991 struct axienet_local *lp = netdev_priv(ndev); in axienet_stop() local
995 cr = axienet_dma_in32(lp, XAXIDMA_RX_CR_OFFSET); in axienet_stop()
996 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, in axienet_stop()
998 cr = axienet_dma_in32(lp, XAXIDMA_TX_CR_OFFSET); in axienet_stop()
999 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, in axienet_stop()
1001 axienet_setoptions(ndev, lp->options & in axienet_stop()
1004 tasklet_kill(&lp->dma_err_tasklet); in axienet_stop()
1006 free_irq(lp->tx_irq, ndev); in axienet_stop()
1007 free_irq(lp->rx_irq, ndev); in axienet_stop()
1009 if (lp->phy_dev) in axienet_stop()
1010 phy_disconnect(lp->phy_dev); in axienet_stop()
1011 lp->phy_dev = NULL; in axienet_stop()
1030 struct axienet_local *lp = netdev_priv(ndev); in axienet_change_mtu() local
1036 XAE_TRL_SIZE) > lp->rxmem) in axienet_change_mtu()
1057 struct axienet_local *lp = netdev_priv(ndev); in axienet_poll_controller() local
1058 disable_irq(lp->tx_irq); in axienet_poll_controller()
1059 disable_irq(lp->rx_irq); in axienet_poll_controller()
1060 axienet_rx_irq(lp->tx_irq, ndev); in axienet_poll_controller()
1061 axienet_tx_irq(lp->rx_irq, ndev); in axienet_poll_controller()
1062 enable_irq(lp->tx_irq); in axienet_poll_controller()
1063 enable_irq(lp->rx_irq); in axienet_poll_controller()
1095 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_get_settings() local
1096 struct phy_device *phydev = lp->phy_dev; in axienet_ethtools_get_settings()
1118 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_set_settings() local
1119 struct phy_device *phydev = lp->phy_dev; in axienet_ethtools_set_settings()
1170 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_get_regs() local
1176 data[0] = axienet_ior(lp, XAE_RAF_OFFSET); in axienet_ethtools_get_regs()
1177 data[1] = axienet_ior(lp, XAE_TPF_OFFSET); in axienet_ethtools_get_regs()
1178 data[2] = axienet_ior(lp, XAE_IFGP_OFFSET); in axienet_ethtools_get_regs()
1179 data[3] = axienet_ior(lp, XAE_IS_OFFSET); in axienet_ethtools_get_regs()
1180 data[4] = axienet_ior(lp, XAE_IP_OFFSET); in axienet_ethtools_get_regs()
1181 data[5] = axienet_ior(lp, XAE_IE_OFFSET); in axienet_ethtools_get_regs()
1182 data[6] = axienet_ior(lp, XAE_TTAG_OFFSET); in axienet_ethtools_get_regs()
1183 data[7] = axienet_ior(lp, XAE_RTAG_OFFSET); in axienet_ethtools_get_regs()
1184 data[8] = axienet_ior(lp, XAE_UAWL_OFFSET); in axienet_ethtools_get_regs()
1185 data[9] = axienet_ior(lp, XAE_UAWU_OFFSET); in axienet_ethtools_get_regs()
1186 data[10] = axienet_ior(lp, XAE_TPID0_OFFSET); in axienet_ethtools_get_regs()
1187 data[11] = axienet_ior(lp, XAE_TPID1_OFFSET); in axienet_ethtools_get_regs()
1188 data[12] = axienet_ior(lp, XAE_PPST_OFFSET); in axienet_ethtools_get_regs()
1189 data[13] = axienet_ior(lp, XAE_RCW0_OFFSET); in axienet_ethtools_get_regs()
1190 data[14] = axienet_ior(lp, XAE_RCW1_OFFSET); in axienet_ethtools_get_regs()
1191 data[15] = axienet_ior(lp, XAE_TC_OFFSET); in axienet_ethtools_get_regs()
1192 data[16] = axienet_ior(lp, XAE_FCC_OFFSET); in axienet_ethtools_get_regs()
1193 data[17] = axienet_ior(lp, XAE_EMMC_OFFSET); in axienet_ethtools_get_regs()
1194 data[18] = axienet_ior(lp, XAE_PHYC_OFFSET); in axienet_ethtools_get_regs()
1195 data[19] = axienet_ior(lp, XAE_MDIO_MC_OFFSET); in axienet_ethtools_get_regs()
1196 data[20] = axienet_ior(lp, XAE_MDIO_MCR_OFFSET); in axienet_ethtools_get_regs()
1197 data[21] = axienet_ior(lp, XAE_MDIO_MWD_OFFSET); in axienet_ethtools_get_regs()
1198 data[22] = axienet_ior(lp, XAE_MDIO_MRD_OFFSET); in axienet_ethtools_get_regs()
1199 data[23] = axienet_ior(lp, XAE_MDIO_MIS_OFFSET); in axienet_ethtools_get_regs()
1200 data[24] = axienet_ior(lp, XAE_MDIO_MIP_OFFSET); in axienet_ethtools_get_regs()
1201 data[25] = axienet_ior(lp, XAE_MDIO_MIE_OFFSET); in axienet_ethtools_get_regs()
1202 data[26] = axienet_ior(lp, XAE_MDIO_MIC_OFFSET); in axienet_ethtools_get_regs()
1203 data[27] = axienet_ior(lp, XAE_UAW0_OFFSET); in axienet_ethtools_get_regs()
1204 data[28] = axienet_ior(lp, XAE_UAW1_OFFSET); in axienet_ethtools_get_regs()
1205 data[29] = axienet_ior(lp, XAE_FMI_OFFSET); in axienet_ethtools_get_regs()
1206 data[30] = axienet_ior(lp, XAE_AF0_OFFSET); in axienet_ethtools_get_regs()
1207 data[31] = axienet_ior(lp, XAE_AF1_OFFSET); in axienet_ethtools_get_regs()
1224 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_get_pauseparam() local
1226 regval = axienet_ior(lp, XAE_FCC_OFFSET); in axienet_ethtools_get_pauseparam()
1248 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_set_pauseparam() local
1256 regval = axienet_ior(lp, XAE_FCC_OFFSET); in axienet_ethtools_set_pauseparam()
1265 axienet_iow(lp, XAE_FCC_OFFSET, regval); in axienet_ethtools_set_pauseparam()
1285 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_get_coalesce() local
1286 regval = axienet_dma_in32(lp, XAXIDMA_RX_CR_OFFSET); in axienet_ethtools_get_coalesce()
1289 regval = axienet_dma_in32(lp, XAXIDMA_TX_CR_OFFSET); in axienet_ethtools_get_coalesce()
1309 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_set_coalesce() local
1339 lp->coalesce_count_rx = ecoalesce->rx_max_coalesced_frames; in axienet_ethtools_set_coalesce()
1341 lp->coalesce_count_tx = ecoalesce->tx_max_coalesced_frames; in axienet_ethtools_set_coalesce()
1371 struct axienet_local *lp = (struct axienet_local *) data; in axienet_dma_err_handler() local
1372 struct net_device *ndev = lp->ndev; in axienet_dma_err_handler()
1375 axienet_setoptions(ndev, lp->options & in axienet_dma_err_handler()
1377 mdio_mcreg = axienet_ior(lp, XAE_MDIO_MC_OFFSET); in axienet_dma_err_handler()
1378 axienet_mdio_wait_until_ready(lp); in axienet_dma_err_handler()
1384 axienet_iow(lp, XAE_MDIO_MC_OFFSET, (mdio_mcreg & in axienet_dma_err_handler()
1387 __axienet_device_reset(lp, &ndev->dev, XAXIDMA_TX_CR_OFFSET); in axienet_dma_err_handler()
1388 __axienet_device_reset(lp, &ndev->dev, XAXIDMA_RX_CR_OFFSET); in axienet_dma_err_handler()
1390 axienet_iow(lp, XAE_MDIO_MC_OFFSET, mdio_mcreg); in axienet_dma_err_handler()
1391 axienet_mdio_wait_until_ready(lp); in axienet_dma_err_handler()
1394 cur_p = &lp->tx_bd_v[i]; in axienet_dma_err_handler()
1414 cur_p = &lp->rx_bd_v[i]; in axienet_dma_err_handler()
1423 lp->tx_bd_ci = 0; in axienet_dma_err_handler()
1424 lp->tx_bd_tail = 0; in axienet_dma_err_handler()
1425 lp->rx_bd_ci = 0; in axienet_dma_err_handler()
1428 cr = axienet_dma_in32(lp, XAXIDMA_RX_CR_OFFSET); in axienet_dma_err_handler()
1438 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, cr); in axienet_dma_err_handler()
1441 cr = axienet_dma_in32(lp, XAXIDMA_TX_CR_OFFSET); in axienet_dma_err_handler()
1451 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, cr); in axienet_dma_err_handler()
1456 axienet_dma_out32(lp, XAXIDMA_RX_CDESC_OFFSET, lp->rx_bd_p); in axienet_dma_err_handler()
1457 cr = axienet_dma_in32(lp, XAXIDMA_RX_CR_OFFSET); in axienet_dma_err_handler()
1458 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, in axienet_dma_err_handler()
1460 axienet_dma_out32(lp, XAXIDMA_RX_TDESC_OFFSET, lp->rx_bd_p + in axienet_dma_err_handler()
1461 (sizeof(*lp->rx_bd_v) * (RX_BD_NUM - 1))); in axienet_dma_err_handler()
1467 axienet_dma_out32(lp, XAXIDMA_TX_CDESC_OFFSET, lp->tx_bd_p); in axienet_dma_err_handler()
1468 cr = axienet_dma_in32(lp, XAXIDMA_TX_CR_OFFSET); in axienet_dma_err_handler()
1469 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, in axienet_dma_err_handler()
1472 axienet_status = axienet_ior(lp, XAE_RCW1_OFFSET); in axienet_dma_err_handler()
1474 axienet_iow(lp, XAE_RCW1_OFFSET, axienet_status); in axienet_dma_err_handler()
1476 axienet_status = axienet_ior(lp, XAE_IP_OFFSET); in axienet_dma_err_handler()
1478 axienet_iow(lp, XAE_IS_OFFSET, XAE_INT_RXRJECT_MASK); in axienet_dma_err_handler()
1479 axienet_iow(lp, XAE_FCC_OFFSET, XAE_FCC_FCRX_MASK); in axienet_dma_err_handler()
1484 axienet_setoptions(ndev, lp->options & in axienet_dma_err_handler()
1488 axienet_setoptions(ndev, lp->options); in axienet_dma_err_handler()
1507 struct axienet_local *lp; in axienet_probe() local
1513 ndev = alloc_etherdev(sizeof(*lp)); in axienet_probe()
1525 lp = netdev_priv(ndev); in axienet_probe()
1526 lp->ndev = ndev; in axienet_probe()
1527 lp->dev = &pdev->dev; in axienet_probe()
1528 lp->options = XAE_OPTION_DEFAULTS; in axienet_probe()
1531 lp->regs = devm_ioremap_resource(&pdev->dev, ethres); in axienet_probe()
1532 if (IS_ERR(lp->regs)) { in axienet_probe()
1534 ret = PTR_ERR(lp->regs); in axienet_probe()
1539 lp->features = 0; in axienet_probe()
1545 lp->csum_offload_on_tx_path = in axienet_probe()
1547 lp->features |= XAE_FEATURE_PARTIAL_TX_CSUM; in axienet_probe()
1552 lp->csum_offload_on_tx_path = in axienet_probe()
1554 lp->features |= XAE_FEATURE_FULL_TX_CSUM; in axienet_probe()
1559 lp->csum_offload_on_tx_path = XAE_NO_CSUM_OFFLOAD; in axienet_probe()
1566 lp->csum_offload_on_rx_path = in axienet_probe()
1568 lp->features |= XAE_FEATURE_PARTIAL_RX_CSUM; in axienet_probe()
1571 lp->csum_offload_on_rx_path = in axienet_probe()
1573 lp->features |= XAE_FEATURE_FULL_RX_CSUM; in axienet_probe()
1576 lp->csum_offload_on_rx_path = XAE_NO_CSUM_OFFLOAD; in axienet_probe()
1585 of_property_read_u32(pdev->dev.of_node, "xlnx,rxmem", &lp->rxmem); in axienet_probe()
1586 of_property_read_u32(pdev->dev.of_node, "xlnx,phy-type", &lp->phy_type); in axienet_probe()
1600 lp->dma_regs = devm_ioremap_resource(&pdev->dev, &dmares); in axienet_probe()
1601 if (IS_ERR(lp->dma_regs)) { in axienet_probe()
1603 ret = PTR_ERR(lp->dma_regs); in axienet_probe()
1606 lp->rx_irq = irq_of_parse_and_map(np, 1); in axienet_probe()
1607 lp->tx_irq = irq_of_parse_and_map(np, 0); in axienet_probe()
1609 if ((lp->rx_irq <= 0) || (lp->tx_irq <= 0)) { in axienet_probe()
1624 lp->coalesce_count_rx = XAXIDMA_DFT_RX_THRESHOLD; in axienet_probe()
1625 lp->coalesce_count_tx = XAXIDMA_DFT_TX_THRESHOLD; in axienet_probe()
1627 lp->phy_node = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0); in axienet_probe()
1628 if (lp->phy_node) { in axienet_probe()
1629 ret = axienet_mdio_setup(lp, pdev->dev.of_node); in axienet_probe()
1634 ret = register_netdev(lp->ndev); in axienet_probe()
1636 dev_err(lp->dev, "register_netdev() error (%i)\n", ret); in axienet_probe()
1651 struct axienet_local *lp = netdev_priv(ndev); in axienet_remove() local
1653 axienet_mdio_teardown(lp); in axienet_remove()
1656 of_node_put(lp->phy_node); in axienet_remove()
1657 lp->phy_node = NULL; in axienet_remove()