summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/vendorcode/google/chromeos/chromeos.h19
-rw-r--r--src/vendorcode/google/chromeos/splash.c4
-rw-r--r--src/vendorcode/google/chromeos/tpm_factory_config.c28
3 files changed, 37 insertions, 14 deletions
diff --git a/src/vendorcode/google/chromeos/chromeos.h b/src/vendorcode/google/chromeos/chromeos.h
index a4315c360f..540f3635aa 100644
--- a/src/vendorcode/google/chromeos/chromeos.h
+++ b/src/vendorcode/google/chromeos/chromeos.h
@@ -35,17 +35,28 @@ void chromeos_set_ramoops(void *ram_oops, size_t size);
*/
uint64_t chromeos_get_factory_config(void);
/*
- * Determines whether a ChromeOS device is branded as a Chromebook Plus
+ * Determines whether a ChromeOS device is branded as a Chromebook-Plus
* based on specific bit flags:
*
* - Bit 4 (0x10): Indicates whether the device chassis has the
* "chromebook-plus" branding.
- * - Bits 3-0 (0x1): Must be 0x1 to signify compliance with Chromebook Plus
+ * - Bits 3-0 (0x1): Must be 0x1 to signify compliance with Chromebook-Plus
* hardware specifications.
*
- * To be considered a Chromebook Plus, either of these conditions needs to be met.
+ * To be considered a Chromebook-Plus, both of these conditions need to be met.
*/
-bool chromeos_device_branded_plus(void);
+bool chromeos_device_branded_plus_hard(void);
+
+/*
+ * Determines whether a ChromeOS device is soft-branded as a Chromebook-Plus
+ * after meeting below conditions:
+ *
+ * - Device is compliant to the Chromebook-Plus Hardware Specification.
+ * - Business decision makes this device qualified as Chromebook-Plus.
+ *
+ * To be considered a soft-branded Chromebook-Plus, both of these conditions need to be met.
+ */
+bool chromeos_device_branded_plus_soft(void);
/*
* Declaration for mainboards to use to generate ACPI-specific ChromeOS needs.
diff --git a/src/vendorcode/google/chromeos/splash.c b/src/vendorcode/google/chromeos/splash.c
index 3532fb8f5a..f63f52615c 100644
--- a/src/vendorcode/google/chromeos/splash.c
+++ b/src/vendorcode/google/chromeos/splash.c
@@ -5,7 +5,9 @@
const char *bmp_logo_filename(void)
{
- if (chromeos_device_branded_plus())
+ if (chromeos_device_branded_plus_hard())
+ return "cb_plus_logo.bmp";
+ else if (chromeos_device_branded_plus_soft())
return "cb_plus_logo.bmp";
else
return "cb_logo.bmp";
diff --git a/src/vendorcode/google/chromeos/tpm_factory_config.c b/src/vendorcode/google/chromeos/tpm_factory_config.c
index 44fb9f0fef..5ce08626d9 100644
--- a/src/vendorcode/google/chromeos/tpm_factory_config.c
+++ b/src/vendorcode/google/chromeos/tpm_factory_config.c
@@ -2,13 +2,12 @@
#include <assert.h>
#include <console/console.h>
+#include <drivers/vpd/vpd.h>
#include <security/tpm/tss.h>
#include <types.h>
#include <vendorcode/google/chromeos/chromeos.h>
#define CHROMEBOOK_PLUS_HARD_BRANDED BIT(4)
-#define CHROMEBOOK_PLUS_SOFT_BRANDED BIT(0)
-#define CHROMEBOOK_PLUS_DEVICE (CHROMEBOOK_PLUS_HARD_BRANDED | CHROMEBOOK_PLUS_SOFT_BRANDED)
uint64_t chromeos_get_factory_config(void)
{
@@ -39,22 +38,33 @@ uint64_t chromeos_get_factory_config(void)
}
/*
- * Determines whether a ChromeOS device is branded as a Chromebook Plus
+ * Determines whether a ChromeOS device is branded as a Chromebook-Plus
* based on specific bit flags:
*
* - Bit 4 (0x10): Indicates whether the device chassis has the
* "chromebook-plus" branding.
- * - Bits 3-0 (0x1): Must be 0x1 to signify compliance with Chromebook Plus
- * hardware specifications.
- *
- * To be considered a Chromebook Plus, either of these conditions needs to be met.
*/
-bool chromeos_device_branded_plus(void)
+bool chromeos_device_branded_plus_hard(void)
{
uint64_t factory_config = chromeos_get_factory_config();
if (factory_config == UNDEFINED_FACTORY_CONFIG)
return false;
- return factory_config & CHROMEBOOK_PLUS_DEVICE;
+ return (factory_config & CHROMEBOOK_PLUS_HARD_BRANDED) == CHROMEBOOK_PLUS_HARD_BRANDED;
+}
+
+/*
+ * Use 'feature_level' populated by ChromeOS libsegmentation library to know if the device
+ * is a chromebook plus or not.
+ *
+ * Note: After powerwash or dev/normal mode switch, the splash screen may be incorrect
+ * on first boot until VPD is updated.
+ */
+bool chromeos_device_branded_plus_soft(void)
+{
+ if (vpd_get_feature_level() > 1)
+ return true;
+
+ return false;
}