Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 85ebd003 authored by Marc Zyngier's avatar Marc Zyngier Committed by David Woodhouse
Browse files

Fix IHEX firmware generation/loading



Fix both the IHEX firmware generation (len field always null, and EOF
marker a byte too short) and loading (struct ihex_binrec needs to be
packed to reflect the on-disk structure).

Signed-off-by: default avatarMarc Zyngier <maz@misterjones.org>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent f1136d02
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -250,19 +250,19 @@ static void file_record(struct ihex_binrec *record)

static int output_records(int outfd)
{
	unsigned char zeroes[5] = {0, 0, 0, 0, 0};
	unsigned char zeroes[6] = {0, 0, 0, 0, 0, 0};
	struct ihex_binrec *p = records;

	while (p) {
		uint16_t writelen = (p->len + 9) & ~3;

		p->addr = htonl(p->addr);
		p->len = htonl(p->len);
		p->len = htons(p->len);
		write(outfd, &p->addr, writelen);
		p = p->next;
	}
	/* EOF record is zero length, since we don't bother to represent
	   the type field in the binary version */
	write(outfd, zeroes, 5);
	write(outfd, zeroes, 6);
	return 0;
}
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ struct ihex_binrec {
	__be32 addr;
	__be16 len;
	uint8_t data[0];
} __attribute__((aligned(4)));
} __attribute__((packed));

/* Find the next record, taking into account the 4-byte alignment */
static inline const struct ihex_binrec *