Lines Matching refs:mii_info

114 static void config_genmii_advert (struct uec_mii_info *mii_info);
115 static void genmii_setup_forced (struct uec_mii_info *mii_info);
116 static void genmii_restart_aneg (struct uec_mii_info *mii_info);
117 static int gbit_config_aneg (struct uec_mii_info *mii_info);
118 static int genmii_config_aneg (struct uec_mii_info *mii_info);
119 static int genmii_update_link (struct uec_mii_info *mii_info);
120 static int genmii_read_status (struct uec_mii_info *mii_info);
121 u16 uec_phy_read(struct uec_mii_info *mii_info, u16 regnum);
122 void uec_phy_write(struct uec_mii_info *mii_info, u16 regnum, u16 val);
214 void mii_clear_phy_interrupt (struct uec_mii_info *mii_info) in mii_clear_phy_interrupt() argument
216 if (mii_info->phyinfo->ack_interrupt) in mii_clear_phy_interrupt()
217 mii_info->phyinfo->ack_interrupt (mii_info); in mii_clear_phy_interrupt()
220 void mii_configure_phy_interrupt (struct uec_mii_info *mii_info, in mii_configure_phy_interrupt() argument
223 mii_info->interrupts = interrupts; in mii_configure_phy_interrupt()
224 if (mii_info->phyinfo->config_intr) in mii_configure_phy_interrupt()
225 mii_info->phyinfo->config_intr (mii_info); in mii_configure_phy_interrupt()
232 static void config_genmii_advert (struct uec_mii_info *mii_info) in config_genmii_advert() argument
238 mii_info->advertising &= mii_info->phyinfo->features; in config_genmii_advert()
239 advertise = mii_info->advertising; in config_genmii_advert()
242 adv = uec_phy_read(mii_info, MII_ADVERTISE); in config_genmii_advert()
252 uec_phy_write(mii_info, MII_ADVERTISE, adv); in config_genmii_advert()
255 static void genmii_setup_forced (struct uec_mii_info *mii_info) in genmii_setup_forced() argument
258 u32 features = mii_info->phyinfo->features; in genmii_setup_forced()
260 ctrl = uec_phy_read(mii_info, MII_BMCR); in genmii_setup_forced()
266 switch (mii_info->speed) { in genmii_setup_forced()
273 mii_info->speed = SPEED_100; in genmii_setup_forced()
280 mii_info->speed = SPEED_10; in genmii_setup_forced()
286 ugphy_err ("%s: Bad speed!", mii_info->dev->name); in genmii_setup_forced()
290 uec_phy_write(mii_info, MII_BMCR, ctrl); in genmii_setup_forced()
294 static void genmii_restart_aneg (struct uec_mii_info *mii_info) in genmii_restart_aneg() argument
298 ctl = uec_phy_read(mii_info, MII_BMCR); in genmii_restart_aneg()
300 uec_phy_write(mii_info, MII_BMCR, ctl); in genmii_restart_aneg()
303 static int gbit_config_aneg (struct uec_mii_info *mii_info) in gbit_config_aneg() argument
308 if (mii_info->autoneg) { in gbit_config_aneg()
310 config_genmii_advert (mii_info); in gbit_config_aneg()
311 advertise = mii_info->advertising; in gbit_config_aneg()
313 adv = uec_phy_read(mii_info, MII_CTRL1000); in gbit_config_aneg()
320 uec_phy_write(mii_info, MII_CTRL1000, adv); in gbit_config_aneg()
323 genmii_restart_aneg (mii_info); in gbit_config_aneg()
325 genmii_setup_forced (mii_info); in gbit_config_aneg()
330 static int marvell_config_aneg (struct uec_mii_info *mii_info) in marvell_config_aneg() argument
335 uec_phy_write(mii_info, MII_BMCR, BMCR_RESET); in marvell_config_aneg()
337 uec_phy_write(mii_info, 0x1d, 0x1f); in marvell_config_aneg()
338 uec_phy_write(mii_info, 0x1e, 0x200c); in marvell_config_aneg()
339 uec_phy_write(mii_info, 0x1d, 0x5); in marvell_config_aneg()
340 uec_phy_write(mii_info, 0x1e, 0); in marvell_config_aneg()
341 uec_phy_write(mii_info, 0x1e, 0x100); in marvell_config_aneg()
343 gbit_config_aneg (mii_info); in marvell_config_aneg()
348 static int genmii_config_aneg (struct uec_mii_info *mii_info) in genmii_config_aneg() argument
350 if (mii_info->autoneg) { in genmii_config_aneg()
353 if (!genmii_read_status(mii_info) && mii_info->link) in genmii_config_aneg()
354 if (mii_info->duplex == DUPLEX_FULL && in genmii_config_aneg()
355 mii_info->speed == SPEED_100) in genmii_config_aneg()
356 if (mii_info->advertising & in genmii_config_aneg()
360 config_genmii_advert (mii_info); in genmii_config_aneg()
361 genmii_restart_aneg (mii_info); in genmii_config_aneg()
363 genmii_setup_forced (mii_info); in genmii_config_aneg()
368 static int genmii_update_link (struct uec_mii_info *mii_info) in genmii_update_link() argument
373 uec_phy_read(mii_info, MII_BMSR); in genmii_update_link()
379 status = uec_phy_read(mii_info, MII_BMSR); in genmii_update_link()
389 mii_info->link = 0; in genmii_update_link()
395 status = uec_phy_read(mii_info, MII_BMSR); in genmii_update_link()
397 mii_info->link = 1; in genmii_update_link()
400 mii_info->link = 1; in genmii_update_link()
402 mii_info->link = 0; in genmii_update_link()
408 static int genmii_read_status (struct uec_mii_info *mii_info) in genmii_read_status() argument
415 err = genmii_update_link (mii_info); in genmii_read_status()
419 if (mii_info->autoneg) { in genmii_read_status()
420 status = uec_phy_read(mii_info, MII_STAT1000); in genmii_read_status()
423 mii_info->speed = SPEED_1000; in genmii_read_status()
425 mii_info->duplex = DUPLEX_FULL; in genmii_read_status()
427 mii_info->duplex = DUPLEX_HALF; in genmii_read_status()
429 status = uec_phy_read(mii_info, MII_LPA); in genmii_read_status()
432 mii_info->duplex = DUPLEX_FULL; in genmii_read_status()
434 mii_info->duplex = DUPLEX_HALF; in genmii_read_status()
436 mii_info->speed = SPEED_100; in genmii_read_status()
438 mii_info->speed = SPEED_10; in genmii_read_status()
440 mii_info->pause = 0; in genmii_read_status()
449 static int bcm_init(struct uec_mii_info *mii_info) in bcm_init() argument
451 struct eth_device *edev = mii_info->dev; in bcm_init()
454 gbit_config_aneg(mii_info); in bcm_init()
464 val = uec_phy_read(mii_info, MII_BMSR); in bcm_init()
468 uec_phy_write(mii_info, 0x18, 0x7 | (7 << 12)); in bcm_init()
470 val = uec_phy_read(mii_info, 0x18); in bcm_init()
476 uec_phy_write(mii_info, 0x18, val); in bcm_init()
482 static int uec_marvell_init(struct uec_mii_info *mii_info) in uec_marvell_init() argument
484 struct eth_device *edev = mii_info->dev; in uec_marvell_init()
495 temp = uec_phy_read(mii_info, MII_M1111_PHY_EXT_CR); in uec_marvell_init()
505 uec_phy_write(mii_info, MII_M1111_PHY_EXT_CR, temp); in uec_marvell_init()
507 temp = uec_phy_read(mii_info, MII_M1111_PHY_EXT_SR); in uec_marvell_init()
510 uec_phy_write(mii_info, MII_M1111_PHY_EXT_SR, temp); in uec_marvell_init()
512 uec_phy_write(mii_info, MII_BMCR, BMCR_RESET); in uec_marvell_init()
518 static int marvell_read_status (struct uec_mii_info *mii_info) in marvell_read_status() argument
525 err = genmii_update_link (mii_info); in marvell_read_status()
532 if (mii_info->autoneg && mii_info->link) { in marvell_read_status()
535 status = uec_phy_read(mii_info, MII_M1011_PHY_SPEC_STATUS); in marvell_read_status()
539 mii_info->duplex = DUPLEX_FULL; in marvell_read_status()
541 mii_info->duplex = DUPLEX_HALF; in marvell_read_status()
547 mii_info->speed = SPEED_1000; in marvell_read_status()
550 mii_info->speed = SPEED_100; in marvell_read_status()
553 mii_info->speed = SPEED_10; in marvell_read_status()
556 mii_info->pause = 0; in marvell_read_status()
562 static int marvell_ack_interrupt (struct uec_mii_info *mii_info) in marvell_ack_interrupt() argument
565 uec_phy_read(mii_info, MII_M1011_IEVENT); in marvell_ack_interrupt()
570 static int marvell_config_intr (struct uec_mii_info *mii_info) in marvell_config_intr() argument
572 if (mii_info->interrupts == MII_INTERRUPT_ENABLED) in marvell_config_intr()
573 uec_phy_write(mii_info, MII_M1011_IMASK, MII_M1011_IMASK_INIT); in marvell_config_intr()
575 uec_phy_write(mii_info, MII_M1011_IMASK, in marvell_config_intr()
581 static int dm9161_init (struct uec_mii_info *mii_info) in dm9161_init() argument
584 uec_phy_write(mii_info, MII_BMCR, uec_phy_read(mii_info, MII_BMCR) | in dm9161_init()
587 uec_phy_write(mii_info, MII_BMCR, uec_phy_read(mii_info, MII_BMCR) & in dm9161_init()
590 uec_phy_write(mii_info, MII_DM9161_SCR, MII_DM9161_SCR_INIT); in dm9161_init()
592 config_genmii_advert (mii_info); in dm9161_init()
594 genmii_config_aneg (mii_info); in dm9161_init()
599 static int dm9161_config_aneg (struct uec_mii_info *mii_info) in dm9161_config_aneg() argument
604 static int dm9161_read_status (struct uec_mii_info *mii_info) in dm9161_read_status() argument
610 err = genmii_update_link (mii_info); in dm9161_read_status()
615 if (mii_info->autoneg && mii_info->link) { in dm9161_read_status()
616 status = uec_phy_read(mii_info, MII_DM9161_SCSR); in dm9161_read_status()
618 mii_info->speed = SPEED_100; in dm9161_read_status()
620 mii_info->speed = SPEED_10; in dm9161_read_status()
623 mii_info->duplex = DUPLEX_FULL; in dm9161_read_status()
625 mii_info->duplex = DUPLEX_HALF; in dm9161_read_status()
631 static int dm9161_ack_interrupt (struct uec_mii_info *mii_info) in dm9161_ack_interrupt() argument
634 uec_phy_read(mii_info, MII_DM9161_INTR); in dm9161_ack_interrupt()
639 static int dm9161_config_intr (struct uec_mii_info *mii_info) in dm9161_config_intr() argument
641 if (mii_info->interrupts == MII_INTERRUPT_ENABLED) in dm9161_config_intr()
642 uec_phy_write(mii_info, MII_DM9161_INTR, MII_DM9161_INTR_INIT); in dm9161_config_intr()
644 uec_phy_write(mii_info, MII_DM9161_INTR, MII_DM9161_INTR_STOP); in dm9161_config_intr()
649 static void dm9161_close (struct uec_mii_info *mii_info) in dm9161_close() argument
653 static int fixed_phy_aneg (struct uec_mii_info *mii_info) in fixed_phy_aneg() argument
655 mii_info->autoneg = 0; /* Turn off auto negotiation for fixed phy */ in fixed_phy_aneg()
659 static int fixed_phy_read_status (struct uec_mii_info *mii_info) in fixed_phy_read_status() argument
664 if (strncmp(mii_info->dev->name, fixed_phy_port[i].name, in fixed_phy_read_status()
665 strlen(mii_info->dev->name)) == 0) { in fixed_phy_read_status()
666 mii_info->speed = fixed_phy_port[i].speed; in fixed_phy_read_status()
667 mii_info->duplex = fixed_phy_port[i].duplex; in fixed_phy_read_status()
668 mii_info->link = 1; /* Link is always UP */ in fixed_phy_read_status()
669 mii_info->pause = 0; in fixed_phy_read_status()
676 static int smsc_config_aneg (struct uec_mii_info *mii_info) in smsc_config_aneg() argument
681 static int smsc_read_status (struct uec_mii_info *mii_info) in smsc_read_status() argument
688 err = genmii_update_link (mii_info); in smsc_read_status()
695 if (mii_info->autoneg && mii_info->link) { in smsc_read_status()
698 status = uec_phy_read(mii_info, 0x1f); in smsc_read_status()
703 mii_info->duplex = DUPLEX_HALF; in smsc_read_status()
704 mii_info->speed = SPEED_10; in smsc_read_status()
707 mii_info->duplex = DUPLEX_FULL; in smsc_read_status()
708 mii_info->speed = SPEED_10; in smsc_read_status()
711 mii_info->duplex = DUPLEX_HALF; in smsc_read_status()
712 mii_info->speed = SPEED_100; in smsc_read_status()
715 mii_info->duplex = DUPLEX_FULL; in smsc_read_status()
716 mii_info->speed = SPEED_100; in smsc_read_status()
719 mii_info->pause = 0; in smsc_read_status()
806 u16 uec_phy_read(struct uec_mii_info *mii_info, u16 regnum) in uec_phy_read() argument
808 return mii_info->mdio_read (mii_info->dev, mii_info->mii_id, regnum); in uec_phy_read()
811 void uec_phy_write(struct uec_mii_info *mii_info, u16 regnum, u16 val) in uec_phy_write() argument
813 mii_info->mdio_write (mii_info->dev, mii_info->mii_id, regnum, val); in uec_phy_write()
819 struct phy_info *uec_get_phy_info (struct uec_mii_info *mii_info) in uec_get_phy_info() argument
827 phy_reg = uec_phy_read(mii_info, MII_PHYSID1); in uec_get_phy_info()
831 phy_reg = uec_phy_read(mii_info, MII_PHYSID2); in uec_get_phy_info()
858 struct uec_mii_info *mii_info; in marvell_phy_interface_mode() local
861 if (!uec->mii_info) { in marvell_phy_interface_mode()
865 mii_info = uec->mii_info; in marvell_phy_interface_mode()
869 uec_phy_write(mii_info, 0x00, 0x9140); in marvell_phy_interface_mode()
870 uec_phy_write(mii_info, 0x1d, 0x001f); in marvell_phy_interface_mode()
871 uec_phy_write(mii_info, 0x1e, 0x200c); in marvell_phy_interface_mode()
872 uec_phy_write(mii_info, 0x1d, 0x0005); in marvell_phy_interface_mode()
873 uec_phy_write(mii_info, 0x1e, 0x0000); in marvell_phy_interface_mode()
874 uec_phy_write(mii_info, 0x1e, 0x0100); in marvell_phy_interface_mode()
875 uec_phy_write(mii_info, 0x09, 0x0e00); in marvell_phy_interface_mode()
876 uec_phy_write(mii_info, 0x04, 0x01e1); in marvell_phy_interface_mode()
877 uec_phy_write(mii_info, 0x00, 0x9140); in marvell_phy_interface_mode()
878 uec_phy_write(mii_info, 0x00, 0x1000); in marvell_phy_interface_mode()
880 uec_phy_write(mii_info, 0x00, 0x2900); in marvell_phy_interface_mode()
881 uec_phy_write(mii_info, 0x14, 0x0cd2); in marvell_phy_interface_mode()
882 uec_phy_write(mii_info, 0x00, 0xa100); in marvell_phy_interface_mode()
883 uec_phy_write(mii_info, 0x09, 0x0000); in marvell_phy_interface_mode()
884 uec_phy_write(mii_info, 0x1b, 0x800b); in marvell_phy_interface_mode()
885 uec_phy_write(mii_info, 0x04, 0x05e1); in marvell_phy_interface_mode()
886 uec_phy_write(mii_info, 0x00, 0xa100); in marvell_phy_interface_mode()
887 uec_phy_write(mii_info, 0x00, 0x2100); in marvell_phy_interface_mode()
890 uec_phy_write(mii_info, 0x14, 0x8e40); in marvell_phy_interface_mode()
891 uec_phy_write(mii_info, 0x1b, 0x800b); in marvell_phy_interface_mode()
892 uec_phy_write(mii_info, 0x14, 0x0c82); in marvell_phy_interface_mode()
893 uec_phy_write(mii_info, 0x00, 0x8100); in marvell_phy_interface_mode()
899 if (mii_info->autoneg) { in marvell_phy_interface_mode()
900 status = uec_phy_read(mii_info, MII_BMCR); in marvell_phy_interface_mode()
901 uec_phy_write(mii_info, MII_BMCR, status | BMCR_ANENABLE); in marvell_phy_interface_mode()