Skip to content

Commit

Permalink
vbe: Start a common header file
Browse files Browse the repository at this point in the history
Move a few things into a new, common header file so that vbe-simple can
share code with the upcoming abrec.

Put struct simple_nvdata in it and rename it.

Signed-off-by: Simon Glass <[email protected]>
  • Loading branch information
sjg20 authored and trini committed Jan 22, 2025
1 parent a1c456d commit 20a1e83
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 25 deletions.
51 changes: 51 additions & 0 deletions boot/vbe_common.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Verified Boot for Embedded (VBE) common functions
*
* Copyright 2024 Google LLC
* Written by Simon Glass <[email protected]>
*/

#ifndef __VBE_COMMON_H
#define __VBE_COMMON_H

#include <linux/types.h>

struct udevice;

enum {
MAX_VERSION_LEN = 256,

NVD_HDR_VER_SHIFT = 0,
NVD_HDR_VER_MASK = 0xf,
NVD_HDR_SIZE_SHIFT = 4,
NVD_HDR_SIZE_MASK = 0xf << NVD_HDR_SIZE_SHIFT,

/* Firmware key-version is in the top 16 bits of fw_ver */
FWVER_KEY_SHIFT = 16,
FWVER_FW_MASK = 0xffff,

NVD_HDR_VER_CUR = 1, /* current version */
};

/**
* struct vbe_nvdata - basic storage format for non-volatile data
*
* This is used for all VBE methods
*
* @crc8: crc8 for the entire record except @crc8 field itself
* @hdr: header size and version (NVD_HDR_...)
* @spare1: unused, must be 0
* @fw_vernum: version and key version (FWVER_...)
* @flags: Flags controlling operation (enum vbe_flags)
*/
struct vbe_nvdata {
u8 crc8;
u8 hdr;
u16 spare1;
u32 fw_vernum;
u32 flags;
u8 spare2[0x34];
};

#endif /* __VBE_ABREC_H */
13 changes: 2 additions & 11 deletions boot/vbe_simple.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,6 @@
#include <u-boot/crc.h>
#include "vbe_simple.h"

/** struct simple_nvdata - storage format for non-volatile data */
struct simple_nvdata {
u8 crc8;
u8 hdr;
u16 spare1;
u32 fw_vernum;
u8 spare2[0x38];
};

static int simple_read_version(struct udevice *dev, struct blk_desc *desc,
u8 *buf, struct simple_state *state)
{
Expand Down Expand Up @@ -57,7 +48,7 @@ static int simple_read_nvdata(struct udevice *dev, struct blk_desc *desc,
{
struct simple_priv *priv = dev_get_priv(dev);
uint hdr_ver, hdr_size, size, crc;
const struct simple_nvdata *nvd;
const struct vbe_nvdata *nvd;
int start;

if (priv->state_size > MMC_MAX_BLOCK_LEN)
Expand All @@ -70,7 +61,7 @@ static int simple_read_nvdata(struct udevice *dev, struct blk_desc *desc,

if (blk_read(desc->bdev, start, 1, buf) != 1)
return log_msg_ret("read", -EIO);
nvd = (struct simple_nvdata *)buf;
nvd = (struct vbe_nvdata *)buf;
hdr_ver = (nvd->hdr & NVD_HDR_VER_MASK) >> NVD_HDR_VER_SHIFT;
hdr_size = (nvd->hdr & NVD_HDR_SIZE_MASK) >> NVD_HDR_SIZE_SHIFT;
if (hdr_ver != NVD_HDR_VER_CUR)
Expand Down
16 changes: 2 additions & 14 deletions boot/vbe_simple.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,8 @@
#ifndef __VBE_SIMPLE_H
#define __VBE_SIMPLE_H

enum {
MAX_VERSION_LEN = 256,

NVD_HDR_VER_SHIFT = 0,
NVD_HDR_VER_MASK = 0xf,
NVD_HDR_SIZE_SHIFT = 4,
NVD_HDR_SIZE_MASK = 0xf << NVD_HDR_SIZE_SHIFT,

/* Firmware key-version is in the top 16 bits of fw_ver */
FWVER_KEY_SHIFT = 16,
FWVER_FW_MASK = 0xffff,

NVD_HDR_VER_CUR = 1, /* current version */
};
#include <linux/types.h>
#include "vbe_common.h"

/** struct simple_priv - information read from the device tree */
struct simple_priv {
Expand Down

0 comments on commit 20a1e83

Please sign in to comment.