From: Hiago De Franco <[email protected]>

Merge the contiguous ITCM and DTCM regions into a single region to
prevent failures when loading ELF files with large sections:

remoteproc remoteproc0: powering up imx-rproc
remoteproc remoteproc0: Booting fw image rproc-imx-rproc-fw, size 151824
imx-rproc imx8mp-cm7: Translation failed: da = 0x1f48 len = 0x1fcb0
remoteproc remoteproc0: bad phdr da 0x1f48 mem 0x1fcb0
remoteproc remoteproc0: Failed to load program segments: -22
remoteproc remoteproc0: Boot failed: -22

This approach is the same as commit 8749919defb8 ("remoteproc:
imx_rproc: Merge TCML/U").

Suggested-by: Ritesh Kumar <[email protected]>
Signed-off-by: Hiago De Franco <[email protected]>
---
Hi,

The ELF I tested had the following data section:

Memory region         Used Size  Region Size  %age Used
    m_interrupts:         680 B         1 KB     66.41%
          m_text:        6984 B       127 KB      5.37%
          m_data:      130224 B       128 KB     99.35%
         m_data2:          0 GB        16 MB      0.00%
[100%] Built target hello_world_cm7.elf

Which triggered the error. After this patch, remoteproc was able to boot
and work fine. Thanks!
---
 drivers/remoteproc/imx_rproc.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index 74299af1d7f1..bbf089ef48ee 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -166,8 +166,8 @@ static const struct imx_rproc_att imx_rproc_att_imx8qxp[] = 
{
 
 static const struct imx_rproc_att imx_rproc_att_imx8mn[] = {
        /* dev addr , sys addr  , size      , flags */
-       /* ITCM   */
-       { 0x00000000, 0x007E0000, 0x00020000, ATT_OWN | ATT_IOMEM },
+       /* D/ITCM */
+       { 0x00000000, 0x007E0000, 0x00040000, ATT_OWN | ATT_IOMEM },
        /* OCRAM_S */
        { 0x00180000, 0x00180000, 0x00009000, 0 },
        /* OCRAM */
@@ -180,8 +180,6 @@ static const struct imx_rproc_att imx_rproc_att_imx8mn[] = {
        { 0x08000000, 0x08000000, 0x08000000, 0 },
        /* DDR (Code) - alias */
        { 0x10000000, 0x40000000, 0x0FFE0000, 0 },
-       /* DTCM */
-       { 0x20000000, 0x00800000, 0x00020000, ATT_OWN | ATT_IOMEM },
        /* OCRAM_S - alias */
        { 0x20180000, 0x00180000, 0x00008000, ATT_OWN },
        /* OCRAM */
-- 
2.39.5


Reply via email to