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()
420 static void adjust_link_void(struct mac_device *mac_dev) in adjust_link_void() argument
424 static void adjust_link_dtsec(struct mac_device *mac_dev) in adjust_link_dtsec() argument
426 struct phy_device *phy_dev = mac_dev->phy_dev; in adjust_link_dtsec()
431 fman_mac = mac_dev->fman_mac; in adjust_link_dtsec()
439 fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause); in adjust_link_dtsec()
440 err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause); in adjust_link_dtsec()
442 dev_err(mac_dev->priv->dev, "fman_set_mac_active_pause() = %d\n", in adjust_link_dtsec()
446 static void adjust_link_memac(struct mac_device *mac_dev) in adjust_link_memac() argument
448 struct phy_device *phy_dev = mac_dev->phy_dev; in adjust_link_memac()
453 fman_mac = mac_dev->fman_mac; in adjust_link_memac()
456 fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause); in adjust_link_memac()
457 err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause); in adjust_link_memac()
459 dev_err(mac_dev->priv->dev, "fman_set_mac_active_pause() = %d\n", in adjust_link_memac()
463 static void setup_dtsec(struct mac_device *mac_dev) in setup_dtsec() argument
465 mac_dev->init = dtsec_initialization; in setup_dtsec()
466 mac_dev->set_promisc = dtsec_set_promiscuous; in setup_dtsec()
467 mac_dev->change_addr = dtsec_modify_mac_address; in setup_dtsec()
468 mac_dev->add_hash_mac_addr = dtsec_add_hash_mac_address; in setup_dtsec()
469 mac_dev->remove_hash_mac_addr = dtsec_del_hash_mac_address; in setup_dtsec()
470 mac_dev->set_tx_pause = dtsec_set_tx_pause_frames; in setup_dtsec()
471 mac_dev->set_rx_pause = dtsec_accept_rx_pause_frames; in setup_dtsec()
472 mac_dev->set_exception = dtsec_set_exception; in setup_dtsec()
473 mac_dev->set_allmulti = dtsec_set_allmulti; in setup_dtsec()
474 mac_dev->set_tstamp = dtsec_set_tstamp; in setup_dtsec()
475 mac_dev->set_multi = set_multi; in setup_dtsec()
476 mac_dev->start = start; in setup_dtsec()
477 mac_dev->stop = stop; in setup_dtsec()
478 mac_dev->adjust_link = adjust_link_dtsec; in setup_dtsec()
479 mac_dev->priv->enable = dtsec_enable; in setup_dtsec()
480 mac_dev->priv->disable = dtsec_disable; in setup_dtsec()
483 static void setup_tgec(struct mac_device *mac_dev) in setup_tgec() argument
485 mac_dev->init = tgec_initialization; in setup_tgec()
486 mac_dev->set_promisc = tgec_set_promiscuous; in setup_tgec()
487 mac_dev->change_addr = tgec_modify_mac_address; in setup_tgec()
488 mac_dev->add_hash_mac_addr = tgec_add_hash_mac_address; in setup_tgec()
489 mac_dev->remove_hash_mac_addr = tgec_del_hash_mac_address; in setup_tgec()
490 mac_dev->set_tx_pause = tgec_set_tx_pause_frames; in setup_tgec()
491 mac_dev->set_rx_pause = tgec_accept_rx_pause_frames; in setup_tgec()
492 mac_dev->set_exception = tgec_set_exception; in setup_tgec()
493 mac_dev->set_allmulti = tgec_set_allmulti; in setup_tgec()
494 mac_dev->set_tstamp = tgec_set_tstamp; in setup_tgec()
495 mac_dev->set_multi = set_multi; in setup_tgec()
496 mac_dev->start = start; in setup_tgec()
497 mac_dev->stop = stop; in setup_tgec()
498 mac_dev->adjust_link = adjust_link_void; in setup_tgec()
499 mac_dev->priv->enable = tgec_enable; in setup_tgec()
500 mac_dev->priv->disable = tgec_disable; in setup_tgec()
503 static void setup_memac(struct mac_device *mac_dev) in setup_memac() argument
505 mac_dev->init = memac_initialization; in setup_memac()
506 mac_dev->set_promisc = memac_set_promiscuous; in setup_memac()
507 mac_dev->change_addr = memac_modify_mac_address; in setup_memac()
508 mac_dev->add_hash_mac_addr = memac_add_hash_mac_address; in setup_memac()
509 mac_dev->remove_hash_mac_addr = memac_del_hash_mac_address; in setup_memac()
510 mac_dev->set_tx_pause = memac_set_tx_pause_frames; in setup_memac()
511 mac_dev->set_rx_pause = memac_accept_rx_pause_frames; in setup_memac()
512 mac_dev->set_exception = memac_set_exception; in setup_memac()
513 mac_dev->set_allmulti = memac_set_allmulti; in setup_memac()
514 mac_dev->set_tstamp = memac_set_tstamp; in setup_memac()
515 mac_dev->set_multi = set_multi; in setup_memac()
516 mac_dev->start = start; in setup_memac()
517 mac_dev->stop = stop; in setup_memac()
518 mac_dev->adjust_link = adjust_link_memac; in setup_memac()
519 mac_dev->priv->enable = memac_enable; in setup_memac()
520 mac_dev->priv->disable = memac_disable; in setup_memac()
551 struct mac_device *mac_dev) in dpaa_eth_add_device() argument
559 priv = mac_dev->priv; in dpaa_eth_add_device()
561 data.mac_dev = mac_dev; in dpaa_eth_add_device()
608 struct mac_device *mac_dev; in mac_probe() local
620 mac_dev = devm_kzalloc(dev, sizeof(*mac_dev), GFP_KERNEL); in mac_probe()
621 if (!mac_dev) { in mac_probe()
632 mac_dev->priv = priv; in mac_probe()
636 setup_dtsec(mac_dev); in mac_probe()
640 setup_tgec(mac_dev); in mac_probe()
642 setup_memac(mac_dev); in mac_probe()
697 mac_dev->res = __devm_request_region(dev, in mac_probe()
701 if (!mac_dev->res) { in mac_probe()
707 priv->vaddr = devm_ioremap(dev, mac_dev->res->start, in mac_probe()
708 mac_dev->res->end + 1 - mac_dev->res->start); in mac_probe()
736 memcpy(mac_dev->addr, mac_addr, sizeof(mac_dev->addr)); in mac_probe()
747 if (nph != ARRAY_SIZE(mac_dev->port)) { in mac_probe()
754 for (i = 0; i < ARRAY_SIZE(mac_dev->port); i++) { in mac_probe()
772 mac_dev->port[i] = fman_port_bind(&of_dev->dev); in mac_probe()
773 if (!mac_dev->port[i]) { in mac_probe()
790 mac_dev->phy_if = phy_if; in mac_probe()
792 priv->speed = phy2speed[mac_dev->phy_if]; in mac_probe()
794 mac_dev->if_support = DTSEC_SUPPORTED; in mac_probe()
796 if (mac_dev->phy_if == PHY_INTERFACE_MODE_SGMII) in mac_probe()
797 mac_dev->if_support &= ~(SUPPORTED_10baseT_Half | in mac_probe()
802 mac_dev->if_support |= SUPPORTED_1000baseT_Full; in mac_probe()
805 if (mac_dev->phy_if == PHY_INTERFACE_MODE_XGMII) in mac_probe()
806 mac_dev->if_support = SUPPORTED_10000baseT_Full; in mac_probe()
809 mac_dev->phy_node = of_parse_phandle(mac_node, "phy-handle", 0); in mac_probe()
810 if (!mac_dev->phy_node && of_phy_is_fixed_link(mac_node)) { in mac_probe()
824 mac_dev->phy_node = of_node_get(mac_node); in mac_probe()
825 phy = of_phy_find_device(mac_dev->phy_node); in mac_probe()
828 of_node_put(mac_dev->phy_node); in mac_probe()
841 err = mac_dev->init(mac_dev); in mac_probe()
844 of_node_put(mac_dev->phy_node); in mac_probe()
849 mac_dev->autoneg_pause = true; in mac_probe()
854 mac_dev->rx_pause_req = true; in mac_probe()
855 mac_dev->tx_pause_req = true; in mac_probe()
856 mac_dev->rx_pause_active = false; in mac_probe()
857 mac_dev->tx_pause_active = false; in mac_probe()
858 err = fman_set_mac_active_pause(mac_dev, true, true); in mac_probe()
863 mac_dev->addr[0], mac_dev->addr[1], mac_dev->addr[2], in mac_probe()
864 mac_dev->addr[3], mac_dev->addr[4], mac_dev->addr[5]); in mac_probe()
866 priv->eth_dev = dpaa_eth_add_device(fman_id, mac_dev); in mac_probe()