Author: manu
Date: Thu Apr 25 20:08:43 2019
New Revision: 346701
URL: https://svnweb.freebsd.org/changeset/base/346701

Log:
  loader: fdt: Add fdt_is_setup function
  
  When efi_autoload is called it will call fdt_setup_fdtp which setup the
  dtb and overlays. If a user already loaded at dtb or overlays or just
  printed the efi provided dtb, this will re-setup everything and also
  re-applying the overlays.
  Test that everything is setup before doing it again.
  
  Reviewed by:  kevans
  Differential Revision:        https://reviews.freebsd.org/D20059

Modified:
  head/stand/efi/loader/autoload.c
  head/stand/fdt/fdt_loader_cmd.c
  head/stand/fdt/fdt_platform.h

Modified: head/stand/efi/loader/autoload.c
==============================================================================
--- head/stand/efi/loader/autoload.c    Thu Apr 25 20:02:11 2019        
(r346700)
+++ head/stand/efi/loader/autoload.c    Thu Apr 25 20:08:43 2019        
(r346701)
@@ -50,7 +50,8 @@ efi_autoload(void)
         * imply that we're on a platform where FDT is a requirement.  If we
         * fix this, then the error handling here should be fixed accordingly.
         */
-       fdt_setup_fdtp();
+       if (fdt_is_setup() == 0)
+               fdt_setup_fdtp();
 #endif
        return (0);
 }

Modified: head/stand/fdt/fdt_loader_cmd.c
==============================================================================
--- head/stand/fdt/fdt_loader_cmd.c     Thu Apr 25 20:02:11 2019        
(r346700)
+++ head/stand/fdt/fdt_loader_cmd.c     Thu Apr 25 20:08:43 2019        
(r346701)
@@ -510,6 +510,16 @@ fdt_apply_overlays()
 }
 
 int
+fdt_is_setup(void)
+{
+
+       if (fdtp != NULL)
+               return (1);
+
+       return (0);
+}
+
+int
 fdt_setup_fdtp()
 {
        struct preloaded_file *bfp;

Modified: head/stand/fdt/fdt_platform.h
==============================================================================
--- head/stand/fdt/fdt_platform.h       Thu Apr 25 20:02:11 2019        
(r346700)
+++ head/stand/fdt/fdt_platform.h       Thu Apr 25 20:08:43 2019        
(r346701)
@@ -48,6 +48,7 @@ int fdt_load_dtb_addr(struct fdt_header *);
 int fdt_load_dtb_file(const char *);
 void fdt_load_dtb_overlays(const char *);
 int fdt_setup_fdtp(void);
+int fdt_is_setup(void);
 
 /* The platform library needs to implement these functions */
 int fdt_platform_load_dtb(void);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to