drivers: board: Add get_fit_loadable()
authorJean-Jacques Hiblot <jjhiblot@ti.com>
Tue, 22 Oct 2019 14:39:19 +0000 (16:39 +0200)
committerTom Rini <trini@konsulko.com>
Tue, 7 Jan 2020 16:13:24 +0000 (11:13 -0500)
This function will be used by the SPL to get the names of images to load
from the FIT. This allows to load different images based on runtime HW
detection.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/board/board-uclass.c
include/board.h

index a516ba49629c6b868bd3b7ac22b2b0c2817cf0bd..b5485e9895b8b9a529bc617dcdddb14bc1931fd2 100644 (file)
@@ -23,6 +23,17 @@ int board_detect(struct udevice *dev)
        return ops->detect(dev);
 }
 
+int board_get_fit_loadable(struct udevice *dev, int index,
+                          const char *type, const char **strp)
+{
+       struct board_ops *ops = board_get_ops(dev);
+
+       if (!ops->get_fit_loadable)
+               return -ENOSYS;
+
+       return ops->get_fit_loadable(dev, index, type, strp);
+}
+
 int board_get_bool(struct udevice *dev, int id, bool *val)
 {
        struct board_ops *ops = board_get_ops(dev);
index 9dc78684f8e0f6e49c77b941a32927491a44f2bc..fd6a486702eac372c9221f4c6ff50c1cdc9ddbc5 100644 (file)
@@ -79,6 +79,24 @@ struct board_ops {
         * Return: 0 if OK, -ve on error.
         */
        int (*get_str)(struct udevice *dev, int id, size_t size, char *val);
+
+       /**
+        * get_fit_loadable - Get the name of an image to load from FIT
+        * This function can be used to provide the image names based on runtime
+        * detection. A classic use-case would when DTBOs are used to describe
+        * additionnal daughter cards.
+        *
+        * @dev:        The board instance to gather the data.
+        * @index:      Index of the image. Starts at 0 and gets incremented
+        *              after each call to this function.
+        * @type:       The type of image. For example, "fdt" for DTBs
+        * @strp:       A pointer to string. Untouched if the function fails
+        *
+        * Return: 0 if OK, -ENOENT if no loadable is available else -ve on
+        * error.
+        */
+       int (*get_fit_loadable)(struct udevice *dev, int index,
+                               const char *type, const char **strp);
 };
 
 #define board_get_ops(dev)     ((struct board_ops *)(dev)->driver->ops)
@@ -137,3 +155,22 @@ int board_get_str(struct udevice *dev, int id, size_t size, char *val);
  * Return: 0 if OK, -ve on error.
  */
 int board_get(struct udevice **devp);
+
+/**
+ * board_get_fit_loadable - Get the name of an image to load from FIT
+ * This function can be used to provide the image names based on runtime
+ * detection. A classic use-case would when DTBOs are used to describe
+ * additionnal daughter cards.
+ *
+ * @dev:       The board instance to gather the data.
+ * @index:     Index of the image. Starts at 0 and gets incremented
+ *             after each call to this function.
+ * @type:      The type of image. For example, "fdt" for DTBs
+ * @strp:      A pointer to string. Untouched if the function fails
+ *
+ *
+ * Return: 0 if OK, -ENOENT if no loadable is available else -ve on
+ * error.
+ */
+int board_get_fit_loadable(struct udevice *dev, int index,
+                          const char *type, const char **strp);