aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorMichal Meloun <mmel@FreeBSD.org>2016-07-10 18:28:15 +0000
committerMichal Meloun <mmel@FreeBSD.org>2016-07-10 18:28:15 +0000
commitdac935533b354a9be9167013e999d128bfc8392b (patch)
tree8b7ffcc52987f5e05c0f5384d9d04ebc168605bd /sys/dev
parent5fa69ff0151ee425246714f9a7805caf0690af3a (diff)
Notes
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/dwc/if_dwc.c4
-rw-r--r--sys/dev/extres/clk/clk.c33
-rw-r--r--sys/dev/extres/clk/clk.h7
-rw-r--r--sys/dev/extres/clk/clk_fixed.c2
-rw-r--r--sys/dev/extres/hwreset/hwreset.c17
-rw-r--r--sys/dev/extres/hwreset/hwreset.h6
-rw-r--r--sys/dev/extres/phy/phy.c23
-rw-r--r--sys/dev/extres/phy/phy.h11
-rw-r--r--sys/dev/extres/regulator/regulator.c8
-rw-r--r--sys/dev/extres/regulator/regulator.h3
-rw-r--r--sys/dev/iicbus/twsi/a10_twsi.c4
-rw-r--r--sys/dev/uart/uart_dev_snps.c8
-rw-r--r--sys/dev/usb/controller/generic_ohci.c6
13 files changed, 70 insertions, 62 deletions
diff --git a/sys/dev/dwc/if_dwc.c b/sys/dev/dwc/if_dwc.c
index a34879b95b47b..769fa66d9f053 100644
--- a/sys/dev/dwc/if_dwc.c
+++ b/sys/dev/dwc/if_dwc.c
@@ -1097,7 +1097,7 @@ dwc_clock_init(device_t dev)
int error;
/* Enable clock */
- if (clk_get_by_ofw_name(dev, "stmmaceth", &clk) == 0) {
+ if (clk_get_by_ofw_name(dev, 0, "stmmaceth", &clk) == 0) {
error = clk_enable(clk);
if (error != 0) {
device_printf(dev, "could not enable main clock\n");
@@ -1106,7 +1106,7 @@ dwc_clock_init(device_t dev)
}
/* De-assert reset */
- if (hwreset_get_by_ofw_name(dev, "stmmaceth", &rst) == 0) {
+ if (hwreset_get_by_ofw_name(dev, 0, "stmmaceth", &rst) == 0) {
error = hwreset_deassert(rst);
if (error != 0) {
device_printf(dev, "could not de-assert reset\n");
diff --git a/sys/dev/extres/clk/clk.c b/sys/dev/extres/clk/clk.c
index 092279bddfb3e..bcb0a263027e7 100644
--- a/sys/dev/extres/clk/clk.c
+++ b/sys/dev/extres/clk/clk.c
@@ -1196,22 +1196,7 @@ clk_get_by_id(device_t dev, struct clkdom *clkdom, intptr_t id, clk_t *clk)
#ifdef FDT
int
-clk_get_by_ofw_index(device_t dev, int idx, clk_t *clk)
-{
- phandle_t cnode;
-
- cnode = ofw_bus_get_node(dev);
- if (cnode <= 0) {
- device_printf(dev, "%s called on not ofw based device\n",
- __func__);
- return (ENXIO);
- }
-
- return (clk_get_by_ofw_node_index(dev, cnode, idx, clk));
-}
-
-int
-clk_get_by_ofw_node_index(device_t dev, phandle_t cnode, int idx, clk_t *clk)
+clk_get_by_ofw_index(device_t dev, phandle_t cnode, int idx, clk_t *clk)
{
phandle_t parent, *cells;
device_t clockdev;
@@ -1220,6 +1205,14 @@ clk_get_by_ofw_node_index(device_t dev, phandle_t cnode, int idx, clk_t *clk)
struct clknode *clknode;
*clk = NULL;
+ if (cnode <= 0)
+ cnode = ofw_bus_get_node(dev);
+ if (cnode <= 0) {
+ device_printf(dev, "%s called on not ofw based device\n",
+ __func__);
+ return (ENXIO);
+ }
+
rv = ofw_bus_parse_xref_list_alloc(cnode, "clocks", "#clock-cells", idx,
&parent, &ncells, &cells);
@@ -1254,12 +1247,12 @@ done:
}
int
-clk_get_by_ofw_name(device_t dev, const char *name, clk_t *clk)
+clk_get_by_ofw_name(device_t dev, phandle_t cnode, const char *name, clk_t *clk)
{
int rv, idx;
- phandle_t cnode;
- cnode = ofw_bus_get_node(dev);
+ if (cnode <= 0)
+ cnode = ofw_bus_get_node(dev);
if (cnode <= 0) {
device_printf(dev, "%s called on not ofw based device\n",
__func__);
@@ -1268,7 +1261,7 @@ clk_get_by_ofw_name(device_t dev, const char *name, clk_t *clk)
rv = ofw_bus_find_string_index(cnode, "clock-names", name, &idx);
if (rv != 0)
return (rv);
- return (clk_get_by_ofw_index(dev, idx, clk));
+ return (clk_get_by_ofw_index(dev, cnode, idx, clk));
}
/* --------------------------------------------------------------------------
diff --git a/sys/dev/extres/clk/clk.h b/sys/dev/extres/clk/clk.h
index 55cec53fc9fde..60b8d2b77b75b 100644
--- a/sys/dev/extres/clk/clk.h
+++ b/sys/dev/extres/clk/clk.h
@@ -129,10 +129,9 @@ int clk_set_parent_by_clk(clk_t clk, clk_t parent);
const char *clk_get_name(clk_t clk);
#ifdef FDT
-int clk_get_by_ofw_index(device_t dev, int idx, clk_t *clk);
-int clk_get_by_ofw_name(device_t dev, const char *name, clk_t *clk);
-int clk_get_by_ofw_node_index(device_t dev, phandle_t node, int idx,
- clk_t *clk);
+int clk_get_by_ofw_index(device_t dev, phandle_t node, int idx, clk_t *clk);
+int clk_get_by_ofw_name(device_t dev, phandle_t node, const char *name,
+ clk_t *clk);
int clk_parse_ofw_out_names(device_t dev, phandle_t node,
const char ***out_names, uint32_t **indices);
int clk_parse_ofw_clk_name(device_t dev, phandle_t node, const char **name);
diff --git a/sys/dev/extres/clk/clk_fixed.c b/sys/dev/extres/clk/clk_fixed.c
index 133a38a6c0145..fd20bb61e9df0 100644
--- a/sys/dev/extres/clk/clk_fixed.c
+++ b/sys/dev/extres/clk/clk_fixed.c
@@ -195,7 +195,7 @@ clk_fixed_init_fixed_factor(struct clk_fixed_softc *sc, phandle_t node,
if (rv <= 0)
return (ENXIO);
/* Get name of parent clock */
- rv = clk_get_by_ofw_index(sc->dev, 0, &parent);
+ rv = clk_get_by_ofw_index(sc->dev, 0, 0, &parent);
if (rv != 0)
return (ENXIO);
def->clkdef.parent_names = malloc(sizeof(char *), M_OFWPROP, M_WAITOK);
diff --git a/sys/dev/extres/hwreset/hwreset.c b/sys/dev/extres/hwreset/hwreset.c
index 8623b60e5b233..40ee915e3aacf 100644
--- a/sys/dev/extres/hwreset/hwreset.c
+++ b/sys/dev/extres/hwreset/hwreset.c
@@ -109,15 +109,17 @@ hwreset_default_ofw_map(device_t provider_dev, phandle_t xref, int ncells,
}
int
-hwreset_get_by_ofw_idx(device_t consumer_dev, int idx, hwreset_t *rst)
+hwreset_get_by_ofw_idx(device_t consumer_dev, phandle_t cnode, int idx,
+ hwreset_t *rst)
{
- phandle_t cnode, xnode;
+ phandle_t xnode;
pcell_t *cells;
device_t rstdev;
int ncells, rv;
intptr_t id;
- cnode = ofw_bus_get_node(consumer_dev);
+ if (cnode <= 0)
+ cnode = ofw_bus_get_node(consumer_dev);
if (cnode <= 0) {
device_printf(consumer_dev,
"%s called on not ofw based device\n", __func__);
@@ -145,12 +147,13 @@ hwreset_get_by_ofw_idx(device_t consumer_dev, int idx, hwreset_t *rst)
}
int
-hwreset_get_by_ofw_name(device_t consumer_dev, char *name, hwreset_t *rst)
+hwreset_get_by_ofw_name(device_t consumer_dev, phandle_t cnode, char *name,
+ hwreset_t *rst)
{
int rv, idx;
- phandle_t cnode;
- cnode = ofw_bus_get_node(consumer_dev);
+ if (cnode <= 0)
+ cnode = ofw_bus_get_node(consumer_dev);
if (cnode <= 0) {
device_printf(consumer_dev,
"%s called on not ofw based device\n", __func__);
@@ -159,7 +162,7 @@ hwreset_get_by_ofw_name(device_t consumer_dev, char *name, hwreset_t *rst)
rv = ofw_bus_find_string_index(cnode, "reset-names", name, &idx);
if (rv != 0)
return (rv);
- return (hwreset_get_by_ofw_idx(consumer_dev, idx, rst));
+ return (hwreset_get_by_ofw_idx(consumer_dev, cnode, idx, rst));
}
void
diff --git a/sys/dev/extres/hwreset/hwreset.h b/sys/dev/extres/hwreset/hwreset.h
index 75e653a5c2aed..6366351cc4cc4 100644
--- a/sys/dev/extres/hwreset/hwreset.h
+++ b/sys/dev/extres/hwreset/hwreset.h
@@ -58,8 +58,10 @@ int hwreset_deassert(hwreset_t rst);
int hwreset_is_asserted(hwreset_t rst, bool *value);
#ifdef FDT
-int hwreset_get_by_ofw_name(device_t consumer_dev, char *name, hwreset_t *rst);
-int hwreset_get_by_ofw_idx(device_t consumer_dev, int idx, hwreset_t *rst);
+int hwreset_get_by_ofw_name(device_t consumer_dev, phandle_t node, char *name,
+ hwreset_t *rst);
+int hwreset_get_by_ofw_idx(device_t consumer_dev, phandle_t node, int idx,
+ hwreset_t *rst);
#endif
diff --git a/sys/dev/extres/phy/phy.c b/sys/dev/extres/phy/phy.c
index a4dc621d905ed..dc454a2dd4dc7 100644
--- a/sys/dev/extres/phy/phy.c
+++ b/sys/dev/extres/phy/phy.c
@@ -124,15 +124,16 @@ int phy_default_map(device_t provider, phandle_t xref, int ncells,
}
int
-phy_get_by_ofw_idx(device_t consumer_dev, int idx, phy_t *phy)
+phy_get_by_ofw_idx(device_t consumer_dev, phandle_t cnode, int idx, phy_t *phy)
{
- phandle_t cnode, xnode;
+ phandle_t xnode;
pcell_t *cells;
device_t phydev;
int ncells, rv;
intptr_t id;
- cnode = ofw_bus_get_node(consumer_dev);
+ if (cnode <= 0)
+ cnode = ofw_bus_get_node(consumer_dev);
if (cnode <= 0) {
device_printf(consumer_dev,
"%s called on not ofw based device\n", __func__);
@@ -159,12 +160,13 @@ phy_get_by_ofw_idx(device_t consumer_dev, int idx, phy_t *phy)
}
int
-phy_get_by_ofw_name(device_t consumer_dev, char *name, phy_t *phy)
+phy_get_by_ofw_name(device_t consumer_dev, phandle_t cnode, char *name,
+ phy_t *phy)
{
int rv, idx;
- phandle_t cnode;
- cnode = ofw_bus_get_node(consumer_dev);
+ if (cnode <= 0)
+ cnode = ofw_bus_get_node(consumer_dev);
if (cnode <= 0) {
device_printf(consumer_dev,
"%s called on not ofw based device\n", __func__);
@@ -173,19 +175,20 @@ phy_get_by_ofw_name(device_t consumer_dev, char *name, phy_t *phy)
rv = ofw_bus_find_string_index(cnode, "phy-names", name, &idx);
if (rv != 0)
return (rv);
- return (phy_get_by_ofw_idx(consumer_dev, idx, phy));
+ return (phy_get_by_ofw_idx(consumer_dev, cnode, idx, phy));
}
int
-phy_get_by_ofw_property(device_t consumer_dev, char *name, phy_t *phy)
+phy_get_by_ofw_property(device_t consumer_dev, phandle_t cnode, char *name,
+ phy_t *phy)
{
- phandle_t cnode;
pcell_t *cells;
device_t phydev;
int ncells, rv;
intptr_t id;
- cnode = ofw_bus_get_node(consumer_dev);
+ if (cnode <= 0)
+ cnode = ofw_bus_get_node(consumer_dev);
if (cnode <= 0) {
device_printf(consumer_dev,
"%s called on not ofw based device\n", __func__);
diff --git a/sys/dev/extres/phy/phy.h b/sys/dev/extres/phy/phy.h
index 93b4fe4d83ede..2d0e3f8b8c21a 100644
--- a/sys/dev/extres/phy/phy.h
+++ b/sys/dev/extres/phy/phy.h
@@ -50,9 +50,14 @@ void phy_unregister_provider(device_t provider);
int phy_get_by_id(device_t consumer_dev, device_t provider_dev, intptr_t id,
phy_t *phy);
void phy_release(phy_t phy);
-int phy_get_by_ofw_name(device_t consumer, char *name, phy_t *phy);
-int phy_get_by_ofw_idx(device_t consumer, int idx, phy_t *phy);
-int phy_get_by_ofw_property(device_t consumer, char *name, phy_t *phy);
+
+#ifdef FDT
+int phy_get_by_ofw_name(device_t consumer, phandle_t node, char *name,
+ phy_t *phy);
+int phy_get_by_ofw_idx(device_t consumer, phandle_t node, int idx, phy_t *phy);
+int phy_get_by_ofw_property(device_t consumer, phandle_t node, char *name,
+ phy_t *phy);
+#endif
int phy_init(device_t consumer, phy_t phy);
int phy_deinit(device_t consumer, phy_t phy);
diff --git a/sys/dev/extres/regulator/regulator.c b/sys/dev/extres/regulator/regulator.c
index 84cd8fde45485..729de6b69b106 100644
--- a/sys/dev/extres/regulator/regulator.c
+++ b/sys/dev/extres/regulator/regulator.c
@@ -945,16 +945,18 @@ regulator_parse_ofw_stdparam(device_t pdev, phandle_t node,
}
int
-regulator_get_by_ofw_property(device_t cdev, char *name, regulator_t *reg)
+regulator_get_by_ofw_property(device_t cdev, phandle_t cnode, char *name,
+ regulator_t *reg)
{
- phandle_t cnode, *cells;
+ phandle_t *cells;
device_t regdev;
int ncells, rv;
intptr_t id;
*reg = NULL;
- cnode = ofw_bus_get_node(cdev);
+ if (cnode <= 0)
+ cnode = ofw_bus_get_node(cdev);
if (cnode <= 0) {
device_printf(cdev, "%s called on not ofw based device\n",
__func__);
diff --git a/sys/dev/extres/regulator/regulator.h b/sys/dev/extres/regulator/regulator.h
index 380bad63f915e..e509a7e74349b 100644
--- a/sys/dev/extres/regulator/regulator.h
+++ b/sys/dev/extres/regulator/regulator.h
@@ -119,7 +119,8 @@ int regulator_get_voltage(regulator_t reg, int *uvolt);
int regulator_set_voltage(regulator_t reg, int min_uvolt, int max_uvolt);
#ifdef FDT
-int regulator_get_by_ofw_property(device_t dev, char *name, regulator_t *reg);
+int regulator_get_by_ofw_property(device_t dev, phandle_t node, char *name,
+ regulator_t *reg);
int regulator_parse_ofw_stdparam(device_t dev, phandle_t node,
struct regnode_init_def *def);
#endif
diff --git a/sys/dev/iicbus/twsi/a10_twsi.c b/sys/dev/iicbus/twsi/a10_twsi.c
index c32e6fa6debf0..b468f088531dc 100644
--- a/sys/dev/iicbus/twsi/a10_twsi.c
+++ b/sys/dev/iicbus/twsi/a10_twsi.c
@@ -95,7 +95,7 @@ a10_twsi_attach(device_t dev)
sc = device_get_softc(dev);
/* De-assert reset */
- if (hwreset_get_by_ofw_idx(dev, 0, &rst) == 0) {
+ if (hwreset_get_by_ofw_idx(dev, 0, 0, &rst) == 0) {
error = hwreset_deassert(rst);
if (error != 0) {
device_printf(dev, "could not de-assert reset\n");
@@ -104,7 +104,7 @@ a10_twsi_attach(device_t dev)
}
/* Activate clock */
- error = clk_get_by_ofw_index(dev, 0, &clk);
+ error = clk_get_by_ofw_index(dev, 0, 0, &clk);
if (error != 0) {
device_printf(dev, "could not find clock\n");
return (error);
diff --git a/sys/dev/uart/uart_dev_snps.c b/sys/dev/uart/uart_dev_snps.c
index af4000f693b18..c0e3d79cce8e0 100644
--- a/sys/dev/uart/uart_dev_snps.c
+++ b/sys/dev/uart/uart_dev_snps.c
@@ -119,12 +119,12 @@ snps_get_clocks(device_t dev, clk_t *baudclk, clk_t *apb_pclk)
/* Baud clock is either named "baudclk", or there is a single
* unnamed clock.
*/
- if (clk_get_by_ofw_name(dev, "baudclk", baudclk) != 0 &&
- clk_get_by_ofw_index(dev, 0, baudclk) != 0)
+ if (clk_get_by_ofw_name(dev, 0, "baudclk", baudclk) != 0 &&
+ clk_get_by_ofw_index(dev, 0, 0, baudclk) != 0)
return (ENOENT);
/* APB peripheral clock is optional */
- (void)clk_get_by_ofw_name(dev, "apb_pclk", apb_pclk);
+ (void)clk_get_by_ofw_name(dev, 0, "apb_pclk", apb_pclk);
return (0);
}
@@ -163,7 +163,7 @@ snps_probe(device_t dev)
clock = 0;
#ifdef EXT_RESOURCES
- if (hwreset_get_by_ofw_idx(dev, 0, &reset) == 0) {
+ if (hwreset_get_by_ofw_idx(dev, 0, 0, &reset) == 0) {
error = hwreset_deassert(reset);
if (error != 0) {
device_printf(dev, "cannot de-assert reset\n");
diff --git a/sys/dev/usb/controller/generic_ohci.c b/sys/dev/usb/controller/generic_ohci.c
index 9656c8faa1c8c..beafd0614b67c 100644
--- a/sys/dev/usb/controller/generic_ohci.c
+++ b/sys/dev/usb/controller/generic_ohci.c
@@ -161,7 +161,7 @@ generic_ohci_attach(device_t dev)
#ifdef EXT_RESOURCES
TAILQ_INIT(&sc->clk_list);
/* Enable clock */
- for (off = 0; clk_get_by_ofw_index(dev, off, &clk) == 0; off++) {
+ for (off = 0; clk_get_by_ofw_index(dev, 0, off, &clk) == 0; off++) {
err = clk_enable(clk);
if (err != 0) {
device_printf(dev, "Could not enable clock %s\n",
@@ -174,7 +174,7 @@ generic_ohci_attach(device_t dev)
}
/* De-assert reset */
- if (hwreset_get_by_ofw_idx(dev, 0, &sc->rst) == 0) {
+ if (hwreset_get_by_ofw_idx(dev, 0, 0, &sc->rst) == 0) {
err = hwreset_deassert(sc->rst);
if (err != 0) {
device_printf(dev, "Could not de-assert reset %d\n",
@@ -184,7 +184,7 @@ generic_ohci_attach(device_t dev)
}
/* Enable phy */
- if (phy_get_by_ofw_name(dev, "usb", &sc->phy) == 0) {
+ if (phy_get_by_ofw_name(dev, 0, "usb", &sc->phy) == 0) {
err = phy_enable(dev, sc->phy);
if (err != 0) {
device_printf(dev, "Could not enable phy\n");