提交 05e25486 编写于 作者: Z Zong Li 提交者: Leo Yu-Chi Liang

board: sifive: Add an interface to get PCB revision

There are different DDR parameter settings for different board
revisions. Add a new interface to get the PCB revision to determine
which DT should be selected at runtime.
Signed-off-by: NZong Li <zong.li@sifive.com>
Reviewed-by: NLeo Yu-Chi Liang <ycliang@andestech.com>
上级 564d630e
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) 2021 SiFive, Inc.
*
* Zong Li <zong.li@sifve.com>
*/
#ifndef _ASM_RISCV_EEPROM_H
#define _ASM_RISCV_EEPROM_H
#define PCB_REVISION_REV3 0x3
u8 get_pcb_revision_from_eeprom(void);
#endif /* _ASM_RISCV_EEPROM_H */
......@@ -540,3 +540,35 @@ int mac_read_from_eeprom(void)
return 0;
}
/**
* get_pcb_revision_from_eeprom - get the PCB revision
*
* Read the EEPROM to determine the board revision.
*
* This function is called before relocation, so we need to read a private
* copy of the EEPROM into a local variable on the stack.
*/
u8 get_pcb_revision_from_eeprom(void)
{
struct __attribute__ ((__packed__)) board_eeprom {
u8 magic[MAGIC_NUMBER_BYTES];
u8 format_ver;
u16 product_id;
u8 pcb_revision;
} be;
int ret;
struct udevice *dev;
ret = i2c_get_chip_for_busnum(CONFIG_SYS_EEPROM_BUS_NUM,
CONFIG_SYS_I2C_EEPROM_ADDR,
1,
&dev);
if (!ret)
dm_i2c_read(dev, 0, (void *)&be,
sizeof(struct board_eeprom));
return be.pcb_revision;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册