diff --git a/src/drivers/boards/common/kinetis/board_mcu_version.c b/src/drivers/boards/common/kinetis/board_mcu_version.c index 40169547e9..326c26c6ea 100644 --- a/src/drivers/boards/common/kinetis/board_mcu_version.c +++ b/src/drivers/boards/common/kinetis/board_mcu_version.c @@ -40,20 +40,22 @@ #include #include -/* Define any issues with the Silicon as lines separated by \n - * omitting the last \n - */ -#define ERRATA "This code is not finished yet!" +#include "up_arch.h" +#include "chip/kinetis_sim.h" +#define CHIP_TAG "Kinetis K??" +#define CHIP_TAG_LEN sizeof(CHIP_TAG)-1 int board_mcu_version(char *rev, const char **revstr, const char **errata) { - *rev = '?'; - *revstr = "Kinetis K??"; + uint32_t sim_sdid = getreg32(KINETIS_SIM_SDID); + static char chip[sizeof(CHIP_TAG)] = CHIP_TAG; - if (errata) { - *errata = ERRATA; - } + chip[CHIP_TAG_LEN - 2] = '0' + ((sim_sdid & SIM_SDID_FAMILYID_MASK) >> SIM_SDID_FAMILYID_SHIFT); + chip[CHIP_TAG_LEN - 1] = '0' + ((sim_sdid & SIM_SDID_SUBFAMID_MASK) >> SIM_SDID_SUBFAMID_SHIFT); + *revstr = chip; + *rev = '0' + ((sim_sdid & SIM_SDID_REVID_MASK) >> SIM_SDID_REVID_SHIFT); + *errata = NULL; return 0; }