diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/binman/etype/renesas_rcar4_sa0.py | 46 | ||||
-rw-r--r-- | tools/binman/ftest.py | 11 | ||||
-rw-r--r-- | tools/binman/test/348_renesas_rcar4_sa0.dts | 15 | ||||
-rw-r--r-- | tools/binman/test/349_renesas_rcar4_sa0_size.dts | 20 | ||||
-rw-r--r-- | tools/bmp_logo.c | 10 | ||||
-rw-r--r-- | tools/gen_ethaddr_crc.c | 6 | ||||
-rw-r--r-- | tools/mkenvimage.c | 2 | ||||
-rw-r--r-- | tools/ublimage.c | 2 |
8 files changed, 102 insertions, 10 deletions
diff --git a/tools/binman/etype/renesas_rcar4_sa0.py b/tools/binman/etype/renesas_rcar4_sa0.py new file mode 100644 index 00000000000..3a7c0988fdc --- /dev/null +++ b/tools/binman/etype/renesas_rcar4_sa0.py @@ -0,0 +1,46 @@ +# SPDX-License-Identifier: GPL-2.0+ +# Copyright 2025 Marek Vasut <marek.vasut+renesas@mailbox.org> +# +# Entry-type module for generating the Renesas R-Car Gen4 SA0 header. +# + +import os +import struct + +from binman.etype.section import Entry_section +from dtoc import fdt_util +from u_boot_pylib import tools + +RCAR_GEN4_SF_HEADER_SIZE = 0x40000 +RCAR_GEN4_SF_MAX_LOAD_SIZE = 0xec000 + +class Entry_renesas_rcar4_sa0(Entry_section): + """Renesas R-Car Gen4 SA0 generator""" + + def __init__(self, section, etype, node): + super().__init__(section, etype, node) + self.required_props = ['renesas,loader-address'] + + def ReadNode(self): + self.loader_address = fdt_util.GetInt(self._node, 'renesas,loader-address') + super().ReadNode() + + def BuildSectionData(self, required): + data = super().BuildSectionData(required)[RCAR_GEN4_SF_HEADER_SIZE:] + + # Offset 0x0000 / Value 0x00000000 + header = struct.pack('<I', 0) + header += tools.get_bytes(0xff, 0x3008) + # Offset 0x300c / Value 0x00000000 + header += struct.pack('<I', 0) + header += tools.get_bytes(0xff, 0x144) + # Offset 0x3154 / Value (payload load address) + header += struct.pack('<I', self.loader_address) + header += tools.get_bytes(0xff, 0x10c) + # Offset 0x3264 / Value (payload size in 4-byte words, aligned to 4k) + header += struct.pack('<I', int(tools.align(len(data), 0x1000) / 4)) + header += tools.get_bytes(0xff, 0x3cd98) + if len(data) > RCAR_GEN4_SF_MAX_LOAD_SIZE: + self.Raise(f'SRAM data longer than {RCAR_GEN4_SF_MAX_LOAD_SIZE} Bytes') + + return header + data diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py index 8225216fbec..a90db3c9351 100644 --- a/tools/binman/ftest.py +++ b/tools/binman/ftest.py @@ -5586,6 +5586,17 @@ fdt fdtmap Extract the devicetree blob from the fdtmap data = self._DoReadFile('347_bl1.dts') self.assertEqual(ATF_BL1_DATA, data[:len(ATF_BL1_DATA)]) + def testRenesasRCarGen4SA0Image(self): + """Test that binman can produce an Renesas R-Car Gen4 SA0 image""" + self._DoTestFile('348_renesas_rcar4_sa0.dts') + + def testRenesasRCarGen4SA0ImageSize(self): + """Test that binman can not produce large Renesas R-Car Gen4 SA0 image""" + with self.assertRaises(ValueError) as exc: + self._DoTestFile('349_renesas_rcar4_sa0_size.dts') + self.assertIn("Node '/binman/renesas-rcar4-sa0': SRAM data longer than 966656 Bytes", + str(exc.exception)) + def testFitFdtOper(self): """Check handling of a specified FIT operation""" entry_args = { diff --git a/tools/binman/test/348_renesas_rcar4_sa0.dts b/tools/binman/test/348_renesas_rcar4_sa0.dts new file mode 100644 index 00000000000..4a8717520f2 --- /dev/null +++ b/tools/binman/test/348_renesas_rcar4_sa0.dts @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0+ + +/dts-v1/; + +/ { + #address-cells = <1>; + #size-cells = <1>; + + binman { + renesas-rcar4-sa0 { + filename = "sa0.bin"; + renesas,loader-address = <0x10>; + }; + }; +}; diff --git a/tools/binman/test/349_renesas_rcar4_sa0_size.dts b/tools/binman/test/349_renesas_rcar4_sa0_size.dts new file mode 100644 index 00000000000..eaf4507260b --- /dev/null +++ b/tools/binman/test/349_renesas_rcar4_sa0_size.dts @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0+ + +/dts-v1/; + +/ { + #address-cells = <1>; + #size-cells = <1>; + + binman { + renesas-rcar4-sa0 { + filename = "sa0.bin"; + renesas,loader-address = <0x10>; + + fill { /* Oversize fill to cover size check */ + size = <0x140000>; + fill-byte = [ff]; + }; + }; + }; +}; diff --git a/tools/bmp_logo.c b/tools/bmp_logo.c index 74fcadca63e..40213b7887f 100644 --- a/tools/bmp_logo.c +++ b/tools/bmp_logo.c @@ -15,7 +15,7 @@ typedef struct bitmap_s { /* bitmap description */ #define DEFAULT_CMAP_SIZE 16 /* size of default color map */ -void usage(const char *prog) +static void usage(const char *prog) { fprintf(stderr, "Usage: %s [--gen-info|--gen-data|--gen-bmp] file\n", prog); @@ -24,7 +24,7 @@ void usage(const char *prog) /* * Neutralize little endians. */ -uint16_t le_short(uint16_t x) +static uint16_t le_short(uint16_t x) { uint16_t val; uint8_t *p = (uint8_t *)(&x); @@ -35,14 +35,14 @@ uint16_t le_short(uint16_t x) return val; } -void skip_bytes (FILE *fp, int n) +static void skip_bytes(FILE *fp, int n) { while (n-- > 0) fgetc (fp); } __attribute__ ((__noreturn__)) -int error (char * msg, FILE *fp) +static int error(char *msg, FILE *fp) { fprintf (stderr, "ERROR: %s\n", msg); @@ -51,7 +51,7 @@ int error (char * msg, FILE *fp) exit (EXIT_FAILURE); } -void gen_info(bitmap_t *b, uint16_t n_colors) +static void gen_info(bitmap_t *b, uint16_t n_colors) { printf("/*\n" " * Automatically generated by \"tools/bmp_logo\"\n" diff --git a/tools/gen_ethaddr_crc.c b/tools/gen_ethaddr_crc.c index e73d0429a04..27717207580 100644 --- a/tools/gen_ethaddr_crc.c +++ b/tools/gen_ethaddr_crc.c @@ -16,12 +16,12 @@ #define ARP_HLEN_ASCII (ARP_HLEN * 2) + (ARP_HLEN - 1) /* with separators */ #define ARP_HLEN_LAZY (ARP_HLEN * 2) /* separatorless hardware address length */ -uint8_t nibble_to_hex(const char *nibble, bool lo) +static uint8_t nibble_to_hex(const char *nibble, bool lo) { return (strtol(nibble, NULL, 16) << (lo ? 0 : 4)) & (lo ? 0x0f : 0xf0); } -int process_mac(const char *mac_address) +static int process_mac(const char *mac_address) { uint8_t ethaddr[ARP_HLEN + 1] = { 0x00 }; uint_fast8_t i = 0; @@ -45,7 +45,7 @@ int process_mac(const char *mac_address) return 0; } -void print_usage(char *cmdname) +static void print_usage(char *cmdname) { printf("Usage: %s <mac_address>\n", cmdname); puts("<mac_address> may be with or without separators."); diff --git a/tools/mkenvimage.c b/tools/mkenvimage.c index 885cdb1390e..944ec82e761 100644 --- a/tools/mkenvimage.c +++ b/tools/mkenvimage.c @@ -47,7 +47,7 @@ static void usage(const char *exec_name) exec_name); } -long int xstrtol(const char *s) +static long int xstrtol(const char *s) { long int tmp; diff --git a/tools/ublimage.c b/tools/ublimage.c index a1bd807bfa0..8926d5b178b 100644 --- a/tools/ublimage.c +++ b/tools/ublimage.c @@ -219,7 +219,7 @@ static void ublimage_set_header(void *ptr, struct stat *sbuf, int ifd, parse_cfg_file(ublhdr, params->imagename); } -int ublimage_check_params(struct image_tool_params *params) +static int ublimage_check_params(struct image_tool_params *params) { if (!params) return CFG_INVALID; |