From a6a5c12c1e6aa64cc4be18ac89fd14662223ddc8 Mon Sep 17 00:00:00 2001 From: Sylvain Munaut Date: Mon, 2 May 2022 15:32:38 +0200 Subject: [PATCH] firmware/common: Add a few helpers Signed-off-by: Sylvain Munaut --- firmware/common/misc.c | 7 +++++++ firmware/common/misc.h | 1 + firmware/common/utils.c | 45 +++++++++++++++++++++++++++++++++++++++++ firmware/common/utils.h | 13 ++++++++++++ 4 files changed, 66 insertions(+) create mode 100644 firmware/common/utils.c create mode 100644 firmware/common/utils.h diff --git a/firmware/common/misc.c b/firmware/common/misc.c index d6dbe9d..316ddd4 100644 --- a/firmware/common/misc.c +++ b/firmware/common/misc.c @@ -39,6 +39,13 @@ static volatile struct wb_misc * const misc_regs = (void*)(MISC_BASE); #define GPIO_SC_CLKDIV_8 (0 << 0) +/* Warm reboot */ +void +reboot(int n) +{ + misc_regs->boot = (1 << 2) | (n << 0); +} + /* "Calibrated" wait loop */ void wait(int i) diff --git a/firmware/common/misc.h b/firmware/common/misc.h index 63eea7f..45139ea 100644 --- a/firmware/common/misc.h +++ b/firmware/common/misc.h @@ -7,6 +7,7 @@ #pragma once +void reboot(int n); void wait(int i); void ncn8025_init(void); diff --git a/firmware/common/utils.c b/firmware/common/utils.c new file mode 100644 index 0000000..8f648a5 --- /dev/null +++ b/firmware/common/utils.c @@ -0,0 +1,45 @@ +/* + * utils.c + * + * Copyright (C) 2019-2020 Sylvain Munaut + * SPDX-License-Identifier: LGPL-3.0-or-later + */ + +#include +#include +#include + +char * +hexstr(void *d, int n, bool space) +{ + static const char * const hex = "0123456789abcdef"; + static char buf[96]; + uint8_t *p = d; + char *s = buf; + char c; + + while (n--) { + c = *p++; + *s++ = hex[c >> 4]; + *s++ = hex[c & 0xf]; + if (space) + *s++ = ' '; + } + + s[space?-1:0] = '\0'; + + return buf; +} + +uint8_t +hexval(char c) +{ + if (c >= '0' && c <= '9') + return c - '0'; + else if (c >= 'a' && c <= 'f') + return 10 + (c - 'a'); + else if (c >= 'A' && c <= 'F') + return 10 + (c - 'A'); + else + return 0; +} diff --git a/firmware/common/utils.h b/firmware/common/utils.h new file mode 100644 index 0000000..fd3d578 --- /dev/null +++ b/firmware/common/utils.h @@ -0,0 +1,13 @@ +/* + * utils.h + * + * Copyright (C) 2019-2020 Sylvain Munaut + * SPDX-License-Identifier: LGPL-3.0-or-later + */ + +#pragma once + +#include + +char *hexstr(void *d, int n, bool space); +uint8_t hexval(char c);