Load the optional resource table from the firmware, and write its
address in the dedicated backup register.

Signed-off-by: Fabien Dessenne <fabien.desse...@st.com>
---
 drivers/remoteproc/stm32_copro.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/remoteproc/stm32_copro.c b/drivers/remoteproc/stm32_copro.c
index 40bba37..eef3416 100644
--- a/drivers/remoteproc/stm32_copro.c
+++ b/drivers/remoteproc/stm32_copro.c
@@ -23,6 +23,7 @@
  * @hold_boot_offset:  offset of the register controlling the hold boot setting
  * @hold_boot_mask:    bitmask of the register for the hold boot field
  * @is_running:                is the remote processor running
+ * @rsc_table_addr:    resource table address
  */
 struct stm32_copro_privdata {
        struct reset_ctl reset_ctl;
@@ -30,6 +31,7 @@ struct stm32_copro_privdata {
        uint hold_boot_offset;
        uint hold_boot_mask;
        bool is_running;
+       ulong rsc_table_addr;
 };
 
 /**
@@ -141,6 +143,7 @@ static void *stm32_copro_device_to_virt(struct udevice 
*dev, ulong da,
 static int stm32_copro_load(struct udevice *dev, ulong addr, ulong size)
 {
        struct stm32_copro_privdata *priv;
+       ulong rsc_table_size;
        int ret;
 
        priv = dev_get_priv(dev);
@@ -155,6 +158,12 @@ static int stm32_copro_load(struct udevice *dev, ulong 
addr, ulong size)
                return ret;
        }
 
+       if (rproc_elf32_load_rsc_table(dev, addr, size, &priv->rsc_table_addr,
+                                      &rsc_table_size)) {
+               priv->rsc_table_addr = 0;
+               dev_warn(dev, "No valid resource table for this firmware\n");
+       }
+
        return rproc_elf32_load_image(dev, addr, size);
 }
 
@@ -180,6 +189,10 @@ static int stm32_copro_start(struct udevice *dev)
         * rebooting autonomously
         */
        ret = stm32_copro_set_hold_boot(dev, true);
+       if (!ret)
+               /* Store rsc_address in bkp register */
+               writel(priv->rsc_table_addr, TAMP_COPRO_RSC_TBL_ADDRESS);
+
        priv->is_running = !ret;
        return ret;
 }
-- 
2.7.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to