107 lines
2.9 KiB
C
Executable File
107 lines
2.9 KiB
C
Executable File
/*
|
|
* drivers/net/phy/novatek_reg.h
|
|
*
|
|
* Novatek PHYs register
|
|
*
|
|
* Copyright (c) 2019 Novatek Microelectronics Corp.
|
|
*
|
|
*/
|
|
|
|
/* Workaround: Phy reset detection when DUT AN fail(SUT set speed from 10m to 100m) */
|
|
//#define NVT_PHY_AN_FAIL_10M_TO_100M
|
|
|
|
#define HW_RESET_ADDRESS 0xFD020088
|
|
#define HW_RESET_MASK 0xC0000000
|
|
|
|
#define SW_RESET_ADDRESS 0xFD2B3800
|
|
#define SW_RESET_MASK 0x00000002
|
|
#define PLLREGWR_MASK 0x00000008
|
|
|
|
#define EQ_RESET_ADDRESS 0xFD2B3818
|
|
#define EQ_RESET_MASK 0x00000002
|
|
|
|
#define PHY_REGISTER_READ(data,addr) do { \
|
|
data = ioread32((void *)addr); \
|
|
}while(0)
|
|
|
|
#define phy_hw_reset_enable() do { \
|
|
unsigned long v; \
|
|
v = ioread32((void *)HW_RESET_ADDRESS); \
|
|
v &= ~(HW_RESET_MASK); \
|
|
iowrite32(v, (void *)HW_RESET_ADDRESS);\
|
|
}while(0)
|
|
|
|
#define phy_hw_reset_disable() do { \
|
|
unsigned long v; \
|
|
v = ioread32((void *)HW_RESET_ADDRESS); \
|
|
v |= HW_RESET_MASK; \
|
|
iowrite32(v, (void *)HW_RESET_ADDRESS);\
|
|
}while(0)
|
|
|
|
#define phy_sw_reset_enable() do { \
|
|
unsigned long v; \
|
|
v = ioread32((void *)SW_RESET_ADDRESS); \
|
|
v |= SW_RESET_MASK; \
|
|
iowrite32(v, (void *)SW_RESET_ADDRESS);\
|
|
}while(0)
|
|
|
|
#define phy_sw_reset_disable() do { \
|
|
unsigned long v; \
|
|
v = ioread32((void *)SW_RESET_ADDRESS); \
|
|
v |= PLLREGWR_MASK; \
|
|
v &= ~(SW_RESET_MASK); \
|
|
iowrite32(v, (void *)SW_RESET_ADDRESS);\
|
|
}while(0)
|
|
|
|
#define eq_reset_enable() do { \
|
|
unsigned long v; \
|
|
v = ioread32((void *)EQ_RESET_ADDRESS); \
|
|
v |= EQ_RESET_MASK; \
|
|
iowrite32(v, (void *)EQ_RESET_ADDRESS);\
|
|
}while(0)
|
|
|
|
#define eq_reset_disable() do { \
|
|
unsigned long v; \
|
|
v = ioread32((void *)EQ_RESET_ADDRESS); \
|
|
v &= ~(EQ_RESET_MASK); \
|
|
iowrite32(v, (void *)EQ_RESET_ADDRESS);\
|
|
}while(0)
|
|
|
|
#define set_break_link_timer() do { \
|
|
iowrite32(0x53, (void *)0xFD2B3A88);\
|
|
iowrite32(0x07, (void *)0xFD2B3A8C);\
|
|
iowrite32(0xC9, (void *)0xFD2B3A84);\
|
|
}while(0)
|
|
|
|
#define set_one_led_link_act() do { \
|
|
iowrite32(0x40, (void *)0xFD2B3900);\
|
|
iowrite32(0x300, (void *)0xFD2B300C);\
|
|
}while(0)
|
|
|
|
#define set_two_leds_link_act() do { \
|
|
iowrite32(0x40, (void *)0xFD2B3900);\
|
|
iowrite32(0x312, (void *)0xFD2B300C);\
|
|
}while(0)
|
|
|
|
#define set_led_inv() do { \
|
|
unsigned long v; \
|
|
v = ioread32((void *)0xFD2B300C); \
|
|
v &= ~(0x3<<8); \
|
|
iowrite32(v, (void *)0xFD2B300C);\
|
|
} while (0)
|
|
|
|
#define set_best_setting() do { \
|
|
unsigned long v; \
|
|
v = ioread32((void *)0xFD2B3AF8); \
|
|
v &= ~(0x07); \
|
|
v |= (0x03); \
|
|
iowrite32(v, (void *)0xFD2B3AF8);\
|
|
v = ioread32((void *)0xFD2B3B54); \
|
|
v |= (1<<7); \
|
|
iowrite32(v, (void *)0xFD2B3B54);\
|
|
v = ioread32((void *)0xFD2B3B58); \
|
|
v |= (0x3<<4); \
|
|
iowrite32(v, (void *)0xFD2B3B58);\
|
|
}while(0)
|
|
|