All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and
@ 2022-06-15  6:47 Neha Malcom Francis
  2022-06-15  6:47 ` [PATCH RFC v3 01/11] j721e_evm: schema: yaml: Add general schema and J721E board config files Neha Malcom Francis
                   ` (11 more replies)
  0 siblings, 12 replies; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-15  6:47 UTC (permalink / raw)
  To: trini, alpernebiyasak, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

Devices that belong to the K3 architecture require SYSFW which is a FIT
image consisting of a signed system firmware image and board config
binaries.

Board config binaries are needed to bring up SYSFW during U-Boot SPL
startup. The board config data is given in YAML as input. These board
configs contain board-specific information such as resource management,
power management and security.

The following series intends to plumb the system firmware generation
into U-Boot using binman for packaging. Thus it will eliminate the need
for additional custom repositories for SYSFW generation and also moves
towards the community standard build flow. We use binman to package
tiboot3.bin and sysfw.itb for J721E.

These images also require x509 certificates which are created using the
etype ti-x509-cert.

The series also plumbs the generation of tispl.bin which is required for
loading U-Boot in K3 devices. The image is packaged using ATF, OPTEE and
DM (Device Manager).

Please note that the implementation is for J721E GP (General Purpose)
devices.

Also note the introduction of three new etypes: ti-sysfw, ti-dm and
ti-x509-cert.

CI tests on Github have all passed but this is after the inclusion of
test/py/requirements.txt installation in Azure pipeline script for World
Build tests.

v3:
- Reformatted patches to make sure none of the existing board builds and
  functionalities are broken
- x509-cert --> ti-x509-cert
- Avoided deletion of k3_fit_atf.sh and k3_gen_x509_cert.sh to make sure
  no other builds fail
- Made change to Azure pipeline script to include installation of
  test/py/requirements.txt in World Build test

v2:
- Added etype x509-cert for creating x509 Texas Instruments certificate
  binary
- Added packaging of tiboot3.bin
- Packaging of tiboot3.bin and sysfw.itb using new etype x509
- sysfw --> ti-sysfw
- Reformatted and re-arranged patches
- Removed k3_fit_atf.sh and k3_gen_x509_cert.sh as their functionality
  is provided by binman now

Neha Malcom Francis (11):
  j721e_evm: schema: yaml: Add general schema and J721E board config
    files
  ti: tools: config: Add board config class to generate config binaries
  ti: etype: sysfw: Add entry type for sysfw
  ti: etype: dm: Add entry type for TI DM
  ti: etype: x509: Add etype for x509 certificate for K3 devices
  ti: sysfw: Add support for packaging sysfw.itb
  ti: j721e: Exclude makefile tiboot3.bin target for J721E
  ti: j721e: Exclude makefile tispl.bin target for J721E
  ti: dtsi: j721e: Use binman to package sysfw.itb and tiboot3.bin
  ti: dtsi: j721e: Use binman to package tispl.bin
  ci: world_build: test: Add requirements.txt

 .azure-pipelines.yml                          |    1 +
 Makefile                                      |    2 +
 arch/arm/dts/k3-j721e-a72-binman.dtsi         |   86 +
 .../k3-j721e-common-proc-board-u-boot.dtsi    |    1 +
 arch/arm/dts/k3-j721e-r5-binman.dtsi          |   88 +
 .../k3-j721e-r5-common-proc-board-u-boot.dtsi |    1 +
 arch/arm/mach-k3/config.mk                    |   26 +
 board/ti/common/schema.yaml                   |  355 ++
 board/ti/j721e/Kconfig                        |    2 +
 board/ti/j721e/config.yaml                    | 3162 +++++++++++++++++
 scripts/Makefile.spl                          |    2 +
 test/py/requirements.txt                      |    2 +
 tools/binman/entries.rst                      |   36 +
 tools/binman/etype/ti_dm.py                   |   23 +
 tools/binman/etype/ti_sysfw.py                |   28 +
 tools/binman/etype/ti_x509_cert.py            |  241 ++
 tools/binman/ftest.py                         |   20 +
 tools/binman/test/225_ti_dm.dts               |   13 +
 tools/binman/test/232_ti_sysfw.dts            |   13 +
 tools/binman/test/232_x509_cert.dts           |   18 +
 tools/tibcfg_gen.py                           |  114 +
 21 files changed, 4234 insertions(+)
 create mode 100644 arch/arm/dts/k3-j721e-a72-binman.dtsi
 create mode 100644 arch/arm/dts/k3-j721e-r5-binman.dtsi
 create mode 100644 board/ti/common/schema.yaml
 create mode 100644 board/ti/j721e/config.yaml
 create mode 100644 tools/binman/etype/ti_dm.py
 create mode 100644 tools/binman/etype/ti_sysfw.py
 create mode 100644 tools/binman/etype/ti_x509_cert.py
 create mode 100644 tools/binman/test/225_ti_dm.dts
 create mode 100644 tools/binman/test/232_ti_sysfw.dts
 create mode 100644 tools/binman/test/232_x509_cert.dts
 create mode 100644 tools/tibcfg_gen.py

-- 
2.17.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH RFC v3 01/11] j721e_evm: schema: yaml: Add general schema and J721E board config files
  2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
@ 2022-06-15  6:47 ` Neha Malcom Francis
  2022-06-15  6:47 ` [PATCH RFC v3 02/11] ti: tools: config: Add board config class to generate config binaries Neha Malcom Francis
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-15  6:47 UTC (permalink / raw)
  To: trini, alpernebiyasak, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

Schema file in YAML must be provided in board/ti/common for validating
input config files and packaging system firmware. The schema includes
entries for rm-cfg, board-cfg, pm-cfg and sec-cfg.

Board config file must be provided in board/ti/<devicename> in YAML.
These can then be consumed for generation of binaries to package system
firmware. Added YAML config for J721E EVM in particular.

It is to be noted that the bootflow followed by J721E requires
tiboot3.bin, TIFS and board config binaries to be packaged into
sysfw.itb along with u-boot.img. It also requires DM, ATF, OPTEE
packaged into tispl.bin.

Signed-off-by: Tarun Sahu <t-sahu@ti.com>
[n-francis@ti.com: prepared patch for upstreaming]
Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
---
 board/ti/common/schema.yaml |  355 ++++
 board/ti/j721e/config.yaml  | 3162 +++++++++++++++++++++++++++++++++++
 2 files changed, 3517 insertions(+)
 create mode 100644 board/ti/common/schema.yaml
 create mode 100644 board/ti/j721e/config.yaml

diff --git a/board/ti/common/schema.yaml b/board/ti/common/schema.yaml
new file mode 100644
index 0000000000..070ff797e0
--- /dev/null
+++ b/board/ti/common/schema.yaml
@@ -0,0 +1,355 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
+#
+# Config schema for TI K3 devices
+#
+
+---
+
+definitions:
+    u8:
+        type: integer
+        minimum: 0
+        maximum: 0xff
+    u16:
+        type: integer
+        minimum: 0
+        maximum: 0xffff
+    u32:
+        type: integer
+        minimum: 0
+        maximum: 0xffffffff
+
+
+
+type: object
+properties:
+    pm-cfg:
+        type: object
+        properties:
+            rev:
+                type: object
+                properties:
+                    boardcfg_abi_maj:
+                        $ref: "#/definitions/u8"
+                    boardcfg_abi_min:
+                        $ref: "#/definitions/u8"
+    board-cfg:
+        type: object
+        properties:
+            rev:
+                type: object
+                properties:
+                    boardcfg_abi_maj:
+                        $ref: "#/definitions/u8"
+                    boardcfg_abi_min:
+                        $ref: "#/definitions/u8"
+            control:
+                type: object
+                properties:
+                    subhdr:
+                        type: object
+                        properties:
+                            magic:
+                                $ref: "#/definitions/u16"
+                            size:
+                                $ref: "#/definitions/u16"
+                    main_isolation_enable:
+                        $ref: "#/definitions/u8"
+                    main_isolation_hostid:
+                        $ref: "#/definitions/u16"
+
+
+            secproxy:
+                type: object
+                properties:
+                    subhdr:
+                        type: object
+                        properties:
+                            magic:
+                                $ref: "#/definitions/u16"
+                            size:
+                                $ref: "#/definitions/u16"
+                    scaling_factor:
+                        $ref: "#/definitions/u8"
+                    scaling_profile:
+                        $ref: "#/definitions/u8"
+                    disable_main_nav_secure_proxy:
+                        $ref: "#/definitions/u8"
+
+            msmc:
+                type: object
+                properties:
+                    subhdr:
+                        type: object
+                        properties:
+                            magic:
+                                $ref: "#/definitions/u16"
+                            size:
+                                $ref: "#/definitions/u16"
+                    msmc_cache_size:
+                        $ref: "#/definitions/u8"
+            debug_cfg:
+                type: object
+                properties:
+                    subhdr:
+                        type: object
+                        properties:
+                            magic:
+                                $ref: "#/definitions/u16"
+                            size:
+                                $ref: "#/definitions/u16"
+                    trace_dst_enables:
+                        $ref: "#/definitions/u16"
+                    trace_src_enables:
+                        $ref: "#/definitions/u16"
+
+    sec-cfg:
+        type: object
+        properties:
+            rev:
+                type: object
+                properties:
+                    boardcfg_abi_maj:
+                        $ref: "#/definitions/u8"
+                    boardcfg_abi_min:
+                        $ref: "#/definitions/u8"
+
+            processor_acl_list:
+                type: object
+                properties:
+                    subhdr:
+                        type: object
+                        properties:
+                            magic:
+                                $ref: "#/definitions/u16"
+                            size:
+                                $ref: "#/definitions/u16"
+                    proc_acl_entries:
+                        type: array
+                        minItems: 32
+                        maxItems: 32
+                        items:
+                            type: object
+                            properties:
+                                processor_id:
+                                    $ref: "#/definitions/u8"
+                                proc_access_master:
+                                    $ref: "#/definitions/u8"
+                                proc_access_secondary:
+                                    type: array
+                                    minItems: 3
+                                    maxItems: 3
+                                    items:
+                                        $ref: "#/definitions/u8"
+            host_hierarchy:
+                type: object
+                properties:
+                    subhdr:
+                        type: object
+                        properties:
+                            magic:
+                                $ref: "#/definitions/u16"
+                            size:
+                                $ref: "#/definitions/u16"
+                    host_hierarchy_entries:
+                        type: array
+                        minItems: 32
+                        maxItems: 32
+                        items:
+                            type: object
+                            properties:
+                                host_id:
+                                    $ref: "#/definitions/u8"
+                                supervisor_host_id:
+                                    $ref: "#/definitions/u8"
+
+            otp_config:
+                type: object
+                properties:
+                    subhdr:
+                        type: object
+                        properties:
+                            magic:
+                                $ref: "#/definitions/u16"
+                            size:
+                                $ref: "#/definitions/u16"
+                    otp_entry:
+                        type: array
+                        minItems: 32
+                        maxItems: 32
+                        items:
+                            type: object
+                            properties:
+                                host_id:
+                                    $ref: "#/definitions/u8"
+                                host_perms:
+                                    $ref: "#/definitions/u8"
+                    write_host_id:
+                        $ref: "#/definitions/u8"
+
+            dkek_config:
+                type: object
+                properties:
+                    subhdr:
+                        type: object
+                        properties:
+                            magic:
+                                $ref: "#/definitions/u16"
+                            size:
+                                $ref: "#/definitions/u16"
+                    allowed_hosts:
+                        type: array
+                        minItems: 4
+                        maxItems: 4
+                        items:
+                            $ref: "#/definitions/u8"
+                    allow_dkek_export_tisci:
+                        $ref: "#/definitions/u8"
+                    rsvd:
+                        type: array
+                        minItems: 3
+                        maxItems: 3
+                        items:
+                            $ref: "#/definitions/u8"
+
+            sa2ul_cfg:
+                type: object
+                properties:
+                    subhdr:
+                        type: object
+                        properties:
+                            magic:
+                                $ref: "#/definitions/u16"
+                            size:
+                                $ref: "#/definitions/u16"
+                    rsvd:
+                        type: array
+                        minItems: 4
+                        maxItems: 4
+                        items:
+                            $ref: "#/definitions/u8"
+            sec_dbg_config:
+                type: object
+                properties:
+                    subhdr:
+                        type: object
+                        properties:
+                            magic:
+                                $ref: "#/definitions/u16"
+                            size:
+                                $ref: "#/definitions/u16"
+                    allow_jtag_unlock:
+                        $ref: "#/definitions/u8"
+                    allow_wildcard_unlock:
+                        $ref: "#/definitions/u8"
+                    allowed_debug_level_rsvd:
+                        $ref: "#/definitions/u8"
+                    rsvd:
+                        $ref: "#/definitions/u8"
+                    min_cert_rev:
+                        $ref: "#/definitions/u32"
+                    jtag_unlock_hosts:
+                        type: array
+                        minItems: 4
+                        maxItems: 4
+                        items:
+                            $ref: "#/definitions/u8"
+
+
+            sec_handover_cfg:
+                type: object
+                properties:
+                    subhdr:
+                        type: object
+                        properties:
+                            magic:
+                                $ref: "#/definitions/u16"
+                            size:
+                                $ref: "#/definitions/u16"
+                    handover_msg_sender:
+                        $ref: "#/definitions/u8"
+                    handover_to_host_id:
+                        $ref: "#/definitions/u8"
+                    rsvd:
+                        type: array
+                        minItems: 4
+                        maxItems: 4
+                        items:
+                            $ref: "#/definitions/u8"
+
+    rm-cfg:
+        type: object
+        properties:
+            rm_boardcfg:
+                type: object
+                properties:
+                    rev:
+                        type: object
+                        properties:
+                            boardcfg_abi_maj:
+                                $ref: "#/definitions/u8"
+                            boardcfg_abi_min:
+                                $ref: "#/definitions/u8"
+
+                    host_cfg:
+                        type: object
+                        properties:
+                            subhdr:
+                                type: object
+                                properties:
+                                    magic:
+                                        $ref: "#/definitions/u16"
+                                    size:
+                                        $ref: "#/definitions/u16"
+                            host_cfg_entries:
+                                type: array
+                                minItems: 0
+                                maxItems: 32
+                                items:
+                                    type: object
+                                    properties:
+                                        host_id:
+                                            $ref: "#/definitions/u8"
+                                        allowed_atype:
+                                            $ref: "#/definitions/u8"
+                                        allowed_qos:
+                                            $ref: "#/definitions/u16"
+                                        allowed_orderid:
+                                            $ref: "#/definitions/u32"
+                                        allowed_priority:
+                                            $ref: "#/definitions/u16"
+                                        allowed_sched_priority:
+                                            $ref: "#/definitions/u8"
+                    resasg:
+                        type: object
+                        properties:
+                            subhdr:
+                                type: object
+                                properties:
+                                    magic:
+                                        $ref: "#/definitions/u16"
+                                    size:
+                                        $ref: "#/definitions/u16"
+                            resasg_entries_size:
+                                        $ref: "#/definitions/u16"
+                            reserved:
+                                        $ref: "#/definitions/u16"
+
+            resasg_entries:
+                type: array
+                minItems: 0
+                maxItems: 418
+                items:
+                    type: object
+                    properties:
+                        start_resource:
+                            $ref: "#/definitions/u16"
+                        num_resource:
+                            $ref: "#/definitions/u16"
+                        type:
+                            $ref: "#/definitions/u16"
+                        host_id:
+                            $ref: "#/definitions/u8"
+                        reserved:
+                            $ref: "#/definitions/u8"
diff --git a/board/ti/j721e/config.yaml b/board/ti/j721e/config.yaml
new file mode 100644
index 0000000000..710517404f
--- /dev/null
+++ b/board/ti/j721e/config.yaml
@@ -0,0 +1,3162 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
+#
+# Board configuration for J721E EVM
+#
+
+---
+
+pm-cfg:
+        rev:
+                boardcfg_abi_maj: 0x0
+                boardcfg_abi_min: 0x1
+
+board-cfg:
+        rev:
+                boardcfg_abi_maj: 0x0
+                boardcfg_abi_min: 0x1
+        control:
+                subhdr:
+                        magic: 0xC1D3
+                        size: 7
+                main_isolation_enable: 0x5A
+                main_isolation_hostid: 0x2
+        secproxy:
+                subhdr:
+                        magic: 0x1207
+                        size: 7
+                scaling_factor: 0x1
+                scaling_profile: 0x1
+                disable_main_nav_secure_proxy: 0
+        msmc:
+                subhdr:
+                        magic: 0xA5C3
+                        size: 5
+                msmc_cache_size: 0x0
+        debug_cfg:
+                subhdr:
+                        magic: 0x020C
+                        size: 8
+                trace_dst_enables: 0x00
+                trace_src_enables: 0x00
+
+sec-cfg:
+        rev:
+                boardcfg_abi_maj: 0x0
+                boardcfg_abi_min: 0x1
+        processor_acl_list:
+                subhdr:
+                        magic: 0xF1EA
+                        size: 164
+                proc_acl_entries:
+                        - #1
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #2
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #3
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #4
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #5
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #6
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #7
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #8
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #9
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #10
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #11
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #12
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #13
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #14
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #15
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #16
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #17
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #18
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #19
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #20
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #21
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #22
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #23
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #24
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #25
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #26
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #27
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #28
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #29
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #30
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #31
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+                        - #32
+                                processor_id: 0
+                                proc_access_master: 0
+                                proc_access_secondary: [0, 0, 0]
+
+        host_hierarchy:
+                subhdr:
+                        magic: 0x8D27
+                        size: 68
+                host_hierarchy_entries:
+                        - #1
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #2
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #3
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #4
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #5
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #6
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #7
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #8
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #9
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #10
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #11
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #12
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #13
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #14
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #15
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #16
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #17
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #18
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #19
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #20
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #21
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #22
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #23
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #24
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #25
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #26
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #27
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #28
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #29
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #30
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #31
+                                host_id: 0
+                                supervisor_host_id: 0
+                        - #32
+                                host_id: 0
+                                supervisor_host_id: 0
+        otp_config:
+                subhdr:
+                        magic: 0x4081
+                        size: 69
+                otp_entry:
+                        - #1
+                                host_id: 0
+                                host_perms: 0
+                        - #2
+                                host_id: 0
+                                host_perms: 0
+                        - #3
+                                host_id: 0
+                                host_perms: 0
+                        - #4
+                                host_id: 0
+                                host_perms: 0
+                        - #5
+                                host_id: 0
+                                host_perms: 0
+                        - #6
+                                host_id: 0
+                                host_perms: 0
+                        - #7
+                                host_id: 0
+                                host_perms: 0
+                        - #8
+                                host_id: 0
+                                host_perms: 0
+                        - #9
+                                host_id: 0
+                                host_perms: 0
+                        - #10
+                                host_id: 0
+                                host_perms: 0
+                        - #11
+                                host_id: 0
+                                host_perms: 0
+                        - #12
+                                host_id: 0
+                                host_perms: 0
+                        - #13
+                                host_id: 0
+                                host_perms: 0
+                        - #14
+                                host_id: 0
+                                host_perms: 0
+                        - #15
+                                host_id: 0
+                                host_perms: 0
+                        - #16
+                                host_id: 0
+                                host_perms: 0
+                        - #17
+                                host_id: 0
+                                host_perms: 0
+                        - #18
+                                host_id: 0
+                                host_perms: 0
+                        - #19
+                                host_id: 0
+                                host_perms: 0
+                        - #20
+                                host_id: 0
+                                host_perms: 0
+                        - #21
+                                host_id: 0
+                                host_perms: 0
+                        - #22
+                                host_id: 0
+                                host_perms: 0
+                        - #23
+                                host_id: 0
+                                host_perms: 0
+                        - #24
+                                host_id: 0
+                                host_perms: 0
+                        - #25
+                                host_id: 0
+                                host_perms: 0
+                        - #26
+                                host_id: 0
+                                host_perms: 0
+                        - #27
+                                host_id: 0
+                                host_perms: 0
+                        - #28
+                                host_id: 0
+                                host_perms: 0
+                        - #29
+                                host_id: 0
+                                host_perms: 0
+                        - #30
+                                host_id: 0
+                                host_perms: 0
+                        - #31
+                                host_id: 0
+                                host_perms: 0
+                        - #32
+                                host_id: 0
+                                host_perms: 0
+                write_host_id: 0
+        dkek_config:
+                subhdr:
+                        magic: 0x5170
+                        size: 12
+                allowed_hosts: [128, 0, 0, 0]
+                allow_dkek_export_tisci: 0x5A
+                rsvd: [0, 0, 0]
+        sa2ul_cfg:
+                subhdr:
+                        magic: 0x23BE
+                        size: 0
+                rsvd: [0, 0, 0, 0]
+        sec_dbg_config:
+                subhdr:
+                        magic: 0x42AF
+                        size: 16
+                allow_jtag_unlock: 0x5A
+                allow_wildcard_unlock: 0x5A
+                allowed_debug_level_rsvd: 0
+                rsvd: 0
+                min_cert_rev: 0x0
+                jtag_unlock_hosts: [0, 0, 0, 0]
+        sec_handover_cfg:
+                subhdr:
+                        magic: 0x608F
+                        size: 10
+                handover_msg_sender: 0
+                handover_to_host_id: 0
+                rsvd: [0, 0, 0, 0]
+
+rm-cfg:
+        rm_boardcfg:
+                rev:
+                        boardcfg_abi_maj: 0x0
+                        boardcfg_abi_min: 0x1
+                host_cfg:
+                        subhdr:
+                                magic: 0x4C41
+                                size: 356
+                        host_cfg_entries:
+                                - #1
+                                        host_id: 3
+                                        allowed_atype: 0x2A
+                                        allowed_qos: 0xAAAA
+                                        allowed_orderid: 0xAAAAAAAA
+                                        allowed_priority: 0xAAAA
+                                        allowed_sched_priority: 0xAA
+                                - #2
+                                        host_id: 5
+                                        allowed_atype: 0x2A
+                                        allowed_qos: 0xAAAA
+                                        allowed_orderid: 0xAAAAAAAA
+                                        allowed_priority: 0xAAAA
+                                        allowed_sched_priority: 0xAA
+                                - #3
+                                        host_id: 12
+                                        allowed_atype: 0x2A
+                                        allowed_qos: 0xAAAA
+                                        allowed_orderid: 0xAAAAAAAA
+                                        allowed_priority: 0xAAAA
+                                        allowed_sched_priority: 0xAA
+                                - #4
+                                        host_id: 13
+                                        allowed_atype: 0x2A
+                                        allowed_qos: 0xAAAA
+                                        allowed_orderid: 0xAAAAAAAA
+                                        allowed_priority: 0xAAAA
+                                        allowed_sched_priority: 0xAA
+                                - #5
+                                        host_id: 21
+                                        allowed_atype: 0x2A
+                                        allowed_qos: 0xAAAA
+                                        allowed_orderid: 0xAAAAAAAA
+                                        allowed_priority: 0xAAAA
+                                        allowed_sched_priority: 0xAA
+                                - #6
+                                        host_id: 26
+                                        allowed_atype: 0x2A
+                                        allowed_qos: 0xAAAA
+                                        allowed_orderid: 0xAAAAAAAA
+                                        allowed_priority: 0xAAAA
+                                        allowed_sched_priority: 0xAA
+                                - #7
+                                        host_id: 28
+                                        allowed_atype: 0x2A
+                                        allowed_qos: 0xAAAA
+                                        allowed_orderid: 0xAAAAAAAA
+                                        allowed_priority: 0xAAAA
+                                        allowed_sched_priority: 0xAA
+                                - #8
+                                        host_id: 35
+                                        allowed_atype: 0x2A
+                                        allowed_qos: 0xAAAA
+                                        allowed_orderid: 0xAAAAAAAA
+                                        allowed_priority: 0xAAAA
+                                        allowed_sched_priority: 0xAA
+                                - #9
+                                        host_id: 37
+                                        allowed_atype: 0x2A
+                                        allowed_qos: 0xAAAA
+                                        allowed_orderid: 0xAAAAAAAA
+                                        allowed_priority: 0xAAAA
+                                        allowed_sched_priority: 0xAA
+                                - #10
+                                        host_id: 40
+                                        allowed_atype: 0x2A
+                                        allowed_qos: 0xAAAA
+                                        allowed_orderid: 0xAAAAAAAA
+                                        allowed_priority: 0xAAAA
+                                        allowed_sched_priority: 0xAA
+                                - #11
+                                        host_id: 42
+                                        allowed_atype: 0x2A
+                                        allowed_qos: 0xAAAA
+                                        allowed_orderid: 0xAAAAAAAA
+                                        allowed_priority: 0xAAAA
+                                        allowed_sched_priority: 0xAA
+                                - #12
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #13
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #14
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #15
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #16
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #17
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #18
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #19
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #20
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #21
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #22
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #23
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #24
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #25
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #26
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #27
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #28
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #29
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #30
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #31
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                                - #32
+                                        host_id: 0
+                                        allowed_atype: 0
+                                        allowed_qos: 0
+                                        allowed_orderid: 0
+                                        allowed_priority: 0
+                                        allowed_sched_priority: 0
+                resasg:
+                        subhdr:
+                                magic: 0x7B25
+                                size: 8
+                        resasg_entries_size: 3344
+                        reserved: 0
+        resasg_entries:
+                -
+                        start_resource: 4
+                        num_resource: 93
+                        type: 7744
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 4
+                        num_resource: 93
+                        type: 7808
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 32
+                        type: 7872
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 32
+                        type: 8192
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 32
+                        num_resource: 32
+                        type: 8192
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 24
+                        type: 8320
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 24
+                        num_resource: 24
+                        type: 8320
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 8
+                        type: 8384
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 8
+                        type: 8384
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 16
+                        num_resource: 4
+                        type: 8384
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 20
+                        num_resource: 4
+                        type: 8384
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 24
+                        num_resource: 4
+                        type: 8384
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 28
+                        num_resource: 4
+                        type: 8384
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 32
+                        num_resource: 4
+                        type: 8384
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 36
+                        num_resource: 4
+                        type: 8384
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 40
+                        num_resource: 12
+                        type: 8384
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 52
+                        num_resource: 12
+                        type: 8384
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 128
+                        type: 8576
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 128
+                        num_resource: 128
+                        type: 8576
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 128
+                        type: 8640
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 128
+                        num_resource: 128
+                        type: 8640
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 48
+                        type: 8704
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 8
+                        type: 8768
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 8
+                        type: 8768
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 16
+                        num_resource: 6
+                        type: 8768
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 22
+                        num_resource: 6
+                        type: 8768
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 28
+                        num_resource: 2
+                        type: 8768
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 30
+                        num_resource: 2
+                        type: 8768
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 64
+                        type: 13258
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 20480
+                        num_resource: 1024
+                        type: 13261
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 64
+                        type: 13322
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 22528
+                        num_resource: 1024
+                        type: 13325
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 38
+                        num_resource: 86
+                        type: 13386
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 124
+                        num_resource: 32
+                        type: 13386
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 156
+                        num_resource: 12
+                        type: 13386
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 168
+                        num_resource: 12
+                        type: 13386
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 180
+                        num_resource: 12
+                        type: 13386
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 192
+                        num_resource: 12
+                        type: 13386
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 204
+                        num_resource: 12
+                        type: 13386
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 216
+                        num_resource: 28
+                        type: 13386
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 244
+                        num_resource: 8
+                        type: 13386
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 252
+                        num_resource: 4
+                        type: 13386
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 38
+                        num_resource: 1024
+                        type: 13389
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 1062
+                        num_resource: 512
+                        type: 13389
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 1574
+                        num_resource: 32
+                        type: 13389
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 1606
+                        num_resource: 32
+                        type: 13389
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 1638
+                        num_resource: 256
+                        type: 13389
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 1894
+                        num_resource: 256
+                        type: 13389
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 2150
+                        num_resource: 256
+                        type: 13389
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 2406
+                        num_resource: 256
+                        type: 13389
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 2662
+                        num_resource: 256
+                        type: 13389
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 2918
+                        num_resource: 512
+                        type: 13389
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 3430
+                        num_resource: 256
+                        type: 13389
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 3686
+                        num_resource: 922
+                        type: 13389
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 4
+                        type: 13440
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 4
+                        num_resource: 4
+                        type: 13440
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 4
+                        type: 13440
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 12
+                        num_resource: 4
+                        type: 13440
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 16
+                        num_resource: 4
+                        type: 13440
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 20
+                        num_resource: 4
+                        type: 13440
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 24
+                        num_resource: 4
+                        type: 13440
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 28
+                        num_resource: 4
+                        type: 13440
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 32
+                        num_resource: 4
+                        type: 13440
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 36
+                        num_resource: 12
+                        type: 13440
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 48
+                        num_resource: 4
+                        type: 13440
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 52
+                        num_resource: 12
+                        type: 13440
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 1
+                        type: 13504
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 440
+                        num_resource: 150
+                        type: 13505
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 590
+                        num_resource: 40
+                        type: 13505
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 630
+                        num_resource: 6
+                        type: 13505
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 636
+                        num_resource: 6
+                        type: 13505
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 642
+                        num_resource: 10
+                        type: 13505
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 652
+                        num_resource: 10
+                        type: 13505
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 662
+                        num_resource: 32
+                        type: 13505
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 694
+                        num_resource: 38
+                        type: 13505
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 732
+                        num_resource: 12
+                        type: 13505
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 744
+                        num_resource: 182
+                        type: 13505
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 926
+                        num_resource: 40
+                        type: 13505
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 966
+                        num_resource: 8
+                        type: 13505
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 316
+                        num_resource: 8
+                        type: 13506
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 324
+                        num_resource: 2
+                        type: 13506
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 324
+                        num_resource: 0
+                        type: 13506
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 326
+                        num_resource: 2
+                        type: 13506
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 328
+                        num_resource: 2
+                        type: 13506
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 330
+                        num_resource: 2
+                        type: 13506
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 332
+                        num_resource: 2
+                        type: 13506
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 334
+                        num_resource: 8
+                        type: 13506
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 342
+                        num_resource: 2
+                        type: 13506
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 344
+                        num_resource: 4
+                        type: 13506
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 348
+                        num_resource: 1
+                        type: 13506
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 349
+                        num_resource: 28
+                        type: 13506
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 377
+                        num_resource: 20
+                        type: 13506
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 397
+                        num_resource: 4
+                        type: 13506
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 401
+                        num_resource: 4
+                        type: 13506
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 405
+                        num_resource: 4
+                        type: 13506
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 409
+                        num_resource: 8
+                        type: 13506
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 417
+                        num_resource: 6
+                        type: 13506
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 423
+                        num_resource: 16
+                        type: 13506
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 439
+                        num_resource: 1
+                        type: 13506
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 16
+                        num_resource: 8
+                        type: 13507
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 24
+                        num_resource: 2
+                        type: 13507
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 24
+                        num_resource: 0
+                        type: 13507
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 26
+                        num_resource: 2
+                        type: 13507
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 28
+                        num_resource: 2
+                        type: 13507
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 30
+                        num_resource: 2
+                        type: 13507
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 32
+                        num_resource: 2
+                        type: 13507
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 34
+                        num_resource: 8
+                        type: 13507
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 42
+                        num_resource: 2
+                        type: 13507
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 44
+                        num_resource: 4
+                        type: 13507
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 48
+                        num_resource: 1
+                        type: 13507
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 49
+                        num_resource: 28
+                        type: 13507
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 77
+                        num_resource: 20
+                        type: 13507
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 97
+                        num_resource: 4
+                        type: 13507
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 101
+                        num_resource: 4
+                        type: 13507
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 105
+                        num_resource: 4
+                        type: 13507
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 109
+                        num_resource: 8
+                        type: 13507
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 117
+                        num_resource: 6
+                        type: 13507
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 123
+                        num_resource: 10
+                        type: 13507
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 133
+                        num_resource: 6
+                        type: 13507
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 139
+                        num_resource: 1
+                        type: 13507
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 140
+                        num_resource: 16
+                        type: 13508
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 156
+                        num_resource: 6
+                        type: 13508
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 162
+                        num_resource: 6
+                        type: 13508
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 168
+                        num_resource: 2
+                        type: 13508
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 170
+                        num_resource: 2
+                        type: 13508
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 172
+                        num_resource: 96
+                        type: 13508
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 268
+                        num_resource: 32
+                        type: 13508
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 304
+                        num_resource: 0
+                        type: 13509
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 304
+                        num_resource: 4
+                        type: 13509
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 304
+                        num_resource: 0
+                        type: 13509
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 308
+                        num_resource: 6
+                        type: 13509
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 314
+                        num_resource: 2
+                        type: 13509
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 300
+                        num_resource: 0
+                        type: 13510
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 300
+                        num_resource: 2
+                        type: 13510
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 300
+                        num_resource: 0
+                        type: 13510
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 302
+                        num_resource: 2
+                        type: 13510
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 4
+                        num_resource: 0
+                        type: 13511
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 4
+                        num_resource: 4
+                        type: 13511
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 4
+                        num_resource: 0
+                        type: 13511
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 6
+                        type: 13511
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 14
+                        num_resource: 2
+                        type: 13511
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 0
+                        type: 13512
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 2
+                        type: 13512
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 0
+                        type: 13512
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 2
+                        num_resource: 2
+                        type: 13512
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 2
+                        num_resource: 5
+                        type: 13514
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 7
+                        num_resource: 1
+                        type: 13514
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 3
+                        type: 13515
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 3
+                        num_resource: 2
+                        type: 13515
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 5
+                        num_resource: 1
+                        type: 13515
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 6
+                        num_resource: 1
+                        type: 13515
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 7
+                        num_resource: 3
+                        type: 13515
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 10
+                        num_resource: 3
+                        type: 13515
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 13
+                        num_resource: 3
+                        type: 13515
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 16
+                        num_resource: 3
+                        type: 13515
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 19
+                        num_resource: 3
+                        type: 13515
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 22
+                        num_resource: 6
+                        type: 13515
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 28
+                        num_resource: 3
+                        type: 13515
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 31
+                        num_resource: 1
+                        type: 13515
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 140
+                        num_resource: 16
+                        type: 13568
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 156
+                        num_resource: 16
+                        type: 13568
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 172
+                        num_resource: 128
+                        type: 13568
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 1
+                        type: 13569
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 49152
+                        num_resource: 1024
+                        type: 13570
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 1
+                        type: 13571
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 16
+                        num_resource: 8
+                        type: 13578
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 24
+                        num_resource: 2
+                        type: 13578
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 24
+                        num_resource: 0
+                        type: 13578
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 26
+                        num_resource: 2
+                        type: 13578
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 28
+                        num_resource: 2
+                        type: 13578
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 30
+                        num_resource: 2
+                        type: 13578
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 32
+                        num_resource: 2
+                        type: 13578
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 34
+                        num_resource: 8
+                        type: 13578
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 42
+                        num_resource: 2
+                        type: 13578
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 44
+                        num_resource: 4
+                        type: 13578
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 48
+                        num_resource: 1
+                        type: 13578
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 49
+                        num_resource: 28
+                        type: 13578
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 77
+                        num_resource: 20
+                        type: 13578
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 97
+                        num_resource: 4
+                        type: 13578
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 101
+                        num_resource: 4
+                        type: 13578
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 105
+                        num_resource: 4
+                        type: 13578
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 109
+                        num_resource: 8
+                        type: 13578
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 117
+                        num_resource: 6
+                        type: 13578
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 123
+                        num_resource: 16
+                        type: 13578
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 139
+                        num_resource: 1
+                        type: 13578
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 4
+                        num_resource: 0
+                        type: 13579
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 4
+                        num_resource: 4
+                        type: 13579
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 4
+                        num_resource: 0
+                        type: 13579
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 6
+                        type: 13579
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 14
+                        num_resource: 2
+                        type: 13579
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 0
+                        type: 13580
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 2
+                        type: 13580
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 0
+                        type: 13580
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 2
+                        num_resource: 2
+                        type: 13580
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 16
+                        num_resource: 8
+                        type: 13581
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 24
+                        num_resource: 2
+                        type: 13581
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 24
+                        num_resource: 0
+                        type: 13581
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 26
+                        num_resource: 2
+                        type: 13581
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 28
+                        num_resource: 2
+                        type: 13581
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 30
+                        num_resource: 2
+                        type: 13581
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 32
+                        num_resource: 2
+                        type: 13581
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 34
+                        num_resource: 8
+                        type: 13581
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 42
+                        num_resource: 2
+                        type: 13581
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 44
+                        num_resource: 4
+                        type: 13581
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 48
+                        num_resource: 1
+                        type: 13581
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 49
+                        num_resource: 28
+                        type: 13581
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 77
+                        num_resource: 20
+                        type: 13581
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 97
+                        num_resource: 4
+                        type: 13581
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 101
+                        num_resource: 4
+                        type: 13581
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 105
+                        num_resource: 4
+                        type: 13581
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 109
+                        num_resource: 8
+                        type: 13581
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 117
+                        num_resource: 6
+                        type: 13581
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 123
+                        num_resource: 10
+                        type: 13581
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 133
+                        num_resource: 6
+                        type: 13581
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 139
+                        num_resource: 1
+                        type: 13581
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 140
+                        num_resource: 16
+                        type: 13582
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 156
+                        num_resource: 6
+                        type: 13582
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 162
+                        num_resource: 6
+                        type: 13582
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 168
+                        num_resource: 2
+                        type: 13582
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 170
+                        num_resource: 2
+                        type: 13582
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 172
+                        num_resource: 96
+                        type: 13582
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 268
+                        num_resource: 32
+                        type: 13582
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 4
+                        num_resource: 0
+                        type: 13583
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 4
+                        num_resource: 4
+                        type: 13583
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 4
+                        num_resource: 0
+                        type: 13583
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 6
+                        type: 13583
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 14
+                        num_resource: 2
+                        type: 13583
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 0
+                        type: 13584
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 2
+                        type: 13584
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 0
+                        type: 13584
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 2
+                        num_resource: 2
+                        type: 13584
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 10
+                        num_resource: 100
+                        type: 13632
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 110
+                        num_resource: 32
+                        type: 13632
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 142
+                        num_resource: 46
+                        type: 13632
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 196
+                        num_resource: 28
+                        type: 13632
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 228
+                        num_resource: 28
+                        type: 13632
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 260
+                        num_resource: 28
+                        type: 13632
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 292
+                        num_resource: 28
+                        type: 13632
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 320
+                        num_resource: 24
+                        type: 13632
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 352
+                        num_resource: 24
+                        type: 13632
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 400
+                        num_resource: 4
+                        type: 13632
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 404
+                        num_resource: 4
+                        type: 13632
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 16
+                        num_resource: 32
+                        type: 14922
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 48
+                        num_resource: 16
+                        type: 14922
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 64
+                        num_resource: 64
+                        type: 14922
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 128
+                        num_resource: 4
+                        type: 14922
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 132
+                        num_resource: 16
+                        type: 14922
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 148
+                        num_resource: 16
+                        type: 14922
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 164
+                        num_resource: 8
+                        type: 14922
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 172
+                        num_resource: 8
+                        type: 14922
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 180
+                        num_resource: 8
+                        type: 14922
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 188
+                        num_resource: 24
+                        type: 14922
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 212
+                        num_resource: 8
+                        type: 14922
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 220
+                        num_resource: 36
+                        type: 14922
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 16400
+                        num_resource: 128
+                        type: 14925
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 16528
+                        num_resource: 128
+                        type: 14925
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 16656
+                        num_resource: 256
+                        type: 14925
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 16912
+                        num_resource: 64
+                        type: 14925
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 16976
+                        num_resource: 128
+                        type: 14925
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 17104
+                        num_resource: 128
+                        type: 14925
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 17232
+                        num_resource: 64
+                        type: 14925
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 17296
+                        num_resource: 64
+                        type: 14925
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 17360
+                        num_resource: 64
+                        type: 14925
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 17424
+                        num_resource: 128
+                        type: 14925
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 17552
+                        num_resource: 128
+                        type: 14925
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 17680
+                        num_resource: 240
+                        type: 14925
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 1
+                        num_resource: 4
+                        type: 14976
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 5
+                        num_resource: 4
+                        type: 14976
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 9
+                        num_resource: 4
+                        type: 14976
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 13
+                        num_resource: 4
+                        type: 14976
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 17
+                        num_resource: 4
+                        type: 14976
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 21
+                        num_resource: 4
+                        type: 14976
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 25
+                        num_resource: 4
+                        type: 14976
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 29
+                        num_resource: 4
+                        type: 14976
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 33
+                        num_resource: 4
+                        type: 14976
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 37
+                        num_resource: 16
+                        type: 14976
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 53
+                        num_resource: 4
+                        type: 14976
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 57
+                        num_resource: 7
+                        type: 14976
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 1
+                        type: 15040
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 96
+                        num_resource: 20
+                        type: 15041
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 116
+                        num_resource: 8
+                        type: 15041
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 124
+                        num_resource: 32
+                        type: 15041
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 156
+                        num_resource: 12
+                        type: 15041
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 168
+                        num_resource: 8
+                        type: 15041
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 176
+                        num_resource: 8
+                        type: 15041
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 184
+                        num_resource: 8
+                        type: 15041
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 192
+                        num_resource: 8
+                        type: 15041
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 200
+                        num_resource: 8
+                        type: 15041
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 208
+                        num_resource: 16
+                        type: 15041
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 224
+                        num_resource: 8
+                        type: 15041
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 232
+                        num_resource: 20
+                        type: 15041
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 50
+                        num_resource: 4
+                        type: 15042
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 54
+                        num_resource: 2
+                        type: 15042
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 54
+                        num_resource: 0
+                        type: 15042
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 56
+                        num_resource: 0
+                        type: 15042
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 56
+                        num_resource: 1
+                        type: 15042
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 57
+                        num_resource: 1
+                        type: 15042
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 58
+                        num_resource: 1
+                        type: 15042
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 59
+                        num_resource: 1
+                        type: 15042
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 60
+                        num_resource: 1
+                        type: 15042
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 61
+                        num_resource: 1
+                        type: 15042
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 62
+                        num_resource: 1
+                        type: 15042
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 63
+                        num_resource: 9
+                        type: 15042
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 72
+                        num_resource: 6
+                        type: 15042
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 78
+                        num_resource: 3
+                        type: 15042
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 81
+                        num_resource: 2
+                        type: 15042
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 83
+                        num_resource: 1
+                        type: 15042
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 84
+                        num_resource: 1
+                        type: 15042
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 85
+                        num_resource: 1
+                        type: 15042
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 86
+                        num_resource: 1
+                        type: 15042
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 87
+                        num_resource: 1
+                        type: 15042
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 88
+                        num_resource: 2
+                        type: 15042
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 90
+                        num_resource: 1
+                        type: 15042
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 91
+                        num_resource: 2
+                        type: 15042
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 2
+                        num_resource: 4
+                        type: 15043
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 6
+                        num_resource: 2
+                        type: 15043
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 6
+                        num_resource: 0
+                        type: 15043
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 0
+                        type: 15043
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 1
+                        type: 15043
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 9
+                        num_resource: 1
+                        type: 15043
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 10
+                        num_resource: 1
+                        type: 15043
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 11
+                        num_resource: 1
+                        type: 15043
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 12
+                        num_resource: 1
+                        type: 15043
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 13
+                        num_resource: 1
+                        type: 15043
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 14
+                        num_resource: 1
+                        type: 15043
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 15
+                        num_resource: 9
+                        type: 15043
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 24
+                        num_resource: 6
+                        type: 15043
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 30
+                        num_resource: 3
+                        type: 15043
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 33
+                        num_resource: 2
+                        type: 15043
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 35
+                        num_resource: 1
+                        type: 15043
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 36
+                        num_resource: 1
+                        type: 15043
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 37
+                        num_resource: 1
+                        type: 15043
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 38
+                        num_resource: 1
+                        type: 15043
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 39
+                        num_resource: 1
+                        type: 15043
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 40
+                        num_resource: 2
+                        type: 15043
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 42
+                        num_resource: 1
+                        type: 15043
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 43
+                        num_resource: 3
+                        type: 15043
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 48
+                        num_resource: 0
+                        type: 15045
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 48
+                        num_resource: 2
+                        type: 15045
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 0
+                        type: 15047
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 2
+                        type: 15047
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 2
+                        num_resource: 5
+                        type: 15050
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 7
+                        num_resource: 1
+                        type: 15050
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 3
+                        type: 15051
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 3
+                        num_resource: 2
+                        type: 15051
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 5
+                        num_resource: 3
+                        type: 15051
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 3
+                        type: 15051
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 11
+                        num_resource: 3
+                        type: 15051
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 14
+                        num_resource: 3
+                        type: 15051
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 17
+                        num_resource: 3
+                        type: 15051
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 20
+                        num_resource: 3
+                        type: 15051
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 23
+                        num_resource: 3
+                        type: 15051
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 26
+                        num_resource: 3
+                        type: 15051
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 29
+                        num_resource: 3
+                        type: 15051
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 48
+                        num_resource: 8
+                        type: 15104
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 56
+                        num_resource: 4
+                        type: 15104
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 60
+                        num_resource: 8
+                        type: 15104
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 68
+                        num_resource: 4
+                        type: 15104
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 72
+                        num_resource: 4
+                        type: 15104
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 76
+                        num_resource: 4
+                        type: 15104
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 80
+                        num_resource: 8
+                        type: 15104
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 88
+                        num_resource: 4
+                        type: 15104
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 92
+                        num_resource: 4
+                        type: 15104
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 1
+                        type: 15105
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 56320
+                        num_resource: 256
+                        type: 15106
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 1
+                        type: 15107
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 2
+                        num_resource: 4
+                        type: 15114
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 6
+                        num_resource: 2
+                        type: 15114
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 6
+                        num_resource: 0
+                        type: 15114
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 0
+                        type: 15114
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 1
+                        type: 15114
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 9
+                        num_resource: 1
+                        type: 15114
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 10
+                        num_resource: 1
+                        type: 15114
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 11
+                        num_resource: 1
+                        type: 15114
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 12
+                        num_resource: 1
+                        type: 15114
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 13
+                        num_resource: 1
+                        type: 15114
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 14
+                        num_resource: 1
+                        type: 15114
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 15
+                        num_resource: 9
+                        type: 15114
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 24
+                        num_resource: 6
+                        type: 15114
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 30
+                        num_resource: 3
+                        type: 15114
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 33
+                        num_resource: 2
+                        type: 15114
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 35
+                        num_resource: 1
+                        type: 15114
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 36
+                        num_resource: 1
+                        type: 15114
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 37
+                        num_resource: 1
+                        type: 15114
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 38
+                        num_resource: 1
+                        type: 15114
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 39
+                        num_resource: 1
+                        type: 15114
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 40
+                        num_resource: 2
+                        type: 15114
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 42
+                        num_resource: 1
+                        type: 15114
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 43
+                        num_resource: 2
+                        type: 15114
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 0
+                        type: 15115
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 2
+                        type: 15115
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 2
+                        num_resource: 4
+                        type: 15117
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 6
+                        num_resource: 2
+                        type: 15117
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 6
+                        num_resource: 0
+                        type: 15117
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 0
+                        type: 15117
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 8
+                        num_resource: 1
+                        type: 15117
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 9
+                        num_resource: 1
+                        type: 15117
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 10
+                        num_resource: 1
+                        type: 15117
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 11
+                        num_resource: 1
+                        type: 15117
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 12
+                        num_resource: 1
+                        type: 15117
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 13
+                        num_resource: 1
+                        type: 15117
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 14
+                        num_resource: 1
+                        type: 15117
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 15
+                        num_resource: 9
+                        type: 15117
+                        host_id: 12
+                        reserved: 0
+                -
+                        start_resource: 24
+                        num_resource: 6
+                        type: 15117
+                        host_id: 13
+                        reserved: 0
+                -
+                        start_resource: 30
+                        num_resource: 3
+                        type: 15117
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 33
+                        num_resource: 2
+                        type: 15117
+                        host_id: 5
+                        reserved: 0
+                -
+                        start_resource: 35
+                        num_resource: 1
+                        type: 15117
+                        host_id: 40
+                        reserved: 0
+                -
+                        start_resource: 36
+                        num_resource: 1
+                        type: 15117
+                        host_id: 42
+                        reserved: 0
+                -
+                        start_resource: 37
+                        num_resource: 1
+                        type: 15117
+                        host_id: 21
+                        reserved: 0
+                -
+                        start_resource: 38
+                        num_resource: 1
+                        type: 15117
+                        host_id: 26
+                        reserved: 0
+                -
+                        start_resource: 39
+                        num_resource: 1
+                        type: 15117
+                        host_id: 28
+                        reserved: 0
+                -
+                        start_resource: 40
+                        num_resource: 2
+                        type: 15117
+                        host_id: 35
+                        reserved: 0
+                -
+                        start_resource: 42
+                        num_resource: 1
+                        type: 15117
+                        host_id: 37
+                        reserved: 0
+                -
+                        start_resource: 43
+                        num_resource: 3
+                        type: 15117
+                        host_id: 128
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 0
+                        type: 15119
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 0
+                        num_resource: 2
+                        type: 15119
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 12
+                        num_resource: 20
+                        type: 15168
+                        host_id: 3
+                        reserved: 0
+                -
+                        start_resource: 36
+                        num_resource: 28
+                        type: 15168
+                        host_id: 5
+                        reserved: 0
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH RFC v3 02/11] ti: tools: config: Add board config class to generate config binaries
  2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
  2022-06-15  6:47 ` [PATCH RFC v3 01/11] j721e_evm: schema: yaml: Add general schema and J721E board config files Neha Malcom Francis
@ 2022-06-15  6:47 ` Neha Malcom Francis
  2022-07-01 19:07   ` Alper Nebi Yasak
  2022-06-15  6:47 ` [PATCH RFC v3 03/11] ti: etype: sysfw: Add entry type for sysfw Neha Malcom Francis
                   ` (9 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-15  6:47 UTC (permalink / raw)
  To: trini, alpernebiyasak, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

For validating config files and generating binary config artifacts, here
board specific config class is added.

Add function cfgBinaryGen() in tibcfg_gen.py. It uses TIBoardConfig
class to load given schema and config files in YAML, validate them and
generate binaries.

Signed-off-by: Tarun Sahu <t-sahu@ti.com>
[n-francis@ti.com: prepared patch for upstreaming]
Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
---
 test/py/requirements.txt |   1 +
 tools/tibcfg_gen.py      | 114 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 115 insertions(+)
 create mode 100644 tools/tibcfg_gen.py

diff --git a/test/py/requirements.txt b/test/py/requirements.txt
index 33c5c0bbc4..a91ba64563 100644
--- a/test/py/requirements.txt
+++ b/test/py/requirements.txt
@@ -4,6 +4,7 @@ coverage==4.5.4
 extras==1.0.0
 fixtures==3.0.0
 importlib-metadata==0.23
+jsonschema==4.0.0
 linecache2==1.0.0
 more-itertools==7.2.0
 packaging==19.2
diff --git a/tools/tibcfg_gen.py b/tools/tibcfg_gen.py
new file mode 100644
index 0000000000..e5fa2690c8
--- /dev/null
+++ b/tools/tibcfg_gen.py
@@ -0,0 +1,114 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
+#
+# TI Board Configuration Class for Schema Validation and Binary Generation
+#
+
+import os
+import getopt
+import sys
+
+import yaml
+
+from jsonschema import validate
+
+
+class TIBoardConfig:
+
+    """ Texas Instruments Board Configuration File"""
+
+    def __init__(self, file, schema, data_rules=""):
+        """Load a YAML configuration file and YAML schema
+
+        Validation of the config file against the schema is also done."""
+        with open(file, 'r') as f:
+            self.file_yaml = yaml.safe_load(f)
+        with open(schema, 'r') as sch:
+            self.schema_yaml = yaml.safe_load(sch)
+        self.data_rules = data_rules
+        try:
+            validate(self.file_yaml, self.schema_yaml)
+        except Exception as e:
+            print(e)
+
+    def _convert_to_byte_chunk(self, val, data_type):
+        """Convert value into byte array"""
+        size = 0
+        if(data_type == "#/definitions/u8"):
+            size = 1
+        elif(data_type == "#/definitions/u16"):
+            size = 2
+        elif(data_type == "#/definitions/u32"):
+            size = 4
+        else:
+            raise Exception("Data type not present in definitions")
+        if type(val) == int:
+            br = val.to_bytes(size, byteorder="little")
+        return br
+
+    def _compile_yaml(self, schema_yaml, file_yaml):
+        """Convert YAML file into byte array based on YAML schema"""
+        br = bytearray()
+        for key in file_yaml.keys():
+            node = file_yaml[key]
+            node_schema = schema_yaml['properties'][key]
+            node_type = node_schema.get('type')
+            if not 'type' in node_schema:
+                br += self._convert_to_byte_chunk(node,
+                                                  node_schema.get('$ref'))
+            elif node_type == 'object':
+                br += self._compile_yaml(node_schema, node)
+            elif node_type == 'array':
+                for item in node:
+                    if not isinstance(item, dict):
+                        br += self._convert_to_byte_chunk(
+                            item, schema_yaml['properties'][key]['items']["$ref"])
+                    else:
+                        br += self._compile_yaml(node_schema.get('items'), item)
+        return br
+
+    def generate_binaries(self, out_path=""):
+        """Generate config binary artifacts from the loaded YAML configuration file"""
+        if not os.path.isdir(out_path):
+            os.mkdir(out_path)
+        for key in self.file_yaml.keys():
+            node = self.file_yaml[key]
+            node_schema = self.schema_yaml['properties'][key]
+            br = self._compile_yaml(node_schema, node)
+            path = os.path.join(out_path, key + ".bin")
+            with open(path, 'wb') as cfg:
+                cfg.write(br)
+
+    def delete_binaries(self, out_path=""):
+        """Delete generated binaries"""
+        if os.path.isdir(out_path):
+            for key in self.file_yaml.keys():
+                path = os.path.join(out_path, key + ".bin")
+                if os.path.isfile(path):
+                    os.remove(path)
+
+
+def cfgBinaryGen():
+    """Generate config binaries from YAML config file and YAML schema
+        Arguments:
+            - config_yaml: board config file in YAML
+            - schema_yaml: schema file in YAML to validate config_yaml against
+            - output_dir: output directory where generated binaries can be populated
+    Pass the arguments along with the filename in the Makefile.
+    """
+    opts, args = getopt.getopt(sys.argv[1:], "c:s:o")
+    for opt, val in opts:
+        if opt == "-c":
+            config_yaml = val
+        elif opt == "-s":
+            schema_yaml = val
+        elif opt == "-o":
+            output_dir = os.path.abspath(val)
+    try:
+        tibcfg = TIBoardConfig(config_yaml, schema_yaml)
+        tibcfg.generate_binaries(output_dir)
+    except:
+        raise ValueError("Could not find config files!")
+
+
+cfgBinaryGen()
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH RFC v3 03/11] ti: etype: sysfw: Add entry type for sysfw
  2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
  2022-06-15  6:47 ` [PATCH RFC v3 01/11] j721e_evm: schema: yaml: Add general schema and J721E board config files Neha Malcom Francis
  2022-06-15  6:47 ` [PATCH RFC v3 02/11] ti: tools: config: Add board config class to generate config binaries Neha Malcom Francis
@ 2022-06-15  6:47 ` Neha Malcom Francis
  2022-06-15 15:37   ` Andrew Davis
  2022-07-01 19:07   ` Alper Nebi Yasak
  2022-06-15  6:47 ` [PATCH RFC v3 04/11] ti: etype: dm: Add entry type for TI DM Neha Malcom Francis
                   ` (8 subsequent siblings)
  11 siblings, 2 replies; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-15  6:47 UTC (permalink / raw)
  To: trini, alpernebiyasak, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

For K3 devices that require a sysfw image, add entry for SYSFW. It can
contain system firmware image that can be packaged into sysfw.itb by
binman.

Signed-off-by: Tarun Sahu <t-sahu@ti.com>
[n-francis@ti.com: added tests for addition of etype]
Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
---
 Makefile                           |  1 +
 tools/binman/entries.rst           | 11 +++++++++++
 tools/binman/etype/ti_sysfw.py     | 28 ++++++++++++++++++++++++++++
 tools/binman/ftest.py              |  7 +++++++
 tools/binman/test/232_ti_sysfw.dts | 13 +++++++++++++
 5 files changed, 60 insertions(+)
 create mode 100644 tools/binman/etype/ti_sysfw.py
 create mode 100644 tools/binman/test/232_ti_sysfw.dts

diff --git a/Makefile b/Makefile
index 61927f8918..d20d264c53 100644
--- a/Makefile
+++ b/Makefile
@@ -1345,6 +1345,7 @@ cmd_binman = $(srctree)/tools/binman/binman $(if $(BINMAN_DEBUG),-D) \
 		-a opensbi-path=${OPENSBI} \
 		-a default-dt=$(default_dt) \
 		-a scp-path=$(SCP) \
+		-a ti-sysfw-path=$(SYSFW) \
 		-a spl-bss-pad=$(if $(CONFIG_SPL_SEPARATE_BSS),,1) \
 		-a tpl-bss-pad=$(if $(CONFIG_TPL_SEPARATE_BSS),,1) \
 		-a spl-dtb=$(CONFIG_SPL_OF_REAL) \
diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst
index ae4305c99e..9fc5c48c35 100644
--- a/tools/binman/entries.rst
+++ b/tools/binman/entries.rst
@@ -1203,6 +1203,17 @@ This entry holds firmware for an external platform-specific coprocessor.
 
 
 
+Entry: ti-sysfw: Texas Instruments System Firmware (SYSFW) blob
+------------------------------------------------------------
+
+Properties / Entry arguments:
+    - ti-sysfw-path: Filename of file to read into the entry, typically sysfw.bin
+
+This entry contains system firmware necessary for booting of K3 architecture
+devices.
+
+
+
 Entry: section: Entry that contains other entries
 -------------------------------------------------
 
diff --git a/tools/binman/etype/ti_sysfw.py b/tools/binman/etype/ti_sysfw.py
new file mode 100644
index 0000000000..5b5b307030
--- /dev/null
+++ b/tools/binman/etype/ti_sysfw.py
@@ -0,0 +1,28 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
+#
+# Entry type module for TI SYSFW binary blob
+#
+
+import os
+import struct
+import sys
+import zlib
+
+from binman.etype.blob_named_by_arg import Entry_blob_named_by_arg
+from dtoc import fdt_util
+from patman import tools
+
+
+class Entry_ti_sysfw(Entry_blob_named_by_arg):
+    """Entry containing Texas Instruments System Firmware (SYSFW) blob
+
+    Properties / Entry arguments:
+        - ti-sysfw-path: Filename of file to read into the entry, typically sysfw.bin
+
+    This entry contains system firmware necessary for booting of K3 architecture devices.
+    """
+
+    def __init__(self, section, etype, node):
+        super().__init__(section, etype, node, 'ti-sysfw')
+        self.external = True
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index b5cf549703..671d083c54 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -87,6 +87,7 @@ ATF_BL31_DATA         = b'bl31'
 TEE_OS_DATA           = b'this is some tee OS data'
 ATF_BL2U_DATA         = b'bl2u'
 OPENSBI_DATA          = b'opensbi'
+TI_SYSFW_DATA         = b'sysfw'
 SCP_DATA              = b'scp'
 TEST_FDT1_DATA        = b'fdt1'
 TEST_FDT2_DATA        = b'test-fdt2'
@@ -195,6 +196,7 @@ class TestFunctional(unittest.TestCase):
         TestFunctional._MakeInputFile('tee-pager.bin', TEE_OS_DATA)
         TestFunctional._MakeInputFile('bl2u.bin', ATF_BL2U_DATA)
         TestFunctional._MakeInputFile('fw_dynamic.bin', OPENSBI_DATA)
+        TestFunctional._MakeInputFile('sysfw.bin', TI_SYSFW_DATA)
         TestFunctional._MakeInputFile('scp.bin', SCP_DATA)
 
         # Add a few .dtb files for testing
@@ -5529,6 +5531,11 @@ fdt         fdtmap                Extract the devicetree blob from the fdtmap
         """Test an image with a pre-load header with an invalid key"""
         with self.assertRaises(ValueError) as e:
             data = self._DoReadFile('231_pre_load_invalid_key.dts')
+    
+    def testPackTiSysfw(self):
+        """Test that an image with a SYSFW binary can be created"""
+        data = self._DoReadFile('232_ti_sysfw.dts')
+        self.assertEqual(TI_SYSFW_DATA, data[:len(TI_SYSFW_DATA)])
 
     def _CheckSafeUniqueNames(self, *images):
         """Check all entries of given images for unsafe unique names"""
diff --git a/tools/binman/test/232_ti_sysfw.dts b/tools/binman/test/232_ti_sysfw.dts
new file mode 100644
index 0000000000..9e66cbe77b
--- /dev/null
+++ b/tools/binman/test/232_ti_sysfw.dts
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/ {
+	#address-cells = <1>;
+	#size-cells = <1>;
+	binman {
+		ti-sysfw {
+			filename = "sysfw.bin";
+		};
+	};
+};
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH RFC v3 04/11] ti: etype: dm: Add entry type for TI DM
  2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
                   ` (2 preceding siblings ...)
  2022-06-15  6:47 ` [PATCH RFC v3 03/11] ti: etype: sysfw: Add entry type for sysfw Neha Malcom Francis
@ 2022-06-15  6:47 ` Neha Malcom Francis
  2022-07-01 19:07   ` Alper Nebi Yasak
  2022-06-15  6:47 ` [PATCH RFC v3 05/11] ti: etype: x509: Add etype for x509 certificate for K3 devices Neha Malcom Francis
                   ` (7 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-15  6:47 UTC (permalink / raw)
  To: trini, alpernebiyasak, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

K3 devices introduces the concept of centralized power, resource and
security management to System Firmware. This is to overcome challenges
by the traditional approach that implements system control functions on
each of the processing units.

The software interface for System Firmware is split into TIFS and DM. DM
(Device Manager) is responsible for resource and power management from
secure and non-secure hosts. This additional binary is necessary for
specific platforms' ROM boot images and is to be packaged into tispl.bin

Add an entry for DM. The entry can be used for the packaging of
tispl.bin by binman along with ATF and TEE.

Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
---
 Makefile                        |  1 +
 tools/binman/entries.rst        | 10 ++++++++++
 tools/binman/etype/ti_dm.py     | 23 +++++++++++++++++++++++
 tools/binman/ftest.py           |  7 +++++++
 tools/binman/test/225_ti_dm.dts | 13 +++++++++++++
 5 files changed, 54 insertions(+)
 create mode 100644 tools/binman/etype/ti_dm.py
 create mode 100644 tools/binman/test/225_ti_dm.dts

diff --git a/Makefile b/Makefile
index d20d264c53..9b29e8e6a2 100644
--- a/Makefile
+++ b/Makefile
@@ -1342,6 +1342,7 @@ cmd_binman = $(srctree)/tools/binman/binman $(if $(BINMAN_DEBUG),-D) \
 		$(foreach f,$(BINMAN_INDIRS),-I $(f)) \
 		-a atf-bl31-path=${BL31} \
 		-a tee-os-path=${TEE} \
+		-a ti-dm-path=${DM} \
 		-a opensbi-path=${OPENSBI} \
 		-a default-dt=$(default_dt) \
 		-a scp-path=$(SCP) \
diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst
index 9fc5c48c35..b6915ef12e 100644
--- a/tools/binman/entries.rst
+++ b/tools/binman/entries.rst
@@ -1214,6 +1214,16 @@ devices.
 
 
 
+Entry: ti-dm: Texas Instruments Device Manager (DM) blob
+-----------------------------------------------------------------
+
+Properties / Entry arguments:
+    - ti-dm-path: Filename of file to read into the entry, typically dm.bin
+
+This entry holds the device manager responsible for resource and power management in K3 devices.
+
+
+
 Entry: section: Entry that contains other entries
 -------------------------------------------------
 
diff --git a/tools/binman/etype/ti_dm.py b/tools/binman/etype/ti_dm.py
new file mode 100644
index 0000000000..4203fff36e
--- /dev/null
+++ b/tools/binman/etype/ti_dm.py
@@ -0,0 +1,23 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
+#
+# Entry type for TI Device Manager
+
+import os
+
+from binman.etype.blob_named_by_arg import Entry_blob_named_by_arg
+
+
+class Entry_ti_dm(Entry_blob_named_by_arg):
+    """Entry containing a Texas Instruments Device Manager (DM)
+
+    Properties / Entry arguments:
+        - ti-dm-path: Filename of file to read into the entry, typically dm.bin
+
+    This entry holds the device manager responsible for resource and power management
+    in K3 devices.
+    """
+
+    def __init__(self, section, etype, node):
+        super().__init__(section, etype, node, 'ti-dm')
+        self.external = True
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 671d083c54..3709b68297 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -85,6 +85,7 @@ FSP_S_DATA            = b'fsp_s'
 FSP_T_DATA            = b'fsp_t'
 ATF_BL31_DATA         = b'bl31'
 TEE_OS_DATA           = b'this is some tee OS data'
+TI_DM_DATA            = b'tidmtidm'
 ATF_BL2U_DATA         = b'bl2u'
 OPENSBI_DATA          = b'opensbi'
 TI_SYSFW_DATA         = b'sysfw'
@@ -194,6 +195,7 @@ class TestFunctional(unittest.TestCase):
         TestFunctional._MakeInputFile('compress_big', COMPRESS_DATA_BIG)
         TestFunctional._MakeInputFile('bl31.bin', ATF_BL31_DATA)
         TestFunctional._MakeInputFile('tee-pager.bin', TEE_OS_DATA)
+        TestFunctional._MakeInputFile('dm.bin', TI_DM_DATA)
         TestFunctional._MakeInputFile('bl2u.bin', ATF_BL2U_DATA)
         TestFunctional._MakeInputFile('fw_dynamic.bin', OPENSBI_DATA)
         TestFunctional._MakeInputFile('sysfw.bin', TI_SYSFW_DATA)
@@ -5307,6 +5309,11 @@ fdt         fdtmap                Extract the devicetree blob from the fdtmap
         data = self._DoReadFile('222_tee_os.dts')
         self.assertEqual(TEE_OS_DATA, data[:len(TEE_OS_DATA)])
 
+    def testPackTiDm(self):
+        """Test that an image with a TI DM binary can be created"""
+        data = self._DoReadFile('225_ti_dm.dts')
+        self.assertEqual(TI_DM_DATA, data[:len(TI_DM_DATA)])
+
     def testFitFdtOper(self):
         """Check handling of a specified FIT operation"""
         entry_args = {
diff --git a/tools/binman/test/225_ti_dm.dts b/tools/binman/test/225_ti_dm.dts
new file mode 100644
index 0000000000..3ab754131e
--- /dev/null
+++ b/tools/binman/test/225_ti_dm.dts
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/ {
+	#address-cells = <1>;
+	#size-cells = <1>;
+	binman {
+		ti-dm {
+			filename = "dm.bin";
+		};
+	};
+};
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH RFC v3 05/11] ti: etype: x509: Add etype for x509 certificate for K3 devices
  2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
                   ` (3 preceding siblings ...)
  2022-06-15  6:47 ` [PATCH RFC v3 04/11] ti: etype: dm: Add entry type for TI DM Neha Malcom Francis
@ 2022-06-15  6:47 ` Neha Malcom Francis
  2022-07-01 19:07   ` Alper Nebi Yasak
  2022-06-15  6:47 ` [PATCH RFC v3 06/11] ti: sysfw: Add support for packaging sysfw.itb Neha Malcom Francis
                   ` (6 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-15  6:47 UTC (permalink / raw)
  To: trini, alpernebiyasak, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

K3 devices requires x509 certificate to be added as header of bootloader
binaries that allows ROM to validate the integrity of the image. Etype
that generates a TI x509 certificate is added.

Currently this etype is scaled for J721E. For J721E, tiboot3.bin
requires the x509 certificate binary to be prepended to the R5 SPL.

Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
---
 test/py/requirements.txt            |   1 +
 tools/binman/entries.rst            |  15 ++
 tools/binman/etype/ti_x509_cert.py  | 241 ++++++++++++++++++++++++++++
 tools/binman/ftest.py               |   6 +
 tools/binman/test/232_x509_cert.dts |  18 +++
 5 files changed, 281 insertions(+)
 create mode 100644 tools/binman/etype/ti_x509_cert.py
 create mode 100644 tools/binman/test/232_x509_cert.dts

diff --git a/test/py/requirements.txt b/test/py/requirements.txt
index a91ba64563..add264bdaf 100644
--- a/test/py/requirements.txt
+++ b/test/py/requirements.txt
@@ -11,6 +11,7 @@ packaging==19.2
 pbr==5.4.3
 pluggy==0.13.0
 py==1.10.0
+pycryptodome==3.14.1
 pycryptodomex==3.9.8
 pyelftools==0.27
 pygit2==0.28.2
diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst
index b6915ef12e..e7757b3e06 100644
--- a/tools/binman/entries.rst
+++ b/tools/binman/entries.rst
@@ -1890,6 +1890,21 @@ and kernel are genuine.
 
 
 
+Entry: ti-x509-cert: Texas Instruments x509 certificate for K3 devices
+------------------------------------------------
+
+Properties / Entry arguments:
+        - content: Phandle of binary to sign
+        - output: Name of the final output file
+        - key_file: File with key inside it. If not provided, script generates RSA degenerate key
+        - core: Target core ID on which image would be running
+        - load: Target load address of the binary in hex
+
+    Output files:
+        - certificate.bin: Signed certificate binary
+
+
+
 Entry: x86-reset16: x86 16-bit reset code for U-Boot
 ----------------------------------------------------
 
diff --git a/tools/binman/etype/ti_x509_cert.py b/tools/binman/etype/ti_x509_cert.py
new file mode 100644
index 0000000000..b79946c0b9
--- /dev/null
+++ b/tools/binman/etype/ti_x509_cert.py
@@ -0,0 +1,241 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (c) 2018 Google, Inc
+# Written by Simon Glass <sjg@chromium.org>
+#
+
+# Support for a TI x509 certificate for signing K3 devices
+
+from subprocess import Popen, PIPE
+from sys import stderr, stdout
+import os
+import tempfile
+
+from Crypto.PublicKey import RSA
+
+from binman.etype.collection import Entry_collection
+from dtoc import fdt_util
+from patman import tools
+
+
+class Entry_ti_x509_cert(Entry_collection):
+    """An entry which contains an x509 certificate binary signed with 1024 bit RSA key
+
+    Properties / Entry arguments:
+        - content: Phandle of binary to generate signature for
+        - key_file: File with key inside it. If not provided, script generates RSA degenrate key
+        - core: Target core ID on which image would be running
+        - load: Target load address of the binary in hex
+
+    Output files:
+        - certificate.bin: Signed certificate binary"""
+
+    def __init__(self, section, etype, node):
+        super().__init__(section, etype, node)
+        self.key_file = fdt_util.GetString(self._node, 'key-file', "")
+        self.core = fdt_util.GetInt(self._node, 'core', 0)
+        self.load_addr = fdt_util.GetInt(self._node, 'load', 0x41c00000)
+        self.cert = fdt_util.GetString(self._node, 'cert', 'certificate.bin')
+
+        # temporary directory for intermediate files
+        self.outdir = tempfile.mkdtemp(prefix='binman.x509.')
+
+    def ReadNode(self):
+        super().ReadNode()
+        if self.key_file == "":
+            self.key_int_file = os.path.join(self.outdir, 'eckey.pem')
+            self.GenerateDegenKey()
+        else:
+            self.key_int_file = self.key_file
+
+    def ObtainContents(self):
+        self.image = self.GetContents(False)
+        if self.image is None:
+            return False
+        self.image_file = os.path.join(self.outdir, 'x509.image')
+        with open(self.image_file, 'wb') as f:
+            f.write(self.image)
+        self.cert_data = self._TICreateCertificateLegacy()
+        self.SetContents(self.cert_data)
+        return True
+
+    def ProcessContents(self):
+        # The blob may have changed due to WriteSymbols()
+        return super().ProcessContentsUpdate(self.cert_data)
+
+    def _TICreateCertificateLegacy(self):
+        """Create certificate for legacy boot flow"""
+
+        sha_val = self.GetShaVal(self.image_file)
+        bin_size = self.GetFileSize(self.image_file)
+        addr = "%08x" % self.load_addr
+        if self.core == 16:
+            self.cert_type = 1
+        else:
+            self.cert_type = 2
+        self.debug_type = 0
+        self.bootcore_opts = 0
+
+        self.GenerateTemplate()
+        self.GenerateCertificate(bin_size, sha_val, addr)
+
+        return tools.read_file(self.cert_file)
+
+    def GetShaVal(self, binary_file):
+        process = Popen(['openssl', 'dgst', '-sha512', '-hex',
+                         binary_file], stdout=PIPE, stderr=PIPE)
+        stdout, stderr = process.communicate()
+        sha_val = stdout.split()[1]
+        return sha_val
+
+    def GetFileSize(self, binary_file):
+        return os.path.getsize(binary_file)
+
+    def ParseKey(self, inp_key, section):
+        parsed_key = ""
+        section_true = False
+        with open(inp_key, 'r') as file:
+            for line in file:
+                if section in line:
+                    section_true = True
+                elif section_true:
+                    if "    " not in line:
+                        break
+                    else:
+                        parsed_key += line.replace(":", "").replace("    ", "")
+        return parsed_key.replace("\n", "")
+
+    def GenerateDegenKey(self):
+        """Generate a 4096 bit RSA key"""
+        # generates 1024 bit PEM encoded RSA key in PKCS#1 format
+        private_key = RSA.generate(1024)
+        self.key_pem_file = os.path.join(self.outdir, 'key.pem')
+        with open(self.key_pem_file, 'wb') as f:
+            f.write(private_key.exportKey('PEM'))
+
+        self.key_text_file = os.path.join(self.outdir, 'key.txt')
+        process = Popen(['openssl', 'rsa', '-in', self.key_pem_file,
+                         '-text', '-out', self.key_text_file], stdout=PIPE, stderr=PIPE)
+        stdout, stderr = process.communicate()
+
+        DEGEN_MODULUS = self.ParseKey(self.key_text_file, "modulus")
+        DEGEN_P = self.ParseKey(self.key_text_file, "prime1")
+        DEGEN_Q = self.ParseKey(self.key_text_file, "prime2")
+        DEGEN_COEFF = self.ParseKey(self.key_text_file, "coefficient")
+
+        self.GenerateDegenTemplate()
+
+        self.degen_key = os.path.join(self.outdir, 'x509.degenerateKey.txt')
+        with open(self.degen_temp_file, 'r') as file_input:
+            with open(self.degen_key, 'w') as file_output:
+                for line in file_input:
+                    s = line.replace("DEGEN_MODULUS", DEGEN_MODULUS).replace(
+                        "DEGEN_P", DEGEN_P).replace("DEGEN_Q", DEGEN_Q).replace("DEGEN_COEFF", DEGEN_COEFF)
+                    file_output.write(s)
+
+        self.degen_key_der = os.path.join(
+            self.outdir, 'x509.degenerateKey.der')
+        process = Popen(['openssl', 'asn1parse', '-genconf', self.degen_key,
+                         '-out', self.degen_key_der], stdout=PIPE, stderr=PIPE)
+        stdout, stderr = process.communicate()
+
+        process = Popen(['openssl', 'rsa', '-in', self.degen_key_der,
+                         '-inform', 'DER', '-outform', 'PEM', '-out', self.key_int_file])
+        stdout, stderr = process.communicate()
+
+    def GenerateCertificate(self, bin_size, sha_val, addr):
+        self.temp_x509 = os.path.join(self.outdir, 'x509.temp.cert')
+        self.cert_file = os.path.join(self.outdir, 'x509.certificate.bin')
+
+        temp_dict = {}
+        temp_dict['TEST_IMAGE_LENGTH'] = str(bin_size)
+        temp_dict['TEST_IMAGE_SHA_VAL'] = sha_val.decode("utf-8")
+        temp_dict['TEST_CERT_TYPE'] =  str(self.cert_type)
+        temp_dict['TEST_BOOT_CORE_OPTS'] = str(self.bootcore_opts)
+        temp_dict['TEST_BOOT_CORE'] = str(self.core)
+        temp_dict['TEST_BOOT_ADDR'] =  str(addr)
+        temp_dict['TEST_DEBUG_TYPE'] = str(self.debug_type)
+
+        with open(self.temp_x509, "w") as output_file:
+            with open(self.temp_file, "r") as input_file:
+                for line in input_file:
+                    l = line
+                    for key in temp_dict:
+                        if key in line:
+                            l = l.replace(key, temp_dict[key])
+                    output_file.write(l)
+
+        process = Popen(['openssl', 'req', '-new', '-x509', '-key', self.key_int_file, '-nodes', '-outform',
+                        'DER', '-out', self.cert_file, '-config', self.temp_x509, '-sha512'], stdout=PIPE, stderr=PIPE)
+        stdout, stderr = process.communicate()
+
+    def GenerateDegenTemplate(self):
+        self.degen_temp_file = os.path.join(self.outdir, 'x509.degen-template')
+        with open(self.degen_temp_file, 'w+', encoding='utf-8') as f:
+            degen_temp = """
+asn1=SEQUENCE:rsa_key
+
+[rsa_key]
+version=INTEGER:0
+modulus=INTEGER:0xDEGEN_MODULUS
+pubExp=INTEGER:1
+privExp=INTEGER:1
+p=INTEGER:0xDEGEN_P
+q=INTEGER:0xDEGEN_Q
+e1=INTEGER:1
+e2=INTEGER:1
+coeff=INTEGER:0xDEGEN_COEFF"""
+            f.write(degen_temp)
+
+    def GenerateTemplate(self):
+        self.temp_file = os.path.join(self.outdir, 'x509.template')
+        with open(self.temp_file, 'w+', encoding='utf-8') as f:
+            x509template = """
+[ req ]
+distinguished_name     = req_distinguished_name
+x509_extensions        = v3_ca
+prompt                 = no
+dirstring_type         = nobmp
+
+[ req_distinguished_name ]
+C                      = US
+ST                     = TX
+L                      = Dallas
+O                      = Texas Instruments Incorporated
+OU                     = Processors
+CN                     = TI support
+emailAddress           = support@ti.com
+
+[ v3_ca ]
+basicConstraints = CA:true
+1.3.6.1.4.1.294.1.1 = ASN1:SEQUENCE:boot_seq
+1.3.6.1.4.1.294.1.2 = ASN1:SEQUENCE:image_integrity
+1.3.6.1.4.1.294.1.3 = ASN1:SEQUENCE:swrv
+# 1.3.6.1.4.1.294.1.4 = ASN1:SEQUENCE:encryption
+1.3.6.1.4.1.294.1.8 = ASN1:SEQUENCE:debug
+
+[ boot_seq ]
+certType = INTEGER:TEST_CERT_TYPE
+bootCore = INTEGER:TEST_BOOT_CORE
+bootCoreOpts = INTEGER:TEST_BOOT_CORE_OPTS
+destAddr = FORMAT:HEX,OCT:TEST_BOOT_ADDR
+imageSize = INTEGER:TEST_IMAGE_LENGTH
+
+[ image_integrity ]
+shaType = OID:2.16.840.1.101.3.4.2.3
+shaValue = FORMAT:HEX,OCT:TEST_IMAGE_SHA_VAL
+
+[ swrv ]
+swrv = INTEGER:0
+
+# [ encryption ]
+# initalVector = FORMAT:HEX,OCT:TEST_IMAGE_ENC_IV
+# randomString = FORMAT:HEX,OCT:TEST_IMAGE_ENC_RS
+# iterationCnt = INTEGER:TEST_IMAGE_KEY_DERIVE_INDEX
+# salt = FORMAT:HEX,OCT:TEST_IMAGE_KEY_DERIVE_SALT
+
+[ debug ]
+debugUID = FORMAT:HEX,OCT:0000000000000000000000000000000000000000000000000000000000000000
+debugType = INTEGER:TEST_DEBUG_TYPE
+coreDbgEn = INTEGER:0
+coreDbgSecEn = INTEGER:0"""
+            f.write(x509template)
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 3709b68297..70bda9738c 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -96,6 +96,7 @@ ENV_DATA              = b'var1=1\nvar2="2"'
 PRE_LOAD_MAGIC        = b'UBSH'
 PRE_LOAD_VERSION      = 0x11223344.to_bytes(4, 'big')
 PRE_LOAD_HDR_SIZE     = 0x00001000.to_bytes(4, 'big')
+X509_DATA             = b'filetobesigned'
 
 # Subdirectory of the input dir to use to put test FDTs
 TEST_FDT_SUBDIR       = 'fdts'
@@ -200,6 +201,7 @@ class TestFunctional(unittest.TestCase):
         TestFunctional._MakeInputFile('fw_dynamic.bin', OPENSBI_DATA)
         TestFunctional._MakeInputFile('sysfw.bin', TI_SYSFW_DATA)
         TestFunctional._MakeInputFile('scp.bin', SCP_DATA)
+        TestFunctional._MakeInputFile('tosign.bin', X509_DATA)
 
         # Add a few .dtb files for testing
         TestFunctional._MakeInputFile('%s/test-fdt1.dtb' % TEST_FDT_SUBDIR,
@@ -5716,6 +5718,10 @@ fdt         fdtmap                Extract the devicetree blob from the fdtmap
             dts='234_replace_section_simple.dts')
         self.assertEqual(new_data, data)
 
+    def testX509Cert(self):
+        """Test an image with the default x509 certificate header"""
+        data = self._DoReadFile('232_x509_cert.dts')
+        self.assertGreater(len(data), len(X509_DATA))
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/tools/binman/test/232_x509_cert.dts b/tools/binman/test/232_x509_cert.dts
new file mode 100644
index 0000000000..3e68309de5
--- /dev/null
+++ b/tools/binman/test/232_x509_cert.dts
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/ {
+	#address-cells = <1>;
+	#size-cells = <1>;
+
+	binman {
+		ti-x509-cert {
+			content = <&image>;
+		};
+
+		image: blob-ext {
+			filename = "tosign.bin";
+		};
+	};
+};
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH RFC v3 06/11] ti: sysfw: Add support for packaging sysfw.itb
  2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
                   ` (4 preceding siblings ...)
  2022-06-15  6:47 ` [PATCH RFC v3 05/11] ti: etype: x509: Add etype for x509 certificate for K3 devices Neha Malcom Francis
@ 2022-06-15  6:47 ` Neha Malcom Francis
  2022-06-15  6:48 ` [PATCH RFC v3 07/11] ti: j721e: Exclude makefile tiboot3.bin target for J721E Neha Malcom Francis
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-15  6:47 UTC (permalink / raw)
  To: trini, alpernebiyasak, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

For devices that require sysfw.itb, board config binary artifacts must
be populated in the R5 output directory. These can be used by binman to
package sysfw.itb.

config.mk for mach-k3 updated to generate the required binaries using
tibcfg_gen.py.

Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
---
 arch/arm/mach-k3/config.mk | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/arch/arm/mach-k3/config.mk b/arch/arm/mach-k3/config.mk
index da458bcfb2..ed605adf39 100644
--- a/arch/arm/mach-k3/config.mk
+++ b/arch/arm/mach-k3/config.mk
@@ -28,6 +28,24 @@ else
 KEY=$(patsubst "%",$(srctree)/%,$(CONFIG_SYS_K3_KEY))
 endif
 
+# Board config binary artifacts necessary for packaging of tiboot3.bin
+# and sysfw.itb by binman, currently for general purpose devices and
+# devices that require sysfw.itb in ROM boot image. Currently set up
+# for J721E
+ifeq ($(CONFIG_TARGET_J721E_R5_EVM),y)
+ifneq ($(CONFIG_TI_SECURE_DEVICE),y)
+
+CONFIG_YAML = $(srctree)/board/ti/$(BOARD)/config.yaml
+SCHEMA_YAML = $(srctree)/board/ti/common/schema.yaml
+board-cfg.bin pm-cfg.bin rm-cfg.bin sec-cfg.bin:
+	$(PYTHON3) $(srctree)/tools/tibcfg_gen.py -c $(CONFIG_YAML) -s $(SCHEMA_YAML) -o $(O)
+INPUTS-y	+= board-cfg.bin
+INPUTS-y	+= pm-cfg.bin
+INPUTS-y	+= rm-cfg.bin
+INPUTS-y	+= sec-cfg.bin
+endif
+endif
+
 # tiboot3.bin is mandated by ROM and ROM only supports R5 boot.
 # So restrict tiboot3.bin creation for CPU_V7R.
 ifdef CONFIG_CPU_V7R
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH RFC v3 07/11] ti: j721e: Exclude makefile tiboot3.bin target for J721E
  2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
                   ` (5 preceding siblings ...)
  2022-06-15  6:47 ` [PATCH RFC v3 06/11] ti: sysfw: Add support for packaging sysfw.itb Neha Malcom Francis
@ 2022-06-15  6:48 ` Neha Malcom Francis
  2022-06-15  6:48 ` [PATCH RFC v3 08/11] ti: j721e: Exclude makefile tispl.bin " Neha Malcom Francis
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-15  6:48 UTC (permalink / raw)
  To: trini, alpernebiyasak, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

Intention of patch is to move the signing and packaging of tiboot3.bin
image for J721E to binman. So patch excludes tiboot3.bin target for
J721E.

The functionality of tools/k3_gen_x509_cert.sh has been replicated in
binman with the etype x509_cert. This can be used for J721E by binman.

Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
---
 arch/arm/mach-k3/config.mk | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm/mach-k3/config.mk b/arch/arm/mach-k3/config.mk
index ed605adf39..d706d17788 100644
--- a/arch/arm/mach-k3/config.mk
+++ b/arch/arm/mach-k3/config.mk
@@ -46,6 +46,7 @@ INPUTS-y	+= sec-cfg.bin
 endif
 endif
 
+ifneq ($(CONFIG_TARGET_J721E_R5_EVM), y)
 # tiboot3.bin is mandated by ROM and ROM only supports R5 boot.
 # So restrict tiboot3.bin creation for CPU_V7R.
 ifdef CONFIG_CPU_V7R
@@ -65,6 +66,8 @@ tiboot3.bin: image_check FORCE
 INPUTS-y	+= tiboot3.bin
 endif
 
+endif
+
 ifdef CONFIG_ARM64
 
 ifeq ($(CONFIG_SOC_K3_J721E),)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH RFC v3 08/11] ti: j721e: Exclude makefile tispl.bin target for J721E
  2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
                   ` (6 preceding siblings ...)
  2022-06-15  6:48 ` [PATCH RFC v3 07/11] ti: j721e: Exclude makefile tiboot3.bin target for J721E Neha Malcom Francis
@ 2022-06-15  6:48 ` Neha Malcom Francis
  2022-06-15 13:44   ` Roger Quadros
  2022-06-15  6:48 ` [PATCH RFC v3 09/11] ti: dtsi: j721e: Use binman to package sysfw.itb and tiboot3.bin Neha Malcom Francis
                   ` (3 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-15  6:48 UTC (permalink / raw)
  To: trini, alpernebiyasak, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

tispl.bin is to be packaged (with ATF, OPTEE, DM and A72 SPL) using
binman. The tispl.bin target from the makefile is no longer needed for
J721E.

Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
---
 arch/arm/mach-k3/config.mk | 5 +++++
 scripts/Makefile.spl       | 2 ++
 2 files changed, 7 insertions(+)

diff --git a/arch/arm/mach-k3/config.mk b/arch/arm/mach-k3/config.mk
index d706d17788..dd5e42d9df 100644
--- a/arch/arm/mach-k3/config.mk
+++ b/arch/arm/mach-k3/config.mk
@@ -74,6 +74,7 @@ ifeq ($(CONFIG_SOC_K3_J721E),)
 export DM := /dev/null
 endif
 
+ifndef CONFIG_TARGET_J721E_A72_EVM
 ifeq ($(CONFIG_TI_SECURE_DEVICE),y)
 SPL_ITS := u-boot-spl-k3_HS.its
 $(SPL_ITS): export IS_HS=1
@@ -98,9 +99,11 @@ cmd_k3_mkits = \
 $(SPL_ITS): FORCE
 	$(call cmd,k3_mkits)
 endif
+endif
 
 else
 
+ifndef CONFIG_TARGET_J721E_A72_EVM
 ifeq ($(CONFIG_TI_SECURE_DEVICE),y)
 INPUTS-y	+= u-boot.img_HS
 else
@@ -108,4 +111,6 @@ INPUTS-y	+= u-boot.img
 endif
 endif
 
+endif
+
 include $(srctree)/arch/arm/mach-k3/config_secure.mk
diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl
index f047d4e094..6104cb8587 100644
--- a/scripts/Makefile.spl
+++ b/scripts/Makefile.spl
@@ -591,6 +591,8 @@ $(obj)/$(SPL_BIN).multidtb.fit.lzo: $(obj)/$(SPL_BIN).multidtb.fit
 	@lzop -f9 $< > $@
 
 ifdef CONFIG_ARCH_K3
+ifndef CONFIG_TARGET_J721E_A72_EVM
 tispl.bin: $(obj)/u-boot-spl-nodtb.bin $(SHRUNK_ARCH_DTB) $(SPL_ITS) FORCE
 	$(call if_changed,mkfitimage)
 endif
+endif
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH RFC v3 09/11] ti: dtsi: j721e: Use binman to package sysfw.itb and tiboot3.bin
  2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
                   ` (7 preceding siblings ...)
  2022-06-15  6:48 ` [PATCH RFC v3 08/11] ti: j721e: Exclude makefile tispl.bin " Neha Malcom Francis
@ 2022-06-15  6:48 ` Neha Malcom Francis
  2022-07-01 19:07   ` Alper Nebi Yasak
  2022-06-15  6:48 ` [PATCH RFC v3 10/11] ti: dtsi: j721e: Use binman to package tispl.bin Neha Malcom Francis
                   ` (2 subsequent siblings)
  11 siblings, 1 reply; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-15  6:48 UTC (permalink / raw)
  To: trini, alpernebiyasak, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

By providing entries in the binman node of the device tree, binman will
be able to find and package board config binary artifacts generated by
TIBoardConfig with sysfw.bin and generate the final image sysfw.itb.

k3-j721e-r5-binman.dtsi has been introduced for R5 specific binman node.
It can be then be include by files that require it like
k3-j721e-r5-common-proc-board-u-boot.dtsi.

Signed-off-by: Tarun Sahu <t-sahu@ti.com>
[n-francis@ti.com: prepared patch for upstreaming]
Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
---
 arch/arm/dts/k3-j721e-r5-binman.dtsi          | 88 +++++++++++++++++++
 .../k3-j721e-r5-common-proc-board-u-boot.dtsi |  1 +
 board/ti/j721e/Kconfig                        |  1 +
 3 files changed, 90 insertions(+)
 create mode 100644 arch/arm/dts/k3-j721e-r5-binman.dtsi

diff --git a/arch/arm/dts/k3-j721e-r5-binman.dtsi b/arch/arm/dts/k3-j721e-r5-binman.dtsi
new file mode 100644
index 0000000000..e3aeefb08f
--- /dev/null
+++ b/arch/arm/dts/k3-j721e-r5-binman.dtsi
@@ -0,0 +1,88 @@
+// SPDX-License-Identifier: GPL-2.0+
+// Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
+
+#include <config.h>
+
+/ {
+	binman: binman {
+		multiple-images;
+	};
+};
+
+&binman {
+	tiboot3 {
+		filename = "tiboot3.bin";
+		ti-x509-cert {
+			content = <&image1>;
+			core = <16>;
+			load = <CONFIG_SPL_TEXT_BASE>;
+		};
+		image1: u-boot-spl {
+			no-expanded;
+		};
+	};
+	binary {
+		filename = "sysfw.bin";
+		ti-x509-cert {
+			content = <&image2>;
+			core = <0>;
+			load = <0x0040000>;
+		};
+		image2: ti-sysfw {
+		};
+	};
+	itb {
+		filename = "sysfw.itb";
+		fit {
+			description = "SYSFW and Config Fragments";
+			#address-cells = <1>;
+			images {
+				sysfw.bin {
+					description = "sysfw";
+					type = "firmware";
+					arch = "arm";
+					compression = "none";
+					blob {
+						filename = "sysfw.bin";
+					};
+				};
+				board-cfg.bin {
+					description = "board-cfg";
+					type = "firmware";
+					arch = "arm";
+					compression = "none";
+					blob-ext {
+						filename = "board-cfg.bin";
+					};
+				};
+				pm-cfg.bin {
+					description = "pm-cfg";
+					type = "firmware";
+					arch = "arm";
+					compression = "none";
+					blob-ext {
+						filename = "pm-cfg.bin";
+					};
+				};
+				rm-cfg.bin {
+					description = "rm-cfg";
+					type = "firmware";
+					arch = "arm";
+					compression = "none";
+					blob-ext {
+						filename = "rm-cfg.bin";
+					};
+				};
+				sec-cfg.bin {
+					description = "sec-cfg";
+					type = "firmware";
+					arch = "arm";
+					compression = "none";
+					blob-ext {
+						filename = "sec-cfg.bin";
+					};
+				};
+			};
+		};
+	};
+};
diff --git a/arch/arm/dts/k3-j721e-r5-common-proc-board-u-boot.dtsi b/arch/arm/dts/k3-j721e-r5-common-proc-board-u-boot.dtsi
index 48c6ddf672..75ec722e89 100644
--- a/arch/arm/dts/k3-j721e-r5-common-proc-board-u-boot.dtsi
+++ b/arch/arm/dts/k3-j721e-r5-common-proc-board-u-boot.dtsi
@@ -4,6 +4,7 @@
  */
 
 #include "k3-j721e-common-proc-board-u-boot.dtsi"
+#include "k3-j721e-r5-binman.dtsi"
 
 / {
 	chosen {
diff --git a/board/ti/j721e/Kconfig b/board/ti/j721e/Kconfig
index c28752a658..a3a9d504ae 100644
--- a/board/ti/j721e/Kconfig
+++ b/board/ti/j721e/Kconfig
@@ -24,6 +24,7 @@ config TARGET_J721E_R5_EVM
 	select RAM
 	select SPL_RAM
 	select K3_DDRSS
+	select BINMAN
 	imply SYS_K3_SPL_ATF
 	imply TI_I2C_BOARD_DETECT
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH RFC v3 10/11] ti: dtsi: j721e: Use binman to package tispl.bin
  2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
                   ` (8 preceding siblings ...)
  2022-06-15  6:48 ` [PATCH RFC v3 09/11] ti: dtsi: j721e: Use binman to package sysfw.itb and tiboot3.bin Neha Malcom Francis
@ 2022-06-15  6:48 ` Neha Malcom Francis
  2022-06-15 14:25   ` Roger Quadros
                     ` (2 more replies)
  2022-06-15  6:48 ` [PATCH RFC v3 11/11] ci: world_build: test: Add requirements.txt Neha Malcom Francis
  2022-07-01 19:07 ` [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Alper Nebi Yasak
  11 siblings, 3 replies; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-15  6:48 UTC (permalink / raw)
  To: trini, alpernebiyasak, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

tispl.bin must be packaged (with ATF, OPTEE, DM and A72 SPL) for J721E.
Binman picks up and packages entries according to the
description given in the device tree.

k3-j721e-a72-binman.dtsi has been introduced for A72 specific binman
node. It is included by k3-j721e-common-proc-board-u-boot.dtsi

Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
---
 arch/arm/dts/k3-j721e-a72-binman.dtsi         | 86 +++++++++++++++++++
 .../k3-j721e-common-proc-board-u-boot.dtsi    |  1 +
 board/ti/j721e/Kconfig                        |  1 +
 3 files changed, 88 insertions(+)
 create mode 100644 arch/arm/dts/k3-j721e-a72-binman.dtsi

diff --git a/arch/arm/dts/k3-j721e-a72-binman.dtsi b/arch/arm/dts/k3-j721e-a72-binman.dtsi
new file mode 100644
index 0000000000..beb3424bb9
--- /dev/null
+++ b/arch/arm/dts/k3-j721e-a72-binman.dtsi
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: GPL-2.0+
+// Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
+
+#include <config.h>
+
+#ifdef CONFIG_ARM64
+/ {
+	binman: binman {
+		multiple-images;
+	};
+};
+
+&binman {
+	tispl {
+		filename = "tispl.bin";
+		fit {
+			description = "FIT IMAGE";
+			#address-cells = <1>;
+			images {
+				atf {
+					description = "ARM Trusted Firmware";
+					type = "firmware";
+					arch = "arm64";
+					compression = "none";
+					os = "arm-trusted-firmware";
+					load = <CONFIG_K3_ATF_LOAD_ADDR>;
+					entry = <CONFIG_K3_ATF_LOAD_ADDR>;
+					atf-bl31 {
+					};
+				};
+				tee {
+					description = "OPTEE";
+					type = "tee";
+					arch = "arm64";
+					compression = "none";
+					os = "tee";
+					load = <0x9e800000>;
+					entry = <0x9e800000>;
+					tee-os {
+					};
+				};
+				dm {
+					description = "DM binary";
+					type = "firmware";
+					arch = "arm32";
+					compression = "none";
+					os = "DM";
+					load = <0x89000000>;
+					entry = <0x89000000>;
+					ti-dm {
+					};
+				};
+				spl {
+					description = "SPL (64-bit)";
+					type = "standalone";
+					os = "U-Boot";
+					arch = "arm64";
+					compression = "none";
+					load = <CONFIG_SPL_TEXT_BASE>;
+					entry = <CONFIG_SPL_TEXT_BASE>;
+					u-boot-spl-nodtb {
+					};
+				};
+				k3-j721e-common-proc-board.dtb {
+					description = "k3-j721e-common-proc-board";
+					type = "flat_dt";
+					arch = "arm";
+					compression = "none";
+					blob-ext {
+					filename = "spl/dts/k3-j721e-common-proc-board.dtb";
+					};
+				};
+			};
+			configurations {
+				default = "conf";
+				conf {
+					description = "k3-j721e-common-proc-board";
+					firmware = "atf";
+					loadables = "tee", "dm", "spl";
+					fdt = "k3-j721e-common-proc-board.dtb";
+				};
+			};
+		};
+	};
+};
+#endif
diff --git a/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi b/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi
index 677a72d2a2..6490d71f7e 100644
--- a/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi
+++ b/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi
@@ -4,6 +4,7 @@
  */
 
 #include <dt-bindings/net/ti-dp83867.h>
+#include "k3-j721e-a72-binman.dtsi"
 
 / {
 	chosen {
diff --git a/board/ti/j721e/Kconfig b/board/ti/j721e/Kconfig
index a3a9d504ae..3cf05f0d3b 100644
--- a/board/ti/j721e/Kconfig
+++ b/board/ti/j721e/Kconfig
@@ -14,6 +14,7 @@ config TARGET_J721E_A72_EVM
 	select BOARD_LATE_INIT
 	imply TI_I2C_BOARD_DETECT
 	select SYS_DISABLE_DCACHE_OPS
+	select BINMAN
 
 config TARGET_J721E_R5_EVM
 	bool "TI K3 based J721E EVM running on R5"
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH RFC v3 11/11] ci: world_build: test: Add requirements.txt
  2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
                   ` (9 preceding siblings ...)
  2022-06-15  6:48 ` [PATCH RFC v3 10/11] ti: dtsi: j721e: Use binman to package tispl.bin Neha Malcom Francis
@ 2022-06-15  6:48 ` Neha Malcom Francis
  2022-07-01 19:09   ` Alper Nebi Yasak
  2022-07-01 19:07 ` [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Alper Nebi Yasak
  11 siblings, 1 reply; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-15  6:48 UTC (permalink / raw)
  To: trini, alpernebiyasak, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

To avoid ModuleNotFoundErrors during World Build in CI tests, add
installation of test/py/requirements.txt to .azure-pipelines.yml

Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
---
 .azure-pipelines.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml
index ad540ea635..0fd57f59f4 100644
--- a/.azure-pipelines.yml
+++ b/.azure-pipelines.yml
@@ -551,6 +551,7 @@ stages:
           EOF
           cat << "EOF" >> build.sh
           if [[ "${BUILDMAN}" != "" ]]; then
+              pip install -r test/py/requirements.txt
               ret=0;
               tools/buildman/buildman -o /tmp -P -E -W ${BUILDMAN} ${OVERRIDE} || ret=$?;
               if [[ $ret -ne 0 ]]; then
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 08/11] ti: j721e: Exclude makefile tispl.bin target for J721E
  2022-06-15  6:48 ` [PATCH RFC v3 08/11] ti: j721e: Exclude makefile tispl.bin " Neha Malcom Francis
@ 2022-06-15 13:44   ` Roger Quadros
  2022-06-16 11:09     ` Neha Malcom Francis
  0 siblings, 1 reply; 26+ messages in thread
From: Roger Quadros @ 2022-06-15 13:44 UTC (permalink / raw)
  To: Neha Malcom Francis, trini, alpernebiyasak, a-govindraju, vigneshr
  Cc: u-boot, afd

Hi Neha,

On 15/06/2022 09:48, Neha Malcom Francis wrote:
> tispl.bin is to be packaged (with ATF, OPTEE, DM and A72 SPL) using
> binman. The tispl.bin target from the makefile is no longer needed for
> J721E.
> 
> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
> ---
>  arch/arm/mach-k3/config.mk | 5 +++++
>  scripts/Makefile.spl       | 2 ++
>  2 files changed, 7 insertions(+)
> 
> diff --git a/arch/arm/mach-k3/config.mk b/arch/arm/mach-k3/config.mk
> index d706d17788..dd5e42d9df 100644
> --- a/arch/arm/mach-k3/config.mk
> +++ b/arch/arm/mach-k3/config.mk
> @@ -74,6 +74,7 @@ ifeq ($(CONFIG_SOC_K3_J721E),)
>  export DM := /dev/null
>  endif
>  
> +ifndef CONFIG_TARGET_J721E_A72_EVM

How about using #ifndef CONFIG_BINMAN instead? Any platform enabling that
doesn't want to use the old way.

You are still breaking HS functionality with this series correct?
That will have to be fixed.

One proposal was discussed here
https://lore.kernel.org/all/76474ded-a782-f491-eac6-ece3c5f4a7da@gmail.com/
 
We should be able to produce tispl.bin_HS and u-boot.img_HS via binman.

You have already covered most of the x509 stuff image in ti-x509-cert etype.
Please refer to below script [1] to know what is required to get _HS images.

[1] https://git.ti.com/cgit/security-development-tools/core-secdev-k3/tree/scripts/secure-binary-image.sh

>  ifeq ($(CONFIG_TI_SECURE_DEVICE),y)
>  SPL_ITS := u-boot-spl-k3_HS.its
>  $(SPL_ITS): export IS_HS=1
> @@ -98,9 +99,11 @@ cmd_k3_mkits = \
>  $(SPL_ITS): FORCE
>  	$(call cmd,k3_mkits)
>  endif
> +endif
>  
>  else
>  
> +ifndef CONFIG_TARGET_J721E_A72_EVM
>  ifeq ($(CONFIG_TI_SECURE_DEVICE),y)
>  INPUTS-y	+= u-boot.img_HS
>  else
> @@ -108,4 +111,6 @@ INPUTS-y	+= u-boot.img
>  endif
>  endif
>  
> +endif
> +

You will have to enclose below line in #ifndef CONFIG_BINMAN as well.

>  include $(srctree)/arch/arm/mach-k3/config_secure.mk
> diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl
> index f047d4e094..6104cb8587 100644
> --- a/scripts/Makefile.spl
> +++ b/scripts/Makefile.spl
> @@ -591,6 +591,8 @@ $(obj)/$(SPL_BIN).multidtb.fit.lzo: $(obj)/$(SPL_BIN).multidtb.fit
>  	@lzop -f9 $< > $@
>  
>  ifdef CONFIG_ARCH_K3
> +ifndef CONFIG_TARGET_J721E_A72_EVM

Is this still being called in-spite of the changes to config.mk?
Please use CONFIG_BINMAN instead of CONFIG_TARGET_J721E_A72_EVM

>  tispl.bin: $(obj)/u-boot-spl-nodtb.bin $(SHRUNK_ARCH_DTB) $(SPL_ITS) FORCE
>  	$(call if_changed,mkfitimage)
>  endif
> +endif

cheers,
-roger

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 10/11] ti: dtsi: j721e: Use binman to package tispl.bin
  2022-06-15  6:48 ` [PATCH RFC v3 10/11] ti: dtsi: j721e: Use binman to package tispl.bin Neha Malcom Francis
@ 2022-06-15 14:25   ` Roger Quadros
  2022-06-15 14:29   ` Roger Quadros
  2022-07-01 19:08   ` Alper Nebi Yasak
  2 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2022-06-15 14:25 UTC (permalink / raw)
  To: Neha Malcom Francis, trini, alpernebiyasak, a-govindraju, vigneshr
  Cc: u-boot, afd

Neha,

On 15/06/2022 09:48, Neha Malcom Francis wrote:
> tispl.bin must be packaged (with ATF, OPTEE, DM and A72 SPL) for J721E.
> Binman picks up and packages entries according to the
> description given in the device tree.
> 
> k3-j721e-a72-binman.dtsi has been introduced for A72 specific binman
> node. It is included by k3-j721e-common-proc-board-u-boot.dtsi
> 
> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
> ---
>  arch/arm/dts/k3-j721e-a72-binman.dtsi         | 86 +++++++++++++++++++
>  .../k3-j721e-common-proc-board-u-boot.dtsi    |  1 +
>  board/ti/j721e/Kconfig                        |  1 +
>  3 files changed, 88 insertions(+)
>  create mode 100644 arch/arm/dts/k3-j721e-a72-binman.dtsi
> 
> diff --git a/arch/arm/dts/k3-j721e-a72-binman.dtsi b/arch/arm/dts/k3-j721e-a72-binman.dtsi
> new file mode 100644
> index 0000000000..beb3424bb9
> --- /dev/null
> +++ b/arch/arm/dts/k3-j721e-a72-binman.dtsi

Will this file be used for all j721e-a72 boards or only common processor board?
It should be named accordingly.

You might as well combine the separate r5 and a72 binman files into one file.
You can use CONFIG_TARGET_J721E_R5_EVM and CONFIG_TARGET_J721E_A72_EVM
to selectively enable the required entries.

So, k3-j721e-common-proc-board-binman.dtsi?

> @@ -0,0 +1,86 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +// Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
> +
> +#include <config.h>
> +
> +#ifdef CONFIG_ARM64

> +/ {
> +	binman: binman {
> +		multiple-images;
> +	};
> +};
> +

#ifdef CONFIG_TARGET_J721E_A72_EVM

> +&binman {
> +	tispl {
> +		filename = "tispl.bin";
> +		fit {
> +			description = "FIT IMAGE";

This used to be "Configuration to load ATF and SPL", let's retain the description.

> +			#address-cells = <1>;
> +			images {
> +				atf {
> +					description = "ARM Trusted Firmware";
> +					type = "firmware";
> +					arch = "arm64";
> +					compression = "none";
> +					os = "arm-trusted-firmware";
> +					load = <CONFIG_K3_ATF_LOAD_ADDR>;
> +					entry = <CONFIG_K3_ATF_LOAD_ADDR>;
> +					atf-bl31 {
> +					};
> +				};
> +				tee {
> +					description = "OPTEE";
> +					type = "tee";
> +					arch = "arm64";
> +					compression = "none";
> +					os = "tee";
> +					load = <0x9e800000>;
> +					entry = <0x9e800000>;
> +					tee-os {
> +					};
> +				};
> +				dm {
> +					description = "DM binary";
> +					type = "firmware";
> +					arch = "arm32";
> +					compression = "none";
> +					os = "DM";
> +					load = <0x89000000>;
> +					entry = <0x89000000>;
> +					ti-dm {
> +					};
> +				};
> +				spl {
> +					description = "SPL (64-bit)";
> +					type = "standalone";
> +					os = "U-Boot";
> +					arch = "arm64";
> +					compression = "none";
> +					load = <CONFIG_SPL_TEXT_BASE>;
> +					entry = <CONFIG_SPL_TEXT_BASE>;
> +					u-boot-spl-nodtb {
> +					};
> +				};
> +				k3-j721e-common-proc-board.dtb {
> +					description = "k3-j721e-common-proc-board";
> +					type = "flat_dt";
> +					arch = "arm";
> +					compression = "none";
> +					blob-ext {
> +					filename = "spl/dts/k3-j721e-common-proc-board.dtb";
> +					};
> +				};
> +			};
> +			configurations {
> +				default = "conf";

"conf-1"?
more confs can be added later

> +				conf {
> +					description = "k3-j721e-common-proc-board";
> +					firmware = "atf";
> +					loadables = "tee", "dm", "spl";
> +					fdt = "k3-j721e-common-proc-board.dtb";
> +				};
> +			};
> +		};
> +	};
> +};
> +#endif

what about u-boot.img?

you need a binman entry for that else it won't be generated right?

> diff --git a/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi b/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi
> index 677a72d2a2..6490d71f7e 100644
> --- a/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi
> +++ b/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi
> @@ -4,6 +4,7 @@
>   */
>  
>  #include <dt-bindings/net/ti-dp83867.h>
> +#include "k3-j721e-a72-binman.dtsi"
>  
>  / {
>  	chosen {
> diff --git a/board/ti/j721e/Kconfig b/board/ti/j721e/Kconfig
> index a3a9d504ae..3cf05f0d3b 100644
> --- a/board/ti/j721e/Kconfig
> +++ b/board/ti/j721e/Kconfig
> @@ -14,6 +14,7 @@ config TARGET_J721E_A72_EVM
>  	select BOARD_LATE_INIT
>  	imply TI_I2C_BOARD_DETECT
>  	select SYS_DISABLE_DCACHE_OPS
> +	select BINMAN
>  
>  config TARGET_J721E_R5_EVM
>  	bool "TI K3 based J721E EVM running on R5"

cheers,
-roger

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 10/11] ti: dtsi: j721e: Use binman to package tispl.bin
  2022-06-15  6:48 ` [PATCH RFC v3 10/11] ti: dtsi: j721e: Use binman to package tispl.bin Neha Malcom Francis
  2022-06-15 14:25   ` Roger Quadros
@ 2022-06-15 14:29   ` Roger Quadros
  2022-07-01 19:08   ` Alper Nebi Yasak
  2 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2022-06-15 14:29 UTC (permalink / raw)
  To: Neha Malcom Francis, trini, alpernebiyasak, a-govindraju, vigneshr
  Cc: u-boot, afd



On 15/06/2022 09:48, Neha Malcom Francis wrote:
> tispl.bin must be packaged (with ATF, OPTEE, DM and A72 SPL) for J721E.
> Binman picks up and packages entries according to the
> description given in the device tree.
> 
> k3-j721e-a72-binman.dtsi has been introduced for A72 specific binman
> node. It is included by k3-j721e-common-proc-board-u-boot.dtsi
> 
> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
> ---
>  arch/arm/dts/k3-j721e-a72-binman.dtsi         | 86 +++++++++++++++++++
>  .../k3-j721e-common-proc-board-u-boot.dtsi    |  1 +
>  board/ti/j721e/Kconfig                        |  1 +
>  3 files changed, 88 insertions(+)
>  create mode 100644 arch/arm/dts/k3-j721e-a72-binman.dtsi
> 
> diff --git a/arch/arm/dts/k3-j721e-a72-binman.dtsi b/arch/arm/dts/k3-j721e-a72-binman.dtsi
> new file mode 100644
> index 0000000000..beb3424bb9
> --- /dev/null
> +++ b/arch/arm/dts/k3-j721e-a72-binman.dtsi
> @@ -0,0 +1,86 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +// Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
> +
> +#include <config.h>
> +
> +#ifdef CONFIG_ARM64
> +/ {
> +	binman: binman {
> +		multiple-images;
> +	};
> +};
> +
> +&binman {
> +	tispl {
> +		filename = "tispl.bin";
> +		fit {
> +			description = "FIT IMAGE";
> +			#address-cells = <1>;
> +			images {
> +				atf {
> +					description = "ARM Trusted Firmware";
> +					type = "firmware";
> +					arch = "arm64";
> +					compression = "none";
> +					os = "arm-trusted-firmware";
> +					load = <CONFIG_K3_ATF_LOAD_ADDR>;
> +					entry = <CONFIG_K3_ATF_LOAD_ADDR>;
> +					atf-bl31 {
> +					};
> +				};
> +				tee {
> +					description = "OPTEE";
> +					type = "tee";
> +					arch = "arm64";
> +					compression = "none";
> +					os = "tee";
> +					load = <0x9e800000>;
> +					entry = <0x9e800000>;
> +					tee-os {
> +					};
> +				};
> +				dm {
> +					description = "DM binary";
> +					type = "firmware";
> +					arch = "arm32";
> +					compression = "none";
> +					os = "DM";
> +					load = <0x89000000>;
> +					entry = <0x89000000>;
> +					ti-dm {
> +					};
> +				};
> +				spl {
> +					description = "SPL (64-bit)";
> +					type = "standalone";
> +					os = "U-Boot";
> +					arch = "arm64";
> +					compression = "none";
> +					load = <CONFIG_SPL_TEXT_BASE>;
> +					entry = <CONFIG_SPL_TEXT_BASE>;
> +					u-boot-spl-nodtb {
> +					};
> +				};
> +				k3-j721e-common-proc-board.dtb {

how about fdt-1 for node name?

> +					description = "k3-j721e-common-proc-board";
> +					type = "flat_dt";
> +					arch = "arm";
> +					compression = "none";
> +					blob-ext {
> +					filename = "spl/dts/k3-j721e-common-proc-board.dtb";
> +					};
> +				};
> +			};
> +			configurations {
> +				default = "conf";
> +				conf {
> +					description = "k3-j721e-common-proc-board";
> +					firmware = "atf";
> +					loadables = "tee", "dm", "spl";
> +					fdt = "k3-j721e-common-proc-board.dtb";
> +				};
> +			};
> +		};
> +	};
> +};
> +#endif
> diff --git a/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi b/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi
> index 677a72d2a2..6490d71f7e 100644
> --- a/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi
> +++ b/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi
> @@ -4,6 +4,7 @@
>   */
>  
>  #include <dt-bindings/net/ti-dp83867.h>
> +#include "k3-j721e-a72-binman.dtsi"
>  
>  / {
>  	chosen {
> diff --git a/board/ti/j721e/Kconfig b/board/ti/j721e/Kconfig
> index a3a9d504ae..3cf05f0d3b 100644
> --- a/board/ti/j721e/Kconfig
> +++ b/board/ti/j721e/Kconfig
> @@ -14,6 +14,7 @@ config TARGET_J721E_A72_EVM
>  	select BOARD_LATE_INIT
>  	imply TI_I2C_BOARD_DETECT
>  	select SYS_DISABLE_DCACHE_OPS
> +	select BINMAN
>  
>  config TARGET_J721E_R5_EVM
>  	bool "TI K3 based J721E EVM running on R5"

cheers,
-roger

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 03/11] ti: etype: sysfw: Add entry type for sysfw
  2022-06-15  6:47 ` [PATCH RFC v3 03/11] ti: etype: sysfw: Add entry type for sysfw Neha Malcom Francis
@ 2022-06-15 15:37   ` Andrew Davis
  2022-06-16 11:23     ` Neha Malcom Francis
  2022-07-01 19:07   ` Alper Nebi Yasak
  1 sibling, 1 reply; 26+ messages in thread
From: Andrew Davis @ 2022-06-15 15:37 UTC (permalink / raw)
  To: Neha Malcom Francis, trini, alpernebiyasak, rogerq, a-govindraju,
	vigneshr
  Cc: u-boot

On 6/15/22 1:47 AM, Neha Malcom Francis wrote:
> For K3 devices that require a sysfw image, add entry for SYSFW. It can
> contain system firmware image that can be packaged into sysfw.itb by
> binman.
> 


HS devices do this very differently, even an RFC without HS support
doesn't make much sense, this all has to change when you add HS.
Please start with that.

Andrew


> Signed-off-by: Tarun Sahu <t-sahu@ti.com>
> [n-francis@ti.com: added tests for addition of etype]
> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
> ---
>   Makefile                           |  1 +
>   tools/binman/entries.rst           | 11 +++++++++++
>   tools/binman/etype/ti_sysfw.py     | 28 ++++++++++++++++++++++++++++
>   tools/binman/ftest.py              |  7 +++++++
>   tools/binman/test/232_ti_sysfw.dts | 13 +++++++++++++
>   5 files changed, 60 insertions(+)
>   create mode 100644 tools/binman/etype/ti_sysfw.py
>   create mode 100644 tools/binman/test/232_ti_sysfw.dts
> 
> diff --git a/Makefile b/Makefile
> index 61927f8918..d20d264c53 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1345,6 +1345,7 @@ cmd_binman = $(srctree)/tools/binman/binman $(if $(BINMAN_DEBUG),-D) \
>   		-a opensbi-path=${OPENSBI} \
>   		-a default-dt=$(default_dt) \
>   		-a scp-path=$(SCP) \
> +		-a ti-sysfw-path=$(SYSFW) \
>   		-a spl-bss-pad=$(if $(CONFIG_SPL_SEPARATE_BSS),,1) \
>   		-a tpl-bss-pad=$(if $(CONFIG_TPL_SEPARATE_BSS),,1) \
>   		-a spl-dtb=$(CONFIG_SPL_OF_REAL) \
> diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst
> index ae4305c99e..9fc5c48c35 100644
> --- a/tools/binman/entries.rst
> +++ b/tools/binman/entries.rst
> @@ -1203,6 +1203,17 @@ This entry holds firmware for an external platform-specific coprocessor.
>   
>   
>   
> +Entry: ti-sysfw: Texas Instruments System Firmware (SYSFW) blob
> +------------------------------------------------------------
> +
> +Properties / Entry arguments:
> +    - ti-sysfw-path: Filename of file to read into the entry, typically sysfw.bin
> +
> +This entry contains system firmware necessary for booting of K3 architecture
> +devices.
> +
> +
> +
>   Entry: section: Entry that contains other entries
>   -------------------------------------------------
>   
> diff --git a/tools/binman/etype/ti_sysfw.py b/tools/binman/etype/ti_sysfw.py
> new file mode 100644
> index 0000000000..5b5b307030
> --- /dev/null
> +++ b/tools/binman/etype/ti_sysfw.py
> @@ -0,0 +1,28 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +# Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
> +#
> +# Entry type module for TI SYSFW binary blob
> +#
> +
> +import os
> +import struct
> +import sys
> +import zlib
> +
> +from binman.etype.blob_named_by_arg import Entry_blob_named_by_arg
> +from dtoc import fdt_util
> +from patman import tools
> +
> +
> +class Entry_ti_sysfw(Entry_blob_named_by_arg):
> +    """Entry containing Texas Instruments System Firmware (SYSFW) blob
> +
> +    Properties / Entry arguments:
> +        - ti-sysfw-path: Filename of file to read into the entry, typically sysfw.bin
> +
> +    This entry contains system firmware necessary for booting of K3 architecture devices.
> +    """
> +
> +    def __init__(self, section, etype, node):
> +        super().__init__(section, etype, node, 'ti-sysfw')
> +        self.external = True
> diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
> index b5cf549703..671d083c54 100644
> --- a/tools/binman/ftest.py
> +++ b/tools/binman/ftest.py
> @@ -87,6 +87,7 @@ ATF_BL31_DATA         = b'bl31'
>   TEE_OS_DATA           = b'this is some tee OS data'
>   ATF_BL2U_DATA         = b'bl2u'
>   OPENSBI_DATA          = b'opensbi'
> +TI_SYSFW_DATA         = b'sysfw'
>   SCP_DATA              = b'scp'
>   TEST_FDT1_DATA        = b'fdt1'
>   TEST_FDT2_DATA        = b'test-fdt2'
> @@ -195,6 +196,7 @@ class TestFunctional(unittest.TestCase):
>           TestFunctional._MakeInputFile('tee-pager.bin', TEE_OS_DATA)
>           TestFunctional._MakeInputFile('bl2u.bin', ATF_BL2U_DATA)
>           TestFunctional._MakeInputFile('fw_dynamic.bin', OPENSBI_DATA)
> +        TestFunctional._MakeInputFile('sysfw.bin', TI_SYSFW_DATA)
>           TestFunctional._MakeInputFile('scp.bin', SCP_DATA)
>   
>           # Add a few .dtb files for testing
> @@ -5529,6 +5531,11 @@ fdt         fdtmap                Extract the devicetree blob from the fdtmap
>           """Test an image with a pre-load header with an invalid key"""
>           with self.assertRaises(ValueError) as e:
>               data = self._DoReadFile('231_pre_load_invalid_key.dts')
> +
> +    def testPackTiSysfw(self):
> +        """Test that an image with a SYSFW binary can be created"""
> +        data = self._DoReadFile('232_ti_sysfw.dts')
> +        self.assertEqual(TI_SYSFW_DATA, data[:len(TI_SYSFW_DATA)])
>   
>       def _CheckSafeUniqueNames(self, *images):
>           """Check all entries of given images for unsafe unique names"""
> diff --git a/tools/binman/test/232_ti_sysfw.dts b/tools/binman/test/232_ti_sysfw.dts
> new file mode 100644
> index 0000000000..9e66cbe77b
> --- /dev/null
> +++ b/tools/binman/test/232_ti_sysfw.dts
> @@ -0,0 +1,13 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +
> +/dts-v1/;
> +
> +/ {
> +	#address-cells = <1>;
> +	#size-cells = <1>;
> +	binman {
> +		ti-sysfw {
> +			filename = "sysfw.bin";
> +		};
> +	};
> +};

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 08/11] ti: j721e: Exclude makefile tispl.bin target for J721E
  2022-06-15 13:44   ` Roger Quadros
@ 2022-06-16 11:09     ` Neha Malcom Francis
  0 siblings, 0 replies; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-16 11:09 UTC (permalink / raw)
  To: Roger Quadros, trini, alpernebiyasak, a-govindraju, vigneshr; +Cc: u-boot, afd

Hi Roger,

On 15/06/22 19:14, Roger Quadros wrote:
> Hi Neha,
> 
> On 15/06/2022 09:48, Neha Malcom Francis wrote:
>> tispl.bin is to be packaged (with ATF, OPTEE, DM and A72 SPL) using
>> binman. The tispl.bin target from the makefile is no longer needed for
>> J721E.
>>
>> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
>> ---
>>   arch/arm/mach-k3/config.mk | 5 +++++
>>   scripts/Makefile.spl       | 2 ++
>>   2 files changed, 7 insertions(+)
>>
>> diff --git a/arch/arm/mach-k3/config.mk b/arch/arm/mach-k3/config.mk
>> index d706d17788..dd5e42d9df 100644
>> --- a/arch/arm/mach-k3/config.mk
>> +++ b/arch/arm/mach-k3/config.mk
>> @@ -74,6 +74,7 @@ ifeq ($(CONFIG_SOC_K3_J721E),)
>>   export DM := /dev/null
>>   endif
>>   
>> +ifndef CONFIG_TARGET_J721E_A72_EVM
> 
> How about using #ifndef CONFIG_BINMAN instead? Any platform enabling that
> doesn't want to use the old way.
> 
> You are still breaking HS functionality with this series correct?
> That will have to be fixed.
> 
> One proposal was discussed here
> https://lore.kernel.org/all/76474ded-a782-f491-eac6-ece3c5f4a7da@gmail.com/
>   
> We should be able to produce tispl.bin_HS and u-boot.img_HS via binman.
> 
> You have already covered most of the x509 stuff image in ti-x509-cert etype.
> Please refer to below script [1] to know what is required to get _HS images.
> 
> [1] https://git.ti.com/cgit/security-development-tools/core-secdev-k3/tree/scripts/secure-binary-image.sh
> 

Yes, this patch was intended for GP only but like Andrew said, will have 
to do HS as well.
I'll build on this patch for HS devices.

>>   ifeq ($(CONFIG_TI_SECURE_DEVICE),y)
>>   SPL_ITS := u-boot-spl-k3_HS.its
>>   $(SPL_ITS): export IS_HS=1
>> @@ -98,9 +99,11 @@ cmd_k3_mkits = \
>>   $(SPL_ITS): FORCE
>>   	$(call cmd,k3_mkits)
>>   endif
>> +endif
>>   
>>   else
>>   
>> +ifndef CONFIG_TARGET_J721E_A72_EVM
>>   ifeq ($(CONFIG_TI_SECURE_DEVICE),y)
>>   INPUTS-y	+= u-boot.img_HS
>>   else
>> @@ -108,4 +111,6 @@ INPUTS-y	+= u-boot.img
>>   endif
>>   endif
>>   
>> +endif
>> +
> 
> You will have to enclose below line in #ifndef CONFIG_BINMAN as well.
> 
Will make the changes.

>>   include $(srctree)/arch/arm/mach-k3/config_secure.mk
>> diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl
>> index f047d4e094..6104cb8587 100644
>> --- a/scripts/Makefile.spl
>> +++ b/scripts/Makefile.spl
>> @@ -591,6 +591,8 @@ $(obj)/$(SPL_BIN).multidtb.fit.lzo: $(obj)/$(SPL_BIN).multidtb.fit
>>   	@lzop -f9 $< > $@
>>   
>>   ifdef CONFIG_ARCH_K3
>> +ifndef CONFIG_TARGET_J721E_A72_EVM
> 
> Is this still being called in-spite of the changes to config.mk?
> Please use CONFIG_BINMAN instead of CONFIG_TARGET_J721E_A72_EVM

I will make the changes.

> 
>>   tispl.bin: $(obj)/u-boot-spl-nodtb.bin $(SHRUNK_ARCH_DTB) $(SPL_ITS) FORCE
>>   	$(call if_changed,mkfitimage)
>>   endif
>> +endif
> 
> cheers,
> -roger

-- 
Thanking You
Neha Malcom Francis

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 03/11] ti: etype: sysfw: Add entry type for sysfw
  2022-06-15 15:37   ` Andrew Davis
@ 2022-06-16 11:23     ` Neha Malcom Francis
  0 siblings, 0 replies; 26+ messages in thread
From: Neha Malcom Francis @ 2022-06-16 11:23 UTC (permalink / raw)
  To: Andrew Davis, trini, alpernebiyasak, rogerq, a-govindraju, vigneshr
  Cc: u-boot

Hi Andrew,

On 15/06/22 21:07, Andrew Davis wrote:
> On 6/15/22 1:47 AM, Neha Malcom Francis wrote:
>> For K3 devices that require a sysfw image, add entry for SYSFW. It can
>> contain system firmware image that can be packaged into sysfw.itb by
>> binman.
>>
> 
> 
> HS devices do this very differently, even an RFC without HS support
> doesn't make much sense, this all has to change when you add HS.
> Please start with that.
> 
> Andrew
> 

Will incorporate the HS changes and introduce the next patch.

> 
>> Signed-off-by: Tarun Sahu <t-sahu@ti.com>
>> [n-francis@ti.com: added tests for addition of etype]
>> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
>> ---
>>   Makefile                           |  1 +
>>   tools/binman/entries.rst           | 11 +++++++++++
>>   tools/binman/etype/ti_sysfw.py     | 28 ++++++++++++++++++++++++++++
>>   tools/binman/ftest.py              |  7 +++++++
>>   tools/binman/test/232_ti_sysfw.dts | 13 +++++++++++++
>>   5 files changed, 60 insertions(+)
>>   create mode 100644 tools/binman/etype/ti_sysfw.py
>>   create mode 100644 tools/binman/test/232_ti_sysfw.dts
>>
>> diff --git a/Makefile b/Makefile
>> index 61927f8918..d20d264c53 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -1345,6 +1345,7 @@ cmd_binman = $(srctree)/tools/binman/binman $(if 
>> $(BINMAN_DEBUG),-D) \
>>           -a opensbi-path=${OPENSBI} \
>>           -a default-dt=$(default_dt) \
>>           -a scp-path=$(SCP) \
>> +        -a ti-sysfw-path=$(SYSFW) \
>>           -a spl-bss-pad=$(if $(CONFIG_SPL_SEPARATE_BSS),,1) \
>>           -a tpl-bss-pad=$(if $(CONFIG_TPL_SEPARATE_BSS),,1) \
>>           -a spl-dtb=$(CONFIG_SPL_OF_REAL) \
>> diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst
>> index ae4305c99e..9fc5c48c35 100644
>> --- a/tools/binman/entries.rst
>> +++ b/tools/binman/entries.rst
>> @@ -1203,6 +1203,17 @@ This entry holds firmware for an external 
>> platform-specific coprocessor.
>> +Entry: ti-sysfw: Texas Instruments System Firmware (SYSFW) blob
>> +------------------------------------------------------------
>> +
>> +Properties / Entry arguments:
>> +    - ti-sysfw-path: Filename of file to read into the entry, 
>> typically sysfw.bin
>> +
>> +This entry contains system firmware necessary for booting of K3 
>> architecture
>> +devices.
>> +
>> +
>> +
>>   Entry: section: Entry that contains other entries
>>   -------------------------------------------------
>> diff --git a/tools/binman/etype/ti_sysfw.py 
>> b/tools/binman/etype/ti_sysfw.py
>> new file mode 100644
>> index 0000000000..5b5b307030
>> --- /dev/null
>> +++ b/tools/binman/etype/ti_sysfw.py
>> @@ -0,0 +1,28 @@
>> +# SPDX-License-Identifier: GPL-2.0+
>> +# Copyright (C) 2022 Texas Instruments Incorporated - 
>> https://www.ti.com/
>> +#
>> +# Entry type module for TI SYSFW binary blob
>> +#
>> +
>> +import os
>> +import struct
>> +import sys
>> +import zlib
>> +
>> +from binman.etype.blob_named_by_arg import Entry_blob_named_by_arg
>> +from dtoc import fdt_util
>> +from patman import tools
>> +
>> +
>> +class Entry_ti_sysfw(Entry_blob_named_by_arg):
>> +    """Entry containing Texas Instruments System Firmware (SYSFW) blob
>> +
>> +    Properties / Entry arguments:
>> +        - ti-sysfw-path: Filename of file to read into the entry, 
>> typically sysfw.bin
>> +
>> +    This entry contains system firmware necessary for booting of K3 
>> architecture devices.
>> +    """
>> +
>> +    def __init__(self, section, etype, node):
>> +        super().__init__(section, etype, node, 'ti-sysfw')
>> +        self.external = True
>> diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
>> index b5cf549703..671d083c54 100644
>> --- a/tools/binman/ftest.py
>> +++ b/tools/binman/ftest.py
>> @@ -87,6 +87,7 @@ ATF_BL31_DATA         = b'bl31'
>>   TEE_OS_DATA           = b'this is some tee OS data'
>>   ATF_BL2U_DATA         = b'bl2u'
>>   OPENSBI_DATA          = b'opensbi'
>> +TI_SYSFW_DATA         = b'sysfw'
>>   SCP_DATA              = b'scp'
>>   TEST_FDT1_DATA        = b'fdt1'
>>   TEST_FDT2_DATA        = b'test-fdt2'
>> @@ -195,6 +196,7 @@ class TestFunctional(unittest.TestCase):
>>           TestFunctional._MakeInputFile('tee-pager.bin', TEE_OS_DATA)
>>           TestFunctional._MakeInputFile('bl2u.bin', ATF_BL2U_DATA)
>>           TestFunctional._MakeInputFile('fw_dynamic.bin', OPENSBI_DATA)
>> +        TestFunctional._MakeInputFile('sysfw.bin', TI_SYSFW_DATA)
>>           TestFunctional._MakeInputFile('scp.bin', SCP_DATA)
>>           # Add a few .dtb files for testing
>> @@ -5529,6 +5531,11 @@ fdt         fdtmap                Extract the 
>> devicetree blob from the fdtmap
>>           """Test an image with a pre-load header with an invalid key"""
>>           with self.assertRaises(ValueError) as e:
>>               data = self._DoReadFile('231_pre_load_invalid_key.dts')
>> +
>> +    def testPackTiSysfw(self):
>> +        """Test that an image with a SYSFW binary can be created"""
>> +        data = self._DoReadFile('232_ti_sysfw.dts')
>> +        self.assertEqual(TI_SYSFW_DATA, data[:len(TI_SYSFW_DATA)])
>>       def _CheckSafeUniqueNames(self, *images):
>>           """Check all entries of given images for unsafe unique names"""
>> diff --git a/tools/binman/test/232_ti_sysfw.dts 
>> b/tools/binman/test/232_ti_sysfw.dts
>> new file mode 100644
>> index 0000000000..9e66cbe77b
>> --- /dev/null
>> +++ b/tools/binman/test/232_ti_sysfw.dts
>> @@ -0,0 +1,13 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +
>> +/dts-v1/;
>> +
>> +/ {
>> +    #address-cells = <1>;
>> +    #size-cells = <1>;
>> +    binman {
>> +        ti-sysfw {
>> +            filename = "sysfw.bin";
>> +        };
>> +    };
>> +};

-- 
Thanking You
Neha Malcom Francis

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and
  2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
                   ` (10 preceding siblings ...)
  2022-06-15  6:48 ` [PATCH RFC v3 11/11] ci: world_build: test: Add requirements.txt Neha Malcom Francis
@ 2022-07-01 19:07 ` Alper Nebi Yasak
  11 siblings, 0 replies; 26+ messages in thread
From: Alper Nebi Yasak @ 2022-07-01 19:07 UTC (permalink / raw)
  To: Neha Malcom Francis; +Cc: u-boot, afd, trini, a-govindraju, vigneshr, rogerq

On 15/06/2022 09:47, Neha Malcom Francis wrote:
> [...]
> 
> Neha Malcom Francis (11):
>   j721e_evm: schema: yaml: Add general schema and J721E board config
>     files
>   ti: tools: config: Add board config class to generate config binaries

>   ti: etype: sysfw: Add entry type for sysfw
>   ti: etype: dm: Add entry type for TI DM
>   ti: etype: x509: Add etype for x509 certificate for K3 devices

These three would be better as 'binman: ...", sorry for not being clear
about that.

>   ti: sysfw: Add support for packaging sysfw.itb
>   ti: j721e: Exclude makefile tiboot3.bin target for J721E
>   ti: j721e: Exclude makefile tispl.bin target for J721E
>   ti: dtsi: j721e: Use binman to package sysfw.itb and tiboot3.bin
>   ti: dtsi: j721e: Use binman to package tispl.bin
>   ci: world_build: test: Add requirements.txt

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 02/11] ti: tools: config: Add board config class to generate config binaries
  2022-06-15  6:47 ` [PATCH RFC v3 02/11] ti: tools: config: Add board config class to generate config binaries Neha Malcom Francis
@ 2022-07-01 19:07   ` Alper Nebi Yasak
  0 siblings, 0 replies; 26+ messages in thread
From: Alper Nebi Yasak @ 2022-07-01 19:07 UTC (permalink / raw)
  To: Neha Malcom Francis; +Cc: u-boot, afd, trini, rogerq, a-govindraju, vigneshr

On 15/06/2022 09:47, Neha Malcom Francis wrote:
> For validating config files and generating binary config artifacts, here
> board specific config class is added.
> 
> Add function cfgBinaryGen() in tibcfg_gen.py. It uses TIBoardConfig
> class to load given schema and config files in YAML, validate them and
> generate binaries.
> 
> Signed-off-by: Tarun Sahu <t-sahu@ti.com>
> [n-francis@ti.com: prepared patch for upstreaming]
> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
> ---
>  test/py/requirements.txt |   1 +
>  tools/tibcfg_gen.py      | 114 +++++++++++++++++++++++++++++++++++++++
>  2 files changed, 115 insertions(+)
>  create mode 100644 tools/tibcfg_gen.py
> 
> diff --git a/test/py/requirements.txt b/test/py/requirements.txt
> index 33c5c0bbc4..a91ba64563 100644
> --- a/test/py/requirements.txt
> +++ b/test/py/requirements.txt
> @@ -4,6 +4,7 @@ coverage==4.5.4
>  extras==1.0.0
>  fixtures==3.0.0
>  importlib-metadata==0.23
> +jsonschema==4.0.0
>  linecache2==1.0.0
>  more-itertools==7.2.0
>  packaging==19.2
> diff --git a/tools/tibcfg_gen.py b/tools/tibcfg_gen.py
> new file mode 100644
> index 0000000000..e5fa2690c8
> --- /dev/null
> +++ b/tools/tibcfg_gen.py
> @@ -0,0 +1,114 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +# Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
> +#
> +# TI Board Configuration Class for Schema Validation and Binary Generation
> +#
> +
> +import os
> +import getopt
> +import sys
> +
> +import yaml
> +
> +from jsonschema import validate
> +
> +
> +class TIBoardConfig:
> +
> +    """ Texas Instruments Board Configuration File"""
> +
> +    def __init__(self, file, schema, data_rules=""):
> +        """Load a YAML configuration file and YAML schema
> +
> +        Validation of the config file against the schema is also done."""
> +        with open(file, 'r') as f:
> +            self.file_yaml = yaml.safe_load(f)
> +        with open(schema, 'r') as sch:
> +            self.schema_yaml = yaml.safe_load(sch)
> +        self.data_rules = data_rules
> +        try:
> +            validate(self.file_yaml, self.schema_yaml)
> +        except Exception as e:
> +            print(e)

Don't catch the exception here, so that we never have a non-validated
TIBoardConfig object. Instead, catch it in cfgBinaryGen() below to
report the validation error.

> +
> +    def _convert_to_byte_chunk(self, val, data_type):
> +        """Convert value into byte array"""
> +        size = 0
> +        if(data_type == "#/definitions/u8"):
> +            size = 1
> +        elif(data_type == "#/definitions/u16"):
> +            size = 2
> +        elif(data_type == "#/definitions/u32"):
> +            size = 4

Parentheses are unnecessary for these as well.

> +        else:
> +            raise Exception("Data type not present in definitions")
> +        if type(val) == int:
> +            br = val.to_bytes(size, byteorder="little")
> +        return br
> +
> +    def _compile_yaml(self, schema_yaml, file_yaml):
> +        """Convert YAML file into byte array based on YAML schema"""
> +        br = bytearray()
> +        for key in file_yaml.keys():
> +            node = file_yaml[key]
> +            node_schema = schema_yaml['properties'][key]
> +            node_type = node_schema.get('type')
> +            if not 'type' in node_schema:
> +                br += self._convert_to_byte_chunk(node,
> +                                                  node_schema.get('$ref'))
> +            elif node_type == 'object':
> +                br += self._compile_yaml(node_schema, node)
> +            elif node_type == 'array':
> +                for item in node:
> +                    if not isinstance(item, dict):
> +                        br += self._convert_to_byte_chunk(
> +                            item, schema_yaml['properties'][key]['items']["$ref"])
> +                    else:
> +                        br += self._compile_yaml(node_schema.get('items'), item)
> +        return br
> +
> +    def generate_binaries(self, out_path=""):
> +        """Generate config binary artifacts from the loaded YAML configuration file"""
> +        if not os.path.isdir(out_path):
> +            os.mkdir(out_path)
> +        for key in self.file_yaml.keys():
> +            node = self.file_yaml[key]
> +            node_schema = self.schema_yaml['properties'][key]
> +            br = self._compile_yaml(node_schema, node)
> +            path = os.path.join(out_path, key + ".bin")
> +            with open(path, 'wb') as cfg:
> +                cfg.write(br)
> +
> +    def delete_binaries(self, out_path=""):
> +        """Delete generated binaries"""
> +        if os.path.isdir(out_path):
> +            for key in self.file_yaml.keys():
> +                path = os.path.join(out_path, key + ".bin")
> +                if os.path.isfile(path):
> +                    os.remove(path)
> +
> +
> +def cfgBinaryGen():
> +    """Generate config binaries from YAML config file and YAML schema
> +        Arguments:
> +            - config_yaml: board config file in YAML
> +            - schema_yaml: schema file in YAML to validate config_yaml against
> +            - output_dir: output directory where generated binaries can be populated
> +    Pass the arguments along with the filename in the Makefile.
> +    """
> +    opts, args = getopt.getopt(sys.argv[1:], "c:s:o")

I'd prefer argparse, with both long/short forms of arguments and proper
help messages.

> +    for opt, val in opts:
> +        if opt == "-c":
> +            config_yaml = val
> +        elif opt == "-s":
> +            schema_yaml = val
> +        elif opt == "-o":
> +            output_dir = os.path.abspath(val)
> +    try:
> +        tibcfg = TIBoardConfig(config_yaml, schema_yaml)
> +        tibcfg.generate_binaries(output_dir)
> +    except:
> +        raise ValueError("Could not find config files!")
> +
> +
> +cfgBinaryGen()

This needs to be

    if __name__ == "__main__":
        cfgBinaryGen()

or it will be run when anything uses 'import tibcfg_gen' in Python.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 03/11] ti: etype: sysfw: Add entry type for sysfw
  2022-06-15  6:47 ` [PATCH RFC v3 03/11] ti: etype: sysfw: Add entry type for sysfw Neha Malcom Francis
  2022-06-15 15:37   ` Andrew Davis
@ 2022-07-01 19:07   ` Alper Nebi Yasak
  1 sibling, 0 replies; 26+ messages in thread
From: Alper Nebi Yasak @ 2022-07-01 19:07 UTC (permalink / raw)
  To: Neha Malcom Francis; +Cc: u-boot, afd, trini, rogerq, a-govindraju, vigneshr

On 15/06/2022 09:47, Neha Malcom Francis wrote:
> For K3 devices that require a sysfw image, add entry for SYSFW. It can
> contain system firmware image that can be packaged into sysfw.itb by
> binman.
> 
> Signed-off-by: Tarun Sahu <t-sahu@ti.com>
> [n-francis@ti.com: added tests for addition of etype]
> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
> ---
>  Makefile                           |  1 +
>  tools/binman/entries.rst           | 11 +++++++++++
>  tools/binman/etype/ti_sysfw.py     | 28 ++++++++++++++++++++++++++++
>  tools/binman/ftest.py              |  7 +++++++
>  tools/binman/test/232_ti_sysfw.dts | 13 +++++++++++++
>  5 files changed, 60 insertions(+)
>  create mode 100644 tools/binman/etype/ti_sysfw.py
>  create mode 100644 tools/binman/test/232_ti_sysfw.dts

Reviewed-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>

Minor points below.

> diff --git a/Makefile b/Makefile
> index 61927f8918..d20d264c53 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1345,6 +1345,7 @@ cmd_binman = $(srctree)/tools/binman/binman $(if $(BINMAN_DEBUG),-D) \
>  		-a opensbi-path=${OPENSBI} \
>  		-a default-dt=$(default_dt) \
>  		-a scp-path=$(SCP) \
> +		-a ti-sysfw-path=$(SYSFW) \
>  		-a spl-bss-pad=$(if $(CONFIG_SPL_SEPARATE_BSS),,1) \
>  		-a tpl-bss-pad=$(if $(CONFIG_TPL_SEPARATE_BSS),,1) \
>  		-a spl-dtb=$(CONFIG_SPL_OF_REAL) \
> diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst
> index ae4305c99e..9fc5c48c35 100644
> --- a/tools/binman/entries.rst
> +++ b/tools/binman/entries.rst
> @@ -1203,6 +1203,17 @@ This entry holds firmware for an external platform-specific coprocessor.
>  
>  
>  
> +Entry: ti-sysfw: Texas Instruments System Firmware (SYSFW) blob
> +------------------------------------------------------------
> +
> +Properties / Entry arguments:
> +    - ti-sysfw-path: Filename of file to read into the entry, typically sysfw.bin
> +
> +This entry contains system firmware necessary for booting of K3 architecture
> +devices.
> +
> +
> +

Regenerate these with `binman entry-docs >tools/binman/entries.rst` for
all your new entry types.

>  Entry: section: Entry that contains other entries
>  -------------------------------------------------
>  
> diff --git a/tools/binman/etype/ti_sysfw.py b/tools/binman/etype/ti_sysfw.py
> new file mode 100644
> index 0000000000..5b5b307030
> --- /dev/null
> +++ b/tools/binman/etype/ti_sysfw.py
> @@ -0,0 +1,28 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +# Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
> +#
> +# Entry type module for TI SYSFW binary blob
> +#
> +
> +import os
> +import struct
> +import sys
> +import zlib
> +
> +from binman.etype.blob_named_by_arg import Entry_blob_named_by_arg
> +from dtoc import fdt_util
> +from patman import tools

Remove unused imports.

> +
> +
> +class Entry_ti_sysfw(Entry_blob_named_by_arg):
> +    """Entry containing Texas Instruments System Firmware (SYSFW) blob
> +
> +    Properties / Entry arguments:
> +        - ti-sysfw-path: Filename of file to read into the entry, typically sysfw.bin
> +
> +    This entry contains system firmware necessary for booting of K3 architecture devices.
> +    """
> +
> +    def __init__(self, section, etype, node):
> +        super().__init__(section, etype, node, 'ti-sysfw')
> +        self.external = True
> diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
> index b5cf549703..671d083c54 100644
> --- a/tools/binman/ftest.py
> +++ b/tools/binman/ftest.py
> @@ -87,6 +87,7 @@ ATF_BL31_DATA         = b'bl31'
>  TEE_OS_DATA           = b'this is some tee OS data'
>  ATF_BL2U_DATA         = b'bl2u'
>  OPENSBI_DATA          = b'opensbi'
> +TI_SYSFW_DATA         = b'sysfw'
>  SCP_DATA              = b'scp'
>  TEST_FDT1_DATA        = b'fdt1'
>  TEST_FDT2_DATA        = b'test-fdt2'
> @@ -195,6 +196,7 @@ class TestFunctional(unittest.TestCase):
>          TestFunctional._MakeInputFile('tee-pager.bin', TEE_OS_DATA)
>          TestFunctional._MakeInputFile('bl2u.bin', ATF_BL2U_DATA)
>          TestFunctional._MakeInputFile('fw_dynamic.bin', OPENSBI_DATA)
> +        TestFunctional._MakeInputFile('sysfw.bin', TI_SYSFW_DATA)
>          TestFunctional._MakeInputFile('scp.bin', SCP_DATA)
>  
>          # Add a few .dtb files for testing
> @@ -5529,6 +5531,11 @@ fdt         fdtmap                Extract the devicetree blob from the fdtmap
>          """Test an image with a pre-load header with an invalid key"""
>          with self.assertRaises(ValueError) as e:
>              data = self._DoReadFile('231_pre_load_invalid_key.dts')
> +    
> +    def testPackTiSysfw(self):
> +        """Test that an image with a SYSFW binary can be created"""
> +        data = self._DoReadFile('232_ti_sysfw.dts')
> +        self.assertEqual(TI_SYSFW_DATA, data[:len(TI_SYSFW_DATA)])
>  

Add new tests to the end of the file, renumber the dts files to be unique.

>      def _CheckSafeUniqueNames(self, *images):
>          """Check all entries of given images for unsafe unique names"""
> diff --git a/tools/binman/test/232_ti_sysfw.dts b/tools/binman/test/232_ti_sysfw.dts
> new file mode 100644
> index 0000000000..9e66cbe77b
> --- /dev/null
> +++ b/tools/binman/test/232_ti_sysfw.dts
> @@ -0,0 +1,13 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +
> +/dts-v1/;
> +
> +/ {
> +	#address-cells = <1>;
> +	#size-cells = <1>;
> +	binman {
> +		ti-sysfw {
> +			filename = "sysfw.bin";
> +		};
> +	};
> +};

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 04/11] ti: etype: dm: Add entry type for TI DM
  2022-06-15  6:47 ` [PATCH RFC v3 04/11] ti: etype: dm: Add entry type for TI DM Neha Malcom Francis
@ 2022-07-01 19:07   ` Alper Nebi Yasak
  0 siblings, 0 replies; 26+ messages in thread
From: Alper Nebi Yasak @ 2022-07-01 19:07 UTC (permalink / raw)
  To: Neha Malcom Francis; +Cc: u-boot, afd, trini, rogerq, a-govindraju, vigneshr

On 15/06/2022 09:47, Neha Malcom Francis wrote:
> K3 devices introduces the concept of centralized power, resource and
> security management to System Firmware. This is to overcome challenges
> by the traditional approach that implements system control functions on
> each of the processing units.
> 
> The software interface for System Firmware is split into TIFS and DM. DM

TIFS (TI Foundational Security), I assume.

> (Device Manager) is responsible for resource and power management from
> secure and non-secure hosts. This additional binary is necessary for
> specific platforms' ROM boot images and is to be packaged into tispl.bin
> 
> Add an entry for DM. The entry can be used for the packaging of
> tispl.bin by binman along with ATF and TEE.
> 
> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
> ---
>  Makefile                        |  1 +
>  tools/binman/entries.rst        | 10 ++++++++++
>  tools/binman/etype/ti_dm.py     | 23 +++++++++++++++++++++++
>  tools/binman/ftest.py           |  7 +++++++
>  tools/binman/test/225_ti_dm.dts | 13 +++++++++++++
>  5 files changed, 54 insertions(+)
>  create mode 100644 tools/binman/etype/ti_dm.py
>  create mode 100644 tools/binman/test/225_ti_dm.dts

Reviewed-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>

Same minor issues as the previous patch.

> diff --git a/Makefile b/Makefile
> index d20d264c53..9b29e8e6a2 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1342,6 +1342,7 @@ cmd_binman = $(srctree)/tools/binman/binman $(if $(BINMAN_DEBUG),-D) \
>  		$(foreach f,$(BINMAN_INDIRS),-I $(f)) \
>  		-a atf-bl31-path=${BL31} \
>  		-a tee-os-path=${TEE} \
> +		-a ti-dm-path=${DM} \
>  		-a opensbi-path=${OPENSBI} \
>  		-a default-dt=$(default_dt) \
>  		-a scp-path=$(SCP) \
> diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst
> index 9fc5c48c35..b6915ef12e 100644
> --- a/tools/binman/entries.rst
> +++ b/tools/binman/entries.rst
> @@ -1214,6 +1214,16 @@ devices.
>  
>  
>  
> +Entry: ti-dm: Texas Instruments Device Manager (DM) blob
> +-----------------------------------------------------------------
> +
> +Properties / Entry arguments:
> +    - ti-dm-path: Filename of file to read into the entry, typically dm.bin
> +
> +This entry holds the device manager responsible for resource and power management in K3 devices.
> +
> +
> +
>  Entry: section: Entry that contains other entries
>  -------------------------------------------------
>  
> diff --git a/tools/binman/etype/ti_dm.py b/tools/binman/etype/ti_dm.py
> new file mode 100644
> index 0000000000..4203fff36e
> --- /dev/null
> +++ b/tools/binman/etype/ti_dm.py
> @@ -0,0 +1,23 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +# Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
> +#
> +# Entry type for TI Device Manager
> +
> +import os
> +
> +from binman.etype.blob_named_by_arg import Entry_blob_named_by_arg
> +
> +
> +class Entry_ti_dm(Entry_blob_named_by_arg):
> +    """Entry containing a Texas Instruments Device Manager (DM)
> +
> +    Properties / Entry arguments:
> +        - ti-dm-path: Filename of file to read into the entry, typically dm.bin
> +
> +    This entry holds the device manager responsible for resource and power management
> +    in K3 devices.
> +    """
> +
> +    def __init__(self, section, etype, node):
> +        super().__init__(section, etype, node, 'ti-dm')
> +        self.external = True
> diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
> index 671d083c54..3709b68297 100644
> --- a/tools/binman/ftest.py
> +++ b/tools/binman/ftest.py
> @@ -85,6 +85,7 @@ FSP_S_DATA            = b'fsp_s'
>  FSP_T_DATA            = b'fsp_t'
>  ATF_BL31_DATA         = b'bl31'
>  TEE_OS_DATA           = b'this is some tee OS data'
> +TI_DM_DATA            = b'tidmtidm'
>  ATF_BL2U_DATA         = b'bl2u'
>  OPENSBI_DATA          = b'opensbi'
>  TI_SYSFW_DATA         = b'sysfw'
> @@ -194,6 +195,7 @@ class TestFunctional(unittest.TestCase):
>          TestFunctional._MakeInputFile('compress_big', COMPRESS_DATA_BIG)
>          TestFunctional._MakeInputFile('bl31.bin', ATF_BL31_DATA)
>          TestFunctional._MakeInputFile('tee-pager.bin', TEE_OS_DATA)
> +        TestFunctional._MakeInputFile('dm.bin', TI_DM_DATA)
>          TestFunctional._MakeInputFile('bl2u.bin', ATF_BL2U_DATA)
>          TestFunctional._MakeInputFile('fw_dynamic.bin', OPENSBI_DATA)
>          TestFunctional._MakeInputFile('sysfw.bin', TI_SYSFW_DATA)
> @@ -5307,6 +5309,11 @@ fdt         fdtmap                Extract the devicetree blob from the fdtmap
>          data = self._DoReadFile('222_tee_os.dts')
>          self.assertEqual(TEE_OS_DATA, data[:len(TEE_OS_DATA)])
>  
> +    def testPackTiDm(self):
> +        """Test that an image with a TI DM binary can be created"""
> +        data = self._DoReadFile('225_ti_dm.dts')
> +        self.assertEqual(TI_DM_DATA, data[:len(TI_DM_DATA)])
> +
>      def testFitFdtOper(self):
>          """Check handling of a specified FIT operation"""
>          entry_args = {
> diff --git a/tools/binman/test/225_ti_dm.dts b/tools/binman/test/225_ti_dm.dts
> new file mode 100644
> index 0000000000..3ab754131e
> --- /dev/null
> +++ b/tools/binman/test/225_ti_dm.dts
> @@ -0,0 +1,13 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +
> +/dts-v1/;
> +
> +/ {
> +	#address-cells = <1>;
> +	#size-cells = <1>;
> +	binman {
> +		ti-dm {
> +			filename = "dm.bin";
> +		};
> +	};
> +};

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 05/11] ti: etype: x509: Add etype for x509 certificate for K3 devices
  2022-06-15  6:47 ` [PATCH RFC v3 05/11] ti: etype: x509: Add etype for x509 certificate for K3 devices Neha Malcom Francis
@ 2022-07-01 19:07   ` Alper Nebi Yasak
  0 siblings, 0 replies; 26+ messages in thread
From: Alper Nebi Yasak @ 2022-07-01 19:07 UTC (permalink / raw)
  To: Neha Malcom Francis; +Cc: u-boot, afd, trini, rogerq, a-govindraju, vigneshr

On 15/06/2022 09:47, Neha Malcom Francis wrote:
> K3 devices requires x509 certificate to be added as header of bootloader
> binaries that allows ROM to validate the integrity of the image. Etype
> that generates a TI x509 certificate is added.
> 
> Currently this etype is scaled for J721E. For J721E, tiboot3.bin
> requires the x509 certificate binary to be prepended to the R5 SPL.
> 
> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
> ---
>  test/py/requirements.txt            |   1 +
>  tools/binman/entries.rst            |  15 ++
>  tools/binman/etype/ti_x509_cert.py  | 241 ++++++++++++++++++++++++++++
>  tools/binman/ftest.py               |   6 +
>  tools/binman/test/232_x509_cert.dts |  18 +++
>  5 files changed, 281 insertions(+)
>  create mode 100644 tools/binman/etype/ti_x509_cert.py
>  create mode 100644 tools/binman/test/232_x509_cert.dts
> 
> diff --git a/test/py/requirements.txt b/test/py/requirements.txt
> index a91ba64563..add264bdaf 100644
> --- a/test/py/requirements.txt
> +++ b/test/py/requirements.txt
> @@ -11,6 +11,7 @@ packaging==19.2
>  pbr==5.4.3
>  pluggy==0.13.0
>  py==1.10.0
> +pycryptodome==3.14.1

You don't need this if you use Cryptodome instead of Crypto. It's the
same thing as pycryptodomex below.

>  pycryptodomex==3.9.8
>  pyelftools==0.27
>  pygit2==0.28.2
> diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst
> index b6915ef12e..e7757b3e06 100644
> --- a/tools/binman/entries.rst
> +++ b/tools/binman/entries.rst
> @@ -1890,6 +1890,21 @@ and kernel are genuine.
>  
>  
>  
> +Entry: ti-x509-cert: Texas Instruments x509 certificate for K3 devices
> +------------------------------------------------
> +
> +Properties / Entry arguments:
> +        - content: Phandle of binary to sign
> +        - output: Name of the final output file
> +        - key_file: File with key inside it. If not provided, script generates RSA degenerate key
> +        - core: Target core ID on which image would be running
> +        - load: Target load address of the binary in hex
> +
> +    Output files:
> +        - certificate.bin: Signed certificate binary
> +
> +
> +
>  Entry: x86-reset16: x86 16-bit reset code for U-Boot
>  ----------------------------------------------------
>  
> diff --git a/tools/binman/etype/ti_x509_cert.py b/tools/binman/etype/ti_x509_cert.py
> new file mode 100644
> index 0000000000..b79946c0b9
> --- /dev/null
> +++ b/tools/binman/etype/ti_x509_cert.py
> @@ -0,0 +1,241 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +# Copyright (c) 2018 Google, Inc
> +# Written by Simon Glass <sjg@chromium.org>
> +#
> +
> +# Support for a TI x509 certificate for signing K3 devices
> +
> +from subprocess import Popen, PIPE

Anything you want to run should normally be a bintool that provides a
pythonic wrapper for it, see tools/binman/btool for examples. But if
that's too much, openssl calls must at least use the patman.command
functions instead.

> +from sys import stderr, stdout

Don't mess with stderr, stdout. See tools/patman/command for things you
can use to run commands and capture their output.

> +import os
> +import tempfile
> +
> +from Crypto.PublicKey import RSA

Prefer Cryptodome instead.

> +
> +from binman.etype.collection import Entry_collection
> +from dtoc import fdt_util
> +from patman import tools
> +
> +
> +class Entry_ti_x509_cert(Entry_collection):
> +    """An entry which contains an x509 certificate binary signed with 1024 bit RSA key
> +
> +    Properties / Entry arguments:
> +        - content: Phandle of binary to generate signature for
> +        - key_file: File with key inside it. If not provided, script generates RSA degenrate key
> +        - core: Target core ID on which image would be running
> +        - load: Target load address of the binary in hex
> +
> +    Output files:
> +        - certificate.bin: Signed certificate binary"""
> +
> +    def __init__(self, section, etype, node):
> +        super().__init__(section, etype, node)
> +        self.key_file = fdt_util.GetString(self._node, 'key-file', "")
> +        self.core = fdt_util.GetInt(self._node, 'core', 0)
> +        self.load_addr = fdt_util.GetInt(self._node, 'load', 0x41c00000)

These should actually be in ReadNode(). You should set things to
None-like values here to show which attributes will exist, and also do
it for attributes set later in other methods.

> +        self.cert = fdt_util.GetString(self._node, 'cert', 'certificate.bin')

This looks unused.

> +
> +        # temporary directory for intermediate files
> +        self.outdir = tempfile.mkdtemp(prefix='binman.x509.')

For now, omit this and put the outputs in the build directory. See below
for an example. (We should eventually reorganize intermediate files, but
it should be done by generic helpers that all entries can use).

> +
> +    def ReadNode(self):
> +        super().ReadNode()
> +        if self.key_file == "":
> +            self.key_int_file = os.path.join(self.outdir, 'eckey.pem')
> +            self.GenerateDegenKey()
> +        else:
> +            self.key_int_file = self.key_file

ReadNode() should only copy the device-tree values to the entry object,
it shouldn't generate the key here.

> +
> +    def ObtainContents(self):
> +        self.image = self.GetContents(False)
> +        if self.image is None:
> +            return False
> +        self.image_file = os.path.join(self.outdir, 'x509.image')
> +        with open(self.image_file, 'wb') as f:
> +            f.write(self.image)

Prepare intermediate files like:

        uniq = self.GetUniqueName()
        image_fname = tools.get_output_filename(f'{uniq}.x509-image')
        tools.write_file(image_fname, data)

Also, better do this in _TICreateCertificateLegacy() because you have to
do it in ProcessContents() as well.

> +        self.cert_data = self._TICreateCertificateLegacy()
> +        self.SetContents(self.cert_data)
> +        return True
> +
> +    def ProcessContents(self):
> +        # The blob may have changed due to WriteSymbols()

You need to read the data again and recreate the certificate here,
because the signed data (like u-boot-spl) might have changed, which
would make the cert invalid.

> +        return super().ProcessContentsUpdate(self.cert_data)
> +
> +    def _TICreateCertificateLegacy(self):
> +        """Create certificate for legacy boot flow"""
> +
> +        sha_val = self.GetShaVal(self.image_file)
> +        bin_size = self.GetFileSize(self.image_file)
> +        addr = "%08x" % self.load_addr

Can be f"{self.load_addr:08x}".

> +        if self.core == 16:
> +            self.cert_type = 1
> +        else:
> +            self.cert_type = 2
> +        self.debug_type = 0
> +        self.bootcore_opts = 0

Looks like this doesn't handle the '# Non BOOTCORE, loaded by SYSFW'
case in k3_gen_x509_cert.sh.

> +
> +        self.GenerateTemplate()
> +        self.GenerateCertificate(bin_size, sha_val, addr)
> +
> +        return tools.read_file(self.cert_file)
> +
> +    def GetShaVal(self, binary_file):
> +        process = Popen(['openssl', 'dgst', '-sha512', '-hex',
> +                         binary_file], stdout=PIPE, stderr=PIPE)
> +        stdout, stderr = process.communicate()
> +        sha_val = stdout.split()[1]
> +        return sha_val

This can be something like `hashlib.sha512(data).hexdigest()`, or
something with Cryptodome.Hash.SHA512.

> +
> +    def GetFileSize(self, binary_file):
> +        return os.path.getsize(binary_file)

No need for an extra function for this, and maybe even for the hash.

> +
> +    def ParseKey(self, inp_key, section):
> +        parsed_key = ""
> +        section_true = False
> +        with open(inp_key, 'r') as file:
> +            for line in file:
> +                if section in line:
> +                    section_true = True
> +                elif section_true:
> +                    if "    " not in line:
> +                        break
> +                    else:
> +                        parsed_key += line.replace(":", "").replace("    ", "")
> +        return parsed_key.replace("\n", "")

Better to use Cryptodome for parsing key information. I see there is a
Cryptodome.PublicKey.RSA.import_key() if you need to read a provided
key, but the values are already there for the degenerate key generated
below.

> +
> +    def GenerateDegenKey(self):
> +        """Generate a 4096 bit RSA key"""
> +        # generates 1024 bit PEM encoded RSA key in PKCS#1 format
> +        private_key = RSA.generate(1024)
> +        self.key_pem_file = os.path.join(self.outdir, 'key.pem')
> +        with open(self.key_pem_file, 'wb') as f:
> +            f.write(private_key.exportKey('PEM'))
> +
> +        self.key_text_file = os.path.join(self.outdir, 'key.txt')
> +        process = Popen(['openssl', 'rsa', '-in', self.key_pem_file,
> +                         '-text', '-out', self.key_text_file], stdout=PIPE, stderr=PIPE)
> +        stdout, stderr = process.communicate()
> +
> +        DEGEN_MODULUS = self.ParseKey(self.key_text_file, "modulus")
> +        DEGEN_P = self.ParseKey(self.key_text_file, "prime1")
> +        DEGEN_Q = self.ParseKey(self.key_text_file, "prime2")
> +        DEGEN_COEFF = self.ParseKey(self.key_text_file, "coefficient")

These should be derived from private_key.{n,p,q,u}. I guess
f"{private_key.n:x}" and so on should work?

I tried a bit, and looks like pycryptodome and openssl disagree on the
coefficient definition, but I can get what openssl gives by switching
the p and q like `RSA.construct((n, e, d, q, p)).u`

> +
> +        self.GenerateDegenTemplate()
> +
> +        self.degen_key = os.path.join(self.outdir, 'x509.degenerateKey.txt')
> +        with open(self.degen_temp_file, 'r') as file_input:
> +            with open(self.degen_key, 'w') as file_output:
> +                for line in file_input:
> +                    s = line.replace("DEGEN_MODULUS", DEGEN_MODULUS).replace(
> +                        "DEGEN_P", DEGEN_P).replace("DEGEN_Q", DEGEN_Q).replace("DEGEN_COEFF", DEGEN_COEFF)
> +                    file_output.write(s)

It would be easier to fill the template in Python with str.format(),
something like:

    DEGENERATE_KEY_TEMPLATE = """\
    asn1=SEQUENCE:rsa_key

    [rsa_key]
    version=INTEGER:0
    modulus=INTEGER:0x{modulus:x}
    pubExp=INTEGER:1
    privExp=INTEGER:1
    p=INTEGER:0x{p:x}
    q=INTEGER:0x{q:x}
    e1=INTEGER:1
    e2=INTEGER:1
    coeff=INTEGER:0x{coeff:x}
    """

    coeff = RSA.construct((
        private_key.n, private_key.e, private_key.d,
        private_key.q, private_key.p,
    )).u

    degen_conf = DEGENERATE_KEY_TEMPLATE.format(
        modulus=private_key.n,
        p=private_key.p,
        q=private_key.q,
        coeff=coeff,
    )

> +
> +        self.degen_key_der = os.path.join(
> +            self.outdir, 'x509.degenerateKey.der')
> +        process = Popen(['openssl', 'asn1parse', '-genconf', self.degen_key,
> +                         '-out', self.degen_key_der], stdout=PIPE, stderr=PIPE)
> +        stdout, stderr = process.communicate()
> +
> +        process = Popen(['openssl', 'rsa', '-in', self.degen_key_der,
> +                         '-inform', 'DER', '-outform', 'PEM', '-out', self.key_int_file])
> +        stdout, stderr = process.communicate()
> +
> +    def GenerateCertificate(self, bin_size, sha_val, addr):
> +        self.temp_x509 = os.path.join(self.outdir, 'x509.temp.cert')
> +        self.cert_file = os.path.join(self.outdir, 'x509.certificate.bin')
> +
> +        temp_dict = {}
> +        temp_dict['TEST_IMAGE_LENGTH'] = str(bin_size)
> +        temp_dict['TEST_IMAGE_SHA_VAL'] = sha_val.decode("utf-8")
> +        temp_dict['TEST_CERT_TYPE'] =  str(self.cert_type)
> +        temp_dict['TEST_BOOT_CORE_OPTS'] = str(self.bootcore_opts)
> +        temp_dict['TEST_BOOT_CORE'] = str(self.core)
> +        temp_dict['TEST_BOOT_ADDR'] =  str(addr)
> +        temp_dict['TEST_DEBUG_TYPE'] = str(self.debug_type)

A literal dict looks better here:

    temp_dict = {
        'TEST_IMAGE_LENGTH': str(bin_size),
        ...
    }

> +
> +        with open(self.temp_x509, "w") as output_file:
> +            with open(self.temp_file, "r") as input_file:
> +                for line in input_file:
> +                    l = line
> +                    for key in temp_dict:
> +                        if key in line:
> +                            l = l.replace(key, temp_dict[key])
> +                    output_file.write(l)

But again, this would be easier with str.format():

    X509_TEMPLATE = """\
    [...]

    [ boot_seq ]
    certType = INTEGER:{certType}
    bootCore = INTEGER:{bootCore}
    bootCoreOpts = INTEGER:{bootCoreOpts}
    destAddr = FORMAT:HEX,OCT:{destAddr:08x}
    imageSize = INTEGER:{imageSize}

    [...]
    """

    x509_config = X509_TEMPLATE.format(
        ...
        'certType': self.cert_type,
        'bootCoreOpts': self.bootcore_opts,
        'bootCore': self.core,
        'destAddr': addr,
        ...
    )

> +
> +        process = Popen(['openssl', 'req', '-new', '-x509', '-key', self.key_int_file, '-nodes', '-outform',
> +                        'DER', '-out', self.cert_file, '-config', self.temp_x509, '-sha512'], stdout=PIPE, stderr=PIPE)
> +        stdout, stderr = process.communicate()

Read the cert file here and return its bytes, instead of leaving it to
_TICreateCertificateLegacy().

In general I think creating fewer files and limiting their scopes to as
small as possible is better.

> +
> +    def GenerateDegenTemplate(self):
> +        self.degen_temp_file = os.path.join(self.outdir, 'x509.degen-template')
> +        with open(self.degen_temp_file, 'w+', encoding='utf-8') as f:
> +            degen_temp = """
> +asn1=SEQUENCE:rsa_key
> +
> +[rsa_key]
> +version=INTEGER:0
> +modulus=INTEGER:0xDEGEN_MODULUS
> +pubExp=INTEGER:1
> +privExp=INTEGER:1
> +p=INTEGER:0xDEGEN_P
> +q=INTEGER:0xDEGEN_Q
> +e1=INTEGER:1
> +e2=INTEGER:1
> +coeff=INTEGER:0xDEGEN_COEFF"""
> +            f.write(degen_temp)
> +
> +    def GenerateTemplate(self):
> +        self.temp_file = os.path.join(self.outdir, 'x509.template')
> +        with open(self.temp_file, 'w+', encoding='utf-8') as f:
> +            x509template = """
> +[ req ]
> +distinguished_name     = req_distinguished_name
> +x509_extensions        = v3_ca
> +prompt                 = no
> +dirstring_type         = nobmp
> +
> +[ req_distinguished_name ]
> +C                      = US
> +ST                     = TX
> +L                      = Dallas
> +O                      = Texas Instruments Incorporated
> +OU                     = Processors
> +CN                     = TI support
> +emailAddress           = support@ti.com
> +
> +[ v3_ca ]
> +basicConstraints = CA:true
> +1.3.6.1.4.1.294.1.1 = ASN1:SEQUENCE:boot_seq
> +1.3.6.1.4.1.294.1.2 = ASN1:SEQUENCE:image_integrity
> +1.3.6.1.4.1.294.1.3 = ASN1:SEQUENCE:swrv
> +# 1.3.6.1.4.1.294.1.4 = ASN1:SEQUENCE:encryption
> +1.3.6.1.4.1.294.1.8 = ASN1:SEQUENCE:debug
> +
> +[ boot_seq ]
> +certType = INTEGER:TEST_CERT_TYPE
> +bootCore = INTEGER:TEST_BOOT_CORE
> +bootCoreOpts = INTEGER:TEST_BOOT_CORE_OPTS
> +destAddr = FORMAT:HEX,OCT:TEST_BOOT_ADDR
> +imageSize = INTEGER:TEST_IMAGE_LENGTH
> +
> +[ image_integrity ]
> +shaType = OID:2.16.840.1.101.3.4.2.3
> +shaValue = FORMAT:HEX,OCT:TEST_IMAGE_SHA_VAL
> +
> +[ swrv ]
> +swrv = INTEGER:0
> +
> +# [ encryption ]
> +# initalVector = FORMAT:HEX,OCT:TEST_IMAGE_ENC_IV
> +# randomString = FORMAT:HEX,OCT:TEST_IMAGE_ENC_RS
> +# iterationCnt = INTEGER:TEST_IMAGE_KEY_DERIVE_INDEX
> +# salt = FORMAT:HEX,OCT:TEST_IMAGE_KEY_DERIVE_SALT
> +
> +[ debug ]
> +debugUID = FORMAT:HEX,OCT:0000000000000000000000000000000000000000000000000000000000000000
> +debugType = INTEGER:TEST_DEBUG_TYPE
> +coreDbgEn = INTEGER:0
> +coreDbgSecEn = INTEGER:0"""
> +            f.write(x509template)

I think these templates would be better as top-level constants.

> diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
> index 3709b68297..70bda9738c 100644
> --- a/tools/binman/ftest.py
> +++ b/tools/binman/ftest.py
> @@ -96,6 +96,7 @@ ENV_DATA              = b'var1=1\nvar2="2"'
>  PRE_LOAD_MAGIC        = b'UBSH'
>  PRE_LOAD_VERSION      = 0x11223344.to_bytes(4, 'big')
>  PRE_LOAD_HDR_SIZE     = 0x00001000.to_bytes(4, 'big')
> +X509_DATA             = b'filetobesigned'
>  
>  # Subdirectory of the input dir to use to put test FDTs
>  TEST_FDT_SUBDIR       = 'fdts'
> @@ -200,6 +201,7 @@ class TestFunctional(unittest.TestCase):
>          TestFunctional._MakeInputFile('fw_dynamic.bin', OPENSBI_DATA)
>          TestFunctional._MakeInputFile('sysfw.bin', TI_SYSFW_DATA)
>          TestFunctional._MakeInputFile('scp.bin', SCP_DATA)
> +        TestFunctional._MakeInputFile('tosign.bin', X509_DATA)
>  
>          # Add a few .dtb files for testing
>          TestFunctional._MakeInputFile('%s/test-fdt1.dtb' % TEST_FDT_SUBDIR,
> @@ -5716,6 +5718,10 @@ fdt         fdtmap                Extract the devicetree blob from the fdtmap
>              dts='234_replace_section_simple.dts')
>          self.assertEqual(new_data, data)
>  
> +    def testX509Cert(self):
> +        """Test an image with the default x509 certificate header"""
> +        data = self._DoReadFile('232_x509_cert.dts')
> +        self.assertGreater(len(data), len(X509_DATA))

If you used a bintool, you could do something like _HandleVblockCommand
to capture the openssl calls, create a mock file as the output
certificate, and check that here.

>  
>  if __name__ == "__main__":
>      unittest.main()
> diff --git a/tools/binman/test/232_x509_cert.dts b/tools/binman/test/232_x509_cert.dts
> new file mode 100644
> index 0000000000..3e68309de5
> --- /dev/null
> +++ b/tools/binman/test/232_x509_cert.dts
> @@ -0,0 +1,18 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +
> +/dts-v1/;
> +
> +/ {
> +	#address-cells = <1>;
> +	#size-cells = <1>;
> +
> +	binman {
> +		ti-x509-cert {
> +			content = <&image>;
> +		};
> +
> +		image: blob-ext {
> +			filename = "tosign.bin";
> +		};
> +	};
> +};

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 09/11] ti: dtsi: j721e: Use binman to package sysfw.itb and tiboot3.bin
  2022-06-15  6:48 ` [PATCH RFC v3 09/11] ti: dtsi: j721e: Use binman to package sysfw.itb and tiboot3.bin Neha Malcom Francis
@ 2022-07-01 19:07   ` Alper Nebi Yasak
  0 siblings, 0 replies; 26+ messages in thread
From: Alper Nebi Yasak @ 2022-07-01 19:07 UTC (permalink / raw)
  To: Neha Malcom Francis; +Cc: u-boot, afd, trini, rogerq, a-govindraju, vigneshr

On 15/06/2022 09:48, Neha Malcom Francis wrote:
> By providing entries in the binman node of the device tree, binman will
> be able to find and package board config binary artifacts generated by
> TIBoardConfig with sysfw.bin and generate the final image sysfw.itb.
> 
> k3-j721e-r5-binman.dtsi has been introduced for R5 specific binman node.
> It can be then be include by files that require it like
> k3-j721e-r5-common-proc-board-u-boot.dtsi.
> 
> Signed-off-by: Tarun Sahu <t-sahu@ti.com>
> [n-francis@ti.com: prepared patch for upstreaming]
> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
> ---
>  arch/arm/dts/k3-j721e-r5-binman.dtsi          | 88 +++++++++++++++++++
>  .../k3-j721e-r5-common-proc-board-u-boot.dtsi |  1 +
>  board/ti/j721e/Kconfig                        |  1 +
>  3 files changed, 90 insertions(+)
>  create mode 100644 arch/arm/dts/k3-j721e-r5-binman.dtsi
> 
> diff --git a/arch/arm/dts/k3-j721e-r5-binman.dtsi b/arch/arm/dts/k3-j721e-r5-binman.dtsi
> new file mode 100644
> index 0000000000..e3aeefb08f
> --- /dev/null
> +++ b/arch/arm/dts/k3-j721e-r5-binman.dtsi
> @@ -0,0 +1,88 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +// Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
> +
> +#include <config.h>
> +
> +/ {
> +	binman: binman {
> +		multiple-images;
> +	};
> +};
> +
> +&binman {
> +	tiboot3 {
> +		filename = "tiboot3.bin";
> +		ti-x509-cert {
> +			content = <&image1>;
> +			core = <16>;
> +			load = <CONFIG_SPL_TEXT_BASE>;
> +		};
> +		image1: u-boot-spl {
> +			no-expanded;
> +		};

Please put empty lines between properties and nodes, and between each
node. Labels could be u_boot_spl, ti_sysfw instead of image1/2.

> +	};
> +	binary {
> +		filename = "sysfw.bin";
> +		ti-x509-cert {
> +			content = <&image2>;
> +			core = <0>;
> +			load = <0x0040000>;
> +		};
> +		image2: ti-sysfw {
> +		};
> +	};
> +	itb {
> +		filename = "sysfw.itb";
> +		fit {
> +			description = "SYSFW and Config Fragments";
> +			#address-cells = <1>;
> +			images {
> +				sysfw.bin {
> +					description = "sysfw";
> +					type = "firmware";
> +					arch = "arm";
> +					compression = "none";
> +					blob {
> +						filename = "sysfw.bin";
> +					};
> +				};

I dislike having the meaningless 'blob' and 'blob-ext' as node names.
Having the extension doesn't make much sense to me for the FIT entry,
but I like it for the blob itself:

    sysfw {
            description = "sysfw";
            type = "firmware";
            arch = "arm";
            compression = "none";

            sysfw.bin {
                    filename = "sysfw.bin";
                    type = "blob";
            };
    };

> +				board-cfg.bin {
> +					description = "board-cfg";
> +					type = "firmware";
> +					arch = "arm";
> +					compression = "none";
> +					blob-ext {
> +						filename = "board-cfg.bin";
> +					};
> +				};
> +				pm-cfg.bin {
> +					description = "pm-cfg";
> +					type = "firmware";
> +					arch = "arm";
> +					compression = "none";
> +					blob-ext {
> +						filename = "pm-cfg.bin";
> +					};
> +				};
> +				rm-cfg.bin {
> +					description = "rm-cfg";
> +					type = "firmware";
> +					arch = "arm";
> +					compression = "none";
> +					blob-ext {
> +						filename = "rm-cfg.bin";
> +					};
> +				};
> +				sec-cfg.bin {
> +					description = "sec-cfg";
> +					type = "firmware";
> +					arch = "arm";
> +					compression = "none";
> +					blob-ext {
> +						filename = "sec-cfg.bin";
> +					};
> +				};
> +			};
> +		};
> +	};
> +};
> diff --git a/arch/arm/dts/k3-j721e-r5-common-proc-board-u-boot.dtsi b/arch/arm/dts/k3-j721e-r5-common-proc-board-u-boot.dtsi
> index 48c6ddf672..75ec722e89 100644
> --- a/arch/arm/dts/k3-j721e-r5-common-proc-board-u-boot.dtsi
> +++ b/arch/arm/dts/k3-j721e-r5-common-proc-board-u-boot.dtsi
> @@ -4,6 +4,7 @@
>   */
>  
>  #include "k3-j721e-common-proc-board-u-boot.dtsi"
> +#include "k3-j721e-r5-binman.dtsi"
>  
>  / {
>  	chosen {
> diff --git a/board/ti/j721e/Kconfig b/board/ti/j721e/Kconfig
> index c28752a658..a3a9d504ae 100644
> --- a/board/ti/j721e/Kconfig
> +++ b/board/ti/j721e/Kconfig
> @@ -24,6 +24,7 @@ config TARGET_J721E_R5_EVM
>  	select RAM
>  	select SPL_RAM
>  	select K3_DDRSS
> +	select BINMAN
>  	imply SYS_K3_SPL_ATF
>  	imply TI_I2C_BOARD_DETECT
>  

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 10/11] ti: dtsi: j721e: Use binman to package tispl.bin
  2022-06-15  6:48 ` [PATCH RFC v3 10/11] ti: dtsi: j721e: Use binman to package tispl.bin Neha Malcom Francis
  2022-06-15 14:25   ` Roger Quadros
  2022-06-15 14:29   ` Roger Quadros
@ 2022-07-01 19:08   ` Alper Nebi Yasak
  2 siblings, 0 replies; 26+ messages in thread
From: Alper Nebi Yasak @ 2022-07-01 19:08 UTC (permalink / raw)
  To: Neha Malcom Francis; +Cc: u-boot, afd, trini, rogerq, a-govindraju, vigneshr

On 15/06/2022 09:48, Neha Malcom Francis wrote:
> tispl.bin must be packaged (with ATF, OPTEE, DM and A72 SPL) for J721E.
> Binman picks up and packages entries according to the
> description given in the device tree.
> 
> k3-j721e-a72-binman.dtsi has been introduced for A72 specific binman
> node. It is included by k3-j721e-common-proc-board-u-boot.dtsi
> 
> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
> ---
>  arch/arm/dts/k3-j721e-a72-binman.dtsi         | 86 +++++++++++++++++++
>  .../k3-j721e-common-proc-board-u-boot.dtsi    |  1 +
>  board/ti/j721e/Kconfig                        |  1 +
>  3 files changed, 88 insertions(+)
>  create mode 100644 arch/arm/dts/k3-j721e-a72-binman.dtsi
> 
> diff --git a/arch/arm/dts/k3-j721e-a72-binman.dtsi b/arch/arm/dts/k3-j721e-a72-binman.dtsi
> new file mode 100644
> index 0000000000..beb3424bb9
> --- /dev/null
> +++ b/arch/arm/dts/k3-j721e-a72-binman.dtsi
> @@ -0,0 +1,86 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +// Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/
> +
> +#include <config.h>
> +
> +#ifdef CONFIG_ARM64
> +/ {
> +	binman: binman {
> +		multiple-images;
> +	};
> +};
> +
> +&binman {
> +	tispl {
> +		filename = "tispl.bin";

Empty lines for this file as well.

> +		fit {
> +			description = "FIT IMAGE";
> +			#address-cells = <1>;
> +			images {
> +				atf {
> +					description = "ARM Trusted Firmware";
> +					type = "firmware";
> +					arch = "arm64";
> +					compression = "none";
> +					os = "arm-trusted-firmware";
> +					load = <CONFIG_K3_ATF_LOAD_ADDR>;
> +					entry = <CONFIG_K3_ATF_LOAD_ADDR>;
> +					atf-bl31 {
> +					};
> +				};
> +				tee {
> +					description = "OPTEE";
> +					type = "tee";
> +					arch = "arm64";
> +					compression = "none";
> +					os = "tee";
> +					load = <0x9e800000>;
> +					entry = <0x9e800000>;
> +					tee-os {
> +					};
> +				};
> +				dm {
> +					description = "DM binary";
> +					type = "firmware";
> +					arch = "arm32";
> +					compression = "none";
> +					os = "DM";
> +					load = <0x89000000>;
> +					entry = <0x89000000>;
> +					ti-dm {
> +					};
> +				};
> +				spl {
> +					description = "SPL (64-bit)";
> +					type = "standalone";
> +					os = "U-Boot";
> +					arch = "arm64";
> +					compression = "none";
> +					load = <CONFIG_SPL_TEXT_BASE>;
> +					entry = <CONFIG_SPL_TEXT_BASE>;
> +					u-boot-spl-nodtb {
> +					};
> +				};
> +				k3-j721e-common-proc-board.dtb {
> +					description = "k3-j721e-common-proc-board";
> +					type = "flat_dt";
> +					arch = "arm";
> +					compression = "none";
> +					blob-ext {
> +					filename = "spl/dts/k3-j721e-common-proc-board.dtb";

Indentation here, but it could be a u-boot-spl-dtb entry instead. Or,
there's a @fdt-SEQ mechanism to include files based on CONFIG_OF_LIST,
which you might want to look at.

> +					};
> +				};
> +			};
> +			configurations {
> +				default = "conf";
> +				conf {
> +					description = "k3-j721e-common-proc-board";
> +					firmware = "atf";
> +					loadables = "tee", "dm", "spl";
> +					fdt = "k3-j721e-common-proc-board.dtb";
> +				};
> +			};
> +		};
> +	};
> +};
> +#endif
> diff --git a/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi b/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi
> index 677a72d2a2..6490d71f7e 100644
> --- a/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi
> +++ b/arch/arm/dts/k3-j721e-common-proc-board-u-boot.dtsi
> @@ -4,6 +4,7 @@
>   */
>  
>  #include <dt-bindings/net/ti-dp83867.h>
> +#include "k3-j721e-a72-binman.dtsi"
>  
>  / {
>  	chosen {
> diff --git a/board/ti/j721e/Kconfig b/board/ti/j721e/Kconfig
> index a3a9d504ae..3cf05f0d3b 100644
> --- a/board/ti/j721e/Kconfig
> +++ b/board/ti/j721e/Kconfig
> @@ -14,6 +14,7 @@ config TARGET_J721E_A72_EVM
>  	select BOARD_LATE_INIT
>  	imply TI_I2C_BOARD_DETECT
>  	select SYS_DISABLE_DCACHE_OPS
> +	select BINMAN
>  
>  config TARGET_J721E_R5_EVM
>  	bool "TI K3 based J721E EVM running on R5"

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH RFC v3 11/11] ci: world_build: test: Add requirements.txt
  2022-06-15  6:48 ` [PATCH RFC v3 11/11] ci: world_build: test: Add requirements.txt Neha Malcom Francis
@ 2022-07-01 19:09   ` Alper Nebi Yasak
  0 siblings, 0 replies; 26+ messages in thread
From: Alper Nebi Yasak @ 2022-07-01 19:09 UTC (permalink / raw)
  To: Neha Malcom Francis, trini, rogerq, a-govindraju, vigneshr; +Cc: u-boot, afd

On 15/06/2022 09:48, Neha Malcom Francis wrote:
> To avoid ModuleNotFoundErrors during World Build in CI tests, add
> installation of test/py/requirements.txt to .azure-pipelines.yml
> 
> Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
> ---
>  .azure-pipelines.yml | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml
> index ad540ea635..0fd57f59f4 100644
> --- a/.azure-pipelines.yml
> +++ b/.azure-pipelines.yml
> @@ -551,6 +551,7 @@ stages:
>            EOF
>            cat << "EOF" >> build.sh
>            if [[ "${BUILDMAN}" != "" ]]; then
> +              pip install -r test/py/requirements.txt
>                ret=0;
>                tools/buildman/buildman -o /tmp -P -E -W ${BUILDMAN} ${OVERRIDE} || ret=$?;
>                if [[ $ret -ne 0 ]]; then

Reviewed-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2022-07-01 19:10 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-15  6:47 [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Neha Malcom Francis
2022-06-15  6:47 ` [PATCH RFC v3 01/11] j721e_evm: schema: yaml: Add general schema and J721E board config files Neha Malcom Francis
2022-06-15  6:47 ` [PATCH RFC v3 02/11] ti: tools: config: Add board config class to generate config binaries Neha Malcom Francis
2022-07-01 19:07   ` Alper Nebi Yasak
2022-06-15  6:47 ` [PATCH RFC v3 03/11] ti: etype: sysfw: Add entry type for sysfw Neha Malcom Francis
2022-06-15 15:37   ` Andrew Davis
2022-06-16 11:23     ` Neha Malcom Francis
2022-07-01 19:07   ` Alper Nebi Yasak
2022-06-15  6:47 ` [PATCH RFC v3 04/11] ti: etype: dm: Add entry type for TI DM Neha Malcom Francis
2022-07-01 19:07   ` Alper Nebi Yasak
2022-06-15  6:47 ` [PATCH RFC v3 05/11] ti: etype: x509: Add etype for x509 certificate for K3 devices Neha Malcom Francis
2022-07-01 19:07   ` Alper Nebi Yasak
2022-06-15  6:47 ` [PATCH RFC v3 06/11] ti: sysfw: Add support for packaging sysfw.itb Neha Malcom Francis
2022-06-15  6:48 ` [PATCH RFC v3 07/11] ti: j721e: Exclude makefile tiboot3.bin target for J721E Neha Malcom Francis
2022-06-15  6:48 ` [PATCH RFC v3 08/11] ti: j721e: Exclude makefile tispl.bin " Neha Malcom Francis
2022-06-15 13:44   ` Roger Quadros
2022-06-16 11:09     ` Neha Malcom Francis
2022-06-15  6:48 ` [PATCH RFC v3 09/11] ti: dtsi: j721e: Use binman to package sysfw.itb and tiboot3.bin Neha Malcom Francis
2022-07-01 19:07   ` Alper Nebi Yasak
2022-06-15  6:48 ` [PATCH RFC v3 10/11] ti: dtsi: j721e: Use binman to package tispl.bin Neha Malcom Francis
2022-06-15 14:25   ` Roger Quadros
2022-06-15 14:29   ` Roger Quadros
2022-07-01 19:08   ` Alper Nebi Yasak
2022-06-15  6:48 ` [PATCH RFC v3 11/11] ci: world_build: test: Add requirements.txt Neha Malcom Francis
2022-07-01 19:09   ` Alper Nebi Yasak
2022-07-01 19:07 ` [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and Alper Nebi Yasak

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.