summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Boichat <drinkcat@google.com>2017-06-03 12:06:37 +0800
committerchrome-bot <chrome-bot@chromium.org>2017-06-13 21:23:56 -0700
commitd132e5ecbd93fa598fc495ec90718ea853962ef7 (patch)
treea90d7fe4a7db29aa8bcade2867a33e66165964f1
parent8ba7c1762c68ad81df688c407ecf1836ce177e75 (diff)
downloadchrome-ec-d132e5ecbd93fa598fc495ec90718ea853962ef7.tar.gz
stm32/usb: Add support for board-specific serial number
By default, read USB serial number from flash, but provide a way for boards to override the function (e.g., to read serial number from unique chip id). BRANCH=none BUG=b:62280271 TEST=Flash hammer lsusb -d 18d1:5022 -v -v | grep iSerial shows different chip IDs on different boards. Change-Id: I0917752bb8e04c1eff4dffc0b3714f63dcd942b0 Reviewed-on: https://chromium-review.googlesource.com/523045 Commit-Ready: Nicolas Boichat <drinkcat@chromium.org> Tested-by: Nicolas Boichat <drinkcat@chromium.org> Reviewed-by: Nick Sanders <nsanders@chromium.org> Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
-rw-r--r--chip/stm32/usb.c9
-rw-r--r--chip/stm32/usb_dwc.c9
-rw-r--r--include/system.h6
3 files changed, 22 insertions, 2 deletions
diff --git a/chip/stm32/usb.c b/chip/stm32/usb.c
index 018a26ce03..5788873df0 100644
--- a/chip/stm32/usb.c
+++ b/chip/stm32/usb.c
@@ -657,13 +657,20 @@ static int usb_set_serial(const char *serialno)
return EC_SUCCESS;
}
+/* By default, read serial number from flash, can be overridden. */
+__attribute__((weak))
+const char *board_read_serial(void)
+{
+ return flash_read_serial();
+}
+
/* Retrieve serial number from pstate flash. */
static int usb_load_serial(void)
{
const char *serialno;
int rv;
- serialno = flash_read_serial();
+ serialno = board_read_serial();
if (!serialno)
return EC_ERROR_ACCESS_DENIED;
diff --git a/chip/stm32/usb_dwc.c b/chip/stm32/usb_dwc.c
index 7ed0c20c60..fa5797079a 100644
--- a/chip/stm32/usb_dwc.c
+++ b/chip/stm32/usb_dwc.c
@@ -1371,13 +1371,20 @@ static int usb_set_serial(const char *serialno)
return EC_SUCCESS;
}
+/* By default, read serial number from flash, can be overridden. */
+__attribute__((weak))
+const char *board_read_serial(void)
+{
+ return flash_read_serial();
+}
+
/* Retrieve serial number from pstate flash. */
static int usb_load_serial(void)
{
const char *serialno;
int rv;
- serialno = flash_read_serial();
+ serialno = board_read_serial();
if (!serialno)
return EC_ERROR_ACCESS_DENIED;
diff --git a/include/system.h b/include/system.h
index c7304a4d92..0f01907574 100644
--- a/include/system.h
+++ b/include/system.h
@@ -285,6 +285,12 @@ const char *system_get_chip_revision(void);
*/
int system_get_chip_unique_id(uint8_t **id);
+/**
+ * Optional board-level callback functions to read a unique serial number per
+ * chip. Default implementation reads from flash (flash_read_serial).
+ */
+const char *board_read_serial(void) __attribute__((weak));
+
/*
* Common bbram entries. Chips don't necessarily need to implement
* all of these, error will be returned from system_get/set_bbram if