diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/efi/efi.c | 2 | ||||
-rw-r--r-- | common/state/state.c | 48 | ||||
-rw-r--r-- | common/state/state.h | 1 |
3 files changed, 22 insertions, 29 deletions
diff --git a/common/efi/efi.c b/common/efi/efi.c index 561ce4c081..1f451a157e 100644 --- a/common/efi/efi.c +++ b/common/efi/efi.c @@ -441,7 +441,7 @@ static int efi_late_init(void) np = of_find_node_by_alias(root, "state"); - state = state_new_from_node(np, NULL, 0, 0, false); + state = state_new_from_node(np, false); if (IS_ERR(state)) return PTR_ERR(state); diff --git a/common/state/state.c b/common/state/state.c index cb979328c1..73dfb586e7 100644 --- a/common/state/state.c +++ b/common/state/state.c @@ -480,7 +480,8 @@ static int of_state_fixup(struct device_node *root, void *ctx) } /* backend phandle */ - backend_node = of_find_node_by_devpath(root, state->backend_path); + backend_node = of_find_node_by_reproducible_name(root, + state->backend_reproducible_name); if (!backend_node) { ret = -ENODEV; goto out; @@ -560,6 +561,7 @@ void state_release(struct state *state) state_storage_free(&state->storage); state_format_free(state->format); free(state->backend_path); + free(state->backend_reproducible_name); free(state->of_path); free(state); } @@ -567,17 +569,10 @@ void state_release(struct state *state) /* * state_new_from_node - create a new state instance from a device_node * - * @node The device_node describing the new state instance - * @path Path to the backend device. If NULL the path is constructed - * using the path in the backend property of the DT. - * @offset Offset in the device path. May be 0 to start at the beginning. - * @max_size Maximum size of the area used. This may be 0 to use the full - * size. * @readonly This is a read-only state. Note that with this option set, * there are no repairs done. */ -struct state *state_new_from_node(struct device_node *node, char *path, - off_t offset, size_t max_size, bool readonly) +struct state *state_new_from_node(struct device_node *node, bool readonly) { struct state *state; int ret = 0; @@ -585,6 +580,7 @@ struct state *state_new_from_node(struct device_node *node, char *path, const char *storage_type = NULL; const char *alias; uint32_t stridesize; + struct device_node *partition_node; alias = of_alias_get(node); if (!alias) { @@ -596,26 +592,22 @@ struct state *state_new_from_node(struct device_node *node, char *path, if (IS_ERR(state)) return state; - if (!path) { - struct device_node *partition_node; - - partition_node = of_parse_phandle(node, "backend", 0); - if (!partition_node) { - dev_err(&state->dev, "Cannot resolve \"backend\" phandle\n"); - ret = -EINVAL; - goto out_release_state; - } + partition_node = of_parse_phandle(node, "backend", 0); + if (!partition_node) { + dev_err(&state->dev, "Cannot resolve \"backend\" phandle\n"); + ret = -EINVAL; + goto out_release_state; + } - ret = of_find_path_by_node(partition_node, &path, 0); - 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; - } + ret = of_find_path_by_node(partition_node, &state->backend_path, 0); + 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; } - state->backend_path = xstrdup(path); + state->backend_reproducible_name = of_get_reproducible_name(partition_node); ret = of_property_read_string(node, "backend-type", &backend_type); if (ret) { @@ -635,8 +627,8 @@ struct state *state_new_from_node(struct device_node *node, char *path, if (ret) goto out_release_state; - ret = state_storage_init(state, path, offset, - max_size, stridesize, storage_type); + ret = state_storage_init(state, state->backend_path, 0, + 0, stridesize, storage_type); if (ret) goto out_release_state; diff --git a/common/state/state.h b/common/state/state.h index da1c6acaeb..6670523cbb 100644 --- a/common/state/state.h +++ b/common/state/state.h @@ -115,6 +115,7 @@ struct state { struct state_backend_format *format; struct state_backend_storage storage; char *backend_path; + char *backend_reproducible_name; }; enum state_convert { |