mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-02 00:53:29 +08:00
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: Zong Li <zong.li@sifive.com> Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
This commit is contained in:
parent
564d630e26
commit
05e254862f
15
arch/riscv/include/asm/arch-fu740/eeprom.h
Normal file
15
arch/riscv/include/asm/arch-fu740/eeprom.h
Normal file
@ -0,0 +1,15 @@
|
||||
/* 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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user