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
>

Reply via email to