Module Name: src
Committed By: jakllsch
Date: Wed Feb 27 16:56:00 UTC 2019
Modified Files:
src/sys/dev/fdt: fdt_clock.c fdt_dma.c fdt_phy.c fdt_pinctrl.c
fdt_reset.c fdt_subr.c fdtvar.h
Log Message:
Consolidate FDT [find "names" index by string] logic.
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/dev/fdt/fdt_clock.c \
src/sys/dev/fdt/fdt_pinctrl.c
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/fdt/fdt_dma.c \
src/sys/dev/fdt/fdt_reset.c
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/fdt/fdt_phy.c
cvs rdiff -u -r1.28 -r1.29 src/sys/dev/fdt/fdt_subr.c
cvs rdiff -u -r1.48 -r1.49 src/sys/dev/fdt/fdtvar.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/fdt/fdt_clock.c
diff -u src/sys/dev/fdt/fdt_clock.c:1.7 src/sys/dev/fdt/fdt_clock.c:1.8
--- src/sys/dev/fdt/fdt_clock.c:1.7 Wed Feb 27 16:30:40 2019
+++ src/sys/dev/fdt/fdt_clock.c Wed Feb 27 16:56:00 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: fdt_clock.c,v 1.7 2019/02/27 16:30:40 jakllsch Exp $ */
+/* $NetBSD: fdt_clock.c,v 1.8 2019/02/27 16:56:00 jakllsch Exp $ */
/*-
* Copyright (c) 2015 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdt_clock.c,v 1.7 2019/02/27 16:30:40 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdt_clock.c,v 1.8 2019/02/27 16:56:00 jakllsch Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -123,25 +123,14 @@ fdtbus_clock_get_index(int phandle, u_in
static struct clk *
fdtbus_clock_get_prop(int phandle, const char *clkname, const char *prop)
{
- struct clk *clk = NULL;
- const char *p;
u_int index;
- int len, resid;
+ int err;
- p = fdtbus_get_prop(phandle, prop, &len);
- if (p == NULL)
+ err = fdtbus_get_index(phandle, prop, clkname, &index);
+ if (err != 0)
return NULL;
- for (index = 0, resid = len; resid > 0; index++) {
- if (strcmp(p, clkname) == 0) {
- clk = fdtbus_clock_get_index(phandle, index);
- break;
- }
- resid -= strlen(p) + 1;
- p += strlen(p) + 1;
- }
-
- return clk;
+ return fdtbus_clock_get_index(phandle, index);
}
static u_int
@@ -182,26 +171,20 @@ struct clk *
fdtbus_clock_byname(const char *clkname)
{
struct fdtbus_clock_controller *cc;
- u_int len, resid, index, clock_cells;
- const char *p;
+ u_int index, clock_cells;
+ int err;
LIST_FOREACH(cc, &fdtbus_clock_controllers, cc_next) {
- if (!of_hasprop(cc->cc_phandle, "clock-output-names"))
+ err = fdtbus_get_index(cc->cc_phandle, "clock-output-names", clkname, &index);
+ if (err != 0)
continue;
- p = fdtbus_get_prop(cc->cc_phandle, "clock-output-names", &len);
- for (index = 0, resid = len; resid > 0; index++) {
- if (strcmp(p, clkname) == 0) {
- if (of_getprop_uint32(cc->cc_phandle, "#clock-cells", &clock_cells))
- break;
- const u_int index_raw = htobe32(index);
- return cc->cc_funcs->decode(cc->cc_dev,
- cc->cc_phandle,
- clock_cells > 0 ? &index_raw : NULL,
- clock_cells > 0 ? 4 : 0);
- }
- resid -= strlen(p) + 1;
- p += strlen(p) + 1;
- }
+ if (of_getprop_uint32(cc->cc_phandle, "#clock-cells", &clock_cells))
+ continue;
+ const u_int index_raw = htobe32(index);
+ return cc->cc_funcs->decode(cc->cc_dev,
+ cc->cc_phandle,
+ clock_cells > 0 ? &index_raw : NULL,
+ clock_cells > 0 ? 4 : 0);
}
return NULL;
Index: src/sys/dev/fdt/fdt_pinctrl.c
diff -u src/sys/dev/fdt/fdt_pinctrl.c:1.7 src/sys/dev/fdt/fdt_pinctrl.c:1.8
--- src/sys/dev/fdt/fdt_pinctrl.c:1.7 Wed Jan 23 04:23:01 2019
+++ src/sys/dev/fdt/fdt_pinctrl.c Wed Feb 27 16:56:00 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: fdt_pinctrl.c,v 1.7 2019/01/23 04:23:01 thorpej Exp $ */
+/* $NetBSD: fdt_pinctrl.c,v 1.8 2019/02/27 16:56:00 jakllsch Exp $ */
/*-
* Copyright (c) 2019 Jason R. Thorpe
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdt_pinctrl.c,v 1.7 2019/01/23 04:23:01 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdt_pinctrl.c,v 1.8 2019/02/27 16:56:00 jakllsch Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -118,22 +118,14 @@ fdtbus_pinctrl_set_config_index(int phan
int
fdtbus_pinctrl_set_config(int phandle, const char *cfgname)
{
- const char *pinctrl_names, *name;
- int len, index;
+ u_int index;
+ int err;
- if ((len = OF_getproplen(phandle, "pinctrl-names")) < 0)
+ err = fdtbus_get_index(phandle, "pinctrl-names", cfgname, &index);
+ if (err != 0)
return -1;
- pinctrl_names = fdtbus_get_string(phandle, "pinctrl-names");
-
- for (name = pinctrl_names, index = 0; len > 0;
- len -= strlen(name) + 1, name += strlen(name) + 1, index++) {
- if (strcmp(name, cfgname) == 0)
- return fdtbus_pinctrl_set_config_index(phandle, index);
- }
-
- /* Not found */
- return -1;
+ return fdtbus_pinctrl_set_config_index(phandle, index);
}
static void
Index: src/sys/dev/fdt/fdt_dma.c
diff -u src/sys/dev/fdt/fdt_dma.c:1.3 src/sys/dev/fdt/fdt_dma.c:1.4
--- src/sys/dev/fdt/fdt_dma.c:1.3 Wed Feb 27 16:30:40 2019
+++ src/sys/dev/fdt/fdt_dma.c Wed Feb 27 16:56:00 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: fdt_dma.c,v 1.3 2019/02/27 16:30:40 jakllsch Exp $ */
+/* $NetBSD: fdt_dma.c,v 1.4 2019/02/27 16:56:00 jakllsch Exp $ */
/*-
* Copyright (c) 2015 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdt_dma.c,v 1.3 2019/02/27 16:30:40 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdt_dma.c,v 1.4 2019/02/27 16:56:00 jakllsch Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -132,36 +132,14 @@ done:
struct fdtbus_dma *
fdtbus_dma_get(int phandle, const char *name, void (*cb)(void *), void *cbarg)
{
- struct fdtbus_dma *dma = NULL;
- char *dma_names = NULL;
- const char *p;
u_int index;
- int len, resid;
-
- len = OF_getproplen(phandle, "dma-names");
- if (len <= 0)
- return NULL;
+ int err;
- dma_names = kmem_alloc(len, KM_SLEEP);
- if (OF_getprop(phandle, "dma-names", dma_names, len) != len) {
- kmem_free(dma_names, len);
+ err = fdtbus_get_index(phandle, "dma-names", name, &index);
+ if (err != 0)
return NULL;
- }
- p = dma_names;
- for (index = 0, resid = len; resid > 0; index++) {
- if (strcmp(p, name) == 0) {
- dma = fdtbus_dma_get_index(phandle, index, cb, cbarg);
- break;
- }
- resid -= strlen(p) + 1;
- p += strlen(p) + 1;
- }
-
- if (dma_names)
- kmem_free(dma_names, len);
-
- return dma;
+ return fdtbus_dma_get_index(phandle, index, cb, cbarg);
}
void
Index: src/sys/dev/fdt/fdt_reset.c
diff -u src/sys/dev/fdt/fdt_reset.c:1.3 src/sys/dev/fdt/fdt_reset.c:1.4
--- src/sys/dev/fdt/fdt_reset.c:1.3 Wed Feb 27 16:30:40 2019
+++ src/sys/dev/fdt/fdt_reset.c Wed Feb 27 16:56:00 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: fdt_reset.c,v 1.3 2019/02/27 16:30:40 jakllsch Exp $ */
+/* $NetBSD: fdt_reset.c,v 1.4 2019/02/27 16:56:00 jakllsch Exp $ */
/*-
* Copyright (c) 2015 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdt_reset.c,v 1.3 2019/02/27 16:30:40 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdt_reset.c,v 1.4 2019/02/27 16:56:00 jakllsch Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -131,36 +131,14 @@ done:
struct fdtbus_reset *
fdtbus_reset_get(int phandle, const char *rstname)
{
- struct fdtbus_reset *rst = NULL;
- char *reset_names = NULL;
- const char *p;
u_int index;
- int len, resid;
-
- len = OF_getproplen(phandle, "reset-names");
- if (len <= 0)
- return NULL;
+ int err;
- reset_names = kmem_alloc(len, KM_SLEEP);
- if (OF_getprop(phandle, "reset-names", reset_names, len) != len) {
- kmem_free(reset_names, len);
+ err = fdtbus_get_index(phandle, "reset-names", rstname, &index);
+ if (err != 0)
return NULL;
- }
- p = reset_names;
- for (index = 0, resid = len; resid > 0; index++) {
- if (strcmp(p, rstname) == 0) {
- rst = fdtbus_reset_get_index(phandle, index);
- break;
- }
- resid -= strlen(p) + 1;
- p += strlen(p) + 1;
- }
-
- if (reset_names)
- kmem_free(reset_names, len);
-
- return rst;
+ return fdtbus_reset_get_index(phandle, index);
}
void
Index: src/sys/dev/fdt/fdt_phy.c
diff -u src/sys/dev/fdt/fdt_phy.c:1.4 src/sys/dev/fdt/fdt_phy.c:1.5
--- src/sys/dev/fdt/fdt_phy.c:1.4 Wed Feb 27 16:30:40 2019
+++ src/sys/dev/fdt/fdt_phy.c Wed Feb 27 16:56:00 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: fdt_phy.c,v 1.4 2019/02/27 16:30:40 jakllsch Exp $ */
+/* $NetBSD: fdt_phy.c,v 1.5 2019/02/27 16:56:00 jakllsch Exp $ */
/*-
* Copyright (c) 2015-2017 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdt_phy.c,v 1.4 2019/02/27 16:30:40 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdt_phy.c,v 1.5 2019/02/27 16:56:00 jakllsch Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -131,36 +131,14 @@ done:
struct fdtbus_phy *
fdtbus_phy_get(int phandle, const char *phyname)
{
- struct fdtbus_phy *phy = NULL;
- char *phy_names = NULL;
- const char *p;
u_int index;
- int len, resid;
-
- len = OF_getproplen(phandle, "phy-names");
- if (len <= 0)
- return NULL;
+ int err;
- phy_names = kmem_alloc(len, KM_SLEEP);
- if (OF_getprop(phandle, "phy-names", phy_names, len) != len) {
- kmem_free(phy_names, len);
+ err = fdtbus_get_index(phandle, "phy-names", phyname, &index);
+ if (err != 0)
return NULL;
- }
- p = phy_names;
- for (index = 0, resid = len; resid > 0; index++) {
- if (strcmp(p, phyname) == 0) {
- phy = fdtbus_phy_get_index(phandle, index);
- break;
- }
- resid -= strlen(p) + 1;
- p += strlen(p) + 1;
- }
-
- if (phy_names)
- kmem_free(phy_names, len);
-
- return phy;
+ return fdtbus_phy_get_index(phandle, index);
}
void
Index: src/sys/dev/fdt/fdt_subr.c
diff -u src/sys/dev/fdt/fdt_subr.c:1.28 src/sys/dev/fdt/fdt_subr.c:1.29
--- src/sys/dev/fdt/fdt_subr.c:1.28 Wed Feb 27 16:30:40 2019
+++ src/sys/dev/fdt/fdt_subr.c Wed Feb 27 16:56:00 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: fdt_subr.c,v 1.28 2019/02/27 16:30:40 jakllsch Exp $ */
+/* $NetBSD: fdt_subr.c,v 1.29 2019/02/27 16:56:00 jakllsch Exp $ */
/*-
* Copyright (c) 2015 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdt_subr.c,v 1.28 2019/02/27 16:30:40 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdt_subr.c,v 1.29 2019/02/27 16:56:00 jakllsch Exp $");
#include "opt_fdt.h"
@@ -215,26 +215,14 @@ int
fdtbus_get_reg_byname(int phandle, const char *name, bus_addr_t *paddr,
bus_size_t *psize)
{
- const char *reg_names, *p;
u_int index;
- int len, resid;
- int error = ENOENT;
-
- reg_names = fdtbus_get_prop(phandle, "reg-names", &len);
- if (len <= 0)
- return error;
+ int error;
- p = reg_names;
- for (index = 0, resid = len; resid > 0; index++) {
- if (strcmp(p, name) == 0) {
- error = fdtbus_get_reg(phandle, index, paddr, psize);
- break;
- }
- resid -= strlen(p) + 1;
- p += strlen(p) + 1;
- }
+ error = fdtbus_get_index(phandle, "reg-names", name, &index);
+ if (error != 0)
+ return ENOENT;
- return error;
+ return fdtbus_get_reg(phandle, index, paddr, psize);
}
int
@@ -480,3 +468,26 @@ fdtbus_get_string_index(int phandle, con
return NULL;
}
+
+int
+fdtbus_get_index(int phandle, const char *prop, const char *name, u_int *idx)
+{
+ const char *p;
+ size_t pl;
+ u_int index;
+ int len;
+
+ p = fdtbus_get_prop(phandle, prop, &len);
+ if (p == NULL || len <= 0)
+ return -1;
+
+ for (index = 0; len > 0;
+ pl = strlen(p) + 1, len -= pl, p += pl, index++) {
+ if (strcmp(p, name) == 0) {
+ *idx = index;
+ return 0;
+ }
+ }
+
+ return -1;
+}
Index: src/sys/dev/fdt/fdtvar.h
diff -u src/sys/dev/fdt/fdtvar.h:1.48 src/sys/dev/fdt/fdtvar.h:1.49
--- src/sys/dev/fdt/fdtvar.h:1.48 Wed Jan 30 01:24:00 2019
+++ src/sys/dev/fdt/fdtvar.h Wed Feb 27 16:56:00 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: fdtvar.h,v 1.48 2019/01/30 01:24:00 jmcneill Exp $ */
+/* $NetBSD: fdtvar.h,v 1.49 2019/02/27 16:56:00 jakllsch Exp $ */
/*-
* Copyright (c) 2015 Jared D. McNeill <[email protected]>
@@ -379,6 +379,7 @@ bool fdtbus_status_okay(int);
const void * fdtbus_get_prop(int, const char *, int *);
const char * fdtbus_get_string(int, const char *);
const char * fdtbus_get_string_index(int, const char *, u_int);
+int fdtbus_get_index(int, const char *, const char *, u_int *);
void fdt_add_bus(device_t, int, struct fdt_attach_args *);
void fdt_add_bus_match(device_t, int, struct fdt_attach_args *,