svn commit: r327942 - stable/11/sys/boot/fdt
Kyle Evans
kevans at FreeBSD.org
Sat Jan 13 21:08:40 UTC 2018
Author: kevans
Date: Sat Jan 13 21:08:38 2018
New Revision: 327942
URL: https://svnweb.freebsd.org/changeset/base/327942
Log:
MFC (conceptually) r327298, r327299: Fix overlay application behavior
This is a direct commit to stable/11 due to restructuring of sys/boot =>
stand in -HEAD. The diff remains the same and it simply applied to the
previous location.
MFC r327298: stand/fdt: Fix loading of multiple fdt_overlays
fdt_load_dtb_overlays was written to unload previous overlay when a new
valid one is come across. fdt_apply_overlays further down is written to
iterate over all .dtbo's currently loaded and apply them one-by-one. Correct
fdt_load_dtb_overlays to stop dropping valid overlays that were previously
loaded and match expectations.
MFC r327299: stand/fdt: Avoid bailout when dtbo has no fixups
In the case of a simple dtbo where fragment uses target-path and the overlay
contains no references, /__fixups__ will not be included by either our dtc
or dtc from ports, but the file still has valid fragments to be applied.
Additional testing found that /__symbols__ might also be omitted if it's
empty, which is not necessarily an error.
Modified:
stable/11/sys/boot/fdt/fdt_loader_cmd.c
stable/11/sys/boot/fdt/fdt_overlay.c
Modified: stable/11/sys/boot/fdt/fdt_loader_cmd.c
==============================================================================
--- stable/11/sys/boot/fdt/fdt_loader_cmd.c Sat Jan 13 20:35:32 2018 (r327941)
+++ stable/11/sys/boot/fdt/fdt_loader_cmd.c Sat Jan 13 21:08:38 2018 (r327942)
@@ -280,14 +280,12 @@ fdt_load_dtb_file(const char * filename)
static int
fdt_load_dtb_overlay(const char * filename)
{
- struct preloaded_file *bfp, *oldbfp;
+ struct preloaded_file *bfp;
struct fdt_header header;
int err;
debugf("fdt_load_dtb_overlay(%s)\n", filename);
- oldbfp = file_findfile(filename, "dtbo");
-
/* Attempt to load and validate a new dtb from a file. */
if ((bfp = file_loadraw(filename, "dtbo", 1)) == NULL) {
printf("failed to load file '%s'\n", filename);
@@ -308,10 +306,6 @@ fdt_load_dtb_overlay(const char * filename)
fdt_strerror(err));
return (1);
}
-
- /* A new dtb was validated, discard any previous file. */
- if (oldbfp)
- file_discard(oldbfp);
return (0);
}
Modified: stable/11/sys/boot/fdt/fdt_overlay.c
==============================================================================
--- stable/11/sys/boot/fdt/fdt_overlay.c Sat Jan 13 20:35:32 2018 (r327941)
+++ stable/11/sys/boot/fdt/fdt_overlay.c Sat Jan 13 21:08:38 2018 (r327942)
@@ -324,10 +324,16 @@ fdt_overlay_do_fixups(void *main_fdtp, void *overlay_f
main_symbols_o = fdt_path_offset(main_fdtp, "/__symbols__");
overlay_fixups_o = fdt_path_offset(overlay_fdtp, "/__fixups__");
- if (main_symbols_o < 0)
+ if (main_symbols_o < 0) {
+ if (main_symbols_o == -FDT_ERR_NOTFOUND)
+ return (0);
return (-1);
- if (overlay_fixups_o < 0)
+ }
+ if (overlay_fixups_o < 0) {
+ if (overlay_fixups_o == -FDT_ERR_NOTFOUND)
+ return (0);
return (-1);
+ }
for (fixup_prop_o = fdt_first_property_offset(overlay_fdtp, overlay_fixups_o);
fixup_prop_o >= 0;
More information about the svn-src-stable
mailing list