Lines Matching refs:mac_dev
69 int (*enable)(struct fman_mac *mac_dev, enum comm_mode mode);
70 int (*disable)(struct fman_mac *mac_dev, enum comm_mode mode);
80 struct mac_device *mac_dev; in mac_exception() local
83 mac_dev = handle; in mac_exception()
84 priv = mac_dev->priv; in mac_exception()
88 mac_dev->set_exception(mac_dev->fman_mac, in mac_exception()
97 static void set_fman_mac_params(struct mac_device *mac_dev, in set_fman_mac_params() argument
100 struct mac_priv_s *priv = mac_dev->priv; in set_fman_mac_params()
103 devm_ioremap(priv->dev, mac_dev->res->start, in set_fman_mac_params()
104 resource_size(mac_dev->res)); in set_fman_mac_params()
105 memcpy(¶ms->addr, mac_dev->addr, sizeof(mac_dev->addr)); in set_fman_mac_params()
107 params->phy_if = mac_dev->phy_if; in set_fman_mac_params()
113 params->dev_id = mac_dev; in set_fman_mac_params()
117 static int tgec_initialization(struct mac_device *mac_dev) in tgec_initialization() argument
124 priv = mac_dev->priv; in tgec_initialization()
126 set_fman_mac_params(mac_dev, ¶ms); in tgec_initialization()
128 mac_dev->fman_mac = tgec_config(¶ms); in tgec_initialization()
129 if (!mac_dev->fman_mac) { in tgec_initialization()
134 err = tgec_cfg_max_frame_len(mac_dev->fman_mac, fman_get_max_frm()); in tgec_initialization()
138 err = tgec_init(mac_dev->fman_mac); in tgec_initialization()
143 err = mac_dev->set_exception(mac_dev->fman_mac, in tgec_initialization()
148 err = tgec_get_version(mac_dev->fman_mac, &version); in tgec_initialization()
157 tgec_free(mac_dev->fman_mac); in tgec_initialization()
163 static int dtsec_initialization(struct mac_device *mac_dev) in dtsec_initialization() argument
170 priv = mac_dev->priv; in dtsec_initialization()
172 set_fman_mac_params(mac_dev, ¶ms); in dtsec_initialization()
174 mac_dev->fman_mac = dtsec_config(¶ms); in dtsec_initialization()
175 if (!mac_dev->fman_mac) { in dtsec_initialization()
180 err = dtsec_cfg_max_frame_len(mac_dev->fman_mac, fman_get_max_frm()); in dtsec_initialization()
184 err = dtsec_cfg_pad_and_crc(mac_dev->fman_mac, true); in dtsec_initialization()
188 err = dtsec_init(mac_dev->fman_mac); in dtsec_initialization()
193 err = mac_dev->set_exception(mac_dev->fman_mac, in dtsec_initialization()
198 err = dtsec_get_version(mac_dev->fman_mac, &version); in dtsec_initialization()
207 dtsec_free(mac_dev->fman_mac); in dtsec_initialization()
213 static int memac_initialization(struct mac_device *mac_dev) in memac_initialization() argument
219 priv = mac_dev->priv; in memac_initialization()
221 set_fman_mac_params(mac_dev, ¶ms); in memac_initialization()
226 mac_dev->fman_mac = memac_config(¶ms); in memac_initialization()
227 if (!mac_dev->fman_mac) { in memac_initialization()
232 err = memac_cfg_max_frame_len(mac_dev->fman_mac, fman_get_max_frm()); in memac_initialization()
236 err = memac_cfg_reset_on_init(mac_dev->fman_mac, true); in memac_initialization()
240 err = memac_cfg_fixed_link(mac_dev->fman_mac, priv->fixed_link); in memac_initialization()
244 err = memac_init(mac_dev->fman_mac); in memac_initialization()
253 memac_free(mac_dev->fman_mac); in memac_initialization()
259 static int start(struct mac_device *mac_dev) in start() argument
262 struct phy_device *phy_dev = mac_dev->phy_dev; in start()
263 struct mac_priv_s *priv = mac_dev->priv; in start()
265 err = priv->enable(mac_dev->fman_mac, COMM_MODE_RX_AND_TX); in start()
272 static int stop(struct mac_device *mac_dev) in stop() argument
274 struct mac_priv_s *priv = mac_dev->priv; in stop()
276 if (mac_dev->phy_dev) in stop()
277 phy_stop(mac_dev->phy_dev); in stop()
279 return priv->disable(mac_dev->fman_mac, COMM_MODE_RX_AND_TX); in stop()
282 static int set_multi(struct net_device *net_dev, struct mac_device *mac_dev) in set_multi() argument
290 priv = mac_dev->priv; in set_multi()
295 err = mac_dev->remove_hash_mac_addr(mac_dev->fman_mac, addr); in set_multi()
306 err = mac_dev->add_hash_mac_addr(mac_dev->fman_mac, addr); in set_multi()
334 int fman_set_mac_active_pause(struct mac_device *mac_dev, bool rx, bool tx) in fman_set_mac_active_pause() argument
336 struct fman_mac *fman_mac = mac_dev->fman_mac; in fman_set_mac_active_pause()
339 if (rx != mac_dev->rx_pause_active) { in fman_set_mac_active_pause()
340 err = mac_dev->set_rx_pause(fman_mac, rx); in fman_set_mac_active_pause()
342 mac_dev->rx_pause_active = rx; in fman_set_mac_active_pause()
345 if (tx != mac_dev->tx_pause_active) { in fman_set_mac_active_pause()
349 err = mac_dev->set_tx_pause(fman_mac, 0, pause_time, 0); in fman_set_mac_active_pause()
352 mac_dev->tx_pause_active = tx; in fman_set_mac_active_pause()
370 void fman_get_pause_cfg(struct mac_device *mac_dev, bool *rx_pause, in fman_get_pause_cfg() argument
373 struct phy_device *phy_dev = mac_dev->phy_dev; in fman_get_pause_cfg()
385 if (!mac_dev->autoneg_pause) { in fman_get_pause_cfg()
386 *rx_pause = mac_dev->rx_pause_req; in fman_get_pause_cfg()
387 *tx_pause = mac_dev->tx_pause_req; in fman_get_pause_cfg()
416 static void adjust_link_void(struct mac_device *mac_dev) in adjust_link_void() argument
420 static void adjust_link_dtsec(struct mac_device *mac_dev) in adjust_link_dtsec() argument
422 struct phy_device *phy_dev = mac_dev->phy_dev; in adjust_link_dtsec()
427 fman_mac = mac_dev->fman_mac; in adjust_link_dtsec()
435 fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause); in adjust_link_dtsec()
436 err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause); in adjust_link_dtsec()
438 dev_err(mac_dev->priv->dev, "fman_set_mac_active_pause() = %d\n", in adjust_link_dtsec()
442 static void adjust_link_memac(struct mac_device *mac_dev) in adjust_link_memac() argument
444 struct phy_device *phy_dev = mac_dev->phy_dev; in adjust_link_memac()
449 fman_mac = mac_dev->fman_mac; in adjust_link_memac()
452 fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause); in adjust_link_memac()
453 err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause); in adjust_link_memac()
455 dev_err(mac_dev->priv->dev, "fman_set_mac_active_pause() = %d\n", in adjust_link_memac()
459 static void setup_dtsec(struct mac_device *mac_dev) in setup_dtsec() argument
461 mac_dev->init = dtsec_initialization; in setup_dtsec()
462 mac_dev->set_promisc = dtsec_set_promiscuous; in setup_dtsec()
463 mac_dev->change_addr = dtsec_modify_mac_address; in setup_dtsec()
464 mac_dev->add_hash_mac_addr = dtsec_add_hash_mac_address; in setup_dtsec()
465 mac_dev->remove_hash_mac_addr = dtsec_del_hash_mac_address; in setup_dtsec()
466 mac_dev->set_tx_pause = dtsec_set_tx_pause_frames; in setup_dtsec()
467 mac_dev->set_rx_pause = dtsec_accept_rx_pause_frames; in setup_dtsec()
468 mac_dev->set_exception = dtsec_set_exception; in setup_dtsec()
469 mac_dev->set_allmulti = dtsec_set_allmulti; in setup_dtsec()
470 mac_dev->set_tstamp = dtsec_set_tstamp; in setup_dtsec()
471 mac_dev->set_multi = set_multi; in setup_dtsec()
472 mac_dev->start = start; in setup_dtsec()
473 mac_dev->stop = stop; in setup_dtsec()
474 mac_dev->adjust_link = adjust_link_dtsec; in setup_dtsec()
475 mac_dev->priv->enable = dtsec_enable; in setup_dtsec()
476 mac_dev->priv->disable = dtsec_disable; in setup_dtsec()
479 static void setup_tgec(struct mac_device *mac_dev) in setup_tgec() argument
481 mac_dev->init = tgec_initialization; in setup_tgec()
482 mac_dev->set_promisc = tgec_set_promiscuous; in setup_tgec()
483 mac_dev->change_addr = tgec_modify_mac_address; in setup_tgec()
484 mac_dev->add_hash_mac_addr = tgec_add_hash_mac_address; in setup_tgec()
485 mac_dev->remove_hash_mac_addr = tgec_del_hash_mac_address; in setup_tgec()
486 mac_dev->set_tx_pause = tgec_set_tx_pause_frames; in setup_tgec()
487 mac_dev->set_rx_pause = tgec_accept_rx_pause_frames; in setup_tgec()
488 mac_dev->set_exception = tgec_set_exception; in setup_tgec()
489 mac_dev->set_allmulti = tgec_set_allmulti; in setup_tgec()
490 mac_dev->set_tstamp = tgec_set_tstamp; in setup_tgec()
491 mac_dev->set_multi = set_multi; in setup_tgec()
492 mac_dev->start = start; in setup_tgec()
493 mac_dev->stop = stop; in setup_tgec()
494 mac_dev->adjust_link = adjust_link_void; in setup_tgec()
495 mac_dev->priv->enable = tgec_enable; in setup_tgec()
496 mac_dev->priv->disable = tgec_disable; in setup_tgec()
499 static void setup_memac(struct mac_device *mac_dev) in setup_memac() argument
501 mac_dev->init = memac_initialization; in setup_memac()
502 mac_dev->set_promisc = memac_set_promiscuous; in setup_memac()
503 mac_dev->change_addr = memac_modify_mac_address; in setup_memac()
504 mac_dev->add_hash_mac_addr = memac_add_hash_mac_address; in setup_memac()
505 mac_dev->remove_hash_mac_addr = memac_del_hash_mac_address; in setup_memac()
506 mac_dev->set_tx_pause = memac_set_tx_pause_frames; in setup_memac()
507 mac_dev->set_rx_pause = memac_accept_rx_pause_frames; in setup_memac()
508 mac_dev->set_exception = memac_set_exception; in setup_memac()
509 mac_dev->set_allmulti = memac_set_allmulti; in setup_memac()
510 mac_dev->set_tstamp = memac_set_tstamp; in setup_memac()
511 mac_dev->set_multi = set_multi; in setup_memac()
512 mac_dev->start = start; in setup_memac()
513 mac_dev->stop = stop; in setup_memac()
514 mac_dev->adjust_link = adjust_link_memac; in setup_memac()
515 mac_dev->priv->enable = memac_enable; in setup_memac()
516 mac_dev->priv->disable = memac_disable; in setup_memac()
547 struct mac_device *mac_dev) in dpaa_eth_add_device() argument
555 priv = mac_dev->priv; in dpaa_eth_add_device()
557 data.mac_dev = mac_dev; in dpaa_eth_add_device()
604 struct mac_device *mac_dev; in mac_probe() local
616 mac_dev = devm_kzalloc(dev, sizeof(*mac_dev), GFP_KERNEL); in mac_probe()
617 if (!mac_dev) { in mac_probe()
628 mac_dev->priv = priv; in mac_probe()
632 setup_dtsec(mac_dev); in mac_probe()
636 setup_tgec(mac_dev); in mac_probe()
638 setup_memac(mac_dev); in mac_probe()
693 mac_dev->res = __devm_request_region(dev, in mac_probe()
697 if (!mac_dev->res) { in mac_probe()
703 priv->vaddr = devm_ioremap(dev, mac_dev->res->start, in mac_probe()
704 mac_dev->res->end + 1 - mac_dev->res->start); in mac_probe()
732 ether_addr_copy(mac_dev->addr, mac_addr); in mac_probe()
743 if (nph != ARRAY_SIZE(mac_dev->port)) { in mac_probe()
750 for (i = 0; i < ARRAY_SIZE(mac_dev->port); i++) { in mac_probe()
768 mac_dev->port[i] = fman_port_bind(&of_dev->dev); in mac_probe()
769 if (!mac_dev->port[i]) { in mac_probe()
786 mac_dev->phy_if = phy_if; in mac_probe()
788 priv->speed = phy2speed[mac_dev->phy_if]; in mac_probe()
790 mac_dev->if_support = DTSEC_SUPPORTED; in mac_probe()
792 if (mac_dev->phy_if == PHY_INTERFACE_MODE_SGMII) in mac_probe()
793 mac_dev->if_support &= ~(SUPPORTED_10baseT_Half | in mac_probe()
798 mac_dev->if_support |= SUPPORTED_1000baseT_Full; in mac_probe()
801 if (mac_dev->phy_if == PHY_INTERFACE_MODE_XGMII) in mac_probe()
802 mac_dev->if_support = SUPPORTED_10000baseT_Full; in mac_probe()
805 mac_dev->phy_node = of_parse_phandle(mac_node, "phy-handle", 0); in mac_probe()
806 if (!mac_dev->phy_node && of_phy_is_fixed_link(mac_node)) { in mac_probe()
820 mac_dev->phy_node = of_node_get(mac_node); in mac_probe()
821 phy = of_phy_find_device(mac_dev->phy_node); in mac_probe()
824 of_node_put(mac_dev->phy_node); in mac_probe()
837 err = mac_dev->init(mac_dev); in mac_probe()
840 of_node_put(mac_dev->phy_node); in mac_probe()
845 mac_dev->autoneg_pause = true; in mac_probe()
850 mac_dev->rx_pause_req = true; in mac_probe()
851 mac_dev->tx_pause_req = true; in mac_probe()
852 mac_dev->rx_pause_active = false; in mac_probe()
853 mac_dev->tx_pause_active = false; in mac_probe()
854 err = fman_set_mac_active_pause(mac_dev, true, true); in mac_probe()
858 dev_info(dev, "FMan MAC address: %pM\n", mac_dev->addr); in mac_probe()
860 priv->eth_dev = dpaa_eth_add_device(fman_id, mac_dev); in mac_probe()