summaryrefslogtreecommitdiffstats
path: root/src/ec/starlabs
diff options
context:
space:
mode:
authorSean Rhodes <sean@starlabs.systems>2022-10-28 08:37:22 +0100
committerFelix Held <felix-coreboot@felixheld.de>2022-11-07 14:19:24 +0000
commitb42ca4d0b2fafe7214396d30a1a833ac33cf85bc (patch)
tree910b28ff69188137c66a2faa8f837f405549ef72 /src/ec/starlabs
parente477b0e8de6cd9cf97f381e9ff14934f8ccc33e1 (diff)
downloadcoreboot-b42ca4d0b2fafe7214396d30a1a833ac33cf85bc.tar.gz
coreboot-b42ca4d0b2fafe7214396d30a1a833ac33cf85bc.tar.bz2
coreboot-b42ca4d0b2fafe7214396d30a1a833ac33cf85bc.zip
ec/starlabs/merlin: Add support for enabling the mirror flag
When enabled, the EC will mirror the firmware contained inside the coreboot ROM. This allows it to be updated at the same time as coreboot. Signed-off-by: Sean Rhodes <sean@starlabs.systems> Change-Id: Ief088e012b65be32648f581fc3190e1000bca241 Reviewed-on: https://review.coreboot.org/c/coreboot/+/68938 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Diffstat (limited to 'src/ec/starlabs')
-rw-r--r--src/ec/starlabs/merlin/Kconfig7
-rw-r--r--src/ec/starlabs/merlin/ec.h4
-rw-r--r--src/ec/starlabs/merlin/ite.c20
-rw-r--r--src/ec/starlabs/merlin/variants/adl/ecdefs.h2
-rw-r--r--src/ec/starlabs/merlin/variants/apl/ecdefs.h1
-rw-r--r--src/ec/starlabs/merlin/variants/cezanne/ecdefs.h1
-rw-r--r--src/ec/starlabs/merlin/variants/cml/ecdefs.h1
-rw-r--r--src/ec/starlabs/merlin/variants/glk/ecdefs.h1
-rw-r--r--src/ec/starlabs/merlin/variants/glkr/ecdefs.h1
-rw-r--r--src/ec/starlabs/merlin/variants/kbl/ecdefs.h1
-rw-r--r--src/ec/starlabs/merlin/variants/merlin/ecdefs.h1
-rw-r--r--src/ec/starlabs/merlin/variants/tgl/ecdefs.h1
12 files changed, 40 insertions, 1 deletions
diff --git a/src/ec/starlabs/merlin/Kconfig b/src/ec/starlabs/merlin/Kconfig
index 6ccd21791c3e..203fd4884bb2 100644
--- a/src/ec/starlabs/merlin/Kconfig
+++ b/src/ec/starlabs/merlin/Kconfig
@@ -64,6 +64,13 @@ config EC_STARLABS_MAX_CHARGE
help
Select if the mainboard supports limiting the maximum charge of the battery.
+config EC_STARLABS_MIRROR_FLAG
+ bool
+ default n
+ depends on EC_STARLABS_ITE
+ help
+ Select if the EC should mirror the EC firmware contained in the coreboot ROM.
+
config EC_STARLABS_MERLIN
bool "Use open-source Merlin EC Firmware"
default n
diff --git a/src/ec/starlabs/merlin/ec.h b/src/ec/starlabs/merlin/ec.h
index ca1d081f0c5c..ff01c896790b 100644
--- a/src/ec/starlabs/merlin/ec.h
+++ b/src/ec/starlabs/merlin/ec.h
@@ -98,6 +98,10 @@
#define KBL_DISABLED 0x00
#define KBL_ENABLED 0xdd
+/* Mirror Flag */
+#define MIRROR_DISABLED 0x00
+#define MIRROR_ENABLED 0x01
+
uint16_t ec_get_version(void);
#endif
diff --git a/src/ec/starlabs/merlin/ite.c b/src/ec/starlabs/merlin/ite.c
index 357c67cda5e6..d2d7c454d3a1 100644
--- a/src/ec/starlabs/merlin/ite.c
+++ b/src/ec/starlabs/merlin/ite.c
@@ -70,6 +70,7 @@ static void merlin_init(struct device *dev)
* trackpad_state
* kbl_brightness
* kbl_state
+ * mirror_flag
*/
/*
@@ -247,6 +248,25 @@ static void merlin_init(struct device *dev)
1,
kbl_state,
ARRAY_SIZE(kbl_state)));
+
+ /*
+ * Mirror Flag
+ *
+ * Setting: mirror_flag
+ *
+ * Values: Off, On
+ * Default: On
+ */
+ const uint8_t mirror_flag[] = {
+ MIRROR_DISABLED,
+ MIRROR_ENABLED
+ };
+ if (CONFIG(EC_STARLABS_MIRROR_FLAG))
+ ec_write(ECRAM_MIRROR_FLAG,
+ get_ec_value_from_option("mirror_flag",
+ 1,
+ mirror_flag,
+ ARRAY_SIZE(mirror_flag)));
}
static struct device_operations ops = {
diff --git a/src/ec/starlabs/merlin/variants/adl/ecdefs.h b/src/ec/starlabs/merlin/variants/adl/ecdefs.h
index 28f7e4b84fff..18480e2a9db7 100644
--- a/src/ec/starlabs/merlin/variants/adl/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/adl/ecdefs.h
@@ -23,5 +23,5 @@
#define ECRAM_MAX_CHARGE 0x1a
#define ECRAM_FAN_MODE 0x1b
#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
-
+#define ECRAM_MIRROR_FLAG 0x05
#endif
diff --git a/src/ec/starlabs/merlin/variants/apl/ecdefs.h b/src/ec/starlabs/merlin/variants/apl/ecdefs.h
index fa7e79b1486d..5cbe14e36d92 100644
--- a/src/ec/starlabs/merlin/variants/apl/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/apl/ecdefs.h
@@ -23,5 +23,6 @@
#define ECRAM_MAX_CHARGE dead_code_t(uint8_t)
#define ECRAM_FAN_MODE dead_code_t(uint8_t)
#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
+#define ECRAM_MIRROR_FLAG 0x04
#endif
diff --git a/src/ec/starlabs/merlin/variants/cezanne/ecdefs.h b/src/ec/starlabs/merlin/variants/cezanne/ecdefs.h
index 6a3bad928632..0826456979b8 100644
--- a/src/ec/starlabs/merlin/variants/cezanne/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/cezanne/ecdefs.h
@@ -23,5 +23,6 @@
#define ECRAM_MAX_CHARGE 0x23
#define ECRAM_FAN_MODE 0x24
#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
+#define ECRAM_MIRROR_FLAG 0x05
#endif
diff --git a/src/ec/starlabs/merlin/variants/cml/ecdefs.h b/src/ec/starlabs/merlin/variants/cml/ecdefs.h
index 6a24bc4debc7..0a2654bf8fd8 100644
--- a/src/ec/starlabs/merlin/variants/cml/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/cml/ecdefs.h
@@ -23,5 +23,6 @@
#define ECRAM_KBL_BRIGHTNESS 0x19
#define ECRAM_FN_LOCK_STATE 0x2c
#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
+#define ECRAM_MIRROR_FLAG 0x04
#endif
diff --git a/src/ec/starlabs/merlin/variants/glk/ecdefs.h b/src/ec/starlabs/merlin/variants/glk/ecdefs.h
index fefdd141c97c..b2e2f2f8ab7b 100644
--- a/src/ec/starlabs/merlin/variants/glk/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/glk/ecdefs.h
@@ -23,5 +23,6 @@
#define ECRAM_MAX_CHARGE dead_code_t(uint8_t)
#define ECRAM_FAN_MODE dead_code_t(uint8_t)
#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
+#define ECRAM_MIRROR_FLAG 0x04
#endif
diff --git a/src/ec/starlabs/merlin/variants/glkr/ecdefs.h b/src/ec/starlabs/merlin/variants/glkr/ecdefs.h
index 038c378fb25c..ecc117c9907c 100644
--- a/src/ec/starlabs/merlin/variants/glkr/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/glkr/ecdefs.h
@@ -23,5 +23,6 @@
#define ECRAM_MAX_CHARGE dead_code_t(uint8_t)
#define ECRAM_FAN_MODE dead_code_t(uint8_t)
#define ECRAM_FAST_CHARGE 0x18
+#define ECRAM_MIRROR_FLAG dead_code_t(uint8_t)
#endif
diff --git a/src/ec/starlabs/merlin/variants/kbl/ecdefs.h b/src/ec/starlabs/merlin/variants/kbl/ecdefs.h
index 3b693173af76..8f3355dd0a1a 100644
--- a/src/ec/starlabs/merlin/variants/kbl/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/kbl/ecdefs.h
@@ -23,5 +23,6 @@
#define ECRAM_FN_CTRL_REVERSE 0x43
#define ECRAM_MAX_CHARGE dead_code_t(uint8_t)
#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
+#define ECRAM_MIRROR_FLAG 0x04
#endif
diff --git a/src/ec/starlabs/merlin/variants/merlin/ecdefs.h b/src/ec/starlabs/merlin/variants/merlin/ecdefs.h
index f02c73a27cf7..08f80cb1f812 100644
--- a/src/ec/starlabs/merlin/variants/merlin/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/merlin/ecdefs.h
@@ -20,5 +20,6 @@
#define ECRAM_FAN_MODE 0x50
#define ECRAM_MAX_CHARGE 0x51
#define ECRAM_FAST_CHARGE 0x52
+#define ECRAM_MIRROR_FLAG 0x05
#endif
diff --git a/src/ec/starlabs/merlin/variants/tgl/ecdefs.h b/src/ec/starlabs/merlin/variants/tgl/ecdefs.h
index cbc7b86e108e..c17b02542b7e 100644
--- a/src/ec/starlabs/merlin/variants/tgl/ecdefs.h
+++ b/src/ec/starlabs/merlin/variants/tgl/ecdefs.h
@@ -23,5 +23,6 @@
#define ECRAM_MAX_CHARGE 0x1a
#define ECRAM_FAN_MODE 0x1b
#define ECRAM_FAST_CHARGE dead_code_t(uint8_t)
+#define ECRAM_MIRROR_FLAG 0x05
#endif