Skip to content

Commit 769f5cf

Browse files
committed
stm32/eth_phy: Add support for 1000Mbit PHY.
Signed-off-by: Damien George <[email protected]>
1 parent 15acd6d commit 769f5cf

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

ports/stm32/eth_phy.c

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,9 @@
3131
#if defined(MICROPY_HW_ETH_MDC)
3232

3333
#define PHY_SCSR_LAN87XX (0x001f)
34-
#define PHY_SCSR_LAN87XX_SPEED_Pos (2)
35-
#define PHY_SCSR_LAN87XX_SPEED_Msk (7)
34+
#define PHY_SCSR_LAN87XX_10M_Msk (0x0004)
35+
#define PHY_SCSR_LAN87XX_100M_Msk (0x0008)
36+
#define PHY_SCSR_LAN87XX_DUPLEX_Msk (0x0010)
3637

3738
#define PHY_SCSR_DP838XX (0x0010)
3839
#define PHY_RECR_DP838XX (0x0015)
@@ -41,8 +42,18 @@
4142

4243
int16_t eth_phy_lan87xx_get_link_status(uint32_t phy_addr) {
4344
// Get the link mode & speed
44-
int16_t scsr = eth_phy_read(phy_addr, PHY_SCSR_LAN87XX);
45-
return (scsr >> PHY_SCSR_LAN87XX_SPEED_Pos) & PHY_SCSR_LAN87XX_SPEED_Msk;
45+
uint16_t scsr = eth_phy_read(phy_addr, PHY_SCSR_LAN87XX);
46+
int16_t status = 0;
47+
if (scsr & PHY_SCSR_LAN87XX_10M_Msk) {
48+
status |= PHY_SPEED_10HALF;
49+
}
50+
if (scsr & PHY_SCSR_LAN87XX_100M_Msk) {
51+
status |= PHY_SPEED_100HALF;
52+
}
53+
if (scsr & PHY_SCSR_LAN87XX_DUPLEX_Msk) {
54+
status |= PHY_DUPLEX;
55+
}
56+
return status;
4657
}
4758

4859
int16_t eth_phy_dp838xx_get_link_status(uint32_t phy_addr) {

ports/stm32/eth_phy.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,13 @@
5050
#define PHY_ANAR_SPEED_100FULL (0x0100)
5151
#define PHY_ANAR_IEEE802_3 (0x0001)
5252

53-
#define PHY_SPEED_10HALF (1)
54-
#define PHY_SPEED_10FULL (5)
55-
#define PHY_SPEED_100HALF (2)
56-
#define PHY_SPEED_100FULL (6)
57-
#define PHY_DUPLEX (4)
53+
#define PHY_SPEED_10HALF (0x01)
54+
#define PHY_SPEED_100HALF (0x02)
55+
#define PHY_SPEED_1000HALF (0x04)
56+
#define PHY_DUPLEX (0x08)
57+
#define PHY_SPEED_10FULL (PHY_DUPLEX | PHY_SPEED_10HALF)
58+
#define PHY_SPEED_100FULL (PHY_DUPLEX | PHY_SPEED_100HALF)
59+
#define PHY_SPEED_1000FULL (PHY_DUPLEX | PHY_SPEED_1000HALF)
5860

5961
uint32_t eth_phy_read(uint32_t phy_addr, uint32_t reg);
6062
void eth_phy_write(uint32_t phy_addr, uint32_t reg, uint32_t val);

0 commit comments

Comments
 (0)