diff options
author | Álvaro Fernández Rojas <noltari@gmail.com> | 2019-07-09 20:32:28 +0200 |
---|---|---|
committer | Álvaro Fernández Rojas <noltari@gmail.com> | 2019-07-14 12:44:14 +0200 |
commit | 42954857190b9df16d9d873ecc7f6cc38e013e44 (patch) | |
tree | 98c588f629ff534d458eb0884782ea99672d7634 /target/linux/brcm2708/patches-4.19/950-0133-of-configfs-Use-of_overlay_fdt_apply-API-call.patch | |
parent | f1875e902d0afb7d9b9e5285b4fd8da7f6c5e30a (diff) | |
download | upstream-42954857190b9df16d9d873ecc7f6cc38e013e44.tar.gz upstream-42954857190b9df16d9d873ecc7f6cc38e013e44.tar.bz2 upstream-42954857190b9df16d9d873ecc7f6cc38e013e44.zip |
brcm2708: add linux 4.19 support
Boot tested on Raspberry Pi B+ (BCM2708) and Raspberry Pi 2 (BCM2709)
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/brcm2708/patches-4.19/950-0133-of-configfs-Use-of_overlay_fdt_apply-API-call.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.19/950-0133-of-configfs-Use-of_overlay_fdt_apply-API-call.patch | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.19/950-0133-of-configfs-Use-of_overlay_fdt_apply-API-call.patch b/target/linux/brcm2708/patches-4.19/950-0133-of-configfs-Use-of_overlay_fdt_apply-API-call.patch new file mode 100644 index 0000000000..78e2934bbb --- /dev/null +++ b/target/linux/brcm2708/patches-4.19/950-0133-of-configfs-Use-of_overlay_fdt_apply-API-call.patch @@ -0,0 +1,114 @@ +From 8d90ea3c51ab934802afe45eba16800f6c620cee Mon Sep 17 00:00:00 2001 +From: Phil Elwell <phil@raspberrypi.org> +Date: Thu, 14 Jun 2018 15:07:26 +0100 +Subject: [PATCH 133/703] of: configfs: Use of_overlay_fdt_apply API call + +The published API to the dynamic overlay application mechanism now +takes a Flattened Device Tree blob as input so that it can manage the +lifetime of the unflattened tree. Conveniently, the new API call - +of_overlay_fdt_apply - is virtually a drop-in replacement for +create_overlay, which can now be deleted. + +Signed-off-by: Phil Elwell <phil@raspberrypi.org> +--- + drivers/of/configfs.c | 47 +++++++------------------------------------ + 1 file changed, 7 insertions(+), 40 deletions(-) + +--- a/drivers/of/configfs.c ++++ b/drivers/of/configfs.c +@@ -40,41 +40,6 @@ struct cfs_overlay_item { + int dtbo_size; + }; + +-static int create_overlay(struct cfs_overlay_item *overlay, void *blob) +-{ +- int err; +- +- /* unflatten the tree */ +- of_fdt_unflatten_tree(blob, NULL, &overlay->overlay); +- if (overlay->overlay == NULL) { +- pr_err("%s: failed to unflatten tree\n", __func__); +- err = -EINVAL; +- goto out_err; +- } +- pr_debug("%s: unflattened OK\n", __func__); +- +- /* mark it as detached */ +- of_node_set_flag(overlay->overlay, OF_DETACHED); +- +- /* perform resolution */ +- err = of_resolve_phandles(overlay->overlay); +- if (err != 0) { +- pr_err("%s: Failed to resolve tree\n", __func__); +- goto out_err; +- } +- pr_debug("%s: resolved OK\n", __func__); +- +- err = of_overlay_apply(overlay->overlay, &overlay->ov_id); +- if (err < 0) { +- pr_err("%s: Failed to create overlay (err=%d)\n", +- __func__, err); +- goto out_err; +- } +- +-out_err: +- return err; +-} +- + static inline struct cfs_overlay_item *to_cfs_overlay_item( + struct config_item *item) + { +@@ -115,7 +80,8 @@ static ssize_t cfs_overlay_item_path_sto + if (err != 0) + goto out_err; + +- err = create_overlay(overlay, (void *)overlay->fw->data); ++ err = of_overlay_fdt_apply((void *)overlay->fw->data, ++ (u32)overlay->fw->size, &overlay->ov_id); + if (err != 0) + goto out_err; + +@@ -136,7 +102,7 @@ static ssize_t cfs_overlay_item_status_s + struct cfs_overlay_item *overlay = to_cfs_overlay_item(item); + + return sprintf(page, "%s\n", +- overlay->ov_id >= 0 ? "applied" : "unapplied"); ++ overlay->ov_id > 0 ? "applied" : "unapplied"); + } + + CONFIGFS_ATTR(cfs_overlay_item_, path); +@@ -188,7 +154,8 @@ ssize_t cfs_overlay_item_dtbo_write(stru + + overlay->dtbo_size = count; + +- err = create_overlay(overlay, overlay->dtbo); ++ err = of_overlay_fdt_apply(overlay->dtbo, overlay->dtbo_size, ++ &overlay->ov_id); + if (err != 0) + goto out_err; + +@@ -198,6 +165,7 @@ out_err: + kfree(overlay->dtbo); + overlay->dtbo = NULL; + overlay->dtbo_size = 0; ++ overlay->ov_id = 0; + + return err; + } +@@ -213,7 +181,7 @@ static void cfs_overlay_release(struct c + { + struct cfs_overlay_item *overlay = to_cfs_overlay_item(item); + +- if (overlay->ov_id >= 0) ++ if (overlay->ov_id > 0) + of_overlay_remove(&overlay->ov_id); + if (overlay->fw) + release_firmware(overlay->fw); +@@ -241,7 +209,6 @@ static struct config_item *cfs_overlay_g + overlay = kzalloc(sizeof(*overlay), GFP_KERNEL); + if (!overlay) + return ERR_PTR(-ENOMEM); +- overlay->ov_id = -1; + + config_item_init_type_name(&overlay->item, name, &cfs_overlay_type); + return &overlay->item; |