mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
compulab: refactor board revision handling
Move board revision handling code to a common location for further reuse. Signed-off-by: Igor Grinberg <grinberg@compulab.co.il> Reviewed-by: Tom Rini <trini@ti.com>
This commit is contained in:
parent
52d848695c
commit
a937fd1682
5 changed files with 54 additions and 25 deletions
|
@ -33,6 +33,7 @@
|
|||
#include <asm/ehci-omap.h>
|
||||
#include <asm/gpio.h>
|
||||
|
||||
#include "../common/common.h"
|
||||
#include "../common/eeprom.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
@ -154,34 +155,18 @@ int board_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static u32 cm_t3x_rev;
|
||||
|
||||
/*
|
||||
* Routine: get_board_rev
|
||||
* Description: read system revision
|
||||
*/
|
||||
u32 get_board_rev(void)
|
||||
{
|
||||
if (!cm_t3x_rev)
|
||||
cm_t3x_rev = cl_eeprom_get_board_rev();
|
||||
|
||||
return cm_t3x_rev;
|
||||
return cl_eeprom_get_board_rev();
|
||||
};
|
||||
|
||||
/*
|
||||
* Routine: misc_init_r
|
||||
* Description: display die ID
|
||||
*/
|
||||
int misc_init_r(void)
|
||||
{
|
||||
u32 board_rev = get_board_rev();
|
||||
u32 rev_major = board_rev / 100;
|
||||
u32 rev_minor = board_rev - (rev_major * 100);
|
||||
|
||||
if ((rev_minor / 10) * 10 == rev_minor)
|
||||
rev_minor = rev_minor / 10;
|
||||
|
||||
printf("PCB: %u.%u\n", rev_major, rev_minor);
|
||||
cl_print_pcb_info();
|
||||
dieid_num_r();
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -6,5 +6,6 @@
|
|||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-$(CONFIG_SYS_I2C) += eeprom.o
|
||||
obj-$(CONFIG_LCD) += omap3_display.o
|
||||
obj-y += common.o
|
||||
obj-$(CONFIG_SYS_I2C) += eeprom.o
|
||||
obj-$(CONFIG_LCD) += omap3_display.o
|
||||
|
|
25
board/compulab/common/common.c
Normal file
25
board/compulab/common/common.c
Normal file
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* (C) Copyright 2014 CompuLab, Ltd. <www.compulab.co.il>
|
||||
*
|
||||
* Authors: Igor Grinberg <grinberg@compulab.co.il>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/bootm.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "eeprom.h"
|
||||
|
||||
void cl_print_pcb_info(void)
|
||||
{
|
||||
u32 board_rev = get_board_rev();
|
||||
u32 rev_major = board_rev / 100;
|
||||
u32 rev_minor = board_rev - (rev_major * 100);
|
||||
|
||||
if ((rev_minor / 10) * 10 == rev_minor)
|
||||
rev_minor = rev_minor / 10;
|
||||
|
||||
printf("PCB: %u.%u\n", rev_major, rev_minor);
|
||||
}
|
14
board/compulab/common/common.h
Normal file
14
board/compulab/common/common.h
Normal file
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* (C) Copyright 2014 CompuLab, Ltd. <www.compulab.co.il>
|
||||
*
|
||||
* Authors: Igor Grinberg <grinberg@compulab.co.il>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _CL_COMMON_
|
||||
#define _CL_COMMON_
|
||||
|
||||
void cl_print_pcb_info(void);
|
||||
|
||||
#endif /* _CL_COMMON_ */
|
|
@ -109,23 +109,27 @@ int cl_eeprom_read_mac_addr(uchar *buf)
|
|||
return cl_eeprom_read(offset, buf, 6);
|
||||
}
|
||||
|
||||
static u32 board_rev;
|
||||
|
||||
/*
|
||||
* Routine: cl_eeprom_get_board_rev
|
||||
* Description: read system revision from eeprom
|
||||
*/
|
||||
u32 cl_eeprom_get_board_rev(void)
|
||||
{
|
||||
u32 rev = 0;
|
||||
char str[5]; /* Legacy representation can contain at most 4 digits */
|
||||
uint offset = BOARD_REV_OFFSET_LEGACY;
|
||||
|
||||
if (board_rev)
|
||||
return board_rev;
|
||||
|
||||
if (cl_eeprom_setup_layout())
|
||||
return 0;
|
||||
|
||||
if (cl_eeprom_layout != LAYOUT_LEGACY)
|
||||
offset = BOARD_REV_OFFSET;
|
||||
|
||||
if (cl_eeprom_read(offset, (uchar *)&rev, BOARD_REV_SIZE))
|
||||
if (cl_eeprom_read(offset, (uchar *)&board_rev, BOARD_REV_SIZE))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
|
@ -133,9 +137,9 @@ u32 cl_eeprom_get_board_rev(void)
|
|||
* representation. i.e. for rev 1.00: 0x100 --> 0x64
|
||||
*/
|
||||
if (cl_eeprom_layout == LAYOUT_LEGACY) {
|
||||
sprintf(str, "%x", rev);
|
||||
rev = simple_strtoul(str, NULL, 10);
|
||||
sprintf(str, "%x", board_rev);
|
||||
board_rev = simple_strtoul(str, NULL, 10);
|
||||
}
|
||||
|
||||
return rev;
|
||||
return board_rev;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue