~ruther/guix-local

91f50366e5bc54951851e99f5600f9abb628b6ec — Herman Rimm 1 year, 6 months ago 29ff4a6
gnu: arm-trusted-firmware-imx8mq: Fix build.

* gnu/local.mk (dist_patch_DATA): Register patches.
* gnu/packages/firmware.scm (make-arm-trusted-firmware): Add make-flags
argument.  [source]: Use patches.
(arm-trusted-firmware-imx8mq): Refactor.
* gnu/packages/patches/8mq-enable-imx_hab_handler.patch: Add file.
* gnu/packages/patches/8mq-move-stack-to-ocram_s.patch: Add file.

Change-Id: I8a72c1ceb5e00e113ae91a7c2f5b733d981185d6
Signed-off-by: Vagrant Cascadian <vagrant@debian.org>
M gnu/local.mk => gnu/local.mk +2 -0
@@ 934,6 934,8 @@ MODULES_NOT_COMPILED +=				\

patchdir = $(guilemoduledir)/%D%/packages/patches
dist_patch_DATA =						\
  %D%/packages/patches/8mq-enable-imx_hab_handler.patch		\
  %D%/packages/patches/8mq-move-stack-to-ocram_s.patch		\
  %D%/packages/patches/abcl-fix-build-xml.patch	\
  %D%/packages/patches/ableton-link-system-libraries-debian.patch	\
  %D%/packages/patches/abiword-explictly-cast-bools.patch	\

M gnu/packages/firmware.scm => gnu/packages/firmware.scm +8 -27
@@ 1099,8 1099,9 @@ Virtual Machines.  OVMF contains a sample UEFI firmware for QEMU and KVM.")
(define-public ovmf
  (deprecated-package "ovmf" ovmf-x86-64))

(define* (make-arm-trusted-firmware platform
                                    #:key (triplet "aarch64-linux-gnu"))
(define* (make-arm-trusted-firmware platform #:key
                                    (triplet "aarch64-linux-gnu")
                                    (make-flags '("DEBUG=1")))
  (define (native-build?)
    "Return #t if the host and target platforms differ."
    (or (not triplet)


@@ 1119,6 1120,8 @@ Virtual Machines.  OVMF contains a sample UEFI firmware for QEMU and KVM.")
       (file-name (git-file-name "arm-trusted-firmware" version))
       (sha256
        (base32 "18rzhygvq0afcylirq9yis3kaa1nli14k2jrm64ih85gz4nhl99w"))
       (patches (search-patches "8mq-enable-imx_hab_handler.patch"
                                "8mq-move-stack-to-ocram_s.patch"))
       (modules '((guix build utils)))
       ;; Remove binary blobs: they don't reference a source or license.
       (snippet #~(for-each delete-file (find-files "." "\\.bin$")))))


@@ 1147,7 1150,7 @@ Virtual Machines.  OVMF contains a sample UEFI firmware for QEMU and KVM.")
              #$@(if (not (native-build?))
                     (list (string-append "CROSS_COMPILE=" triplet "-"))
                     '("CC=gcc"))
              "DEBUG=1")
              #$@make-flags)
      #:tests? #f))                   ;no test suite
    (native-inputs (list python))
    (home-page "https://www.trustedfirmware.org/")


@@ 1185,30 1188,8 @@ interface standards, such as:
                                (cross-binutils "arm-none-eabi")))))))

(define-public arm-trusted-firmware-imx8mq
  (let ((base (make-arm-trusted-firmware "imx8mq")))
    (package
      (inherit base)
      ;; Newer versions do not build and are essentially not supported
      ;; upstream.
      ;; XXX: explore using NXP maintained branch
      ;; https://github.com/nxp-imx/imx-atf
      (version "2.8")
      (source
       (origin
         (method git-fetch)
         (uri (git-reference
               ;; There are only GitHub generated release snapshots.
               (url "https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/")
               (commit (string-append "v" version))))
         (file-name (git-file-name "arm-trusted-firmware" version))
         (sha256
          (base32
           "0grq3fgxi9xhcljnhwlxjvdghyz15gaq50raw41xy4lm8rkmnzp3"))))
      (arguments
       (substitute-keyword-arguments (package-arguments base)
         ((#:make-flags flags ''())
          ;; Adding debug symbols causes the size to exceed limits.
          #~(delete "DEBUG=1" #$flags)))))))
  ;; Remove debug symbols because of limited OCRAM.
  (make-arm-trusted-firmware "imx8mq" #:make-flags '()))

(define make-crust-firmware
  (mlambda (platform)

A gnu/packages/patches/8mq-enable-imx_hab_handler.patch => gnu/packages/patches/8mq-enable-imx_hab_handler.patch +36 -0
@@ 0,0 1,36 @@
From: Herman Rimm <herman@rimm.ee>
Date: Sun, 8 Dec 2024 01:13:59 +0100
Subject: [PATCH] fix(imx8m): 8mq: enable imx_hab_handler

This completes af799814e2639a03b3453744f06a73e77cb66e86.

Signed-off-by: Herman Rimm <herman@rimm.ee>
---
To submit to review.trustedfirmware.org, sign in with a GitHub account.

diff --git a/plat/imx/common/include/imx_sip_svc.h b/plat/imx/common/include/imx_sip_svc.h
index 404a82959..1948bc2eb 100644
--- a/plat/imx/common/include/imx_sip_svc.h
+++ b/plat/imx/common/include/imx_sip_svc.h
@@ -88,7 +88,8 @@ int imx_src_handler(uint32_t smc_fid, u_register_t x1,
 		    u_register_t x2, u_register_t x3, void *handle);
 #endif
 
-#if defined(PLAT_imx8mm) || defined(PLAT_imx8mn) || defined(PLAT_imx8mp)
+#if defined(PLAT_imx8mm) || defined(PLAT_imx8mn) || defined(PLAT_imx8mp) || \
+	defined(PLAT_imx8mq)
 int imx_hab_handler(uint32_t smc_fid, u_register_t x1,
 		    u_register_t x2, u_register_t x3, u_register_t x4);
 #endif
diff --git a/plat/imx/imx8m/imx8mq/platform.mk b/plat/imx/imx8m/imx8mq/platform.mk
index 73179dd0c..b1b954f1d 100644
--- a/plat/imx/imx8m/imx8mq/platform.mk
+++ b/plat/imx/imx8m/imx8mq/platform.mk
@@ -30,6 +30,7 @@ BL31_SOURCES		+=	plat/imx/common/imx8_helpers.S			\
 				plat/imx/imx8m/imx8mq/imx8mq_psci.c		\
 				plat/imx/imx8m/gpc_common.c			\
 				plat/imx/imx8m/imx_aipstz.c			\
+				plat/imx/imx8m/imx_hab.c			\
 				plat/imx/imx8m/imx8m_caam.c			\
 				plat/imx/imx8m/imx8m_ccm.c			\
 				plat/imx/imx8m/imx8m_psci_common.c		\

A gnu/packages/patches/8mq-move-stack-to-ocram_s.patch => gnu/packages/patches/8mq-move-stack-to-ocram_s.patch +88 -0
@@ 0,0 1,88 @@
From: Jacky Bai <ping.bai@nxp.com>
Date: Tue, 7 Jan 2020 15:48:36 +0800
Subject: [PATCH] plat: imx8mq: move the stack & xlat table into ocram_s

Move the stack & xlat table into ocram_s due to the
ocram is not enough.

Signed-off-by: Jacky Bai <ping.bai@nxp.com>
Change-Id: I40a8e6c91f707598a38e420ff9f4be0c0a5dbf6c
---
Commit ae90cc5773abf5656e0e49f2ce746aa54f712b7b of:
https://github.com/nxp-imx/imx-atf.git

diff --git a/bl31/bl31.ld.S b/bl31/bl31.ld.S
index 867dedb99..8be52bc7c 100644
--- a/bl31/bl31.ld.S
+++ b/bl31/bl31.ld.S
@@ -25,6 +25,10 @@ MEMORY {
 #else /* SEPARATE_RWDATA_REGION */
 #define RAM_RW RAM
 #endif /* SEPARATE_RWDATA_REGION */
+
+#if XLAT_TABLE_IN_OCRAM_S
+    RAM_S (rwx): ORIGIN = 0x180000, LENGTH = 0x8000
+#endif
 }

 #ifdef PLAT_EXTRA_LD_SCRIPT
@@ -198,9 +202,13 @@ SECTIONS {
     __NOBITS_START__ = .;
 #endif /* SEPARATE_NOBITS_REGION */

+#if !STACK_IN_OCRAM_S
     STACK_SECTION >NOBITS
+#endif
     BSS_SECTION >NOBITS
+#if !XLAT_TABLE_IN_OCRAM_S
     XLAT_TABLE_SECTION >NOBITS
+#endif

 #if USE_COHERENT_MEM
     /*
@@ -253,4 +261,15 @@ SECTIONS {
     /DISCARD/ : {
         *(.dynsym .dynstr .hash .gnu.hash)
     }
+
+#if XLAT_TABLE_IN_OCRAM_S
+    . = 0x180000;
+    XLAT_TABLE_SECTION >RAM_S
+
+#if STACK_IN_OCRAM_S
+    STACK_SECTION >RAM_S
+#endif
+
+ASSERT(. <= OCRAM_S_LIMIT, "OCRAM_S limit has been exceeded.")
+#endif
 }
diff --git a/plat/imx/imx8m/imx8mq/imx8mq_bl31_setup.c b/plat/imx/imx8m/imx8mq/imx8mq_bl31_setup.c
index 70c2def7d..ddff0925c 100644
--- a/plat/imx/imx8m/imx8mq/imx8mq_bl31_setup.c
+++ b/plat/imx/imx8m/imx8mq/imx8mq_bl31_setup.c
@@ -48,6 +48,7 @@ static uint8_t mmio_read_8_ldrb(uintptr_t address)
 static const mmap_region_t imx_mmap[] = {
 	MAP_REGION_FLAT(GPV_BASE, GPV_SIZE, MT_DEVICE | MT_RW), /* GPV map */
 	MAP_REGION_FLAT(IMX_ROM_BASE, IMX_ROM_SIZE, MT_MEMORY | MT_RO), /* ROM map */
+	MAP_REGION_FLAT(OCRAM_S_BASE, OCRAM_S_SIZE, MT_MEMORY | MT_RW), /* ROM map */
 	MAP_REGION_FLAT(IMX_AIPS_BASE, IMX_AIPS_SIZE, MT_DEVICE | MT_RW), /* AIPS map */
 	MAP_REGION_FLAT(IMX_GIC_BASE, IMX_GIC_SIZE, MT_DEVICE | MT_RW), /* GIC map */
 	MAP_REGION_FLAT(IMX_DDRPHY_BASE, IMX_DDR_IPS_SIZE, MT_DEVICE | MT_RW), /* DDRMIX map */
diff --git a/plat/imx/imx8m/imx8mq/platform.mk b/plat/imx/imx8m/imx8mq/platform.mk
index 73179dd0c..20a73d691 100644
--- a/plat/imx/imx8m/imx8mq/platform.mk
+++ b/plat/imx/imx8m/imx8mq/platform.mk
@@ -45,7 +45,12 @@ BL31_SOURCES		+=	plat/imx/common/imx8_helpers.S			\
 				${XLAT_TABLES_LIB_SRCS}				\
 				${IMX_GIC_SOURCES}

-ENABLE_PIE		:=	1
+XLAT_TABLE_IN_OCRAM_S	:=	1
+STACK_IN_OCRAM_S       :=      1
+
+$(eval $(call add_define,XLAT_TABLE_IN_OCRAM_S))
+$(eval $(call add_define,STACK_IN_OCRAM_S))
+
 USE_COHERENT_MEM	:=	1
 RESET_TO_BL31		:=	1
 A53_DISABLE_NON_TEMPORAL_HINT := 0