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 | |||||