@@ -15624,31 +15624,21 @@ static const char *mg_phy_id_to_str(uint16_t id1, uint16_t id2) {
15624
15624
(void) id2;
15625
15625
}
15626
15626
15627
- static void mg_phy_set_clk_out(struct mg_phy *phy, uint8_t phy_addr) {
15628
- uint16_t id1, id2;
15629
- id1 = phy->read_reg(phy_addr, MG_PHY_REG_ID1);
15630
- id2 = phy->read_reg(phy_addr, MG_PHY_REG_ID2);
15631
-
15632
- if (id1 == MG_PHY_DP83x && id2 == MG_PHY_DP83867) {
15633
- // write 0x10d to IO_MUX_CFG (0x0170)
15634
- phy->write_reg(phy_addr, 0x0d, 0x1f);
15635
- phy->write_reg(phy_addr, 0x0e, 0x170);
15636
- phy->write_reg(phy_addr, 0x0d, 0x401f);
15637
- phy->write_reg(phy_addr, 0x0e, 0x10d);
15638
- }
15639
- }
15640
-
15641
15627
void mg_phy_init(struct mg_phy *phy, uint8_t phy_addr, uint8_t config) {
15642
15628
uint16_t id1, id2;
15643
15629
phy->write_reg(phy_addr, MG_PHY_REG_BCR, MG_BIT(15)); // Reset PHY
15644
- phy->write_reg(phy_addr, MG_PHY_REG_BCR, MG_BIT(12)); // Autonegotiation
15630
+ while (phy->read_reg(phy_addr, MG_PHY_REG_BCR) & MG_BIT(15)) (void) 0;
15631
+ // MG_PHY_REG_BCR[12]: Autonegotiation is default unless hw says otherwise
15645
15632
15646
15633
id1 = phy->read_reg(phy_addr, MG_PHY_REG_ID1);
15647
15634
id2 = phy->read_reg(phy_addr, MG_PHY_REG_ID2);
15648
15635
MG_INFO(("PHY ID: %#04x %#04x (%s)", id1, id2, mg_phy_id_to_str(id1, id2)));
15649
15636
15650
15637
if (id1 == MG_PHY_DP83x && id2 == MG_PHY_DP83867) {
15651
- mg_phy_set_clk_out(phy, phy_addr);
15638
+ phy->write_reg(phy_addr, 0x0d, 0x1f); // write 0x10d to IO_MUX_CFG (0x0170)
15639
+ phy->write_reg(phy_addr, 0x0e, 0x170);
15640
+ phy->write_reg(phy_addr, 0x0d, 0x401f);
15641
+ phy->write_reg(phy_addr, 0x0e, 0x10d);
15652
15642
}
15653
15643
15654
15644
if (config & MG_PHY_CLOCKS_MAC) {
@@ -15711,7 +15701,6 @@ bool mg_phy_up(struct mg_phy *phy, uint8_t phy_addr, bool *full_duplex,
15711
15701
*speed = (scsr & MG_BIT(3)) ? MG_PHY_SPEED_100M : MG_PHY_SPEED_10M;
15712
15702
} else if (id1 == MG_PHY_RTL8201) {
15713
15703
uint16_t bcr = phy->read_reg(phy_addr, MG_PHY_REG_BCR);
15714
- if (bcr & MG_BIT(15)) return 0; // still resetting
15715
15704
*full_duplex = bcr & MG_BIT(8);
15716
15705
*speed = (bcr & MG_BIT(13)) ? MG_PHY_SPEED_100M : MG_PHY_SPEED_10M;
15717
15706
}
0 commit comments