summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2016-11-14 12:35:52 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2016-11-14 12:35:52 +0100
commitf55e379fca456444ade761358e8cce8657ea9672 (patch)
tree5ded95597e4a70f09ab04e55687738d56728e8f9
parente5374fa4d443b25fc12a578a978621dcacc380df (diff)
parent63cc1eb8ebbee4b16c659029d263ae791c6eac9c (diff)
downloadbarebox-f55e379fca456444ade761358e8cce8657ea9672.tar.gz
barebox-f55e379fca456444ade761358e8cce8657ea9672.tar.xz
Merge branch 'for-next/state'
-rw-r--r--Documentation/devicetree/bindings/barebox/barebox,state.rst4
-rw-r--r--common/state/backend_bucket_circular.c2
-rw-r--r--common/state/backend_bucket_direct.c2
-rw-r--r--common/state/backend_format_raw.c2
-rw-r--r--common/state/state.c13
-rw-r--r--common/state/state_variables.c6
-rw-r--r--drivers/misc/state.c8
-rw-r--r--drivers/of/of_path.c3
8 files changed, 24 insertions, 16 deletions
diff --git a/Documentation/devicetree/bindings/barebox/barebox,state.rst b/Documentation/devicetree/bindings/barebox/barebox,state.rst
index e39245f6c0..438cc434a2 100644
--- a/Documentation/devicetree/bindings/barebox/barebox,state.rst
+++ b/Documentation/devicetree/bindings/barebox/barebox,state.rst
@@ -51,8 +51,8 @@ variable. The node name may end with ``@<ADDRESS>``, but the suffix is
stripped from the variable name.
State variables have a type. Currenty supported types are: ``uint8``,
-``uint32``, ``enum32``, ``mac`` address or ``string``. Variable length
-strings are not planned.
+``uint32``, ``enum32``, ``mac`` address or ``string`` (fixed length string).
+Variable length strings are not planned.
Required properties:
diff --git a/common/state/backend_bucket_circular.c b/common/state/backend_bucket_circular.c
index 72e165e437..d8504e035c 100644
--- a/common/state/backend_bucket_circular.c
+++ b/common/state/backend_bucket_circular.c
@@ -47,7 +47,7 @@ struct state_backend_storage_bucket_circular {
struct device_d *dev;
};
-struct state_backend_storage_bucket_circular_meta {
+struct __attribute__((__packed__)) state_backend_storage_bucket_circular_meta {
uint32_t magic;
uint32_t written_length;
};
diff --git a/common/state/backend_bucket_direct.c b/common/state/backend_bucket_direct.c
index 08892f001e..5225433ec5 100644
--- a/common/state/backend_bucket_direct.c
+++ b/common/state/backend_bucket_direct.c
@@ -32,7 +32,7 @@ struct state_backend_storage_bucket_direct {
struct device_d *dev;
};
-struct state_backend_storage_bucket_direct_meta {
+struct __attribute__((__packed__)) state_backend_storage_bucket_direct_meta {
uint32_t magic;
uint32_t written_length;
};
diff --git a/common/state/backend_format_raw.c b/common/state/backend_format_raw.c
index 4209424130..e028ea616c 100644
--- a/common/state/backend_format_raw.c
+++ b/common/state/backend_format_raw.c
@@ -37,7 +37,7 @@ struct state_backend_format_raw {
struct device_d *dev;
};
-struct backend_raw_header {
+struct __attribute__((__packed__)) backend_raw_header {
uint32_t magic;
uint16_t reserved;
uint16_t data_len;
diff --git a/common/state/state.c b/common/state/state.c
index 075618e5bb..4020d5e1ea 100644
--- a/common/state/state.c
+++ b/common/state/state.c
@@ -466,9 +466,10 @@ struct state *state_new_from_node(struct device_node *node, char *path,
of_path = partition_node->full_name;
ret = of_find_path_by_node(partition_node, &path, 0);
}
- if (!path) {
- pr_err("state failed to parse path to backend\n");
- ret = -EINVAL;
+ if (ret) {
+ if (ret != -EPROBE_DEFER)
+ dev_err(&state->dev, "state failed to parse path to backend: %s\n",
+ strerror(-ret));
goto out_release_state;
}
}
@@ -487,7 +488,7 @@ struct state *state_new_from_node(struct device_node *node, char *path,
&storage_type);
if (ret) {
storage_type = NULL;
- pr_info("No backend-storage-type found, using default.\n");
+ dev_info(&state->dev, "No backend-storage-type found, using default.\n");
}
ret = state_backend_init(&state->backend, &state->dev, node,
@@ -511,10 +512,10 @@ struct state *state_new_from_node(struct device_node *node, char *path,
ret = state_load(state);
if (ret) {
- pr_warn("Failed to load persistent state, continuing with defaults, %d\n", ret);
+ dev_warn(&state->dev, "Failed to load persistent state, continuing with defaults, %d\n", ret);
}
- pr_info("New state registered '%s'\n", alias);
+ dev_info(&state->dev, "New state registered '%s'\n", alias);
return state;
diff --git a/common/state/state_variables.c b/common/state/state_variables.c
index 45ec962e42..fd072a0c27 100644
--- a/common/state/state_variables.c
+++ b/common/state/state_variables.c
@@ -441,9 +441,9 @@ static struct variable_type types[] = {
{
.type = STATE_TYPE_U8,
.type_name = "uint8",
- .export = state_uint32_export,
- .import = state_uint32_import,
- .create = state_uint8_create,
+ .export = state_uint32_export,
+ .import = state_uint32_import,
+ .create = state_uint8_create,
}, {
.type = STATE_TYPE_U32,
.type_name = "uint32",
diff --git a/drivers/misc/state.c b/drivers/misc/state.c
index b9eb1b7bb2..b43aee60fe 100644
--- a/drivers/misc/state.c
+++ b/drivers/misc/state.c
@@ -28,8 +28,12 @@ static int state_probe(struct device_d *dev)
bool readonly = false;
state = state_new_from_node(np, NULL, 0, 0, readonly);
- if (IS_ERR(state))
- return PTR_ERR(state);
+ if (IS_ERR(state)) {
+ int ret = PTR_ERR(state);
+ if (ret == -ENODEV)
+ ret = -EPROBE_DEFER;
+ return ret;
+ }
return 0;
}
diff --git a/drivers/of/of_path.c b/drivers/of/of_path.c
index 1f5106df55..946b9c7aa1 100644
--- a/drivers/of/of_path.c
+++ b/drivers/of/of_path.c
@@ -66,6 +66,9 @@ static int __of_find_path(struct device_node *node, const char *part, char **out
return -ENODEV;
}
+ if (!dev->driver)
+ return -ENODEV;
+
device_detect(dev);
if (part)