board: ge: common: vpd: separate I2C specific code

This separates the I2C specific code from the generic
GE vital product data code, so that the generic parts
can be used on hardware with VPD stored in SPI flash
memory.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
Sebastian Reichel 2020-09-02 19:31:45 +02:00 committed by Stefano Babic
parent 987b8f614c
commit def6f53d21
4 changed files with 27 additions and 12 deletions

View file

@ -429,7 +429,7 @@ static void set_confidx(const struct vpd_cache* vpd)
int board_init(void)
{
if (!read_vpd(&vpd, vpd_callback)) {
if (!read_i2c_vpd(&vpd, vpd_callback)) {
int ret, rescan;
vpd.is_read = true;

View file

@ -110,9 +110,9 @@ static const size_t HEADER_BLOCK_ECC_LEN = 4;
static const u8 ECC_BLOCK_ID = 0xFF;
static int vpd_reader(size_t size, u8 *data, struct vpd_cache *userdata,
int (*fn)(struct vpd_cache *, u8 id, u8 version, u8 type,
size_t size, u8 const *data))
int vpd_reader(size_t size, u8 *data, struct vpd_cache *userdata,
int (*fn)(struct vpd_cache *, u8 id, u8 version, u8 type,
size_t size, u8 const *data))
{
if (size < HEADER_BLOCK_LEN || !data || !fn)
return -EINVAL;
@ -200,9 +200,9 @@ static int vpd_reader(size_t size, u8 *data, struct vpd_cache *userdata,
}
}
int read_vpd(struct vpd_cache *cache,
int (*process_block)(struct vpd_cache *, u8 id, u8 version,
u8 type, size_t size, u8 const *data))
int read_i2c_vpd(struct vpd_cache *cache,
int (*process_block)(struct vpd_cache *, u8 id, u8 version,
u8 type, size_t size, u8 const *data))
{
struct udevice *dev;
int ret;

View file

@ -16,7 +16,22 @@ struct vpd_cache;
*
* Returns Non-zero on error. Negative numbers encode errno.
*/
int read_vpd(struct vpd_cache *cache,
int (*process_block)(struct vpd_cache *,
u8 id, u8 version, u8 type,
size_t size, u8 const *data));
int read_i2c_vpd(struct vpd_cache *cache,
int (*process_block)(struct vpd_cache *, u8 id, u8 version,
u8 type, size_t size, u8 const *data));
/*
* Read VPD from given data, verify content, call callback for each vital
* product data block.
*
* size: size of the raw VPD data in bytes
* data: raw VPD data read from device
* cache: structure used by process block to store VPD information
* process_block: callback called for each VPD data block
*
* Returns Non-zero on error. Negative numbers encode errno.
*/
int vpd_reader(size_t size, u8 *data, struct vpd_cache *cache,
int (*process_block)(struct vpd_cache *, u8 id, u8 version, u8 type,
size_t size, u8 const *data));

View file

@ -225,7 +225,7 @@ int board_late_init(void)
struct vpd_cache vpd;
memset(&vpd, 0, sizeof(vpd));
res = read_vpd(&vpd, vpd_callback);
res = read_i2c_vpd(&vpd, vpd_callback);
if (!res)
process_vpd(&vpd);
else