mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Without this fix N-type SOC devices like RTL8372N, RTL8383N and also the 4-port PHY RTL8224N, don't have a functional Serdes. Although the SOC sees a link, there is no packet flow on both SFP-port nor RTL8224 ports. Added helper functions to read/write to the RTL8224. RTL8224 has the same register layout so we can use the same register defines as for the main SOC.
32 lines
1.1 KiB
C
32 lines
1.1 KiB
C
#ifndef _RTL837X_PHY_H_
|
|
#define _RTL837X_PHY_H_
|
|
|
|
#define PHY_SPEED_10M 0x2
|
|
#define PHY_SPEED_100M 0x3
|
|
#define PHY_SPEED_1G 0x4
|
|
#define PHY_SPEED_2G5 0x5
|
|
#define PHY_SPEED_5G 0x6
|
|
#define PHY_SPEED_10G 0x7
|
|
#define PHY_SPEED_AUTO 0x10
|
|
#define PHY_OFF 0xff
|
|
|
|
void rtl8224_phy_enable(void) __banked;
|
|
void phy_config(uint8_t phy) __banked;
|
|
void phy_config_8224(void) __banked;
|
|
void phy_set_speed(uint8_t port, uint8_t speed, uint8_t duplex) __banked;
|
|
void phy_set_duplex(uint8_t port, uint8_t fullduplex) __banked;
|
|
void phy_show(uint8_t port) __banked;
|
|
void phy_reset(uint8_t port) __banked;
|
|
void rtl8224_read_reg_u16(uint16_t reg) __banked;
|
|
void rtl8224_write_reg_u16(uint16_t reg, uint16_t val) __banked;
|
|
void rtl8224_sds_write(uint16_t sds_cmd, uint16_t val) __banked;
|
|
|
|
#define RTL8224_SDS_WRITE(sds_id, page, reg, v) uint16_t _sdscmd = (uint16_t)(sds_id & 0x01) | (1 << 14) | (1 << 15); \
|
|
_sdscmd |= (page & 0x3F) << 1; \
|
|
_sdscmd |= ((uint16_t)(reg & 0x1f)) << 7; \
|
|
print_string("CMD: "); print_short(_sdscmd); \
|
|
write_char('-'); print_short(v); \
|
|
rtl8224_sds_write(_sdscmd, v);
|
|
|
|
#endif
|