Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2231483/?format=api
{ "id": 2231483, "url": "http://patchwork.ozlabs.org/api/patches/2231483/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/9e1dbfc5153fa1e952275f3cce30ddb60b423da8.1777571962.git.matyas.bobek@gmail.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<9e1dbfc5153fa1e952275f3cce30ddb60b423da8.1777571962.git.matyas.bobek@gmail.com>", "list_archive_url": null, "date": "2026-04-30T18:26:07", "name": "[v3,5/7] hw/arm: Plug FlexCAN into FSL_IMX6 and Sabrelite", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "d81aadd21a510fab3afa2e83751dde24f2c7dc78", "submitter": { "id": 92267, "url": "http://patchwork.ozlabs.org/api/people/92267/?format=api", "name": "Matyáš Bobek", "email": "matyas.bobek@gmail.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/9e1dbfc5153fa1e952275f3cce30ddb60b423da8.1777571962.git.matyas.bobek@gmail.com/mbox/", "series": [ { "id": 502356, "url": "http://patchwork.ozlabs.org/api/series/502356/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=502356", "date": "2026-04-30T18:26:02", "name": "hw/arm/sabrelite: Add FlexCAN support", "version": 3, "mbox": "http://patchwork.ozlabs.org/series/502356/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2231483/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2231483/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=acnyPf0+;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g62jp3c2wz1yHZ\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 01 May 2026 04:28:30 +1000 (AEST)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wIW6U-0006fy-GW; Thu, 30 Apr 2026 14:27:14 -0400", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <matyas.bobek@gmail.com>)\n id 1wIW61-0006Xc-T7\n for qemu-devel@nongnu.org; Thu, 30 Apr 2026 14:26:50 -0400", "from mail-wr1-x431.google.com ([2a00:1450:4864:20::431])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <matyas.bobek@gmail.com>)\n id 1wIW5i-0005Up-0u\n for qemu-devel@nongnu.org; Thu, 30 Apr 2026 14:26:29 -0400", "by mail-wr1-x431.google.com with SMTP id\n ffacd0b85a97d-43cfd832155so826242f8f.1\n for <qemu-devel@nongnu.org>; Thu, 30 Apr 2026 11:26:25 -0700 (PDT)", "from acidburn.pod.cvut.cz (acidburn.pod.cvut.cz. [147.32.90.2])\n by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-447b76e5c00sm14674925f8f.25.2026.04.30.11.26.23\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 30 Apr 2026 11:26:23 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1777573584; x=1778178384; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=3dVxY32CjowmtmVFCE73w8gSca6PnatFzVRgmRIRyW8=;\n b=acnyPf0+t86KbP2jZodTrLh9Qr0Q72onw3c2Lixrz2bb3ENzMB+TG/eoh2TWg5nRkq\n XxGWUf+zCQzlovq1De41iT0zXbpnl3v6Q/bovZK2hRVqf3iOg0/N5mZ4wfj6Lu8SyOzj\n wkbYiRnpBa4be9Ufketq6VmPkWP7XZt4ESdtnd6VxRrh3hquzvUp3LvqJy+CC4JgwYwK\n sjvyCko80y1RQ14ZKZD7mPZ38gZ/gHmzaE9DZaPCm2H3kt2U7Rkwon1CtYHEZASlrluC\n R7K0tw0te/PFN6O5MWCsP3AFNS0M59ZF86ieZRQNm2Y4WYayWb81XGe69YdTrJtyakAI\n Az1Q==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777573584; x=1778178384;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=3dVxY32CjowmtmVFCE73w8gSca6PnatFzVRgmRIRyW8=;\n b=QsKvgqh6dsjK9XnMZKXUaS4N5R77Uh/sm2Sjp0VgaTdWpEy56Io2MX25Oy70FTlpss\n VmxO3MucGPwjlf2DxfFuxeIDfsB8P2ng2Pt36PqXPBUnGqZsoUMXd5hb5haPpIjfR8Dt\n EaU88fYlQBEonKV8qSWla1rjCrwBC7eox9O7QOBLjS2IEeLsbkQfwx+Sy8b9tKVswcHi\n tiira799HI67kQ0enH5UZV7l9VrEfGbOraVHiGp0zQAbn3NxlM+/cvbwL3SpNCwDwfsP\n fx1JbjuePLt/zMIA7Q0pBGh4wCN1npGX02+41u5ie8FOYq253EaQPB4eVc3glpMnaRaw\n g2GQ==", "X-Gm-Message-State": "AOJu0YwMa09Z/1B21Lu58BX+fkl0I6Gk0IppKQZ+Hyc4DwxBSL4/ofFo\n vLSa3ortCRcMfEfLhb0nvZhC7x3KUhvx1VnVveDx7u9Qv2xO45FgMtNuXdx9lZ8r", "X-Gm-Gg": "AeBDievcsTfrLmBi9rkrM7RaDk/iZJPeSYjoCB8AyLBxI44K7iN7s+ZlnjnkQUYzOiR\n TvmJ+EO40rL4mrD/5x5IFDaEaEClTla9vJSR1Z8yqkfWwKgDNvrEasgzBNGTKPFkH2toGy4GmLL\n 2qFqvTJuFpnR/pisdSF66kvneYBpYi1HQxWWSEY3VxB3ryYpk4nwk+E45lfSLxLcbYThLG4eX7y\n fvYlo+18YVyydMqFe5U1ZcKI3mArlmng871uO0SGGzVOa7wzcqumye9R+GQokGf9cjbL/lxnnKe\n ecvE3t7wrZcJUC8vEc0MHScDAMdavHvIsCiHJ1L8TX3tqqGQSWV9JNqCUyOJkDsbspRnuzkR+0E\n X3J2cZ1/ltzf28b1QtynLUtneBG3dH5vGcHWhbUT+mWT/t0iB7PxLV/VG6WkRc/2vSZt/OHRmz6\n Ey6fEL9tuvYb4MbO9hrmeaMkS5bVkqpe6bZAhwPaaZBekgxnd9P10VLzMpFyx2nl+h", "X-Received": "by 2002:a5d:588c:0:b0:43f:dfbc:8c71 with SMTP id\n ffacd0b85a97d-4493e2ba985mr7641432f8f.25.1777573584083;\n Thu, 30 Apr 2026 11:26:24 -0700 (PDT)", "From": "=?utf-8?b?TWF0ecOhxaEgQm9iZWs=?= <matyas.bobek@gmail.com>", "To": "qemu-devel@nongnu.org, Matyas Bobek <bobekmat@fel.cvut.cz>,\n Pavel Pisa <pisa@fel.cvut.cz>, Bernhard Beschow <shentey@gmail.com>", "Cc": "qemu-arm@nongnu.org, Marc Kleine-Budde <mkl@pengutronix.de>,\n Oliver Hartkopp <socketcan@hartkopp.net>,\n Nikita Ostrenkov <n.ostrenkov@gmail.com>,\n Peter Maydell <peter.maydell@linaro.org>,\n =?utf-8?b?TWF0ecOhxaEgQm9iZWs=?= <matyas.bobek@gmail.com>", "Subject": "[PATCH v3 5/7] hw/arm: Plug FlexCAN into FSL_IMX6 and Sabrelite", "Date": "Thu, 30 Apr 2026 20:26:07 +0200", "Message-ID": "\n <9e1dbfc5153fa1e952275f3cce30ddb60b423da8.1777571962.git.matyas.bobek@gmail.com>", "X-Mailer": "git-send-email 2.53.0", "In-Reply-To": "<cover.1777571962.git.matyas.bobek@gmail.com>", "References": "<cover.1777571962.git.matyas.bobek@gmail.com>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "Received-SPF": "pass client-ip=2a00:1450:4864:20::431;\n envelope-from=matyas.bobek@gmail.com; helo=mail-wr1-x431.google.com", "X-Spam_score_int": "-10", "X-Spam_score": "-1.1", "X-Spam_bar": "-", "X-Spam_report": "(-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_GMAIL_RCVD=1,\n FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=no autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "FlexcanState is added to the FslIMX6State struct like other peripherals.\n\nAdd two new machine properties to Sabrelite machine for linking\nthe embedded FlexCAN instances to QEMU CAN buses by name.\nNo other machine uses FslIMX6State.\n\nSigned-off-by: Matyáš Bobek <matyas.bobek@gmail.com>\nSigned-off-by: Pavel Pisa <pisa@fel.cvut.cz>\nTested-by: Pavel Pisa <pisa@fel.cvut.cz>\nReviewed-by: Bernhard Beschow <shentey@gmail.com>\nReviewed-by: Pavel Pisa <pisa@fel.cvut.cz>\n---\n hw/arm/Kconfig | 1 +\n hw/arm/fsl-imx6.c | 29 +++++++++++++++++++++++++++++\n hw/arm/sabrelite.c | 24 ++++++++++++++++++++++++\n include/hw/arm/fsl-imx6.h | 6 ++++++\n 4 files changed, 60 insertions(+)", "diff": "diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig\nindex c31752e83a..5bd0d0972e 100644\n--- a/hw/arm/Kconfig\n+++ b/hw/arm/Kconfig\n@@ -518,6 +518,7 @@ config FSL_IMX6\n select IMX_FEC\n select IMX_I2C\n select IMX_USBPHY\n+ select CAN_FLEXCAN\n select WDT_IMX2\n select PL310 # cache controller\n select PCI_EXPRESS_DESIGNWARE\ndiff --git a/hw/arm/fsl-imx6.c b/hw/arm/fsl-imx6.c\nindex f663ddbf0a..337921d17d 100644\n--- a/hw/arm/fsl-imx6.c\n+++ b/hw/arm/fsl-imx6.c\n@@ -90,6 +90,10 @@ static void fsl_imx6_init(Object *obj)\n snprintf(name, NAME_SIZE, \"spi%d\", i + 1);\n object_initialize_child(obj, name, &s->spi[i], TYPE_IMX_SPI);\n }\n+ for (i = 0; i < FSL_IMX6_NUM_CANS; i++) {\n+ snprintf(name, NAME_SIZE, \"flexcan%d\", i + 1);\n+ object_initialize_child(obj, name, &s->can[i], TYPE_CAN_FLEXCAN);\n+ }\n for (i = 0; i < FSL_IMX6_NUM_WDTS; i++) {\n snprintf(name, NAME_SIZE, \"wdt%d\", i);\n object_initialize_child(obj, name, &s->wdt[i], TYPE_IMX2_WDT);\n@@ -377,6 +381,27 @@ static void fsl_imx6_realize(DeviceState *dev, Error **errp)\n qdev_get_gpio_in(gic, spi_table[i].irq));\n }\n \n+ /* Initialize all FLEXCANs */\n+ for (i = 0; i < FSL_IMX6_NUM_CANS; i++) {\n+ static const struct {\n+ hwaddr addr;\n+ unsigned int irq;\n+ } flexcan_table[FSL_IMX6_NUM_CANS] = {\n+ { FSL_IMX6_CAN1_ADDR, FSL_IMX6_FLEXCAN1_IRQ },\n+ { FSL_IMX6_CAN2_ADDR, FSL_IMX6_FLEXCAN2_IRQ },\n+ };\n+\n+ s->can[i].ccm = IMX_CCM(&s->ccm);\n+ object_property_set_link(OBJECT(&s->can[i]), \"canbus\",\n+ OBJECT(s->canbus[i]), &error_abort);\n+\n+ sysbus_realize(SYS_BUS_DEVICE(&s->can[i]), &error_abort);\n+\n+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->can[i]), 0, flexcan_table[i].addr);\n+ sysbus_connect_irq(SYS_BUS_DEVICE(&s->can[i]), 0,\n+ qdev_get_gpio_in(gic, flexcan_table[i].irq));\n+ }\n+\n object_property_set_uint(OBJECT(&s->eth), \"phy-num\", s->phy_num,\n &error_abort);\n qemu_configure_nic_device(DEVICE(&s->eth), true, NULL);\n@@ -480,6 +505,10 @@ static void fsl_imx6_realize(DeviceState *dev, Error **errp)\n \n static const Property fsl_imx6_properties[] = {\n DEFINE_PROP_UINT32(\"fec-phy-num\", FslIMX6State, phy_num, 0),\n+ DEFINE_PROP_LINK(\"canbus0\", FslIMX6State, canbus[0], TYPE_CAN_BUS,\n+ CanBusState *),\n+ DEFINE_PROP_LINK(\"canbus1\", FslIMX6State, canbus[1], TYPE_CAN_BUS,\n+ CanBusState *),\n };\n \n static void fsl_imx6_class_init(ObjectClass *oc, const void *data)\ndiff --git a/hw/arm/sabrelite.c b/hw/arm/sabrelite.c\nindex 7e036e6388..84bbc2f979 100644\n--- a/hw/arm/sabrelite.c\n+++ b/hw/arm/sabrelite.c\n@@ -24,6 +24,7 @@ struct SabreliteMachineState {\n MachineState parent_obj;\n \n FslIMX6State soc;\n+ CanBusState *canbus[FSL_IMX6_NUM_CANS];\n };\n \n #define TYPE_SABRELITE_MACHINE MACHINE_TYPE_NAME(\"sabrelite\")\n@@ -64,6 +65,13 @@ static void sabrelite_init(MachineState *machine)\n /* Ethernet PHY address is 6 */\n object_property_set_int(OBJECT(&s->soc), \"fec-phy-num\", 6, &error_fatal);\n \n+ for (int i = 0; i < FSL_IMX6_NUM_CANS; i++) {\n+ g_autofree char *bus_name = g_strdup_printf(\"canbus%d\", i);\n+\n+ object_property_set_link(OBJECT(&s->soc), bus_name,\n+ OBJECT(s->canbus[i]), &error_fatal);\n+ }\n+\n qdev_realize(DEVICE(&s->soc), NULL, &error_fatal);\n \n memory_region_add_subregion(get_system_memory(), FSL_IMX6_MMDC_ADDR,\n@@ -112,6 +120,21 @@ static void sabrelite_init(MachineState *machine)\n }\n }\n \n+static void sabrelite_machine_instance_init(Object *obj)\n+{\n+ SabreliteMachineState *s = SABRELITE_MACHINE(obj);\n+\n+ object_property_add_link(obj, \"canbus0\", TYPE_CAN_BUS,\n+ (Object **)&s->canbus[0],\n+ object_property_allow_set_link,\n+ 0);\n+\n+ object_property_add_link(obj, \"canbus1\", TYPE_CAN_BUS,\n+ (Object **)&s->canbus[1],\n+ object_property_allow_set_link,\n+ 0);\n+}\n+\n static void sabrelite_machine_class_init(ObjectClass *oc, const void *data)\n {\n MachineClass *mc = MACHINE_CLASS(oc);\n@@ -128,6 +151,7 @@ static const TypeInfo sabrelite_machine_init_typeinfo = {\n .name = TYPE_SABRELITE_MACHINE,\n .parent = TYPE_MACHINE,\n .class_init = sabrelite_machine_class_init,\n+ .instance_init = sabrelite_machine_instance_init,\n .instance_size = sizeof(SabreliteMachineState),\n .abstract = false,\n .interfaces = arm_machine_interfaces,\ndiff --git a/include/hw/arm/fsl-imx6.h b/include/hw/arm/fsl-imx6.h\nindex cddd100dd6..8ea1677e86 100644\n--- a/include/hw/arm/fsl-imx6.h\n+++ b/include/hw/arm/fsl-imx6.h\n@@ -30,12 +30,14 @@\n #include \"hw/sd/sdhci.h\"\n #include \"hw/ssi/imx_spi.h\"\n #include \"hw/net/imx_fec.h\"\n+#include \"hw/net/flexcan.h\"\n #include \"hw/usb/chipidea.h\"\n #include \"hw/usb/imx-usb-phy.h\"\n #include \"hw/pci-host/designware.h\"\n #include \"hw/core/or-irq.h\"\n #include \"system/memory.h\"\n #include \"target/arm/cpu.h\"\n+#include \"net/can_emu.h\"\n #include \"qom/object.h\"\n \n #define TYPE_FSL_IMX6 \"fsl-imx6\"\n@@ -51,6 +53,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(FslIMX6State, FSL_IMX6)\n #define FSL_IMX6_NUM_WDTS 2\n #define FSL_IMX6_NUM_USB_PHYS 2\n #define FSL_IMX6_NUM_USBS 4\n+#define FSL_IMX6_NUM_CANS 2\n \n struct FslIMX6State {\n /*< private >*/\n@@ -73,6 +76,7 @@ struct FslIMX6State {\n IMXUSBPHYState usbphy[FSL_IMX6_NUM_USB_PHYS];\n ChipideaState usb[FSL_IMX6_NUM_USBS];\n IMXFECState eth;\n+ FlexcanState can[FSL_IMX6_NUM_CANS];\n DesignwarePCIEHost pcie;\n OrIRQState pcie4_msi_irq;\n MemoryRegion rom;\n@@ -80,6 +84,8 @@ struct FslIMX6State {\n MemoryRegion ocram;\n MemoryRegion ocram_alias;\n uint32_t phy_num;\n+\n+ CanBusState *canbus[FSL_IMX6_NUM_CANS];\n };\n \n \n", "prefixes": [ "v3", "5/7" ] }