summaryrefslogtreecommitdiff
path: root/src/ec/hp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ec/hp')
-rw-r--r--src/ec/hp/kbc1126/Kconfig14
-rw-r--r--src/ec/hp/kbc1126/Makefile.inc12
-rw-r--r--src/ec/hp/kbc1126/ecfw_ptr.c16
-rw-r--r--src/ec/hp/kbc1126/ecfw_ptr.h20
4 files changed, 48 insertions, 14 deletions
diff --git a/src/ec/hp/kbc1126/Kconfig b/src/ec/hp/kbc1126/Kconfig
index cb4ddec7e4..5e6edd6a69 100644
--- a/src/ec/hp/kbc1126/Kconfig
+++ b/src/ec/hp/kbc1126/Kconfig
@@ -27,6 +27,12 @@ config KBC1126_FIRMWARE
Select this option to add the two firmware blobs for KBC1126.
You need these two blobs to power on your machine.
+config ECFW_PTR_ADDR
+ default 0xffffff00
+
+config ECFW_PTR_SIZE
+ default 8
+
config KBC1126_FW1
string "KBC1126 firmware #1 path and filename"
depends on KBC1126_FIRMWARE
@@ -37,9 +43,9 @@ config KBC1126_FW1
vendor firmware.
config KBC1126_FW1_OFFSET
- string "Offset of KBC1126 firmware #1"
+ hex "Offset of KBC1126 firmware #1"
depends on KBC1126_FIRMWARE
- default "0xfffe8000"
+ default 0xfffe8000
config KBC1126_FW2
string "KBC1126 filename #2 path and filename"
@@ -51,8 +57,8 @@ config KBC1126_FW2
vendor firmware.
config KBC1126_FW2_OFFSET
- string "Offset of KBC1126 firmware #2"
+ hex "Offset of KBC1126 firmware #2"
depends on KBC1126_FIRMWARE
- default "0xfffd0000"
+ default 0xfffd0000
endif
diff --git a/src/ec/hp/kbc1126/Makefile.inc b/src/ec/hp/kbc1126/Makefile.inc
index 4d7d46d9e7..3f7fa19b5d 100644
--- a/src/ec/hp/kbc1126/Makefile.inc
+++ b/src/ec/hp/kbc1126/Makefile.inc
@@ -1,7 +1,8 @@
## SPDX-License-Identifier: GPL-2.0-only
ifeq ($(CONFIG_EC_HP_KBC1126_ECFW_IN_CBFS),y)
-KBC1126_EC_INSERT:=$(top)/util/kbc1126/kbc1126_ec_insert
+
+bootblock-y += ecfw_ptr.c
ifeq ($(CONFIG_KBC1126_FIRMWARE),y)
cbfs-files-y += ecfw1.bin
@@ -16,15 +17,6 @@ ecfw2.bin-position := $(CONFIG_KBC1126_FW2_OFFSET)
ecfw2.bin-type := raw
endif
-$(call add_intermediate, kbc1126_ec_insert)
-ifeq ($(CONFIG_KBC1126_FIRMWARE),y)
- printf " Building kbc1126_ec_insert.\n"
- $(MAKE) -C util/kbc1126
- printf " KBC1126 Inserting KBC1126 firmware blobs.\n"
- $(KBC1126_EC_INSERT) $(obj)/coreboot.pre \
- $(CONFIG_KBC1126_FW1_OFFSET) $(CONFIG_KBC1126_FW2_OFFSET)
-endif
-
build_complete::
ifeq ($(CONFIG_KBC1126_FIRMWARE),)
printf "\n** WARNING **\n"
diff --git a/src/ec/hp/kbc1126/ecfw_ptr.c b/src/ec/hp/kbc1126/ecfw_ptr.c
new file mode 100644
index 0000000000..8a29c6cd33
--- /dev/null
+++ b/src/ec/hp/kbc1126/ecfw_ptr.c
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <endian.h>
+#include "ecfw_ptr.h"
+
+/*
+ * Address info for EC SMSC KBC1098/KBC1126 to find their firmware blobs,
+ * linked to CONFIG_ECFW_PTR_ADDR via src/arch/x86/bootblock.ld
+ */
+__attribute__((used, __section__(".ecfw_ptr")))
+const struct ecfw_ptr ecfw_ptr = {
+ .fw1.off = cpu_to_be16((uint16_t)(CONFIG_KBC1126_FW1_OFFSET >> 8)),
+ .fw1.inv = cpu_to_be16((uint16_t)~(CONFIG_KBC1126_FW1_OFFSET >> 8)),
+ .fw2.off = cpu_to_be16((uint16_t)(CONFIG_KBC1126_FW2_OFFSET >> 8)),
+ .fw2.inv = cpu_to_be16((uint16_t)~(CONFIG_KBC1126_FW2_OFFSET >> 8)),
+};
diff --git a/src/ec/hp/kbc1126/ecfw_ptr.h b/src/ec/hp/kbc1126/ecfw_ptr.h
new file mode 100644
index 0000000000..acf54f20dd
--- /dev/null
+++ b/src/ec/hp/kbc1126/ecfw_ptr.h
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef _EC_HP_KBC1126_PTR_H
+#define _EC_HP_KBC1126_PTR_H
+
+#include <stdint.h>
+
+struct __attribute__((__packed__)) ecfw_addr {
+ /* 8-byte offset of firmware blob in big endian */
+ uint16_t off;
+ /* bitwise inverse of "off", for error checking */
+ uint16_t inv;
+};
+
+struct __attribute__((__packed__)) ecfw_ptr {
+ struct ecfw_addr fw1;
+ struct ecfw_addr fw2;
+};
+
+#endif