From nobody Sun Mar 22 15:41:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1773947687; cv=none; d=zohomail.com; s=zohoarc; b=m92nDyDl7X3Ki2tVgDIJPZueK09DCmtLwmIvJwzGrtwEpcK4vkNG2uNa1DTgEsf83fd8YD0CsOI9WFsh3El3tE2DiEOuSszkjiAPzHNJKffetmMSXYl48Ji/8Q+P7bAICauiIStHXCBrUfuJXm9a52wiNm6qW94cGm+s4MEid7g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773947687; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Rd/Y+1akr2fPBl8ErliFiHVkldG235b9g6DDlnm/+ZI=; b=CTeDqCA5GOBk8gzh5rhiWqCmMU19smWr4FHux5R0mNwd6OePnlOpNj1uyCpedk+CF0wHd9AjR9UPAqW7hJsEIiS2kQtZtmSD86ujyUqxw3AQFazl43rxOa9x/weHkN1TnIQ3vVLpuicZPAOzolgUR0fWeI7p/os9lGbuGl7U70w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773947687853177.0654442311784; Thu, 19 Mar 2026 12:14:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w3IpD-0004u5-P6; Thu, 19 Mar 2026 15:14:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Ip1-0004is-1m for qemu-devel@nongnu.org; Thu, 19 Mar 2026 15:14:22 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w3Iov-0000nB-6K for qemu-devel@nongnu.org; Thu, 19 Mar 2026 15:14:17 -0400 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-439b9cf8cb5so1653998f8f.0 for ; Thu, 19 Mar 2026 12:14:06 -0700 (PDT) Received: from acidburn.pod.cvut.cz (acidburn.pod.cvut.cz. [147.32.90.2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43b64714e2esm635921f8f.32.2026.03.19.12.14.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2026 12:14:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773947645; x=1774552445; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Rd/Y+1akr2fPBl8ErliFiHVkldG235b9g6DDlnm/+ZI=; b=JDp25sKjRx1xWog33j6jQgB8MG6OFPEfiUdaNLwSzkhtByUiFc7ITN1y2gcCg/E5zY 34SUNDNY4KXKRrs/J4BEgzX6GnmQbjy0q3OaIJ9aACQb1pDP0V2NpJBBNFl4ZfoG5Lzv bvDGm6D5pifg8jBKHzKgxxxLNJ2YDBeY6cJa1fSYACqzat+D/323Qsj1IcId82U/g5eE paVW3Q8O/ZYZOnncKMZSnjV9ZJJdu9/7XKMLI9F/dCUMNey1zVCUw2hWxEOD9mqw/VKY LlIKQtdn1wJ2bVcFi9NfGBuF1es2h3JT7gr3g6ySERboCte934HRtAARvbcOwwV5jx/5 j00g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773947645; x=1774552445; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Rd/Y+1akr2fPBl8ErliFiHVkldG235b9g6DDlnm/+ZI=; b=ryAT+UQbX6GA7j9doM8zYNYHVhOjDdq1+LYH/pG0QF9zFFm9TQOBG2uTETQBojDjNB o1zxMrDRlDy5xKAPlAAciJYtXpDgHAONmDsGnCaOhSLIW/RoCyTeNVHjf0MuMnXQJkrE HhtKb2e/lw4XAbXGhQHTRPq8c+WmU+xcDUNvmoKTkRIyNfihEjhizoLVKduds6e1cFUy KFEqbCiTJEEKyTaue7ROJb7IkZ3IAA7V2JHxXKSgojMrZBfUrBpYZ9jUj1VGvwrWA2db Q95DtUMXRGRGG2zfs46OtArgPT+2q0Cj9kuUcDJIrtYV6pGFy/rVSFFCaD+B6d7goWE9 z3Fw== X-Gm-Message-State: AOJu0YzNPQwa5tnYuXzhTB0VuIbxDbF51reSFAEqRJweBzM3tEgCRN3e 4iQeuCGOQ8gjwT0JS0/RdZMTld37rm4IyHXPY+NgKkAr3O1RBZXcik5HXR23SlzA X-Gm-Gg: ATEYQzx9xBue6HYislT1p0oCiMJZuHs6BTq4GcwKZUWzC7+pCYXWwa/1sgoNILLcDrY 1KQtJdYyC9/gI5cZNaq1VTQgqfFRAMfqj4wT5Up/UJQmbkEDbUVrfbbymtBMRXZHzatDpO6073+ giucR3V5gDbs2HcgBpBsQMTq8tnm0HnvqFju+EyM5xnbeKMaOTRlODSTXzcom8yQYdukwkzV4u6 pNhnKzuzaR2B/Rht3oDm6b9G6XlZoS8rUmaIqJMg4jq5jQnxqU3Vxs9ZFF3fLRy19+nalgIFq+u o9/XcGlWtaT060C3M4/NjTCw7HX8duxw/mSLUDziPCpMkPcDsFXfiM5vohOO7KFG/0b8aefOFMl C7ut9d6k8YaHd3f5r2rI/RWKsG0PB0FZBsU1IZk80e+Zn4E6oHRkM+Bjhl7IM+R9KXkL4I8XSs3 Klj9ippbjss2sE14/+0Dm6GVWMh/EMomahV0sXhXIXWhi+S7rQT+ZlrQ== X-Received: by 2002:a05:6000:1865:b0:43b:4352:1bda with SMTP id ffacd0b85a97d-43b64238803mr897301f8f.3.1773947644971; Thu, 19 Mar 2026 12:14:04 -0700 (PDT) From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Bobek?= To: qemu-devel@nongnu.org, Matyas Bobek , Pavel Pisa , Bernhard Beschow Cc: qemu-arm@nongnu.org, Marc Kleine-Budde , Oliver Hartkopp , Nikita Ostrenkov , Peter Maydell , =?UTF-8?q?Maty=C3=A1=C5=A1=20Bobek?= Subject: [PATCH v2 5/7] hw/arm: Plug FlexCAN into FSL_IMX6 and Sabrelite Date: Thu, 19 Mar 2026 20:13:12 +0100 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42c; envelope-from=matyas.bobek@gmail.com; helo=mail-wr1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1773947690015154100 FlexcanState is added to the FslIMX6State struct like other peripherals. Add two new machine properties to Sabrelite machine for linking the embedded FlexCAN instances to QEMU CAN buses by name. No other machine uses FslIMX6State. Signed-off-by: Maty=C3=A1=C5=A1 Bobek Reviewed-by: Bernhard Beschow --- hw/arm/Kconfig | 1 + hw/arm/fsl-imx6.c | 29 +++++++++++++++++++++++++++++ hw/arm/sabrelite.c | 24 ++++++++++++++++++++++++ include/hw/arm/fsl-imx6.h | 6 ++++++ 4 files changed, 60 insertions(+) diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index 4e50fb1111..c128d7d91f 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -519,6 +519,7 @@ config FSL_IMX6 select IMX_FEC select IMX_I2C select IMX_USBPHY + select CAN_FLEXCAN select WDT_IMX2 select PL310 # cache controller select PCI_EXPRESS_DESIGNWARE diff --git a/hw/arm/fsl-imx6.c b/hw/arm/fsl-imx6.c index f663ddbf0a..337921d17d 100644 --- a/hw/arm/fsl-imx6.c +++ b/hw/arm/fsl-imx6.c @@ -90,6 +90,10 @@ static void fsl_imx6_init(Object *obj) snprintf(name, NAME_SIZE, "spi%d", i + 1); object_initialize_child(obj, name, &s->spi[i], TYPE_IMX_SPI); } + for (i =3D 0; i < FSL_IMX6_NUM_CANS; i++) { + snprintf(name, NAME_SIZE, "flexcan%d", i + 1); + object_initialize_child(obj, name, &s->can[i], TYPE_CAN_FLEXCAN); + } for (i =3D 0; i < FSL_IMX6_NUM_WDTS; i++) { snprintf(name, NAME_SIZE, "wdt%d", i); object_initialize_child(obj, name, &s->wdt[i], TYPE_IMX2_WDT); @@ -377,6 +381,27 @@ static void fsl_imx6_realize(DeviceState *dev, Error *= *errp) qdev_get_gpio_in(gic, spi_table[i].irq)); } =20 + /* Initialize all FLEXCANs */ + for (i =3D 0; i < FSL_IMX6_NUM_CANS; i++) { + static const struct { + hwaddr addr; + unsigned int irq; + } flexcan_table[FSL_IMX6_NUM_CANS] =3D { + { FSL_IMX6_CAN1_ADDR, FSL_IMX6_FLEXCAN1_IRQ }, + { FSL_IMX6_CAN2_ADDR, FSL_IMX6_FLEXCAN2_IRQ }, + }; + + s->can[i].ccm =3D IMX_CCM(&s->ccm); + object_property_set_link(OBJECT(&s->can[i]), "canbus", + OBJECT(s->canbus[i]), &error_abort); + + sysbus_realize(SYS_BUS_DEVICE(&s->can[i]), &error_abort); + + sysbus_mmio_map(SYS_BUS_DEVICE(&s->can[i]), 0, flexcan_table[i].ad= dr); + sysbus_connect_irq(SYS_BUS_DEVICE(&s->can[i]), 0, + qdev_get_gpio_in(gic, flexcan_table[i].irq)); + } + object_property_set_uint(OBJECT(&s->eth), "phy-num", s->phy_num, &error_abort); qemu_configure_nic_device(DEVICE(&s->eth), true, NULL); @@ -480,6 +505,10 @@ static void fsl_imx6_realize(DeviceState *dev, Error *= *errp) =20 static const Property fsl_imx6_properties[] =3D { DEFINE_PROP_UINT32("fec-phy-num", FslIMX6State, phy_num, 0), + DEFINE_PROP_LINK("canbus0", FslIMX6State, canbus[0], TYPE_CAN_BUS, + CanBusState *), + DEFINE_PROP_LINK("canbus1", FslIMX6State, canbus[1], TYPE_CAN_BUS, + CanBusState *), }; =20 static void fsl_imx6_class_init(ObjectClass *oc, const void *data) diff --git a/hw/arm/sabrelite.c b/hw/arm/sabrelite.c index 7e036e6388..84bbc2f979 100644 --- a/hw/arm/sabrelite.c +++ b/hw/arm/sabrelite.c @@ -24,6 +24,7 @@ struct SabreliteMachineState { MachineState parent_obj; =20 FslIMX6State soc; + CanBusState *canbus[FSL_IMX6_NUM_CANS]; }; =20 #define TYPE_SABRELITE_MACHINE MACHINE_TYPE_NAME("sabrelite") @@ -64,6 +65,13 @@ static void sabrelite_init(MachineState *machine) /* Ethernet PHY address is 6 */ object_property_set_int(OBJECT(&s->soc), "fec-phy-num", 6, &error_fata= l); =20 + for (int i =3D 0; i < FSL_IMX6_NUM_CANS; i++) { + g_autofree char *bus_name =3D g_strdup_printf("canbus%d", i); + + object_property_set_link(OBJECT(&s->soc), bus_name, + OBJECT(s->canbus[i]), &error_fatal); + } + qdev_realize(DEVICE(&s->soc), NULL, &error_fatal); =20 memory_region_add_subregion(get_system_memory(), FSL_IMX6_MMDC_ADDR, @@ -112,6 +120,21 @@ static void sabrelite_init(MachineState *machine) } } =20 +static void sabrelite_machine_instance_init(Object *obj) +{ + SabreliteMachineState *s =3D SABRELITE_MACHINE(obj); + + object_property_add_link(obj, "canbus0", TYPE_CAN_BUS, + (Object **)&s->canbus[0], + object_property_allow_set_link, + 0); + + object_property_add_link(obj, "canbus1", TYPE_CAN_BUS, + (Object **)&s->canbus[1], + object_property_allow_set_link, + 0); +} + static void sabrelite_machine_class_init(ObjectClass *oc, const void *data) { MachineClass *mc =3D MACHINE_CLASS(oc); @@ -128,6 +151,7 @@ static const TypeInfo sabrelite_machine_init_typeinfo = =3D { .name =3D TYPE_SABRELITE_MACHINE, .parent =3D TYPE_MACHINE, .class_init =3D sabrelite_machine_class_init, + .instance_init =3D sabrelite_machine_instance_init, .instance_size =3D sizeof(SabreliteMachineState), .abstract =3D false, .interfaces =3D arm_machine_interfaces, diff --git a/include/hw/arm/fsl-imx6.h b/include/hw/arm/fsl-imx6.h index bb866994df..19c1923a13 100644 --- a/include/hw/arm/fsl-imx6.h +++ b/include/hw/arm/fsl-imx6.h @@ -30,11 +30,13 @@ #include "hw/sd/sdhci.h" #include "hw/ssi/imx_spi.h" #include "hw/net/imx_fec.h" +#include "hw/net/flexcan.h" #include "hw/usb/chipidea.h" #include "hw/usb/imx-usb-phy.h" #include "hw/pci-host/designware.h" #include "hw/core/or-irq.h" #include "system/memory.h" +#include "net/can_emu.h" #include "cpu.h" #include "qom/object.h" =20 @@ -51,6 +53,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(FslIMX6State, FSL_IMX6) #define FSL_IMX6_NUM_WDTS 2 #define FSL_IMX6_NUM_USB_PHYS 2 #define FSL_IMX6_NUM_USBS 4 +#define FSL_IMX6_NUM_CANS 2 =20 struct FslIMX6State { /*< private >*/ @@ -73,6 +76,7 @@ struct FslIMX6State { IMXUSBPHYState usbphy[FSL_IMX6_NUM_USB_PHYS]; ChipideaState usb[FSL_IMX6_NUM_USBS]; IMXFECState eth; + FlexcanState can[FSL_IMX6_NUM_CANS]; DesignwarePCIEHost pcie; OrIRQState pcie4_msi_irq; MemoryRegion rom; @@ -80,6 +84,8 @@ struct FslIMX6State { MemoryRegion ocram; MemoryRegion ocram_alias; uint32_t phy_num; + + CanBusState *canbus[FSL_IMX6_NUM_CANS]; }; =20 =20 --=20 2.53.0