Lines Matching refs:tp
72 int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in get_registers() argument
77 ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0), in get_registers()
85 int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in set_registers() argument
90 return usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0), in set_registers()
95 int generic_ocp_read(struct r8152 *tp, u16 index, u16 size, in generic_ocp_read() argument
111 ret = get_registers(tp, index, type, txsize, data); in generic_ocp_read()
123 int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen, in generic_ocp_write() argument
142 ret = set_registers(tp, index, type | byte_en_to_hw, 4, data); in generic_ocp_write()
156 ret = set_registers(tp, index, in generic_ocp_write()
168 ret = set_registers(tp, index, type | byte_en_to_hw, 4, data); in generic_ocp_write()
176 int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data) in pla_ocp_read() argument
178 return generic_ocp_read(tp, index, size, data, MCU_TYPE_PLA); in pla_ocp_read()
181 int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in pla_ocp_write() argument
183 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_PLA); in pla_ocp_write()
186 int usb_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data) in usb_ocp_read() argument
188 return generic_ocp_read(tp, index, size, data, MCU_TYPE_USB); in usb_ocp_read()
191 int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in usb_ocp_write() argument
193 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB); in usb_ocp_write()
196 u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index) in ocp_read_dword() argument
200 generic_ocp_read(tp, index, sizeof(data), &data, type); in ocp_read_dword()
205 void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_dword() argument
209 generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type); in ocp_write_dword()
212 u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index) in ocp_read_word() argument
220 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type); in ocp_read_word()
229 void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_word() argument
247 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_word()
250 u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index) in ocp_read_byte() argument
258 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type); in ocp_read_byte()
267 void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_byte() argument
285 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_byte()
288 u16 ocp_reg_read(struct r8152 *tp, u16 addr) in ocp_reg_read() argument
293 if (ocp_base != tp->ocp_base) { in ocp_reg_read()
294 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_read()
295 tp->ocp_base = ocp_base; in ocp_reg_read()
299 return ocp_read_word(tp, MCU_TYPE_PLA, ocp_index); in ocp_reg_read()
302 void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data) in ocp_reg_write() argument
307 if (ocp_base != tp->ocp_base) { in ocp_reg_write()
308 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_write()
309 tp->ocp_base = ocp_base; in ocp_reg_write()
313 ocp_write_word(tp, MCU_TYPE_PLA, ocp_index, data); in ocp_reg_write()
316 static void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value) in r8152_mdio_write() argument
318 ocp_reg_write(tp, OCP_BASE_MII + reg_addr * 2, value); in r8152_mdio_write()
321 static int r8152_mdio_read(struct r8152 *tp, u32 reg_addr) in r8152_mdio_read() argument
323 return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2); in r8152_mdio_read()
326 void sram_write(struct r8152 *tp, u16 addr, u16 data) in sram_write() argument
328 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_write()
329 ocp_reg_write(tp, OCP_SRAM_DATA, data); in sram_write()
332 int r8152_wait_for_bit(struct r8152 *tp, bool ocp_reg, u16 type, u16 index, in r8152_wait_for_bit() argument
339 val = ocp_reg_read(tp, index); in r8152_wait_for_bit()
341 val = ocp_read_dword(tp, type, index); in r8152_wait_for_bit()
358 static void r8152b_reset_packet_filter(struct r8152 *tp) in r8152b_reset_packet_filter() argument
362 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC); in r8152b_reset_packet_filter()
364 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
366 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
369 static void rtl8152_wait_fifo_empty(struct r8152 *tp) in rtl8152_wait_fifo_empty() argument
373 ret = r8152_wait_for_bit(tp, 0, MCU_TYPE_PLA, PLA_PHY_PWR, in rtl8152_wait_fifo_empty()
378 ret = r8152_wait_for_bit(tp, 0, MCU_TYPE_PLA, PLA_TCR0, in rtl8152_wait_fifo_empty()
384 static void rtl8152_nic_reset(struct r8152 *tp) in rtl8152_nic_reset() argument
389 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, BIST_CTRL); in rtl8152_nic_reset()
391 ocp_write_dword(tp, MCU_TYPE_PLA, BIST_CTRL, ocp_data); in rtl8152_nic_reset()
393 ret = r8152_wait_for_bit(tp, 0, MCU_TYPE_PLA, BIST_CTRL, in rtl8152_nic_reset()
399 static u8 rtl8152_get_speed(struct r8152 *tp) in rtl8152_get_speed() argument
401 return ocp_read_byte(tp, MCU_TYPE_PLA, PLA_PHYSTATUS); in rtl8152_get_speed()
404 static void rtl_set_eee_plus(struct r8152 *tp) in rtl_set_eee_plus() argument
408 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
410 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
413 static void rxdy_gated_en(struct r8152 *tp, bool enable) in rxdy_gated_en() argument
417 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); in rxdy_gated_en()
422 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); in rxdy_gated_en()
425 static void rtl8152_set_rx_mode(struct r8152 *tp) in rtl8152_set_rx_mode() argument
433 pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp); in rtl8152_set_rx_mode()
435 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8152_set_rx_mode()
437 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8152_set_rx_mode()
440 static int rtl_enable(struct r8152 *tp) in rtl_enable() argument
444 r8152b_reset_packet_filter(tp); in rtl_enable()
446 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl_enable()
448 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl_enable()
450 rxdy_gated_en(tp, false); in rtl_enable()
452 rtl8152_set_rx_mode(tp); in rtl_enable()
457 static int rtl8152_enable(struct r8152 *tp) in rtl8152_enable() argument
459 rtl_set_eee_plus(tp); in rtl8152_enable()
461 return rtl_enable(tp); in rtl8152_enable()
464 static void r8153_set_rx_early_timeout(struct r8152 *tp) in r8153_set_rx_early_timeout() argument
466 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
468 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, ocp_data); in r8153_set_rx_early_timeout()
471 static void r8153_set_rx_early_size(struct r8152 *tp) in r8153_set_rx_early_size() argument
475 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, ocp_data); in r8153_set_rx_early_size()
478 static int rtl8153_enable(struct r8152 *tp) in rtl8153_enable() argument
480 rtl_set_eee_plus(tp); in rtl8153_enable()
481 r8153_set_rx_early_timeout(tp); in rtl8153_enable()
482 r8153_set_rx_early_size(tp); in rtl8153_enable()
484 return rtl_enable(tp); in rtl8153_enable()
487 static void rtl_disable(struct r8152 *tp) in rtl_disable() argument
491 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl_disable()
493 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl_disable()
495 rxdy_gated_en(tp, true); in rtl_disable()
497 rtl8152_wait_fifo_empty(tp); in rtl_disable()
498 rtl8152_nic_reset(tp); in rtl_disable()
501 static void r8152_power_cut_en(struct r8152 *tp, bool enable) in r8152_power_cut_en() argument
505 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); in r8152_power_cut_en()
510 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); in r8152_power_cut_en()
512 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS); in r8152_power_cut_en()
514 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data); in r8152_power_cut_en()
517 static void rtl_rx_vlan_en(struct r8152 *tp, bool enable) in rtl_rx_vlan_en() argument
521 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); in rtl_rx_vlan_en()
526 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); in rtl_rx_vlan_en()
529 static void r8153_u1u2en(struct r8152 *tp, bool enable) in r8153_u1u2en() argument
538 usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2); in r8153_u1u2en()
541 static void r8153_u2p3en(struct r8152 *tp, bool enable) in r8153_u2p3en() argument
545 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL); in r8153_u2p3en()
546 if (enable && tp->version != RTL_VER_03 && tp->version != RTL_VER_04) in r8153_u2p3en()
550 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data); in r8153_u2p3en()
553 static void r8153_power_cut_en(struct r8152 *tp, bool enable) in r8153_power_cut_en() argument
557 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153_power_cut_en()
562 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153_power_cut_en()
564 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153_power_cut_en()
566 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153_power_cut_en()
569 static int r8152_read_mac(struct r8152 *tp, unsigned char *macaddr) in r8152_read_mac() argument
574 ret = pla_ocp_read(tp, PLA_IDR, 8, enetaddr); in r8152_read_mac()
582 static void r8152b_disable_aldps(struct r8152 *tp) in r8152b_disable_aldps() argument
584 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA | DIS_SDSAVE); in r8152b_disable_aldps()
588 static void r8152b_enable_aldps(struct r8152 *tp) in r8152b_enable_aldps() argument
590 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS | in r8152b_enable_aldps()
594 static void rtl8152_disable(struct r8152 *tp) in rtl8152_disable() argument
596 r8152b_disable_aldps(tp); in rtl8152_disable()
597 rtl_disable(tp); in rtl8152_disable()
598 r8152b_enable_aldps(tp); in rtl8152_disable()
601 static void r8152b_hw_phy_cfg(struct r8152 *tp) in r8152b_hw_phy_cfg() argument
605 data = r8152_mdio_read(tp, MII_BMCR); in r8152b_hw_phy_cfg()
608 r8152_mdio_write(tp, MII_BMCR, data); in r8152b_hw_phy_cfg()
611 r8152b_firmware(tp); in r8152b_hw_phy_cfg()
614 static void rtl8152_reinit_ll(struct r8152 *tp) in rtl8152_reinit_ll() argument
619 ret = r8152_wait_for_bit(tp, 0, MCU_TYPE_PLA, PLA_PHY_PWR, in rtl8152_reinit_ll()
624 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in rtl8152_reinit_ll()
626 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in rtl8152_reinit_ll()
628 ret = r8152_wait_for_bit(tp, 0, MCU_TYPE_PLA, PLA_PHY_PWR, in rtl8152_reinit_ll()
634 static void r8152b_exit_oob(struct r8152 *tp) in r8152b_exit_oob() argument
638 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_exit_oob()
640 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_exit_oob()
642 rxdy_gated_en(tp, true); in r8152b_exit_oob()
643 r8152b_hw_phy_cfg(tp); in r8152b_exit_oob()
645 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8152b_exit_oob()
646 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00); in r8152b_exit_oob()
648 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
650 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_exit_oob()
652 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
654 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
656 rtl8152_reinit_ll(tp); in r8152b_exit_oob()
657 rtl8152_nic_reset(tp); in r8152b_exit_oob()
660 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8152b_exit_oob()
662 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
663 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
665 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
667 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
671 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
673 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
678 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL); in r8152b_exit_oob()
680 ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD); in r8152b_exit_oob()
681 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH); in r8152b_exit_oob()
682 ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA, in r8152b_exit_oob()
685 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_exit_oob()
687 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8152b_exit_oob()
689 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8152b_exit_oob()
692 static void r8152b_enter_oob(struct r8152 *tp) in r8152b_enter_oob() argument
696 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
698 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
700 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB); in r8152b_enter_oob()
701 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); in r8152b_enter_oob()
702 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); in r8152b_enter_oob()
704 rtl_disable(tp); in r8152b_enter_oob()
706 rtl8152_reinit_ll(tp); in r8152b_enter_oob()
708 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_enter_oob()
710 rtl_rx_vlan_en(tp, false); in r8152b_enter_oob()
712 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PAL_BDC_CR); in r8152b_enter_oob()
714 ocp_write_word(tp, MCU_TYPE_PLA, PAL_BDC_CR, ocp_data); in r8152b_enter_oob()
716 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
718 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
720 rxdy_gated_en(tp, false); in r8152b_enter_oob()
722 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_enter_oob()
724 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_enter_oob()
727 static void r8153_hw_phy_cfg(struct r8152 *tp) in r8153_hw_phy_cfg() argument
732 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 || in r8153_hw_phy_cfg()
733 tp->version == RTL_VER_05) in r8153_hw_phy_cfg()
734 ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L); in r8153_hw_phy_cfg()
736 data = r8152_mdio_read(tp, MII_BMCR); in r8153_hw_phy_cfg()
739 r8152_mdio_write(tp, MII_BMCR, data); in r8153_hw_phy_cfg()
742 r8153_firmware(tp); in r8153_hw_phy_cfg()
744 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
745 data = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_hw_phy_cfg()
747 ocp_reg_write(tp, OCP_EEE_CFG, data); in r8153_hw_phy_cfg()
750 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
752 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
754 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153_hw_phy_cfg()
756 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153_hw_phy_cfg()
757 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
759 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
760 sram_write(tp, SRAM_IMPEDANCE, 0x0b13); in r8153_hw_phy_cfg()
762 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153_hw_phy_cfg()
764 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153_hw_phy_cfg()
767 sram_write(tp, SRAM_LPF_CFG, 0xf70f); in r8153_hw_phy_cfg()
770 sram_write(tp, SRAM_10M_AMP1, 0x00af); in r8153_hw_phy_cfg()
771 sram_write(tp, SRAM_10M_AMP2, 0x0208); in r8153_hw_phy_cfg()
774 static void r8153_first_init(struct r8152 *tp) in r8153_first_init() argument
778 rxdy_gated_en(tp, true); in r8153_first_init()
780 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_first_init()
782 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_first_init()
784 r8153_hw_phy_cfg(tp); in r8153_first_init()
786 rtl8152_nic_reset(tp); in r8153_first_init()
788 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
790 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_first_init()
792 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
794 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
796 rtl8152_reinit_ll(tp); in r8153_first_init()
798 rtl_rx_vlan_en(tp, false); in r8153_first_init()
801 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data); in r8153_first_init()
802 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); in r8153_first_init()
804 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8153_first_init()
806 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8153_first_init()
808 rtl8152_nic_reset(tp); in r8153_first_init()
811 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8153_first_init()
812 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL); in r8153_first_init()
813 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL); in r8153_first_init()
815 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2); in r8153_first_init()
818 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153_first_init()
821 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153_first_init()
824 static void r8153_enter_oob(struct r8152 *tp) in r8153_enter_oob() argument
828 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
830 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
832 rtl_disable(tp); in r8153_enter_oob()
834 rtl8152_reinit_ll(tp); in r8153_enter_oob()
837 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data); in r8153_enter_oob()
839 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_enter_oob()
841 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_enter_oob()
843 rtl_rx_vlan_en(tp, false); in r8153_enter_oob()
845 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PAL_BDC_CR); in r8153_enter_oob()
847 ocp_write_word(tp, MCU_TYPE_PLA, PAL_BDC_CR, ocp_data); in r8153_enter_oob()
849 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
851 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
853 rxdy_gated_en(tp, false); in r8153_enter_oob()
855 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_enter_oob()
857 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_enter_oob()
860 static void r8153_disable_aldps(struct r8152 *tp) in r8153_disable_aldps() argument
864 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_disable_aldps()
866 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_disable_aldps()
870 static void rtl8153_disable(struct r8152 *tp) in rtl8153_disable() argument
872 r8153_disable_aldps(tp); in rtl8153_disable()
873 rtl_disable(tp); in rtl8153_disable()
876 static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u16 speed, u8 duplex) in rtl8152_set_speed() argument
880 anar = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_set_speed()
883 if (tp->supports_gmii) { in rtl8152_set_speed()
884 gbcr = r8152_mdio_read(tp, MII_CTRL1000); in rtl8152_set_speed()
897 } else if (speed == SPEED_1000 && tp->supports_gmii) { in rtl8152_set_speed()
920 } else if (speed == SPEED_1000 && tp->supports_gmii) { in rtl8152_set_speed()
937 if (tp->supports_gmii) in rtl8152_set_speed()
938 r8152_mdio_write(tp, MII_CTRL1000, gbcr); in rtl8152_set_speed()
940 r8152_mdio_write(tp, MII_ADVERTISE, anar); in rtl8152_set_speed()
941 r8152_mdio_write(tp, MII_BMCR, bmcr); in rtl8152_set_speed()
946 static void rtl8152_up(struct r8152 *tp) in rtl8152_up() argument
948 r8152b_disable_aldps(tp); in rtl8152_up()
949 r8152b_exit_oob(tp); in rtl8152_up()
950 r8152b_enable_aldps(tp); in rtl8152_up()
953 static void rtl8152_down(struct r8152 *tp) in rtl8152_down() argument
955 r8152_power_cut_en(tp, false); in rtl8152_down()
956 r8152b_disable_aldps(tp); in rtl8152_down()
957 r8152b_enter_oob(tp); in rtl8152_down()
958 r8152b_enable_aldps(tp); in rtl8152_down()
961 static void rtl8153_up(struct r8152 *tp) in rtl8153_up() argument
963 r8153_u1u2en(tp, false); in rtl8153_up()
964 r8153_disable_aldps(tp); in rtl8153_up()
965 r8153_first_init(tp); in rtl8153_up()
966 r8153_u2p3en(tp, false); in rtl8153_up()
969 static void rtl8153_down(struct r8152 *tp) in rtl8153_down() argument
971 r8153_u1u2en(tp, false); in rtl8153_down()
972 r8153_u2p3en(tp, false); in rtl8153_down()
973 r8153_power_cut_en(tp, false); in rtl8153_down()
974 r8153_disable_aldps(tp); in rtl8153_down()
975 r8153_enter_oob(tp); in rtl8153_down()
978 static void r8152b_get_version(struct r8152 *tp) in r8152b_get_version() argument
984 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR1); in r8152b_get_version()
990 tp->version = r8152_versions[i].version; in r8152b_get_version()
991 tp->supports_gmii = r8152_versions[i].gmii; in r8152b_get_version()
996 if (tp->version == RTL_VER_UNKNOWN) in r8152b_get_version()
1000 static void r8152b_enable_fc(struct r8152 *tp) in r8152b_enable_fc() argument
1003 anar = r8152_mdio_read(tp, MII_ADVERTISE); in r8152b_enable_fc()
1005 r8152_mdio_write(tp, MII_ADVERTISE, anar); in r8152b_enable_fc()
1008 static void rtl_tally_reset(struct r8152 *tp) in rtl_tally_reset() argument
1012 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY); in rtl_tally_reset()
1014 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data); in rtl_tally_reset()
1017 static void r8152b_init(struct r8152 *tp) in r8152b_init() argument
1021 r8152b_disable_aldps(tp); in r8152b_init()
1023 if (tp->version == RTL_VER_01) { in r8152b_init()
1024 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8152b_init()
1026 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8152b_init()
1029 r8152_power_cut_en(tp, false); in r8152b_init()
1031 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8152b_init()
1033 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8152b_init()
1034 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL); in r8152b_init()
1037 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ocp_data); in r8152b_init()
1040 ocp_write_word(tp, MCU_TYPE_PLA, PLA_GPHY_INTR_IMR, ocp_data); in r8152b_init()
1042 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_TIMER); in r8152b_init()
1044 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_TIMER, ocp_data); in r8152b_init()
1045 ocp_write_word(tp, MCU_TYPE_USB, 0xcbfc, 0x03e8); in r8152b_init()
1047 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_TIMER, ocp_data); in r8152b_init()
1049 r8152b_enable_fc(tp); in r8152b_init()
1050 rtl_tally_reset(tp); in r8152b_init()
1053 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8152b_init()
1056 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8152b_init()
1059 static void r8153_init(struct r8152 *tp) in r8153_init() argument
1064 r8153_disable_aldps(tp); in r8153_init()
1065 r8153_u1u2en(tp, false); in r8153_init()
1067 r8152_wait_for_bit(tp, 0, MCU_TYPE_PLA, PLA_BOOT_CTRL, in r8153_init()
1071 ocp_data = ocp_reg_read(tp, OCP_PHY_STATUS) & PHY_STAT_MASK; in r8153_init()
1078 r8153_u2p3en(tp, false); in r8153_init()
1080 if (tp->version == RTL_VER_04) { in r8153_init()
1081 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2); in r8153_init()
1084 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2, ocp_data); in r8153_init()
1086 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_init()
1088 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_init()
1089 } else if (tp->version == RTL_VER_05) { in r8153_init()
1090 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0); in r8153_init()
1092 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0, ocp_data); in r8153_init()
1094 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
1095 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
1099 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
1100 } else if (tp->version == RTL_VER_06) { in r8153_init()
1101 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
1102 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
1106 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
1109 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2); in r8153_init()
1111 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, ocp_data); in r8153_init()
1113 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL); in r8153_init()
1115 ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data); in r8153_init()
1117 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8153_init()
1119 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8153_init()
1122 if (tp->version == RTL_VER_04 && tp->udev->speed != USB_SPEED_SUPER) in r8153_init()
1126 ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data); in r8153_init()
1128 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2); in r8153_init()
1131 ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data); in r8153_init()
1133 ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001); in r8153_init()
1135 r8153_power_cut_en(tp, false); in r8153_init()
1137 r8152b_enable_fc(tp); in r8153_init()
1138 rtl_tally_reset(tp); in r8153_init()
1141 static void rtl8152_unload(struct r8152 *tp) in rtl8152_unload() argument
1143 if (tp->version != RTL_VER_01) in rtl8152_unload()
1144 r8152_power_cut_en(tp, true); in rtl8152_unload()
1147 static void rtl8153_unload(struct r8152 *tp) in rtl8153_unload() argument
1149 r8153_power_cut_en(tp, false); in rtl8153_unload()
1152 static int rtl_ops_init(struct r8152 *tp) in rtl_ops_init() argument
1154 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
1157 switch (tp->version) { in rtl_ops_init()
1190 static int r8152_init_common(struct r8152 *tp) in r8152_init_common() argument
1199 speed = rtl8152_get_speed(tp); in r8152_init_common()
1210 tp->rtl_ops.enable(tp); in r8152_init_common()
1253 struct r8152 *tp = (struct r8152 *)dev->dev_priv; in r8152_init() local
1255 return r8152_init_common(tp); in r8152_init()
1319 struct r8152 *tp = (struct r8152 *)dev->dev_priv; in r8152_halt() local
1323 tp->rtl_ops.disable(tp); in r8152_halt()
1329 struct r8152 *tp = (struct r8152 *)dev->dev_priv; in r8152_write_hwaddr() local
1335 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in r8152_write_hwaddr()
1336 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, enetaddr); in r8152_write_hwaddr()
1337 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8152_write_hwaddr()
1357 struct r8152 *tp; in r8152_eth_probe() local
1434 tp = ss->dev_priv; in r8152_eth_probe()
1435 tp->udev = dev; in r8152_eth_probe()
1436 tp->intf = iface; in r8152_eth_probe()
1438 r8152b_get_version(tp); in r8152_eth_probe()
1440 if (rtl_ops_init(tp)) in r8152_eth_probe()
1443 tp->rtl_ops.init(tp); in r8152_eth_probe()
1444 tp->rtl_ops.up(tp); in r8152_eth_probe()
1446 rtl8152_set_speed(tp, AUTONEG_ENABLE, in r8152_eth_probe()
1447 tp->supports_gmii ? SPEED_1000 : SPEED_100, in r8152_eth_probe()
1481 struct r8152 *tp = dev_get_priv(dev); in r8152_eth_start() local
1485 return r8152_init_common(tp); in r8152_eth_start()
1490 struct r8152 *tp = dev_get_priv(dev); in r8152_eth_stop() local
1494 tp->rtl_ops.disable(tp); in r8152_eth_stop()
1499 struct r8152 *tp = dev_get_priv(dev); in r8152_eth_send() local
1501 return r8152_send_common(&tp->ueth, packet, length); in r8152_eth_send()
1506 struct r8152 *tp = dev_get_priv(dev); in r8152_eth_recv() local
1507 struct ueth_data *ueth = &tp->ueth; in r8152_eth_recv()
1545 struct r8152 *tp = dev_get_priv(dev); in r8152_free_pkt() local
1549 usb_ether_advance_rxbuf(&tp->ueth, packet_len); in r8152_free_pkt()
1557 struct r8152 *tp = dev_get_priv(dev); in r8152_write_hwaddr() local
1564 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in r8152_write_hwaddr()
1565 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, enetaddr); in r8152_write_hwaddr()
1566 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8152_write_hwaddr()
1575 struct r8152 *tp = dev_get_priv(dev); in r8152_read_rom_hwaddr() local
1578 r8152_read_mac(tp, pdata->enetaddr); in r8152_read_rom_hwaddr()
1586 struct r8152 *tp = dev_get_priv(dev); in r8152_eth_probe() local
1587 struct ueth_data *ueth = &tp->ueth; in r8152_eth_probe()
1590 tp->udev = udev; in r8152_eth_probe()
1591 r8152_read_mac(tp, pdata->enetaddr); in r8152_eth_probe()
1593 r8152b_get_version(tp); in r8152_eth_probe()
1595 ret = rtl_ops_init(tp); in r8152_eth_probe()
1599 tp->rtl_ops.init(tp); in r8152_eth_probe()
1600 tp->rtl_ops.up(tp); in r8152_eth_probe()
1602 rtl8152_set_speed(tp, AUTONEG_ENABLE, in r8152_eth_probe()
1603 tp->supports_gmii ? SPEED_1000 : SPEED_100, in r8152_eth_probe()