Am 30. April 2026 18:26:02 UTC schrieb "Matyáš Bobek" <[email protected]>:
>This series adds emulation of the FlexCAN CAN controller, version 2,
>found in NXP i.MX6 series SoCs. The controller is integrated into
>fsl-imx6 and the Sabrelite ARM board.
>
>The chip has two FlexCAN controllers, but the Linux Sabrelite
>device tree enables only one by default. Linux kernel with both
>controllers enabled has been tested to work properly (using a custom
>device tree).
>See docs/system/devices/can.rst for an example of QEMU command line
>invocation.
>
>More information about the implementation can be found in my bachelor
>thesis [1].
>
>The headers (struct FlexcanRegs and flexcan_regs.h macros) were copied
>from the Linux kernel. Marc Kleine-Budde is the copyright holder. He
>has been kindly asked to provide consent, to confirm his approval for
>the inclusion of said header fragments into QEMU. The approval is still
>pending, hopefully it will be resolved soon. I will update the patchset
>on request if another wording/solution for the copyright statement is
>proposed/requested.
Tested with imx8mp-evk: https://github.com/shentok/qemu/commits/imx8mp-flexcan/
which works excellent. Next step after this series is merged would be
upstreaming that branch.
I guess the only open issue is the licensing of struct FlexcanRegs [1] which
originates from Linux? How do we proceed here?
Best regards,
Bernhard
[1] https://lore.kernel.org/qemu-devel/[email protected]/
>
>Changes from v2:
>- moved variable declarations to the top-of-the-block
>- cleanup
>- removed redundant license boilerplate
>- rebased onto latest master
>- Link to v2:
>https://lore.kernel.org/qemu-devel/[email protected]/
>
>Changes from v1 to v2:
>- removed DPRINTF (turned into traces or guest errors)
>- removed gotos and unnecessary continues
>- register memory region shortened to actual length w/o padding
>- make flexcan_* fns private
>- used DEVICE(s)->canonical_path instead of allocating new strings
>- changed DEVICE_NATIVE_ENDIAN to DEVICE_LITTLE_ENDIAN
>- removed ugly USE macro
>- used enums instead of define sequences in flexcan.c
>- fixed FlexCAN KConfig conf (fixes build on non-arm-softmmu)
>- fixed style and other issues from Bernhard's review
>- better wording in docs
>- rebased onto latest master
>- Link to v1:
>https://lore.kernel.org/qemu-devel/[email protected]
>
>Thanks Bernhard Beschow for the review and his patience.
>I borrowed some fixes from his flexcan branch at [2].
>
>[1]
>http://dspace.cvut.cz/bitstream/handle/10467/122654/F3-BP-2025-Bobek-Matyas-BP_Bobek_FlexCAN_final_4.pdf
>[2] https://github.com/shentok/qemu/tree/flexcan
>
>Matyáš Bobek (7):
> hw/arm/sabrelite: Open code DEFINE_MACHINE_ARM
> hw/arm/sabrelite: Introduce class SabreliteMachineState
> hw/misc/imx6_ccm: Add PLL3 and CAN clock
> hw/net/can/flexcan: NXP FlexCAN core emulation
> hw/arm: Plug FlexCAN into FSL_IMX6 and Sabrelite
> tests: Add qtests for FlexCAN
> docs/arm/sabrelite: Mention FlexCAN support
>
> MAINTAINERS | 9 +
> docs/system/arm/sabrelite.rst | 1 +
> docs/system/devices/can.rst | 24 +
> hw/arm/Kconfig | 1 +
> hw/arm/fsl-imx6.c | 29 +
> hw/arm/sabrelite.c | 68 +-
> hw/misc/imx6_ccm.c | 24 +
> hw/misc/trace-events | 2 +
> hw/net/Kconfig | 5 +
> hw/net/can/flexcan.c | 1395 +++++++++++++++++++++++++++++++++
> hw/net/can/flexcan_regs.h | 193 +++++
> hw/net/can/meson.build | 1 +
> hw/net/can/trace-events | 18 +
> include/hw/arm/fsl-imx6.h | 6 +
> include/hw/misc/imx6_ccm.h | 4 +
> include/hw/misc/imx_ccm.h | 1 +
> include/hw/net/flexcan.h | 139 ++++
> tests/qtest/flexcan-test.c | 421 ++++++++++
> tests/qtest/meson.build | 1 +
> 19 files changed, 2332 insertions(+), 10 deletions(-)
> create mode 100644 hw/net/can/flexcan.c
> create mode 100644 hw/net/can/flexcan_regs.h
> create mode 100644 include/hw/net/flexcan.h
> create mode 100644 tests/qtest/flexcan-test.c
>