* [PATCH 1/4] ARM: i.MX8MM: add MX8MM_PAD_CTL defines
@ 2025-10-17 12:03 Marco Felsch
2025-10-17 12:03 ` [PATCH 2/4] lib: port CRC16 implementation from Linux Marco Felsch
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Marco Felsch @ 2025-10-17 12:03 UTC (permalink / raw)
To: barebox
Add defines like already done for i.MX8MP and i.MX8MQ.
Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
---
include/mach/imx/iomux-mx8mm.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/include/mach/imx/iomux-mx8mm.h b/include/mach/imx/iomux-mx8mm.h
index ee0240f53832..693eb67b9602 100644
--- a/include/mach/imx/iomux-mx8mm.h
+++ b/include/mach/imx/iomux-mx8mm.h
@@ -691,6 +691,16 @@ enum {
IMX8MM_PAD_UART4_TXD_GPIO5_IO29 = IOMUX_PAD(0x04B8, 0x0250, 5, 0x0000, 0, 0),
};
+#define MX8MM_PAD_CTL_DSE1 (0 << 1)
+#define MX8MM_PAD_CTL_DSE2 (2 << 1)
+#define MX8MM_PAD_CTL_DSE4 (1 << 1)
+#define MX8MM_PAD_CTL_DSE6 (3 << 1)
+#define MX8MM_PAD_CTL_FSEL BIT(4)
+#define MX8MM_PAD_CTL_ODE BIT(5)
+#define MX8MM_PAD_CTL_PUE BIT(6)
+#define MX8MM_PAD_CTL_HYS BIT(7)
+#define MX8MM_PAD_CTL_PE BIT(8)
+
static inline void imx8mm_setup_pad(iomux_v3_cfg_t pad)
{
void __iomem *iomux = IOMEM(MX8MM_IOMUXC_BASE_ADDR);
--
2.47.3
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/4] lib: port CRC16 implementation from Linux
2025-10-17 12:03 [PATCH 1/4] ARM: i.MX8MM: add MX8MM_PAD_CTL defines Marco Felsch
@ 2025-10-17 12:03 ` Marco Felsch
2025-10-20 8:31 ` Sascha Hauer
2025-10-17 12:03 ` [PATCH 3/4] lib: hexdump: make use of pr_debug Marco Felsch
2025-10-17 12:03 ` [PATCH 4/4] aiodev: add missing headers Marco Felsch
2 siblings, 1 reply; 11+ messages in thread
From: Marco Felsch @ 2025-10-17 12:03 UTC (permalink / raw)
To: barebox
Port the Linux CRC16 implementation.
Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
---
include/linux/crc16.h | 28 +++++++++++++++++++
lib/Kconfig | 8 ++++++
lib/Makefile | 1 +
lib/crc16.c | 65 +++++++++++++++++++++++++++++++++++++++++++
4 files changed, 102 insertions(+)
create mode 100644 include/linux/crc16.h
create mode 100644 lib/crc16.c
diff --git a/include/linux/crc16.h b/include/linux/crc16.h
new file mode 100644
index 000000000000..9fa74529b317
--- /dev/null
+++ b/include/linux/crc16.h
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * crc16.h - CRC-16 routine
+ *
+ * Implements the standard CRC-16:
+ * Width 16
+ * Poly 0x8005 (x^16 + x^15 + x^2 + 1)
+ * Init 0
+ *
+ * Copyright (c) 2005 Ben Gardner <bgardner@wabtec.com>
+ */
+
+#ifndef __CRC16_H
+#define __CRC16_H
+
+#include <linux/types.h>
+
+extern u16 const crc16_table[256];
+
+extern u16 crc16(u16 crc, const u8 *buffer, size_t len);
+
+static inline u16 crc16_byte(u16 crc, const u8 data)
+{
+ return (crc >> 8) ^ crc16_table[(crc ^ data) & 0xff];
+}
+
+#endif /* __CRC16_H */
+
diff --git a/lib/Kconfig b/lib/Kconfig
index d07e2f3b6959..153a07ec8f4d 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -155,6 +155,14 @@ config CRC_CCITT
the kernel tree does. Such modules that use library CRC-CCITT
functions require M here.
+config CRC16
+ tristate "CRC16 functions"
+ help
+ This option is provided for the case where no in-kernel-tree
+ modules require CRC16 functions, but a module built outside
+ the kernel tree does. Such modules that use library CRC16
+ functions require M here.
+
config CRC8
bool "CRC8 function"
help
diff --git a/lib/Makefile b/lib/Makefile
index 13f1de142008..e9f152b21dad 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -85,6 +85,7 @@ obj-y += parseopt.o
obj-y += clz_ctz.o
obj-$(CONFIG_CRC_CCITT) += crc-ccitt.o
obj-$(CONFIG_CRC8) += crc8.o
+obj-$(CONFIG_CRC16) += crc16.o
obj-$(CONFIG_NLS) += nls_base.o
obj-$(CONFIG_FSL_QE_FIRMWARE) += fsl-qe-firmware.o
obj-$(CONFIG_UBSAN_STANDALONE) += ubsan.o
diff --git a/lib/crc16.c b/lib/crc16.c
new file mode 100644
index 000000000000..5c3a803c01e0
--- /dev/null
+++ b/lib/crc16.c
@@ -0,0 +1,65 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * crc16.c
+ */
+
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/crc16.h>
+
+/** CRC table for the CRC-16. The poly is 0x8005 (x^16 + x^15 + x^2 + 1) */
+u16 const crc16_table[256] = {
+ 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
+ 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
+ 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
+ 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
+ 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
+ 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
+ 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
+ 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
+ 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
+ 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
+ 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
+ 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
+ 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
+ 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
+ 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
+ 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
+ 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
+ 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
+ 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
+ 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
+ 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
+ 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
+ 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
+ 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
+ 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
+ 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
+ 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
+ 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
+ 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
+ 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
+ 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
+ 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
+};
+EXPORT_SYMBOL(crc16_table);
+
+/**
+ * crc16 - compute the CRC-16 for the data buffer
+ * @crc: previous CRC value
+ * @buffer: data pointer
+ * @len: number of bytes in the buffer
+ *
+ * Returns the updated CRC value.
+ */
+u16 crc16(u16 crc, u8 const *buffer, size_t len)
+{
+ while (len--)
+ crc = crc16_byte(crc, *buffer++);
+ return crc;
+}
+EXPORT_SYMBOL(crc16);
+
+MODULE_DESCRIPTION("CRC16 calculations");
+MODULE_LICENSE("GPL");
+
--
2.47.3
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 3/4] lib: hexdump: make use of pr_debug
2025-10-17 12:03 [PATCH 1/4] ARM: i.MX8MM: add MX8MM_PAD_CTL defines Marco Felsch
2025-10-17 12:03 ` [PATCH 2/4] lib: port CRC16 implementation from Linux Marco Felsch
@ 2025-10-17 12:03 ` Marco Felsch
2025-10-20 8:44 ` Sascha Hauer
2025-10-17 12:03 ` [PATCH 4/4] aiodev: add missing headers Marco Felsch
2 siblings, 1 reply; 11+ messages in thread
From: Marco Felsch @ 2025-10-17 12:03 UTC (permalink / raw)
To: barebox
The hexdump library was ported from Linux which supports different
printk() level. Because the barebox print* facility is different
compared to the one from Linux the barebox printk() doesn't support
levels. Therefore the level is always set to an empty string.
Furthermore all barebox printk() calls aren't recorded by the internal
barebox_logbuf because they are mostly used for command prints. Linux on
the other hand record each printk() print.
Not recording the output can be an issue on systems which don't have a
hw-console but a USB-ACM console, because the hexdump call may already
occurred before the console was ready.
Make use of pr_debug() instead to record the output within the
barebox_logbuf to be available later on via dmesg. Using pr_debug()
should be fine since it is mostly used for debugging/development
purpose.
Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
---
lib/hexdump.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/lib/hexdump.c b/lib/hexdump.c
index 940c4eec64e9..ab5e3cf727ec 100644
--- a/lib/hexdump.c
+++ b/lib/hexdump.c
@@ -284,16 +284,13 @@ void dev_print_hex_dump(struct device *dev, const char *level,
switch (prefix_type) {
case DUMP_PREFIX_ADDRESS:
- printk("%s%s%s%p: %s\n", level, name, prefix_str,
- ptr + i, linebuf);
+ pr_debug("%s%s%p: %s\n", name, prefix_str, ptr + i, linebuf);
break;
case DUMP_PREFIX_OFFSET:
- printk("%s%s%s%.8x: %s\n", level, name, prefix_str,
- i, linebuf);
+ pr_debug("%s%s%.8x: %s\n", name, prefix_str, i, linebuf);
break;
default:
- printk("%s%s%s%s\n", level, name, prefix_str,
- linebuf);
+ pr_debug("%s%s%s\n", name, prefix_str, linebuf);
break;
}
}
--
2.47.3
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 4/4] aiodev: add missing headers
2025-10-17 12:03 [PATCH 1/4] ARM: i.MX8MM: add MX8MM_PAD_CTL defines Marco Felsch
2025-10-17 12:03 ` [PATCH 2/4] lib: port CRC16 implementation from Linux Marco Felsch
2025-10-17 12:03 ` [PATCH 3/4] lib: hexdump: make use of pr_debug Marco Felsch
@ 2025-10-17 12:03 ` Marco Felsch
2025-10-20 8:45 ` (subset) " Sascha Hauer
2 siblings, 1 reply; 11+ messages in thread
From: Marco Felsch @ 2025-10-17 12:03 UTC (permalink / raw)
To: barebox
Add required headers to be include order independent.
Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
---
include/aiodev.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/include/aiodev.h b/include/aiodev.h
index fb0807ad420a..e2772b5ae4d6 100644
--- a/include/aiodev.h
+++ b/include/aiodev.h
@@ -10,6 +10,9 @@
#ifndef __AIODEVICE_H
#define __AIODEVICE_H
+#include <driver.h>
+#include <linux/types.h>
+
struct aiodevice;
struct aiochannel {
int index;
--
2.47.3
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/4] lib: port CRC16 implementation from Linux
2025-10-17 12:03 ` [PATCH 2/4] lib: port CRC16 implementation from Linux Marco Felsch
@ 2025-10-20 8:31 ` Sascha Hauer
2025-10-20 8:45 ` Marco Felsch
0 siblings, 1 reply; 11+ messages in thread
From: Sascha Hauer @ 2025-10-20 8:31 UTC (permalink / raw)
To: Marco Felsch; +Cc: barebox
On Fri, Oct 17, 2025 at 02:03:34PM +0200, Marco Felsch wrote:
> Port the Linux CRC16 implementation.
>
> Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
I was faster ;)
We already have this in master
Sascha
> ---
> include/linux/crc16.h | 28 +++++++++++++++++++
> lib/Kconfig | 8 ++++++
> lib/Makefile | 1 +
> lib/crc16.c | 65 +++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 102 insertions(+)
> create mode 100644 include/linux/crc16.h
> create mode 100644 lib/crc16.c
>
> diff --git a/include/linux/crc16.h b/include/linux/crc16.h
> new file mode 100644
> index 000000000000..9fa74529b317
> --- /dev/null
> +++ b/include/linux/crc16.h
> @@ -0,0 +1,28 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * crc16.h - CRC-16 routine
> + *
> + * Implements the standard CRC-16:
> + * Width 16
> + * Poly 0x8005 (x^16 + x^15 + x^2 + 1)
> + * Init 0
> + *
> + * Copyright (c) 2005 Ben Gardner <bgardner@wabtec.com>
> + */
> +
> +#ifndef __CRC16_H
> +#define __CRC16_H
> +
> +#include <linux/types.h>
> +
> +extern u16 const crc16_table[256];
> +
> +extern u16 crc16(u16 crc, const u8 *buffer, size_t len);
> +
> +static inline u16 crc16_byte(u16 crc, const u8 data)
> +{
> + return (crc >> 8) ^ crc16_table[(crc ^ data) & 0xff];
> +}
> +
> +#endif /* __CRC16_H */
> +
> diff --git a/lib/Kconfig b/lib/Kconfig
> index d07e2f3b6959..153a07ec8f4d 100644
> --- a/lib/Kconfig
> +++ b/lib/Kconfig
> @@ -155,6 +155,14 @@ config CRC_CCITT
> the kernel tree does. Such modules that use library CRC-CCITT
> functions require M here.
>
> +config CRC16
> + tristate "CRC16 functions"
> + help
> + This option is provided for the case where no in-kernel-tree
> + modules require CRC16 functions, but a module built outside
> + the kernel tree does. Such modules that use library CRC16
> + functions require M here.
> +
> config CRC8
> bool "CRC8 function"
> help
> diff --git a/lib/Makefile b/lib/Makefile
> index 13f1de142008..e9f152b21dad 100644
> --- a/lib/Makefile
> +++ b/lib/Makefile
> @@ -85,6 +85,7 @@ obj-y += parseopt.o
> obj-y += clz_ctz.o
> obj-$(CONFIG_CRC_CCITT) += crc-ccitt.o
> obj-$(CONFIG_CRC8) += crc8.o
> +obj-$(CONFIG_CRC16) += crc16.o
> obj-$(CONFIG_NLS) += nls_base.o
> obj-$(CONFIG_FSL_QE_FIRMWARE) += fsl-qe-firmware.o
> obj-$(CONFIG_UBSAN_STANDALONE) += ubsan.o
> diff --git a/lib/crc16.c b/lib/crc16.c
> new file mode 100644
> index 000000000000..5c3a803c01e0
> --- /dev/null
> +++ b/lib/crc16.c
> @@ -0,0 +1,65 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * crc16.c
> + */
> +
> +#include <linux/types.h>
> +#include <linux/module.h>
> +#include <linux/crc16.h>
> +
> +/** CRC table for the CRC-16. The poly is 0x8005 (x^16 + x^15 + x^2 + 1) */
> +u16 const crc16_table[256] = {
> + 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
> + 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
> + 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
> + 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
> + 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
> + 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
> + 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
> + 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
> + 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
> + 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
> + 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
> + 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
> + 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
> + 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
> + 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
> + 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
> + 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
> + 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
> + 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
> + 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
> + 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
> + 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
> + 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
> + 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
> + 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
> + 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
> + 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
> + 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
> + 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
> + 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
> + 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
> + 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
> +};
> +EXPORT_SYMBOL(crc16_table);
> +
> +/**
> + * crc16 - compute the CRC-16 for the data buffer
> + * @crc: previous CRC value
> + * @buffer: data pointer
> + * @len: number of bytes in the buffer
> + *
> + * Returns the updated CRC value.
> + */
> +u16 crc16(u16 crc, u8 const *buffer, size_t len)
> +{
> + while (len--)
> + crc = crc16_byte(crc, *buffer++);
> + return crc;
> +}
> +EXPORT_SYMBOL(crc16);
> +
> +MODULE_DESCRIPTION("CRC16 calculations");
> +MODULE_LICENSE("GPL");
> +
> --
> 2.47.3
>
>
>
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] lib: hexdump: make use of pr_debug
2025-10-17 12:03 ` [PATCH 3/4] lib: hexdump: make use of pr_debug Marco Felsch
@ 2025-10-20 8:44 ` Sascha Hauer
2025-10-20 8:49 ` Marco Felsch
0 siblings, 1 reply; 11+ messages in thread
From: Sascha Hauer @ 2025-10-20 8:44 UTC (permalink / raw)
To: Marco Felsch; +Cc: barebox
On Fri, Oct 17, 2025 at 02:03:35PM +0200, Marco Felsch wrote:
> The hexdump library was ported from Linux which supports different
> printk() level. Because the barebox print* facility is different
> compared to the one from Linux the barebox printk() doesn't support
> levels. Therefore the level is always set to an empty string.
>
> Furthermore all barebox printk() calls aren't recorded by the internal
> barebox_logbuf because they are mostly used for command prints. Linux on
> the other hand record each printk() print.
>
> Not recording the output can be an issue on systems which don't have a
> hw-console but a USB-ACM console, because the hexdump call may already
> occurred before the console was ready.
>
> Make use of pr_debug() instead to record the output within the
> barebox_logbuf to be available later on via dmesg. Using pr_debug()
> should be fine since it is mostly used for debugging/development
> purpose.
>
> Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
> ---
> lib/hexdump.c | 9 +++------
> 1 file changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/lib/hexdump.c b/lib/hexdump.c
> index 940c4eec64e9..ab5e3cf727ec 100644
> --- a/lib/hexdump.c
> +++ b/lib/hexdump.c
> @@ -284,16 +284,13 @@ void dev_print_hex_dump(struct device *dev, const char *level,
>
> switch (prefix_type) {
> case DUMP_PREFIX_ADDRESS:
> - printk("%s%s%s%p: %s\n", level, name, prefix_str,
> - ptr + i, linebuf);
> + pr_debug("%s%s%p: %s\n", name, prefix_str, ptr + i, linebuf);
pr_debug is only compiled in when DEBUG is defined. This means you have
to add a "#define DEBUG" in lib/hexdump.c to make the messages visible
printed in another file, or alternatively have to define DEBUG globally.
I think we should rather replace the const char *level argument with a
unsigned int level argument expecting one of MSG_* and use pr_print() here.
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: (subset) [PATCH 4/4] aiodev: add missing headers
2025-10-17 12:03 ` [PATCH 4/4] aiodev: add missing headers Marco Felsch
@ 2025-10-20 8:45 ` Sascha Hauer
0 siblings, 0 replies; 11+ messages in thread
From: Sascha Hauer @ 2025-10-20 8:45 UTC (permalink / raw)
To: barebox, Marco Felsch
On Fri, 17 Oct 2025 14:03:36 +0200, Marco Felsch wrote:
> Add required headers to be include order independent.
>
>
Applied, thanks!
[4/4] aiodev: add missing headers
https://git.pengutronix.de/cgit/barebox/commit/?id=28e176c323af (link may not be stable)
Best regards,
--
Sascha Hauer <s.hauer@pengutronix.de>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/4] lib: port CRC16 implementation from Linux
2025-10-20 8:31 ` Sascha Hauer
@ 2025-10-20 8:45 ` Marco Felsch
0 siblings, 0 replies; 11+ messages in thread
From: Marco Felsch @ 2025-10-20 8:45 UTC (permalink / raw)
To: Sascha Hauer; +Cc: barebox
On 25-10-20, Sascha Hauer wrote:
> On Fri, Oct 17, 2025 at 02:03:34PM +0200, Marco Felsch wrote:
> > Port the Linux CRC16 implementation.
> >
> > Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
>
> I was faster ;)
Argh.. :)
> We already have this in master
Thanks for the hint :)
Regards,
Marco
>
> Sascha
>
> > ---
> > include/linux/crc16.h | 28 +++++++++++++++++++
> > lib/Kconfig | 8 ++++++
> > lib/Makefile | 1 +
> > lib/crc16.c | 65 +++++++++++++++++++++++++++++++++++++++++++
> > 4 files changed, 102 insertions(+)
> > create mode 100644 include/linux/crc16.h
> > create mode 100644 lib/crc16.c
> >
> > diff --git a/include/linux/crc16.h b/include/linux/crc16.h
> > new file mode 100644
> > index 000000000000..9fa74529b317
> > --- /dev/null
> > +++ b/include/linux/crc16.h
> > @@ -0,0 +1,28 @@
> > +/* SPDX-License-Identifier: GPL-2.0-only */
> > +/*
> > + * crc16.h - CRC-16 routine
> > + *
> > + * Implements the standard CRC-16:
> > + * Width 16
> > + * Poly 0x8005 (x^16 + x^15 + x^2 + 1)
> > + * Init 0
> > + *
> > + * Copyright (c) 2005 Ben Gardner <bgardner@wabtec.com>
> > + */
> > +
> > +#ifndef __CRC16_H
> > +#define __CRC16_H
> > +
> > +#include <linux/types.h>
> > +
> > +extern u16 const crc16_table[256];
> > +
> > +extern u16 crc16(u16 crc, const u8 *buffer, size_t len);
> > +
> > +static inline u16 crc16_byte(u16 crc, const u8 data)
> > +{
> > + return (crc >> 8) ^ crc16_table[(crc ^ data) & 0xff];
> > +}
> > +
> > +#endif /* __CRC16_H */
> > +
> > diff --git a/lib/Kconfig b/lib/Kconfig
> > index d07e2f3b6959..153a07ec8f4d 100644
> > --- a/lib/Kconfig
> > +++ b/lib/Kconfig
> > @@ -155,6 +155,14 @@ config CRC_CCITT
> > the kernel tree does. Such modules that use library CRC-CCITT
> > functions require M here.
> >
> > +config CRC16
> > + tristate "CRC16 functions"
> > + help
> > + This option is provided for the case where no in-kernel-tree
> > + modules require CRC16 functions, but a module built outside
> > + the kernel tree does. Such modules that use library CRC16
> > + functions require M here.
> > +
> > config CRC8
> > bool "CRC8 function"
> > help
> > diff --git a/lib/Makefile b/lib/Makefile
> > index 13f1de142008..e9f152b21dad 100644
> > --- a/lib/Makefile
> > +++ b/lib/Makefile
> > @@ -85,6 +85,7 @@ obj-y += parseopt.o
> > obj-y += clz_ctz.o
> > obj-$(CONFIG_CRC_CCITT) += crc-ccitt.o
> > obj-$(CONFIG_CRC8) += crc8.o
> > +obj-$(CONFIG_CRC16) += crc16.o
> > obj-$(CONFIG_NLS) += nls_base.o
> > obj-$(CONFIG_FSL_QE_FIRMWARE) += fsl-qe-firmware.o
> > obj-$(CONFIG_UBSAN_STANDALONE) += ubsan.o
> > diff --git a/lib/crc16.c b/lib/crc16.c
> > new file mode 100644
> > index 000000000000..5c3a803c01e0
> > --- /dev/null
> > +++ b/lib/crc16.c
> > @@ -0,0 +1,65 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +/*
> > + * crc16.c
> > + */
> > +
> > +#include <linux/types.h>
> > +#include <linux/module.h>
> > +#include <linux/crc16.h>
> > +
> > +/** CRC table for the CRC-16. The poly is 0x8005 (x^16 + x^15 + x^2 + 1) */
> > +u16 const crc16_table[256] = {
> > + 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
> > + 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
> > + 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
> > + 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
> > + 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
> > + 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
> > + 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
> > + 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
> > + 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
> > + 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
> > + 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
> > + 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
> > + 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
> > + 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
> > + 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
> > + 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
> > + 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
> > + 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
> > + 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
> > + 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
> > + 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
> > + 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
> > + 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
> > + 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
> > + 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
> > + 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
> > + 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
> > + 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
> > + 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
> > + 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
> > + 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
> > + 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
> > +};
> > +EXPORT_SYMBOL(crc16_table);
> > +
> > +/**
> > + * crc16 - compute the CRC-16 for the data buffer
> > + * @crc: previous CRC value
> > + * @buffer: data pointer
> > + * @len: number of bytes in the buffer
> > + *
> > + * Returns the updated CRC value.
> > + */
> > +u16 crc16(u16 crc, u8 const *buffer, size_t len)
> > +{
> > + while (len--)
> > + crc = crc16_byte(crc, *buffer++);
> > + return crc;
> > +}
> > +EXPORT_SYMBOL(crc16);
> > +
> > +MODULE_DESCRIPTION("CRC16 calculations");
> > +MODULE_LICENSE("GPL");
> > +
> > --
> > 2.47.3
> >
> >
> >
>
> --
> Pengutronix e.K. | |
> Steuerwalder Str. 21 | http://www.pengutronix.de/ |
> 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] lib: hexdump: make use of pr_debug
2025-10-20 8:44 ` Sascha Hauer
@ 2025-10-20 8:49 ` Marco Felsch
2025-10-20 9:02 ` Sascha Hauer
0 siblings, 1 reply; 11+ messages in thread
From: Marco Felsch @ 2025-10-20 8:49 UTC (permalink / raw)
To: Sascha Hauer; +Cc: barebox
On 25-10-20, Sascha Hauer wrote:
> On Fri, Oct 17, 2025 at 02:03:35PM +0200, Marco Felsch wrote:
> > The hexdump library was ported from Linux which supports different
> > printk() level. Because the barebox print* facility is different
> > compared to the one from Linux the barebox printk() doesn't support
> > levels. Therefore the level is always set to an empty string.
> >
> > Furthermore all barebox printk() calls aren't recorded by the internal
> > barebox_logbuf because they are mostly used for command prints. Linux on
> > the other hand record each printk() print.
> >
> > Not recording the output can be an issue on systems which don't have a
> > hw-console but a USB-ACM console, because the hexdump call may already
> > occurred before the console was ready.
> >
> > Make use of pr_debug() instead to record the output within the
> > barebox_logbuf to be available later on via dmesg. Using pr_debug()
> > should be fine since it is mostly used for debugging/development
> > purpose.
> >
> > Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
> > ---
> > lib/hexdump.c | 9 +++------
> > 1 file changed, 3 insertions(+), 6 deletions(-)
> >
> > diff --git a/lib/hexdump.c b/lib/hexdump.c
> > index 940c4eec64e9..ab5e3cf727ec 100644
> > --- a/lib/hexdump.c
> > +++ b/lib/hexdump.c
> > @@ -284,16 +284,13 @@ void dev_print_hex_dump(struct device *dev, const char *level,
> >
> > switch (prefix_type) {
> > case DUMP_PREFIX_ADDRESS:
> > - printk("%s%s%s%p: %s\n", level, name, prefix_str,
> > - ptr + i, linebuf);
> > + pr_debug("%s%s%p: %s\n", name, prefix_str, ptr + i, linebuf);
>
> pr_debug is only compiled in when DEBUG is defined. This means you have
> to add a "#define DEBUG" in lib/hexdump.c to make the messages visible
> printed in another file, or alternatively have to define DEBUG globally.
Yep, this is true and I forgot about that drawback :/
> I think we should rather replace the const char *level argument with a
> unsigned int level argument expecting one of MSG_* and use pr_print() here.
What about keeping the Linux API but converting it back to int?
Regards,
Marco
>
> Sascha
>
> --
> Pengutronix e.K. | |
> Steuerwalder Str. 21 | http://www.pengutronix.de/ |
> 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] lib: hexdump: make use of pr_debug
2025-10-20 8:49 ` Marco Felsch
@ 2025-10-20 9:02 ` Sascha Hauer
2025-10-20 9:27 ` Marco Felsch
0 siblings, 1 reply; 11+ messages in thread
From: Sascha Hauer @ 2025-10-20 9:02 UTC (permalink / raw)
To: Marco Felsch; +Cc: barebox
On Mon, Oct 20, 2025 at 10:49:24AM +0200, Marco Felsch wrote:
> On 25-10-20, Sascha Hauer wrote:
> > On Fri, Oct 17, 2025 at 02:03:35PM +0200, Marco Felsch wrote:
> > > The hexdump library was ported from Linux which supports different
> > > printk() level. Because the barebox print* facility is different
> > > compared to the one from Linux the barebox printk() doesn't support
> > > levels. Therefore the level is always set to an empty string.
> > >
> > > Furthermore all barebox printk() calls aren't recorded by the internal
> > > barebox_logbuf because they are mostly used for command prints. Linux on
> > > the other hand record each printk() print.
> > >
> > > Not recording the output can be an issue on systems which don't have a
> > > hw-console but a USB-ACM console, because the hexdump call may already
> > > occurred before the console was ready.
> > >
> > > Make use of pr_debug() instead to record the output within the
> > > barebox_logbuf to be available later on via dmesg. Using pr_debug()
> > > should be fine since it is mostly used for debugging/development
> > > purpose.
> > >
> > > Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
> > > ---
> > > lib/hexdump.c | 9 +++------
> > > 1 file changed, 3 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/lib/hexdump.c b/lib/hexdump.c
> > > index 940c4eec64e9..ab5e3cf727ec 100644
> > > --- a/lib/hexdump.c
> > > +++ b/lib/hexdump.c
> > > @@ -284,16 +284,13 @@ void dev_print_hex_dump(struct device *dev, const char *level,
> > >
> > > switch (prefix_type) {
> > > case DUMP_PREFIX_ADDRESS:
> > > - printk("%s%s%s%p: %s\n", level, name, prefix_str,
> > > - ptr + i, linebuf);
> > > + pr_debug("%s%s%p: %s\n", name, prefix_str, ptr + i, linebuf);
> >
> > pr_debug is only compiled in when DEBUG is defined. This means you have
> > to add a "#define DEBUG" in lib/hexdump.c to make the messages visible
> > printed in another file, or alternatively have to define DEBUG globally.
>
> Yep, this is true and I forgot about that drawback :/
>
> > I think we should rather replace the const char *level argument with a
> > unsigned int level argument expecting one of MSG_* and use pr_print() here.
>
> What about keeping the Linux API but converting it back to int?
Not possible:
#define KERN_EMERG "" /* system is unusable */
#define KERN_ALERT "" /* action must be taken immediately */
#define KERN_CRIT "" /* critical conditions */
#define KERN_ERR "" /* error conditions */
#define KERN_WARNING "" /* warning conditions */
#define KERN_NOTICE "" /* normal but significant condition */
#define KERN_INFO "" /* informational */
#define KERN_DEBUG "" /* debug-level messages */
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] lib: hexdump: make use of pr_debug
2025-10-20 9:02 ` Sascha Hauer
@ 2025-10-20 9:27 ` Marco Felsch
0 siblings, 0 replies; 11+ messages in thread
From: Marco Felsch @ 2025-10-20 9:27 UTC (permalink / raw)
To: Sascha Hauer; +Cc: barebox
On 25-10-20, Sascha Hauer wrote:
> On Mon, Oct 20, 2025 at 10:49:24AM +0200, Marco Felsch wrote:
> > On 25-10-20, Sascha Hauer wrote:
> > > On Fri, Oct 17, 2025 at 02:03:35PM +0200, Marco Felsch wrote:
> > > > The hexdump library was ported from Linux which supports different
> > > > printk() level. Because the barebox print* facility is different
> > > > compared to the one from Linux the barebox printk() doesn't support
> > > > levels. Therefore the level is always set to an empty string.
> > > >
> > > > Furthermore all barebox printk() calls aren't recorded by the internal
> > > > barebox_logbuf because they are mostly used for command prints. Linux on
> > > > the other hand record each printk() print.
> > > >
> > > > Not recording the output can be an issue on systems which don't have a
> > > > hw-console but a USB-ACM console, because the hexdump call may already
> > > > occurred before the console was ready.
> > > >
> > > > Make use of pr_debug() instead to record the output within the
> > > > barebox_logbuf to be available later on via dmesg. Using pr_debug()
> > > > should be fine since it is mostly used for debugging/development
> > > > purpose.
> > > >
> > > > Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
> > > > ---
> > > > lib/hexdump.c | 9 +++------
> > > > 1 file changed, 3 insertions(+), 6 deletions(-)
> > > >
> > > > diff --git a/lib/hexdump.c b/lib/hexdump.c
> > > > index 940c4eec64e9..ab5e3cf727ec 100644
> > > > --- a/lib/hexdump.c
> > > > +++ b/lib/hexdump.c
> > > > @@ -284,16 +284,13 @@ void dev_print_hex_dump(struct device *dev, const char *level,
> > > >
> > > > switch (prefix_type) {
> > > > case DUMP_PREFIX_ADDRESS:
> > > > - printk("%s%s%s%p: %s\n", level, name, prefix_str,
> > > > - ptr + i, linebuf);
> > > > + pr_debug("%s%s%p: %s\n", name, prefix_str, ptr + i, linebuf);
> > >
> > > pr_debug is only compiled in when DEBUG is defined. This means you have
> > > to add a "#define DEBUG" in lib/hexdump.c to make the messages visible
> > > printed in another file, or alternatively have to define DEBUG globally.
> >
> > Yep, this is true and I forgot about that drawback :/
> >
> > > I think we should rather replace the const char *level argument with a
> > > unsigned int level argument expecting one of MSG_* and use pr_print() here.
> >
> > What about keeping the Linux API but converting it back to int?
>
> Not possible:
>
> #define KERN_EMERG "" /* system is unusable */
> #define KERN_ALERT "" /* action must be taken immediately */
> #define KERN_CRIT "" /* critical conditions */
> #define KERN_ERR "" /* error conditions */
> #define KERN_WARNING "" /* warning conditions */
> #define KERN_NOTICE "" /* normal but significant condition */
> #define KERN_INFO "" /* informational */
> #define KERN_DEBUG "" /* debug-level messages */
I should have read my own commit message! Thanks again for the pointer.
Regards,
Marco
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2025-10-20 12:59 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-10-17 12:03 [PATCH 1/4] ARM: i.MX8MM: add MX8MM_PAD_CTL defines Marco Felsch
2025-10-17 12:03 ` [PATCH 2/4] lib: port CRC16 implementation from Linux Marco Felsch
2025-10-20 8:31 ` Sascha Hauer
2025-10-20 8:45 ` Marco Felsch
2025-10-17 12:03 ` [PATCH 3/4] lib: hexdump: make use of pr_debug Marco Felsch
2025-10-20 8:44 ` Sascha Hauer
2025-10-20 8:49 ` Marco Felsch
2025-10-20 9:02 ` Sascha Hauer
2025-10-20 9:27 ` Marco Felsch
2025-10-17 12:03 ` [PATCH 4/4] aiodev: add missing headers Marco Felsch
2025-10-20 8:45 ` (subset) " Sascha Hauer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox