Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/dwc/if_dwc.c
Show First 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | |||||
#include <dev/dwc/if_dwc.h> | #include <dev/dwc/if_dwc.h> | ||||
#include <dev/dwc/if_dwcvar.h> | #include <dev/dwc/if_dwcvar.h> | ||||
#include <dev/mii/mii.h> | #include <dev/mii/mii.h> | ||||
#include <dev/mii/miivar.h> | #include <dev/mii/miivar.h> | ||||
#include <dev/ofw/ofw_bus.h> | #include <dev/ofw/ofw_bus.h> | ||||
#include <dev/ofw/ofw_bus_subr.h> | #include <dev/ofw/ofw_bus_subr.h> | ||||
#ifdef EXT_RESOURCES | |||||
#include <dev/extres/clk/clk.h> | |||||
#include <dev/extres/hwreset/hwreset.h> | |||||
#endif | |||||
#include "if_dwc_if.h" | #include "if_dwc_if.h" | ||||
#include "gpio_if.h" | #include "gpio_if.h" | ||||
#include "miibus_if.h" | #include "miibus_if.h" | ||||
#define READ4(_sc, _reg) \ | #define READ4(_sc, _reg) \ | ||||
bus_read_4((_sc)->res[0], _reg) | bus_read_4((_sc)->res[0], _reg) | ||||
#define WRITE4(_sc, _reg, _val) \ | #define WRITE4(_sc, _reg, _val) \ | ||||
bus_write_4((_sc)->res[0], _reg, _val) | bus_write_4((_sc)->res[0], _reg, _val) | ||||
▲ Show 20 Lines • Show All 982 Lines • ▼ Show 20 Lines | dwc_reset(device_t dev) | ||||
GPIO_PIN_SET(gpio, pin, !pin_value); | GPIO_PIN_SET(gpio, pin, !pin_value); | ||||
DELAY(delay_prop[1]); | DELAY(delay_prop[1]); | ||||
GPIO_PIN_SET(gpio, pin, pin_value); | GPIO_PIN_SET(gpio, pin, pin_value); | ||||
DELAY(delay_prop[2]); | DELAY(delay_prop[2]); | ||||
return (0); | return (0); | ||||
} | } | ||||
#ifdef EXT_RESOURCES | |||||
static int | static int | ||||
dwc_clock_init(device_t dev) | |||||
{ | |||||
hwreset_t rst; | |||||
clk_t clk; | |||||
int error; | |||||
/* Enable clock */ | |||||
if (clk_get_by_ofw_name(dev, "stmmaceth", &clk) == 0) { | |||||
error = clk_enable(clk); | |||||
if (error != 0) { | |||||
device_printf(dev, "could not enable main clock\n"); | |||||
return (error); | |||||
} | |||||
} | |||||
/* De-assert reset */ | |||||
if (hwreset_get_by_ofw_name(dev, "stmmaceth", &rst) == 0) { | |||||
error = hwreset_deassert(rst); | |||||
if (error != 0) { | |||||
device_printf(dev, "could not de-assert reset\n"); | |||||
return (error); | |||||
} | |||||
} | |||||
return (0); | |||||
} | |||||
#endif | |||||
static int | |||||
dwc_probe(device_t dev) | dwc_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, "snps,dwmac")) | if (!ofw_bus_is_compatible(dev, "snps,dwmac")) | ||||
return (ENXIO); | return (ENXIO); | ||||
Show All 15 Lines | dwc_attach(device_t dev) | ||||
sc->dev = dev; | sc->dev = dev; | ||||
sc->rx_idx = 0; | sc->rx_idx = 0; | ||||
sc->txcount = TX_DESC_COUNT; | sc->txcount = TX_DESC_COUNT; | ||||
sc->mii_clk = IF_DWC_MII_CLK(dev); | sc->mii_clk = IF_DWC_MII_CLK(dev); | ||||
sc->mactype = IF_DWC_MAC_TYPE(dev); | sc->mactype = IF_DWC_MAC_TYPE(dev); | ||||
if (IF_DWC_INIT(dev) != 0) | if (IF_DWC_INIT(dev) != 0) | ||||
return (ENXIO); | return (ENXIO); | ||||
#ifdef EXT_RESOURCES | |||||
if (dwc_clock_init(dev) != 0) | |||||
return (ENXIO); | |||||
#endif | |||||
if (bus_alloc_resources(dev, dwc_spec, sc->res)) { | if (bus_alloc_resources(dev, dwc_spec, sc->res)) { | ||||
device_printf(dev, "could not allocate resources\n"); | device_printf(dev, "could not allocate resources\n"); | ||||
return (ENXIO); | return (ENXIO); | ||||
} | } | ||||
/* Memory interface */ | /* Memory interface */ | ||||
sc->bst = rman_get_bustag(sc->res[0]); | sc->bst = rman_get_bustag(sc->res[0]); | ||||
▲ Show 20 Lines • Show All 229 Lines • Show Last 20 Lines |