[Concept,4/8] tkey: Add the signer firmware

Message ID 20251019072313.3235339-5-sjg@u-boot.org
State New
Headers
Series tkey: Provide basic support for Tillitis TKey |

Commit Message

Simon Glass Oct. 19, 2025, 7:23 a.m. UTC
  From: Simon Glass <sjg@chromium.org>

Add a binary for the TKey signer, so that it can be downloaded to the
key when needed.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/misc/Makefile          |   1 +
 drivers/misc/signer.bin-v1.0.0 | Bin 0 -> 28024 bytes
 include/tkey.h                 |   5 +++++
 scripts/Makefile.lib           |  20 ++++++++++++++++++++
 4 files changed, 26 insertions(+)
 create mode 100644 drivers/misc/signer.bin-v1.0.0

index 8f4f4c7e512..a16447795b1 100644
  

Patch

diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index 23fd8f8ef3b..8db02bb9614 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -6,6 +6,7 @@ 
 obj-$(CONFIG_$(PHASE_)MISC) += misc-uclass.o
 obj-$(CONFIG_$(PHASE_)NVMEM) += nvmem.o
 obj-$(CONFIG_TKEY) += tkey-uclass.o
+obj-$(CONFIG_TKEY) += signer-1.0.0.o
 
 obj-$(CONFIG_$(PHASE_)CROS_EC) += cros_ec.o
 obj-$(CONFIG_$(PHASE_)CROS_EC_SANDBOX) += cros_ec_sandbox.o
diff --git a/drivers/misc/signer.bin-v1.0.0 b/drivers/misc/signer.bin-v1.0.0
new file mode 100644
index 0000000000000000000000000000000000000000..c80dfe12d9989436e4e54beaaaea6ec3df64a128
GIT binary patch
literal 28024
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
QI;(HXUl&+MN{ksqY<O;=)c^nh

literal 0
HcmV?d00001

diff --git a/include/tkey.h b/include/tkey.h
--- a/include/tkey.h
+++ b/include/tkey.h
@@ -23,6 +23,11 @@  struct udevice;
 #define TKEY_DISK_KEY_SIZE		32
 #define TKEY_HASH_SIZE			32
 
+/* Embedded TKey signer binary */
+extern char __signer_1_0_0_begin[];
+extern char __signer_1_0_0_end[];
+#define TKEY_SIGNER_SIZE	(__signer_1_0_0_end - __signer_1_0_0_begin)
+
 /**
  * struct tkey_ops - The functions that a TKey driver must implement.
  *
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index af8f3725095..6a4f943fcab 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -502,6 +502,26 @@  cmd_S_ttf=						\
 $(obj)/%.S: $(src)/%.ttf
 	$(call cmd,S_ttf)
 
+# TKey signer binary
+# ---------------------------------------------------------------------------
+
+# Generate an assembly file to wrap the TKey signer binary
+quiet_cmd_S_signer= SIGNER  $@
+cmd_S_signer=						\
+(							\
+	echo '.section .rodata.signer.init,"a"';	\
+	echo '.balign 16';				\
+	echo '.global __signer_$(subst .,_,$(*F))_begin';		\
+	echo '__signer_$(subst .,_,$(*F))_begin:';			\
+	echo '.incbin "$<" ';				\
+	echo '__signer_$(subst .,_,$(*F))_end:';			\
+	echo '.global __signer_$(subst .,_,$(*F))_end';		\
+	echo '.balign 16';				\
+) > $@
+
+$(obj)/signer-%.S: $(src)/signer.bin-v%
+	$(call cmd,S_signer)
+
 # Splash logos
 # ---------------------------------------------------------------------------