[PATCH v1 1/8] cros: add common helpers for GPT flags

dmukhin at ford.com dmukhin at ford.com
Fri Jun 5 05:39:00 CEST 2026


From: Denis Mukhin <dmukhin at ford.com> 

Add common helper to decode/encode ChromuimOS-style GPT attributes
similarly to [1].

[1] https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/master/cgpt
Signed-off-by: Denis Mukhin <dmukhin at ford.com>
---
 include/cros_flags.h | 74 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)
 create mode 100644 include/cros_flags.h

diff --git a/include/cros_flags.h b/include/cros_flags.h
new file mode 100644
index 000000000000..e9355fa5e908
--- /dev/null
+++ b/include/cros_flags.h
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Bit definitions and masks for GPT attributes for Chromium OS.
+ *
+ *  63-61  -- (reserved)
+ *     60  -- read-only
+ *  59-58  -- (reserved)
+ *     57  -- error counter
+ *     56  -- success
+ *  55-52  -- tries
+ *  51-48  -- priority
+ *   47-3  -- UEFI: reserved for future use
+ *      2  -- UEFI: Legacy BIOS bootable
+ *      1  -- UEFI: partition is not mapped
+ *      0  -- UEFI: partition is required
+ *
+ * Reference:
+ *   https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/master/cgpt
+ */
+
+#ifndef _CROS_FLAGS_H
+#define _CROS_FLAGS_H
+
+#define CROS_FLAG_PRIORITY_MASK      0x000fU
+#define CROS_FLAG_TRIES_MASK         0x00f0U
+#define CROS_FLAG_SUCCESSFUL_MASK    0x0100U
+
+#define CROS_FLAG_PRIORITY_SHIFT     0U
+#define CROS_FLAG_TRIES_SHIFT        4U
+#define CROS_FLAG_SUCCESSFUL_SHIFT   8U
+
+static inline unsigned int
+cros_flags_get_priority(unsigned int flags)
+{
+	return (flags & CROS_FLAG_PRIORITY_MASK) >> CROS_FLAG_PRIORITY_SHIFT;
+}
+
+static inline unsigned int
+cros_flags_set_priority(unsigned int flags, unsigned int priority)
+{
+	flags &= ~CROS_FLAG_PRIORITY_MASK;
+	flags |= (priority & 0xf) << CROS_FLAG_PRIORITY_SHIFT;
+	return flags;
+}
+
+static inline unsigned int
+cros_flags_get_tries(unsigned int flags)
+{
+	return (flags & CROS_FLAG_TRIES_MASK) >> CROS_FLAG_TRIES_SHIFT;
+}
+
+static inline unsigned int
+cros_flags_set_tries(unsigned int flags, unsigned int tries)
+{
+	flags &= ~CROS_FLAG_TRIES_MASK;
+	flags |= (tries & 0xf) << CROS_FLAG_TRIES_SHIFT;
+	return flags;
+}
+
+static inline bool
+cros_flags_get_successful(unsigned int flags)
+{
+	return (flags & CROS_FLAG_SUCCESSFUL_MASK) >> CROS_FLAG_SUCCESSFUL_SHIFT;
+}
+
+static inline unsigned int
+cros_flags_set_successful(unsigned int flags, bool ok)
+{
+	flags &= ~CROS_FLAG_SUCCESSFUL_MASK;
+	flags |= ok << CROS_FLAG_SUCCESSFUL_SHIFT;
+	return flags;
+}
+
+#endif /* _CROS_FLAGS_H */
-- 
2.54.0



More information about the U-Boot mailing list