mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 07:31:15 +00:00
arm: mvebu: turris_omnia: Show MCU version
There are already more MCU firmware versions for Turris Omnia in production, so display git commit (version) of the MCU firmware during U-Boot startup. It will help to identify what version of MCU firmware is Turris Omnia using. MCU firmware for Turris Omnia is open source and available at website: https://gitlab.nic.cz/turris/hw/omnia_hw_ctrl It can be updated from running system via i2c bus with this tool: https://gitlab.nic.cz/turris/omnia-mcutool Signed-off-by: Pali Rohár <pali@kernel.org> Reviewed-by: Stefan Roese <sr@denx.de>
This commit is contained in:
parent
5a86d67e31
commit
455f55e4a3
1 changed files with 36 additions and 0 deletions
|
@ -21,6 +21,7 @@
|
|||
#include <dm/uclass.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <fdt_support.h>
|
||||
#include <hexdump.h>
|
||||
#include <time.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/delay.h>
|
||||
|
@ -61,7 +62,9 @@ DECLARE_GLOBAL_DATA_PTR;
|
|||
enum mcu_commands {
|
||||
CMD_GET_STATUS_WORD = 0x01,
|
||||
CMD_GET_RESET = 0x09,
|
||||
CMD_GET_FW_VERSION_APP = 0x0a,
|
||||
CMD_WATCHDOG_STATE = 0x0b,
|
||||
CMD_GET_FW_VERSION_BOOT = 0x0e,
|
||||
|
||||
/* available if STS_FEATURES_SUPPORTED bit set in status word */
|
||||
CMD_GET_FEATURES = 0x10,
|
||||
|
@ -418,6 +421,38 @@ static const char * const omnia_get_mcu_type(void)
|
|||
return mcu_types[stsword & STS_MCU_TYPE_MASK];
|
||||
}
|
||||
|
||||
static const char * const omnia_get_mcu_version(void)
|
||||
{
|
||||
static char version[82];
|
||||
u8 version_app[20];
|
||||
u8 version_boot[20];
|
||||
int ret;
|
||||
|
||||
ret = omnia_mcu_read(CMD_GET_FW_VERSION_APP, &version_app, sizeof(version_app));
|
||||
if (ret)
|
||||
return "unknown";
|
||||
|
||||
ret = omnia_mcu_read(CMD_GET_FW_VERSION_BOOT, &version_boot, sizeof(version_boot));
|
||||
if (ret)
|
||||
return "unknown";
|
||||
|
||||
/*
|
||||
* If git commits of MCU bootloader and MCU application are same then
|
||||
* show version only once. If they are different then show both commits.
|
||||
*/
|
||||
if (!memcmp(version_app, version_boot, 20)) {
|
||||
bin2hex(version, version_app, 20);
|
||||
version[40] = '\0';
|
||||
} else {
|
||||
bin2hex(version, version_boot, 20);
|
||||
version[40] = '/';
|
||||
bin2hex(version + 41, version_app, 20);
|
||||
version[81] = '\0';
|
||||
}
|
||||
|
||||
return version;
|
||||
}
|
||||
|
||||
/*
|
||||
* Define the DDR layout / topology here in the board file. This will
|
||||
* be used by the DDR3 init code in the SPL U-Boot version to configure
|
||||
|
@ -934,6 +969,7 @@ int show_board_info(void)
|
|||
err = turris_atsha_otp_get_serial_number(&version_num, &serial_num);
|
||||
printf("Model: Turris Omnia\n");
|
||||
printf(" MCU type: %s\n", omnia_get_mcu_type());
|
||||
printf(" MCU version: %s\n", omnia_get_mcu_version());
|
||||
printf(" RAM size: %i MiB\n", omnia_get_ram_size_gb() * 1024);
|
||||
if (err)
|
||||
printf(" Serial Number: unknown\n");
|
||||
|
|
Loading…
Reference in a new issue