Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/rockchip/if_dwc_rk.c
Show First 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | tx = ((tx & RK3328_GRF_MAC_CON0_TX_MASK) << | ||||
RK3328_GRF_MAC_CON0_TX_SHIFT); | RK3328_GRF_MAC_CON0_TX_SHIFT); | ||||
rx = ((rx & RK3328_GRF_MAC_CON0_TX_MASK) << | rx = ((rx & RK3328_GRF_MAC_CON0_TX_MASK) << | ||||
RK3328_GRF_MAC_CON0_RX_SHIFT); | RK3328_GRF_MAC_CON0_RX_SHIFT); | ||||
/* Disable delays as values conflict between DTS */ | /* Disable delays as values conflict between DTS */ | ||||
/* SYSCON_WRITE_4(grf, RK3328_GRF_MAC_CON0, tx | rx | 0xFFFF0000); */ | /* SYSCON_WRITE_4(grf, RK3328_GRF_MAC_CON0, tx | rx | 0xFFFF0000); */ | ||||
} | } | ||||
#define RK3399_GRF_SOC_CON6 0xc218 | |||||
#define RK3399_GRF_SOC_CON6_TX_MASK 0x7F | |||||
#define RK3399_GRF_SOC_CON6_TX_SHIFT 0 | |||||
#define RK3399_GRF_SOC_CON6_RX_MASK 0x7F | |||||
#define RK3399_GRF_SOC_CON6_RX_SHIFT 8 | |||||
static void | |||||
rk3399_set_delays(struct syscon *grf, phandle_t node) | |||||
{ | |||||
uint32_t tx, rx; | |||||
if (OF_getencprop(node, "tx_delay", &tx, sizeof(tx)) <= 0) | |||||
tx = 0x30; | |||||
if (OF_getencprop(node, "rx_delay", &rx, sizeof(rx)) <= 0) | |||||
rx = 0x10; | |||||
tx = ((tx & RK3399_GRF_SOC_CON6_TX_MASK) << | |||||
RK3399_GRF_SOC_CON6_TX_SHIFT); | |||||
rx = ((rx & RK3399_GRF_SOC_CON6_TX_MASK) << | |||||
RK3399_GRF_SOC_CON6_RX_SHIFT); | |||||
SYSCON_WRITE_4(grf, RK3399_GRF_SOC_CON6, tx | rx | 0x80808080); | |||||
} | |||||
static int | static int | ||||
if_dwc_rk_probe(device_t dev) | if_dwc_rk_probe(device_t dev) | ||||
{ | { | ||||
if (!ofw_bus_status_okay(dev)) | if (!ofw_bus_status_okay(dev)) | ||||
return (ENXIO); | return (ENXIO); | ||||
if (!ofw_bus_is_compatible(dev, "rockchip,rk3328-gmac")) | if (!(ofw_bus_is_compatible(dev, "rockchip,rk3328-gmac") || | ||||
ofw_bus_is_compatible(dev, "rockchip,rk3399-gmac"))) | |||||
return (ENXIO); | return (ENXIO); | ||||
device_set_desc(dev, "Rockchip Gigabit Ethernet Controller"); | device_set_desc(dev, "Rockchip Gigabit Ethernet Controller"); | ||||
return (BUS_PROBE_DEFAULT); | return (BUS_PROBE_DEFAULT); | ||||
} | } | ||||
static int | static int | ||||
if_dwc_rk_init(device_t dev) | if_dwc_rk_init(device_t dev) | ||||
{ | { | ||||
phandle_t node; | phandle_t node; | ||||
struct syscon *grf = NULL; | struct syscon *grf = NULL; | ||||
node = ofw_bus_get_node(dev); | node = ofw_bus_get_node(dev); | ||||
if (OF_hasprop(node, "rockchip,grf") && | if (OF_hasprop(node, "rockchip,grf") && | ||||
syscon_get_by_ofw_property(dev, node, | syscon_get_by_ofw_property(dev, node, | ||||
"rockchip,grf", &grf) != 0) { | "rockchip,grf", &grf) != 0) { | ||||
device_printf(dev, "cannot get grf driver handle\n"); | device_printf(dev, "cannot get grf driver handle\n"); | ||||
return (ENXIO); | return (ENXIO); | ||||
} | } | ||||
if (ofw_bus_is_compatible(dev, "rockchip,rk3399-gmac")) | |||||
rk3399_set_delays(grf, node); | |||||
else if (ofw_bus_is_compatible(dev, "rockchip,rk3328-gmac")) | |||||
rk3328_set_delays(grf, node); | rk3328_set_delays(grf, node); | ||||
/* Mode should be set according to dtb property */ | /* Mode should be set according to dtb property */ | ||||
return (0); | return (0); | ||||
} | } | ||||
static int | static int | ||||
if_dwc_rk_mac_type(device_t dev) | if_dwc_rk_mac_type(device_t dev) | ||||
Show All 31 Lines |