From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549728; cv=none; d=zohomail.com; s=zohoarc; b=i28HvTbXR7M6s8qiuEfajL5bNEw1gtwPIt/IL4S+U36WWonmuoKLkLqrttj+O7vSrmM/QCfGsDFaklIzz9rjlr8+ZIorSNYZp5/+xbCdB9xQPUuhfA83wWOILSq+9ux9gCeYSkgjjXZ44pd7sk62qqC4EFQiANLJiOetiDOCKFA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549728; 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=iYfPGh5qGe7UFoezOE8mvkcXB83koFrBTYj9a+KKgF0=; b=IjFgy8OEcjR7p82e7iGajJ6zQAn4Qm/tbG36aYsxCgME3kKZkTgGm4AjGtMh3TPpMiGjhOnml1XtT23Y73TDFLVPf/4MSRG0WDAUIPWQvtVHT2CE0NgHwGomfl3H1IesdMKwRlgj1RuWlPy7636YDANMDLk9TXISBLKLKJ6fPEM= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549728050527.5688946051145; Wed, 12 Aug 2026 08:48:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6v-0004dM-O5; Wed, 12 Aug 2026 11:43:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6X-0004L4-C1 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:59 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6U-0000CQ-SF for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:57 -0400 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDcWBP104292 for ; Wed, 12 Aug 2026 15:42:42 GMT Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0nuchqkk-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:41 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-38f57e31b6eso1109303a91.1 for ; Wed, 12 Aug 2026 08:42:41 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= iYfPGh5qGe7UFoezOE8mvkcXB83koFrBTYj9a+KKgF0=; b=K0HnL4SdjN9O2n6z o5tIR+xw8H0nG0j3t8x3ATk/BE3qN395luI69ah62jYl1N+I5rLi8xJBKOQ+BKgo RaWo25hpBObncOYvCjVKgcI8Gc/uyoc/7+JCE+UItAOhlSqFgiUR+cPy5ZDQ2s9A 0LRkdS232Oh0PPNQHt1qhUWbtxUamtGVCNH576KM5yuBvgJxvg+aE0SiK88ZAabo 0CnFrYhCsNPS6Ri8NWQztjHnwSEhHGuLWBllA2I7D93+pOS4dtz7+gZydJxA3ePW XUdkoJKz5GdSpk6nhfYhW5W0P/xriQBLpE3+v22+RDF2q2MygjnIRxnjcXpQrsuT 2OC09g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549361; x=1787154161; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=iYfPGh5qGe7UFoezOE8mvkcXB83koFrBTYj9a+KKgF0=; b=I/KLmyQv2/bSH++Mqw4lMkjKaA7df+pi85Uxn4kUVnpSX1GOTVfmurmdbr36r8Klro qmfNcDDWg2iWNMbsCcwJNW7jyKYrIyrAPb11Ju8cOYkwvOedNr0S42NDbNC7wck7aHqM KArXrWoMsJdPH9IQkb3h4/8evhYpQ5hNCayTyYsKRCbnrnAd2wmkSw1mX8LwtTnkaVhh XMAOKovODKsEsspdQYDIvpZstZKAF4v+fVADJILu3RZ1bdlqSH0DIDMGXVIzs2L/9Y0p BhM84MWmHtw5xJmlgpUuCwFsy/SBt5HzNLqwteiUoy98/mUYyCBTOteqCGDCOEEhI16w crTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549361; x=1787154161; h=content-transfer-encoding:content-type: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 :content-type; bh=iYfPGh5qGe7UFoezOE8mvkcXB83koFrBTYj9a+KKgF0=; b=E532dRsYFE5azq1ZpmqJcjprMa2pwL6Uh9szw4xtjDLsnyP71Fr9vF6z+Vb/DT1g4u IOQ/Dky8V05eFGao2nVp8gX6qRh0z45C1gvrHRK3AggHq/CuPrz6NXkQ8BBMlFBQAooR iJU6ZB9lRMG+AbuVyWV3oGO0IZe4vYcJSLqVybq6SHJ/OCSR/DWkyCBAfCShPCmGVLKM uWYyaecR7ceTiEeG5TIx9UBXqik0d6S1zQnD//z1wvA6QWXqt5SZg7LEbdFutLrCwveZ ltER+rmPKeKQxJ8lxoDKWQNPVQQuWIrRewfRdbFsjzDhE9tJF3Cwj5KxU68wEyYA7xjv BPBA== X-Gm-Message-State: AOJu0YwVuRfp8y4sByR0Lya619UF7OOYQ3hhuBU0mQ2V96Uwic3mFZ6e SOJSbYI/pwaUogTV5rnE41YpeQBhdRKx7n7/r+h3RRe4J1tASMjitNbdr1Xl9i6U6B1wGrhYAcg xZksUVdzu/nuROeEjTikvhOxxcKMDh1IpygCc5NE/pumESSBmklMk5pNuNa4cVoHxLw== X-Gm-Gg: AR+sD13yRKDgLgbnMHeadDUZgEU/sLjEUXfSkzsZqffMnxjFrzoBtyLiuD55zckI5xz K92AMcqm4XGQebflJtqn/C1T4ryXrXhiX454vUMTe+GbikoMsk+B0rxuqpSuaMcUOBgjU5wDXd2 Ow+rSkap/JmsQsAcuk2UcR0iqQf2wcuvxlQvi3pOB8oImJa/BEuesxlQ1CinHgJTJpr82mZXHuC 1YB1UXqpYXN/OmNWEuRlDPduE19zE1/slcNFdDe451AtDdfCZmGJy+RXCxDBd7U+R9mfqs60Pd1 x4IgkBLNUnTjO0VLeQdsRuN+WXYyG0vbKVvxKqepwOD57V0Zt9P8Zo4miSIxcpJzhAOLrJguys6 BdggQY4Cr/Wsf4U8I6OA/evIkDeLsa5WYWOkYZ5ys90FrOhgt X-Received: by 2002:a17:90b:4b91:b0:38c:a59b:5189 with SMTP id 98e67ed59e1d1-3930145868emr6549999a91.15.1786549360911; Wed, 12 Aug 2026 08:42:40 -0700 (PDT) X-Received: by 2002:a17:90b:4b91:b0:38c:a59b:5189 with SMTP id 98e67ed59e1d1-3930145868emr6549929a91.15.1786549360317; Wed, 12 Aug 2026 08:42:40 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier Subject: [PULL v2 01/41] hw/hexagon: add hex-subsys Date: Wed, 12 Aug 2026 08:41:40 -0700 Message-Id: <20260812154220.1029828-2-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: thIdeTpgEPDLhAXIZwGc4afzAg9VkJmz X-Proofpoint-ORIG-GUID: thIdeTpgEPDLhAXIZwGc4afzAg9VkJmz X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX1IVVUIPHxVcH HNAQyW33PiSmXr1wf1IQHPDxw5BAtrjpCbiSv3PBsJT1+SM9Bdqd6Gz2FlEo/4r2C6gnwr9jPPp knQ0ziHrYZKqcf2eadl9iuAAjrxUTnwsakYhBMPmad5ZGmevFMLkTVRd8DRAShBhOR9Tz7CyqkX 4HidrZSov6T4KY7gD9DQoifZEs1Uc5GML8Xx1nZpu3XTg7i7pmngWnOLArcPpaz0K/ekRCChDpp wEC52cBK1aSqPxFT5+gtCSE202rM3bvJOvSAXfao56y93iCCmIVJ9bGGqOjFFPlqH+ZcLYnsGcL KpH+8B1gw6JslfDfVXL7Q6DxDR7FLD0M7WyeToasXoJ98NG0/5puay0CT3YEcZ8f9S0VJ9CiG43 pdpva6o8dyFclz7xSefTlKZCFi+5zEyyzNy8ptmLFqpdDZeAF3AQwQnWie/kxti9zuZqujrExSF CO/TNV/zeSgU8RDZFWQ== X-Authority-Analysis: v=2.4 cv=VcjH+lp9 c=1 sm=1 tr=0 ts=6a7c9471 cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=8oo-Xqheu1KagxFlSIAA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXyh5LXD6TDo++ 1Ehu9Elvd5jT/h3wsWYP6QeDPUbtMXxUz/QUXQmuxDNNipRPdVoxzZlMZQuC6g1/acVaP3SmYZ6 r9N+gL+Ohh/gCRtVKKzlFyxf8vUeKUM= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 adultscore=0 priorityscore=1501 phishscore=0 suspectscore=0 clxscore=1015 bulkscore=0 lowpriorityscore=0 malwarescore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549729618158500 The virt and DSP machine models build the same core subsystem, let's abstract out that part. Start with the DDR and config table ROM setup. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-2-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- include/hw/hexagon/hex-subsys.h | 17 +++++++++++++++++ hw/hexagon/hex-subsys.c | 32 ++++++++++++++++++++++++++++++++ hw/hexagon/hexagon_dsp.c | 17 ++--------------- hw/hexagon/virt.c | 14 ++------------ hw/hexagon/meson.build | 1 + 5 files changed, 54 insertions(+), 27 deletions(-) create mode 100644 include/hw/hexagon/hex-subsys.h create mode 100644 hw/hexagon/hex-subsys.c diff --git a/include/hw/hexagon/hex-subsys.h b/include/hw/hexagon/hex-subsy= s.h new file mode 100644 index 00000000000..6bcde303f2e --- /dev/null +++ b/include/hw/hexagon/hex-subsys.h @@ -0,0 +1,17 @@ +/* + * Hexagon subsystem helpers shared between the machine models. + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_HEXAGON_HEX_SUBSYS_H +#define HW_HEXAGON_HEX_SUBSYS_H + +#include "hw/hexagon/hexagon.h" + +/* Create the subsystem shared by every Hexagon machine. */ +void hex_subsys_create(HexagonCommonMachineState *hms, + const struct hexagon_machine_config *m_cfg); + +#endif /* HW_HEXAGON_HEX_SUBSYS_H */ diff --git a/hw/hexagon/hex-subsys.c b/hw/hexagon/hex-subsys.c new file mode 100644 index 00000000000..d146ee0c075 --- /dev/null +++ b/hw/hexagon/hex-subsys.c @@ -0,0 +1,32 @@ +/* + * Hexagon subsystem helpers shared between the machine models. + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "hw/hexagon/hex-subsys.h" +#include "hw/core/loader.h" +#include "system/address-spaces.h" + +void hex_subsys_create(HexagonCommonMachineState *hms, + const struct hexagon_machine_config *m_cfg) +{ + MachineState *machine =3D MACHINE(hms); + MemoryRegion *sysmem =3D get_system_memory(); + + /* Main DDR at the reset vector. */ + memory_region_init_ram(&hms->ram, NULL, "ddr.ram", machine->ram_size, + &error_fatal); + memory_region_add_subregion(sysmem, 0x0, &hms->ram); + + /* Config-table ROM and the blob that backs it. */ + memory_region_init_rom(&hms->cfgtable_rom, NULL, "config_table.rom", + sizeof(m_cfg->cfgtable), &error_fatal); + memory_region_add_subregion(sysmem, m_cfg->cfgbase, &hms->cfgtable_rom= ); + rom_add_blob_fixed_as("config_table.rom", &m_cfg->cfgtable, + sizeof(m_cfg->cfgtable), m_cfg->cfgbase, + &address_space_memory); +} diff --git a/hw/hexagon/hexagon_dsp.c b/hw/hexagon/hexagon_dsp.c index aa493993229..f94f7fd4e11 100644 --- a/hw/hexagon/hexagon_dsp.c +++ b/hw/hexagon/hexagon_dsp.c @@ -14,6 +14,7 @@ #include "hw/core/boards.h" #include "hw/core/qdev-properties.h" #include "hw/hexagon/hexagon.h" +#include "hw/hexagon/hex-subsys.h" #include "hw/hexagon/hexagon_globalreg.h" #include "hw/hexagon/hexagon_tlb.h" #include "hw/core/loader.h" @@ -108,7 +109,6 @@ static void hexagon_common_init(MachineState *machine, = Rev_t rev, { HexagonCommonMachineState *hms =3D HEXAGON_COMMON_MACHINE(machine); HexagonDspMachineState *dms =3D HEXAGON_DSP_MACHINE(machine); - MemoryRegion *address_space; DeviceState *glob_regs_dev; DeviceState *tlb_dev; =20 @@ -120,16 +120,7 @@ static void hexagon_common_init(MachineState *machine,= Rev_t rev, =20 machine->enable_graphics =3D 0; =20 - address_space =3D get_system_memory(); - - memory_region_init_rom(&hms->cfgtable_rom, NULL, "config_table.rom", - sizeof(m_cfg->cfgtable), &error_fatal); - memory_region_add_subregion(address_space, m_cfg->cfgbase, - &hms->cfgtable_rom); - - memory_region_init_ram(&hms->ram, NULL, "ddr.ram", - machine->ram_size, &error_fatal); - memory_region_add_subregion(address_space, 0x0, &hms->ram); + hex_subsys_create(hms, m_cfg); =20 glob_regs_dev =3D qdev_new(TYPE_HEXAGON_GLOBALREG); object_property_add_child(OBJECT(machine), "global-regs", @@ -162,10 +153,6 @@ static void hexagon_common_init(MachineState *machine,= Rev_t rev, OBJECT(tlb_dev), &error_fatal); qdev_realize_and_unref(DEVICE(cpu), NULL, &error_fatal); } - - rom_add_blob_fixed_as("config_table.rom", &m_cfg->cfgtable, - sizeof(m_cfg->cfgtable), m_cfg->cfgbase, - &address_space_memory); } =20 static void init_mc(MachineClass *mc) diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c index b7504725026..ad0bc4f1329 100644 --- a/hw/hexagon/virt.c +++ b/hw/hexagon/virt.c @@ -13,6 +13,7 @@ #include "hw/core/clock.h" #include "hw/core/sysbus-fdt.h" #include "hw/hexagon/hexagon.h" +#include "hw/hexagon/hex-subsys.h" #include "hw/hexagon/hexagon_globalreg.h" #include "hw/hexagon/hexagon_tlb.h" #include "hw/core/loader.h" @@ -244,9 +245,7 @@ static void virt_init(MachineState *ms) vms->apb_clk =3D clock_new(OBJECT(ms), "apb-pclk"); clock_set_hz(vms->apb_clk, 24000000); =20 - memory_region_init_ram(&vms->parent_obj.ram, NULL, "ddr.ram", - ms->ram_size, &error_fatal); - memory_region_add_subregion(vms->sys, 0x0, &vms->parent_obj.ram); + hex_subsys_create(&vms->parent_obj, m_cfg); =20 if (m_cfg->l2tcm_size) { memory_region_init_ram(&vms->tcm, NULL, "tcm.ram", m_cfg->l2tcm_si= ze, @@ -255,11 +254,6 @@ static void virt_init(MachineState *ms) &vms->tcm); } =20 - memory_region_init_rom(&vms->parent_obj.cfgtable_rom, NULL, - "config_table.rom", sizeof(m_cfg->cfgtable), - &error_fatal); - memory_region_add_subregion(vms->sys, m_cfg->cfgbase, - &vms->parent_obj.cfgtable_rom); fdt_add_hvx(vms, m_cfg); =20 gsregs_dev =3D qdev_new(TYPE_HEXAGON_GLOBALREG); @@ -302,10 +296,6 @@ static void virt_init(MachineState *ms) clk_phandle =3D fdt_add_clocks(vms); fdt_add_uart(vms, VIRT_UART0, clk_phandle); =20 - rom_add_blob_fixed_as("config_table.rom", &m_cfg->cfgtable, - sizeof(m_cfg->cfgtable), m_cfg->cfgbase, - &address_space_memory); - hexagon_load_fdt(vms); } =20 diff --git a/hw/hexagon/meson.build b/hw/hexagon/meson.build index bade3a32921..720a5d54dcc 100644 --- a/hw/hexagon/meson.build +++ b/hw/hexagon/meson.build @@ -1,6 +1,7 @@ hexagon_ss =3D ss.source_set() hexagon_ss.add(files('hexagon_tlb.c')) hexagon_ss.add(files('hexagon_globalreg.c')) +hexagon_ss.add(when: 'CONFIG_HEX_DSP', if_true: files('hex-subsys.c')) hexagon_ss.add(when: 'CONFIG_HEX_DSP', if_true: files('hexagon_dsp.c')) hexagon_ss.add(when: 'CONFIG_HEX_VIRT', if_true: files('virt.c')) =20 --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549728; cv=none; d=zohomail.com; s=zohoarc; b=Xt1gkYHiuOwFInfmR5D2LIQgzwT5UoJRwxImfl+nsiang6Dm5TLbEEQNHcriOo4YzGZYnHUalTBhfstIIfiRrmyoIVBeRia8jUDMm+HAxiQcOQqQIF2F2lluYP9gdK+5Atdkedf6lawv0+ty1ZhBUa6s4ffQg7TuOArE/550o4w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549728; 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=Ek2ZiHWFHeWKYPX7DkjBckxgukuuxX1Gf2L/3Ya/QyA=; b=Wpe6eAFx3F4DlFhvhXi6nSYH4ExsA/JIPgeNYzQJ1Aa3gZPFu94wCwYLFPVSEc5BZMjW7OJQGN9V7sdGTrkKgSIjGKgtiiNVlWQCRgGsONddWGPeqKwfOURMpjijaynt7Kz6ndun6bXjqAj8zOVqEM0kl8AzAgAG34iCFUcO/eo= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549728570721.0272813738417; Wed, 12 Aug 2026 08:48:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6t-0004Xo-6Y; Wed, 12 Aug 2026 11:43:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6X-0004L5-GP for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:59 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6U-0000EM-SF for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:57 -0400 Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbYTg3597627 for ; Wed, 12 Aug 2026 15:42:48 GMT Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g08jrmrpv-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:47 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cbef1d25500so212531a12.1 for ; Wed, 12 Aug 2026 08:42:47 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Ek2ZiHWFHeWKYPX7DkjBckxgukuuxX1Gf2L/3Ya/QyA=; b=CX50WMg2mdxLrF/3 nv6RJY2kO2lAQvUP8RIq7pgO9ML4htdqhLGVBRWnYHIknn94x6stXW9bugVNh7Ju YDNitMjSdC4SrymlXQ3tyB1JlORFtRvELKmLZD2SyTsZW5SDLh5byoMTEwoA0b5m 8r1aTeXiuwr6WaCXWldIDdlz945lCg3aSIj0ubkn0xKWRqT+DS0wjbXBzF4v7WWK OQRdNRIDprbKB2Kuh7XsalZhmM9Rxxrh2vLW0qfu/vXgvN1BgGfaSSReFgo7gt0C xG66iSFTWFHyCQcdCh8h3JQtOffDGw7WxDCTede+RAwEDlhKI2LXwZHuyQQtHyPy BHlhVQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549367; x=1787154167; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Ek2ZiHWFHeWKYPX7DkjBckxgukuuxX1Gf2L/3Ya/QyA=; b=Rdx9QBXN9mse4sYeDAvmDiL8Fp2i+GmAUgmqfiBLJSxkCsTJiGLZ4stMF+1qQWEkEx NmBF3Xr8i8GvJHMun540xnJelpqVcqITkTmQYbE5hHbrzHxMtLu8dFduXn7xtNAwMUvI dO8cBfLXZx2a7UoE94sv9TgfUSMeyYSTl9C7wgCurkoJ8tNgg+E/l+2E4PnOiiWpk/gj +099z9Ilj67pTFmPcJmjEU91DDq4sY8RVmBcRj87XqQ/vbgEq3wNpqA1B0BL7mbQH4R9 0PDzTQ4rAsyTgzUHBC9U2CwWr4+B96MdjvUnAZbxI+AOYPXpeaPV1y/gl8t88LV2isJj +vKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549367; x=1787154167; h=content-transfer-encoding:content-type: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 :content-type; bh=Ek2ZiHWFHeWKYPX7DkjBckxgukuuxX1Gf2L/3Ya/QyA=; b=VAWkX4Sy7ufbCEOKGNhyvynW5ilNOa5b4FZCbpO/g/h6VpqHI2n1bTKBLrQ+alBnJZ y6CLO7cawK2vCibcWr9AeY+xv1b7b+bi4C+I6ecoRffMNAYNLqFSC21FPQkFiQMCi27I Kvtw9CnWfT8BlyW9ZiFZqnsv7+VVgy9Mo6+qEjMK9I1R3+uurBju7BsjCqbJ5/LrqggN yk8YHt9z/YR/cPdtoUvAuk0AurQb1BV+SKTw1Y1nD8PkyL0JZtUNGT90elFYw4jJep0k BpyutGnZTgerwEJsedF+u4dpy3yCyU+gN8bUs3M43KdApJyzjY2QgKVpvGbEZRVdc8I0 r//g== X-Gm-Message-State: AOJu0YwgZ8+jGGgfR9id0q48jLv+oWCtQpJXAQrjOgSf6O5T6wE0j+Lk i/zDyNmd/jn+HVE67JOHJYLcI7/m38pwnjZfXY3qTd/jDRbFcJfuYD+gpjZaZmg138BIcnWb9if fc5kGKOPQh7q9BLS2pfFfFuu+R6gCydIPYoGQIHOovdWLrIYBvRg2ZWeiqTfw6g2QRQ== X-Gm-Gg: AR+sD130EhlFSrxA86m5w0Sz6a+l96eNH/LPhshIwPHbLIgItb6uegUZsH1ol6XDwpm p12pEqK9jyMs+q1JFFAHfZKOJVFvwJCaT9GX7ZsVAj2J1BQreDCNV14UL6ZR+x6VWNZi1FViw2L Dxdz0U89novWAEs4vvklrnKaLKlwk8+KtDQeYTpDTzehcyEPDgrCLPxt0t2JzfvQ/6ZGMhhU7oO futof1e+R5tvbE+QDkHqj/K0FAK7GK0/etPNKTu9CJncXXeemS2glyqe1Rh+F/15F8RB5sgRbzX uIw2BHZwQ065LxsqwnLJf+I0EHSRLWQF+yXADplLP9QjEpqBo+X7rE1Rn3Syu0bjLMbp64oKIH5 Ki3HPmoRTmudR8VD46ijazZJMlk9uUnU+R5WC0RYG+ZWpebO0 X-Received: by 2002:a05:6a20:12d5:b0:3bf:c28f:8afc with SMTP id adf61e73a8af0-3cc3f2168camr6867546637.0.1786549366932; Wed, 12 Aug 2026 08:42:46 -0700 (PDT) X-Received: by 2002:a05:6a20:12d5:b0:3bf:c28f:8afc with SMTP id adf61e73a8af0-3cc3f2168camr6866825637.0.1786549361676; Wed, 12 Aug 2026 08:42:41 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier Subject: [PULL v2 02/41] hw/hexagon: move VTCM to the common machine state Date: Wed, 12 Aug 2026 08:41:41 -0700 Message-Id: <20260812154220.1029828-3-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: -SgEI_vMSC4TwMolepcswMwP3MeXUpNi X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX2MhrBo5n+0/e iGgnadkyieVBS+rZY1SveVuJXNbxOuAB+Ii3SBzp9wyYkhrBTKtvYF8SUGcQ5AZ3QGgJJBikCb4 RG+dlhr35EgHHYEs/GHCEs9ycDixxwA= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXwa3s4Co/y7IR JKoPIzTIJHE9GocuPXDWucZpNoido7eEkOQTZInFRz0bjFvgCe6N9+SEVZbvitP04v3L16JFywL Rx9nG4oH1jdMAuCKMTTslikMmW1Q68LfWU/7O1lDrmXFoK45OQlDVKPmJeOIKmGiewjOyGD/Npk 4P+8u4F6ZGXau5qlR8DIav9xRmrhTlD1rJFBh7MTboiswkjnsSkXJFhQLTpHUFJOWHezg6m0Oa1 ANsdEpttmdCepz/MBAN3G5/2YEiO/B9htJRpDy2nE0hapCEblw99pR0+haJjR9dAhGAA+riwIjQ /sjUNB4vWuPAVpP9Q7kHo55p5lbZKy7MCPGa6EM1X8r5TD113CYGvhhAKM4YV+7Qc3OP5TZz/F+ AVRsS36ppK5Xz/7FxYcjcfwneU0KETgsaXVGRIWRgbBSwYyuHJIF/kS60e8M7/n/rwZFYdHHTPT 3yKPV7WZc8P6baSRc9Q== X-Authority-Analysis: v=2.4 cv=Z7Dc2nRA c=1 sm=1 tr=0 ts=6a7c9477 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=31cAqr7vU2O6cbMaemAA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-ORIG-GUID: -SgEI_vMSC4TwMolepcswMwP3MeXUpNi X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 impostorscore=0 spamscore=0 priorityscore=1501 bulkscore=0 phishscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549729573158500 The VTCM is described by the config table, so every machine can set it up the same way. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-3-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- include/hw/hexagon/hexagon.h | 1 + include/hw/hexagon/virt.h | 1 - hw/hexagon/hex-subsys.c | 8 ++++++++ hw/hexagon/virt.c | 5 ----- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/include/hw/hexagon/hexagon.h b/include/hw/hexagon/hexagon.h index 1034b09c2ac..9c73cadb16d 100644 --- a/include/hw/hexagon/hexagon.h +++ b/include/hw/hexagon/hexagon.h @@ -156,6 +156,7 @@ struct HexagonCommonMachineState { =20 MemoryRegion ram; MemoryRegion cfgtable_rom; + MemoryRegion vtcm; }; =20 #endif diff --git a/include/hw/hexagon/virt.h b/include/hw/hexagon/virt.h index fcb47762194..cf0cd2f8f22 100644 --- a/include/hw/hexagon/virt.h +++ b/include/hw/hexagon/virt.h @@ -17,7 +17,6 @@ struct HexagonVirtMachineState { int fdt_size; MemoryRegion *sys; MemoryRegion tcm; - MemoryRegion vtcm; MemoryRegion bios; Clock *apb_clk; }; diff --git a/hw/hexagon/hex-subsys.c b/hw/hexagon/hex-subsys.c index d146ee0c075..0c20cf02e7d 100644 --- a/hw/hexagon/hex-subsys.c +++ b/hw/hexagon/hex-subsys.c @@ -29,4 +29,12 @@ void hex_subsys_create(HexagonCommonMachineState *hms, rom_add_blob_fixed_as("config_table.rom", &m_cfg->cfgtable, sizeof(m_cfg->cfgtable), m_cfg->cfgbase, &address_space_memory); + + if (m_cfg->cfgtable.vtcm_size_kb > 0) { + memory_region_init_ram(&hms->vtcm, NULL, "vtcm.ram", + m_cfg->cfgtable.vtcm_size_kb * 1024, + &error_fatal); + memory_region_add_subregion(sysmem, m_cfg->cfgtable.vtcm_base << 1= 6, + &hms->vtcm); + } } diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c index ad0bc4f1329..53eaafaf85a 100644 --- a/hw/hexagon/virt.c +++ b/hw/hexagon/virt.c @@ -75,11 +75,6 @@ static void fdt_add_hvx(HexagonVirtMachineState *vms, const MachineState *ms =3D MACHINE(vms); uint32_t vtcm_size_bytes =3D m_cfg->cfgtable.vtcm_size_kb * 1024; if (vtcm_size_bytes > 0) { - memory_region_init_ram(&vms->vtcm, NULL, "vtcm.ram", vtcm_size_byt= es, - &error_fatal); - memory_region_add_subregion(vms->sys, m_cfg->cfgtable.vtcm_base <<= 16, - &vms->vtcm); - qemu_fdt_add_subnode(ms->fdt, "/soc/vtcm"); qemu_fdt_setprop_string(ms->fdt, "/soc/vtcm", "compatible", "qcom,hexagon_vtcm"); --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549591; cv=none; d=zohomail.com; s=zohoarc; b=GeORFnDiYZL9/f9zLKr3UApof12CRFa/qQx1UVBhmzv4sUrZWHtrKXJqFjbstPTB049D4GmTOQalKaFJ6z+pDtGpsLGUE8M9gM0lFTdm7OfWGsgvO4zoiFmuSzFLbKW5qHP+/MuYbylqxqfd8EnVV9kwImjM8OdtQhLwuESD9yE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549591; 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=exQs9DjBwq76p7Mp+0s6+hokPY6BTeG8HROUYDekb68=; b=V4gec48CXEZBt+vJJwo5TV3D1F8U35XpqY15NNrPpVmd1fvKU5Bjrqh1zSRp130WrroS1tsxaZiFDHRi5RE15EXwVZ10NosEqOGhGi5kM2pd34TRzTJ1zNoeMTrgqYFdES7EFyIWjbf64Rs7QYAcg9RKre19bvIIiHJX+kkWFEE= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549591668985.8633846231013; Wed, 12 Aug 2026 08:46:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6z-0004h4-KW; Wed, 12 Aug 2026 11:43:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6W-0004Kk-3U for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:59 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6T-0000DL-64 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:55 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbtHK2728892 for ; Wed, 12 Aug 2026 15:42:45 GMT Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hfw2rej-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:44 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-cbee8d434b8so13843a12.0 for ; Wed, 12 Aug 2026 08:42:44 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= exQs9DjBwq76p7Mp+0s6+hokPY6BTeG8HROUYDekb68=; b=SwBPhgwtVCZw9kD7 +yyUqpV4Q6y4j7wi2x3iTeSUwnr/bVvUdlQV1YH4+ZUewi0v7NUSIPD4HSFvDJIL mTzourKT5IIwAt2BEM+T10wESVHCKpfcy0/hyxJL49aj08cgDCGZqm/jDl7GF7tn uyrJonoW16ebl2pbbqknalg8HBCX7WudWA9+5yIEdxWldBgfEVVdZDJO+q4rkbz/ 34iszyoy3yIemUgDAungCJ8AXqKP2qvSrFCoBdeLEQ27ZWQ8HYUSKod5VrqlxWVy aDLWpCMpvTeHtFwWyp9JGQzi6kjInatRuOPJ2ipjqDtZrq12wlaalaWhQ0YxqNDY 7bWJLA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549364; x=1787154164; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=exQs9DjBwq76p7Mp+0s6+hokPY6BTeG8HROUYDekb68=; b=bRBmj+XKcvoytoPcXXfc8ko2oC9GAZnrGpyznAVuxmAPuu9MetAufuQp8KbMjMdsr4 LXbU/1gVQ1bRe6QothawCAfdyVR8ZwxSX5DJqhsLJ1mKzXug4jwQdWF1rTf5qbPYfB+q TqF2qkBSYShmRwAV0x4nlgmijxQH84pNiOGQgVxMa0xXwLq4Vyhak0fWRr7+6+IQxV72 TqL4dAneNZ7N/0RnSzVVvEpngRAtlI9rybxdzh5STpVsL39c8UyKJ4tnuX7Jx6y34LKG 6fZ8Xz66bkmzWUyyJ09vN9oJpzfAMaIBuOfvCAF50Np5otib8hHnKlHmvJsNGM8FT6Nk QE1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549364; x=1787154164; h=content-transfer-encoding:content-type: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 :content-type; bh=exQs9DjBwq76p7Mp+0s6+hokPY6BTeG8HROUYDekb68=; b=dEi8OavODhB/7ydUYvVnPoHWmBAEJocJjklKCsFTBG5ntlUImz1cXNcPChNSdR5SYC AgX6mS7+TpbfzPkqJ5xq1JmqlGR5N5hgasLQ13Plela4mci3tYAG3pXbpM+6pDl2K0vB cBP7CYtpckXXN9eexBpxdFYC+BHCQ97Hm9yuXAJUIlJUnOk8mQ/aFPf8jWwcUN8O/V4R g3/OiblesTISKNQZPxPLIOWY9Zerd/PjEIDNSZz0X4qmYwg1fy94rq7qj5wXxRmAafvm jyhE4/KtUp0v/nKtz6V4xBpnCBBF4izO3BDOa13RhWhv3fKSPlLos84os9BEcBy1e8my BqpA== X-Gm-Message-State: AOJu0Yz7m2Uo7E/livU4A078r87z7ZtWoma3fuipqo8+3YopIo+5Dwy+ nAKsXM4U9re+dPZLRPWS8Pk6gG6AZEAqeAnRKtu3ek36elGpWwWshmzbADZGzQKocUBXlK0yvUO uyGCOdFn67olOAN0eOOuG/cJKx4gwfRnfhJrUVtMkxniIUsa4krVQFNGhYdiRHMnyiA== X-Gm-Gg: AR+sD12UbzJmaZovkOIjSj3QshDR+EPONE1nlR3UE1+9/okkwvgorxh7NV4ptdxxmpr z1EiCxFmCgnLbAUlFl+80E3O6DfNGYp/sWOASTmyXvfL8RsUf213sFDmqoO1tYmzOcWFIuE+a58 Of40UZ7NYFZCYl6xF1AY3XHtIp1QBxQ3OsI6dt3rYdM8Ed6Kaezs5LWHwnA1tXVuWT1MPF+bM7O C2WQAujw73JKezfcsGXLKhUvisqoa6NuAvv2uw6VKI02mWOZzQWMMVMkTKJ7QmNezFyMr22AIXy U+bqBV2tpNZ1pXKO9f+fyu+8i8eV+UV10ua2pigYxWfPssTCauCW5alEeMPzX4ZkDwiOxmUIZ9Y CNovOFTUeRwzYZLYK36uE8DwDEOxzsLqLflbgtHN8ozpHmux2 X-Received: by 2002:a05:6300:648f:b0:3a2:c9a1:2c26 with SMTP id adf61e73a8af0-3cc52ff69edmr173170637.7.1786549363546; Wed, 12 Aug 2026 08:42:43 -0700 (PDT) X-Received: by 2002:a05:6300:648f:b0:3a2:c9a1:2c26 with SMTP id adf61e73a8af0-3cc52ff69edmr173073637.7.1786549362942; Wed, 12 Aug 2026 08:42:42 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier Subject: [PULL v2 03/41] hw/hexagon: move global registers to hex-subsys Date: Wed, 12 Aug 2026 08:41:42 -0700 Message-Id: <20260812154220.1029828-4-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX2fZ1fKO6rOhn IxOfgzAEFOPCu4a1ZeQLATJ2qauAUQyTkQK4enpEWJV9dPHPzHB/OxoZ/LwauIbjAOxNPCFg8pi Eit8mpd/LHLsBpoq7NpqKgRXuK0o6iI= X-Proofpoint-GUID: MJKN0tqsWAHxIVzPhSI6asYeDYidEn8Q X-Authority-Analysis: v=2.4 cv=fpDsol4f c=1 sm=1 tr=0 ts=6a7c9474 cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=T2wWRslM62IwIIzloqEA:9 a=QEXdDO2ut3YA:10 a=3WC7DwWrALyhR5TkjVHa:22 X-Proofpoint-ORIG-GUID: MJKN0tqsWAHxIVzPhSI6asYeDYidEn8Q X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXwQwuCZAGTTKK QgyVBlNHFShHfYMW2pPtjxDSTrXxBx1auYaymZe7elTdXy5UAY2mwA1SPrtimtBwUIUVLloCeSY Th3fsO52K7y8X/L/g6+iGT/CKXfR1qNdkQJ3pffrT9YZY/vHBF16xeyqO142HaSQYal5UlWpn7M PazaBZ1E6uIwjKilySgQlXxSt9ZqDT4Lm6Ae4INo9hY63/F7CYd9e/kT5k6uOOZ7+HEsswJDS8F fMhPRTbzYiJoZ5uXixlclcf91eGXppSeXSVi+r6KdFvBVRIKCR5b57R0RmED+RdHZYqHWQegBxL 1VelUCrNeoWlcPqQuucpLXp2PMNslOPklmu+AajX62W9jfCKE8e5FNbU+JH/vHqixnijJ65jQ+2 WZ7xpwgQMFwLFikbY/8NxdjjSWqCJk5URrv0qO/WNTR4kT/uLZ5Wkm3/s3B5LnwSkiig6qVoSO9 R3Mf6vbMAufWaiKpbgw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 spamscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 malwarescore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549592651158500 Both machines create the global register device the same way, so let hex-subsys own it and link it to each CPU as it is realized. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-4-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- include/hw/hexagon/hex-subsys.h | 6 +++++- include/hw/hexagon/hexagon.h | 1 + hw/hexagon/hex-subsys.c | 29 ++++++++++++++++++++++++++++- hw/hexagon/hexagon_dsp.c | 15 ++------------- hw/hexagon/virt.c | 23 +++++------------------ 5 files changed, 41 insertions(+), 33 deletions(-) diff --git a/include/hw/hexagon/hex-subsys.h b/include/hw/hexagon/hex-subsy= s.h index 6bcde303f2e..087c105cfa4 100644 --- a/include/hw/hexagon/hex-subsys.h +++ b/include/hw/hexagon/hex-subsys.h @@ -9,9 +9,13 @@ #define HW_HEXAGON_HEX_SUBSYS_H =20 #include "hw/hexagon/hexagon.h" +#include "hw/core/qdev.h" =20 /* Create the subsystem shared by every Hexagon machine. */ void hex_subsys_create(HexagonCommonMachineState *hms, - const struct hexagon_machine_config *m_cfg); + const struct hexagon_machine_config *m_cfg, Rev_t r= ev); + +/* Realize a CPU into the subsystem. */ +void hex_subsys_realize_cpu(HexagonCommonMachineState *hms, DeviceState *c= pu); =20 #endif /* HW_HEXAGON_HEX_SUBSYS_H */ diff --git a/include/hw/hexagon/hexagon.h b/include/hw/hexagon/hexagon.h index 9c73cadb16d..ef5700082cc 100644 --- a/include/hw/hexagon/hexagon.h +++ b/include/hw/hexagon/hexagon.h @@ -157,6 +157,7 @@ struct HexagonCommonMachineState { MemoryRegion ram; MemoryRegion cfgtable_rom; MemoryRegion vtcm; + DeviceState *glob_regs; }; =20 #endif diff --git a/hw/hexagon/hex-subsys.c b/hw/hexagon/hex-subsys.c index 0c20cf02e7d..6789b6bb23d 100644 --- a/hw/hexagon/hex-subsys.c +++ b/hw/hexagon/hex-subsys.c @@ -8,11 +8,29 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/hexagon/hex-subsys.h" +#include "hw/hexagon/hexagon_globalreg.h" #include "hw/core/loader.h" +#include "hw/core/qdev-properties.h" +#include "hw/core/qdev.h" +#include "hw/core/sysbus.h" #include "system/address-spaces.h" =20 +static DeviceState *globalreg_create(HexagonCommonMachineState *hms, + const struct hexagon_machine_config *= m_cfg, + Rev_t rev) +{ + DeviceState *glob_regs =3D qdev_new(TYPE_HEXAGON_GLOBALREG); + + object_property_add_child(OBJECT(hms), "global-regs", OBJECT(glob_regs= )); + qdev_prop_set_uint64(glob_regs, "config-table-addr", m_cfg->cfgbase); + qdev_prop_set_uint32(glob_regs, "dsp-rev", rev); + sysbus_realize_and_unref(SYS_BUS_DEVICE(glob_regs), &error_fatal); + + return glob_regs; +} + void hex_subsys_create(HexagonCommonMachineState *hms, - const struct hexagon_machine_config *m_cfg) + const struct hexagon_machine_config *m_cfg, Rev_t r= ev) { MachineState *machine =3D MACHINE(hms); MemoryRegion *sysmem =3D get_system_memory(); @@ -37,4 +55,13 @@ void hex_subsys_create(HexagonCommonMachineState *hms, memory_region_add_subregion(sysmem, m_cfg->cfgtable.vtcm_base << 1= 6, &hms->vtcm); } + + hms->glob_regs =3D globalreg_create(hms, m_cfg, rev); +} + +void hex_subsys_realize_cpu(HexagonCommonMachineState *hms, DeviceState *c= pu) +{ + object_property_set_link(OBJECT(cpu), "global-regs", + OBJECT(hms->glob_regs), &error_fatal); + qdev_realize_and_unref(cpu, NULL, &error_fatal); } diff --git a/hw/hexagon/hexagon_dsp.c b/hw/hexagon/hexagon_dsp.c index f94f7fd4e11..8599f5883bf 100644 --- a/hw/hexagon/hexagon_dsp.c +++ b/hw/hexagon/hexagon_dsp.c @@ -15,7 +15,6 @@ #include "hw/core/qdev-properties.h" #include "hw/hexagon/hexagon.h" #include "hw/hexagon/hex-subsys.h" -#include "hw/hexagon/hexagon_globalreg.h" #include "hw/hexagon/hexagon_tlb.h" #include "hw/core/loader.h" #include "qapi/error.h" @@ -109,7 +108,6 @@ static void hexagon_common_init(MachineState *machine, = Rev_t rev, { HexagonCommonMachineState *hms =3D HEXAGON_COMMON_MACHINE(machine); HexagonDspMachineState *dms =3D HEXAGON_DSP_MACHINE(machine); - DeviceState *glob_regs_dev; DeviceState *tlb_dev; =20 memset(&hexagon_binfo, 0, sizeof(hexagon_binfo)); @@ -120,14 +118,7 @@ static void hexagon_common_init(MachineState *machine,= Rev_t rev, =20 machine->enable_graphics =3D 0; =20 - hex_subsys_create(hms, m_cfg); - - glob_regs_dev =3D qdev_new(TYPE_HEXAGON_GLOBALREG); - object_property_add_child(OBJECT(machine), "global-regs", - OBJECT(glob_regs_dev)); - qdev_prop_set_uint64(glob_regs_dev, "config-table-addr", m_cfg->cfgbas= e); - qdev_prop_set_uint32(glob_regs_dev, "dsp-rev", rev); - sysbus_realize_and_unref(SYS_BUS_DEVICE(glob_regs_dev), &error_fatal); + hex_subsys_create(hms, m_cfg, rev); =20 tlb_dev =3D qdev_new(TYPE_HEXAGON_TLB); object_property_add_child(OBJECT(machine), "tlb", OBJECT(tlb_dev)); @@ -147,11 +138,9 @@ static void hexagon_common_init(MachineState *machine,= Rev_t rev, if (i =3D=3D 0) { hexagon_init_bootstrap(dms, cpu); } - object_property_set_link(OBJECT(cpu), "global-regs", - OBJECT(glob_regs_dev), &error_fatal); object_property_set_link(OBJECT(cpu), "tlb", OBJECT(tlb_dev), &error_fatal); - qdev_realize_and_unref(DEVICE(cpu), NULL, &error_fatal); + hex_subsys_realize_cpu(hms, DEVICE(cpu)); } } =20 diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c index 53eaafaf85a..290783d511f 100644 --- a/hw/hexagon/virt.c +++ b/hw/hexagon/virt.c @@ -14,7 +14,6 @@ #include "hw/core/sysbus-fdt.h" #include "hw/hexagon/hexagon.h" #include "hw/hexagon/hex-subsys.h" -#include "hw/hexagon/hexagon_globalreg.h" #include "hw/hexagon/hexagon_tlb.h" #include "hw/core/loader.h" #include "hw/core/qdev-properties.h" @@ -226,9 +225,7 @@ static void virt_init(MachineState *ms) { HexagonVirtMachineState *vms =3D HEXAGON_VIRT_MACHINE(ms); const struct hexagon_machine_config *m_cfg =3D &v68n_1024; - DeviceState *gsregs_dev; DeviceState *tlb_dev; - DeviceState *cpu0; int32_t clk_phandle; =20 create_fdt(vms); @@ -240,7 +237,7 @@ static void virt_init(MachineState *ms) vms->apb_clk =3D clock_new(OBJECT(ms), "apb-pclk"); clock_set_hz(vms->apb_clk, 24000000); =20 - hex_subsys_create(&vms->parent_obj, m_cfg); + hex_subsys_create(&vms->parent_obj, m_cfg, v68_rev); =20 if (m_cfg->l2tcm_size) { memory_region_init_ram(&vms->tcm, NULL, "tcm.ram", m_cfg->l2tcm_si= ze, @@ -251,42 +248,32 @@ static void virt_init(MachineState *ms) =20 fdt_add_hvx(vms, m_cfg); =20 - gsregs_dev =3D qdev_new(TYPE_HEXAGON_GLOBALREG); - object_property_add_child(OBJECT(ms), "global-regs", OBJECT(gsregs_dev= )); - qdev_prop_set_uint64(gsregs_dev, "config-table-addr", m_cfg->cfgbase); - qdev_prop_set_uint32(gsregs_dev, "dsp-rev", v68_rev); - sysbus_realize_and_unref(SYS_BUS_DEVICE(gsregs_dev), &error_fatal); - tlb_dev =3D qdev_new(TYPE_HEXAGON_TLB); object_property_add_child(OBJECT(ms), "tlb", OBJECT(tlb_dev)); qdev_prop_set_uint32(tlb_dev, "num-entries", m_cfg->cfgtable.jtlb_size_entries); sysbus_realize_and_unref(SYS_BUS_DEVICE(tlb_dev), &error_fatal); =20 - cpu0 =3D NULL; for (int i =3D 0; i < ms->smp.cpus; i++) { HexagonCPU *cpu =3D HEXAGON_CPU(object_new(ms->cpu_type)); qemu_register_reset(do_cpu_reset, cpu); =20 if (i =3D=3D 0) { - cpu0 =3D DEVICE(cpu); if (ms->kernel_filename) { uint64_t entry =3D load_kernel(vms); - qdev_prop_set_uint32(cpu0, "exec-start-addr", entry); + qdev_prop_set_uint32(DEVICE(cpu), "exec-start-addr", entry= ); } else if (ms->firmware) { uint64_t entry =3D load_bios(vms); - qdev_prop_set_uint32(cpu0, "exec-start-addr", entry); + qdev_prop_set_uint32(DEVICE(cpu), "exec-start-addr", entry= ); } } qdev_prop_set_uint32(DEVICE(cpu), "htid", i); qdev_prop_set_bit(DEVICE(cpu), "start-powered-off", (i !=3D 0)); - object_property_set_link(OBJECT(cpu), "global-regs", - OBJECT(gsregs_dev), &error_fatal); object_property_set_link(OBJECT(cpu), "tlb", OBJECT(tlb_dev), &error_fatal); - - qdev_realize_and_unref(DEVICE(cpu), NULL, &error_fatal); + hex_subsys_realize_cpu(&vms->parent_obj, DEVICE(cpu)); } + fdt_add_cpu_nodes(vms); clk_phandle =3D fdt_add_clocks(vms); fdt_add_uart(vms, VIRT_UART0, clk_phandle); --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549408; cv=none; d=zohomail.com; s=zohoarc; b=ZWqpV3mlzSQExg6JTa4zayXdNFd4G6+cMw6V6BqDxxTBdeS0nI/idirQ91zINhs10Yh5nXH+a/OWmMeBSX15pO6WxStI0IS/bwbC2lue/MT5QPlM+pM/WCo7D0fjmILTYOlekShw4MDNpuNHM8gfGBL3LUF8RcmCmkS2fXjucw4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549408; 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=wQDhtjNFLrvoQoKPsVQW9RbpmoI7rfBDjUCNwHPExN8=; b=AggqeVLw4tEx80TxGZRvyaltFjkSGOLvQZzW1ScyyZfM1gZ3Mv5ePhH81D+1JbP1tFDP8IehDUdAJcFJ/ePm+71Y/LklPsHjoBIOb8sq9PF62IxtGsla320R6zCpdmhBqtwijeTb7uwMZpe7xOUWlNeHsYRzpyagpB6m5xKll2s= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549408802375.746671628139; Wed, 12 Aug 2026 08:43:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6o-0004Q6-EY; Wed, 12 Aug 2026 11:43:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6W-0004Kh-3F for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:58 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6T-0000Dm-F2 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:55 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbuWJ2728912 for ; Wed, 12 Aug 2026 15:42:46 GMT Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hfw2rek-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:45 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cbee8d434b8so13857a12.0 for ; Wed, 12 Aug 2026 08:42:45 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= wQDhtjNFLrvoQoKPsVQW9RbpmoI7rfBDjUCNwHPExN8=; b=LPjIBGCE5IVP/Vi3 1zduP/uyYabklNkgtbsVHx+tfhBXwaXv3kiPb7QahrwPBBBuYMHUCLzMy50FNXdg a2HLKD/eOOMSYkdHgns3LUCOp3YwVlcfEtvdut4x7upqRZZ9fFDByq+KV7HZ/zXr m7vkcyaffvRlF5EErhOnzr9jmiRCJznARTzUhfgPdqtbNPQq9KFNpKoXWmlV5Iw7 +i9u5HXq99HDc3oVd45+aUI/UB0RH3Zro6kBNBjq8AT4rYiZYiMdqiWG20H9D5rt 3eiU3qjqTXTuCKqtGJ0Y0CTMsSkV/PB/N47TSHo1JBr8NxJrJr0MOVnUjpAKZkTQ D1QF/Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549365; x=1787154165; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=wQDhtjNFLrvoQoKPsVQW9RbpmoI7rfBDjUCNwHPExN8=; b=P0ufT4ZrsqS3kqRa3UPzu/6OxcgnZCtrwxkKq+HWK4s8MhotZ3lRfhNKT52AooJWIp BsfzNFEbnTeQ37eLOmRjg1ZfyRWUlYultgRPJWq2hba5JAEtt8o+zauiPTFsr5zcKkhR G8whAuCcRCTEARh7QYeYFsvbeCHjp2hvIKjE1tRLIcJ7E0DhUOOlOozQXdBIHF2E2Xd1 nOB5mEPFTn88h3iYr88W52x2Nx1B1VJVmqbhWUpAAjVXvWQQxdgx7tPewlMKXNZNw0k1 8QNp7tZ3ONe1tr3rZQWriLlAk8N1gWOwaGlH6LDRzmHBzCmQ6a/rN+cCPXTSDdJ/nYem p6Pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549365; x=1787154165; h=content-transfer-encoding:content-type: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 :content-type; bh=wQDhtjNFLrvoQoKPsVQW9RbpmoI7rfBDjUCNwHPExN8=; b=dLX1sxPnvFOOSD385YwQrRzNS2RL/NfOmH8j1Ri96G89Co/vvSENJzcEQAHXDHmVXq YGPSo/IgAQd0ge5RaiCLMFQ2IlYeWxChjJPePAcQF5I//ixTqNH6F59mvNKboRK99lVU St/CSWla1JVsPaTlCmPHjlMVXFof3NNUpxTqa4lok5yihiCWqcabuyva7A9TpP4dhygo Gz+QuZ62iJrtmFZVrRvh0AA/QYCqiheSe5A69mZv7XlytMzMYZ56tsqT9mJwYjoUPS0c EIJz0XFSG662JXJ8zyU5YId0ZpZgdeHmWAdqBuBfQgsTuHwxUShq89ZLuoErTE5cnVUN A+mQ== X-Gm-Message-State: AOJu0YzR9OiFY9sJqnDOQWS8/uwyPao69OPUsxiTbNrEkTlouHBhp7MI agxpANrfWr6YIIYxygqfIHSfEgXQLSwZhu9qxA4fikI8XtqsLHokA9+y7VZGBqkivK7lOnX0TDX oAaWUsIjJpA6GIz69zPMIOrPl8io7Pg8DmOCIhUN8c2bPA4fBUMIs6AgmWjNOwmt8Wg== X-Gm-Gg: AR+sD10xmg6vJKkCHsnReqt3VO4D8VR0290PWWPSCFbvLGqzYo57CVt4FHDG4xQvgCj MzCVljer4TKjOp9fdCCg4d/h7SU5m8sZ+mZyxLJjxdiSMIg0QygImLpnGa8VhyuZF/7eWV05wG3 BrzCQ6qSVWrj4QW737DeE1tZxCSfNXQUcuBOGlQvJas2ElKUJ1qCNCldrCOE/Ue1pKRKtvXXNwq EgJBfwFxikGVQGPt7lTeOjGZILMqEUSEx3X48+hSowDF+NHcxJoqQrx84zwrtCIoCyVAUxEPeOJ GhAq6pX5jOZzfmgEwmpSjqCRP4YTCGhq3dJFgMrSj3i2F2wP1MkotSwVvxhGpSyHWWfiIvG1q5s 8GFm34RQIkuUSG0eOB1K6sCExzR4o8UhKktt1z8O65Q8wBVoN X-Received: by 2002:a05:6a20:7d8b:b0:3bf:9bd9:cf54 with SMTP id adf61e73a8af0-3cc53036c25mr116409637.8.1786549364737; Wed, 12 Aug 2026 08:42:44 -0700 (PDT) X-Received: by 2002:a05:6a20:7d8b:b0:3bf:9bd9:cf54 with SMTP id adf61e73a8af0-3cc53036c25mr116347637.8.1786549364172; Wed, 12 Aug 2026 08:42:44 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier Subject: [PULL v2 04/41] hw/hexagon: move the TLB to hex-subsys Date: Wed, 12 Aug 2026 08:41:43 -0700 Message-Id: <20260812154220.1029828-5-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX8/HiuEjThA3y X3qVORXmFMO2OxQ7QibHQM8QkD+P32YBfwEuGLjr8Mw1u+9MKB1zQpAft8Ciiyvq/C9n7gVnpcD sCWAxlRimyJ7eFmDQJnCbJzX1O5NWsg= X-Proofpoint-GUID: TcBmM924kKzrf480wY91fkvYMa6HEtaB X-Authority-Analysis: v=2.4 cv=fpDsol4f c=1 sm=1 tr=0 ts=6a7c9475 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=qVS_p__ePFo4ISZweN8A:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-ORIG-GUID: TcBmM924kKzrf480wY91fkvYMa6HEtaB X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX33E79FA42zoI R2maw6Q8Ty4AV/b9oXFbn84VNtR23MRFjDshZaMCaEfCfYL+bDl8dQMKI/+aI36Yyt0/LQ5GSwd 9Yrnbujt04ypA62QCoEjM0fkw+6s0TKmYz0gj7ZhBI+gYZRU+conVPn32LAPxmxxMsaeO2HV3aw KqLFd9ytxrPzSQOx/Tg2kGAj1lsN6YnoU52p7lnseuwmOzbplmHbWP6gC6etpETHaPHXTDbA+/N TYhoopUWc1zOCdbnjhmsgVSYm1ZMXNsgftxTP12ulidnArGHS1DAouyTaZ9fSR0GnJCnzzQgw8w Zj1bLkkt0lxjHcuYTILQ2Rvqr42Pw/LfgucCYeBousX1aKvgqOLJLrsaCXGKOY8TXltQDO1NFO1 FNuSXDAljnqXvg+58At0mvsaTQJboDLvxAlRxVxOJ2/fIRebNqPYcN/Cya8xN8QKniI0WuGy38C yt7S4mEUqv5PElRML6w== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 spamscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 malwarescore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549409712158500 The TLB device is sized from the config table, so both machines create it identically. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-5-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- include/hw/hexagon/hexagon.h | 1 + hw/hexagon/hex-subsys.c | 16 ++++++++++++++++ hw/hexagon/hexagon_dsp.c | 10 ---------- hw/hexagon/virt.c | 10 ---------- 4 files changed, 17 insertions(+), 20 deletions(-) diff --git a/include/hw/hexagon/hexagon.h b/include/hw/hexagon/hexagon.h index ef5700082cc..6edd93f478a 100644 --- a/include/hw/hexagon/hexagon.h +++ b/include/hw/hexagon/hexagon.h @@ -158,6 +158,7 @@ struct HexagonCommonMachineState { MemoryRegion cfgtable_rom; MemoryRegion vtcm; DeviceState *glob_regs; + DeviceState *tlb; }; =20 #endif diff --git a/hw/hexagon/hex-subsys.c b/hw/hexagon/hex-subsys.c index 6789b6bb23d..ac7e29604eb 100644 --- a/hw/hexagon/hex-subsys.c +++ b/hw/hexagon/hex-subsys.c @@ -9,6 +9,7 @@ #include "qapi/error.h" #include "hw/hexagon/hex-subsys.h" #include "hw/hexagon/hexagon_globalreg.h" +#include "hw/hexagon/hexagon_tlb.h" #include "hw/core/loader.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev.h" @@ -29,6 +30,18 @@ static DeviceState *globalreg_create(HexagonCommonMachin= eState *hms, return glob_regs; } =20 +static DeviceState *tlb_create(HexagonCommonMachineState *hms, + const struct hexagon_machine_config *m_cfg) +{ + DeviceState *tlb =3D qdev_new(TYPE_HEXAGON_TLB); + + object_property_add_child(OBJECT(hms), "tlb", OBJECT(tlb)); + qdev_prop_set_uint32(tlb, "num-entries", m_cfg->cfgtable.jtlb_size_ent= ries); + sysbus_realize_and_unref(SYS_BUS_DEVICE(tlb), &error_fatal); + + return tlb; +} + void hex_subsys_create(HexagonCommonMachineState *hms, const struct hexagon_machine_config *m_cfg, Rev_t r= ev) { @@ -57,11 +70,14 @@ void hex_subsys_create(HexagonCommonMachineState *hms, } =20 hms->glob_regs =3D globalreg_create(hms, m_cfg, rev); + hms->tlb =3D tlb_create(hms, m_cfg); } =20 void hex_subsys_realize_cpu(HexagonCommonMachineState *hms, DeviceState *c= pu) { object_property_set_link(OBJECT(cpu), "global-regs", OBJECT(hms->glob_regs), &error_fatal); + object_property_set_link(OBJECT(cpu), "tlb", OBJECT(hms->tlb), + &error_fatal); qdev_realize_and_unref(cpu, NULL, &error_fatal); } diff --git a/hw/hexagon/hexagon_dsp.c b/hw/hexagon/hexagon_dsp.c index 8599f5883bf..25e8550fba2 100644 --- a/hw/hexagon/hexagon_dsp.c +++ b/hw/hexagon/hexagon_dsp.c @@ -15,7 +15,6 @@ #include "hw/core/qdev-properties.h" #include "hw/hexagon/hexagon.h" #include "hw/hexagon/hex-subsys.h" -#include "hw/hexagon/hexagon_tlb.h" #include "hw/core/loader.h" #include "qapi/error.h" #include "qemu/error-report.h" @@ -108,7 +107,6 @@ static void hexagon_common_init(MachineState *machine, = Rev_t rev, { HexagonCommonMachineState *hms =3D HEXAGON_COMMON_MACHINE(machine); HexagonDspMachineState *dms =3D HEXAGON_DSP_MACHINE(machine); - DeviceState *tlb_dev; =20 memset(&hexagon_binfo, 0, sizeof(hexagon_binfo)); if (machine->kernel_filename) { @@ -120,12 +118,6 @@ static void hexagon_common_init(MachineState *machine,= Rev_t rev, =20 hex_subsys_create(hms, m_cfg, rev); =20 - tlb_dev =3D qdev_new(TYPE_HEXAGON_TLB); - object_property_add_child(OBJECT(machine), "tlb", OBJECT(tlb_dev)); - qdev_prop_set_uint32(tlb_dev, "num-entries", - m_cfg->cfgtable.jtlb_size_entries); - sysbus_realize_and_unref(SYS_BUS_DEVICE(tlb_dev), &error_fatal); - for (int i =3D 0; i < machine->smp.cpus; i++) { HexagonCPU *cpu =3D HEXAGON_CPU(object_new(machine->cpu_type)); qemu_register_reset(do_cpu_reset, cpu); @@ -138,8 +130,6 @@ static void hexagon_common_init(MachineState *machine, = Rev_t rev, if (i =3D=3D 0) { hexagon_init_bootstrap(dms, cpu); } - object_property_set_link(OBJECT(cpu), "tlb", - OBJECT(tlb_dev), &error_fatal); hex_subsys_realize_cpu(hms, DEVICE(cpu)); } } diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c index 290783d511f..b9e0bbb704c 100644 --- a/hw/hexagon/virt.c +++ b/hw/hexagon/virt.c @@ -14,7 +14,6 @@ #include "hw/core/sysbus-fdt.h" #include "hw/hexagon/hexagon.h" #include "hw/hexagon/hex-subsys.h" -#include "hw/hexagon/hexagon_tlb.h" #include "hw/core/loader.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-clock.h" @@ -225,7 +224,6 @@ static void virt_init(MachineState *ms) { HexagonVirtMachineState *vms =3D HEXAGON_VIRT_MACHINE(ms); const struct hexagon_machine_config *m_cfg =3D &v68n_1024; - DeviceState *tlb_dev; int32_t clk_phandle; =20 create_fdt(vms); @@ -248,12 +246,6 @@ static void virt_init(MachineState *ms) =20 fdt_add_hvx(vms, m_cfg); =20 - tlb_dev =3D qdev_new(TYPE_HEXAGON_TLB); - object_property_add_child(OBJECT(ms), "tlb", OBJECT(tlb_dev)); - qdev_prop_set_uint32(tlb_dev, "num-entries", - m_cfg->cfgtable.jtlb_size_entries); - sysbus_realize_and_unref(SYS_BUS_DEVICE(tlb_dev), &error_fatal); - for (int i =3D 0; i < ms->smp.cpus; i++) { HexagonCPU *cpu =3D HEXAGON_CPU(object_new(ms->cpu_type)); qemu_register_reset(do_cpu_reset, cpu); @@ -269,8 +261,6 @@ static void virt_init(MachineState *ms) } qdev_prop_set_uint32(DEVICE(cpu), "htid", i); qdev_prop_set_bit(DEVICE(cpu), "start-powered-off", (i !=3D 0)); - object_property_set_link(OBJECT(cpu), "tlb", - OBJECT(tlb_dev), &error_fatal); hex_subsys_realize_cpu(&vms->parent_obj, DEVICE(cpu)); } =20 --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549507; cv=none; d=zohomail.com; s=zohoarc; b=GreMM5dWBC1vX3d7r9qsmrek6vHzTF+//7QR053d0MwNLgvtVIGaU+r3XH+41TfmnE5rhf9LlscgzODz2Li8pAxoju83Wr2b4ztyfRpKu5h7drEoBfTWBfLS7slqyxctJ35Bi3y0UQUbUuXfUGcvYGsOEIfBUlWtVWu/J5A7p8Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549507; 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=6kJvEPUm5sDkQwp+iONnpXalOMJq5G88Uebmahq18GI=; b=lVje+ZaXrW/q/3Hy6PN0p+WOVjYwTniCejV2/RerhX9Ea5jvbXCwjYeXfNI+yPlU2stdOKrkbFhz9tJwpXAw1t7aSTLDuQIcct9/ME1FXHIiXEHi0laxG7pFneyfvaLVjZ5S1NMtti14sJMBhAzvhuwwbObA0uPBjCfN+sx9NYw= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549507878667.9236285388234; Wed, 12 Aug 2026 08:45:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6u-0004aG-Il; Wed, 12 Aug 2026 11:43:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6Z-0004LT-3u for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:59 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6V-0000EE-Uh for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:58 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbxd32728970 for ; Wed, 12 Aug 2026 15:42:47 GMT Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hfw2ren-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:47 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38dde0df80bso1930289a91.3 for ; Wed, 12 Aug 2026 08:42:47 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 6kJvEPUm5sDkQwp+iONnpXalOMJq5G88Uebmahq18GI=; b=ZXzX7rhUXOcTfi99 ViOnOBPsbMH5W2KaEXCyWtMmXxRk2VTMSTyrQ9nF7joZK/YOWtbONWXHFGdiBaxT 6ZFB1uiFQMimePCc4HWaJTebufTugd5kI7Jf5+x7UZtQxGgWnE4t3KTibvWyA/WQ 7OvLnPfOyvPSXKyDweSVsUtWylXLPeyx7QAGhWlNLqWctmm6TnKWmhotb/aRtL8B 9uVO13ZORfiO8mE0CgRV2P2OHgK+QzSmdoBEkN2duGkf6UMbDwEd8tnt6aJqSpo5 TwLwsBpU4iC+KbIVZo+HDHgwrpbOMi2EKFfjbH1+J2zpU8GzZKMnI+E0ixF7Xs0q bxKuTQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549367; x=1787154167; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=6kJvEPUm5sDkQwp+iONnpXalOMJq5G88Uebmahq18GI=; b=PlUphDV2+Zi3E6OeL81NtWkM5yIYWo7vzV7Tef9+rEYSZmhFUXNHTprRNl5sKvAjus o7VcpbpnKQOlELQQX8qlGji6O1Oup4CQuJAwBRNBqPOkxaCRGkb9pMU0tEzN/ZxqSTEg TsWp7oJQK8haBo0CkyZfjbisg3PmwCcYVWytpNXB7PPo31+4mYQMdRBixCUn9Mb2JZtU WLDgsrtdaSJEgMIdMFNdbcipk97oHzo5jwqh0lHWT0+yJWEvUuVMHbl5sBXmKDtPAyd7 Hh9NTZPD4ylVgnhBEogYdJ4yS1QsHP2q1LtqWlCefcEfMGOLiWkZ26n83DQDGwch6RQa 8HxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549367; x=1787154167; h=content-transfer-encoding:content-type: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 :content-type; bh=6kJvEPUm5sDkQwp+iONnpXalOMJq5G88Uebmahq18GI=; b=mz4+jhA7i+nGEuBgxk5Eswl0obRjSm5hYUomMUZZt4kZKVDSGFuvcZs20Dvx5Z/nJm KmItHYu0gQds2GeAYM3JBCHuQmyMKTxB3Im6Q9V0SvKX06WNUAhtscnJp+jf6LyV1oPL bnlC6nzozBaU3t5MmaJLJkocaPZ0KnEJXYqdSsg/PVw5Mm8Rrr5P2leif9oxEIdjuykX jddL14hKDZYVUj/JcvXeej8NbsW6HFOv93OjWcH+KLgi5Ip7mmXU1Ixb3PZbE86N57Zm yxjGFj0/7vfvMUVNlTXyCqoA3yIn8JgyqDDcpBLtanUxOt1lQr3IT+qKuPXUdOTbuwnu jSOg== X-Gm-Message-State: AOJu0YxJiBtUwdo+f7NbinN/pRJUd+vPPVeHqjQHTb7qrD+mFSPrte0W OV4XrSE4zzNLbce/xIvjtvJ8Mx7HsiGOIT0C7zSHSJZYNVqk+jyQJxPTAysrn1nsj/w4Ru7tET3 G8bj9GgsmQ40SyKQBZOAqu+gAq3Wjqt2vHqqkp58UNZwUI3os40fsYZH8x3Ss5zhDKA== X-Gm-Gg: AR+sD13WtOqdCclpSN3glwz1pjELu9htBEh/2HX0q63dSY3FRMf2h62cibiDxsVoBLa 919Zmb0WSqMpKeipq2EoUcQfHGv5fpDdElA7CaVKwGiKHVwUnaNB3taPevMojKI9QhPF1J8HnNs PAJ1Iik3X8CSuOuBXn00XzftplNHRYGtbfgX9CZyIth11J8du5g2GZVpWWQpBqakLXJ1Im8j/30 O5iegaegwwcga4i4S6rIHLTIymHnc8CWsx5vcpoZK2RkbsUey8BkHmcS3Zg+HYWgrl7Ct6aZbnW UYOmRqPK1qB2D4bigz8NNtpTb7KSKkgYKGt5D3IF0PnULcbuGpWfxBFQCzb/oQuy+XiYZJ4DIY4 kZgTbS2iXsXIClOeKDGZMbPFrxkVON5p6iNpdiA5MTYISt7Xh X-Received: by 2002:a17:90b:1dc5:b0:38e:9eb2:9d43 with SMTP id 98e67ed59e1d1-39301414638mr6996048a91.16.1786549366542; Wed, 12 Aug 2026 08:42:46 -0700 (PDT) X-Received: by 2002:a17:90b:1dc5:b0:38e:9eb2:9d43 with SMTP id 98e67ed59e1d1-39301414638mr6995979a91.16.1786549365906; Wed, 12 Aug 2026 08:42:45 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier , Paolo Bonzini Subject: [PULL v2 05/41] hw/hexagon: group the CPUs in a cluster Date: Wed, 12 Aug 2026 08:41:44 -0700 Message-Id: <20260812154220.1029828-6-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXxUHdJnYQjeM8 6TQFwdNNBctDQaD7HhhyGXxOquUkPJdaP+sI/TU+OIxd2bkcADeYl4tw4W3zs3InbxOJLdoVzZp /qx3EgtJScIcZ96gHhXN9K1s0dmj79o= X-Proofpoint-GUID: 3UpalrkKhOUZGKQvPHgMypSv9cSOZew9 X-Authority-Analysis: v=2.4 cv=fpDsol4f c=1 sm=1 tr=0 ts=6a7c9477 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=mAn_JYengK_D836fKFgA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-ORIG-GUID: 3UpalrkKhOUZGKQvPHgMypSv9cSOZew9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX6cfHigmfQHnr fmRfE0u8cZUyjGeQKTIIOkOBO69iY78H/bxvBaaWY+rLuy/rCmAguIcFUYwXNJ4qHDydQDXj0wj E/uQjq40ZWiwsPzZa9G7uVpNLu+nlr1zsZJWdBpib4PncZKQvw+A9haIqqfRR7YNbv7OpRrtjHH ZZ5P6msPCJukCBVqgVpCQyh7+E8CpU/VZg+gDRsWBFxAfDFaRkS9TnihmmrfLFgmRs118JrCvSg QKPOZZ3/WVk6WVNbpjX6SiAPGoykAj6wo3NQMmI4MCOcb1+LTP2+nijOH/b+6IiF2rAL5PKPXCn bWGOGPffaPjFwm3vkR6udlfx4bKVwJxKmuNgS9gqIBifRLkqnPxRmISdjA244ufrmOF/q8py4Ac bEq+pcEqu1vj4Mck77FigK1Ov30YcrRC7vh3FnSxqUDSQKJF98Hp5C3ZC5xN+Jbe4cgUlk2GGyd wGt3eEO9YJS+1Z7xQyg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 spamscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 malwarescore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549510034158500 The CPUs are now grouped in a TYPE_CPU_CLUSTER. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-6-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- include/hw/hexagon/hex-subsys.h | 12 +++++++++++- include/hw/hexagon/hexagon.h | 1 + hw/hexagon/hex-subsys.c | 30 +++++++++++++++++++++++++++++- hw/hexagon/hexagon_dsp.c | 11 ++++++++++- hw/hexagon/virt.c | 11 ++++++++++- hw/hexagon/Kconfig | 1 + 6 files changed, 62 insertions(+), 4 deletions(-) diff --git a/include/hw/hexagon/hex-subsys.h b/include/hw/hexagon/hex-subsy= s.h index 087c105cfa4..6d0d5e1da86 100644 --- a/include/hw/hexagon/hex-subsys.h +++ b/include/hw/hexagon/hex-subsys.h @@ -15,7 +15,17 @@ void hex_subsys_create(HexagonCommonMachineState *hms, const struct hexagon_machine_config *m_cfg, Rev_t r= ev); =20 -/* Realize a CPU into the subsystem. */ +/* + * Parent a CPU into the subsystem's cluster and wire its links. Call for + * every CPU before hex_subsys_realize_cluster(), then realize each CPU wi= th + * hex_subsys_realize_cpu(). + */ +void hex_subsys_add_cpu(HexagonCommonMachineState *hms, DeviceState *cpu); + +/* Realize the CPU cluster, once all CPUs have been parented into it. */ +void hex_subsys_realize_cluster(HexagonCommonMachineState *hms); + +/* Realize a CPU previously parented via hex_subsys_add_cpu(). */ void hex_subsys_realize_cpu(HexagonCommonMachineState *hms, DeviceState *c= pu); =20 #endif /* HW_HEXAGON_HEX_SUBSYS_H */ diff --git a/include/hw/hexagon/hexagon.h b/include/hw/hexagon/hexagon.h index 6edd93f478a..31669a829f8 100644 --- a/include/hw/hexagon/hexagon.h +++ b/include/hw/hexagon/hexagon.h @@ -157,6 +157,7 @@ struct HexagonCommonMachineState { MemoryRegion ram; MemoryRegion cfgtable_rom; MemoryRegion vtcm; + DeviceState *cluster; DeviceState *glob_regs; DeviceState *tlb; }; diff --git a/hw/hexagon/hex-subsys.c b/hw/hexagon/hex-subsys.c index ac7e29604eb..6fad6fe0a4d 100644 --- a/hw/hexagon/hex-subsys.c +++ b/hw/hexagon/hex-subsys.c @@ -10,6 +10,7 @@ #include "hw/hexagon/hex-subsys.h" #include "hw/hexagon/hexagon_globalreg.h" #include "hw/hexagon/hexagon_tlb.h" +#include "hw/cpu/cluster.h" #include "hw/core/loader.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev.h" @@ -42,6 +43,16 @@ static DeviceState *tlb_create(HexagonCommonMachineState= *hms, return tlb; } =20 +static DeviceState *cluster_create(HexagonCommonMachineState *hms) +{ + DeviceState *cluster =3D qdev_new(TYPE_CPU_CLUSTER); + + object_property_add_child(OBJECT(hms), "cluster", OBJECT(cluster)); + qdev_prop_set_uint32(cluster, "cluster-id", 0); + + return cluster; +} + void hex_subsys_create(HexagonCommonMachineState *hms, const struct hexagon_machine_config *m_cfg, Rev_t r= ev) { @@ -69,15 +80,32 @@ void hex_subsys_create(HexagonCommonMachineState *hms, &hms->vtcm); } =20 + hms->cluster =3D cluster_create(hms); hms->glob_regs =3D globalreg_create(hms, m_cfg, rev); hms->tlb =3D tlb_create(hms, m_cfg); } =20 -void hex_subsys_realize_cpu(HexagonCommonMachineState *hms, DeviceState *c= pu) +void hex_subsys_add_cpu(HexagonCommonMachineState *hms, DeviceState *cpu) { + object_property_add_child(OBJECT(hms->cluster), "cpu[*]", OBJECT(cpu)); object_property_set_link(OBJECT(cpu), "global-regs", OBJECT(hms->glob_regs), &error_fatal); object_property_set_link(OBJECT(cpu), "tlb", OBJECT(hms->tlb), &error_fatal); +} + +void hex_subsys_realize_cluster(HexagonCommonMachineState *hms) +{ + /* + * The cluster must be realized after its CPUs have been parented into= it + * (see hex_subsys_add_cpu()) but before any CPU is itself realized, s= ince + * qdev_realize_and_unref() on a CPU latches cluster_index into the TCG + * cflags at that point. + */ + qdev_realize_and_unref(hms->cluster, NULL, &error_fatal); +} + +void hex_subsys_realize_cpu(HexagonCommonMachineState *hms, DeviceState *c= pu) +{ qdev_realize_and_unref(cpu, NULL, &error_fatal); } diff --git a/hw/hexagon/hexagon_dsp.c b/hw/hexagon/hexagon_dsp.c index 25e8550fba2..1db5d681665 100644 --- a/hw/hexagon/hexagon_dsp.c +++ b/hw/hexagon/hexagon_dsp.c @@ -118,6 +118,8 @@ static void hexagon_common_init(MachineState *machine, = Rev_t rev, =20 hex_subsys_create(hms, m_cfg, rev); =20 + g_autofree HexagonCPU **cpus =3D g_new(HexagonCPU *, machine->smp.cpus= ); + for (int i =3D 0; i < machine->smp.cpus; i++) { HexagonCPU *cpu =3D HEXAGON_CPU(object_new(machine->cpu_type)); qemu_register_reset(do_cpu_reset, cpu); @@ -130,7 +132,14 @@ static void hexagon_common_init(MachineState *machine,= Rev_t rev, if (i =3D=3D 0) { hexagon_init_bootstrap(dms, cpu); } - hex_subsys_realize_cpu(hms, DEVICE(cpu)); + hex_subsys_add_cpu(hms, DEVICE(cpu)); + cpus[i] =3D cpu; + } + + hex_subsys_realize_cluster(hms); + + for (int i =3D 0; i < machine->smp.cpus; i++) { + hex_subsys_realize_cpu(hms, DEVICE(cpus[i])); } } =20 diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c index b9e0bbb704c..dc1d5b6aa24 100644 --- a/hw/hexagon/virt.c +++ b/hw/hexagon/virt.c @@ -246,6 +246,8 @@ static void virt_init(MachineState *ms) =20 fdt_add_hvx(vms, m_cfg); =20 + g_autofree HexagonCPU **cpus =3D g_new(HexagonCPU *, ms->smp.cpus); + for (int i =3D 0; i < ms->smp.cpus; i++) { HexagonCPU *cpu =3D HEXAGON_CPU(object_new(ms->cpu_type)); qemu_register_reset(do_cpu_reset, cpu); @@ -261,7 +263,14 @@ static void virt_init(MachineState *ms) } qdev_prop_set_uint32(DEVICE(cpu), "htid", i); qdev_prop_set_bit(DEVICE(cpu), "start-powered-off", (i !=3D 0)); - hex_subsys_realize_cpu(&vms->parent_obj, DEVICE(cpu)); + hex_subsys_add_cpu(&vms->parent_obj, DEVICE(cpu)); + cpus[i] =3D cpu; + } + + hex_subsys_realize_cluster(&vms->parent_obj); + + for (int i =3D 0; i < ms->smp.cpus; i++) { + hex_subsys_realize_cpu(&vms->parent_obj, DEVICE(cpus[i])); } =20 fdt_add_cpu_nodes(vms); diff --git a/hw/hexagon/Kconfig b/hw/hexagon/Kconfig index 52065ab3b22..121c548bbb9 100644 --- a/hw/hexagon/Kconfig +++ b/hw/hexagon/Kconfig @@ -2,6 +2,7 @@ config HEX_DSP bool default y depends on HEXAGON + select CPU_CLUSTER =20 config HEX_VIRT bool --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549612; cv=none; d=zohomail.com; s=zohoarc; b=asof9/lQtHh0w3tV2jbUNjn4Ku8bSECUT2dVVSWaQ+G+SI6bgZ9eTd2SpnYadcKSrr5DilBzWX8+Tm3xzs4GLYTaxa3C3p9ETLGeZ+zZOrFHxa3sVyeYhe1bJOCpE7NcKJlgjOkvKtey3O2hL1NmfJixgvjEIVHZpOK4W8jNSGA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549612; 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=+u29WSyWl7DeLROVonyo7ApcUUoFSFPKVa/I0TtDg/s=; b=P60fzu3bSIcLfqnStVC/v8iOmO39nbifgwlyqCX3uOrjNaA7hxbE9IiJCi3vMVdDwyvRHQtCgsiFCQlDW/lOTWXKNXP9384XKUv3e5dWMQcLt0GGdBT07bQYCOKv8dkEL//WeporZ4M9AP6FehtF44TDWSGWLovipS44tpL/Ftg= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549612424326.2258401349011; Wed, 12 Aug 2026 08:46:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6z-0004h3-Ji; Wed, 12 Aug 2026 11:43:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6Z-0004LU-4P for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:59 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6W-0000Eo-1G for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:58 -0400 Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbbuX3995467 for ; Wed, 12 Aug 2026 15:42:49 GMT Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0m6rj3ww-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:49 +0000 (GMT) Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-84c4cd31b51so28737b3a.0 for ; Wed, 12 Aug 2026 08:42:49 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= +u29WSyWl7DeLROVonyo7ApcUUoFSFPKVa/I0TtDg/s=; b=O4MboyYkgpZCdokp lwz7DPsqxXrM+DudbAWf5s9h108UkWZxdtvWNaEPalB9vZu7Mrc2um5osszxIeug nLpFvNKy2nA16PfnUcp6kYn64EZ3vP9RqWHmnSTGE6wum5Rllt3dyZ4xGXPACsYA fVehnYSrG5VQaJiqt+vXLGDaG0fO7rwUNk5Tx90am4SgbXe3kEGJblAyA/99l9Ih LBZ6YheB1VSH2TCzn4ATorn5x8/Zj3klwkiTSBDt6A+JRc5ogLg2p9ZrI5ppt8VM 3nPop9O2kbMQD9NTtw+uHeqxd6PJPEnRdKgDJab8XaDMFHSbsWqSs1d6wsvE1h31 FfhZ3Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549369; x=1787154169; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=+u29WSyWl7DeLROVonyo7ApcUUoFSFPKVa/I0TtDg/s=; b=MQbXQPBpv3Xp9FOzIlhZQ1V/jgQdW9c8c8B3ZOrU5se981KdnWIgxYNuDNxcUZ7uB0 qzyiEv+1nv9Jh5dsH8Nn7v2TGrFeLU/htTduB7EsKeUYl3Xone4WZ+Vx+CZ7od/3p8el DUCLVQhTUXJ+zZ4qOjoORXJUdwouv85T7EOpRxczpvsdcurfn8MXsI9yS2PQiZ+NIniB HrW3OommkOPrDbViLFW/bUgFh1YzkMAnzOV0s/QbB9OCvkrsltjHOaL9S4P+RILiVvlJ RNtLVVQoPRWqw5HqL4hG7UQhP38pBw7a8VLUiR808i7X/ZXkaEMidPGgx2ScbG4t5Ytv zCRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549369; x=1787154169; h=content-transfer-encoding:content-type: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 :content-type; bh=+u29WSyWl7DeLROVonyo7ApcUUoFSFPKVa/I0TtDg/s=; b=Hx9rSDZFn3YgBDtecDebHnpt8o5Tds1dAecHduDutWcrvlzeGz5y5ee5xJkeWMsl76 kLWW3d5rVyzCo4WYBnw+m6zSEExXc6HGCl9PVMWVlONKJp4O9HQd0DmkQbxduEfbZfh/ yqwBaL3g6sv+qGOwGQapMUa7mLQFBUdkNeLeiDZ+ASrRZInOp+MExusYJmvjMiZ4cWHg UiSeN6Pl7NVCWnHFx7/RLzh/bhUG8Tl6d17Jw47/VkLIOd5LCHzxivmtlENPzCo1pRdq evV/I+y1BJMkYEXZDoYISzDCUDPEZwkKK83X9LleZaSe8OkIjEwO9cDjZ5FYjF49S9o+ 4TLw== X-Gm-Message-State: AOJu0YzOgwaNmPNddyvmPnw05MApgoIZ4Ct7wY3Txf/X7tXEiS1a1hvd oDPX0OWcWEiJqEp7zcHfpaSNTCQ/slBvI+9MonmW4HavvnuUbu4F5yd7qC5U3duG2vIpyb/8CeX 6CtUHRPbv/xZDk3u/wsGN/PODoAaXYQtY0tr43DIrWFwO+hr03Sy3vaofKO8MeeaUQA== X-Gm-Gg: AR+sD13taXYF5wZCpiKO9+I7q7wQQvazW8rfV5hR3UZQMkVwdNzDytWx4eySz131zqQ dwJpcyXIUxv2JCJCEG7qHZB4s2MC3WQ+OlB3ycs5BSXAXK1JpQWSgDZpp9jb5Cu+YdkrwYT6pcw RHDxLJpp/s0aAUPCDzH3hqzd31hcMcufDiVHHgBJTdwzHwF6zTDuEev4lsVN4CiyChDdo9gUaF8 JghkzDsMJSYekRDRO3JgbHmnRYWkesVjD2kdgBqPZt9Kcpk2pCg3s8hXkPnvg++1+GdXoO5od4v smaELzcd3p8hfgw0F9WImMDeU9HpxhNn7WqU4tPrvTjdGPPfzloPUOQCUElQ2pXp8PqWGeNCwDF kC5GBvnZbg61iiHua4/1r0H+tHBt9myBiDEd2pqGI+7AieNIA X-Received: by 2002:a05:6a20:939f:b0:3ba:d7b0:fcac with SMTP id adf61e73a8af0-3cc52fab6eamr145406637.5.1786549368671; Wed, 12 Aug 2026 08:42:48 -0700 (PDT) X-Received: by 2002:a05:6a20:939f:b0:3ba:d7b0:fcac with SMTP id adf61e73a8af0-3cc52fab6eamr145344637.5.1786549368115; Wed, 12 Aug 2026 08:42:48 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier Subject: [PULL v2 06/41] bitops.h: Add find_first_bit32() Date: Wed, 12 Aug 2026 08:41:45 -0700 Message-Id: <20260812154220.1029828-7-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX9fWeckKbHvd7 63HG7xaf76N1pNvUOh10q8g03LyypBLUL/dkJJ6MoOpIFlPpkKHcW/l2r3f6TjU7BW11xnNOeqK 2OqZ96oOMxxlrHN+01QScmOfek3vwPwhE5AP2rXG1Cx9s6BSIoMa9huLbkjYZv12EkAsIBGiWZk oDeoE5zDhopNNr0GpBM2H9ql6pDwFWdunapzHZbHllI9JM2XOLHDmyL7IN8Aa1Sh1n9Pia5iUdJ /LzM9DbJtNyL0ErYuwhyUvtfe52qG9vkSjekdIto5EULP7bvZkPj7WwKMKnqmw1jtK1q462ggRy ibX+3DEqvqpyHRpKGNPpD1OvpW+KHyJzzFEAQLjta4eg6dw21LPRDQc6XMOvYankO2HRt1PrQTz 91hVj4xSnoyAFSZucCRoqHwsoPgbHj3ZkHjWUt0xk8rf37spCaKQsqiarlZ00W/CBPpkCU2rA2T zeFPqub/3yP2BJ4zvtg== X-Authority-Analysis: v=2.4 cv=Wb08rUhX c=1 sm=1 tr=0 ts=6a7c9479 cx=c_pps a=rEQLjTOiSrHUhVqRoksmgQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=w2bVgGKsJa40EddZz84A:9 a=QEXdDO2ut3YA:10 a=2VI0MkxyNR6bbpdq8BZq:22 X-Proofpoint-GUID: PFf9KYOtVU9nsK1BUxgocM5hgvYXiQsj X-Proofpoint-ORIG-GUID: PFf9KYOtVU9nsK1BUxgocM5hgvYXiQsj X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX5VNxeLWBnamI CTmJquHl/Z0tNyfd0hjvJ4rSjgKD9RGj30plV7Os8u+EPEIBuowXgbVCONlzxJTRj/7BXvUJXbJ dH2F2kbRWXbT9l6n+MM3XM5Xjkaf5xU= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 phishscore=0 lowpriorityscore=0 suspectscore=0 priorityscore=1501 malwarescore=0 spamscore=0 adultscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549612727158500 set_bit32()/test_bit32()/etc already let devices operate on guest-visible uint32_t register arrays without depending on the host's 'unsigned long' size. Add find_first_bit32() so callers need not cast a uint32_t array to 'unsigned long *'. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-7-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- include/qemu/bitops.h | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/include/qemu/bitops.h b/include/qemu/bitops.h index c7b838a6283..f7363a5479f 100644 --- a/include/qemu/bitops.h +++ b/include/qemu/bitops.h @@ -43,10 +43,9 @@ * be some guest-visible register view of the bit array. * * We do not currently implement uint32_t versions of find_last_bit(), - * find_next_bit(), find_next_zero_bit(), find_first_bit() or - * find_first_zero_bit(), because we haven't yet needed them. If you - * need them you should implement them similarly to the 'unsigned long' - * versions. + * find_next_bit(), find_next_zero_bit() or find_first_zero_bit(), + * because we haven't yet needed them. If you need them you should + * implement them similarly to the 'unsigned long' versions. * * You can declare a bitmap to be used with these functions via the * DECLARE_BITMAP and DECLARE_BITMAP32 macros in bitmap.h. @@ -382,6 +381,29 @@ static inline int test_bit32(long nr, const uint32_t *= addr) return 1U & (addr[BIT32_WORD(nr)] >> (nr & 31)); } =20 +/** + * find_first_bit32 - find the first set bit in a memory region + * @addr: The address to start the search at + * @size: The maximum size to search + * + * Returns the bit number of the first set bit, + * or @size if there is no set bit in the bitmap. + */ +static inline uint32_t find_first_bit32(const uint32_t *addr, uint32_t siz= e) +{ + uint32_t result; + + for (result =3D 0; result < size; result +=3D 32) { + uint32_t tmp =3D *addr++; + if (tmp) { + result +=3D ctz32(tmp); + return result < size ? result : size; + } + } + /* Not found */ + return size; +} + /** * DOC: Miscellaneous bit operations on single values * --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549733; cv=none; d=zohomail.com; s=zohoarc; b=MvpVW60TUamkhT+ZMU4HCoEy3HGb8jfr3yn5l9icZuXMNqzZzquSFLOriEEsFAJ5yoPkZgFKpPiAfWg18cJ4IJZ/UVKyI9XKHukH9HgJ9mF7EvM3SD0D34fv+I8HB9Y6T3YB6EGENPJLgq2dDoJ/nC8dJeYFHtAgtXY0GUIIcY0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549733; 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=NZvubMMxFXlWSfW59gG5ijgdcNgSJxmQT9F/vHgeywE=; b=GN5QN6NSn4mK5LgASjDb1Ra6EVu1Kop6yXsgydECSWwVR6K+XKmnh9fuUUR0kPijRq/dLDOPtVP7LqAoWvAltoprFTEB50+0QkMkLAJiTZe2fzW2ia8SovF7vuaCcR/yVFk0Kpn9zDDZX/xrBPo+q75D4QsBHSqMyhIL2g0uBTA= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549733167515.8752954630941; Wed, 12 Aug 2026 08:48:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6v-0004bs-2x; Wed, 12 Aug 2026 11:43:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6d-0004Nw-48 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:08 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6W-0000FP-Qp for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:01 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbrTP3971762 for ; Wed, 12 Aug 2026 15:42:51 GMT Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0jgrjj86-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:51 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-cb4cdf95b5aso1728551a12.1 for ; Wed, 12 Aug 2026 08:42:51 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= NZvubMMxFXlWSfW59gG5ijgdcNgSJxmQT9F/vHgeywE=; b=oy2jGaJ0Cucu6/r+ ApZLeMyLS9VT7eExuuDCZUFkK5xnapDS+AYdW9uTz+ibMjuZCClV9tnIXZ8uwggf 7O7/h2fbWHVkDBo0yEPL/9soyuNlkjRTAI6jP3vI5LXat4mNwvhHIXGanRwgGYXK Wh3hUNPF7nU7yHqpvq69amEtcjeAkTOmZLR7wFW2v6RzVqINOgLgWWpYcUg7QSUt 3UC6S02jLEJGfExgMk2qGPgu3gWzTc9bHTKAm7Vz/EKrxvKwdwYxbnU59x2kEhQV KPJKt/HxoP/k9Rc58OfhJsBAg94zORBx7FtWd44Oo22feTKzUrkI2RwBPpBpRG7k gd5UvA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549370; x=1787154170; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=NZvubMMxFXlWSfW59gG5ijgdcNgSJxmQT9F/vHgeywE=; b=NA7+5Adw21NVXGkRTC/TPnj0th9CfAjm2DOYHW1gRlQ0eQAggzD/1UWjfGXTgPTCYG H23DWPNWO97Le4gtUE4uYH9TduItHOUwROcUYrDyiLCWLhK1RcWEFvC687N0DSbDtVgV o9awkc4PQm8Fm2Igq56NfbiZ/soGR5MKugHYg2w9fCP4ogzizqx0m06QNOvs6qIUIUsN nZRxlHKIsfWMIkgxmW2HJwdyKNhX3PnrvXA9u31VDjRfufp1JBMPCAwI61K3d032zilm ngLkKpPWa+9OZGuoxihDDlUxhjmtcgvJHuUYeeqprNuzauPe+WLSRcR/dcwYCebsue42 xE3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549370; x=1787154170; h=content-transfer-encoding:content-type: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 :content-type; bh=NZvubMMxFXlWSfW59gG5ijgdcNgSJxmQT9F/vHgeywE=; b=V8OGhUAXvONI8fSYRcRUiUvrh22DtfhgdjTK8gN2rrfjSZKkCurnPev/PyeMaI4cLA h79WayZelPLJa5905Lv4IfsM6U2uuPPGXqB8Fwr9kmRnOzf3AJ15ipybymjtL8pggl0E +Dc+3DK0N0eY9Og6jOcHJCpGydvHXOCcaF4UeID4+kdJqvMenewHJddGSu3YtUQcPE5X imqPj7JJBgTTTX4VoUEx3zWWKF7fc4yYD6VEDjfzZlTGPZIgIMXgsvci2l0T7pULM6c3 bP2+T3K/Dz+XVqqPRN5ZhgVTNTxRC4pEUy5n65Yg1tQTZF/DdUXofvMPq/Jr1Kkya7XJ tE6g== X-Gm-Message-State: AOJu0YzpA+YvE4sjUWhh+zTPt15+4VTxycNsSaYtFZjRODKY7OiPX+WP jYn4dXnlAOc7O6WTSdB9akXE+d3/ycbyqipsOf50Rdx9oqjjMbX1LwmFcJ9b8+dEAjIRpTwjE5z CMXyq614C5MIctIBa6Q/vt9k/s2kQcywGqAEqq5KZW38PEP6yEAdrJhCZLmHDk/ZfWw== X-Gm-Gg: AR+sD11uKj5Oa1hKUyfMhEV7DDkd5Yq+DZyLF+xCja15pSAlRgxZoXhcVY5R9qI1ibO A8NnAzsRd0RU9mPdRflMQSiGFnbS8VcIlVHXXdG7CLi0iXlpvcBtszWhmo7hxB7jy8OQ92Awc4Y 7liTIdHx9OAocTJQthHdHu+gMFQwHvQCKsR1eqSqS+m1n6swEh9N+D7vJlijMGkcaCh6j0Hm7zN n0Uff8TWssEd4N6dwC3M4W2mE1PAlXZmsC7rUMqUZJmhLpIPCe5VPPSvpGZROdyf8I/rUsP7Bx4 uNlMniM4QaexO7z2eCvpoCDdKp9I5ZxtW7rvjM4IwEgdZhVQR2XVYg16enBGmOF5qQzSKaPd29f mgBrDnfFWVZ57erAwyGABm5KEaKl+yZJWGG5L+csFdGBhAmKs X-Received: by 2002:a05:6a20:9f09:b0:3c3:935a:af2c with SMTP id adf61e73a8af0-3cc3f4ef67cmr7909278637.3.1786549370217; Wed, 12 Aug 2026 08:42:50 -0700 (PDT) X-Received: by 2002:a05:6a20:9f09:b0:3c3:935a:af2c with SMTP id adf61e73a8af0-3cc3f4ef67cmr7909173637.3.1786549369492; Wed, 12 Aug 2026 08:42:49 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Sid Manning , Matheus Tavares Bernardino , Damien Hedde , Pierrick Bouvier , Paolo Bonzini Subject: [PULL v2 07/41] hw/intc: Add l2vic interrupt controller Date: Wed, 12 Aug 2026 08:41:46 -0700 Message-Id: <20260812154220.1029828-8-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX6YQHuIlDjUSu CTlSOHFzrHhFMsyfw5u9MqXfiHBtBM2QiQ5KTYeL2dcRHbpZuCCmZvx/Hf2OkyiSLas/fEK7XEb 6Yx6k/JGfMteu1iW7L5ZtpY57IgRUdBbgAhyrO6/UzzhFQjLCZbb66jXgmX3KmRacPgWJG/C4lS REoH2601QKkpFOQcFCFLK5h7f+/zPy4uKAtAaNS8eBWSrqqBNTsde16ObLPTGFtppk1aGFSfcro AtyE/T7vQP56gsIo9ZglfYV5TJQdOe1HRR4Xj2rf9jKN+xdlE9fmryveNod+4GDaeNqq+doP2lE DkVtQ+qvZ8RBvlD7ZovTkWJiIfrxmRBWqv/ZLvius50IQktMW6UYk8MTqgwt1rwjwJ4AzCaJifC 6AoP0fkY3/kH7mt10idydmiq9J2/aHGuhIQCca2+8N4GWdAa7XkEn0iv2NIWr0PGO0DUN0GCI/Y /uCK3mScdM20XTPrN0g== X-Proofpoint-ORIG-GUID: -rr51u0darKvK1lO1FlEtcVukytum-cQ X-Authority-Analysis: v=2.4 cv=TNJ1jVla c=1 sm=1 tr=0 ts=6a7c947b cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=NEAV23lmAAAA:8 a=COk6AnOGAAAA:8 a=VjGsYNusyyFeigA112kA:9 a=QEXdDO2ut3YA:10 a=_Vgx9l1VpLgwpw_dHYaR:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-GUID: -rr51u0darKvK1lO1FlEtcVukytum-cQ X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX0rjcoieFtTcZ 2L5qjxNN85BuC+W2TDSjYyNNGTAMRWUN0cFauWoKXQ+Z8eTdMANH7ar/d+fSgwZogZz8s8ed5jv /LftJaAJb9/cd3HoufRtF3qYYVdabNQ= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 phishscore=0 impostorscore=0 adultscore=0 suspectscore=0 bulkscore=0 spamscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549735803158500 From: Sid Manning The Hexagon DSP requires an L2VIC to route up to 1024 external interrupt sources through 4 VID output groups into the core's 8 interrupt inputs. Add a device model for it. Co-authored-by: Matheus Tavares Bernardino Co-authored-by: Damien Hedde Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-8-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- MAINTAINERS | 3 + docs/devel/hexagon-l2vic.rst | 55 ++++ docs/devel/index-internals.rst | 1 + include/hw/intc/hex-l2vic.h | 61 ++++ target/hexagon/cpu.h | 2 + hw/intc/hex-l2vic.c | 556 +++++++++++++++++++++++++++++++++ target/hexagon/cpu.c | 2 + target/hexagon/op_helper.c | 16 +- hw/hexagon/Kconfig | 1 + hw/intc/Kconfig | 3 + hw/intc/meson.build | 2 + hw/intc/trace-events | 4 + 12 files changed, 705 insertions(+), 1 deletion(-) create mode 100644 docs/devel/hexagon-l2vic.rst create mode 100644 include/hw/intc/hex-l2vic.h create mode 100644 hw/intc/hex-l2vic.c diff --git a/MAINTAINERS b/MAINTAINERS index 4628793dde6..5a772818bb2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -250,6 +250,8 @@ M: Brian Cain R: Pierrick Bouvier S: Supported F: target/hexagon/ +F: hw/intc/hex-l2vic.c +F: include/hw/intc/hex-l2vic.h X: target/hexagon/idef-parser/ X: target/hexagon/gen_idef_parser_funcs.py F: linux-user/hexagon/ @@ -262,6 +264,7 @@ F: gdbstub/gdb-xml/hexagon*.xml F: docs/system/target-hexagon.rst F: docs/system/hexagon/ F: docs/devel/hexagon-sys.rst +F: docs/devel/hexagon-l2vic.rst T: git https://github.com/qualcomm/qemu.git hex-next =20 Hexagon idef-parser diff --git a/docs/devel/hexagon-l2vic.rst b/docs/devel/hexagon-l2vic.rst new file mode 100644 index 00000000000..9cb2a86871e --- /dev/null +++ b/docs/devel/hexagon-l2vic.rst @@ -0,0 +1,55 @@ +.. SPDX-License-Identifier: GPL-2.0-or-later + +Hexagon L2 Vectored Interrupt Controller +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + + +.. code-block:: none + + +-------------+ +----------------------+ + | l2vic | | hexagon core | + | | | | + IRQ in ---->| | | | + IRQ in ---->| VID0 -|----------------->| irq2 | + ... ---->| | | | | + IRQ in ---->| | | v | + | ... | | | + | | | / | | \ | + IRQ in ---->| | | t0 t1 t2 t3 ...| + IRQ in ---->| VIDN -| | | + ... ---->| | | | + IRQ in ---->| | | Global SREG File | + | | | | + | State | | | + | [ ] <--|=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D|=3D=3D> [ VID ] | + | [ ] <--|=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D|=3D=3D> [ VID1 ] | + | | | | + +-------------+ +----------------------+ + +L2VIC/Core Integration +---------------------- + +* hexagon core supports 8 external interrupt sources +* l2vic supports 1024 input interrupts mapped among 4 output interrupts +* l2vic has four output signals: { VID0, VID1, VID2, VID3 } +* l2vic device has a bank of registers per-VID that can be used to query + the status or assert new interrupts. +* Interrupts are 'steered' to threads based on { thread priority, 'EX' sta= te, + thread interrupt mask, thread interrupt enable, global interrupt enable, + etc. }. +* Any hardware thread could conceivably handle any input interrupt, depend= ent + on state. +* The system register transfer instruction can read the VID0-VID3 values f= rom + the l2vic when reading from hexagon core system registers "VID" and "VID= 1". +* When l2vic VID0 has multiple active interrupts, it pulses the VID0 output + IRQ and stores the IRQ number for the VID0 register field. Only after t= his + interrupt is cleared can the l2vic pulse the VID0 output IRQ again and p= rovide + the next interrupt number on the VID0 register. +* The ``ciad`` instruction clears the l2vic input interrupt and un-disable= s the + core interrupt. If some/an l2vic VID0 interrupt is pending when this oc= curs, + the next interrupt should fire and any subsequent reads of the VID regis= ter + should reflect the newly raised interrupt. +* In QEMU, on an external interrupt or an unmasked-pending interrupt, + all vCPUs are triggered (has_work=3D=3Dtrue) and each will grab the IO l= ock + while considering the steering logic to determine whether they're the th= read + that must handle the interrupt. diff --git a/docs/devel/index-internals.rst b/docs/devel/index-internals.rst index a8f5e310df3..763cda1e76f 100644 --- a/docs/devel/index-internals.rst +++ b/docs/devel/index-internals.rst @@ -15,6 +15,7 @@ Details about QEMU's various subsystems including how to = add features to them. clocks ebpf_rss hexagon-sys + hexagon-l2vic migration/index multi-process reset diff --git a/include/hw/intc/hex-l2vic.h b/include/hw/intc/hex-l2vic.h new file mode 100644 index 00000000000..edc278266cb --- /dev/null +++ b/include/hw/intc/hex-l2vic.h @@ -0,0 +1,61 @@ +/* + * QEMU L2VIC Interrupt Controller + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_INTC_HEX_L2VIC_H +#define HW_INTC_HEX_L2VIC_H + +#include "qom/object.h" + +#define TYPE_HEX_L2VIC "hex-l2vic" +/* + * L2VIC Interface for CPU/GlobalReg interaction + */ +#define TYPE_HEX_L2VIC_INTERFACE "hex-l2vic-if" + +typedef struct HexL2VicInterface HexL2VicInterface; + +typedef struct HexL2VicInterfaceClass { + InterfaceClass parent_class; + + uint32_t (*read_vid)(HexL2VicInterface *l2vic, uint32_t group); + + /* + * Write the VID: unpack the fields into per-group VIDs. This does + * not deliver or clear any interrupt; a pending interrupt stays + * gated until ciad. + */ + void (*update_vid)(HexL2VicInterface *l2vic, uint32_t group, + uint32_t value); + + /* Clear interrupt using CIAD instruction */ + void (*clear_interrupt)(HexL2VicInterface *l2vic); +} HexL2VicInterfaceClass; + +DECLARE_OBJ_CHECKERS(HexL2VicInterface, HexL2VicInterfaceClass, + HEX_L2VIC_INTERFACE, TYPE_HEX_L2VIC_INTERFACE); + +static inline uint32_t l2vic_read_vid(HexL2VicInterface *l2vic, + uint32_t group) +{ + HexL2VicInterfaceClass *k =3D HEX_L2VIC_INTERFACE_GET_CLASS(l2vic); + return k->read_vid(l2vic, group); +} + +static inline void l2vic_update_vid(HexL2VicInterface *l2vic, uint32_t gro= up, + uint32_t value) +{ + HexL2VicInterfaceClass *k =3D HEX_L2VIC_INTERFACE_GET_CLASS(l2vic); + k->update_vid(l2vic, group, value); +} + +static inline void l2vic_clear_interrupt(HexL2VicInterface *l2vic) +{ + HexL2VicInterfaceClass *k =3D HEX_L2VIC_INTERFACE_GET_CLASS(l2vic); + k->clear_interrupt(l2vic); +} + +#endif /* HW_INTC_HEX_L2VIC_H */ diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h index 7694fd91fa8..f6c3c639325 100644 --- a/target/hexagon/cpu.h +++ b/target/hexagon/cpu.h @@ -39,6 +39,7 @@ typedef struct HexagonGlobalRegState HexagonGlobalRegStat= e; #include "qemu/bitmap.h" =20 #include "target/hexagon/reg_fields.h" +#include "hw/intc/hex-l2vic.h" =20 #define NUM_PREGS 4 #define TOTAL_PER_THREAD_REGS 64 @@ -198,6 +199,7 @@ struct ArchCPU { uint32_t boot_addr; HexagonGlobalRegState *globalregs; uint32_t htid; + HexL2VicInterface *l2vic; #endif }; =20 diff --git a/hw/intc/hex-l2vic.c b/hw/intc/hex-l2vic.c new file mode 100644 index 00000000000..f07ec850d49 --- /dev/null +++ b/hw/intc/hex-l2vic.c @@ -0,0 +1,556 @@ +/* + * QEMU L2VIC Interrupt Controller + * + * Arm PrimeCell PL190 Vector Interrupt Controller was used as a reference. + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hw/core/irq.h" +#include "hw/core/sysbus.h" +#include "migration/vmstate.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "qemu/bitmap.h" +#include "qemu/bitops.h" +#include "hw/intc/hex-l2vic.h" +#include "trace.h" + +#define L2VIC_VID_GRP_0 0x0 /* Read */ +#define L2VIC_VID_GRP_1 0x4 /* Read */ +#define L2VIC_VID_GRP_2 0x8 /* Read */ +#define L2VIC_VID_GRP_3 0xC /* Read */ +#define L2VIC_INT_ENABLEn 0x100 /* Read/Write */ +#define L2VIC_INT_ENABLE_CLEARn 0x180 /* Write */ +#define L2VIC_INT_ENABLE_SETn 0x200 /* Write */ +#define L2VIC_INT_TYPEn 0x280 /* Read/Write */ +#define L2VIC_INT_STATUSn 0x380 /* Read */ +#define L2VIC_INT_CLEARn 0x400 /* Write */ +#define L2VIC_SOFT_INTn 0x480 /* Write */ +#define L2VIC_INT_PENDINGn 0x500 /* Read */ +#define L2VIC_INT_GRPn_0 0x600 /* Read/Write */ +#define L2VIC_INT_GRPn_1 0x680 /* Read/Write */ +#define L2VIC_INT_GRPn_2 0x700 /* Read/Write */ +#define L2VIC_INT_GRPn_3 0x780 /* Read/Write */ + +#define L2VIC_INTERRUPT_MAX 1024 +/* + * Note about l2vic groups: + * Each interrupt to L2VIC can be configured to associate with one of + * four groups. + * Group 0 interrupts go to IRQ2 via VID 0 (SSR: 0xC2, the default) + * Group 1 interrupts go to IRQ3 via VID 1 (SSR: 0xC3) + * Group 2 interrupts go to IRQ4 via VID 2 (SSR: 0xC4) + * Group 3 interrupts go to IRQ5 via VID 3 (SSR: 0xC5) + */ + +static void bitmap32_write_word(uint32_t *bitmap, int word_offset, uint32_= t val) +{ + bitmap[word_offset] =3D val; +} + +static void bitmap32_clear_word(uint32_t *bitmap, int word_offset, + uint32_t mask) +{ + bitmap[word_offset] &=3D ~mask; +} + +static void bitmap32_set_word(uint32_t *bitmap, int word_offset, uint32_t = mask) +{ + bitmap[word_offset] |=3D mask; +} + +static uint32_t bitmap32_read_word(uint32_t *bitmap, int word_offset) +{ + return bitmap[word_offset]; +} + +OBJECT_DECLARE_SIMPLE_TYPE(HexL2VICState, HEX_L2VIC) + +#define SLICE_MAX (L2VIC_INTERRUPT_MAX / 32) +#define L2VIC_REG_RANGE_SIZE 0x80 + +typedef struct HexL2VICState { + SysBusDevice parent_obj; + + MemoryRegion iomem; + MemoryRegion fast_iomem; + /* + * vid_group[i] is readable at L2VIC_VID_GRP_i (offset i*4): the irq + * last delivered through VID group i, 0-1023 so only 10 bits are used. + */ + uint32_t vid_group[4]; + /* + * Last irq delivered on any VID group; not specific to group 0. + * Used by the ciad path to clear the most-recently-delivered + * interrupt from int_status. + */ + uint32_t vid; + DECLARE_BITMAP32(int_enable, L2VIC_INTERRUPT_MAX); + /* Asserted interrupts awaiting delivery once no VID is active */ + DECLARE_BITMAP32(int_pending, L2VIC_INTERRUPT_MAX); + /* Which enabled interrupt is active */ + DECLARE_BITMAP32(int_status, L2VIC_INTERRUPT_MAX); + /* Edge or Level interrupt */ + DECLARE_BITMAP32(int_type, L2VIC_INTERRUPT_MAX); + DECLARE_BITMAP32(int_group_n[4], L2VIC_INTERRUPT_MAX); + qemu_irq irq[8]; +} HexL2VICState; + +typedef enum { + L2VIC_OP_WRITE, + L2VIC_OP_CLEAR, + L2VIC_OP_SET, + L2VIC_OP_NONE, +} L2VicWriteOp; + +typedef struct { + hwaddr base; + size_t state_offset; + L2VicWriteOp write_op; + bool write_only; +} L2VicRegRange; + +static const L2VicRegRange l2vic_reg_ranges[] =3D { + { L2VIC_INT_ENABLEn, offsetof(HexL2VICState, int_enable), + L2VIC_OP_WRITE, false }, + { L2VIC_INT_ENABLE_CLEARn, offsetof(HexL2VICState, int_enable), + L2VIC_OP_CLEAR, true }, + { L2VIC_INT_ENABLE_SETn, offsetof(HexL2VICState, int_enable), + L2VIC_OP_SET, true }, + { L2VIC_INT_TYPEn, offsetof(HexL2VICState, int_type), + L2VIC_OP_WRITE, false }, + { L2VIC_INT_STATUSn, offsetof(HexL2VICState, int_status), + L2VIC_OP_NONE, false }, + { L2VIC_INT_CLEARn, offsetof(HexL2VICState, int_status), + L2VIC_OP_CLEAR, true }, + { L2VIC_SOFT_INTn, offsetof(HexL2VICState, int_pending), + L2VIC_OP_NONE, true }, + { L2VIC_INT_PENDINGn, offsetof(HexL2VICState, int_pending), + L2VIC_OP_WRITE, false }, + { L2VIC_INT_GRPn_0, offsetof(HexL2VICState, int_group_n[0]), + L2VIC_OP_WRITE, false }, + { L2VIC_INT_GRPn_1, offsetof(HexL2VICState, int_group_n[1]), + L2VIC_OP_WRITE, false }, + { L2VIC_INT_GRPn_2, offsetof(HexL2VICState, int_group_n[2]), + L2VIC_OP_WRITE, false }, + { L2VIC_INT_GRPn_3, offsetof(HexL2VICState, int_group_n[3]), + L2VIC_OP_WRITE, false }, +}; + +static uint32_t *l2vic_state_bitmap(HexL2VICState *s, size_t state_offset) +{ + return (uint32_t *)((char *)s + state_offset); +} + +static bool l2vic_reg_read_range(HexL2VICState *s, hwaddr offset, + uint64_t *value) +{ + int i; + + for (i =3D 0; i < ARRAY_SIZE(l2vic_reg_ranges); i++) { + const L2VicRegRange *r =3D &l2vic_reg_ranges[i]; + + if (offset >=3D r->base && + offset < r->base + L2VIC_REG_RANGE_SIZE) { + if (r->write_only) { + *value =3D 0; + } else { + uint32_t *bitmap =3D l2vic_state_bitmap(s, r->state_offset= ); + *value =3D bitmap32_read_word(bitmap, + (offset - r->base) >> 2); + } + return true; + } + } + return false; +} + +static bool l2vic_reg_write_range(HexL2VICState *s, hwaddr offset, + uint32_t val) +{ + int i; + + for (i =3D 0; i < ARRAY_SIZE(l2vic_reg_ranges); i++) { + const L2VicRegRange *r =3D &l2vic_reg_ranges[i]; + + if (offset >=3D r->base && + offset < r->base + L2VIC_REG_RANGE_SIZE) { + uint32_t *bitmap =3D l2vic_state_bitmap(s, r->state_offset); + int word =3D (offset - r->base) >> 2; + + switch (r->write_op) { + case L2VIC_OP_WRITE: + bitmap32_write_word(bitmap, word, val); + break; + case L2VIC_OP_CLEAR: + bitmap32_clear_word(bitmap, word, val); + break; + case L2VIC_OP_SET: + bitmap32_set_word(bitmap, word, val); + break; + case L2VIC_OP_NONE: + /* Read-only or handled elsewhere; ignore the write. */ + break; + default: + g_assert_not_reached(); + } + return true; + } + } + return false; +} + +/* + * The four INT_GRPn_* register arrays are interleaved across irqs in + * blocks of 8: irq 0-7 live in group_n[0], irq 8-15 in group_n[1], irq + * 16-23 in group_n[2], irq 24-31 in group_n[3], irq 32-39 back in + * group_n[0], and so on. + */ +static uint32_t *get_int_group(HexL2VICState *s, int irq) +{ + return s->int_group_n[extract32(irq, 3, 2)]; +} + +static int find_slice(int irq) +{ + return irq / 32; +} + +static int get_vid(HexL2VICState *s, int irq) +{ + uint32_t *group =3D get_int_group(s, irq); + uint32_t slice =3D group[find_slice(irq)]; + uint32_t vid; + /* + * Each irq occupies a 4-bit field: bit 3 is the group-enable bit, + * bits 0-2 select the VID group. Shift down to this irq's field. + */ + uint32_t val =3D slice >> ((irq & 0x7) * 4); + + if (!(val & 0x8)) { + return 0; + } + vid =3D val & 0x7; + if (vid >=3D ARRAY_SIZE(s->vid_group)) { + qemu_log_mask(LOG_GUEST_ERROR, + "L2VIC: irq %d requests invalid vid group %u\n", + irq, vid); + return 0; + } + return vid; +} + +static inline bool vid_active(HexL2VICState *s) +{ + const uint32_t size =3D L2VIC_INTERRUPT_MAX; + const uint32_t active_irq =3D find_first_bit32(s->int_status, size); + return active_irq !=3D size; +} + +static bool l2vic_update(HexL2VICState *s, int irq) +{ + bool pending; + bool enable; + + if (vid_active(s)) { + return true; + } + + pending =3D test_bit32(irq, s->int_pending); + enable =3D test_bit32(irq, s->int_enable); + if (pending && enable) { + int vid =3D get_vid(s, irq); + set_bit32(irq, s->int_status); + clear_bit32(irq, s->int_pending); + /* + * Only auto-disable for edge-triggered interrupts (type=3D1). + * Level-triggered interrupts (type=3D0, the default) keep their + * enable bit set across deliveries -- the firmware enables once + * and expects the interrupt to remain enabled. + */ + if (test_bit32(irq, s->int_type)) { + clear_bit32(irq, s->int_enable); + } + s->vid =3D irq; + s->vid_group[vid] =3D irq; + + qemu_irq_pulse(s->irq[vid + 2]); + trace_hex_l2vic_delivered(irq, vid); + return true; + } + return false; +} + +static void l2vic_update_all(HexL2VICState *s) +{ + for (int i =3D 0; i < L2VIC_INTERRUPT_MAX; i++) { + if (l2vic_update(s, i)) { + /* once vid is active, no-one else can set it until ciad */ + return; + } + } +} + +static void l2vic_set_irq(void *opaque, int irq, int level) +{ + HexL2VICState *s =3D (HexL2VICState *)opaque; + + if (level) { + set_bit32(irq, s->int_pending); + } + l2vic_update(s, irq); +} + +static void l2vic_write(void *opaque, hwaddr offset, uint64_t val, + unsigned size) +{ + HexL2VICState *s =3D (HexL2VICState *)opaque; + + trace_hex_l2vic_reg_write((unsigned)offset, (uint32_t)val); + + if (!l2vic_reg_write_range(s, offset, val)) { + qemu_log_mask(LOG_UNIMP, + "%s: offset 0x%" HWADDR_PRIx " unimplemented\n", + __func__, offset); + } + + /* SOFT_INT also sets pending for edge-triggered interrupts */ + if (offset >=3D L2VIC_SOFT_INTn && + offset < L2VIC_SOFT_INTn + L2VIC_REG_RANGE_SIZE && val) { + int base_irq =3D ((offset - L2VIC_SOFT_INTn) >> 2) * 32; + uint32_t bits =3D val; + int bit; + + while ((bit =3D ctz32(bits)) < 32) { + int irq =3D base_irq + bit; + + if (test_bit32(irq, s->int_type)) { + set_bit32(irq, s->int_pending); + } + bits &=3D ~(1u << bit); + } + } + + l2vic_update_all(s); +} + +static uint64_t l2vic_read(void *opaque, hwaddr offset, unsigned size) +{ + uint64_t value; + HexL2VICState *s =3D (HexL2VICState *)opaque; + + if (offset <=3D L2VIC_VID_GRP_3) { + value =3D s->vid_group[offset >> 2]; + } else if (!l2vic_reg_read_range(s, offset, &value)) { + value =3D 0; + qemu_log_mask(LOG_GUEST_ERROR, + "L2VIC: %s: offset 0x%" HWADDR_PRIx "\n", __func__, + offset); + } + + trace_hex_l2vic_reg_read((unsigned)offset, (uint32_t)value); + return value; +} + +static const MemoryRegionOps l2vic_ops =3D { + .read =3D l2vic_read, + .write =3D l2vic_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid.min_access_size =3D 4, + .valid.max_access_size =3D 4, + .valid.unaligned =3D false, +}; + +#define FASTL2VIC_ENABLE 0x0 +#define FASTL2VIC_DISABLE 0x1 +#define FASTL2VIC_INT 0x2 + +static void fastl2vic_write(void *opaque, hwaddr offset, uint64_t val, + unsigned size) +{ + if (offset =3D=3D 0) { + uint32_t cmd =3D (val >> 16) & 0x3; + uint32_t irq =3D val & 0x3ff; + uint32_t slice =3D (irq / 32) * 4; + val =3D 1 << (irq % 32); + + if (cmd =3D=3D FASTL2VIC_ENABLE) { + l2vic_write(opaque, L2VIC_INT_ENABLE_SETn + slice, val, size); + } else if (cmd =3D=3D FASTL2VIC_DISABLE) { + l2vic_write(opaque, L2VIC_INT_ENABLE_CLEARn + slice, val, size= ); + } else if (cmd =3D=3D FASTL2VIC_INT) { + l2vic_write(opaque, L2VIC_SOFT_INTn + slice, val, size); + } else { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: invalid write cmd %" PRId32 "\n", + __func__, cmd); + } + return; + } + qemu_log_mask(LOG_GUEST_ERROR, "%s: invalid write offset 0x%08" HWADDR= _PRIx + "\n", __func__, offset); +} + +static uint64_t fastl2vic_read(void *opaque, hwaddr offset, unsigned size) +{ + return 0; +} + +static const MemoryRegionOps fastl2vic_ops =3D { + .read =3D fastl2vic_read, + .write =3D fastl2vic_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid.min_access_size =3D 4, + .valid.max_access_size =3D 4, + .valid.unaligned =3D false, +}; + +static uint32_t l2vic_interface_read_vid_impl(HexL2VicInterface *iface, + uint32_t group) +{ + HexL2VICState *s =3D HEX_L2VIC(iface); + uint32_t result =3D 0; + + if (group =3D=3D 0) { + /* VID register combines vid_group[0] (VID0) and vid_group[1] (VID= 1) */ + result =3D deposit32(result, 0, 16, s->vid_group[0]); + result =3D deposit32(result, 16, 16, s->vid_group[1]); + } else if (group =3D=3D 1) { + /* VID1 register combines vid_group[2] (VID2) and vid_group[3] (VI= D3) */ + result =3D deposit32(result, 0, 16, s->vid_group[2]); + result =3D deposit32(result, 16, 16, s->vid_group[3]); + } + return result; +} + +static void l2vic_interface_update_vid_impl(HexL2VicInterface *iface, + uint32_t group, uint32_t value) +{ + HexL2VICState *s =3D HEX_L2VIC(iface); + + if (group =3D=3D 0) { + s->vid_group[0] =3D extract32(value, 0, 16); + s->vid_group[1] =3D extract32(value, 16, 16); + } else if (group =3D=3D 1) { + s->vid_group[2] =3D extract32(value, 0, 16); + s->vid_group[3] =3D extract32(value, 16, 16); + } + + l2vic_update_all(s); +} + +static void l2vic_interface_clear_interrupt_impl(HexL2VicInterface *iface) +{ + HexL2VICState *s =3D HEX_L2VIC(iface); + + if (s->vid < L2VIC_INTERRUPT_MAX) { + clear_bit32(s->vid, s->int_status); + } + l2vic_update_all(s); +} + +static void l2vic_reset_hold(Object *obj, ResetType type G_GNUC_UNUSED) +{ + HexL2VICState *s =3D HEX_L2VIC(obj); + + memset(s->int_enable, 0, sizeof(s->int_enable)); + memset(s->int_pending, 0, sizeof(s->int_pending)); + memset(s->int_status, 0, sizeof(s->int_status)); + memset(s->int_type, 0, sizeof(s->int_type)); + memset(s->int_group_n, 0, sizeof(s->int_group_n)); + memset(s->vid_group, 0, sizeof(s->vid_group)); + s->vid =3D 0; + + l2vic_update_all(s); +} + +static void reset_irq_handler(void *opaque, int irq, int level) +{ + Object *obj =3D OBJECT(opaque); + + if (level) { + l2vic_reset_hold(obj, RESET_TYPE_COLD); + } +} + +static void l2vic_init(Object *obj) +{ + DeviceState *dev =3D DEVICE(obj); + HexL2VICState *s =3D HEX_L2VIC(obj); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + int i; + + memory_region_init_io(&s->iomem, obj, &l2vic_ops, s, "l2vic", 0x1000); + sysbus_init_mmio(sbd, &s->iomem); + memory_region_init_io(&s->fast_iomem, obj, &fastl2vic_ops, s, "fast", + 0x10000); + sysbus_init_mmio(sbd, &s->fast_iomem); + + qdev_init_gpio_in(dev, l2vic_set_irq, L2VIC_INTERRUPT_MAX); + qdev_init_gpio_in_named(dev, reset_irq_handler, "reset", 1); + for (i =3D 0; i < 8; i++) { + sysbus_init_irq(sbd, &s->irq[i]); + } +} + +static const VMStateDescription vmstate_l2vic =3D { + .name =3D "l2vic", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D + (VMStateField[]){ + VMSTATE_UINT32_ARRAY(vid_group, HexL2VICState, 4), + VMSTATE_UINT32(vid, HexL2VICState), + VMSTATE_UINT32_ARRAY(int_enable, HexL2VICState, SLICE_MAX), + VMSTATE_UINT32_ARRAY(int_type, HexL2VICState, SLICE_MAX), + VMSTATE_UINT32_ARRAY(int_status, HexL2VICState, SLICE_MAX), + VMSTATE_UINT32_ARRAY(int_pending, HexL2VICState, SLICE_MAX), + VMSTATE_UINT32_2DARRAY(int_group_n, HexL2VICState, 4, SLICE_MA= X), + VMSTATE_END_OF_LIST() } +}; + +static void l2vic_interface_class_init(ObjectClass *klass, const void *dat= a) +{ + HexL2VicInterfaceClass *k =3D HEX_L2VIC_INTERFACE_CLASS(klass); + + k->read_vid =3D l2vic_interface_read_vid_impl; + k->update_vid =3D l2vic_interface_update_vid_impl; + k->clear_interrupt =3D l2vic_interface_clear_interrupt_impl; +} + +static void l2vic_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + + dc->vmsd =3D &vmstate_l2vic; + rc->phases.hold =3D l2vic_reset_hold; +} + +static const TypeInfo l2vic_interface_info =3D { + .name =3D TYPE_HEX_L2VIC_INTERFACE, + .parent =3D TYPE_INTERFACE, + .class_size =3D sizeof(HexL2VicInterfaceClass), + .class_init =3D l2vic_interface_class_init, +}; + +static const TypeInfo l2vic_info =3D { + .name =3D TYPE_HEX_L2VIC, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(HexL2VICState), + .instance_init =3D l2vic_init, + .class_init =3D l2vic_class_init, + .interfaces =3D (InterfaceInfo[]) { + { TYPE_HEX_L2VIC_INTERFACE }, + { } + }, +}; + +static const TypeInfo l2vic_types[] =3D { + l2vic_interface_info, + l2vic_info, +}; + +DEFINE_TYPES(l2vic_types) diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index 12d27ce1381..75cae450299 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -65,6 +65,8 @@ static const Property hexagon_cpu_properties[] =3D { DEFINE_PROP_LINK("tlb", HexagonCPU, tlb, TYPE_HEXAGON_TLB, HexagonTLBState *), DEFINE_PROP_UINT32("exec-start-addr", HexagonCPU, boot_addr, 0xfffffff= f), + DEFINE_PROP_LINK("l2vic", HexagonCPU, l2vic, + TYPE_HEX_L2VIC_INTERFACE, HexL2VicInterface *), DEFINE_PROP_LINK("global-regs", HexagonCPU, globalregs, TYPE_HEXAGON_GLOBALREG, HexagonGlobalRegState *), DEFINE_PROP_UINT32("htid", HexagonCPU, htid, 0), diff --git a/target/hexagon/op_helper.c b/target/hexagon/op_helper.c index 3ce223caba3..8fb3d43c33b 100644 --- a/target/hexagon/op_helper.c +++ b/target/hexagon/op_helper.c @@ -40,6 +40,7 @@ #include "hw/hexagon/hexagon_globalreg.h" #include "hex_mmu.h" #include "hw/hexagon/hexagon_tlb.h" +#include "hw/intc/hex-l2vic.h" #include "hex_interrupts.h" #include "hexswi.h" #endif @@ -1564,7 +1565,20 @@ void HELPER(raise_stack_overflow)(CPUHexagonState *e= nv, uint32_t slot, =20 void HELPER(ciad)(CPUHexagonState *env, uint32_t mask) { - g_assert_not_reached(); + uint32_t ipendad; + uint32_t iad; + HexagonCPU *cpu; + + BQL_LOCK_GUARD(); + cpu =3D env_archcpu(env); + ipendad =3D hexagon_globalreg_read(cpu->globalregs, HEX_SREG_IPENDAD, + env->threadId); + iad =3D fGET_FIELD(ipendad, IPENDAD_IAD); + fSET_FIELD(ipendad, IPENDAD_IAD, iad & ~(mask)); + hexagon_globalreg_write(cpu->globalregs, HEX_SREG_IPENDAD, + ipendad, env->threadId); + l2vic_clear_interrupt(cpu->l2vic); + hex_interrupt_update(env); } =20 void HELPER(siad)(CPUHexagonState *env, uint32_t mask) diff --git a/hw/hexagon/Kconfig b/hw/hexagon/Kconfig index 121c548bbb9..c75090c44a1 100644 --- a/hw/hexagon/Kconfig +++ b/hw/hexagon/Kconfig @@ -3,6 +3,7 @@ config HEX_DSP default y depends on HEXAGON select CPU_CLUSTER + select HEX_L2VIC =20 config HEX_VIRT bool diff --git a/hw/intc/Kconfig b/hw/intc/Kconfig index 636d00b7e88..097de4efc5d 100644 --- a/hw/intc/Kconfig +++ b/hw/intc/Kconfig @@ -8,6 +8,9 @@ config I8259 config PL190 bool =20 +config HEX_L2VIC + bool + config IOAPIC bool select I8259 diff --git a/hw/intc/meson.build b/hw/intc/meson.build index 377de78bb41..a1401cb5218 100644 --- a/hw/intc/meson.build +++ b/hw/intc/meson.build @@ -74,6 +74,8 @@ specific_ss.add(when: 'CONFIG_PSERIES', if_true: files('x= ics_spapr.c', 'spapr_xi specific_ss.add(when: 'CONFIG_XIVE', if_true: files('xive.c')) specific_ss.add(when: ['CONFIG_KVM', 'CONFIG_XIVE'], if_true: files('spapr_xive_kvm.c')) + +specific_ss.add(when: 'CONFIG_HEX_L2VIC', if_true: files('hex-l2vic.c')) specific_ss.add(when: 'CONFIG_M68K_IRQC', if_true: files('m68k_irqc.c')) specific_ss.add(when: 'CONFIG_LOONGSON_IPI_COMMON', if_true: files('loongs= on_ipi_common.c')) specific_ss.add(when: 'CONFIG_LOONGSON_IPI', if_true: files('loongson_ipi.= c')) diff --git a/hw/intc/trace-events b/hw/intc/trace-events index e7d6c304487..7512c6e6004 100644 --- a/hw/intc/trace-events +++ b/hw/intc/trace-events @@ -337,6 +337,10 @@ sh_intc_register(const char *s, int id, unsigned short= v, int c, int m) "%s %u - sh_intc_read(unsigned size, uint64_t offset, unsigned long val) "size %u 0= x%" PRIx64 " -> 0x%lx" sh_intc_write(unsigned size, uint64_t offset, unsigned long val) "size %u = 0x%" PRIx64 " <- 0x%lx" sh_intc_set(int id, int enable) "setting interrupt group %d to %d" +# hex-l2vic.c +hex_l2vic_reg_write(unsigned int addr, uint32_t value) "addr: 0x%03x value= : 0x%08"PRIx32 +hex_l2vic_reg_read(unsigned int addr, uint32_t value) "addr: 0x%03x value:= 0x%08"PRIx32 +hex_l2vic_delivered(int irq, int vid) "l2vic: delivered %d (vid %d)" =20 # loongson_ipi.c loongson_ipi_read(unsigned size, uint64_t addr, uint64_t val) "size: %u ad= dr: 0x%"PRIx64 "val: 0x%"PRIx64 --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549403; cv=none; d=zohomail.com; s=zohoarc; b=J3Si1YP2vtqQHFjUYhH2UTZ36fzefvVh1xp4w8GLjI/oW9qerzmTd+8tlmNuKuyXJ35ZVy4IAfE8RLTFDkrDJstwg3Gj4ZX/TV+fvXFW/tUQ8GGKR6lOq3JZGUFENdCbahJviQt6B3mWWkTUJZpU1LWueg7aaRcQxTtUh8Q/Pbw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549403; 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=2TDWanm7s5saDWID0dlBmKuXPvzhlMSOUqamjpo0QYE=; b=VTwLityyOji7ZEXCD1ojET86829Webodm464R4NbuA07n3bFpwZB3sGT3vtMSgmVclDvXuukG5Ga5o5M/tt9UrO4xdMLTHlg2f2O/we3M1RIlPwH6rsljJIzflYLfgnq/086pXNtt9tUhyvAiUEd7FUQ2a6pTzYZl6XEBrkcrMY= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17865494030071012.0410100669067; Wed, 12 Aug 2026 08:43:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6s-0004UH-R7; Wed, 12 Aug 2026 11:43:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6Y-0004LC-MH for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:59 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6V-0000FY-6Z for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:58 -0400 Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDcsTb3654846 for ; Wed, 12 Aug 2026 15:42:52 GMT Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0pmysfb9-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:52 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cbee8d434b8so13931a12.0 for ; Wed, 12 Aug 2026 08:42:52 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= qcppdkim1; bh=2TDWanm7s5saDWID0dlBmKuXPvzhlMSOUqamjpo0QYE=; b=bs DckON7bSfbO85/gOsmdgeOEZHnJoDs+hoKMeAvq545kRtdazr6SH9ChEWTE3Ungn QN9Fgk4Vhd5CMaame063EvXrFWETBGr5hQEi4BoTasstrL3s/XURvulbYdc0mZSh T+C0O1s9TDyvZpdVhfdumEjWorPN2SNbCifY29eHWD7L4VgX3kgQ55IXHvbMWTii jIg8FVZcDRBDHUZ3hbCSJYmgevMqT4ggcRnLYUZERkOJAqaoIS/L248xazgqXAw/ ONdQt0bEPudDazFZUP2o9qri5BBLfy393v6JDQFtVAadnHL2ep9uNDxsLb+vOS4K TPIiJZRgoYFz562o0hMA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549372; x=1787154172; darn=nongnu.org; h=content-transfer-encoding:content-type:content-type:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=2TDWanm7s5saDWID0dlBmKuXPvzhlMSOUqamjpo0QYE=; b=H+XLO9LHUYvwR8XSg+lg1b51idN3Olt+thV9JQOP3Fi7+C1n/3vfxtSOUbA+pGYR/h h5MR++fB41ZhpXKgcoFhqsxWN/vFDOXGGZm+udRlbRiL05XqWug6nUhltNTPNEYoiZ6M 9QoEXZ3wj8Fch6m8uC+7y2mZjlvTPC+i3FrupEhM4U58O1xcAe+WC+MHQw7WaNbMO9oV hYNSxfGR4KF82G6HSyXrwFWoU9YUnfQDrZC0VHYMqFUq2C54jOKaSYinDAsaENV4vgFZ sGf9Nct3mhrwyGYRF8mvrmjVlXAkV4jAVneBpzJDYZ5Idv77YEwy2xPHi07wNczfObcI GWkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549372; x=1787154172; h=content-transfer-encoding:content-type:content-type: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 :content-type; bh=2TDWanm7s5saDWID0dlBmKuXPvzhlMSOUqamjpo0QYE=; b=d7Xbq0D3QgBcJIVEOqsaAy9xefQveb7vjmsyID+IZoCwvyxmEli0FGukqGTY77heTh +u++g93vtRevx1qnVlP6xTgXytqze9pd7Et1zCAmfXVejW7UlD6OFJPJbP4StPCLWjR9 P9XehKu/eocLEbH9z7Utpf5sts6wl08roxWE9TN2ps+jAw8+uoQYzZ0ct8+1zVKhA0bM IvsBT+xVKzFqbg7SgFujNpQK2C0Co9xFM6Q41db66YwJC5BOXAwovCZNUHBK1zRb4Y7t 2kRiNcQ7z0xvc3OhED4V5aAMjMxhWo6PQuXm4lySUBVAOYpEiK8Wn1YRKuLcektZdOyz lvsg== X-Gm-Message-State: AOJu0YzTdcelVETQqat6HURjR0bB0Z/VIjvGD/tNXZJA8Ka99s5Z9dyM /NiDimiDeRkPt0/mhRnsEeqbZ9R6yQfA1Ra4Ukc8BEHriFHkoQA5YIDLtNZvBnacy6CxweDvjZm 9IDUaMB9IgSeq9YvfeZWb/uJeiQ2arKhK78kZpsMxJ9e2K44wQke8osbecIBSUztO2Q== X-Gm-Gg: AR+sD130q+wL2D6y9Sg7RZCnQz7g8RR0LPuhHLT/PXZM1k7D33+pECzRuwVSVAOFGc4 5tPitXLr3BvuI/IaINQtsWZoKWWypuiP2dUvkZ/TPT5wWAk/V53JYE5pwoh2TaTgYTx8JdVpr2Z pxxnpK0fefZd5jwtI/+eS/hMlnNbcN3BoNU9/aJiiGf6AyThGuj2dvtvlyzW4T3Wm7S2AVIoMLi tkfo0SU0tJ1goSzaMXz5QGWOdNNfEyGSO0tztUDd70JinkAvKAYaYBZ1AxP5V+mhEhD0CT63yKi bZR/o56yqESiK0GQUlluJJP14JUqbJhpLb9A0+a+GcyoOM08+TAeMW1ftFumTbzBdDIUg9jela7 8glJWxGt8oS0LOGaVYMdvkBaa6nQr2Evvu2QYxMh3Xhl6Ual/ X-Received: by 2002:a05:6a21:3987:b0:3cb:b6b0:1b83 with SMTP id adf61e73a8af0-3cc53129aeemr115554637.9.1786549371472; Wed, 12 Aug 2026 08:42:51 -0700 (PDT) X-Received: by 2002:a05:6a21:3987:b0:3cb:b6b0:1b83 with SMTP id adf61e73a8af0-3cc53129aeemr115443637.9.1786549370899; Wed, 12 Aug 2026 08:42:50 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PULL v2 08/41] hw/hexagon: extract get_reg_value/set_reg_value stubs in globalreg Date: Wed, 12 Aug 2026 08:41:47 -0700 Message-Id: <20260812154220.1029828-9-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXzBX6SLP1FqXy 0V0EwGEXYoRResNcr9cYT/v61gYKL7Akk4lUcVrBPhwc1m4FgCP1WyF3s/8VigbzLiO//L7PouT pjupxPHtyeZ0m+KDbpGCR2ynHhr0rnM= X-Proofpoint-ORIG-GUID: ZyBYnoTIQE5QnjErMFEeTnhcy8RLw1lt X-Authority-Analysis: v=2.4 cv=C/fZDwP+ c=1 sm=1 tr=0 ts=6a7c947c cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=9smrWREWR_s8Awy1JTMA:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-GUID: ZyBYnoTIQE5QnjErMFEeTnhcy8RLw1lt X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX/mUWZoAmCuN7 Vc6WHWF+Xm+jbclwwmeHt10YoS6WFRx2td3KtKcy0KGqnthZu9SgMxCOYJUNfJhXNeVJeJE8qIL hwrK5KOHAP7vvjltQw38pq/EV5vZvzcGdRraNGmQ5WH/Ii3lzsHgn/XpjwsJcQS8180/OYnnkM7 6qEydJp+s2TnOoiMoNIOwKLANIOx2aCtzagMR+iND/4oFmR73z6B6YQrY95vU99bC5qr3Rkh8T/ fAlhu5CqWL+LC6HIOi/rPcOotnqf457FwWDc/2Zn7IqsxAZx1mm8Lug1WyAmpO3CNtLTbPx5LCm BZNJkFo6C3seU9i09WBBF7NsTtf/jwpLsvuwCl5YXWgV5ueyH9mMTqoLx56Vs8glqlD3sg5xEIg lcrc8xOcqIQ+W8ScMostJkMOxoVWwQ45wz3qohNzTTKG9hgCwJdFmpVFOaq4/9teMVLvbgU72fZ tpv/KC8WeLmQY2n7AFg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 clxscore=1015 phishscore=0 spamscore=0 malwarescore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549403695158500 Content-Type: text/plain; charset="utf-8" Route the globalreg read/write accessors through new get_reg_value()/set_reg_value() helpers instead of touching s->regs[reg] directly. This will be exploited by a subsequent patch that redirects VID/VID1 accesses to the L2VIC. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-9-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- hw/hexagon/hexagon_globalreg.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/hw/hexagon/hexagon_globalreg.c b/hw/hexagon/hexagon_globalreg.c index b5e5913507e..105475219ab 100644 --- a/hw/hexagon/hexagon_globalreg.c +++ b/hw/hexagon/hexagon_globalreg.c @@ -135,6 +135,17 @@ static inline uint32_t apply_write_mask(uint32_t new_v= al, uint32_t cur_val, return new_val; } =20 +static uint32_t get_reg_value(HexagonGlobalRegState *s, uint32_t reg) +{ + return s->regs[reg]; +} + +static void set_reg_value(HexagonGlobalRegState *s, uint32_t reg, + uint32_t value) +{ + s->regs[reg] =3D value; +} + uint32_t hexagon_globalreg_read(HexagonGlobalRegState *s, uint32_t reg, uint32_t htid) { @@ -146,7 +157,7 @@ uint32_t hexagon_globalreg_read(HexagonGlobalRegState *= s, uint32_t reg, g_assert(reg < NUM_SREGS); g_assert(reg >=3D HEX_SREG_GLB_START); =20 - value =3D s->regs[reg]; + value =3D get_reg_value(s, reg); =20 trace_hexagon_globalreg_read(htid, get_sreg_name(reg), value); return value; @@ -160,7 +171,7 @@ void hexagon_globalreg_write(HexagonGlobalRegState *s, = uint32_t reg, } g_assert(reg < NUM_SREGS); g_assert(reg >=3D HEX_SREG_GLB_START); - s->regs[reg] =3D value; + set_reg_value(s, reg, value); trace_hexagon_globalreg_write(htid, get_sreg_name(reg), value); } =20 @@ -168,6 +179,7 @@ uint32_t hexagon_globalreg_masked_value(HexagonGlobalRe= gState *s, uint32_t reg, uint32_t value) { uint32_t reg_mask; + uint32_t cur_val; =20 if (!s) { return value; @@ -175,9 +187,10 @@ uint32_t hexagon_globalreg_masked_value(HexagonGlobalR= egState *s, uint32_t reg, g_assert(reg < NUM_SREGS); g_assert(reg >=3D HEX_SREG_GLB_START); reg_mask =3D global_sreg_immut_masks[reg]; + cur_val =3D get_reg_value(s, reg); return reg_mask =3D=3D IMMUTABLE ? - s->regs[reg] : - apply_write_mask(value, s->regs[reg], reg_mask); + cur_val : + apply_write_mask(value, cur_val, reg_mask); } =20 void hexagon_globalreg_write_masked(HexagonGlobalRegState *s, uint32_t reg, @@ -186,7 +199,7 @@ void hexagon_globalreg_write_masked(HexagonGlobalRegSta= te *s, uint32_t reg, if (!s) { return; } - s->regs[reg] =3D hexagon_globalreg_masked_value(s, reg, value); + set_reg_value(s, reg, hexagon_globalreg_masked_value(s, reg, value)); } =20 uint64_t hexagon_globalreg_get_pcycle_base(HexagonGlobalRegState *s) --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549732; cv=none; d=zohomail.com; s=zohoarc; b=eJxM+JD4Gh7Y6vPQM+qICcExdjP834ulxuQ9G27UrxM/OZb+NTfJE+jJe8zfxgbiHtFnXfmdJ8COoh8NRr2GWwurkO5zVUjP34X01Cq7z2sYzzbRWsy088e+9bjiDAddZQAcBAbpgdHt8AMkyvv5aQDalLwTduCsEOvRh6HBSvo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549732; 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=iNikykLuy+z8guVWREYyJ8wmsJ1dshlTp/g2XaGHHQ0=; b=j8SmO8kf/yEA7s8f04u84gBNnlWwrw9c0egtNliL7HsJHakW0K2viP3KT3uWo5d72Us9T53W9T684kyUP3v/+rDkjrNm1fcbCj9QpngNKVT7mwwECoSXX8i54AJyQofWa8zDKK9MWb+rOB9BZ7rbW8D9vysmXbum8oec6dW12XQ= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549732466445.7326781926864; Wed, 12 Aug 2026 08:48:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6v-0004cr-44; Wed, 12 Aug 2026 11:43:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6Z-0004LW-Av for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:00 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6V-0000Fm-RJ for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:59 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbmp83971647 for ; Wed, 12 Aug 2026 15:42:54 GMT Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0jgrjj8f-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:53 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-ca6bd8a190cso1472598a12.0 for ; Wed, 12 Aug 2026 08:42:53 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= qcppdkim1; bh=iNikykLuy+z8guVWREYyJ8wmsJ1dshlTp/g2XaGHHQ0=; b=Js PlIArr9VPGur7F5rQz2lCrm649tDeU6SZMegsjlxDf5yudGo1F3o/2uThML267Ix 8nWcFl94A0J2q3Zfj2zCzlnaxaFPZtlJGmFBOoAd3xfRTQsIoC3kIV6Xjxs73gW6 GB7L5A79rGAKIHnvdEYzWpYoE0wMhchxT3hI/30CyoxQ8Yjltxjzwet5vMlx6A2D e+inuwptA805D5AhYFZvOmR0qPmHai8iaztLZ6bWQtbrpJ6ms71RaPjkGGfeNAxm o1q7NQqNdM4kjYfcHzth7wp6L1AWnNkR+XEbxMUyesDfyVhcWJRC4Yzn1Uid5JGh NiLB9uuj/3Zx7GAkpBZw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549373; x=1787154173; darn=nongnu.org; h=content-transfer-encoding:content-type:content-type:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=iNikykLuy+z8guVWREYyJ8wmsJ1dshlTp/g2XaGHHQ0=; b=CeL/Vl/WJj9afr1o5I/7DbQAXc+n115lcTEuKXSZTqb8k+cyfxxaXilEpnNwzdTUO7 x6VCk8lTDEDHblEjzsv4HPt3JefxIvEPA3/nIk+0uA5/bW/vEy3ImcFyoUppUAhG8vLD 4EjDfc0cOnRCcDvIs+7aBJpF6fcOdO6EUugT18NtgGMI58afpsHyEjKsbFI3fUJOy8FT vWfF6EBR5uNQI0xo+6YP8otypMOC+NTAkmj5iFak8gkwip+tb/bb4So4Qjksew/dkDsU 1i3KyY2LIqaqdk1r4PzcGAQbkqHHF6Rc4Yi12zbntFo/Dkt+AX61ldi3ss2BLmgfH4eZ 46Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549373; x=1787154173; h=content-transfer-encoding:content-type:content-type: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 :content-type; bh=iNikykLuy+z8guVWREYyJ8wmsJ1dshlTp/g2XaGHHQ0=; b=FteRGq44mhCe7FJYJjOdy46wKn++Uqg6BOqDFqV/0Kv1HUvk0uca0eks+JWWtjCpCV EVt5AFKV3nUjh3PNyDozLl8h0eD2vhePCMxlB52D17UelAHEnac2H8B8zMJ5cG6Ndmjy GIlxi8uMZD25y8r1IxzEbk4kl15tR5BeXk2ZzHsWl69k4ows3E+teZkKwo4zgJhu0oy0 oz1XVg40Qx5JRXIDknHdiP1wM3vDLujpH2RPsSakJTzs93Dzk38MLGagXCKl0kwp33ZN 6S1PweDUKA1hBRZCiQjMgLZiyJb2GH5KUU+JHE9nrIsWZOoaYVNOEE9tOVax1MSsixhG 2XFA== X-Gm-Message-State: AOJu0YzvmfyaNQNqO+KFykpRydIHKpVUZSfidUTqQqF3QBnAi7v54uW+ NkUuR4yN1Qvsgi2Dq/pygQEC2RXRdeGCfvV1lNolR92L3H7R1cY/CCMCATFAAS8ypvjRUA8GN6s zD+xIC/CMOEHKD5L95lzGAfkhbS8H9ONKB2nJmeSmhAQ30A7BFtpo64fvzB/10JjOwA== X-Gm-Gg: AR+sD13Wp4C3gtMF7KUPdyLDWGJD8j6ZTMys90hmF5yjYn7Uu40QDPOgn1hDnno/bQS IFW2h4dD+rMIUMRTJJ2oVGYfNJf+6MLs8OILrUk4cyffifyM7VAj0P4o/vMwa95mA8M99L5TpFn tNKK1hVOduA4l437mRnTMPvbUJzj6qLABhEcRwMeStAywdJhA31m1X03eWUzlJfbjZN/6yORH0/ grdfY/kKMhWTdIKtp8vfHMJEIpozmmpTF6i/ytmY945fYOG1Ym+n46jSOd/xulXAYeiU5ixXBgD 1qOR0la1N8Gbw6qaTNsJ4HPIUQAM1ZJZ7OX9+XESQY9ULcwKG30Wbvl7jqMLYNCIXWftu0oupKP ROCAi2w+NKdjgJ5eL8VC9ZFRKnM2g6HIDDPCRE6qY0wANspnM X-Received: by 2002:a05:6a21:3948:b0:3bf:7081:9356 with SMTP id adf61e73a8af0-3cc3f72f367mr6927062637.17.1786549372704; Wed, 12 Aug 2026 08:42:52 -0700 (PDT) X-Received: by 2002:a05:6a21:3948:b0:3bf:7081:9356 with SMTP id adf61e73a8af0-3cc3f72f367mr6926989637.17.1786549372182; Wed, 12 Aug 2026 08:42:52 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PULL v2 09/41] hw/hexagon: connect l2vic device Date: Wed, 12 Aug 2026 08:41:48 -0700 Message-Id: <20260812154220.1029828-10-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXwE8XEH/auA1Z l8LH9keCF2062H5azbI1veSW17wy5GpdIeKDFXKxWKYj5npYlKddiv3QaxyshqRa17YRheFbfgp N2Vo08Nw7D57LqcpOPSl48RplLXCqxcshMRUWH+ERqRITvNQMk2IttzWv83ww5NkPrWhDdpiScv VngaNpdv/NVNbSnRaJ241GzlmB/8ZXjrEdPc/P6+HsuwNSvwTXmnjYdtQeD6pxgCq1sQ8ovyH7Y biZB149vdzj4tpQiB0kmX8F64Md99ibC1aR4UreOjcUBFredFqlyfg5lqBzs0VscWLunCrJJDUj n6U8b9Nfgw3k8/NIzNxMEuMiCjDxH5pNLymwLugF9WrokOlQDOJtVJ1mbc6iXuwk4Jlghq15hD5 jn5RU5lXLY/b69MIZcBCm5otTRyp964RxduN9gRLVL3Wf0UKnoLHUESYOCuqEzagUQltjfEhva5 FtX5VnTOEgJzXrC2qzA== X-Proofpoint-ORIG-GUID: tVSmb2kCerd8gTWWCOk8yMMyQ2RBjYRB X-Authority-Analysis: v=2.4 cv=TNJ1jVla c=1 sm=1 tr=0 ts=6a7c947d cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=dwkSCBXVzhE_Z7DFN7MA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-GUID: tVSmb2kCerd8gTWWCOk8yMMyQ2RBjYRB X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX/TAnmp5WGHUx JQWGFGC7ECBY89vaxJtbasl9AtXa0AInSfyKdA2v2fPjDv2nDJSpARRbJ9apgX0OyLzZVpFsjSK hz/KC+f6j6mzNoT2uTvpgIdB8cdai/Y= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 phishscore=0 impostorscore=0 adultscore=0 suspectscore=0 bulkscore=0 spamscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549733947158500 Content-Type: text/plain; charset="utf-8" Add the l2vic to the shared hex-subsys so both machine models pick it up. Map its register banks, wire the interrupt lines to CPU[0] and link each vCPU, globalregs. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-10-brian.ca= in@oss.qualcomm.com Signed-off-by: Brian Cain --- include/hw/hexagon/hex-subsys.h | 5 ++-- include/hw/hexagon/hexagon.h | 1 + include/hw/hexagon/hexagon_globalreg.h | 4 +++ hw/hexagon/hex-subsys.c | 38 +++++++++++++++++++++++++- hw/hexagon/hexagon_dsp.c | 2 +- hw/hexagon/hexagon_globalreg.c | 25 +++++++++++++++++ hw/hexagon/virt.c | 2 +- 7 files changed, 72 insertions(+), 5 deletions(-) diff --git a/include/hw/hexagon/hex-subsys.h b/include/hw/hexagon/hex-subsy= s.h index 6d0d5e1da86..5792f7b5af3 100644 --- a/include/hw/hexagon/hex-subsys.h +++ b/include/hw/hexagon/hex-subsys.h @@ -18,7 +18,7 @@ void hex_subsys_create(HexagonCommonMachineState *hms, /* * Parent a CPU into the subsystem's cluster and wire its links. Call for * every CPU before hex_subsys_realize_cluster(), then realize each CPU wi= th - * hex_subsys_realize_cpu(). + * hex_subsys_realize_cpu(). CPU[0] receives the L2VIC outputs. */ void hex_subsys_add_cpu(HexagonCommonMachineState *hms, DeviceState *cpu); =20 @@ -26,6 +26,7 @@ void hex_subsys_add_cpu(HexagonCommonMachineState *hms, D= eviceState *cpu); void hex_subsys_realize_cluster(HexagonCommonMachineState *hms); =20 /* Realize a CPU previously parented via hex_subsys_add_cpu(). */ -void hex_subsys_realize_cpu(HexagonCommonMachineState *hms, DeviceState *c= pu); +void hex_subsys_realize_cpu(HexagonCommonMachineState *hms, DeviceState *c= pu, + bool boot_cpu); =20 #endif /* HW_HEXAGON_HEX_SUBSYS_H */ diff --git a/include/hw/hexagon/hexagon.h b/include/hw/hexagon/hexagon.h index 31669a829f8..ec1578807d8 100644 --- a/include/hw/hexagon/hexagon.h +++ b/include/hw/hexagon/hexagon.h @@ -158,6 +158,7 @@ struct HexagonCommonMachineState { MemoryRegion cfgtable_rom; MemoryRegion vtcm; DeviceState *cluster; + DeviceState *l2vic; DeviceState *glob_regs; DeviceState *tlb; }; diff --git a/include/hw/hexagon/hexagon_globalreg.h b/include/hw/hexagon/he= xagon_globalreg.h index 950099808fd..397dc6854c9 100644 --- a/include/hw/hexagon/hexagon_globalreg.h +++ b/include/hw/hexagon/hexagon_globalreg.h @@ -10,6 +10,7 @@ =20 #include "hw/core/qdev.h" #include "hw/core/sysbus.h" +#include "hw/intc/hex-l2vic.h" #include "qom/object.h" #include "target/hexagon/cpu.h" =20 @@ -22,6 +23,9 @@ struct HexagonGlobalRegState { /* Array of system registers */ uint32_t regs[NUM_SREGS]; =20 + /* L2VIC interface used to back the VID/VID1 registers */ + HexL2VicInterface *l2vic; + /* Global performance cycle counter base */ uint64_t g_pcycle_base; =20 diff --git a/hw/hexagon/hex-subsys.c b/hw/hexagon/hex-subsys.c index 6fad6fe0a4d..25c028f6579 100644 --- a/hw/hexagon/hex-subsys.c +++ b/hw/hexagon/hex-subsys.c @@ -10,6 +10,7 @@ #include "hw/hexagon/hex-subsys.h" #include "hw/hexagon/hexagon_globalreg.h" #include "hw/hexagon/hexagon_tlb.h" +#include "hw/intc/hex-l2vic.h" #include "hw/cpu/cluster.h" #include "hw/core/loader.h" #include "hw/core/qdev-properties.h" @@ -17,6 +18,31 @@ #include "hw/core/sysbus.h" #include "system/address-spaces.h" =20 +#define HEX_L2VIC_CPU_IRQS 8 + +static DeviceState *l2vic_create(HexagonCommonMachineState *hms, + const struct hexagon_machine_config *m_cf= g) +{ + DeviceState *l2vic =3D qdev_new(TYPE_HEX_L2VIC); + + object_property_add_child(OBJECT(hms), "l2vic", OBJECT(l2vic)); + sysbus_realize_and_unref(SYS_BUS_DEVICE(l2vic), &error_fatal); + sysbus_mmio_map(SYS_BUS_DEVICE(l2vic), 0, m_cfg->l2vic_base); + sysbus_mmio_map(SYS_BUS_DEVICE(l2vic), 1, + m_cfg->cfgtable.fastl2vic_base << 16); + + return l2vic; +} + +static void l2vic_connect_cpu(DeviceState *l2vic, DeviceState *cpu) +{ + int i; + + for (i =3D 0; i < HEX_L2VIC_CPU_IRQS; i++) { + sysbus_connect_irq(SYS_BUS_DEVICE(l2vic), i, qdev_get_gpio_in(cpu,= i)); + } +} + static DeviceState *globalreg_create(HexagonCommonMachineState *hms, const struct hexagon_machine_config *= m_cfg, Rev_t rev) @@ -26,6 +52,8 @@ static DeviceState *globalreg_create(HexagonCommonMachine= State *hms, object_property_add_child(OBJECT(hms), "global-regs", OBJECT(glob_regs= )); qdev_prop_set_uint64(glob_regs, "config-table-addr", m_cfg->cfgbase); qdev_prop_set_uint32(glob_regs, "dsp-rev", rev); + object_property_set_link(OBJECT(glob_regs), "l2vic", OBJECT(hms->l2vic= ), + &error_fatal); sysbus_realize_and_unref(SYS_BUS_DEVICE(glob_regs), &error_fatal); =20 return glob_regs; @@ -81,6 +109,7 @@ void hex_subsys_create(HexagonCommonMachineState *hms, } =20 hms->cluster =3D cluster_create(hms); + hms->l2vic =3D l2vic_create(hms, m_cfg); hms->glob_regs =3D globalreg_create(hms, m_cfg, rev); hms->tlb =3D tlb_create(hms, m_cfg); } @@ -92,6 +121,8 @@ void hex_subsys_add_cpu(HexagonCommonMachineState *hms, = DeviceState *cpu) OBJECT(hms->glob_regs), &error_fatal); object_property_set_link(OBJECT(cpu), "tlb", OBJECT(hms->tlb), &error_fatal); + object_property_set_link(OBJECT(cpu), "l2vic", OBJECT(hms->l2vic), + &error_fatal); } =20 void hex_subsys_realize_cluster(HexagonCommonMachineState *hms) @@ -105,7 +136,12 @@ void hex_subsys_realize_cluster(HexagonCommonMachineSt= ate *hms) qdev_realize_and_unref(hms->cluster, NULL, &error_fatal); } =20 -void hex_subsys_realize_cpu(HexagonCommonMachineState *hms, DeviceState *c= pu) +void hex_subsys_realize_cpu(HexagonCommonMachineState *hms, DeviceState *c= pu, + bool boot_cpu) { qdev_realize_and_unref(cpu, NULL, &error_fatal); + + if (boot_cpu) { + l2vic_connect_cpu(hms->l2vic, cpu); + } } diff --git a/hw/hexagon/hexagon_dsp.c b/hw/hexagon/hexagon_dsp.c index 1db5d681665..20306c28e72 100644 --- a/hw/hexagon/hexagon_dsp.c +++ b/hw/hexagon/hexagon_dsp.c @@ -139,7 +139,7 @@ static void hexagon_common_init(MachineState *machine, = Rev_t rev, hex_subsys_realize_cluster(hms); =20 for (int i =3D 0; i < machine->smp.cpus; i++) { - hex_subsys_realize_cpu(hms, DEVICE(cpus[i])); + hex_subsys_realize_cpu(hms, DEVICE(cpus[i]), (i =3D=3D 0)); } } =20 diff --git a/hw/hexagon/hexagon_globalreg.c b/hw/hexagon/hexagon_globalreg.c index 105475219ab..285cb48c44b 100644 --- a/hw/hexagon/hexagon_globalreg.c +++ b/hw/hexagon/hexagon_globalreg.c @@ -11,6 +11,7 @@ #include "hw/core/qdev-properties.h" #include "hw/core/sysbus.h" #include "hw/core/resettable.h" +#include "hw/intc/hex-l2vic.h" #include "migration/vmstate.h" #include "qom/object.h" #include "target/hexagon/cpu.h" @@ -135,8 +136,16 @@ static inline uint32_t apply_write_mask(uint32_t new_v= al, uint32_t cur_val, return new_val; } =20 +static inline bool is_vid_reg(uint32_t reg) +{ + return reg =3D=3D HEX_SREG_VID || reg =3D=3D HEX_SREG_VID1; +} + static uint32_t get_reg_value(HexagonGlobalRegState *s, uint32_t reg) { + if (is_vid_reg(reg)) { + return l2vic_read_vid(s->l2vic, reg =3D=3D HEX_SREG_VID ? 0 : 1); + } return s->regs[reg]; } =20 @@ -144,6 +153,9 @@ static void set_reg_value(HexagonGlobalRegState *s, uin= t32_t reg, uint32_t value) { s->regs[reg] =3D value; + if (is_vid_reg(reg)) { + l2vic_update_vid(s->l2vic, reg =3D=3D HEX_SREG_VID ? 0 : 1, value); + } } =20 uint32_t hexagon_globalreg_read(HexagonGlobalRegState *s, uint32_t reg, @@ -269,6 +281,16 @@ static void hexagon_globalreg_reset_hold(Object *obj, = ResetType type) do_hexagon_globalreg_reset(s); } =20 +static void hexagon_globalreg_realize(DeviceState *dev, Error **errp) +{ + HexagonGlobalRegState *s =3D HEXAGON_GLOBALREG(dev); + + if (!s->l2vic) { + error_setg(errp, "hexagon_globalreg: 'l2vic' link property not set= "); + return; + } +} + static const VMStateDescription vmstate_hexagon_globalreg =3D { .name =3D "hexagon_globalreg", .version_id =3D 1, @@ -288,6 +310,8 @@ static const VMStateDescription vmstate_hexagon_globalr= eg =3D { }; =20 static const Property hexagon_globalreg_properties[] =3D { + DEFINE_PROP_LINK("l2vic", HexagonGlobalRegState, l2vic, + TYPE_HEX_L2VIC_INTERFACE, HexL2VicInterface *), DEFINE_PROP_UINT32("boot-evb", HexagonGlobalRegState, boot_evb, 0x0), DEFINE_PROP_UINT64("config-table-addr", HexagonGlobalRegState, config_table_addr, 0xffffffffULL), @@ -308,6 +332,7 @@ static void hexagon_globalreg_class_init(ObjectClass *k= lass, const void *data) ResettableClass *rc =3D RESETTABLE_CLASS(klass); =20 rc->phases.hold =3D hexagon_globalreg_reset_hold; + dc->realize =3D hexagon_globalreg_realize; dc->vmsd =3D &vmstate_hexagon_globalreg; dc->user_creatable =3D false; device_class_set_props(dc, hexagon_globalreg_properties); diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c index dc1d5b6aa24..9a680852c3c 100644 --- a/hw/hexagon/virt.c +++ b/hw/hexagon/virt.c @@ -270,7 +270,7 @@ static void virt_init(MachineState *ms) hex_subsys_realize_cluster(&vms->parent_obj); =20 for (int i =3D 0; i < ms->smp.cpus; i++) { - hex_subsys_realize_cpu(&vms->parent_obj, DEVICE(cpus[i])); + hex_subsys_realize_cpu(&vms->parent_obj, DEVICE(cpus[i]), (i =3D= =3D 0)); } =20 fdt_add_cpu_nodes(vms); --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549730; cv=none; d=zohomail.com; s=zohoarc; b=TSR5gQ+CcHEkuo3p0gHeAdhUCWGH8PYZN40uAR5b2+/WFJa8U6rxog6ItEnTK0y0luGJJbnSqzHz2AZxiUP6DahEqD45LlXq/U4VeW4/zT6luRCWdwSiIJbgt6n8RY4A7ws7ZXu2AB4thstqAowLJ+rVGCS955aCkDJa6iPlgyo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549730; 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=BcRGjPqnpCJA2RaIKm7HtO5E9vmLu6p36g0B7rd/ZWY=; b=NS/R0d05cB08T8Mn+9Lefru6dEw6wKYX9v+wmtz6zUGstSYf3BdbbnjcrXLmF3O6E4yA+kZ5Hkey8OMU8mpAmSouEMf0QjI/iRRvVu8JLaD+XOm4m+QNYAisthzTaumgRVm07nLdix/HmxdZDfxRvlyfpN7MRdj/jEFwxnlzE0w= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549730112125.34792213823573; Wed, 12 Aug 2026 08:48:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6t-0004Zd-Pm; Wed, 12 Aug 2026 11:43:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6a-0004MO-B8 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:02 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6W-0000GN-Nc for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:42:59 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbquf3875558 for ; Wed, 12 Aug 2026 15:42:55 GMT Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hj1jsr9-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:55 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cb7d6ba548eso1232681a12.1 for ; Wed, 12 Aug 2026 08:42:55 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= qcppdkim1; bh=BcRGjPqnpCJA2RaIKm7HtO5E9vmLu6p36g0B7rd/ZWY=; b=h8 uie+iaMtQEB5It85vYxgCjpc5wyCNA5ZA69EBv3F6uQV+CHYN+Q52PKeLPAFAyOR XwgrnjlTdpsKZnO+PYl+sEFyqRWDkWKVt6fVJTJnmXcu+YjC3x/LN2G4jtN/Kvv8 xHqhP6Zhbx5fdjxZdKG74D4QPQTvKYaiOnCG+qMWN1onVXmvMVRIMrQGMK5+g7vj y5x9OCZdgRH3MIszy312c4qngxHKeCGS14iOxunpM6IQ9rFDWCb9HigcshHOHbbl WeXI6BLggAl0fyPaHM6mKIDS7d0gzEiqNddiMwtGTg31hGuY11OoZG4gvP7f+ufP ecfFyHNP1Fx1U+N5G3pw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549374; x=1787154174; darn=nongnu.org; h=content-transfer-encoding:content-type:content-type:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=BcRGjPqnpCJA2RaIKm7HtO5E9vmLu6p36g0B7rd/ZWY=; b=QcO0NkXXxzRXt49Ass/qEj+3WqRajOlA1xk9y6sZK0Kqzqj4uNWU332mFqICVrCcNv XDXmUpu2pbex9OD9/CgEOwOK+ikbWMptLtkHVJ5/UNJ27/Tx/EeiCCdqmVM2Ve6poyB9 Jdhnf2RPlYE011z0RdnMc5IZ6Y43wfd3h7NhPAmFtecAlBI/ankMNTHHx74dYc6p0N2G xj8/oeCUIGmPeB/22zzs7a3jPAf1n0OqA0hEg87HBdCn0ZjlaCiw5TRdxLJf1DSs39rP sEW+mgbq8fYo7pcjx1da4lIwG0lI+lWJvijhVQO32Kv21xF+x4+yl6AHbVREgg+0EO9a Fi5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549374; x=1787154174; h=content-transfer-encoding:content-type:content-type: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 :content-type; bh=BcRGjPqnpCJA2RaIKm7HtO5E9vmLu6p36g0B7rd/ZWY=; b=K0PLUXrFXLv0qMFDqHzJ9YY41OlGGvS380RiKGea1KS/gXqzm43fUFLTYZBL0SgKTl J8mVShqMfQknRGcf8ksPdMjGkKD95klgy/oBtzezJNObOuzElbPV59CKAnCu3xU7bmmE HOIcchXEpEGOkfJL9UKYC1SzDvgxuvDoVuesKY2HzSy5QIOejVzvQbeq3CK47iRBntXp nHQrN7YaJWXVm9/Fh/hfQErjUrfHoXAhce9v+TzDTwKvVxh9GEzwtZFdalv3qccLZgVK Sk9gAzjfFidMevFy52JxM96Iyy+ebWAYmrfKuTm/GBP9TjZxN10QfvUHngCCDAJGyvoE JPuw== X-Gm-Message-State: AOJu0YzDCN1BXCTtIY2QNovm7VBKfQ0oYYD+eRtJT2QcewAfceW6iyfp KnISV9M34EysNgSQkB1DvVlczWr+h9ZJ6WQ5xQmfjbW9iTqWLktdPHTEvta0vmYujlcjAsgaObt qaBiajKLs+hv7FfomnugDEv1IAJxG1UnncRvRR5SeqhU9l1JGF1eEc2N1wDT379mnlw== X-Gm-Gg: AR+sD13zlpud/LA4UwAu+SeP3Kl5oGG4nqxKwfuBzDWs3qWjPXb8BfczoD1QS0L9mOZ 4JqSQXtp9EwxlFwlo6H61zzooqKUCL3D8LhDu0fWKIXNCzJ4amlDs5QTNnxIUz5BY4uYS6DMtaE mpBrR0ndJxQMn0BIul3KpKDX3Wpps/7JHW6j1R/zCIya2Schn/s5ks5QyPHudi0DvF5B/EbxcXp Oy2epmu59ZyQWHup1KGc86HA2DLNJeAgemfxIb6QNyJxOAbeuSpj3lGCdSh0O/ihsHnS0ZdoKjP mB9s5Ce5p2q4dTr0FwO6y8rJErutm5vXsl9QD6QjNp0qqyIfcAV7e5LdJRonhw7X5J4sHoR6AAm fC2Mm1BkDHDUxwQZnQjnCBWtcMxIPvQ677LEofSdJxfXkQ2bj X-Received: by 2002:a05:6a20:918c:b0:3c4:36ef:3dc9 with SMTP id adf61e73a8af0-3cc3f6eb96amr6243822637.17.1786549374315; Wed, 12 Aug 2026 08:42:54 -0700 (PDT) X-Received: by 2002:a05:6a20:918c:b0:3c4:36ef:3dc9 with SMTP id adf61e73a8af0-3cc3f6eb96amr6243768637.17.1786549373791; Wed, 12 Aug 2026 08:42:53 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PULL v2 10/41] hw/hexagon/virt: instantiate virtio-mmio transports Date: Wed, 12 Aug 2026 08:41:49 -0700 Message-Id: <20260812154220.1029828-11-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: UlQLwt9JCA4CIhXQbvLQx67UriVRedyV X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX5V4OtAixLPJw d9aaMkwyOmfhuDHLZLjLzIdRHarvBeNieK5GS8hzclJHRIXUONR2VUGVi4+cpsKT330tarZa0Ya Eyotiu3kKFmWDfc8rUlmBVm7+Kie9d8JEE1C3Bif2qbJHOU3FqlynlL168uKKkqiTLfZTi0cp45 9yWMGdh3Tcn2NCndZkli/egNZVpdDJMQEgpDiCN4JX2DtAI/Dc8xcp3tr9LnXO9mxAdR/M3KMcE wjQNRx/FfzX8+rA8gRauI/0AGGsJO7aqce3C+S+cwm7GGIb7AHji4HBU4GVc5wDMaL7/OXnbM4t JfeB3+8E8n1SCt61DPpiQJ4rCsl03unO+UbUextmV652q6t4nQ3YXMRvFXYcIOewGbZVoWNbnCq MTIB84MJZ9efCj9YCvTEeqpS4WZ7yIOUCekpXeBq9aUcNyyREhAPbPuzfF5Shq16RWrY/ABhuIj y4HPdlARIyRRnCk0Y3g== X-Authority-Analysis: v=2.4 cv=K6ES2SWI c=1 sm=1 tr=0 ts=6a7c947f cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=qfYuoNLC281KTBfHwCsA:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-GUID: UlQLwt9JCA4CIhXQbvLQx67UriVRedyV X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX53BbIFmrXDVp QBGlDnnMwGe/x6+i0yoCnlwtz5E5vvTWxX0NiQgI0felDfRGzI0MteuKdM/x6fzyUnjYwenXZwl V46e/rh57Vv+aItG+GlcuR3AL6W2T7M= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 adultscore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549731456158500 Content-Type: text/plain; charset="utf-8" Add a VIRT_MMIO region and virtio-mmio transports, wired into l2vic. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-11-brian.ca= in@oss.qualcomm.com Signed-off-by: Brian Cain --- include/hw/hexagon/virt.h | 3 +++ hw/hexagon/virt.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/include/hw/hexagon/virt.h b/include/hw/hexagon/virt.h index cf0cd2f8f22..4ca2f1ef859 100644 --- a/include/hw/hexagon/virt.h +++ b/include/hw/hexagon/virt.h @@ -11,6 +11,8 @@ #include "hw/hexagon/hexagon.h" #include "target/hexagon/cpu.h" =20 +#define VIRTIO_DEV_COUNT 8 + struct HexagonVirtMachineState { HexagonCommonMachineState parent_obj; =20 @@ -19,6 +21,7 @@ struct HexagonVirtMachineState { MemoryRegion tcm; MemoryRegion bios; Clock *apb_clk; + DeviceState *virtio_mmio[VIRTIO_DEV_COUNT]; }; =20 void hexagon_load_fdt(const struct HexagonVirtMachineState *vms); diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c index 9a680852c3c..ff0770cfc46 100644 --- a/hw/hexagon/virt.c +++ b/hw/hexagon/virt.c @@ -30,11 +30,19 @@ =20 enum { VIRT_UART0, + VIRT_MMIO, VIRT_FDT, }; =20 +/* + * Virtio IRQs run from VIRTIO_IRQ_BASE to + * VIRTIO_IRQ_BASE + VIRTIO_DEV_COUNT - 1 + */ +static const int VIRTIO_IRQ_BASE =3D 16; + static const MemMapEntry base_memmap[] =3D { [VIRT_UART0] =3D { 0x10000000, 0x00000200 }, + [VIRT_MMIO] =3D { 0x11000000, 0x00001000 }, [VIRT_FDT] =3D { 0x99800000, 0x00400000 }, }; =20 @@ -167,7 +175,25 @@ static void fdt_add_cpu_nodes(const HexagonVirtMachine= State *vms) } } =20 +static void create_virtio_devices(HexagonVirtMachineState *vms) +{ + hwaddr size =3D base_memmap[VIRT_MMIO].size; =20 + for (int i =3D 0; i < VIRTIO_DEV_COUNT; i++) { + int irq =3D VIRTIO_IRQ_BASE + i; + hwaddr base =3D base_memmap[VIRT_MMIO].base + i * size; + DeviceState *dev =3D qdev_new("virtio-mmio"); + SysBusDevice *s =3D SYS_BUS_DEVICE(dev); + + object_property_add_child(OBJECT(MACHINE(vms)), "virtio-mmio[*]", + OBJECT(dev)); + sysbus_realize_and_unref(s, &error_fatal); + sysbus_mmio_map(s, 0, base); + sysbus_connect_irq(s, 0, + qdev_get_gpio_in(vms->parent_obj.l2vic, irq)); + vms->virtio_mmio[i] =3D dev; + } +} =20 void hexagon_load_fdt(const HexagonVirtMachineState *vms) { @@ -246,6 +272,8 @@ static void virt_init(MachineState *ms) =20 fdt_add_hvx(vms, m_cfg); =20 + create_virtio_devices(vms); + g_autofree HexagonCPU **cpus =3D g_new(HexagonCPU *, ms->smp.cpus); =20 for (int i =3D 0; i < ms->smp.cpus; i++) { --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549427; cv=none; d=zohomail.com; s=zohoarc; b=DQg8XPIXZVXVCwD23dP1ZF3e4BCUgvTLLkkQc/e7NVNibwy3no5eXOODfOnleDxCBVpkfj7/2NfGVmG5FmOBAU751RmpZBg6AqFCOXlxwQTgRQp+HlIJOp3Lg9pErnWdc50yVd8A5mNmtR90pXgs/HyHG++b2pJH9uOTjk3VCxw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549427; 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=c3ei3+/hHlU0bMY6tZtgWn0p5b5F3IfPfKvcDB+LhSc=; b=XSmJdwrGcK7FBuO8229Cyuw8epcnVnKFGqNOvirS1dG4jAq0gsZKiwReL2yNRaNxZ4I0aoFWJH9d0xPGvtvtoIArG4jKpTU0VIEbeQGSVkkoezk+V7zo+B7sy8QPA+nGrlFnrBlDn8YjYpc1I0NMLsXbc08a4mQxw9cKHdh5/Vw= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549427672644.801098957451; Wed, 12 Aug 2026 08:43:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6s-0004Vf-VQ; Wed, 12 Aug 2026 11:43:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6a-0004MQ-IX for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:02 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6X-0000Gy-Pn for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:00 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbpGu3641792 for ; Wed, 12 Aug 2026 15:42:57 GMT Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0p3d1p3c-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:56 +0000 (GMT) Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-38e6d253330so8632a91.1 for ; Wed, 12 Aug 2026 08:42:56 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= c3ei3+/hHlU0bMY6tZtgWn0p5b5F3IfPfKvcDB+LhSc=; b=oVFdpc/wNMYHI5wx TQ+IO2nJ3XXro50UNcQ+wlfUymcDRtfkDY6m/lsJaq6GGajq3TjrW3QQuMjQkpno qEjBfv7fv9GSPdXUC/MQuOjfZ1bLOcdqCajRJlvJbTPKM64GwhTpnaFJ3UnDNKde 3JJizgDDp1MgGqXVoNSJUq59niStBIPXNM7Y6Uzyt7ruySZf9m/im/yTyMcoDZg5 Ecpt4hIZoLwl1Y2mQUjaQxGs3G0zfFveL8Di2jJ3AMKArHkWA4llQ8bI5NwZkKwI AnMDl3I8VKDvReNPQX/idx75jtJVGd6KR1vL3AwDwmMZ0EPt0U5OeIC1DjJg3wFW Vy0t7g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549376; x=1787154176; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=c3ei3+/hHlU0bMY6tZtgWn0p5b5F3IfPfKvcDB+LhSc=; b=JAcN+A0d0OPGvP1T14p3VGU6TxsbSAv+hZhLlT22PVnm6S/ExAaXxxBnMxwGHO5AO0 tv5NAntKq92eo05f6XJAUBbxZquJJUJCiAes4aibVzRCRQZgpRw4EPG9aXSeW+9svouo xyUcJZje1Isncf64VSo+3y8d5JSzmZoG38l2Ql+K5yfMZ5j8leOHAqloIz1+FGViqMVi KelCyfIIRKw+hWC7AXUmnCZCfG922okTh2V8lw8a3mJBepp2tLkKvlVRhNk4IC2N6T0N tCGtMoEZ3cj6111XEufN7WWfEpv8VjG8MlTpOX/S7BamEy8uc5sx//5Sh8WDXHN4OYVC vyXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549376; x=1787154176; h=content-transfer-encoding:content-type: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 :content-type; bh=c3ei3+/hHlU0bMY6tZtgWn0p5b5F3IfPfKvcDB+LhSc=; b=eFShQzklM8HcxH7UOE1mvEKyxS5OfSuPA/nRlZM3W9G1gKPAT1uiBGgj+eKfCs/n3v heQclopm0P/RizeAvF5LmsnF9FzGJSfyMs5pl1ZnWKToXzuvJH1IsoyinelB7pSyqu88 jZlN6i4au7Wvw7Dy74qZ8McGU0NqxeyEnC3YadgAKoYf8KiO+091jjbw3UTZ/xoZnzNH lz2ISqjQr2u2TlYya9h8wfD9THVJKz21UJ1SxkUXwtGEN/t+SXTCyHl7VjGk3zSpvOeX eFxUbShEXqi/brNIPVXQq9j+SSNZLU3KUC87HnI9wPlYOHvtp7JY5WqCRVVHZ5/XOcs2 dzhQ== X-Gm-Message-State: AOJu0Yxa7U8C7APIahFkP9UCd6aM1c35JMBXresnofP2d/e+NSBPHQ10 Maba8XziNoyiceKT4l3XdNDlPHMHYXoLvbw5XlwfgV/aH5HYLU4NCaGsmuxBKYiMWOcBZy5J9jq GstyyXO1MHzWKcY970iHu+GCf+PAoLyAnMWG5GNYsim81z/sxzpSc+6Ax5a810SvxnQ== X-Gm-Gg: AR+sD10OS5yBsRrojIUzvEYFSwJHaSdUg5ycOYG4+oVqW5YYPsqewFf/s/T2sKfTIBD Xrjdm2qBmu66LIyc6+TZLldpClxuOGxnLJcd+mWdvNuVlwbpsUHit48WkUgSqzGUtPltG4lydRW BtCxAoKm9SPJkoR1BFhI5qMvZ9StN2RaQdRL9nNBqoXFFwIHhZkheaImpV/0ppbrxgY3+i/qZSU KfgkSFfPFO+louizm8ZPIWT/WdAPZTPF4e0FPOPGIO7kBOFP4vJGPly1Xwy57VYQoUcuWgPqcfb LVUmoH7/A+1SinzFyzVyOYzBqQ2ziiwp0qKd7B4tt63r3ObHmXOPA41ZdnCQ/HcGjvT2PKufn+/ xk7AtjY30IWQpsIdZud1GwgmOtbbu5QhAWsbQpdN/B56ImcKY X-Received: by 2002:a17:90b:1d02:b0:36b:de66:92c3 with SMTP id 98e67ed59e1d1-39319945306mr57612a91.10.1786549375722; Wed, 12 Aug 2026 08:42:55 -0700 (PDT) X-Received: by 2002:a17:90b:1d02:b0:36b:de66:92c3 with SMTP id 98e67ed59e1d1-39319945306mr57570a91.10.1786549375191; Wed, 12 Aug 2026 08:42:55 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier Subject: [PULL v2 11/41] hw/hexagon/virt: add l2vic interrupt-controller and virtio-mmio FDT nodes Date: Wed, 12 Aug 2026 08:41:50 -0700 Message-Id: <20260812154220.1029828-12-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: wDavqHNgHLZJOtak15J76v1-seIRdbQm X-Proofpoint-GUID: wDavqHNgHLZJOtak15J76v1-seIRdbQm X-Authority-Analysis: v=2.4 cv=UfNhjqSN c=1 sm=1 tr=0 ts=6a7c9480 cx=c_pps a=RP+M6JBNLl+fLTcSJhASfg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=8iJe-459VSUS_SUazGUA:9 a=QEXdDO2ut3YA:10 a=iS9zxrgQBfv6-_F4QbHw:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXwkY3UGoKZfI0 NUCIkz5kfcXlSG72CnpO+AbDYElz+AQ3/914bTlGynHpEz/h4iCKE1mrPnIBI474319NZg9hPYV 4tyZMzmuCvUWkokD02ywWkItGr6/c/cp9rAiBVt43Pnui9UeiZ+tSuCkZqw28q9mpGSEbhRlCQl JM24QDIUaOXQHCL0IQk7qHdP9ZzHUDvzCRIgtodKlFirq0S0GlFTfgIEV5E7PKRq2r13/DIxYCE ud69x9QMQaipG1vuwDGAp3K4RHVkwW/vwVq1UnqguGrqKaRY4JmyhsjgTylUlxe+2aHNK46a6k6 cRRGnZzq5WUJ/LhIfAW681mKBelmjwwuacVZvPWnmTM0o4SkPs9HqiVqs5Xz6dUhrfW9wOl7niF +QMhKdxGqd2SUWPgroXdwdoT/iI616u80iQI9mO+YNsIJa+A/UnO6YQrI0pFeee4MAjlf6tPCDK NHn/i3jo1k0WpWvyEPw== X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXx5edsSh6ve9u sCXBu1x4SP/+K6ZL9ouK/xUdKKggQ26YuGnw8ImWD/NFn1eej45qQQHrnQYTGn+760Xo/W20q8c K4X3p63qiSIFUmwIMOhScbfnedbkMY8= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 priorityscore=1501 suspectscore=0 impostorscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549429434158500 Expose l2vic as a device-tree interrupt-controller node and reference it via interrupt-parent, so guest kernels can discover the virtio-mmio transports. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-12-brian.ca= in@oss.qualcomm.com Signed-off-by: Brian Cain --- hw/hexagon/virt.c | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c index ff0770cfc46..ea20ea3c50a 100644 --- a/hw/hexagon/virt.c +++ b/hw/hexagon/virt.c @@ -75,6 +75,30 @@ static void create_fdt(HexagonVirtMachineState *vms) qemu_fdt_setprop(fdt, "/chosen", "rng-seed", rng_seed, sizeof(rng_seed= )); } =20 +static int32_t fdt_add_l2vic(HexagonVirtMachineState *vms, + const struct hexagon_machine_config *m_cfg) +{ + MachineState *ms =3D MACHINE(vms); + int32_t l2vic_phandle =3D qemu_fdt_alloc_phandle(ms->fdt); + char *nodename =3D g_strdup_printf("/soc/interrupt-controller@%x", + m_cfg->l2vic_base); + const char compat[] =3D "qcom,h2-pic\0hvm-pic"; + + qemu_fdt_setprop_cell(ms->fdt, "/soc", "interrupt-parent", l2vic_phand= le); + + qemu_fdt_add_subnode(ms->fdt, nodename); + qemu_fdt_setprop_cell(ms->fdt, nodename, "#address-cells", 0x0); + qemu_fdt_setprop_cell(ms->fdt, nodename, "#interrupt-cells", 0x1); + qemu_fdt_setprop(ms->fdt, nodename, "compatible", compat, sizeof(compa= t)); + qemu_fdt_setprop_cells(ms->fdt, nodename, "reg", 0, + m_cfg->l2vic_base, m_cfg->l2vic_size); + qemu_fdt_setprop(ms->fdt, nodename, "interrupt-controller", NULL, 0); + qemu_fdt_setprop_cell(ms->fdt, nodename, "phandle", l2vic_phandle); + + g_free(nodename); + return l2vic_phandle; +} + static void fdt_add_hvx(HexagonVirtMachineState *vms, const struct hexagon_machine_config *m_cfg) { @@ -175,13 +199,16 @@ static void fdt_add_cpu_nodes(const HexagonVirtMachin= eState *vms) } } =20 -static void create_virtio_devices(HexagonVirtMachineState *vms) +static void create_virtio_devices(HexagonVirtMachineState *vms, + int32_t l2vic_phandle) { + MachineState *ms =3D MACHINE(vms); hwaddr size =3D base_memmap[VIRT_MMIO].size; =20 for (int i =3D 0; i < VIRTIO_DEV_COUNT; i++) { int irq =3D VIRTIO_IRQ_BASE + i; hwaddr base =3D base_memmap[VIRT_MMIO].base + i * size; + char *nodename =3D g_strdup_printf("/soc/virtio_mmio@%" PRIx64, ba= se); DeviceState *dev =3D qdev_new("virtio-mmio"); SysBusDevice *s =3D SYS_BUS_DEVICE(dev); =20 @@ -192,6 +219,16 @@ static void create_virtio_devices(HexagonVirtMachineSt= ate *vms) sysbus_connect_irq(s, 0, qdev_get_gpio_in(vms->parent_obj.l2vic, irq)); vms->virtio_mmio[i] =3D dev; + + qemu_fdt_add_subnode(ms->fdt, nodename); + qemu_fdt_setprop_string(ms->fdt, nodename, "compatible", + "virtio,mmio"); + qemu_fdt_setprop_cells(ms->fdt, nodename, "reg", 0, base, size); + qemu_fdt_setprop_cell(ms->fdt, nodename, "interrupts", irq); + qemu_fdt_setprop_cell(ms->fdt, nodename, "interrupt-parent", + l2vic_phandle); + + g_free(nodename); } } =20 @@ -251,6 +288,7 @@ static void virt_init(MachineState *ms) HexagonVirtMachineState *vms =3D HEXAGON_VIRT_MACHINE(ms); const struct hexagon_machine_config *m_cfg =3D &v68n_1024; int32_t clk_phandle; + int32_t l2vic_phandle; =20 create_fdt(vms); qemu_fdt_setprop_string(ms->fdt, "/chosen", "bootargs", ms->kernel_cmd= line); @@ -272,7 +310,8 @@ static void virt_init(MachineState *ms) =20 fdt_add_hvx(vms, m_cfg); =20 - create_virtio_devices(vms); + l2vic_phandle =3D fdt_add_l2vic(vms, m_cfg); + create_virtio_devices(vms, l2vic_phandle); =20 g_autofree HexagonCPU **cpus =3D g_new(HexagonCPU *, ms->smp.cpus); =20 --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549445; cv=none; d=zohomail.com; s=zohoarc; b=gQr9cxvdRWHAw1+jdrOWbbNoHzZG+0jtSWqzaNoKbOvcTWvf/12QytaZPzjxEMJJo7ATNDp6yCnUYjPdWHSdjXnleJT+g4Ti5MMQ9OPbtq61rma1AMccbAFOyDYFdXwJ+K6ip/a0QCzD9bi1Mwbz6SxLCd6ENis0kvjcGAn1n6U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549445; 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=LfqjnCtYCWj/VPU4m6du88tpnDpqXi+E55E4H5hndbI=; b=lPmyi5Xv5CsEbkcp7WQ8FN+kcAQSiobrhMwLAtfwFcjmS6s9y1zKP4gl9XjYhoCKvlPzWRAwfWBj6PPgJAe0zlwUzFmxdSDrPvwCuCmLR1ej6UgmGNhccE45AXnUmxjfeuvtBE7rVHXIydyiEWx8ivjfioxcA2IsjDvTYsdVWZM= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178654944591243.36030922478153; Wed, 12 Aug 2026 08:44:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6y-0004gl-QB; Wed, 12 Aug 2026 11:43:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6d-0004Nx-4Z for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:08 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6Z-0000HP-Am for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:01 -0400 Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbTib899536 for ; Wed, 12 Aug 2026 15:42:57 GMT Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0nut9q7t-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:57 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cbb6433e9d4so1345204a12.3 for ; Wed, 12 Aug 2026 08:42:57 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= qcppdkim1; bh=LfqjnCtYCWj/VPU4m6du88tpnDpqXi+E55E4H5hndbI=; b=cR a3bRm5NaTQMCcTW81kJMEVxnliyT3bVrZoD950G5PmMj5ms9/IiFoSiUGmIj1BCw zY4DIraQfDSMfTgj/2HFH6Eu6RLUPdD8bKV6phSrVTF5uNhA08NbdAyaXO1Cw64a KyqZJuw3qhCO0VDRege4JxEwx+gYOVqstwOcSFWSc7RcWUGVZopae4mn2C5+momf y0coc7jFqOc2l1tW8nEPwOxeTOTz2aPJUZ5Q8rBxTHYiqFu5zRKVHC2uKQ97IEFe MTJ6K3XDdN0nhNDNNDXTCu23kUoD+ZhyTXgSbJZxgkePaNFhZ/99Keo+aQj6EMyJ ZKj1VsQgW6IVjyQkafQQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549377; x=1787154177; darn=nongnu.org; h=content-transfer-encoding:content-type:content-type:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=LfqjnCtYCWj/VPU4m6du88tpnDpqXi+E55E4H5hndbI=; b=DwEAvKKLCuF+9XIbwSQAcqkIllPTujKagD4gk9bqFNdU6WCWTcpzobNIdec4UC0Tfe CjtlFU19hCi/qzZ0kofqr5L46/ZKfvyUMt3kVzbh71fAp/VwMuxaGJbx6DCLYiASwCiK QCOVbdEReJNqRaLWNtB4GIHl+fuvuR8i2CPqiAYeRk6O3HxN/RHIQ9OHjkhgkBrGd6EW ajM2dxfw5p4ifV3Tj8U+HgzwIwV8OsnAbjmQCft0AohKXqUCm2+LJuFBSvGRKhC3Lhl5 9G/DEFtgTwZa4KbSPQGnWAaBapifuGOi7tFAPUb45Q972qBcGAtTIvhAHFw91y0S4JvB mfzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549377; x=1787154177; h=content-transfer-encoding:content-type:content-type: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 :content-type; bh=LfqjnCtYCWj/VPU4m6du88tpnDpqXi+E55E4H5hndbI=; b=KmU7h5YmaLxzIAjJ411qMmAvk911zCXOmbxLPCU1qTecknFGgzgup7+sr5hldublvs mbljSyKGR8jRPktr2LdOAlzIRcjCceG/U1KkdeP183leATo7hLw529+wvcpPDmWYmPfJ vLTRgDMD1/I3GQ7DsGgKGpAXmaWcIrH6ONhTT1/fG7nDw3MQQ6pK8P2M4VS6dYhP2MAH wqpZMc2JExo3xSS4GryoysYVz3LB15O2uhjnhj/q3walTBjKzXECJZkX9QDxvj+jio62 zcBv86YBQYfCeOz+7s+EY4MJRLxcqCTR4+OOrsisn3yuD5CB5kTYgBOlxRCBCTMfJp5s trqg== X-Gm-Message-State: AOJu0Yy+A9U3QgqQo4PFXG5ZMAmsPDolhXVCv7DekPw8PuuD1+fGxRGm CbNFLdbT+eJrya26W0fiEWbBfzH35d/fBFsK4ZWW/bzR+AC5wnVrta2jfy22wfD7I0fytFVVmPx z63LZCTrQyJlv74Loh1Z5FGYJaLu9oGcwkUCsISRlDNwRWrhbNYmka0QrkFad79klTQ== X-Gm-Gg: AR+sD10ur+EVhODILKnrqkJd4IgbNpRWEnpSNKYqeCiE6Bj1/IZntUpX5Y3566oZB7r uOd2m+Ipb9CeBt9DzLDkqe/VhAqaMeizz7THtfaThnBuB+zBAElu3SPNDkodzYu4x8WK3Zp9j/2 DHPzfzRmzJJS9PZQFQSxh/hIB1ZZlacPfZK8f4wZunHemoa/xrKEaoHhBmIupITo+OOUzeLF7ne gFaI+0PtEQBp4NuWL7i7hCY7K8bCQZiDnUFtKCb4csJybgGVRi9gBiq374VP0pQXojbFLAVCnpM Ci7eUxyDcf9u1TVTI4kQ+SAEsMxQOc9rw2i7KSscS6bS1umjS8G1paYb4DIqgESONjNl1WnPeG/ uRYbdTU6WqyZQoiam2prIx3sy00hKAbuPUa4tmyMqVH5Wma6a X-Received: by 2002:a05:6a21:6e95:b0:3c3:9df8:2eed with SMTP id adf61e73a8af0-3cc3f81ed9dmr7467052637.31.1786549377133; Wed, 12 Aug 2026 08:42:57 -0700 (PDT) X-Received: by 2002:a05:6a21:6e95:b0:3c3:9df8:2eed with SMTP id adf61e73a8af0-3cc3f81ed9dmr7466962637.31.1786549376639; Wed, 12 Aug 2026 08:42:56 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PULL v2 12/41] hw/hexagon/virt: connect pl011 UART interrupt Date: Wed, 12 Aug 2026 08:41:51 -0700 Message-Id: <20260812154220.1029828-13-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX9G96zZeQOJpg 24bgAEeoiPixQJfWaZPvZE4bAonWlj51zMy8/aXGcp9MX0nea6O7IRFZFQmx2NrtffePZDYjkpo quCaF2qZAgAKwj0NbQT7RxXlNGmnFU0= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX8racVcKR78Ku 3tmxXEoOKbMrhfVgmkaVrXsWmglX6wE6T4Qa5uzKtiGyUrxlSeQcSncLS8GGaG/AZhDTcxeEZCr T7Ty37zjcHphsYB/lGPyTNJ519q1ba2wVgkvGcEJnOR+0KW6dG2qH6ECwXgW0FEK4MsPgGeRhiu 7dO7VRVH8hnXS2XDrTBEJYiFZzpX5o1KybqyxGT58xyTboOV0IoGOG/VN3b0d9Uz6BS296m/XVb 9oNRNTu0gAVrkszSTXBbCii0qeWOEV2pmqFPC5OPzTGSCAGJUvHOK7wm3STUHrvM6EIW/bl5K5w fwTS01/kiTomuJYVSepD/z5WPH24e/pAznnswAHLoL8tr9N2FEjCn/4P9tfJaNYeyHi+lJ/rPZM 4/oOC6f3afKp27pfOMdGKTYsmFF2YJPMQBPy4mcZDudB4y1iitVLYov++a7vhpfWH1gAfLXz/oh go9sCOBTcgx+KHUiSag== X-Proofpoint-ORIG-GUID: vaMggsF5e85L4giU2tJtCRgyKBNdY-Mj X-Authority-Analysis: v=2.4 cv=POA/P/qC c=1 sm=1 tr=0 ts=6a7c9481 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=AqOQjYCRd4s2zt9NDMsA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-GUID: vaMggsF5e85L4giU2tJtCRgyKBNdY-Mj X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 lowpriorityscore=0 spamscore=0 clxscore=1015 impostorscore=0 bulkscore=0 suspectscore=0 priorityscore=1501 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549447578158500 Content-Type: text/plain; charset="utf-8" Wire pl011's sysbus IRQ into l2vic at IRQ 15. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-13-brian.ca= in@oss.qualcomm.com Signed-off-by: Brian Cain --- hw/hexagon/virt.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c index ea20ea3c50a..64d8366d27d 100644 --- a/hw/hexagon/virt.c +++ b/hw/hexagon/virt.c @@ -39,6 +39,7 @@ enum { * VIRTIO_IRQ_BASE + VIRTIO_DEV_COUNT - 1 */ static const int VIRTIO_IRQ_BASE =3D 16; +static const int VIRT_UART0_IRQ =3D 15; =20 static const MemMapEntry base_memmap[] =3D { [VIRT_UART0] =3D { 0x10000000, 0x00000200 }, @@ -143,7 +144,7 @@ static int32_t fdt_add_clocks(const HexagonVirtMachineS= tate *vms) } =20 static void fdt_add_uart(const HexagonVirtMachineState *vms, int uart, - int32_t clk_phandle) + int32_t clk_phandle, int32_t l2vic_phandle) { char *nodename; hwaddr base =3D base_memmap[uart].base; @@ -161,6 +162,8 @@ static void fdt_add_uart(const HexagonVirtMachineState = *vms, int uart, qdev_connect_clock_in(dev, "clk", vms->apb_clk); sysbus_realize_and_unref(s, &error_fatal); sysbus_mmio_map(s, 0, base); + sysbus_connect_irq(s, 0, + qdev_get_gpio_in(vms->parent_obj.l2vic, VIRT_UART0_= IRQ)); =20 nodename =3D g_strdup_printf("/pl011@%" PRIx64, base); qemu_fdt_add_subnode(ms->fdt, nodename); @@ -168,6 +171,9 @@ static void fdt_add_uart(const HexagonVirtMachineState = *vms, int uart, /* Note that we can't use setprop_string because of the embedded NUL */ qemu_fdt_setprop(ms->fdt, nodename, "compatible", compat, sizeof(compa= t)); qemu_fdt_setprop_cells(ms->fdt, nodename, "reg", 0, base, size); + qemu_fdt_setprop_cell(ms->fdt, nodename, "interrupts", VIRT_UART0_IRQ); + qemu_fdt_setprop_cell(ms->fdt, nodename, "interrupt-parent", + l2vic_phandle); qemu_fdt_setprop_cells(ms->fdt, nodename, "clocks", clk_phandle, clk_phandle); qemu_fdt_setprop(ms->fdt, nodename, "clock-names", clocknames, @@ -342,7 +348,7 @@ static void virt_init(MachineState *ms) =20 fdt_add_cpu_nodes(vms); clk_phandle =3D fdt_add_clocks(vms); - fdt_add_uart(vms, VIRT_UART0, clk_phandle); + fdt_add_uart(vms, VIRT_UART0, clk_phandle, l2vic_phandle); =20 hexagon_load_fdt(vms); } --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549464; cv=none; d=zohomail.com; s=zohoarc; b=fO8YI4dfHnc8H/GIJIf8LqrPUPWD2t1iNB6cpxCeLiyurnatiVTt7oB6qIkl2jDEgqkTeOx64EfwWHHrrQTHQpK/2YQpdiX0T6ITP6x438sfaO9eXAr9sPG8Xc1/EvfjNoxJs1JyTK3+eHIA9wjYWS5fNBIg2V1PlMoDgDzX8E0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549464; 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=xr/yWIiEeXT8yki0HoR8GNMQH+/u0VB4n0h8fGn8BGc=; b=XQpOwXOgxQnHtGG+Tenv17QTBFt2mOCF2USqTwf5qW6IxAZT5lPxNm9AwkqeDyEKtQsKlQ0og3cZM18KMihiTPSvytz5LS0H9R4K6m99WfNKD8cLB37RtoqomcF6p2L4Uu6jS9LpMYyazsl2N+rRP34sukszJg763MtMJaYC7b4= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549464817736.57603593671; Wed, 12 Aug 2026 08:44:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB72-0004hb-MB; Wed, 12 Aug 2026 11:43:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6f-0004OY-Bo for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:08 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6b-0000I1-Ac for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:04 -0400 Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbTRx320207 for ; Wed, 12 Aug 2026 15:42:59 GMT Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0sk40r7x-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:42:59 +0000 (GMT) Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-84870e7f498so1431508b3a.3 for ; Wed, 12 Aug 2026 08:42:59 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= xr/yWIiEeXT8yki0HoR8GNMQH+/u0VB4n0h8fGn8BGc=; b=aFHxNy9SmfQuMUtP MEh3q+IQccnko+H8OGpZE4QC1ry41aL2gYMoS0Puznu7DmCGAM/YBv/M8xBNi2r2 LGL/IwKrCWOZzLKqt250MeWEqoe1O7mFe11znHYohSiaJxsIHQ99WkBle9CoxPEU RwVs6al71QKfEndWEL0dZ6j8E+nDNvutbb6oBHwRIJ/FM+arEuijkwkzSp5JMzbA 6KJyFbmR7/RseYZuk0L1trVOJfc1HHdoJeuceC3Av7QB1k+FKZMK39eUykzrmsA6 8wMmAD/fhZ7IeT6Msp/cxlJ4KNIfV9QpNEAXC5r2AIdGorss+ZwdZSQh2edLcMvP vtm2+A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549379; x=1787154179; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=xr/yWIiEeXT8yki0HoR8GNMQH+/u0VB4n0h8fGn8BGc=; b=jw4mFZjSdSjlxCpua39c8wY7w5wtG0DrG9LWsOf7n6Yi+gKv0Mlo52NvqaTBakatXu +tUtq3qfpJ2PwTSEf1hzh59My0BgH3c7muaDZs66Vk7KB8wlLx9Zz1wbW0WaOjBzid/F HG4jCvnZx+TzbPUSvLGhnJqAha4r/paNlvMb3iBsIIirGpQnD/Pm/Wc21fkLH6evxZL4 utJCvyvzTckT/w2gsqNm8uyj3RLfYC/fBFdiCWeGhg5d47O2cI1AnuAL6KhQhT26kwgP NZe7ksA7EVYbAvxTCzRmVP2Ra74dbNeolyMSs0lXSWx+mB8IoeEuHLQO5qVD8gSGSY3I 3O3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549379; x=1787154179; h=content-transfer-encoding:content-type: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 :content-type; bh=xr/yWIiEeXT8yki0HoR8GNMQH+/u0VB4n0h8fGn8BGc=; b=rMlRVht3qdTVsNz8XLilXfGNDHqOzEMoQwpplnyp0MA3wP+08DdScsKM/OVOJQTZFK rp/ghSSvmQShlzyGqXJLIyiPAp40pbdGCz8qW1UPUsrDJcIQZiVKOkv3JS/XGgnT3Tkm drqcIMVgFJk+Jw0wnPIKhjdTdchj+rdQNr5ZbILxBj6a6uYazncyhGMeAB8cVDPH9lel opH15xqVPDHjC/Z3q//qEOiXQgPsq4U4fxbu6F6yir44076C7DimVqCeBhuMbevrgoLG jyIy9PAGSE14euCrdroKfOjHtEGHszOF64LncrxVYF71yKXV961tcpwunkLUha/sntI3 cz1g== X-Gm-Message-State: AOJu0YxzOK/iWa4dRL4w0FdFM5/4KPNhisyijFqGcGOAHcFrOv1nWtcm oDccYZ3mo039oDpfLN+vocK2utH0l/m7IAvNFhcKqn+IoqBcJ1fAZkEHx2aNDfmGc9xllOEUIf+ FqQ+IcOSS3aQXQ9YNhsC8ZXadFllC9egDIO0sAGL+Y5ltDfNbob2tsMtZIJ5zXWdTLw== X-Gm-Gg: AR+sD10WIAQz4V2EZDDFY7/qfJ9swwkunjdVw6c9/3Q0Bx7o1+CTjZmx7rlXsn+pKyz usgRVHzJyRP6BVoP3PgJ7b3r3Dn699Rca1XNATFerp+tOlMcMVP/2s6YIMYAFbctXsKyFnLT5/m d4u/bz4LtCV0m2JAXuYX6N8/5QLgIJ+/I0537py9UlJovpyXLFgNIw/fUtXwK7yVmkiNrQ5Hpvv sMV+Y7aEzV34PHPKTbZUMi1hymzZBuOrWLFPh9keQ1rhD7sDjzyOl1Fm9ab6jDK0DM86B4vUsIK zm2U23sU8r+wullslD+oP58PBjCCnIt796lKnMRuCYnk0G3HQxBPJuxP47/GSxZ/PWP+lSfprJD x7sxdTFQvbhpgVe9Imuh2I7ohsVh5CoC52sKvFtc8LMfVTumT X-Received: by 2002:a05:6a21:1644:b0:3c3:7e9c:e292 with SMTP id adf61e73a8af0-3cc3f76f7d0mr7269757637.25.1786549378603; Wed, 12 Aug 2026 08:42:58 -0700 (PDT) X-Received: by 2002:a05:6a21:1644:b0:3c3:7e9c:e292 with SMTP id adf61e73a8af0-3cc3f76f7d0mr7269678637.25.1786549378025; Wed, 12 Aug 2026 08:42:58 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Paolo Bonzini Subject: [PULL v2 13/41] tests/qtest: add L2VIC qtest Date: Wed, 12 Aug 2026 08:41:52 -0700 Message-Id: <20260812154220.1029828-14-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: Hk273w2fEloQk4xpGI-xWrVKTXvgLIGT X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX87sQGSQY/cgD Ld/C/Vw/3zyDZPw+ms6DRVyzjK71YVXIrgFTq6kpCQJGFVM07jOpy2zFoqinzDrSsb/9NT6vKyS K9BLfXzPc09812uZezlldEqo/CA8JZGH6PfCXeCFan9V8mjsnBnC+GJ+oiLynBy6s5pLsE6l5pe etyIToqBld2geS1Zmj/zXpuRQ+NrwPk6LGrUt0JDDbxDEzs0/qGcPEeLLdMZGFCqnv0NoO5bbRF Sp07416AgWwQxmwULOJ4e9qPnTKMyKDEg1luqZTqCbsyFx1ze/X8rAvi9yHMZymIymcTP3HTcaY iXP8TCBUqGavlLG49xYD06Jg2eLYjZInqxzMOcAtyJ6gjdhAaqbJT7IZIdhiqg1tqXyeYSJgsLZ m2WiorNl/iUHsHjowKSTp3OasUss7QJDKExzxQKpRIeGJIVC6jk8p0Pvx0PJCF3xFYLN0axqJo4 zPhBrxYu5wzOzt4lcXw== X-Authority-Analysis: v=2.4 cv=E8n9Y6dl c=1 sm=1 tr=0 ts=6a7c9483 cx=c_pps a=m5Vt/hrsBiPMCU0y4gIsQw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=C-MPO2htwtLS5_81g2UA:9 a=QEXdDO2ut3YA:10 a=IoOABgeZipijB_acs4fv:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXxFPjeaKhNkTc +pmXZG35MM4bRkcTE34fgnTsVqTNdUbMvw73mJlXx0pDMvpP8dAS1XQLIlJL5FP82mFmin7TZ6z kja3tozt3i2UMT9YJ/C3K+GhwF34HPM= X-Proofpoint-ORIG-GUID: Hk273w2fEloQk4xpGI-xWrVKTXvgLIGT X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 clxscore=1015 impostorscore=0 spamscore=0 phishscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549465778158500 Add a qtest exercising L2VIC register access and interrupt enable/disable. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-14-brian.ca= in@oss.qualcomm.com Signed-off-by: Brian Cain --- MAINTAINERS | 1 + tests/qtest/l2vic-test.c | 249 +++++++++++++++++++++++++++++++++++++++ tests/qtest/meson.build | 2 +- 3 files changed, 251 insertions(+), 1 deletion(-) create mode 100644 tests/qtest/l2vic-test.c diff --git a/MAINTAINERS b/MAINTAINERS index 5a772818bb2..85fc30503d8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -252,6 +252,7 @@ S: Supported F: target/hexagon/ F: hw/intc/hex-l2vic.c F: include/hw/intc/hex-l2vic.h +F: tests/qtest/l2vic-test.c X: target/hexagon/idef-parser/ X: target/hexagon/gen_idef_parser_funcs.py F: linux-user/hexagon/ diff --git a/tests/qtest/l2vic-test.c b/tests/qtest/l2vic-test.c new file mode 100644 index 00000000000..adb4dc7281e --- /dev/null +++ b/tests/qtest/l2vic-test.c @@ -0,0 +1,249 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + * + * QTest testcase for the L2VIC Interrupt Controller + */ + +#include "qemu/osdep.h" +#include "libqtest-single.h" +#include "hw/hexagon/hexagon.h" + +#include "hw/hexagon/machine_cfg_v66g_1024.h.inc" +#include "hw/hexagon/machine_cfg_v68n_1024.h.inc" + +/* L2VIC register offsets exercised by this test */ +#define L2VIC_INT_ENABLEn 0x100 /* Read/Write */ +#define L2VIC_INT_ENABLE_CLEARn 0x180 /* Write */ +#define L2VIC_INT_ENABLE_SETn 0x200 /* Write */ +#define L2VIC_INT_TYPEn 0x280 /* Read/Write */ +#define L2VIC_INT_STATUSn 0x380 /* Read */ +#define L2VIC_INT_CLEARn 0x400 /* Write */ +#define L2VIC_SOFT_INTn 0x480 /* Write */ +#define L2VIC_INT_PENDINGn 0x500 /* Read */ +#define L2VIC_INT_GRPn_0 0x600 /* Read/Write */ +#define L2VIC_INT_GRPn_1 0x680 /* Read/Write */ +#define L2VIC_INT_GRPn_2 0x700 /* Read/Write */ +#define L2VIC_INT_GRPn_3 0x780 /* Read/Write */ + +/* + * VID group readback: records which irq last fired through each VID + * group. Outputs themselves are momentary pulses (see l2vic_update()), + * so these registers -- not the qtest IRQ level snapshot -- are how the + * test observes VID steering. + */ +#define L2VIC_VID_GRP_0 0x0 +#define L2VIC_VID_GRP_1 0x4 +#define L2VIC_VID_GRP_2 0x8 +#define L2VIC_VID_GRP_3 0xC + +typedef struct { + const char *machine; + const struct hexagon_machine_config *cfg; +} L2VICMachineCfg; + +static const L2VICMachineCfg l2vic_machines[] =3D { + { "virt", &v68n_1024 }, + { "V66G_1024", &v66g_1024 }, +}; + +static uint32_t l2vic_read32(uint64_t base, uint32_t offset) +{ + return readl(base + offset); +} + +static void l2vic_write32(uint64_t base, uint32_t offset, uint32_t value) +{ + writel(base + offset, value); +} + +static void test_l2vic_register_access(uint64_t base) +{ + uint32_t val; + + l2vic_write32(base, L2VIC_INT_ENABLE_SETn, 0x1); + val =3D l2vic_read32(base, L2VIC_INT_ENABLEn); + g_assert_cmpuint(val & 0x1, =3D=3D, 0x1); + + l2vic_write32(base, L2VIC_INT_ENABLE_CLEARn, 0x1); + val =3D l2vic_read32(base, L2VIC_INT_ENABLEn); + g_assert_cmpuint(val & 0x1, =3D=3D, 0x0); +} + +static void test_l2vic_interrupt_enable(uint64_t base) +{ + uint32_t val; + + val =3D l2vic_read32(base, L2VIC_INT_ENABLEn); + g_assert_cmpuint(val, =3D=3D, 0); + + /* Enable IRQ 0 and 2 */ + l2vic_write32(base, L2VIC_INT_ENABLE_SETn, 0x5); + val =3D l2vic_read32(base, L2VIC_INT_ENABLEn); + g_assert_cmpuint(val & 0x5, =3D=3D, 0x5); + + /* Disable IRQ 0, leaving IRQ 2 enabled */ + l2vic_write32(base, L2VIC_INT_ENABLE_CLEARn, 0x1); + val =3D l2vic_read32(base, L2VIC_INT_ENABLEn); + g_assert_cmpuint(val & 0x1, =3D=3D, 0x0); + g_assert_cmpuint(val & 0x4, =3D=3D, 0x4); +} + +static void test_l2vic_basic_functionality(uint64_t base) +{ + l2vic_read32(base, L2VIC_INT_ENABLEn); + l2vic_read32(base, L2VIC_INT_PENDINGn); + l2vic_read32(base, L2VIC_INT_STATUSn); + l2vic_read32(base, L2VIC_INT_TYPEn); + + l2vic_write32(base, L2VIC_INT_ENABLE_SETn, 0); + l2vic_write32(base, L2VIC_INT_ENABLE_CLEARn, 0); +} + +/* + * IRQs 0-7 pack their group-enable/VID-select nibbles into + * L2VIC_INT_GRPn_0 (int_group_n[0]), 4 bits per irq: bit 3 enables + * VID steering, bits 0-2 select the VID group (0-3), which pulses + * output line vid+2. + */ +static void l2vic_set_vid_group(uint64_t base, int irq, int vid) +{ + uint32_t val =3D l2vic_read32(base, L2VIC_INT_GRPn_0); + uint32_t nibble =3D 0x8 | (vid & 0x7); + + val &=3D ~(0xFu << (irq * 4)); + val |=3D nibble << (irq * 4); + l2vic_write32(base, L2VIC_INT_GRPn_0, val); +} + +static void test_l2vic_irq_outputs(uint64_t base) +{ + uint32_t val; + + l2vic_write32(base, L2VIC_INT_ENABLE_CLEARn, 0xFFFFFFFF); + l2vic_write32(base, L2VIC_INT_CLEARn, 0xFFFFFFFF); + l2vic_write32(base, L2VIC_INT_TYPEn, 0); + l2vic_write32(base, L2VIC_INT_GRPn_0, 0); + + /* Group 0 / IRQ2: soft interrupts require edge-triggered config */ + l2vic_write32(base, L2VIC_INT_TYPEn, 0x1); + l2vic_write32(base, L2VIC_INT_ENABLE_SETn, 0x1); + l2vic_write32(base, L2VIC_SOFT_INTn, 0x1); + + val =3D l2vic_read32(base, L2VIC_INT_STATUSn); + g_assert_cmpuint(val & 0x1, =3D=3D, 0x1); + /* Default VID group (0) records the delivering irq, output line 2 */ + g_assert_cmpuint(l2vic_read32(base, L2VIC_VID_GRP_0), =3D=3D, 0); + + l2vic_write32(base, L2VIC_INT_CLEARn, 0x1); + val =3D l2vic_read32(base, L2VIC_INT_STATUSn); + g_assert_cmpuint(val & 0x1, =3D=3D, 0x0); + + /* IRQ1 steered to VID group 1 -> output line 3 */ + l2vic_write32(base, L2VIC_INT_TYPEn, 0x2); + l2vic_set_vid_group(base, 1, 1); + l2vic_write32(base, L2VIC_INT_ENABLE_SETn, 0x2); + l2vic_write32(base, L2VIC_SOFT_INTn, 0x2); + + val =3D l2vic_read32(base, L2VIC_INT_STATUSn); + g_assert_cmpuint(val & 0x2, =3D=3D, 0x2); + g_assert_cmpuint(l2vic_read32(base, L2VIC_VID_GRP_1), =3D=3D, 1); + + l2vic_write32(base, L2VIC_INT_CLEARn, 0x2); + + /* IRQ4 steered to VID group 2 -> output line 4 */ + l2vic_write32(base, L2VIC_INT_TYPEn, 0x10); + l2vic_set_vid_group(base, 4, 2); + l2vic_write32(base, L2VIC_INT_ENABLE_SETn, 0x10); + l2vic_write32(base, L2VIC_SOFT_INTn, 0x10); + + val =3D l2vic_read32(base, L2VIC_INT_STATUSn); + g_assert_cmpuint(val & 0x10, =3D=3D, 0x10); + g_assert_cmpuint(l2vic_read32(base, L2VIC_VID_GRP_2), =3D=3D, 4); + + l2vic_write32(base, L2VIC_INT_CLEARn, 0x10); + + /* IRQ5 steered to VID group 3 -> output line 5 */ + l2vic_write32(base, L2VIC_INT_TYPEn, 0x20); + l2vic_set_vid_group(base, 5, 3); + l2vic_write32(base, L2VIC_INT_ENABLE_SETn, 0x20); + l2vic_write32(base, L2VIC_SOFT_INTn, 0x20); + + val =3D l2vic_read32(base, L2VIC_INT_STATUSn); + g_assert_cmpuint(val & 0x20, =3D=3D, 0x20); + g_assert_cmpuint(l2vic_read32(base, L2VIC_VID_GRP_3), =3D=3D, 5); + + l2vic_write32(base, L2VIC_INT_CLEARn, 0x20); + + /* Restore defaults; the block below reuses IRQ 3-5 without VID steeri= ng */ + l2vic_write32(base, L2VIC_INT_GRPn_0, 0); + l2vic_write32(base, L2VIC_INT_TYPEn, 0); + + /* Multiple pending: at most one active at a time */ + l2vic_write32(base, L2VIC_INT_TYPEn, 0xF); + l2vic_write32(base, L2VIC_INT_ENABLE_SETn, 0xF); + l2vic_write32(base, L2VIC_SOFT_INTn, 0xF); + + val =3D l2vic_read32(base, L2VIC_INT_STATUSn); + g_assert_cmpuint(val & 0xF, !=3D, 0x0); + + /* + * Only one irq becomes active per delivery; each clear unblocks the + * next pending one, so drain until all four have been delivered. + */ + while ((val =3D l2vic_read32(base, L2VIC_INT_STATUSn)) & 0xF) { + l2vic_write32(base, L2VIC_INT_CLEARn, val & 0xF); + } + + /* Level-triggered sources ignore soft interrupts */ + l2vic_write32(base, L2VIC_INT_TYPEn, 0x0); + l2vic_write32(base, L2VIC_INT_ENABLE_SETn, 0x20); + l2vic_write32(base, L2VIC_SOFT_INTn, 0x20); + + val =3D l2vic_read32(base, L2VIC_INT_STATUSn); + g_assert_cmpuint(val & 0x20, =3D=3D, 0x0); + + /* Same source, now edge-triggered, does fire */ + l2vic_write32(base, L2VIC_INT_TYPEn, 0x20); + l2vic_write32(base, L2VIC_SOFT_INTn, 0x20); + val =3D l2vic_read32(base, L2VIC_INT_STATUSn); + g_assert_cmpuint(val & 0x20, =3D=3D, 0x20); + + l2vic_write32(base, L2VIC_INT_ENABLE_CLEARn, 0xFFFFFFFF); + l2vic_write32(base, L2VIC_INT_CLEARn, 0xFFFFFFFF); + l2vic_write32(base, L2VIC_INT_GRPn_0, 0); + l2vic_write32(base, L2VIC_INT_GRPn_1, 0); + l2vic_write32(base, L2VIC_INT_GRPn_2, 0); + l2vic_write32(base, L2VIC_INT_GRPn_3, 0); +} + +static void test_l2vic_on_machine(gconstpointer data) +{ + const L2VICMachineCfg *mc =3D data; + g_autofree char *args =3D g_strdup_printf("-machine %s", mc->machine); + uint64_t base =3D mc->cfg->l2vic_base; + + qtest_start(args); + + test_l2vic_register_access(base); + test_l2vic_interrupt_enable(base); + test_l2vic_basic_functionality(base); + test_l2vic_irq_outputs(base); + + qtest_end(); +} + +int main(int argc, char **argv) +{ + size_t i; + + g_test_init(&argc, &argv, NULL); + + for (i =3D 0; i < ARRAY_SIZE(l2vic_machines); i++) { + g_autofree char *path =3D g_strdup_printf("/l2vic/%s/all-tests", + l2vic_machines[i].machine); + qtest_add_data_func(path, &l2vic_machines[i], test_l2vic_on_machin= e); + } + + return g_test_run(); +} diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 56ff860e216..a76863c7dd6 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -299,7 +299,7 @@ qtests_riscv64 =3D ['riscv-csr-test'] + \ ['iommu-riscv-test'] : []) + \ (config_all_devices.has_key('CONFIG_K230') ? ['k230-wdt-test'] : []) =20 -qtests_hexagon =3D ['boot-serial-test'] +qtests_hexagon =3D ['boot-serial-test', 'l2vic-test'] =20 qos_test_ss =3D ss.source_set() qos_test_ss.add( --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549618; cv=none; d=zohomail.com; s=zohoarc; b=R0UIv5zRj3besdJewFEZw8JkOBTaEPJSusvPTMuP3pciwRJHI19kBjO/k3XE8gCNRrKYJzbzJRBvs+wBpFtkl3WRCOnak6ifFfcF1Eh16Es9I2P8F9AnkkoDoH7bC5+h+RBF3K9oZa02wuwMIo2JUMr1YiqoNiTMPz+AjuNDwe0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549618; 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=WlqwqNNmlVCwY/HMUFQGFJ6MJ0M1EsGC/8XR8w8/wHU=; b=kOYBbb+U/MuDuRIoBRCT3k16dYhyEAFtf9brDl4sl5tdmJ0oDUJFi0+fdeiejLZeu/WgtZ0FQWfQpIDjDAxVVfsgb0f2HLrsB+EDMZYTfuBTe+4lYfa6y5IzFagGJUqGfZazl3/ihmZ21mfNOF3LjGIt/mm8bSWQ0AyrcOFFFuk= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549618340222.9869345212744; Wed, 12 Aug 2026 08:46:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB70-0004hF-HD; Wed, 12 Aug 2026 11:43:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6g-0004Ot-S5 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:10 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6c-0000Ir-Sk for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:05 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbpbr3875551 for ; Wed, 12 Aug 2026 15:43:01 GMT Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hj1jsrr-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:01 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38f5ac7416eso1333259a91.3 for ; Wed, 12 Aug 2026 08:43:01 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= WlqwqNNmlVCwY/HMUFQGFJ6MJ0M1EsGC/8XR8w8/wHU=; b=EJCaxXAjXw2IYtRE Kgz0sl+tsOTCvVhMevIxaRYG7irhhqcQpHEi+ww6xv1rAUAEsSAJXWdan7mEI0TM LNKO2LSJwGqEpSz/NdFEWK7SUFOIKAAVJ/euPMIbKkKohztOV1XTW94wZG4R+IJW MB7PP7JbLqVkLm7i2aGrMcO8FRTiey6woOinp8PpVY2O2yBcxYKl61EogRlxPdTc 7ZkWrYZXSTikZWts18tvPWvr91T4XngqCrnx79zTgF3c3SyYrGPX+Bkn2+4yv1yn qkHBtmJK7f+sQVPGMDMIY24LvfQwBEFwg76FDwqGi1JTSbsl92yWFiTI3QmmxYE4 /M8odg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549380; x=1787154180; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=WlqwqNNmlVCwY/HMUFQGFJ6MJ0M1EsGC/8XR8w8/wHU=; b=bkuSlaSdspinMo0lhxiLNcRVQEzEn1HoTbg1CDTZoXGOY3NiXIJfQmM1EgIXS6ta/3 vv9WLsvIP9/hCyNcC1Tw6sb+EajOX8r13LzR11qj60UN0mugPVAw8j1OHXB3h+NkZG6w WjHu3eF7gY7mpXapQRT8/DIOYffCc3U0nNHNXVN8tO1Gib9Ue67UCpISzgkIndmKw+dA 328nKGlZJCvJrFHd1uayeUE+hjeKYCfiLplgFCmJXgTIPBA+NowUZ2OPL2xg1SjBogyi SyQocBF0M47Si+ekkhKRifSmiAiYORY0Wa3pBtWnyct9aMFavnpvk5i6JPbCZog1LSeE EhgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549380; x=1787154180; h=content-transfer-encoding:content-type: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 :content-type; bh=WlqwqNNmlVCwY/HMUFQGFJ6MJ0M1EsGC/8XR8w8/wHU=; b=otFHztMEBvwwm5J3V/ztr7BKqBa0iPF1kI9dVb11djypwAADwEU3ryZyoQ4OTdNLpc 63r8L2RpSpdUzrSDAV4ymhq7YZKGSZsTjCXwKEeVS3vEIPidM0ciGdNnFUbw3yc/Al+r BaSKco+l8TCvv9ooaKxwj06SO/9RNUuVVW7+T1YOV3bP7UhfdGynYUKIXqZO+LHZZn0W a9LS6OXqWEgVHvcr+UdnJVKeQv9yT29fMPTuHPbSku5NE+u/skQsz8yZFiVFsZzo5fmp oXfaKQWdPv4rq9+Nk1SddK+9+SHNJnAVPJcFvUCVxdwUOhbXbrJn9rihXnedTm93vPwO 1shA== X-Gm-Message-State: AOJu0YwIwTwjAMQBKpL1LByxC01p/NkOY49+z3jFvEy8KLD+fhMhNB7+ Sr5wszHuQZ4mG8UHOKNImlKZ8z+kWu72W3hAZ+BaavZy5vj0EkRRgliHSOLMzO9/2yln/aAxkj1 ZJGcpVcWyPE/9OBlM1mTVolEG9vxIfqGSmXrOVtemJkjfYubBZKJxC0O/2g/1I+3n0Q== X-Gm-Gg: AR+sD12FEMSbS/W/85CGCz1Iw0esoDxQKRkz6evshWTZ8mvYIUPJyo4KvrCE9ZQA0M4 KFOyzdMgvqlb5QQ1qD9RnM6e0H5HiangvcTvmmkRqZ8RiH6fxAiS7TOAdQJ1el/nJF9gRqoamjS iAwQeuhXOWqFRhAhb8sXthVUtWkfr3krS51ZLS887NcAzcsoLsB7yTDVnAVZQ/1MjRs6QtILYSp boy4i83bt+tB6cse94MU52os2AG+v0AWEeZrgA3jre3h4HRlZ3Jtgi5Z0/RFrwqoPRqeYTD29rw lh7YUxHMYBWRPN2aNtvXyHC3NO2rOGTQC3UC2O6n1D/pgDuNxusIvih2IDOjyO9ziOmFbP7iem7 rSIeHV81nHttypGq+9s0d6udbMTcKN6VstwIdWKl27LS/uueB X-Received: by 2002:a17:90b:4a4e:b0:38e:5ac1:9517 with SMTP id 98e67ed59e1d1-3930123e90emr6877963a91.3.1786549379954; Wed, 12 Aug 2026 08:42:59 -0700 (PDT) X-Received: by 2002:a17:90b:4a4e:b0:38e:5ac1:9517 with SMTP id 98e67ed59e1d1-3930123e90emr6877857a91.3.1786549379285; Wed, 12 Aug 2026 08:42:59 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier Subject: [PULL v2 14/41] tests/functional/hexagon: add arch_tests functional test Date: Wed, 12 Aug 2026 08:41:53 -0700 Message-Id: <20260812154220.1029828-15-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: jJRcXrPt-vRaUlKn3wkAFi6SCZDo_dnK X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX3FILCPYh2v8L cQ89/pnduVuJMBbvWDA/C23JMna216Csev/bKZkrZjTGu12+ug+Zq7ruNx31BXvzdS+0W+HHTxZ 1D4Q259YSMkIdzhO/41xWWSkbdT9vR2HVmWfMGzAmWfAYNmI0xUzQXrKSEJsy0PrSeE+OzcLeOl OPoHSoZvdpL1WIwXMAaAzK9AEBdCmdrXWTtYSH2qZdG4mW/L9oRuS8W+S0JuN1rn9JmyakJ1fxX Bu/9DVscA4z/1qyFr1lBc0+zLdXjK0uwsVRXTFNueaZoO08cgtlPOZjOIhAh3Py9kEBYmUJ3lgX HaHFVADnyuAzZ0e21nBuGxoEsu/oXL75b9IKeLCM5Mn10xeghtYrosnLOZs5k5BaaDlUYlKbot8 vA9OsLadRe2z4zcSjMuevPICBr53rcrOlO6uJMwCrDyffmemKJgQ0sYlosPOwWvtI3uBdUVpEGK WM8PB0ns4lCiBccoqqA== X-Authority-Analysis: v=2.4 cv=K6ES2SWI c=1 sm=1 tr=0 ts=6a7c9485 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=bMnCV-8aVPcHOxL5XGsA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-GUID: jJRcXrPt-vRaUlKn3wkAFi6SCZDo_dnK X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX8/l4R1hCfkaO n2iPwTW+BrzYFa4dSJIKHWLPlU2HRbzZWsSfpFqnZRW6Qio7drJuevGhp54urETfua7gdK9mIsa mQb9pU9++hSp9QKHgFQc0ixz7groWOI= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 adultscore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549618700158500 Add the test_int_steering case from hexagon-arch-tests. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-15-brian.ca= in@oss.qualcomm.com Signed-off-by: Brian Cain --- tests/functional/hexagon/test_arch_tests.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/functional/hexagon/test_arch_tests.py b/tests/functional= /hexagon/test_arch_tests.py index 54a1412c597..2bb34f9b8dc 100755 --- a/tests/functional/hexagon/test_arch_tests.py +++ b/tests/functional/hexagon/test_arch_tests.py @@ -52,6 +52,12 @@ def test_guest_mode(self) -> None: """ self.run_uart_test("test_guest_mode") =20 + def test_int_steering(self) -> None: + """Tests interrupt steering via priority-based routing to + specific threads using STID priority and iassignw. + """ + self.run_uart_test("test_int_steering") + =20 if __name__ =3D=3D "__main__": QemuSystemTest.main() --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549491; cv=none; d=zohomail.com; s=zohoarc; b=bltYb6M3doxV0P+fs5I7ppQ4JzXHj2z1gyS6BVwkD/iVGEhZcJE+dfkwQH7bo5gYuUh1Eg5viwgiVzIlAuLDNX16UWr0Fyn3ToJXYqG2BCkYw8g70vIbxnr6+2tMKoUqxZj37HN1k6THMtnFcr9Gxw3Zr3jucLkxHEYubuJi6QI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549491; 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=vBF9PENCVYZjsKbW8QNMI/I4AermA5gl2jxy1Sf10/g=; b=bsI5v5/5+37sV+WZIIt2MEpiYy+vSZLDytalJd7rQDDwPUIx69GHeCjW44N6vE/SEcdEVwsFKJGD3tKgSBxpQgzynAN656nwY2mcHBRw9Vm1xZZZFx9ut9wb+bHEuL3PaeDNK72c4grS5xVPoMQ4Bsx2b3PsuO0Kux/cg0U5GbA= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549491257252.50804098958668; Wed, 12 Aug 2026 08:44:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6v-0004dL-Nb; Wed, 12 Aug 2026 11:43:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6i-0004Ox-D6 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:10 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6e-0000JM-Bp for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:08 -0400 Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbTUW899547 for ; Wed, 12 Aug 2026 15:43:03 GMT Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0nut9q85-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:02 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38e667368f0so1812504a91.2 for ; Wed, 12 Aug 2026 08:43:02 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.42.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:42:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= qcppdkim1; bh=vBF9PENCVYZjsKbW8QNMI/I4AermA5gl2jxy1Sf10/g=; b=Jb E1xhLHkBDRCoRtQBLMGW5hYSMLIjpFVTCmioGyv5gIQ3g/AeJ4Vs6YMjtNBR6QsT NyP6Q0LycctdP/zzHv5qzSm4KDLsyMy1TvjKtCssXhO632mVyKkm5u4UiJt8L47+ lxSDXyKHqqofon2TfFoNhhWfBdODjbBal9zu4eeNds926HD0yRM3ZNIj6l08sLAm MCzsnqYmcKayPDUMS9Z/2SdtT/Gr9D+y6jt1Rxn9tVN89eNNyYs8Dc2bz61lHOad cEuIygCwGQDw45PAv+2vC8vUFixlrKfztyLrogKoRaOrv9ug46/4rqcJPxhB4pyy TqyZpVNaKq39XcIAeLyQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549382; x=1787154182; darn=nongnu.org; h=content-transfer-encoding:content-type:content-type:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=vBF9PENCVYZjsKbW8QNMI/I4AermA5gl2jxy1Sf10/g=; b=R/wjNjULcOshovdkPzehnRCbnJoz7lr29cwCdM5QoqxDz+ZY7vWacLv6y82pAYr8MO lY/jAqls3DBwlYnyxpWPjK1oW7JrBvvHEKtEHp7aNM4OYdyifNmtrbgLWC72FY5Ylrxg DB91HIc5fv+3Jy1ckbdIpvbUGrsQGgWoxlzn5z2/UdGERvl4LkskgUPtE7hyh0ppxKzh q+oD/03aqpPUwZIADXL6lhHsP06Piz/qRO0qKeK/y+BNyRi5rudKoDiWRVtmrKgAFEtW JElgHbOKtrVYyxfRc/cSLuAf4Q6/6LpArdL3/YMix3Tah+x1ry+MVmJMGRPlgzASTWGb 9L5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549382; x=1787154182; h=content-transfer-encoding:content-type:content-type: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 :content-type; bh=vBF9PENCVYZjsKbW8QNMI/I4AermA5gl2jxy1Sf10/g=; b=N7aj8LXUsY3fbwaCf0rP1ql5ufkmmIGrKm2zbqIudnnlvOy7zIe4lpVp63bIDLU14G ITrEcqFbXOVcXNEZJY6i5HtKs0Ok/VXow3fEo1gs7n/K2njttFGlO/pS0YA2Am+Q2Fa5 10mddMFdyNrP398og8Rm9C7YBoaTB86V3Xd6uaD85g1v+pR6A4NOLb7NneHwdnma9kOr E9AhRBsadrfdZ5CXpz38xmAzp+WoKW1h1WZBh3M2SU6q6ys/kGKvABe/uA0hoPb2tLPY 1k8Z0ACZuirXq5vIrZy2acbGD54ByHFOqciZxRuEsgqS9mYxSqfGy6Ao/2fheycKDE7d 7nrQ== X-Gm-Message-State: AOJu0YzsZ6nfYlbeEch/dzZML1D2mT72G+OuHF5E3xd+H+c9kHiofQsH aueLRSbDHerX+hZ8Efid4wtjo5+HLC6oVNxrBpSbOY9wg1KicTPsk0ExYA469vcPc8WnTYMKmZj sWtOBEP10hxMctdoRsrIGNCExkTJoO/FSDGdPX2yT4gkWsNN+ukZoe898QBI0XUtfNw== X-Gm-Gg: AR+sD13hfafV571X7FLwFD49rJsUd96G0KuNSP7b5zQimb1E21A096koKhJGySYERdb 3upgeulIWr2b/2+m0+hkOaMc7hnF4A2eb1P8L4Jst/VPWl/ItgVA900WLyZmBG4iK4iEQAIg8vX 4I230nVxp4IepeK34QOoo/DDDHjXY0LaNOmzCN1UamK6p8wbBG54tBfh6ijFFUDZbFJtC7eeXbk qCLe/1kOUQSU2HoWQv3lh+GtmUWo/hqGWiRWosTgXXBuQ+XaIFe3bpFBuiIIFZu+4p9uoWKcWMn cEQ0NgLy7QjAd/pIgxcb5P6j2o5sFVLB5/K7WmSaalh/pWIuLKpwnRYdK/CKtqAf5E5ZsgigYmg XD9Rsv/auE275d0NZYyG1EO2j/fe5E/NLPfTDiiHaX2XeOZEn X-Received: by 2002:a17:90b:2f47:b0:36d:9e0b:3801 with SMTP id 98e67ed59e1d1-393014904b6mr6665131a91.8.1786549381649; Wed, 12 Aug 2026 08:43:01 -0700 (PDT) X-Received: by 2002:a17:90b:2f47:b0:36d:9e0b:3801 with SMTP id 98e67ed59e1d1-393014904b6mr6665057a91.8.1786549380818; Wed, 12 Aug 2026 08:43:00 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Damien Hedde , =?UTF-8?q?Tobias=20R=C3=B6hmel?= , Sid Manning , Thomas Marceron , Mahmoud Kamel , Pierrick Bouvier , Paolo Bonzini Subject: [PULL v2 15/41] hw/timer: Add QCT QTimer device model Date: Wed, 12 Aug 2026 08:41:54 -0700 Message-Id: <20260812154220.1029828-16-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX225TJYHOfbDh DLhUqgfUTf26WMhQqpkxRHBjKB4bEqHPVUSZC6+cnVe9IdVLvbRvBpfVdDJ1KPutpbrPq4kARRQ py3V4zgIy7v/HYBV8n1h9AdgHRRF1JM= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX4w3qtUqod9gr 5L2aef8CEyQ3FhlSzfD5E35ZgGvA2IhDz6HR+CUdB3UQYucB1v9xesGBT2BVSdcMksl0Fa7wW6J M2bWxGDMf1exJn3CPZ42nEJ+/hk5/j1ZOavljPb8nnSTpxSR6YCx5EROrBhAZSQ6ELlThnYJxee tj6dAGOFXUtnDAqpxTD9384/6sxhz2igYvh6sGa/Qtf3hhn1JsuULlzGSMakYZyFa5P6+x1QBcu lUYPJ1QY2xfSzMekwxeRPlAUYZlOVwd09soW63jfgKDwjUzWXe3qDW9h9QyCK+dhtg72VB1rhiJ XWjS+oR+Rpl9nigM5v/mlzKJSghIDZ0hocix/37UowmosoBYYd05BcHNt6o8KGVmqU+iX9lGPsZ QFJwh55kcmqxhwlcDzbzo5mjyuJEeWa7ykVsZUIOL0jVJRhfQzIu4SVLR4YHSW/Ur+AKGl96Q0p n8ICSERxcLpp/swyjGQ== X-Proofpoint-ORIG-GUID: Sum0CGwAXGe7R3nVr4V-_YXkelj7NrYx X-Authority-Analysis: v=2.4 cv=POA/P/qC c=1 sm=1 tr=0 ts=6a7c9486 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=1cGLs3X8AAAA:8 a=COk6AnOGAAAA:8 a=IC4WK4T7XsrJqFAnAAkA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 a=d8ghUycwObenwynNfMyN:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-GUID: Sum0CGwAXGe7R3nVr4V-_YXkelj7NrYx X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 lowpriorityscore=0 spamscore=0 clxscore=1015 impostorscore=0 bulkscore=0 suspectscore=0 priorityscore=1501 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549491989158500 Content-Type: text/plain; charset="utf-8" Implement the QCT QTimer generic timer device used by Hexagon DSP systems. Co-authored-by: Damien Hedde Co-authored-by: Tobias R=C3=B6hmel Co-authored-by: Sid Manning Co-authored-by: Thomas Marceron Co-authored-by: Mahmoud Kamel Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-16-brian.ca= in@oss.qualcomm.com Signed-off-by: Brian Cain --- MAINTAINERS | 2 + include/hw/timer/qct-qtimer.h | 43 +++ hw/timer/qct-qtimer.c | 667 ++++++++++++++++++++++++++++++++++ hw/timer/Kconfig | 3 + hw/timer/meson.build | 2 + hw/timer/trace-events | 5 + 6 files changed, 722 insertions(+) create mode 100644 include/hw/timer/qct-qtimer.h create mode 100644 hw/timer/qct-qtimer.c diff --git a/MAINTAINERS b/MAINTAINERS index 85fc30503d8..b252d2e5de0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -253,6 +253,8 @@ F: target/hexagon/ F: hw/intc/hex-l2vic.c F: include/hw/intc/hex-l2vic.h F: tests/qtest/l2vic-test.c +F: hw/timer/qct-qtimer.c +F: include/hw/timer/qct-qtimer.h X: target/hexagon/idef-parser/ X: target/hexagon/gen_idef_parser_funcs.py F: linux-user/hexagon/ diff --git a/include/hw/timer/qct-qtimer.h b/include/hw/timer/qct-qtimer.h new file mode 100644 index 00000000000..53d8291472d --- /dev/null +++ b/include/hw/timer/qct-qtimer.h @@ -0,0 +1,43 @@ +/* + * Qualcomm QCT QTimer + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_TIMER_QCT_QTIMER_H +#define HW_TIMER_QCT_QTIMER_H + +#include "qom/object.h" + +#define TYPE_QCT_QTIMER "qct-qtimer" + +/* QTimer interface for external access from hexagon_globalreg */ +#define TYPE_QCT_QTIMER_INTERFACE "qct-qtimer-if" + +typedef struct QctQtimerInterface QctQtimerInterface; + +typedef struct QctQtimerInterfaceClass { + InterfaceClass parent_class; + + /* Read the live physical counter, backing HEX_SREG_TIMERLO/TIMERHI */ + uint32_t (*get_timer_lo)(const QctQtimerInterface *qtimer); + uint32_t (*get_timer_hi)(const QctQtimerInterface *qtimer); +} QctQtimerInterfaceClass; + +DECLARE_OBJ_CHECKERS(QctQtimerInterface, QctQtimerInterfaceClass, + QCT_QTIMER_INTERFACE, TYPE_QCT_QTIMER_INTERFACE); + +static inline uint32_t qct_qtimer_get_timer_lo(const QctQtimerInterface *q= timer) +{ + QctQtimerInterfaceClass *k =3D QCT_QTIMER_INTERFACE_GET_CLASS(qtimer); + return k->get_timer_lo(qtimer); +} + +static inline uint32_t qct_qtimer_get_timer_hi(const QctQtimerInterface *q= timer) +{ + QctQtimerInterfaceClass *k =3D QCT_QTIMER_INTERFACE_GET_CLASS(qtimer); + return k->get_timer_hi(qtimer); +} + +#endif /* HW_TIMER_QCT_QTIMER_H */ diff --git a/hw/timer/qct-qtimer.c b/hw/timer/qct-qtimer.c new file mode 100644 index 00000000000..f628e8d263a --- /dev/null +++ b/hw/timer/qct-qtimer.c @@ -0,0 +1,667 @@ +/* + * Qualcomm QCT QTimer + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hw/core/irq.h" +#include "hw/core/qdev-properties.h" +#include "hw/core/sysbus.h" +#include "hw/timer/qct-qtimer.h" +#include "migration/vmstate.h" +#include "qemu/bitops.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "qemu/timer.h" +#include "qapi/error.h" +#include "trace.h" + +#define QTIMER_MEM_SIZE_BYTES 0x1000 +#define QTIMER_DEFAULT_FREQ_HZ 19200000ULL + +#define QCT_QTIMER_TIMER_FRAME_ELTS (16) +#define QCT_QTIMER_TIMER_VIEW_ELTS (2) + +#define QCT_QTIMER_AC_CNTFRQ (0x000) +#define QCT_QTIMER_AC_CNTSR (0x004) +#define QCT_QTIMER_AC_CNTTID_0 (0x08) +#define QCT_QTIMER_AC_CNTACR_START (0x40) +#define QCT_QTIMER_AC_CNTACR_END (0x5c) +#define QCT_QTIMER_AC_CNTTID_1 (0x108) +#define QCT_QTIMER_AC_CNTACR_RWPT (1 << 5) /* R/W of CNTP_* regs */ +#define QCT_QTIMER_AC_CNTACR_RWVT (1 << 4) /* R/W of CNTV_* regs */ +#define QCT_QTIMER_AC_CNTACR_RVOFF (1 << 3) /* R/W of CNTVOFF register */ +#define QCT_QTIMER_AC_CNTACR_RFRQ (1 << 2) /* R/W of CNTFRQ register */ +#define QCT_QTIMER_AC_CNTACR_RPVCT (1 << 1) /* R/W of CNTVCT register */ +#define QCT_QTIMER_AC_CNTACR_RPCT (1 << 0) /* R/W of CNTPCT register */ +#define QCT_QTIMER_VERSION (0x0fd0) + +#define QCT_QTIMER_CNTPCT_LO (0x000) +#define QCT_QTIMER_CNTPCT_HI (0x004) +#define QCT_QTIMER_CNT_FREQ (0x010) +#define QCT_QTIMER_CNTPL0ACR (0x014) +#define QCT_QTIMER_CNTPL0ACR_PL0CTEN (1 << 9) +#define QCT_QTIMER_CNTPL0ACR_PL0TVEN (1 << 8) +#define QCT_QTIMER_CNTPL0ACR_PL0VCTEN (1 << 1) +#define QCT_QTIMER_CNTPL0ACR_PL0PCTEN (1 << 0) +#define QCT_QTIMER_CNTP_CVAL_LO (0x020) +#define QCT_QTIMER_CNTP_CVAL_HI (0x024) +#define QCT_QTIMER_CNT_MASK 0x00ffffffffffffffULL +#define QCT_QTIMER_CNT_HI_BITS 24 +#define QCT_QTIMER_CNTP_TVAL (0x028) +#define QCT_QTIMER_CNTP_CTL (0x02c) +#define QCT_QTIMER_CNTP_CTL_ENABLE (1 << 0) +#define QCT_QTIMER_CNTP_CTL_INTEN (1 << 1) +#define QCT_QTIMER_CNTP_CTL_ISTAT (1 << 2) + +OBJECT_DECLARE_SIMPLE_TYPE(QCTQtimerState, QCT_QTIMER) + +typedef struct QCTHextimerState { + QCTQtimerState *qtimer; + QEMUTimer *timer; /* one-shot deadline timer */ + int64_t offset_ns; /* QEMU_CLOCK_VIRTUAL ns at which cntpct =3D= =3D 0 */ + uint64_t cntval; /* 64-bit physical timer compare value */ + uint32_t control; + uint32_t cnt_ctrl; + uint32_t cntpl0acr; + uint32_t int_level; + qemu_irq irq; +} QCTHextimerState; + +struct QCTQtimerState { + SysBusDevice parent_obj; + + MemoryRegion iomem; + MemoryRegion view_iomem; + uint32_t secure; + QCTHextimerState timer[QCT_QTIMER_TIMER_FRAME_ELTS]; + uint32_t freq_hz; + uint32_t nr_frames; + uint32_t nr_views; + uint32_t frame_stride; + uint32_t freq_scale; +}; + +/* + * QTimer version register: + * + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Major | Minor | Step | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +#define QCT_QTIMER_VERSION_VALUE 0x20020000 + +static uint32_t qct_qtimer_cnttid(QCTQtimerState *s, unsigned int half) +{ + uint32_t nibble =3D 0x1 | (s->nr_views > 1 ? 0x4 : 0x0); + uint32_t base =3D half * 8; + uint32_t cnttid =3D 0; + unsigned int i; + + for (i =3D 0; i < 8; i++) { + if (base + i < s->nr_frames) { + cnttid |=3D nibble << (i * 4); + } + } + return cnttid; +} + +/* Counter value derived on-demand from QEMU_CLOCK_VIRTUAL. */ +static uint64_t hex_timer_now(QCTHextimerState *s) +{ + int64_t now =3D qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); + uint32_t scale; + uint64_t scaled_elapsed; + + if (now <=3D s->offset_ns) { + return 0; + } + scale =3D MAX(s->qtimer->freq_scale, 1u); + scaled_elapsed =3D (uint64_t)(now - s->offset_ns) / scale; + return muldiv64(scaled_elapsed, s->qtimer->freq_hz, + NANOSECONDS_PER_SECOND) & + QCT_QTIMER_CNT_MASK; +} + +/* Arm (or disarm) the one-shot deadline timer. */ +static void hex_timer_rearm(QCTHextimerState *s) +{ + uint32_t scale; + uint64_t base_ns; + int64_t deadline_ns; + + if (!(s->control & QCT_QTIMER_CNTP_CTL_ENABLE)) { + timer_del(s->timer); + return; + } + + scale =3D MAX(s->qtimer->freq_scale, 1u); + /* + * Round the ticks-to-ns conversion up so that hex_timer_now(), which + * truncates when it divides elapsed ns by scale, is guaranteed to + * report >=3D cntval once this deadline fires. A truncating conversion + * here could re-arm at the same deadline forever when scale > 1. + */ + base_ns =3D muldiv64_round_up(s->cntval, NANOSECONDS_PER_SECOND, + s->qtimer->freq_hz); + if (base_ns > + ((uint64_t)INT64_MAX - (uint64_t)s->offset_ns) / scale) { + timer_del(s->timer); + return; + } + deadline_ns =3D s->offset_ns + (int64_t)(base_ns * scale); + timer_mod(s->timer, deadline_ns); +} + +static void hex_timer_update(QCTHextimerState *s) +{ + int level =3D s->int_level && + (s->control & QCT_QTIMER_CNTP_CTL_ENABLE) && + !(s->control & QCT_QTIMER_CNTP_CTL_INTEN); + + trace_qtimer_interrupt(); + qemu_set_irq(s->irq, level); +} + +/* + * Access-control (AC) region: offsets below 0x1000, gates CNTFRQ/CNTSR/ + * CNTTID/CNTACR per frame plus the shared VERSION register. + */ +static uint64_t qct_qtimer_ac_read(void *opaque, hwaddr offset, unsigned s= ize) +{ + QCTQtimerState *s =3D opaque; + uint32_t frame; + + switch (offset) { + case QCT_QTIMER_AC_CNTFRQ: + return s->freq_hz; + case QCT_QTIMER_AC_CNTSR: + return s->secure; + case QCT_QTIMER_AC_CNTTID_0: + return qct_qtimer_cnttid(s, 0); + case QCT_QTIMER_AC_CNTTID_1: + return qct_qtimer_cnttid(s, 1); + case QCT_QTIMER_AC_CNTACR_START ... QCT_QTIMER_AC_CNTACR_END: + frame =3D (offset - QCT_QTIMER_AC_CNTACR_START) / 4; + if (frame >=3D s->nr_frames) { + qemu_log_mask(LOG_GUEST_ERROR, "%s: bad CNTACR offset 0x%x\n", + __func__, (int)offset); + return 0; + } + return s->timer[frame].cnt_ctrl; + case QCT_QTIMER_VERSION: + return QCT_QTIMER_VERSION_VALUE; + default: + qemu_log_mask(LOG_GUEST_ERROR, "%s: bad offset 0x%x\n", __func__, + (int)offset); + return 0; + } +} + +static void qct_qtimer_ac_write(void *opaque, hwaddr offset, uint64_t valu= e, + unsigned size) +{ + QCTQtimerState *s =3D opaque; + uint32_t frame; + + switch (offset) { + case QCT_QTIMER_AC_CNTFRQ: + if (value =3D=3D 0) { + qemu_log_mask(LOG_GUEST_ERROR, "%s: bad CNTFRQ value 0\n", + __func__); + return; + } + s->freq_hz =3D value; + return; + case QCT_QTIMER_AC_CNTSR: + if (value > 0xff) { + qemu_log_mask(LOG_GUEST_ERROR, "%s: bad CNTSR value 0x%x\n", + __func__, (int)value); + return; + } + s->secure =3D value; + return; + case QCT_QTIMER_AC_CNTACR_START ... QCT_QTIMER_AC_CNTACR_END: + frame =3D (offset - QCT_QTIMER_AC_CNTACR_START) / 4; + if (frame >=3D s->nr_frames) { + qemu_log_mask(LOG_GUEST_ERROR, "%s: bad CNTACR offset 0x%x\n", + __func__, (int)offset); + return; + } + s->timer[frame].cnt_ctrl =3D value; + return; + default: + qemu_log_mask(LOG_GUEST_ERROR, "%s: bad offset 0x%x\n", __func__, + (int)offset); + return; + } +} + +static const MemoryRegionOps qct_qtimer_ac_ops =3D { + .read =3D qct_qtimer_ac_read, + .write =3D qct_qtimer_ac_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + .unaligned =3D false, + }, + .impl =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + }, +}; + +/* + * View region: a flat array of (frame, view) slots, each frame_stride + * bytes wide, holding the per-frame CNTPCT/CNTP_CVAL/CNTP_TVAL/CNTP_CTL + * register set. + */ +static QCTHextimerState *qct_qtimer_demux(QCTQtimerState *s, hwaddr offset, + uint32_t *reg_offset, + uint32_t *view) +{ + uint32_t stride =3D s->frame_stride; + uint32_t stride_shift =3D ctz32(stride); + uint32_t slot_nr =3D offset >> stride_shift; + uint32_t frame =3D slot_nr / s->nr_views; + + *reg_offset =3D offset & (stride - 1); + *view =3D slot_nr % s->nr_views; + if (frame >=3D s->nr_frames) { + return NULL; + } + return &s->timer[frame]; +} + +/* Frames 8+ are described by CNTTID_1; each frame's 2nd view is a gated b= it. */ +static bool qct_qtimer_view_visible(QCTQtimerState *s, uint32_t frame, + uint32_t view) +{ + uint32_t cnttid =3D qct_qtimer_cnttid(s, frame < 8 ? 0 : 1); + uint32_t frame_idx =3D frame < 8 ? frame : frame - 8; + + return !view || (cnttid & (0x4 << (frame_idx * 4))); +} + +static bool access_ok(QCTHextimerState *s, uint32_t reg_offset, uint32_t v= iew) +{ + uint32_t acr; + uint32_t pl0acr; + + switch (reg_offset) { + case QCT_QTIMER_CNT_FREQ: + acr =3D QCT_QTIMER_AC_CNTACR_RFRQ; + pl0acr =3D QCT_QTIMER_CNTPL0ACR_PL0PCTEN | + QCT_QTIMER_CNTPL0ACR_PL0VCTEN; + break; + case QCT_QTIMER_CNTPCT_LO: + case QCT_QTIMER_CNTPCT_HI: + acr =3D QCT_QTIMER_AC_CNTACR_RPCT; + pl0acr =3D QCT_QTIMER_CNTPL0ACR_PL0PCTEN; + break; + case QCT_QTIMER_CNTP_CVAL_LO: + case QCT_QTIMER_CNTP_CVAL_HI: + case QCT_QTIMER_CNTP_TVAL: + case QCT_QTIMER_CNTP_CTL: + acr =3D QCT_QTIMER_AC_CNTACR_RWPT; + pl0acr =3D QCT_QTIMER_CNTPL0ACR_PL0CTEN; + break; + default: + /* CNTPL0ACR and VERSION are ungated. */ + return true; + } + + if (!(s->cnt_ctrl & acr)) { + return false; + } + return !view || (s->cntpl0acr & pl0acr); +} + +static MemTxResult hex_timer_read(void *opaque, hwaddr offset, uint64_t *d= ata, + unsigned size, MemTxAttrs attrs) +{ + QCTQtimerState *qs =3D opaque; + uint32_t reg_offset; + uint32_t view; + QCTHextimerState *s =3D qct_qtimer_demux(qs, offset, ®_offset, &vie= w); + uint32_t frame; + + if (!s) { + *data =3D 0; + return MEMTX_ACCESS_ERROR; + } + frame =3D s - qs->timer; + + trace_qtimer_read(offset); + + if (!qct_qtimer_view_visible(qs, frame, view)) { + *data =3D 0; + return MEMTX_OK; + } + + if (!access_ok(s, reg_offset, view)) { + return MEMTX_ACCESS_ERROR; + } + + switch (reg_offset) { + case QCT_QTIMER_CNT_FREQ: + *data =3D s->qtimer->freq_hz; + return MEMTX_OK; + case QCT_QTIMER_CNTP_CVAL_LO: + *data =3D extract64(s->cntval, 0, 32); + return MEMTX_OK; + case QCT_QTIMER_CNTP_CVAL_HI: + /* HI half is 24-bit per TRM; bits [31:24] are reserved. */ + *data =3D extract64(s->cntval, 32, QCT_QTIMER_CNT_HI_BITS); + return MEMTX_OK; + case QCT_QTIMER_CNTPCT_LO: + *data =3D extract64(hex_timer_now(s), 0, 32); + return MEMTX_OK; + case QCT_QTIMER_CNTPCT_HI: + *data =3D extract64(hex_timer_now(s), 32, QCT_QTIMER_CNT_HI_BITS); + return MEMTX_OK; + case QCT_QTIMER_CNTP_TVAL: + *data =3D (uint32_t)(int32_t)(int64_t)(s->cntval - hex_timer_now(s= )); + return MEMTX_OK; + case QCT_QTIMER_CNTP_CTL: + /* + * CNTP_CTL: bit 0 EN, bit 1 IMASK, bit 2 ISTAT (interrupt + * pending). ISTAT tracks int_level and is read-only. + */ + *data =3D s->control | ((s->int_level & 0x1) << 2); + return MEMTX_OK; + case QCT_QTIMER_CNTPL0ACR: + *data =3D view ? 0 : s->cntpl0acr; + return MEMTX_OK; + case QCT_QTIMER_VERSION: + *data =3D QCT_QTIMER_VERSION_VALUE; + return MEMTX_OK; + default: + qemu_log_mask(LOG_GUEST_ERROR, "%s: bad offset 0x%x\n", __func__, + (int)offset); + *data =3D 0; + return MEMTX_ACCESS_ERROR; + } +} + +static MemTxResult hex_timer_write(void *opaque, hwaddr offset, + uint64_t value, unsigned size, + MemTxAttrs attrs) +{ + QCTQtimerState *qs =3D opaque; + uint32_t reg_offset; + uint32_t view; + QCTHextimerState *s =3D qct_qtimer_demux(qs, offset, ®_offset, &vie= w); + uint32_t frame; + + if (!s) { + return MEMTX_ACCESS_ERROR; + } + frame =3D s - qs->timer; + + trace_qtimer_write(offset, value); + + if (!qct_qtimer_view_visible(qs, frame, view)) { + return MEMTX_OK; + } + + if (!access_ok(s, reg_offset, view)) { + return MEMTX_ACCESS_ERROR; + } + + switch (reg_offset) { + case QCT_QTIMER_CNTP_CVAL_LO: + s->int_level =3D 0; + s->cntval =3D deposit64(s->cntval, 0, 32, value); + hex_timer_rearm(s); + break; + case QCT_QTIMER_CNTP_CVAL_HI: + s->int_level =3D 0; + /* HI half is 24-bit per TRM; bits [31:24] are reserved. */ + s->cntval =3D deposit64(s->cntval, 32, QCT_QTIMER_CNT_HI_BITS, val= ue) & + QCT_QTIMER_CNT_MASK; + hex_timer_rearm(s); + break; + case QCT_QTIMER_CNTP_CTL: + /* ISTAT (bit 2) is read-only; keep SW writes from polluting it. */ + s->control =3D value & ~QCT_QTIMER_CNTP_CTL_ISTAT; + hex_timer_rearm(s); + break; + case QCT_QTIMER_CNTP_TVAL: + /* TVAL write: CVAL =3D CNTPCT + TVAL (TVAL is signed 32-bit). */ + s->int_level =3D 0; + s->cntval =3D (hex_timer_now(s) + (int64_t)(int32_t)value) & + QCT_QTIMER_CNT_MASK; + hex_timer_rearm(s); + break; + case QCT_QTIMER_CNTPL0ACR: + if (!view) { + s->cntpl0acr =3D value; + } + break; + default: + qemu_log_mask(LOG_GUEST_ERROR, "%s: bad offset 0x%x\n", __func__, + (int)offset); + return MEMTX_ACCESS_ERROR; + } + hex_timer_update(s); + return MEMTX_OK; +} + +static void hex_timer_tick(void *opaque) +{ + QCTHextimerState *s =3D opaque; + uint64_t now =3D hex_timer_now(s); + uint64_t diff56 =3D (now - s->cntval) & QCT_QTIMER_CNT_MASK; + int64_t signed_diff =3D (int64_t)(diff56 << 8) >> 8; + + if (signed_diff >=3D 0) { + s->int_level =3D 1; + hex_timer_update(s); + } else { + hex_timer_rearm(s); + } +} + +static const MemoryRegionOps hex_timer_ops =3D { + .read_with_attrs =3D hex_timer_read, + .write_with_attrs =3D hex_timer_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 4, + .max_access_size =3D 8, + .unaligned =3D false, + }, + .impl =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + }, +}; + +static const VMStateDescription vmstate_qct_hextimer =3D { + .name =3D "qct-hextimer", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(control, QCTHextimerState), + VMSTATE_UINT32(cnt_ctrl, QCTHextimerState), + VMSTATE_INT64(offset_ns, QCTHextimerState), + VMSTATE_UINT64(cntval, QCTHextimerState), + VMSTATE_UINT32(cntpl0acr, QCTHextimerState), + VMSTATE_UINT32(int_level, QCTHextimerState), + VMSTATE_TIMER_PTR(timer, QCTHextimerState), + VMSTATE_END_OF_LIST() + } +}; + +static const VMStateDescription vmstate_qct_qtimer =3D { + .name =3D "qct-qtimer", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(freq_hz, QCTQtimerState), + VMSTATE_UINT32(secure, QCTQtimerState), + VMSTATE_STRUCT_VARRAY_UINT32(timer, QCTQtimerState, nr_frames, + 1, vmstate_qct_hextimer, QCTHextimerSt= ate), + VMSTATE_END_OF_LIST() + } +}; + +static void qct_qtimer_realize(DeviceState *dev, Error **errp) +{ + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + QCTQtimerState *s =3D QCT_QTIMER(dev); + unsigned int i; + + if (s->nr_frames > QCT_QTIMER_TIMER_FRAME_ELTS) { + error_setg(errp, "nr_frames too high"); + return; + } + if (s->nr_views > QCT_QTIMER_TIMER_VIEW_ELTS) { + error_setg(errp, "nr_views too high"); + return; + } + if (s->freq_hz =3D=3D 0) { + error_setg(errp, "freq-hz must be nonzero"); + return; + } + if (s->frame_stride =3D=3D 0 || !is_power_of_2(s->frame_stride)) { + error_setg(errp, "frame_stride must be a nonzero power of two"); + return; + } + + memory_region_init_io(&s->iomem, OBJECT(s), &qct_qtimer_ac_ops, s, + "qct-qtimer-ac", QTIMER_MEM_SIZE_BYTES); + sysbus_init_mmio(sbd, &s->iomem); + + memory_region_init_io(&s->view_iomem, OBJECT(s), &hex_timer_ops, s, + "qct-qtimer-view", + (uint64_t)s->frame_stride * s->nr_frames * + s->nr_views); + sysbus_init_mmio(sbd, &s->view_iomem); + + for (i =3D 0; i < s->nr_frames; i++) { + QCTHextimerState *t =3D &s->timer[i]; + + t->qtimer =3D s; + s->secure |=3D (1 << i); + + sysbus_init_irq(sbd, &t->irq); + t->timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, hex_timer_tick, t); + } +} + +static void qct_qtimer_unrealize(DeviceState *dev) +{ + QCTQtimerState *s =3D QCT_QTIMER(dev); + unsigned int i; + + for (i =3D 0; i < s->nr_frames; i++) { + QCTHextimerState *t =3D &s->timer[i]; + + if (t->timer) { + timer_free(t->timer); + t->timer =3D NULL; + } + } +} + +static void qct_qtimer_reset_hold(Object *obj, ResetType type) +{ + QCTQtimerState *s =3D QCT_QTIMER(obj); + unsigned int i; + + for (i =3D 0; i < s->nr_frames; i++) { + QCTHextimerState *t =3D &s->timer[i]; + + /* + * Per TRM: CTL =3D 0 (EN=3D0, IMASK=3D0, ISTAT=3D0), CVAL =3D 0 s= o that + * TVAL (=3D CVAL - CNTPCT) also reads 0 at reset. The QEMUTimer is + * only armed when SW sets CTL.EN=3D1, so cntval=3D0 does not caus= e a + * spurious fire before SW programs the compare value. + */ + t->control =3D 0; + t->cnt_ctrl =3D QCT_QTIMER_AC_CNTACR_RWPT | QCT_QTIMER_AC_CNTACR_R= WVT | + QCT_QTIMER_AC_CNTACR_RVOFF | QCT_QTIMER_AC_CNTACR_RF= RQ | + QCT_QTIMER_AC_CNTACR_RPVCT | QCT_QTIMER_AC_CNTACR_RP= CT; + t->cntval =3D 0; + t->cntpl0acr =3D 0; + t->int_level =3D 0; + t->offset_ns =3D qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); + timer_del(t->timer); + qemu_set_irq(t->irq, 0); + } +} + +static const Property qct_qtimer_properties[] =3D { + DEFINE_PROP_UINT32("freq-hz", QCTQtimerState, freq_hz, + QTIMER_DEFAULT_FREQ_HZ), + DEFINE_PROP_UINT32("freq-scale", QCTQtimerState, freq_scale, 1), + DEFINE_PROP_UINT32("nr_frames", QCTQtimerState, nr_frames, 2), + DEFINE_PROP_UINT32("nr_views", QCTQtimerState, nr_views, 1), + DEFINE_PROP_UINT32("frame_stride", QCTQtimerState, frame_stride, 0x100= 0), +}; + +static void qct_qtimer_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + + device_class_set_props(dc, qct_qtimer_properties); + dc->realize =3D qct_qtimer_realize; + dc->unrealize =3D qct_qtimer_unrealize; + dc->vmsd =3D &vmstate_qct_qtimer; + rc->phases.hold =3D qct_qtimer_reset_hold; +} + +/* QTimer interface implementation, backing HEX_SREG_TIMERLO/TIMERHI */ +static uint32_t qct_qtimer_get_timer_lo_impl(const QctQtimerInterface *obj) +{ + QCTQtimerState *s =3D QCT_QTIMER((QctQtimerInterface *)obj); + + return s->nr_frames > 0 ? extract64(hex_timer_now(&s->timer[0]), 0, 32) + : 0; +} + +static uint32_t qct_qtimer_get_timer_hi_impl(const QctQtimerInterface *obj) +{ + QCTQtimerState *s =3D QCT_QTIMER((QctQtimerInterface *)obj); + + return s->nr_frames > 0 ? extract64(hex_timer_now(&s->timer[0]), 32, 3= 2) + : 0; +} + +static void qct_qtimer_interface_class_init(ObjectClass *klass, + const void *data) +{ + QctQtimerInterfaceClass *k =3D QCT_QTIMER_INTERFACE_CLASS(klass); + + k->get_timer_lo =3D qct_qtimer_get_timer_lo_impl; + k->get_timer_hi =3D qct_qtimer_get_timer_hi_impl; +} + +static const TypeInfo qct_qtimer_types[] =3D { + { + .name =3D TYPE_QCT_QTIMER_INTERFACE, + .parent =3D TYPE_INTERFACE, + .class_size =3D sizeof(QctQtimerInterfaceClass), + .class_init =3D qct_qtimer_interface_class_init, + }, + { + .name =3D TYPE_QCT_QTIMER, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(QCTQtimerState), + .class_init =3D qct_qtimer_class_init, + .interfaces =3D (InterfaceInfo[]) { + { TYPE_QCT_QTIMER_INTERFACE }, + { } + }, + }, +}; + +DEFINE_TYPES(qct_qtimer_types) diff --git a/hw/timer/Kconfig b/hw/timer/Kconfig index b3d823ce2c3..e1b751a54a7 100644 --- a/hw/timer/Kconfig +++ b/hw/timer/Kconfig @@ -65,3 +65,6 @@ config STELLARIS_GPTM =20 config AVR_TIMER16 bool + +config HEX_QTIMER + bool diff --git a/hw/timer/meson.build b/hw/timer/meson.build index 201b5d8316d..8323efaf46b 100644 --- a/hw/timer/meson.build +++ b/hw/timer/meson.build @@ -34,3 +34,5 @@ specific_ss.add(when: 'CONFIG_IBEX', if_true: files('ibex= _timer.c')) system_ss.add(when: 'CONFIG_SIFIVE_PWM', if_true: files('sifive_pwm.c')) =20 system_ss.add(when: 'CONFIG_AVR_TIMER16', if_true: files('avr_timer16.c')) + +system_ss.add(when: 'CONFIG_HEX_QTIMER', if_true: files('qct-qtimer.c')) diff --git a/hw/timer/trace-events b/hw/timer/trace-events index 634ba1da27a..636310f8caa 100644 --- a/hw/timer/trace-events +++ b/hw/timer/trace-events @@ -128,3 +128,8 @@ imx_epit_get_freq(uint32_t freq) "ptimer frequency is %= u" imx_epit_read(const char *name, uint32_t value) "(%s) =3D 0x%08x" imx_epit_write(const char *name, uint64_t value) "(%s, value =3D 0x%08" PR= Ix64 ")" imx_epit_cmp(uint32_t sr) "sr was %d" + +# qct-qtimer.c +qtimer_interrupt(void) "qtimer interrupt line updated" +qtimer_read(uint64_t offset) "offset 0x%" PRIx64 +qtimer_write(uint64_t offset, uint64_t value) "offset 0x%" PRIx64 " value = 0x%" PRIx64 --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549477; cv=none; d=zohomail.com; s=zohoarc; b=l7mt0SEZj3HLXZ6dZ7hkzBjlJ/VeHLJfk/CnRVHvPleGAyzI6pWae+cnn/oc7w6DOcRmhEppjbRcwejt3rNdzvj3grCBrSwyZjOY0tbwYtFXW2pYl7DOb07wj4oRkz48JiY2raEFQSx/cWKRPdfvm1wm10DufLXsSB8IzFoURgA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549477; 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=ecV23IfHbJK1TexRp/ukIAJsNRzKkfrywqdb7/ueUVI=; b=hebsiw4cKVnbSeaaSmAlHc493p/TNcl3Qhd4Kk5+cYu7dQ/dlqJUwwHI1JaqVGn4kKu9SDDnUaVc1/BIu1rViyrcVpktu0LFtEIEqV4QlWFpvsVK1WKgvsAaLaLV9ynhRLxnEqZJwvm5X9Ofmae171i6GPfTrEXdu7iIoAqQbNg= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549477027786.355401033577; Wed, 12 Aug 2026 08:44:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB72-0004hS-Fm; Wed, 12 Aug 2026 11:43:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6j-0004PP-I1 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:10 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6g-0000Jb-Fq for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:08 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbdba3641675 for ; Wed, 12 Aug 2026 15:43:04 GMT Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0p3d1p3w-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:04 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cb5cc1e139bso823553a12.3 for ; Wed, 12 Aug 2026 08:43:03 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= ecV23IfHbJK1TexRp/ukIAJsNRzKkfrywqdb7/ueUVI=; b=XqVRSlNl/FG0hWh8 9RIoAIdWvZQGiJns6aXg1O2+yhmlxWLW/CUVevFEIuRUWQwvic+iN0171LGB1Ck+ 07wxaU6rqVHxHjC727QAGzxNbppXjq05r+YAiETUmcsQ/Cr8rvQczc9xqbDAM/mn OpDLYwo81JR9/wOn8l2Qpz2dyMfBYZrTKycgSPOXzHmWaA1VSvIg0cMEHxPIbCOu 5Ij2CwaYuHMcOdigt+h1BFnYHZToVBGvq8tsGneE8B6dXoN3Jo4FMB+sXbD1y6qE 4HIusIbQFRkvas6tBxgWPkytiOvM8aWaqNclJlfLQnrMchiDjW4hIyIiV8Yec+Iv hwZQ5g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549383; x=1787154183; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=ecV23IfHbJK1TexRp/ukIAJsNRzKkfrywqdb7/ueUVI=; b=c7+HmWQ2/itHEXKUYJp1XO80FKN0DqaVBvVyYuOCyA5wWXzTVL8ydhdcV1B7VnPzMw I3QvER3HHg3dLql6eVnb0yP5vIr9sqc5naICakRE8L5lZAZzFQLVkoF04OlMTDY8BcO+ mBZL3Wd+jYuXwqvAmLYLQh8FnagTNpRPE3mSpH2JaJB67z57SUo7mC2B643ySv5CsDc3 +j3dSyd99QuFUj7H1JcnwWz5EJFBNf1m5n0v5lGVj2aFpmiGG04vjSSKFTYFfLfXFJYF 9Wmd2zOgk4cubbwrbhwURfD9VUO6H01wJSZJdbKjruU//9moYUq+xeROy8Eh9u8dbu34 abyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549383; x=1787154183; h=content-transfer-encoding:content-type: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 :content-type; bh=ecV23IfHbJK1TexRp/ukIAJsNRzKkfrywqdb7/ueUVI=; b=AV9pLTW/VDLRlyMoBQHMLrkUHqRigAsrbKQH1h86uoLCJnTEE/G3erU+3twFVLrF0d D2Q5LkzhGqZ63SkF0TQYfpXPVjPu7pb1z3QclVY5QWpkowz9dUnzy4yGIFmi/RHqbrJ9 5rQ3ncfc0JhpLD/I8gdSYRlned/au+AXjUoQZqBGeLzFiqPxKjmJfIDo/DnXbwiSNQ5F M0aEdMzmgYh3iMLxbzcmZrOFRwekxGA+F6o0IE7uoUsVTHAY/CbbmKmAP/42pORjX+nq i0kMxl8XuCumrKHFgf4VxTaLfh5CFLJmQbJZCT0QzL9LwG7XGtn505SvDO73H4kL4nSa Id+g== X-Gm-Message-State: AOJu0Ywh8ULV4ZDaxjREGcBWct9yRcwxfM2GNBDDdnk804EN+LI+earq 6SKy0SIgrjOJ/br3YGXyeD+piz4SCqbYd2bt2nJFkmPROf/Ju4iwgL22BLXbt37G+4ClrzCi5kq MSenbCbJmQ13+PE8i30HEA3fGF+NM8rV3DB8meimNkBZSFcHsY9CvmHIIWo+OhsNBYw== X-Gm-Gg: AR+sD13IxeUI9iaVz6zJfp2tZsElbGZHAbfYXxLh1QnXH/F3vtPfXDY8tirROzK7nmf rMBm9MtEOrPa80KTZ9Aj6jYlt0UWql3MTNLT+gOt+daHLCQa1yjALmodW3cufbjkYBoGpM7iUeW TTjPOdQevIbKWbhj128bsTeg+kjkrd5yipmTU0H1lVdWbdITiK7sJ53epsSg9SOwEj5RdwPP9O4 LPQB3uFnuJTC0EvjtA0WWF5b/7uAOC7Ma5kjEfNBd7cPkSnwHLwb5R23baYT2sxbwpQErvpGWQ8 FyYap75NJowBWv1Vvh1lDN1Hj4f+xUownOpxfKeWpe2fZ89mN2meHJY1yX3uyXB7bGt/0OlRWbl hSe8j43zNy7xVDaOX4wGKvT921IF6lfh5PMZQHpCeDS08LU4n X-Received: by 2002:a05:6a21:920d:b0:3bf:7eb5:9459 with SMTP id adf61e73a8af0-3cc3f72a1b0mr6831338637.20.1786549382856; Wed, 12 Aug 2026 08:43:02 -0700 (PDT) X-Received: by 2002:a05:6a21:920d:b0:3bf:7eb5:9459 with SMTP id adf61e73a8af0-3cc3f72a1b0mr6831266637.20.1786549382333; Wed, 12 Aug 2026 08:43:02 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier , Paolo Bonzini Subject: [PULL v2 16/41] hw/hexagon: connect qtimer device Date: Wed, 12 Aug 2026 08:41:55 -0700 Message-Id: <20260812154220.1029828-17-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: bmlf2fT3lSsx_ngdIxwlLQ1fhxs1QfE8 X-Proofpoint-GUID: bmlf2fT3lSsx_ngdIxwlLQ1fhxs1QfE8 X-Authority-Analysis: v=2.4 cv=UfNhjqSN c=1 sm=1 tr=0 ts=6a7c9488 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=El6rGuWiIpdnsNYezL0A:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX29X1HotkRRHt tza6o+hNo13S0c1VtSyAyA6sAuPsOK2XVsV16E0zq1AVqbzKmPl23xAbO1QeJZbKZqWcw+TxBE/ DH8FO7HQlbSmv2c/QV9/DAh5MyI2RKDyOlVtTmZYVKfiRnYMwtFOx0LDmx4ADmSw05jGim84R7T osFTPsmoALe71tQn6pRgenCHmuZJFjbyF92kWU3jauAjMMew/su62le+ThTAz6wn/jCRb85ItFz lrnqgJHl0xRYiFAZVLkeaoI1NtfFvu7ZVbjvLSzGvRhSOa9oSvheEsK1j8rCJe/Vfd0/1HoBgMM xLS1MV/vA8CqkI7yQojXv1fD1UBMAaLkSR2UduQq0C2jMUIsGYgIbYQYsb+rO7ZwopCKdxW1U78 XQDaNXbIA2p5ePAgJ2lGEwhDXQN6nUs4lX9sKlf+199bdFCZAhvZ/OKeVeVwv9DGFOOaItL7vk4 q48psRuSUvCEHiKfErw== X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXxZ+fF2DWVcZk GqUzUabhYG8swj4eIZy8yt30k7HczLmua/38lJNnYuQDgxpgLBKF/JKH+X8o1NMljTK9fKUiGVn WpvO7AlbXSVLuuDAWiZLQ7g5G6TbHv0= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 priorityscore=1501 suspectscore=0 impostorscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549477789158500 Add the QTimer to the shared hex-subsys so both machine models pick it up. Map its view region, wire its interrupt lines into l2vic, and link it to the globalreg device backing HEX_SREG_TIMERLO/TIMERHI. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-17-brian.ca= in@oss.qualcomm.com Signed-off-by: Brian Cain --- include/hw/hexagon/hexagon.h | 1 + include/hw/hexagon/hexagon_globalreg.h | 4 ++++ hw/hexagon/hex-subsys.c | 28 ++++++++++++++++++++++++++ hw/hexagon/hexagon_globalreg.c | 17 ++++++++++++++++ hw/hexagon/Kconfig | 1 + 5 files changed, 51 insertions(+) diff --git a/include/hw/hexagon/hexagon.h b/include/hw/hexagon/hexagon.h index ec1578807d8..3d7b3cb12dc 100644 --- a/include/hw/hexagon/hexagon.h +++ b/include/hw/hexagon/hexagon.h @@ -159,6 +159,7 @@ struct HexagonCommonMachineState { MemoryRegion vtcm; DeviceState *cluster; DeviceState *l2vic; + DeviceState *qtimer; DeviceState *glob_regs; DeviceState *tlb; }; diff --git a/include/hw/hexagon/hexagon_globalreg.h b/include/hw/hexagon/he= xagon_globalreg.h index 397dc6854c9..07437dfabb1 100644 --- a/include/hw/hexagon/hexagon_globalreg.h +++ b/include/hw/hexagon/hexagon_globalreg.h @@ -11,6 +11,7 @@ #include "hw/core/qdev.h" #include "hw/core/sysbus.h" #include "hw/intc/hex-l2vic.h" +#include "hw/timer/qct-qtimer.h" #include "qom/object.h" #include "target/hexagon/cpu.h" =20 @@ -26,6 +27,9 @@ struct HexagonGlobalRegState { /* L2VIC interface used to back the VID/VID1 registers */ HexL2VicInterface *l2vic; =20 + /* QTimer interface used to back the TIMERLO/TIMERHI registers */ + QctQtimerInterface *qtimer; + /* Global performance cycle counter base */ uint64_t g_pcycle_base; =20 diff --git a/hw/hexagon/hex-subsys.c b/hw/hexagon/hex-subsys.c index 25c028f6579..4e3a418340e 100644 --- a/hw/hexagon/hex-subsys.c +++ b/hw/hexagon/hex-subsys.c @@ -11,6 +11,7 @@ #include "hw/hexagon/hexagon_globalreg.h" #include "hw/hexagon/hexagon_tlb.h" #include "hw/intc/hex-l2vic.h" +#include "hw/timer/qct-qtimer.h" #include "hw/cpu/cluster.h" #include "hw/core/loader.h" #include "hw/core/qdev-properties.h" @@ -20,6 +21,11 @@ =20 #define HEX_L2VIC_CPU_IRQS 8 =20 +/* Number of QTimer frames instantiated for every Hexagon machine. */ +#define HEX_QTIMER_NR_FRAMES 3 + +#define HEX_QTIMER_L2VIC_IRQ_BASE 2 + static DeviceState *l2vic_create(HexagonCommonMachineState *hms, const struct hexagon_machine_config *m_cf= g) { @@ -43,6 +49,25 @@ static void l2vic_connect_cpu(DeviceState *l2vic, Device= State *cpu) } } =20 +static DeviceState *qtimer_create(HexagonCommonMachineState *hms, + const struct hexagon_machine_config *m_c= fg) +{ + DeviceState *qtimer =3D qdev_new(TYPE_QCT_QTIMER); + + object_property_add_child(OBJECT(hms), "qtimer", OBJECT(qtimer)); + qdev_prop_set_uint32(qtimer, "nr_frames", HEX_QTIMER_NR_FRAMES); + sysbus_realize_and_unref(SYS_BUS_DEVICE(qtimer), &error_fatal); + sysbus_mmio_map(SYS_BUS_DEVICE(qtimer), 0, m_cfg->csr_base); + sysbus_mmio_map(SYS_BUS_DEVICE(qtimer), 1, m_cfg->qtmr_region); + for (unsigned int i =3D 0; i < HEX_QTIMER_NR_FRAMES; i++) { + sysbus_connect_irq(SYS_BUS_DEVICE(qtimer), i, + qdev_get_gpio_in(hms->l2vic, + HEX_QTIMER_L2VIC_IRQ_BASE + i)= ); + } + + return qtimer; +} + static DeviceState *globalreg_create(HexagonCommonMachineState *hms, const struct hexagon_machine_config *= m_cfg, Rev_t rev) @@ -54,6 +79,8 @@ static DeviceState *globalreg_create(HexagonCommonMachine= State *hms, qdev_prop_set_uint32(glob_regs, "dsp-rev", rev); object_property_set_link(OBJECT(glob_regs), "l2vic", OBJECT(hms->l2vic= ), &error_fatal); + object_property_set_link(OBJECT(glob_regs), "qtimer", OBJECT(hms->qtim= er), + &error_fatal); sysbus_realize_and_unref(SYS_BUS_DEVICE(glob_regs), &error_fatal); =20 return glob_regs; @@ -110,6 +137,7 @@ void hex_subsys_create(HexagonCommonMachineState *hms, =20 hms->cluster =3D cluster_create(hms); hms->l2vic =3D l2vic_create(hms, m_cfg); + hms->qtimer =3D qtimer_create(hms, m_cfg); hms->glob_regs =3D globalreg_create(hms, m_cfg, rev); hms->tlb =3D tlb_create(hms, m_cfg); } diff --git a/hw/hexagon/hexagon_globalreg.c b/hw/hexagon/hexagon_globalreg.c index 285cb48c44b..61621cf2b8f 100644 --- a/hw/hexagon/hexagon_globalreg.c +++ b/hw/hexagon/hexagon_globalreg.c @@ -12,6 +12,7 @@ #include "hw/core/sysbus.h" #include "hw/core/resettable.h" #include "hw/intc/hex-l2vic.h" +#include "hw/timer/qct-qtimer.h" #include "migration/vmstate.h" #include "qom/object.h" #include "target/hexagon/cpu.h" @@ -141,11 +142,21 @@ static inline bool is_vid_reg(uint32_t reg) return reg =3D=3D HEX_SREG_VID || reg =3D=3D HEX_SREG_VID1; } =20 +static inline bool is_timer_reg(uint32_t reg) +{ + return reg =3D=3D HEX_SREG_TIMERLO || reg =3D=3D HEX_SREG_TIMERHI; +} + static uint32_t get_reg_value(HexagonGlobalRegState *s, uint32_t reg) { if (is_vid_reg(reg)) { return l2vic_read_vid(s->l2vic, reg =3D=3D HEX_SREG_VID ? 0 : 1); } + if (is_timer_reg(reg)) { + return reg =3D=3D HEX_SREG_TIMERLO ? + qct_qtimer_get_timer_lo(s->qtimer) : + qct_qtimer_get_timer_hi(s->qtimer); + } return s->regs[reg]; } =20 @@ -289,6 +300,10 @@ static void hexagon_globalreg_realize(DeviceState *dev= , Error **errp) error_setg(errp, "hexagon_globalreg: 'l2vic' link property not set= "); return; } + if (!s->qtimer) { + error_setg(errp, "hexagon_globalreg: 'qtimer' link property not se= t"); + return; + } } =20 static const VMStateDescription vmstate_hexagon_globalreg =3D { @@ -312,6 +327,8 @@ static const VMStateDescription vmstate_hexagon_globalr= eg =3D { static const Property hexagon_globalreg_properties[] =3D { DEFINE_PROP_LINK("l2vic", HexagonGlobalRegState, l2vic, TYPE_HEX_L2VIC_INTERFACE, HexL2VicInterface *), + DEFINE_PROP_LINK("qtimer", HexagonGlobalRegState, qtimer, + TYPE_QCT_QTIMER_INTERFACE, QctQtimerInterface *), DEFINE_PROP_UINT32("boot-evb", HexagonGlobalRegState, boot_evb, 0x0), DEFINE_PROP_UINT64("config-table-addr", HexagonGlobalRegState, config_table_addr, 0xffffffffULL), diff --git a/hw/hexagon/Kconfig b/hw/hexagon/Kconfig index c75090c44a1..83b2763d1e3 100644 --- a/hw/hexagon/Kconfig +++ b/hw/hexagon/Kconfig @@ -4,6 +4,7 @@ config HEX_DSP depends on HEXAGON select CPU_CLUSTER select HEX_L2VIC + select HEX_QTIMER =20 config HEX_VIRT bool --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549527; cv=none; d=zohomail.com; s=zohoarc; b=BrbsGIPTSuSPkKRDzJxSHE4krZCW7ASok8hiOxOZJf4u9L28npezh6jDY8R5sFpOzdI8x4eLjcsY8r9Bfp9NODsRbgWW/PhMvCtBKfbeRM9UTYDXjr+KbwayvG3dmfHWrHquxoyLymV34gp2mYXywHHDz9HmB3U8LqsdafvcYVw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549527; 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=BFozC+ELeLWYpe5T8ZIfWpGTZNXdEoJeND4N+BXKQr8=; b=OnHOL/WSLSBlD8Oiy2mwE3BLnXlV5a6zhabihTL/jfCkwKVPzQ4ZkO+Raa2ikB5yTnXLFOuADSlP6OYhf3LBoJioENIwke501jHqMK/hKIioj2RNgQ1whFLaQkMN6fjX3fTvYC15bKxST6n/B5gh4Re6cUzU893Q3aa+ezr3ods= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549527358591.0229009269209; Wed, 12 Aug 2026 08:45:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7J-00058i-9G; Wed, 12 Aug 2026 11:43:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6j-0004PQ-JU for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:12 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6g-0000Jt-K2 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:08 -0400 Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbTic899536 for ; Wed, 12 Aug 2026 15:43:05 GMT Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0nut9q8b-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:04 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-38e475f83a2so1728048a91.1 for ; Wed, 12 Aug 2026 08:43:04 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= BFozC+ELeLWYpe5T8ZIfWpGTZNXdEoJeND4N+BXKQr8=; b=NZuq31ybE9XtFoW+ GYjLbTukjlbXHZBzWCn3KDAINEc313ZbsV7ibcXYIujIf4GCrj2eWJDJyM6qUfVu nsPB4bcV7VHO+7cfOZCqj354oHbdAtk52ipaQdAAhHSAUMWDjNAKIOV1PeYzlWoa jrBLOmPnbGh3WGa/uuEaCgONXDrx5tOyQnoeAch9cDOG13hWZ7DnhCfdlagjWFsA x6VIDhS5oaIqqHybLpY1IoXH53pWJLmtXhOro5R979NNxml0ZWtQVzxf0hGdXy1T J0UxShR78037gnX6aPm1+oaArD0SLTdKp06EkXGodrcDvK0gepAMHnJvMKvbMnDz WXgUmQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549384; x=1787154184; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=BFozC+ELeLWYpe5T8ZIfWpGTZNXdEoJeND4N+BXKQr8=; b=eBzgAnQE6JJcUco9F0QLAv01lgHWJGHcJ8wixVU85Wea59/ky4+WZp2+NewwiDHI+X R+nKdraBJsd/FXwIMmkEbAFacGS4YE0LYaZH4nQRoHx3O2LH2uiiVPws3AnUAwyo0M/3 JqdfIV0uLBjkLSzNgOtvVz2vJFq1DEJr/AOnSYxa92AnJR6E1iohF0UlXTJeooIT1VN/ nuuVfSEnVLnjVTfElITvvnjnNml3YSCGYVrBGuK8RyHb0cJarPtIhT35Vr30qXRk1MqS Ic77D8ZcQ8UEx3jGYfAEi8SjTrrTdpUw0aYIKu70ySlzgbmfddvygesClRuZLBhTQiEj i3hA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549384; x=1787154184; h=content-transfer-encoding:content-type: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 :content-type; bh=BFozC+ELeLWYpe5T8ZIfWpGTZNXdEoJeND4N+BXKQr8=; b=siQPKGAl7b0mSaiqGys2qgmR9l/1sYascYAnDvnSymd7XAltP5j1cj4l2Q7c+kK9cD fv/+8PBZazXtuuMY9Bz1dKV9iAyZtHNHIbNo3zTWL5WsMDAlcz9RfKTgyybNmSxaXd+/ 3UyLEdydjp5rWM0txEcQZZ9cvNXUzmy1GYx/aWZq4uA6CWhuVoL2W9Sl9rq0bQnuJ/7+ GWHgyHxQ1nHnP112KlG/WO1j+AYI0COb8EvWjN1SbUe0pWdQLp5b2PSyodqK4VimMtq6 0Ps7dyPBpd4TRJ3wP/kuLIhjCf0hBvdofyHi667AyBX5xxib5F6w05GAlT6MTJUsl6Id MB2A== X-Gm-Message-State: AOJu0YzmUjAvSFT7z8XRGhLOocAzbpgVBkkwl4KiAx9yBZVngsMJ2DyV oSoBZYEior3DNrKuL+11xSX5I4asO0pEzYN10cRGR8FQ06Kb7cGlOX7t2uwuphOciaNP82EHKuk zc+mX9+e3I9BD0oKLGhr39KX8cZMzQFX49LvCR4o3Dn4cI4FKW3Kd92xNRz9VZRl/JA== X-Gm-Gg: AR+sD11cP0EShRnN3u04lsdED0FrDaJS5giwFC7R36lZxpPcIbv71NfYjejncQX8FbD GyCyMHIso2T3A+Y4w6L3kYQ3D7u91ULy3EX+8OfNd9ZYGDRPaR1DFG68rdzhM0YkyzKIx+xipHm A0Wjbylee5X82cU/c5OcH0txcvJqkwHZOKaF73eJiEJ5f8xtiM3psu9TPXiTqDaw79P2fU6seT4 Ftki1qXiMI/UQ2oGhz0jS9zDmriB/kRb0V0DNPmRDBO2CwGjKkAC5Ewouh83DiCKtBwKdEn3HiR 8NemDBkesurDViCDZsdI3gTgWnyPeuQvAn9eq7anGehc4lQxRyHORUs2OM7/Xe3v8kZTvIbdTy+ 8jC5VBgcJdnj+mS1GRGkyJqvQkvhEN1Hiu7mNb9DD5/8s/nB0 X-Received: by 2002:a17:90a:e7c6:b0:38f:57f0:1f5d with SMTP id 98e67ed59e1d1-3930164ea38mr6297604a91.15.1786549383942; Wed, 12 Aug 2026 08:43:03 -0700 (PDT) X-Received: by 2002:a17:90a:e7c6:b0:38f:57f0:1f5d with SMTP id 98e67ed59e1d1-3930164ea38mr6297537a91.15.1786549383337; Wed, 12 Aug 2026 08:43:03 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Paolo Bonzini Subject: [PULL v2 17/41] tests/qtest: add qct-qtimer qtest Date: Wed, 12 Aug 2026 08:41:56 -0700 Message-Id: <20260812154220.1029828-18-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX/5kngZGAX/8g M0GUdthUZOVFOdSkAbUi2vZ7iqNgUDz5jNkk9hzixDY7t9mx2y1D4028Ly5l5e3VqnsrcVuvdAv +eAu209AueNiLjczEfPuXxZfRUrA6YI= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX+bbYLdD1FeAS 913bYGdzUUh01Qv+h71bxViZTsThIoq/1DhJYU3d9EvyXyrUwK7J/2WkOqvrxv5jnwkHXhv+bKV EcSfPV5ac9ocHWkkgOzjswHTOo1Byhm5qsJqe+Sns82WbtdXmwkdydK+vPamgQoE36435jKjR0A loNI9aKLTtN0B6q+YufXg0nkpxi04H6WjmWJgNKxt8zCY/KPzdHOlFBn3j7uq0UzGR4uFgDw9wx vjANkJdNo24nqcjx8ZcDwruxCtvIEbOiBDPDZwFDL/1aH8JTes/DHNNfoYTHw+SnRwliS7D1lt1 Uhqz4JA+zDMFJdtUbwaA0skei31lFb1DEsneMhng1MQqWG8TDfFM8WUQXYvrpoLmBbSYF13v8Xx hjF/cMl5TYLYefQM2XCV0LWYKtP8dRoJgFt1MDo1Y9F4kPfpG3UMeX5K+0OIMI7om+xYEumupIw EpPu6qId3b52sIcNNzg== X-Proofpoint-ORIG-GUID: 8CW2s4kpkX7aF8shZblNyv8kD937leI5 X-Authority-Analysis: v=2.4 cv=POA/P/qC c=1 sm=1 tr=0 ts=6a7c9488 cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=KGlPgTmvZxXK_lQfuAQA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-GUID: 8CW2s4kpkX7aF8shZblNyv8kD937leI5 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 lowpriorityscore=0 spamscore=0 clxscore=1015 impostorscore=0 bulkscore=0 suspectscore=0 priorityscore=1501 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549528064158500 Add a qtest exercising the QCT QTimer's register access, view-region frame addressing, and one-shot timer firing behavior. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-18-brian.ca= in@oss.qualcomm.com Signed-off-by: Brian Cain --- MAINTAINERS | 1 + tests/qtest/qct-qtimer-test.c | 385 ++++++++++++++++++++++++++++++++++ tests/qtest/meson.build | 2 +- 3 files changed, 387 insertions(+), 1 deletion(-) create mode 100644 tests/qtest/qct-qtimer-test.c diff --git a/MAINTAINERS b/MAINTAINERS index b252d2e5de0..8db47c48fd4 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -255,6 +255,7 @@ F: include/hw/intc/hex-l2vic.h F: tests/qtest/l2vic-test.c F: hw/timer/qct-qtimer.c F: include/hw/timer/qct-qtimer.h +F: tests/qtest/qct-qtimer-test.c X: target/hexagon/idef-parser/ X: target/hexagon/gen_idef_parser_funcs.py F: linux-user/hexagon/ diff --git a/tests/qtest/qct-qtimer-test.c b/tests/qtest/qct-qtimer-test.c new file mode 100644 index 00000000000..fd8bb0af776 --- /dev/null +++ b/tests/qtest/qct-qtimer-test.c @@ -0,0 +1,385 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + * + * QTest testcase for the QCT QTimer + */ + +#include "qemu/osdep.h" +#include "libqtest-single.h" +#include "hw/hexagon/hexagon.h" +#include "qemu/bitops.h" + +#include "hw/hexagon/machine_cfg_v68n_1024.h.inc" +#include "hw/hexagon/machine_cfg_v66g_1024.h.inc" + +#define QTIMER_DEFAULT_FREQ_HZ 19200000ULL + +#define QCT_QTIMER_CNTPCT_LO (0x000) +#define QCT_QTIMER_CNTPCT_HI (0x004) +#define QCT_QTIMER_CNT_FREQ (0x010) +#define QCT_QTIMER_CNTP_CVAL_LO (0x020) +#define QCT_QTIMER_CNTP_TVAL (0x028) +#define QCT_QTIMER_CNTP_CTL (0x02c) +#define QCT_QTIMER_CNTP_CTL_ENABLE (1 << 0) + +#define QTIMER_FRAME_STRIDE 0x1000 +/* Frames instantiated by hex-subsys, and the L2VIC input frame 0 drives. = */ +#define QTIMER_NR_FRAMES 3 +#define QTIMER_L2VIC_IRQ_BASE 2 + +#define QCT_QTIMER_AC_CNTFRQ (0x000) +#define QCT_QTIMER_AC_CNTSR (0x004) +#define QCT_QTIMER_AC_CNTTID_0 (0x08) +#define QCT_QTIMER_AC_CNTACR_START (0x40) +#define QCT_QTIMER_AC_CNTACR_ALL (0x3f) +#define QCT_QTIMER_AC_CNTACR_RWPT (1 << 5) /* R/W of CNTP_* regs */ +#define QCT_QTIMER_AC_CNTACR_RFRQ (1 << 2) /* R/W of CNTFRQ register */ +#define QCT_QTIMER_AC_CNTACR_RPCT (1 << 0) /* R/W of CNTPCT register */ + +static uint64_t qtimer_view_base; +static uint64_t qtimer_ac_base; + +#define TIMER_TEST_OFFSET 1000 +/* TIMER_TEST_OFFSET ticks expressed in nanoseconds of QEMU_CLOCK_VIRTUAL = */ +#define TIMER_TEST_NS \ + ((TIMER_TEST_OFFSET * 1000000000ULL) / QTIMER_DEFAULT_FREQ_HZ) + +static uint32_t qtimer_read32(uint64_t base, uint32_t offset) +{ + return readl(base + offset); +} + +static void qtimer_write32(uint64_t base, uint32_t offset, uint32_t value) +{ + writel(base + offset, value); +} + +static uint64_t qtimer_read64(uint64_t base, uint32_t offset) +{ + uint32_t lo =3D qtimer_read32(base, offset); + uint32_t hi =3D qtimer_read32(base, offset + 4); + + return ((uint64_t)hi << 32) | lo; +} + +static void qtimer_write64(uint64_t base, uint32_t offset, uint64_t value) +{ + qtimer_write32(base, offset, extract64(value, 0, 32)); + qtimer_write32(base, offset + 4, extract64(value, 32, 32)); +} + +static void test_qtimer_basic_access(void) +{ + uint32_t val; + + val =3D qtimer_read32(qtimer_view_base, QCT_QTIMER_CNT_FREQ); + g_assert_cmpuint(val, =3D=3D, QTIMER_DEFAULT_FREQ_HZ); +} + +static void test_qtimer_multiple_frames(void) +{ + uint32_t val; + uint64_t frame0_base =3D qtimer_view_base; + uint64_t frame1_base =3D qtimer_view_base + 0x1000; + + val =3D qtimer_read32(frame0_base, QCT_QTIMER_CNT_FREQ); + g_assert_cmpuint(val, =3D=3D, QTIMER_DEFAULT_FREQ_HZ); + + val =3D qtimer_read32(frame1_base, QCT_QTIMER_CNT_FREQ); + g_assert_cmpuint(val, =3D=3D, QTIMER_DEFAULT_FREQ_HZ); +} + +static void test_qtimer_register_reads(void) +{ + qtimer_read32(qtimer_view_base, QCT_QTIMER_CNT_FREQ); + qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTPCT_LO); + qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTP_CVAL_LO); + qtimer_read32(qtimer_view_base, QCT_QTIMER_CNTP_CTL); + qtimer_read32(qtimer_view_base, QCT_QTIMER_CNTP_TVAL); +} + +static void test_qtimer_control_registers(void) +{ + uint32_t ctl_val; + uint64_t cval_before, cval_after; + + cval_before =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTPCT_LO); + + qtimer_write32(qtimer_view_base, QCT_QTIMER_CNTP_TVAL, 1000); + + qtimer_write32(qtimer_view_base, QCT_QTIMER_CNTP_CTL, 1); + ctl_val =3D qtimer_read32(qtimer_view_base, QCT_QTIMER_CNTP_CTL); + g_assert_cmpuint(ctl_val & 1, =3D=3D, 1); + + /* CVAL should be greater than before since we set TVAL */ + cval_after =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTP_CVAL_LO= ); + g_assert_cmpuint(cval_after, >, cval_before); + + qtimer_write32(qtimer_view_base, QCT_QTIMER_CNTP_CTL, 0); + ctl_val =3D qtimer_read32(qtimer_view_base, QCT_QTIMER_CNTP_CTL); + g_assert_cmpuint(ctl_val & 1, =3D=3D, 0); +} + +static void test_qtimer_cval_access(void) +{ + uint64_t current_time, test_cval, read_cval; + + current_time =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTPCT_LO); + test_cval =3D current_time + 10000; + + qtimer_write64(qtimer_view_base, QCT_QTIMER_CNTP_CVAL_LO, test_cval); + read_cval =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTP_CVAL_LO); + g_assert_cmpuint(read_cval, =3D=3D, test_cval); +} + +static void test_qtimer_counter_progression(void) +{ + uint32_t freq; + uint64_t count1, count2; + + /* + * In qtest mode the virtual clock does not advance on its own, so + * reading the counter twice must give the same value. + */ + count1 =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTPCT_LO); + count2 =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTPCT_LO); + g_assert_cmpuint(count2, =3D=3D, count1); + + freq =3D qtimer_read32(qtimer_view_base, QCT_QTIMER_CNT_FREQ); + g_assert_cmpuint(freq, =3D=3D, QTIMER_DEFAULT_FREQ_HZ); +} + +static void test_qtimer_timer_behavior(void) +{ + uint64_t current_count, target_count, read_cval, new_count; + uint64_t ctl_val, count_after_disable; + + current_count =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTPCT_LO= ); + + target_count =3D current_count + TIMER_TEST_OFFSET; + qtimer_write64(qtimer_view_base, QCT_QTIMER_CNTP_CVAL_LO, target_count= ); + + read_cval =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTP_CVAL_LO); + g_assert_cmpuint(read_cval, =3D=3D, target_count); + + qtimer_write32(qtimer_view_base, QCT_QTIMER_CNTP_CTL, 1); + + ctl_val =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTP_CTL); + /* EN set, IMASK clear, ISTAT not yet pending */ + g_assert_cmpuint(ctl_val, =3D=3D, 0x1); + + /* Step forward but not past the target */ + qtest_clock_step(global_qtest, TIMER_TEST_NS / 2); + new_count =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTPCT_LO); + g_assert_cmpuint(new_count, >=3D, current_count); + + /* Step past the target */ + qtest_clock_step(global_qtest, TIMER_TEST_NS); + new_count =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTPCT_LO); + g_assert_cmpuint(new_count, >=3D, target_count); + + qtimer_write32(qtimer_view_base, QCT_QTIMER_CNTP_CTL, 0); + + ctl_val =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTP_CTL); + /* EN cleared, ISTAT set since new_count >=3D target_count */ + g_assert_cmpuint(ctl_val, =3D=3D, 0x4); + + /* + * CNTPCT runs independently of CNTP_CTL.EN: only the compare/IRQ + * logic is gated by EN, so the counter must keep advancing. + */ + qtest_clock_step(global_qtest, TIMER_TEST_NS / 2); + count_after_disable =3D qtimer_read64(qtimer_view_base, + QCT_QTIMER_CNTPCT_LO); + g_assert_cmpuint(count_after_disable, >, new_count); + + /* ISTAT remains set while CNTPCT >=3D CVAL, even with EN=3D0 */ + ctl_val =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTP_CTL); + g_assert_cmpuint(ctl_val, =3D=3D, 0x4); +} + +/* Test the access-control region: CNTFRQ, CNTSR, CNTTID_0, CNTACR frame 0= */ +static void test_qtimer_ac_region(void) +{ + uint32_t freq, sr, tid0, acr0; + + freq =3D qtimer_read32(qtimer_ac_base, QCT_QTIMER_AC_CNTFRQ); + g_assert_cmpuint(freq, =3D=3D, QTIMER_DEFAULT_FREQ_HZ); + + /* A write of 0 to CNTFRQ must be ignored (freq-hz must stay nonzero).= */ + qtimer_write32(qtimer_ac_base, QCT_QTIMER_AC_CNTFRQ, 0); + freq =3D qtimer_read32(qtimer_ac_base, QCT_QTIMER_AC_CNTFRQ); + g_assert_cmpuint(freq, =3D=3D, QTIMER_DEFAULT_FREQ_HZ); + + qtimer_write32(qtimer_ac_base, QCT_QTIMER_AC_CNTSR, 0x3); + sr =3D qtimer_read32(qtimer_ac_base, QCT_QTIMER_AC_CNTSR); + g_assert_cmpuint(sr, =3D=3D, 0x3); + + tid0 =3D qtimer_read32(qtimer_ac_base, QCT_QTIMER_AC_CNTTID_0); + g_assert_cmpuint(tid0, =3D=3D, 0x111); + + /* CNTACR for frame 0 defaults to full read/write permissions. */ + acr0 =3D qtimer_read32(qtimer_ac_base, QCT_QTIMER_AC_CNTACR_START); + g_assert_cmpuint(acr0, !=3D, 0); + + qtimer_write32(qtimer_ac_base, QCT_QTIMER_AC_CNTACR_START, 0); + acr0 =3D qtimer_read32(qtimer_ac_base, QCT_QTIMER_AC_CNTACR_START); + g_assert_cmpuint(acr0, =3D=3D, 0); + + /* Restore full permissions so later view-region tests keep working. */ + qtimer_write32(qtimer_ac_base, QCT_QTIMER_AC_CNTACR_START, + QCT_QTIMER_AC_CNTACR_ALL); +} + +static void test_qtimer_access_denied(void) +{ + uint32_t acr_all =3D QCT_QTIMER_AC_CNTACR_ALL; + uint64_t cval, saved_cval; + uint32_t val; + + /* Park CVAL at a known nonzero value while access is still permitted.= */ + saved_cval =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTPCT_LO) += 10000; + qtimer_write64(qtimer_view_base, QCT_QTIMER_CNTP_CVAL_LO, saved_cval); + g_assert_cmpuint(qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTP_CVAL_= LO), + =3D=3D, saved_cval); + + /* Clearing RFRQ denies CNTFRQ reads. */ + qtimer_write32(qtimer_ac_base, QCT_QTIMER_AC_CNTACR_START, + acr_all & ~QCT_QTIMER_AC_CNTACR_RFRQ); + val =3D qtimer_read32(qtimer_view_base, QCT_QTIMER_CNT_FREQ); + g_assert_cmpuint(val, =3D=3D, 0); + + /* Clearing RPCT denies CNTPCT reads, both halves. */ + qtimer_write32(qtimer_ac_base, QCT_QTIMER_AC_CNTACR_START, + acr_all & ~QCT_QTIMER_AC_CNTACR_RPCT); + val =3D qtimer_read32(qtimer_view_base, QCT_QTIMER_CNTPCT_LO); + g_assert_cmpuint(val, =3D=3D, 0); + val =3D qtimer_read32(qtimer_view_base, QCT_QTIMER_CNTPCT_HI); + g_assert_cmpuint(val, =3D=3D, 0); + + /* + * Clearing RWPT denies the whole CNTP_* set: CVAL/TVAL/CTL reads all + * read back 0 even though CVAL holds saved_cval. + */ + qtimer_write32(qtimer_ac_base, QCT_QTIMER_AC_CNTACR_START, + acr_all & ~QCT_QTIMER_AC_CNTACR_RWPT); + cval =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTP_CVAL_LO); + g_assert_cmpuint(cval, =3D=3D, 0); + val =3D qtimer_read32(qtimer_view_base, QCT_QTIMER_CNTP_TVAL); + g_assert_cmpuint(val, =3D=3D, 0); + val =3D qtimer_read32(qtimer_view_base, QCT_QTIMER_CNTP_CTL); + g_assert_cmpuint(val, =3D=3D, 0); + + /* Denied writes must be dropped rather than applied. */ + qtimer_write64(qtimer_view_base, QCT_QTIMER_CNTP_CVAL_LO, 0x1234); + qtimer_write32(qtimer_view_base, QCT_QTIMER_CNTP_TVAL, 0x5678); + qtimer_write32(qtimer_view_base, QCT_QTIMER_CNTP_CTL, 1); + + /* Restoring RWPT reveals that CVAL still holds the pre-denial value. = */ + qtimer_write32(qtimer_ac_base, QCT_QTIMER_AC_CNTACR_START, acr_all); + cval =3D qtimer_read64(qtimer_view_base, QCT_QTIMER_CNTP_CVAL_LO); + g_assert_cmpuint(cval, =3D=3D, saved_cval); + val =3D qtimer_read32(qtimer_view_base, QCT_QTIMER_CNTP_CTL); + g_assert_cmpuint(val & 1, =3D=3D, 0); + + /* CNTFRQ and CNTPCT work again once permissions are back. */ + val =3D qtimer_read32(qtimer_view_base, QCT_QTIMER_CNT_FREQ); + g_assert_cmpuint(val, =3D=3D, QTIMER_DEFAULT_FREQ_HZ); + + /* + * An unimplemented offset in the view region is also an access error, + * and reads back as 0. + */ + val =3D qtimer_read32(qtimer_view_base, 0x100); + g_assert_cmpuint(val, =3D=3D, 0); + + /* Leave the frame with full permissions for any later test. */ + qtimer_write32(qtimer_ac_base, QCT_QTIMER_AC_CNTACR_START, acr_all); +} + +static void test_qtimer_frame_irq_routing(void) +{ + unsigned int frame, other; + uint64_t frame_base; + + qtest_irq_intercept_in(global_qtest, "/machine/l2vic"); + + for (frame =3D 0; frame < QTIMER_NR_FRAMES; frame++) { + frame_base =3D qtimer_view_base + frame * QTIMER_FRAME_STRIDE; + + qtimer_write32(frame_base, QCT_QTIMER_CNTP_TVAL, TIMER_TEST_OFFSET= ); + qtimer_write32(frame_base, QCT_QTIMER_CNTP_CTL, + QCT_QTIMER_CNTP_CTL_ENABLE); + g_assert_false(qtest_get_irq(global_qtest, + QTIMER_L2VIC_IRQ_BASE + frame)); + + /* Step past the deadline so the frame raises its interrupt. */ + qtest_clock_step(global_qtest, TIMER_TEST_NS * 2); + g_assert_true(qtest_get_irq(global_qtest, + QTIMER_L2VIC_IRQ_BASE + frame)); + + /* No other frame's line may be disturbed. */ + for (other =3D 0; other < QTIMER_NR_FRAMES; other++) { + if (other !=3D frame) { + g_assert_false(qtest_get_irq(global_qtest, + QTIMER_L2VIC_IRQ_BASE + other= )); + } + } + + /* Clearing EN drops the interrupt, leaving a clean slate. */ + qtimer_write32(frame_base, QCT_QTIMER_CNTP_CTL, 0); + g_assert_false(qtest_get_irq(global_qtest, + QTIMER_L2VIC_IRQ_BASE + frame)); + } +} + +typedef struct { + const char *machine; + const struct hexagon_machine_config *cfg; +} QtimerMachineCfg; + +static const QtimerMachineCfg qtimer_machines[] =3D { + { "virt", &v68n_1024 }, + { "V66G_1024", &v66g_1024 }, +}; + +static void test_qtimer_on_machine(gconstpointer data) +{ + const QtimerMachineCfg *mc =3D data; + g_autofree char *args =3D g_strdup_printf( + "-machine %s -global qct-qtimer.freq-scale=3D1", mc->machine); + + qtimer_view_base =3D mc->cfg->qtmr_region; + qtimer_ac_base =3D mc->cfg->csr_base; + + qtest_start(args); + + test_qtimer_basic_access(); + test_qtimer_multiple_frames(); + test_qtimer_register_reads(); + test_qtimer_control_registers(); + test_qtimer_cval_access(); + test_qtimer_counter_progression(); + test_qtimer_timer_behavior(); + test_qtimer_ac_region(); + test_qtimer_access_denied(); + test_qtimer_frame_irq_routing(); + + qtest_end(); +} + +int main(int argc, char **argv) +{ + size_t i; + + g_test_init(&argc, &argv, NULL); + + for (i =3D 0; i < ARRAY_SIZE(qtimer_machines); i++) { + g_autofree char *path =3D g_strdup_printf("/qct-qtimer/%s/all-test= s", + qtimer_machines[i].machine= ); + qtest_add_data_func(path, &qtimer_machines[i], test_qtimer_on_mach= ine); + } + + return g_test_run(); +} diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index a76863c7dd6..651246b2ebb 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -299,7 +299,7 @@ qtests_riscv64 =3D ['riscv-csr-test'] + \ ['iommu-riscv-test'] : []) + \ (config_all_devices.has_key('CONFIG_K230') ? ['k230-wdt-test'] : []) =20 -qtests_hexagon =3D ['boot-serial-test', 'l2vic-test'] +qtests_hexagon =3D ['boot-serial-test', 'l2vic-test', 'qct-qtimer-test'] =20 qos_test_ss =3D ss.source_set() qos_test_ss.add( --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549450; cv=none; d=zohomail.com; s=zohoarc; b=CMARsywslH2mFyPFipo8EgHLGUV9jIcqxONE+ReOZrDwgGgoYkTqlr6YYiqBmiFbc9myFAQnux+1bpYMFeyxyR+h+xCgiaMtR/yV9yA39/rxfj27RNFWGucSkDlVHztXknmIZNEA6ZpjAZ4RXP5mNIjawaIG4WYX0Fm2PKtUIPg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549450; 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=4fDABiMFaO/xaHfzA5OtIuHLV6GRct9DHYuK8AefmJ0=; b=V9bPDc2a75skVJzbJyQF9wEKzvjvmG17BM7JQ7nrb4HVgiUDXbaVaHbuT/50psnBovNMxiIcasCSOpVhmIHAZxJ8EsPbZ5JpA3yhiOH4YG/QW3uuNMg8DZUzf3TK4fmG6DNhIdKPC8J1lql18gAUNVgc8ytbPT20ZPuRt7FQm8w= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549450724526.526792118998; Wed, 12 Aug 2026 08:44:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7H-00050n-RW; Wed, 12 Aug 2026 11:43:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6m-0004QV-37 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:12 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6i-0000K3-5J for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:09 -0400 Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbbuZ3995467 for ; Wed, 12 Aug 2026 15:43:06 GMT Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0m6rj3y3-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:05 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-cb4cdf95b5aso1728884a12.1 for ; Wed, 12 Aug 2026 08:43:05 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 4fDABiMFaO/xaHfzA5OtIuHLV6GRct9DHYuK8AefmJ0=; b=U+EuF5Rj56xI9P+i UJtuIgizvkhrE3aVNHVMDCu0aqlR/p4RjYztDCpJY7qS2NvwUAnjlMn9B+yoj/tq 9cS1sGbkufuoUP9XTOdpt+Dl1/2+ivawXVonXJiEukyDPcNWYDhXyY3tkh4PBLW/ S2LSk0c9Cnf/BVDjaHLYnBKmxcDZBC2B9OLZAOj1/SDHMptgMNhNf0SF4tMSa4tM cCpPBZOEiP4cJImXHI+chdudK932iremINfFHHvOxtcMrOXeUPERWhAUpt37BLT3 za93XVDqqo3zSreIVnarO8Xz/9AuCema9kBteSZLeGQAh+6lRVTqIqPfybLWadVJ PgqhDw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549385; x=1787154185; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=4fDABiMFaO/xaHfzA5OtIuHLV6GRct9DHYuK8AefmJ0=; b=NBWNNKWKON7Y8R2D3KZCvfPn020LyejuBy+IVqmiHilIL0W9UygfsgWlu5JeAH7ItM KAjXWhxtq9NGHarFwnhXXgZ312R7P01ILHVo5edeSYLmg4IKIhXfomifJzoIzF3XiV4q tyaCtDDRDPNd+g5tbsnPRPq/+WceIl8wCaR0LYNXqld3tG9KrwEv9j+kQXYDxTgIPHXu JWPSd8AKqqOER8oUjL+wACewKrG03yLPBbquszSVMGWJY1jLDtMEFcqbO2DaWH/FW/pF bbKEyPMQkfDgIvBqmyHfglV9OIOtqtZJrUkn0Ihmu1/DrY8iKRKVk8fAqRBdKsfRvyW5 LjOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549385; x=1787154185; h=content-transfer-encoding:content-type: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 :content-type; bh=4fDABiMFaO/xaHfzA5OtIuHLV6GRct9DHYuK8AefmJ0=; b=kFDwqcQf69RzYdJE+kQFrNTrJ0kKKW3nMzJlQGIIb/BpmDuGlNcB6w+VemXz/p9RYz 5dpDDL3WXymBD0D7xs3LdmzU+Q0v1x9LsOiLXELQK4xdPQe6CMIIBaSAj1t+pVYB8fay OuKnolsXyOdnobSIlSR92XgvvhUv7u6etnV08sWlupJi61P4h1dNcSMTlfxAD629jcnN Ww5V7WIQSCzQOaPGIUGqdyVT17ij/YrqYXi0XDYy20F9d1id/yFKZkHzmAq0ntWxwjb5 SIh6qGdEp2wy/Px1Qjnz5d43MJN+03X5B1tDzUYQ0RiK+fXuU5ETc6+NFPkhSyV17mxT vclA== X-Gm-Message-State: AOJu0YzH93r/oHR8LJVma6SLSuGpFJso3Gwn747AAKpuFwkY4E2YmFJi BfBFrLSYMOhwZO3AAQrE6BFLtJnLrsdOAJofDdQKob1oCGfC6TsuNeRzzGc3ljWxe2NvA4YvpKH 7SfDM/jwYaNZMOjdAj4PBgWDlUFLt2RMkrdQeWJDifyLia7VkkZ3eKH4vpVNTZUUcDw== X-Gm-Gg: AR+sD12CvtuyzKXCzYnRLmbC8c6HvqapoYKSW2+2UDrYlbUgXjrh0vTB0hXEVwuDa5l IalaBVrJZt9wGlPsA3OcG7B3qCalfd/1tkqTtLkEOJ0SX1NUv3ndtUsjI+fvWdoKJ3i0MoGDbDQ U9qBA4pb1aLX/vCw2g12x9ibGqqEMbxP9XOBH4jnfg3yNP3TxcgWO+K5S3yMhr7pWf9KgerTCTR Df7P/64mZAHRt/0TwsAsFQaR/dBPg5aBwLKPwCbdAWyhpwRrjTr6qSvtCGT+Bhp9mxA8WwK6hRB PC4BAitYy/g2vlPQziWOTNfUzA7pOCtaVJvbnno9nnZ1C2qCdMbIxt3zWTooV5B2zdKzAMhIe7y qxza3dH/FrMW3D8mWS2bDUMf4ZIekTjkrNuMGp2jfBpgfKX7P X-Received: by 2002:a05:6a20:3d1c:b0:3c0:278c:6a31 with SMTP id adf61e73a8af0-3cc3f5c7203mr7621924637.11.1786549385155; Wed, 12 Aug 2026 08:43:05 -0700 (PDT) X-Received: by 2002:a05:6a20:3d1c:b0:3c0:278c:6a31 with SMTP id adf61e73a8af0-3cc3f5c7203mr7621862637.11.1786549384687; Wed, 12 Aug 2026 08:43:04 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier Subject: [PULL v2 18/41] tests/functional/hexagon: enable more arch_tests cases Date: Wed, 12 Aug 2026 08:41:57 -0700 Message-Id: <20260812154220.1029828-19-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX1x5x0O4KfrP3 rz1UdchhzXFTsByVj1UHBae791ufTbh5oxe3/fHnktZ8wjvHsCqriqLzd5GlqUI7XhZ1DMK49hk 4ALCHQQgawjZEu8HU3KFNOKydbFTRcJkIoH7pLoMMtfYNZLy/S4BRsbm+FiEelhG7PZT/hFUNbE SyRiryTzktxncCKOrphbOW4eaE9ii/SAcAUCkTT2jpgRKimeFoKIEObEq82mPV4mkanBgnjaF3i JxdgsXBF5vdnR4SZuk4kx8L7d3OULrk9g6A6pb68puk70LjI3jKjbYjZznzhxA2tMMvx1IM2Q7n +g46g4ncmqo2CiuCLcdxzgzZtlCL9EOzGM5Uae9y9VuCWkBBIdFu+5pKy1e3lCgdA7b3weuiMUm r6DPbTA6MTPGxEimeDgT3UBvVVCHz/0ATbci40EAahzoxDK44N75lplV86FKOKnP2XSDQ/wklBz PBYBRUBrQAeCygaSRcQ== X-Authority-Analysis: v=2.4 cv=Wb08rUhX c=1 sm=1 tr=0 ts=6a7c9489 cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=EF0Bc5xDYwCSNCb3zeEA:9 a=QEXdDO2ut3YA:10 a=3WC7DwWrALyhR5TkjVHa:22 X-Proofpoint-GUID: Zc0uJP7xcOQ9v9xtblGRBaS0iqWmKLKR X-Proofpoint-ORIG-GUID: Zc0uJP7xcOQ9v9xtblGRBaS0iqWmKLKR X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX/6H4/CsHMjmF r2Vt45BOpTI9UgCf1kJfcobxfC2X1diLZWOKzfq/4UOIapYdqcFcry75hf0Xq4tUYCCFgpmH+m/ ZFZn+ABuLC2BuRR1hYK3wNChMAZp2P4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 phishscore=0 lowpriorityscore=0 suspectscore=0 priorityscore=1501 malwarescore=0 spamscore=0 adultscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549451705158500 Add more tests from hexagon-arch-tests, enabled by QTimer device. These exercise cache maintenance ops, l2vic, thread start/stop, tlb/mmu operations, and user-mode transitions. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260806042723.3785369-19-brian.ca= in@oss.qualcomm.com Signed-off-by: Brian Cain --- tests/functional/hexagon/test_arch_tests.py | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/functional/hexagon/test_arch_tests.py b/tests/functional= /hexagon/test_arch_tests.py index 2bb34f9b8dc..0834398c3b1 100755 --- a/tests/functional/hexagon/test_arch_tests.py +++ b/tests/functional/hexagon/test_arch_tests.py @@ -58,6 +58,38 @@ def test_int_steering(self) -> None: """ self.run_uart_test("test_int_steering") =20 + def test_cache(self) -> None: + """Tests cache operations: dckill/ickill, l2kill, dczeroa, + dccleaninva, cache disable/enable, barriers, and dcinva/dccleana. + """ + self.run_uart_test("test_cache") + + def test_l2vic(self) -> None: + """Tests the L2VIC interrupt controller: enable readback, + interrupt type readback, VID capture, and the fast interface. + """ + self.run_uart_test("test_l2vic") + + def test_threads(self) -> None: + """Tests hardware thread management: start/stop, MODECTL state, + per-thread HTID, shared memory, wait/resume, STID priority, and + SCHEDCFG/BESTWAIT readback. + """ + self.run_uart_test("test_threads") + + def test_tlb_mmu(self) -> None: + """Tests TLB/MMU operations: write/read/probe/invalidate, + global entries, multiple entries, overwrite, ASID matching, + and permission checks. + """ + self.run_uart_test("test_tlb_mmu") + + def test_user_mode(self) -> None: + """Tests user mode / privilege transitions: supervisor mode, + SSR UM/IE/XE/CE/PE bits, and the trap0 user-mode exit handler. + """ + self.run_uart_test("test_user_mode") + =20 if __name__ =3D=3D "__main__": QemuSystemTest.main() --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549507; cv=none; d=zohomail.com; s=zohoarc; b=ORj6MCfk1qi9rEb269RjGZW+56RvyPgUEA+fw0TA9kqKL6gGegbdYBuFqdLrJy5HP/5dut5UGRyR3lz6L++TRBAJ/aHPYNoGT8NnXe2YjzOmFJR8a4NbdIX6Hc9L4Uk4B576R/9zJhieS43V2IS0au/nn8dGjl2RAZxCRU9u64o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549507; 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=rdDlY3qU/0LNS95L7DbZFHoCyOTCmkgkmMGMvOgfJX0=; b=YG598PsY8wi2M9fnw2CBcbWNBipY0cF816j018slEaGyBCD+ZhXBYg98TdvVNaB00FH8s8bJQGVlawiWdZpFCtIEZikETRIhXbPiE4isnBxp3ebzA8VF/4XywkDcZAW0U4+NokMy5/9MVpVW8QFwaxHsrQnpv5yZRKa94GciKpY= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549507651838.3349137076092; Wed, 12 Aug 2026 08:45:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7I-000551-7h; Wed, 12 Aug 2026 11:43:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6m-0004QU-3J for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:12 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6j-0000Kc-Af for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:11 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDcBDT3972558 for ; Wed, 12 Aug 2026 15:43:08 GMT Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0jgrjjap-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:08 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cb11535e6a1so924619a12.0 for ; Wed, 12 Aug 2026 08:43:08 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= qcppdkim1; bh=rdDlY3qU/0LNS95L7DbZFHoCyOTCmkgkmMGMvOgfJX0=; b=CR hk2LzLFzh+DcSF2Jid0FocQ+oc+v9RGgd5d/Dw3CQCHxkQ1o4QcmHB55Yh/4UCc8 CGdXJptoRzE4OshibzIhVfyfXCvcd2nW9AYOcvUo5YLkbWw5ZRQtXUN+bfjWrtWi +VqCV300bvS7z6AjgFMjBxsoolSEbDRTLSaJIajYDjnE520GvRG0EJrVWSNh47j3 tOfAnLRzjx3DoIPDi0/ZUQNCG1Ayqr+uejGvs4MyOOZBNXY7ivI6k2vf0RbsA3xQ xVn14QdhurzDrCfoq8VJJNzZbTvwKvGHoygpKQ2zO1neTGmJpKHWGpvuGfR6j/oh rZzKmmsp8facYbpHypQg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549387; x=1787154187; darn=nongnu.org; h=content-transfer-encoding:content-type:content-type:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=rdDlY3qU/0LNS95L7DbZFHoCyOTCmkgkmMGMvOgfJX0=; b=kO/vXMPjDd/W+cyjxK79zic8vGDKgnf4vZknYysE7IVp/8Rg0j7/cOXdvobsMiD0Zt LP2DVRa0SbjzvtjPZZrKCgsuBy/hEG/EFYKJxXZbzmzAbHiJqRSRE6Ya3SwNo5DMHkAR QAYIXsSp8VRiPKtbUmUclCbaoBwZfVBDGoCl2kP1jqRjxLM8ZMqUOrWH7yboqtJMgLhr I//F9y9PQY7yMKl4/3V06nhqkrmkANp7C9+70YB+XjPyX9ufHz9EkwjjTeUsWCDLOH25 /s7xXgVg7zLcAFVQbjyFswqh1lSn1vwA++z8WwjFmQ0lFM11tP6DngiCCpxQBsmcGszN qorA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549387; x=1787154187; h=content-transfer-encoding:content-type:content-type: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 :content-type; bh=rdDlY3qU/0LNS95L7DbZFHoCyOTCmkgkmMGMvOgfJX0=; b=siHlkYlGey/KQW1LCS2UvZTGl+6TiWdQfWQ0MwXyICTviS89vOE4n2CZBu0j+4iQ1e tSDnPWUv6pcAErL2wdlf8inDuQHSumEI07H8ybnhAkGAZDM9hAl8enAsbNMw8/5Ae2Yt 5IkpZyXCJVVYCnmlRQe9qllczPu7ZJIQFue4HbnZR+b8tFQf0dwUPT8EAPbOpyJew/zz 9NcHrOhdtwCIPRSuaHhmkNTBNVMYXZwmXmwrk8C1tnjI2Icxj4NhpVKMpPaWI876rsOP ZhZMOsFTtv01Wv3M2sWmCPvONCV44zbWb2e3MwvqqcbQP38egFOFE/UFNEBDkcinPok1 rxxg== X-Gm-Message-State: AOJu0Yw4AckrTfFPStxGs+UgptzIi30juKyArOBS9MNZp1ThLDV+wqJ4 dMoafN0uX7MvUO+Q9z6o//Vy3cUdKWObg0uoeGaeqPayCT8w7vQF+9t7hY0UA6q+FLU/xMD711m mrsnCS0kMOu6bi3O+ZF74xzVCVgcCEkbpl82sfK+043/+y7M6AvEeYDOtlS4H6VaZng== X-Gm-Gg: AR+sD13rU56o0O/V2e2sbY+kSdJVMTBJyZids0NDDIJTD9J0pvMv3J74HyjBFHEUKHj M6NkI2htX3BY+i7pjRIdlm/w46Cq32tWt5a7CMJRlFJUB0NuyGFDgWx7fUmSUiD9Do+dc8xc0yc iv8Eqn57oNxDavfIeNMMnTkN/UzNnZy4xEiD7tkPSLc8gtC8X7JKwOWjX7TZvDQg0KwsR8JRkO7 auBdLuGHXr1A6AZiIe4fBtyWUplgIXioJqGlUGNCKj2cAdXKIPsZJSme3YQbc7PcktkEaeWIA2c dwSpP+jeB5mBcBHTW3QpDUN+AfhTCgMrk+qV/fm7WKHKPV9wBW8Y9bslCvCsTqVpzznO83IMOfk Fj0U+7w/C7NvZQzzdURz/v5DrAzkTBh+J6Y2Ui9SbTh2UGbNh X-Received: by 2002:a05:6a21:6f87:b0:3bf:a543:e7f5 with SMTP id adf61e73a8af0-3cc3f53a5aemr7642836637.3.1786549387326; Wed, 12 Aug 2026 08:43:07 -0700 (PDT) X-Received: by 2002:a05:6a21:6f87:b0:3bf:a543:e7f5 with SMTP id adf61e73a8af0-3cc3f53a5aemr7642795637.3.1786549386893; Wed, 12 Aug 2026 08:43:06 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-stable@nongnu.org, Pierrick Bouvier Subject: [PULL v2 19/41] host-utils: fix ssub32/64_saturate return type and clamp direction Date: Wed, 12 Aug 2026 08:41:58 -0700 Message-Id: <20260812154220.1029828-20-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX5ih2xJrnaenE oMucKYXmY6SZW4vBQDTL8Tc5oUA/5bihoZ465PUQvbKisVtvkbQT1llVn6REn83kETNLvTqax1K kMbyZwt1pfpodh0uMVffv2/F6N1pjOQzbuI1U/Bog/regTbVJFY7slqlY8bxZQGYZMlbles2x7p KIYn7NmdpW3N+QGnD6yWYoxCJYNVk310XSlnwj7UBihdeqB0BiRg+XBGYpeRHIwIij50sjSL7RW bP3BeF6MwyXQYLUd1Dc45Y7x9Cun289khUlAm0QJWFolK46R+l4YxE2QlrEZ9BtB8YkW7nQcU9E PZRv4AE8HhxljiO/FTTb9icuOT912jpzUWxsQjTDm5MtyBA6h02UEixAstiJnFRXifRV27saxeC CpO4BV2OdqnlHyr3EuxD9Z33jCv1BhVSw/qjxmu1/qlUh4ZcM20hAsimh3vMIBndOgsFJJDkJpI V7vBibpJoobfcxRZqZA== X-Proofpoint-ORIG-GUID: Ptyo8mHDA_n2e22MibHtv1vMBNXMtC3Z X-Authority-Analysis: v=2.4 cv=TNJ1jVla c=1 sm=1 tr=0 ts=6a7c948c cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=69wJf7TsAAAA:8 a=kM50MvNqywxRmdRKJWUA:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 a=Fg1AiH1G6rFz08G2ETeA:22 X-Proofpoint-GUID: Ptyo8mHDA_n2e22MibHtv1vMBNXMtC3Z X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX/f8GFq0gupjM Phn+SBjYpbhxDit0Nl/rx/YK2KQVffAR6x9qyMwx0XhOW6sOzpo47cpIQJ8wrx6nDinRET9JHUx IdPBwRD/gGWhXMe1R6o2LLrIV5u/Ry4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 phishscore=0 impostorscore=0 adultscore=0 suspectscore=0 bulkscore=0 spamscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549507950158500 Content-Type: text/plain; charset="utf-8" ssub32_saturate() and ssub64_saturate() were declared to return bool instead of int32_t/int64_t, and clamped to the wrong bound on overflow. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Cc: qemu-stable@nongnu.org Fixes: 16495533131 ("host-utils: Introduce signed saturation primitives") Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260807152241.1576334-2-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- include/qemu/host-utils.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/include/qemu/host-utils.h b/include/qemu/host-utils.h index 2e8da7fb3d0..1db9dbb138e 100644 --- a/include/qemu/host-utils.h +++ b/include/qemu/host-utils.h @@ -607,10 +607,10 @@ static inline bool umul64_overflow(uint64_t x, uint64= _t y, uint64_t *ret) } =20 /** - * sadd32_saturate - addition with saturation + * sadd32_saturate - 32-bit signed addition with saturation * @x, @y: addends * - * Computes @x + @y, and saturates rathern than truncating the result. + * Computes @x + @y, and saturates rather than truncating the result. */ static inline int32_t sadd32_saturate(int32_t x, int32_t y) { @@ -622,10 +622,10 @@ static inline int32_t sadd32_saturate(int32_t x, int3= 2_t y) } =20 /** - * sadd64_saturate - addition with saturation + * sadd64_saturate - 64-bit signed addition with saturation * @x, @y: addends * - * Computes @x + @y, and saturates rathern than truncating the result. + * Computes @x + @y, and saturates rather than truncating the result. */ static inline int64_t sadd64_saturate(int64_t x, int64_t y) { @@ -637,31 +637,31 @@ static inline int64_t sadd64_saturate(int64_t x, int6= 4_t y) } =20 /** - * ssub32_saturate - subtraction with saturation + * ssub32_saturate - 32-bit signed subtraction with saturation * @x, @y: addends * - * Computes @x + @y, and saturates rathern than truncating the result. + * Computes @x - @y, and saturates rather than truncating the result. */ -static inline bool ssub32_saturate(int32_t x, int32_t y) +static inline int32_t ssub32_saturate(int32_t x, int32_t y) { int32_t ret; if (ssub32_overflow(x, y, &ret)) { - ret =3D x < 0 ? INT32_MAX : INT32_MIN; + ret =3D x < 0 ? INT32_MIN : INT32_MAX; } return ret; } =20 /** - * ssub64_saturate - subtraction with saturation + * ssub64_saturate - 64-bit signed subtraction with saturation * @x, @y: addends * - * Computes @x + @y, and saturates rathern than truncating the result. + * Computes @x - @y, and saturates rather than truncating the result. */ -static inline bool ssub64_saturate(int64_t x, int64_t y) +static inline int64_t ssub64_saturate(int64_t x, int64_t y) { int64_t ret; if (ssub64_overflow(x, y, &ret)) { - ret =3D x < 0 ? INT64_MAX : INT64_MIN; + ret =3D x < 0 ? INT64_MIN : INT64_MAX; } return ret; } --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549448; cv=none; d=zohomail.com; s=zohoarc; b=Q47rO5AhFWHq+2Rc30N0YcqcAO4qP4/SUnQAQAszqtzon+CjFRDYCGFuUJYhScK1EWLTVCbQWssXvbl0OFsBCQ7/CNIAaoCyCHwXWktve5A9GCRIYljTb/1fmXKv3tqkfPi6eQGsdxqsqbaU1r4oKJAMhL61qgkRjg60FgEAaTY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549448; 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=r5gOWn0iU2Np2OD0qg7EzN8uuJ/lnbIhtPfVZ0n4xk8=; b=BHHVUU8pHwHvs8SgMPzCocMQ2LMg5vTv5sJaR4DVBZIpdTk08B9doLvCRi6MxEw+z6rTohJVfyRhoSP7ixs6vsAiJ69d+q2Zr3KOq8hw2hOfCoMVNQj63WP4I+Xq2UCksHfMg4uuF7Xgbe4jGv6Nm9y5O+VUw3GwJBP+YD277Qg= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549448045771.0580378154589; Wed, 12 Aug 2026 08:44:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB6w-0004fs-WD; Wed, 12 Aug 2026 11:43:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6o-0004UK-LA for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:16 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6l-0000L5-RR for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:13 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDboGU3875111 for ; Wed, 12 Aug 2026 15:43:09 GMT Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hj1jssw-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:09 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2d04908139bso14711715ad.2 for ; Wed, 12 Aug 2026 08:43:09 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= r5gOWn0iU2Np2OD0qg7EzN8uuJ/lnbIhtPfVZ0n4xk8=; b=ZbRxxVsgDKeXBgTM iz6I/iExvlItEUL+f9YTqfHn3dCPHajMRsM5N7rdAw8BG4SkKhV/Sa4RjqcaBKIo uTYR5PuLqkaP5baeKW8E9EZveOIWEZ8Fi1/AUi9ygc/71Ch3y204Dnua16VZ7izp d/u4DGyMCScCeY8OCg4I93bUeV5aXAs7N17m/+6Z5Hvm/57GthC+0nS0q7aOFckq /M4E+Qqt2/Cpz0100SS77FkiJ9aOF5XTS6VL8UFyhreVrs3v4YzXYP0ZEVvZ427N Y3R4RKEoTH1Xx0KAT5Ht6qtBPW1YOxNssIY4hNkMIn6bJGLuQ0Uk30AkHngGO2gx YXWbOA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549388; x=1787154188; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=r5gOWn0iU2Np2OD0qg7EzN8uuJ/lnbIhtPfVZ0n4xk8=; b=eQrF7wb+BfoLcnKnJtax1qPDM1xYZStsWNsjKewHJH3roWC+JD3M43+5pzBBxEXRV3 p6yBIZJa/bjueo1qaHXMyh8SRvlrjQlNkWBM7lxBunw8054Zd/x99cBadvcvkK6h5Tl/ 8BGHuMq9D/yFUV1rVX/nSuf+GIQOPlzLd1Z8V3jWYJ8zhSJlKyHdoKQH6yezb0LQW9kC AhxWWrcvxrPO+T1hgpE1UhiqJ00KwF7cue+3KngNUso3/gwSCHeZn23OdFiSNH/nhqqi AKam74lzBgmGoFOZaz6KPW9EETxPfG4mmQ2wFo2JiulQF9c3eROCJ4MZDBx9KYu7rAwk SDqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549388; x=1787154188; h=content-transfer-encoding:content-type: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 :content-type; bh=r5gOWn0iU2Np2OD0qg7EzN8uuJ/lnbIhtPfVZ0n4xk8=; b=B1QPSSD4r1N2QPKLgN5TZ9HhsMMESNH/r8tpzjo2yhbyEJUVRqekmqtG35tHg5EDe6 SCj+L/Vdv5ldnegZV6sJXJ1d4DN0KHQF4FOEMhDmYYlSFv+OA4JaQC83KxUl6CVC94tW zZfJ4/RieLSukC3iyGav17x/kcFzV3F7uKO3XwwqKLdtzGOLIeevjkttxZHpxUJB4rSO EdFqMOWe0jQ9pwm17GittkcEyc7ydr4vj2ggBusW0KItzfEGI30mgtlNV6iAlfi6CZvX h7F777Zep7eBDcMpFXOPJfFZoHMhnnS850JDiuHpbdm/bWfeO976OjCUqve1Lt+udetB yFHw== X-Gm-Message-State: AOJu0YwZJtKjN9Xc/RHfp24f9HWI9U2bYOMXbj7KieNhruJUmezLM4jo uGpds4P33eowWn0K31pCfAAb3Ye7DnuId/5OZDFQrG8cJ9D4kpnfUVJm075cFuNmt0y+TO4Xuq3 d6o+SGyBj97/lKZmL93YhBIC2IftqELTf9PLIOnta61KTbG2I+TLJVACWHGoUxHh68A== X-Gm-Gg: AR+sD11yPFbKxdxJurKLPw/8Ae7zUrPqSkSQQGMLWdIdm0VGnCbDsYZ/ox1jGNHy7Qs OBtOdNuBQu3mSXv7t3p3HKyJAj6nUp5MJ35t15OIuaCmWul3dYXh/NZIk3V9021mLmCKixXdRkM hDYYUJhJgIOPhjxSwSneg2TuaO9/w5DhWts5A9PpoDv2wGkLmYlr7bwbdY9E7VddnYnTrPM/r63 eMABw1Iwi4tapNZVQO15oO/s0bOtSO6WIprb8fuzhj6nXdzP/L7cKKAbj6Up7dM2okCPSDo69kR YJMexMNy11vi/23rntMktze/uHwYKObSbVt3IXckWFLGaF0+WX6/J8j0k8KAIqlNmp/fziJfP7l jyE9tM/uWWKu96PDsklkmd2NnAlumETWd9pXNpx8VGhTYGfhC X-Received: by 2002:a05:6a21:b90:b0:3c3:c080:71ca with SMTP id adf61e73a8af0-3cc3f218cc3mr8134603637.0.1786549388515; Wed, 12 Aug 2026 08:43:08 -0700 (PDT) X-Received: by 2002:a05:6a21:b90:b0:3c3:c080:71ca with SMTP id adf61e73a8af0-3cc3f218cc3mr8134536637.0.1786549388017; Wed, 12 Aug 2026 08:43:08 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Marco Liebel , Pierrick Bouvier Subject: [PULL v2 20/41] target/hexagon: add GVec overrides for HVX saturating add/sub Date: Wed, 12 Aug 2026 08:41:59 -0700 Message-Id: <20260812154220.1029828-21-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: mhK9e6rwYBOwFnhte1wdCLxsgpShl9_A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX3X728+CKg9/7 ASGLjn4fnsjewB9JNh3tfhfdir5Y6cwGemUM9XuUBxq1VVp2yv4e8uP3NOr0bO+ajFx5ti5EJGG xz0upokOaX+c5UlPaCJVfZwLNrDLcjo0Oz1G9cKGVn1a2Lo0W6Bx40v8Q7EuAloDkyTFL1ZwbNT IRQArNsLNgp7cOcUlAnI2QYk78SvQSnlEb4zI/FcqQAbymGFYmf50DuiC11NGZaDjS+ifExR1Ew bHkUOl/Qx43i2+4yb8efyxgHMOH+vGQnKtzsL7WwIulaUGM+oXLSilMVv/F3yB4h1yo9oDSC4rR hShvaRRT5Aug5alJts/9SLdpQK21yBsnnXJ+9IE2yoWrnhN9BgDqQDE2G52SwlgysqTFM/FVIJr VOFnid0zVv2/5LJTOMj7Ptdd27DIU7TLWldiLWuuX2Kv1BpPrOcGqruymq4vUAvn8HDq/Mci4LZ yNwiziiNVNC8fVeDvCg== X-Authority-Analysis: v=2.4 cv=K6ES2SWI c=1 sm=1 tr=0 ts=6a7c948d cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=CzzcSFvl921DoLjfDckA:9 a=0bXxn9q0MV6snEgNplNhOjQmxlI=:19 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-GUID: mhK9e6rwYBOwFnhte1wdCLxsgpShl9_A X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXwMJkHWYjGWsS hcq8eMNBhZUn7/yaoWIhhWac0l7h/rzzbgTC+1ZBov1lPQ76Jm0npfujC6+PX/nCVVHlOvjhIb0 Fb46EarzCWuiLZ4Dx3jefwYxUy9FyXQ= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 adultscore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549449584158501 Reviewed-by: Marco Liebel Link: https://lore.kernel.org/qemu-devel/20260807152241.1576334-3-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/gen_tcg_hvx.h | 87 ++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/target/hexagon/gen_tcg_hvx.h b/target/hexagon/gen_tcg_hvx.h index 0da64d467e6..289ce899598 100644 --- a/target/hexagon/gen_tcg_hvx.h +++ b/target/hexagon/gen_tcg_hvx.h @@ -234,6 +234,93 @@ static inline void assert_vhist_tmp(DisasContext *ctx) tcg_gen_gvec_sub(MO_32, VddV_off, VuuV_off, VvvV_off, \ sizeof(MMVector) * 2, sizeof(MMVector) * 2) =20 +#define fGEN_TCG_V6_vaddbsat(SHORTCODE) \ + tcg_gen_gvec_ssadd(MO_8, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vaddhsat(SHORTCODE) \ + tcg_gen_gvec_ssadd(MO_16, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vaddwsat(SHORTCODE) \ + tcg_gen_gvec_ssadd(MO_32, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vaddubsat(SHORTCODE) \ + tcg_gen_gvec_usadd(MO_8, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vadduhsat(SHORTCODE) \ + tcg_gen_gvec_usadd(MO_16, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vadduwsat(SHORTCODE) \ + tcg_gen_gvec_usadd(MO_32, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_PAIR_ADDSUB(OP, VECE, DST, SRC_A, SRC_B) \ + tcg_gen_gvec_##OP(VECE, DST, SRC_A, SRC_B, \ + 2 * VECTOR_SIZE_BYTE, 2 * VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vaddbsat_dv(SHORTCODE) \ + fGEN_TCG_PAIR_ADDSUB(ssadd, MO_8, VddV_off, VuuV_off, VvvV_off) + +#define fGEN_TCG_V6_vaddhsat_dv(SHORTCODE) \ + fGEN_TCG_PAIR_ADDSUB(ssadd, MO_16, VddV_off, VuuV_off, VvvV_off) + +#define fGEN_TCG_V6_vaddwsat_dv(SHORTCODE) \ + fGEN_TCG_PAIR_ADDSUB(ssadd, MO_32, VddV_off, VuuV_off, VvvV_off) + +#define fGEN_TCG_V6_vaddubsat_dv(SHORTCODE) \ + fGEN_TCG_PAIR_ADDSUB(usadd, MO_8, VddV_off, VuuV_off, VvvV_off) + +#define fGEN_TCG_V6_vadduhsat_dv(SHORTCODE) \ + fGEN_TCG_PAIR_ADDSUB(usadd, MO_16, VddV_off, VuuV_off, VvvV_off) + +#define fGEN_TCG_V6_vadduwsat_dv(SHORTCODE) \ + fGEN_TCG_PAIR_ADDSUB(usadd, MO_32, VddV_off, VuuV_off, VvvV_off) + +#define fGEN_TCG_V6_vsubbsat(SHORTCODE) \ + tcg_gen_gvec_sssub(MO_8, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vsubhsat(SHORTCODE) \ + tcg_gen_gvec_sssub(MO_16, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vsubwsat(SHORTCODE) \ + tcg_gen_gvec_sssub(MO_32, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vsububsat(SHORTCODE) \ + tcg_gen_gvec_ussub(MO_8, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vsubuhsat(SHORTCODE) \ + tcg_gen_gvec_ussub(MO_16, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vsubuwsat(SHORTCODE) \ + tcg_gen_gvec_ussub(MO_32, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vsubbsat_dv(SHORTCODE) \ + fGEN_TCG_PAIR_ADDSUB(sssub, MO_8, VddV_off, VuuV_off, VvvV_off) + +#define fGEN_TCG_V6_vsubhsat_dv(SHORTCODE) \ + fGEN_TCG_PAIR_ADDSUB(sssub, MO_16, VddV_off, VuuV_off, VvvV_off) + +#define fGEN_TCG_V6_vsubwsat_dv(SHORTCODE) \ + fGEN_TCG_PAIR_ADDSUB(sssub, MO_32, VddV_off, VuuV_off, VvvV_off) + +#define fGEN_TCG_V6_vsububsat_dv(SHORTCODE) \ + fGEN_TCG_PAIR_ADDSUB(ussub, MO_8, VddV_off, VuuV_off, VvvV_off) + +#define fGEN_TCG_V6_vsubuhsat_dv(SHORTCODE) \ + fGEN_TCG_PAIR_ADDSUB(ussub, MO_16, VddV_off, VuuV_off, VvvV_off) + +#define fGEN_TCG_V6_vsubuwsat_dv(SHORTCODE) \ + fGEN_TCG_PAIR_ADDSUB(ussub, MO_32, VddV_off, VuuV_off, VvvV_off) /* Vector shift right - various forms */ #define fGEN_TCG_V6_vasrh(SHORTCODE) \ do { \ --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549448; cv=none; d=zohomail.com; s=zohoarc; b=lQe6bbqs6FJ0dhAF3awdJvl6KzOzbzjvLIgRY/OITJnCCVGvD9CEpBTuq9O3HSMabZpkIU5wLDMbeernBk63NIZRGbmFyFfqRocNG02DoaBkLazZo9bz4m1i8/fMU0TfOjlqKP4QMIOrUwR60YorgMYEMcpbw8GXnTAGU96v/Cc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549448; 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=c02fVbhAOudqyZ1yr7+yFyrl17CR8xGkMKQ8YOwRWdU=; b=Yz2EuIQ81obdvytfxJaturWx/ZPrxiw6KYRyPt+TMlAx2SokZhAKThetqbbhgy9aDemzfO48Gv7MrsAlYyEHdfV7c6qj8707UUB76+jr+ndUKe2LZOYw8QteUZHAY7zJUuHAz88otOvpHv6bqOpGrjwVL2onngOVMP7oi8SWcB0= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549448910403.99214621194767; Wed, 12 Aug 2026 08:44:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB76-0004pj-Iy; Wed, 12 Aug 2026 11:43:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6x-0004gL-Ly for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:24 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6w-0000LO-3P for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:23 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbpiO3875499 for ; Wed, 12 Aug 2026 15:43:11 GMT Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hj1jst1-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:11 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cbeeaabcadfso547903a12.1 for ; Wed, 12 Aug 2026 08:43:10 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= c02fVbhAOudqyZ1yr7+yFyrl17CR8xGkMKQ8YOwRWdU=; b=JFPGjDW0YVgasHJq Ax9Dec1PeEuSazEZ4UyxZh83KFFDKi0N+aDu9F3ctXsi/i0bz1gro/QtuxWf3iRQ OekXGp+WeMv0Lrz1zB8CHcFgy8L0kIKh9l+YWGkI5Bk2OiCd16SGHrBSX/4eKOO8 ipqDwP2I183ES0zFOE1sV4ywHX5p3mabujDvFg454H2FZKOwa3tzSu7wDLCNNu/d oy2KtNEpYlMmyMyonBwb2cTjnskOjbLLcohYjfNYrQcKfskiwKF3Yeo0Yjdfcp2g oF1ygoTtdGbpjCCThDnYQC5eawnA3UQvskAFtmi4ZgSP16pdLogit1f1AJsui3WO ETigZA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549390; x=1787154190; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=c02fVbhAOudqyZ1yr7+yFyrl17CR8xGkMKQ8YOwRWdU=; b=RUlwtGY2VN3/xM57Cc0X4zxcL6sA1lBwRdA68buobsqTMKXah1pQWAQQkwAlaskc2e FDwyABaabZx9IzF1Q9sutd7quPWduChBkRLkwp72Zx8MrXgqab+RbVW84MlNNPeHL6Fw CGQUxUIhZT/vfVjh3xM3qZCOUQD88c7vwK07RcZsTQ0E1fv2x/RXd2hI5j6wp3oBrM6i QrXOZzrRKR/95XAGHZMSwdcBLjRI4SVRI1nkMcjcKLUM7+y1haJr+IbLV3kissbWbAgk RHt63tCzV0/jUyMWVVyNxYHdvFGTDsA7LzTGv3LfiQZTFgiSh1Km7u2PNKJHYyM561wj Tt1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549390; x=1787154190; h=content-transfer-encoding:content-type: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 :content-type; bh=c02fVbhAOudqyZ1yr7+yFyrl17CR8xGkMKQ8YOwRWdU=; b=lTNt/h+dLcakb4F6EdYhq/6MduftmXjA09LJfAoRxTLnKi9b/uaiB9Nlbshz0f2PPl h1mWAwjmTXYUCcOoKYPCKYUQzzxxI2SQ9DerVpPXkB3olP0aNjr8x9efjNb2CWonv/3a sia+7Gj+27m0KmkuYTkCqC4L+HUHJhxnGiLtTkdp1cA6nanLhtDNYG8lkTzZf3tWC0sD oAgdZ0FWu5ClCC76oEuvOSkJfYJ48/caS6RWuVxOwPnpS7iNfgkKmSdr1wI2RmyjOPSN KoS/H6rrw9qxapjWsf20Kcj76/03JgWGB5DIz9sQYf963Y1WHt7N9bY7ntNVO3U3d7GO rSiQ== X-Gm-Message-State: AOJu0Yx6qv+Mo/B/ZIEy093IyoF+AKuYTOp1gFOlOp1f3gFCdGWIBL1X oPBuxgsWdyWBOKRl/wXgnn7zpdI2741qhT2kdZJoy3211xBMqSf5/pBaOYZVcug8bXgscqagtxb 958M4zb1j4Wp0/Y+Xk3DxZ8gzo7UXZu7FD5CSiJBsJVG5jK+6vTt1UjL9PsqDmIe9bw== X-Gm-Gg: AR+sD11A+g4UNWqj+awevQhOJbQLxjL9LYMGnv/1U5TLW2iJjhwCNdAmhrD6lAcAxtb i6ku1hoZNvJ8wz+dt3qeyKTCwlirRkNdnoaqLFirDudO9m/JglvxAw6Gp3L+1DYbM/ptGtXA0Rj ZvuZ9XSFtw/FRYS6X9/A6IzO7+mc6rXneEXf7Bo2JmEeFes2YoQbjlcnVCsRUCVE7aHZk803Vco PT+33hLopK96LCXBECoqLNYU5tL/gx48unC855OpOSXpOlnRrwyt2C+uptRHkVxc/3O+3qBRUe5 4nWajNG1vz6SRI2dSBkmWknCHyIKJ9UCKFkpwmmb7Vp+C8njORrT+8EdacwPrjn5tOogo6/XE9F R6XkCeINrY0R3DOp442xUnO8ILPZ3yegh45L/5vg1qnoqh+MB X-Received: by 2002:a05:6a21:a342:b0:3c3:a140:9392 with SMTP id adf61e73a8af0-3cc3f20dec6mr8139821637.0.1786549389911; Wed, 12 Aug 2026 08:43:09 -0700 (PDT) X-Received: by 2002:a05:6a21:a342:b0:3c3:a140:9392 with SMTP id adf61e73a8af0-3cc3f20dec6mr8139764637.0.1786549389466; Wed, 12 Aug 2026 08:43:09 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Marco Liebel , Pierrick Bouvier Subject: [PULL v2 21/41] target/hexagon: add GVec override for HVX vmpyih multiply Date: Wed, 12 Aug 2026 08:42:00 -0700 Message-Id: <20260812154220.1029828-22-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: IEqWf_8WTiuBf7PPhhXfZ73Z-C6oMHgW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXw/YWmCu+HLWl ZggUCozST9I8DThUMWizpZE0LKJru0lFxXa6Ue5Lliew7SKH2ivIGLYCto1MpghVRFhLdz8jr9x 1EdCKknyYOK9i00MNFDb4WIX6lhXclsDmXTtkP/oRyDQ0dWlU6qOjnQWLjWdPBpAFZFy+7q84+C Cp9EwtgEjRH3fXheyAU3QoXhkVJJS0qhqrNw9qPTOltkwqvcjFOjeHWhtQcDvmpTzL05T9Vfs2x dStxqMnX07921hdrvY98Hg/ebLRiRnuas/jtlh8mwEnYuvRWrMkWIFhOSG7vSRdcLM1NtHHFa1Y RYJpM7pKIOrOCaYGDjWbbNvb6D/IN7t+V1FQt5ZwqlyxWTWAXiMEEVJfUK/qCnXMxPp5KIUeJ1u /qfVLOR8phXED7g3H7h0thu2cMFetFVuASAPXMzBMP2QArgoyWNiCWtFt9jRFaAL6mJtIbogBaD Z5mJUZ/1HLcjP9rGgWw== X-Authority-Analysis: v=2.4 cv=K6ES2SWI c=1 sm=1 tr=0 ts=6a7c948f cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=XUVkopRKjuBywFHujjMA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-GUID: IEqWf_8WTiuBf7PPhhXfZ73Z-C6oMHgW X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX6Ek0Ny4lDAIn Lu0pam/lxcb+Fky6lm4ljG7OvhS08Qgwza3xMALXiZpbwHJ0/FVjMzGFNWREdsOUKe56TeMfbxj +Jy2LOGy3G7AdyCpQtQPEX9Vqcac/ms= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 adultscore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549449549158500 Reviewed-by: Marco Liebel Link: https://lore.kernel.org/qemu-devel/20260807152241.1576334-4-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/gen_tcg_hvx.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/hexagon/gen_tcg_hvx.h b/target/hexagon/gen_tcg_hvx.h index 289ce899598..7e5372a7642 100644 --- a/target/hexagon/gen_tcg_hvx.h +++ b/target/hexagon/gen_tcg_hvx.h @@ -321,6 +321,11 @@ static inline void assert_vhist_tmp(DisasContext *ctx) =20 #define fGEN_TCG_V6_vsubuwsat_dv(SHORTCODE) \ fGEN_TCG_PAIR_ADDSUB(ussub, MO_32, VddV_off, VuuV_off, VvvV_off) + +#define fGEN_TCG_V6_vmpyih(SHORTCODE) \ + tcg_gen_gvec_mul(MO_16, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + /* Vector shift right - various forms */ #define fGEN_TCG_V6_vasrh(SHORTCODE) \ do { \ --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549482; cv=none; d=zohomail.com; s=zohoarc; b=FkPwqIyaYnOIRhWEdDjhbdB3T/DKyQmIsMuAfA7Lq9MIuAoYzuLJ0GrSYUWnK9HLVVx0GMQoOPg5qwuE0VQdioVh6HUBG/be+XDmyURAGdQd5Q+Ks+kmyijLGwvvVSQ6wg/F6l31yfZnoxsol+7s+V59eN5PfikeyCqMNmtq5Bs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549482; 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=foz2gkXfdvVVep31fHqvAmr8hMzZFT6+3xOui6QlmX8=; b=Q80mXtRCVXDoKgLLWoDuxNCgoPeh5cH3IohzKAtyp38NfeYPxdzyio36+fYxnPuCmkDmx00nwCXTpoQmYUpsJtxzJPvgyJOncH6g4iJK5bvbtaw7ICG4aq1dkfz4Dx1NgNcmQm28Sv6ZqN0izSofoZSiaS46ZJCm1c+T8I0Cg5Y= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549482178926.0274625822193; Wed, 12 Aug 2026 08:44:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7L-0005Fg-9W; Wed, 12 Aug 2026 11:43:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB70-0004hI-17 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:26 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6y-0000Ly-7t for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:25 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbvHK2728922 for ; Wed, 12 Aug 2026 15:43:13 GMT Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hfw2rhc-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:12 +0000 (GMT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-38f0fe57470so23048a91.0 for ; Wed, 12 Aug 2026 08:43:12 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= foz2gkXfdvVVep31fHqvAmr8hMzZFT6+3xOui6QlmX8=; b=oI4rF3LcJIbIRjJM Oau8dqh5YXrHEqIlAgAwJxXPhcW1G1kgmWrVw3mefWBma51uF/dJiD/v5hMWa/+5 lDcYzQmdgukq/p5qAk5DWMaEpfvYEJXl+IzB31CFGQuO5Ihdkgoy7H9/wiQWzJYR MT0l6sP/UAzhGcIidDjjiFKuBHPv7GNou7JfumWVBQUA7+yQOFsx4Uw71CXwgJ21 nK36dTqs8tTSNJ242PKU4jzbUN8fiNMylSZ9+91k2uXGzgFV3FTxEZRNvx6JkxfU 3Fs6R3LdaYo4Wo52bDlo84UZkYgp/BWBp8RQ4PX+lrn2QqUa9NCC4fsQgtNBfbLQ U7VCLQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549392; x=1787154192; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=foz2gkXfdvVVep31fHqvAmr8hMzZFT6+3xOui6QlmX8=; b=YfyZrfm6enyEWTMM6Gbt4J8Iey6eH01pchZxu6+xKvVgHWMQMXFOQC2tNa+XEumJW4 R42lyJ3MXZmMs6ilgRzU2L2QYTOrrJi1jcQh/uqHEq0CGlaiflCqeQJFnLQHfScG51i2 OFUxwEnwKOJfbbCF2N1NOrY6SnmO2aAj6ADE0gStA8ikpVoX8W/nL7d4iGWCt2QKkzyK aBL7AjeEHjWpebHZU3EfLvt7H11RR5RKBsfEpXpzbLcCivSZwHKHKQBpPr7ZPaQA00Ea S1ES2Cp2cpRXcyWTSe5m3hVs3pMow8xNPOKr4qsNQqaCNyzMTysluqqAbGC+KojU/e7l KPzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549392; x=1787154192; h=content-transfer-encoding:content-type: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 :content-type; bh=foz2gkXfdvVVep31fHqvAmr8hMzZFT6+3xOui6QlmX8=; b=WBwMhUw4WKS8mX/AR15pHc8Nnsx1ky+o2rhu9N9MpE/d7aEbHpcfMWsl3UPc45zoaA TkTV8RWT3fZoH239gxF/RrCyTfTrmEfMLGmZXbgFtg9GhZh3vkOeZ80okgDJmfBuzAME 0/IQGHv0duZlTPTkA/4KT99ZH3MLgBnK0CE1BPD5EKXikturD0Zv1saep/blV6yrJeYH nMAPKRydGZZDbHTK2MCi/77YnoFxZlQ5hrO2rj6pLkZarVV0Fxst2LntZZY2KKM/ljHu bwLUxBsrpS9HL5PA1ZOo7YBtYTGIsFE4r/nYl3Lmo3YqkTGWJYUtMjodSz5GhAdIBPxD A0HQ== X-Gm-Message-State: AOJu0YyAZ3oP/JiW/0W5aRbDYhC4KnTnT+wQQR+3mXwBKuxwv+x2MskC 1obFyza9P6OH5TmPEz4FMPqRtWm5w4NCzAe/SZcWmVgMBs/cSvbdVEoP8qc8myYYK8JPJvriDe9 UUjY5vpNIRQU6nIcU2KUfwNSY6Wlemx1j5IoDwqZsnntyTHPV0B1FwND9kP90GeQzEA== X-Gm-Gg: AR+sD12OZgZl7HZgQHWak9aDs6y1cdt5ddvacGI2Oy7GEu5ZAynr8nzDjZFNG2yV027 d8UIEwylcKx5V4I8ygX3jdT3pKpF5W2lAuXusRqoW/rzKTLKBrrst7eQ5ThssxTAaZ2eNcBTE05 WmJgjmJNQu+30wnC4SqNRBQHPiVAfyzLmlqX/A/Y8hBNaIc7fH2A8ZoON4gjo2ac83xAXZagTnK W6XnZFLV4VvbJJkRg+NQj8BImtjI4msEkzM0pJwJlZxq3rvTGA9X5Hj22R413BYDsVk2qcnwLLw rNQttruotmgYmmiwt4Zv9N3A1GNUDCXagDfUfzKN8BW8+FnD2aTVZ7E7CODNkDcK3Ww1aElDQR0 mHz4p24prJJfRie1S5f+ztywWeLdJ4auSF6+aWeUTceGLC3g7 X-Received: by 2002:a17:90b:380a:b0:380:ce69:2669 with SMTP id 98e67ed59e1d1-39319830421mr70020a91.9.1786549391616; Wed, 12 Aug 2026 08:43:11 -0700 (PDT) X-Received: by 2002:a17:90b:380a:b0:380:ce69:2669 with SMTP id 98e67ed59e1d1-39319830421mr69983a91.9.1786549391021; Wed, 12 Aug 2026 08:43:11 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Marco Liebel , Pierrick Bouvier Subject: [PULL v2 22/41] target/hexagon: add GVec overrides for HVX absolute difference Date: Wed, 12 Aug 2026 08:42:01 -0700 Message-Id: <20260812154220.1029828-23-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX7xvCauJyK9in CDSZDGbwL/w0N07kUZfMBQVIpCRNnqljOqIf9UGrLx8geeCa0+SoKcViS2fBj4oamb79p+DliW9 eVM1V+ipS9ras6cNM9M1IJho4SAyfbQ= X-Proofpoint-GUID: p5GCWJsMvxWEtZjMmDGdYsNDrNrOukhi X-Authority-Analysis: v=2.4 cv=fpDsol4f c=1 sm=1 tr=0 ts=6a7c9490 cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=6VF6NR2_gJNtFbuUsaQA:9 a=QEXdDO2ut3YA:10 a=mQ_c8vxmzFEMiUWkPHU9:22 X-Proofpoint-ORIG-GUID: p5GCWJsMvxWEtZjMmDGdYsNDrNrOukhi X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXxn8n6icBBa+S OWyvvTDK3UtgqAExVOmxMeS+UhJLkrg7fvSUV3F9lVGJFleDpytET9ti4BoJehfgyMqdtGh0kzt uIBloYvGKbxqfOy+4vbwfCexhzXEi3NrSX7D/tKdDdOd7jIwHOZRjOMZ3jXkYAlSVZJvyeUhEH5 V1hWZvia6GGcF15Wjqb3DVkHRjX/xUX3+0/ZEvWKuuVCjOZgGs26AuRo1jkVFbQerx9dx5uwlPG 1bacPnHs+HVEuUlM/EfXwz59LiOMvCD8SdxOJ1kaqxDEzDF1skWOWR29eXqMzHAmQKTtmG8fIsf oeBC8QWUv48PA2PLCyJLS16ySSThh3DLZlIinikPptm+aki8ALYkA+6cK15p5zDlq2UG7ZxWSyB bbUcpUsCSKIdjJ94LgvtjKPM7O3FR0MWW3nU0mkhZoT0GfJ+IeQKqzvo/8skTolC2Te5LZei3dA LnKUgkq0ecBxYz5ikaw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 spamscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 malwarescore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549483771158500 Reviewed-by: Marco Liebel Link: https://lore.kernel.org/qemu-devel/20260807152241.1576334-5-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/gen_tcg_hvx.h | 16 +++++++++ target/hexagon/genptr.h | 4 +++ target/hexagon/helper.h | 5 +++ target/hexagon/genptr.c | 70 ++++++++++++++++++++++++++++++++++++ target/hexagon/op_helper.c | 21 +++++++++++ 5 files changed, 116 insertions(+) diff --git a/target/hexagon/gen_tcg_hvx.h b/target/hexagon/gen_tcg_hvx.h index 7e5372a7642..cbf84a8caee 100644 --- a/target/hexagon/gen_tcg_hvx.h +++ b/target/hexagon/gen_tcg_hvx.h @@ -326,6 +326,22 @@ static inline void assert_vhist_tmp(DisasContext *ctx) tcg_gen_gvec_mul(MO_16, VdV_off, VuV_off, VvV_off, \ VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) =20 +#define fGEN_TCG_V6_vabsdiffub(SHORTCODE) \ + gen_gvec_uabsdiff(MO_8, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vabsdiffuh(SHORTCODE) \ + gen_gvec_uabsdiff(MO_16, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vabsdiffh(SHORTCODE) \ + gen_gvec_sabsdiff(MO_16, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + +#define fGEN_TCG_V6_vabsdiffw(SHORTCODE) \ + gen_gvec_sabsdiff(MO_32, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) + /* Vector shift right - various forms */ #define fGEN_TCG_V6_vasrh(SHORTCODE) \ do { \ diff --git a/target/hexagon/genptr.h b/target/hexagon/genptr.h index 5d096774102..f498398367c 100644 --- a/target/hexagon/genptr.h +++ b/target/hexagon/genptr.h @@ -59,6 +59,10 @@ TCGv gen_get_half(TCGv result, int N, TCGv src, bool sig= n); void gen_set_half(int N, TCGv result, TCGv src); void gen_set_half_i64(int N, TCGv_i64 result, TCGv src); void probe_noshuf_load(TCGv va, int s, int mi); +void gen_gvec_sabsdiff(unsigned vece, uint32_t dofs, uint32_t aofs, + uint32_t bofs, uint32_t oprsz, uint32_t maxsz); +void gen_gvec_uabsdiff(unsigned vece, uint32_t dofs, uint32_t aofs, + uint32_t bofs, uint32_t oprsz, uint32_t maxsz); =20 extern const target_ulong reg_immut_masks[TOTAL_PER_THREAD_REGS]; =20 diff --git a/target/hexagon/helper.h b/target/hexagon/helper.h index 033e5619d6b..78dc28ca9e5 100644 --- a/target/hexagon/helper.h +++ b/target/hexagon/helper.h @@ -108,6 +108,11 @@ DEF_HELPER_2(probe_pkt_scalar_store_s0, void, env, int) DEF_HELPER_2(probe_hvx_stores, void, env, int) DEF_HELPER_2(probe_pkt_scalar_hvx_stores, void, env, int) =20 +DEF_HELPER_FLAGS_4(gvec_sabsdiff_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(gvec_sabsdiff_w, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(gvec_uabsdiff_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(gvec_uabsdiff_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) + #if !defined(CONFIG_USER_ONLY) DEF_HELPER_3(raise_stack_overflow, void, env, i32, i32) DEF_HELPER_2(swi, void, env, i32) diff --git a/target/hexagon/genptr.c b/target/hexagon/genptr.c index 12813f48bf9..2a98b13b714 100644 --- a/target/hexagon/genptr.c +++ b/target/hexagon/genptr.c @@ -37,6 +37,76 @@ =20 #include "genptr.h" =20 +static void gen_sabsdiff_i32(TCGv_i32 d, TCGv_i32 a, TCGv_i32 b) +{ + TCGv_i32 t =3D tcg_temp_new_i32(); + + tcg_gen_sub_i32(t, a, b); + tcg_gen_sub_i32(d, b, a); + tcg_gen_movcond_i32(TCG_COND_LT, d, a, b, d, t); +} + +static void gen_sabsdiff_vec(unsigned vece, TCGv_vec d, TCGv_vec a, TCGv_v= ec b) +{ + TCGv_vec t =3D tcg_temp_new_vec_matching(d); + + tcg_gen_smin_vec(vece, t, a, b); + tcg_gen_smax_vec(vece, d, a, b); + tcg_gen_sub_vec(vece, d, d, t); +} + +void gen_gvec_sabsdiff(unsigned vece, uint32_t dofs, uint32_t aofs, + uint32_t bofs, uint32_t oprsz, uint32_t maxsz) +{ + static const TCGOpcode vecop_list[] =3D { + INDEX_op_sub_vec, INDEX_op_smin_vec, INDEX_op_smax_vec, 0 + }; + static const GVecGen3 ops[4] =3D { + [MO_16] =3D { .fniv =3D gen_sabsdiff_vec, + .fno =3D gen_helper_gvec_sabsdiff_h, + .opt_opc =3D vecop_list, + .vece =3D MO_16 }, + [MO_32] =3D { .fni4 =3D gen_sabsdiff_i32, + .fniv =3D gen_sabsdiff_vec, + .fno =3D gen_helper_gvec_sabsdiff_w, + .opt_opc =3D vecop_list, + .vece =3D MO_32 }, + }; + + tcg_debug_assert(vece =3D=3D MO_16 || vece =3D=3D MO_32); + tcg_gen_gvec_3(dofs, aofs, bofs, oprsz, maxsz, &ops[vece]); +} + +static void gen_uabsdiff_vec(unsigned vece, TCGv_vec d, TCGv_vec a, TCGv_v= ec b) +{ + TCGv_vec t =3D tcg_temp_new_vec_matching(d); + + tcg_gen_umin_vec(vece, t, a, b); + tcg_gen_umax_vec(vece, d, a, b); + tcg_gen_sub_vec(vece, d, d, t); +} + +void gen_gvec_uabsdiff(unsigned vece, uint32_t dofs, uint32_t aofs, + uint32_t bofs, uint32_t oprsz, uint32_t maxsz) +{ + static const TCGOpcode vecop_list[] =3D { + INDEX_op_sub_vec, INDEX_op_umin_vec, INDEX_op_umax_vec, 0 + }; + static const GVecGen3 ops[4] =3D { + [MO_8] =3D { .fniv =3D gen_uabsdiff_vec, + .fno =3D gen_helper_gvec_uabsdiff_b, + .opt_opc =3D vecop_list, + .vece =3D MO_8 }, + [MO_16] =3D { .fniv =3D gen_uabsdiff_vec, + .fno =3D gen_helper_gvec_uabsdiff_h, + .opt_opc =3D vecop_list, + .vece =3D MO_16 }, + }; + + tcg_debug_assert(vece =3D=3D MO_8 || vece =3D=3D MO_16); + tcg_gen_gvec_3(dofs, aofs, bofs, oprsz, maxsz, &ops[vece]); +} + TCGv gen_read_reg(TCGv result, int num) { tcg_gen_mov_tl(result, hex_gpr[num]); diff --git a/target/hexagon/op_helper.c b/target/hexagon/op_helper.c index 8fb3d43c33b..23894ff3d28 100644 --- a/target/hexagon/op_helper.c +++ b/target/hexagon/op_helper.c @@ -35,6 +35,7 @@ #include "mmvec/macros.h" #include "op_helper.h" #include "cpu_helper.h" +#include "tcg/tcg-gvec-desc.h" #include "translate.h" #ifndef CONFIG_USER_ONLY #include "hw/hexagon/hexagon_globalreg.h" @@ -1961,3 +1962,23 @@ void HELPER(pending_interrupt)(CPUHexagonState *env) printf("ERROR: bogus helper: " #tag "\n") =20 #include "helper_funcs_generated.c.inc" + +#define DO_ABSDIFF(NAME, TYPE, UTYPE) \ +void HELPER(NAME)(void *vd, void *vn, void *vm, uint32_t desc) \ +{ \ + intptr_t i, oprsz =3D simd_oprsz(desc); \ + UTYPE *d =3D vd; \ + TYPE *n =3D vn, *m =3D vm; \ + \ + for (i =3D 0; i < oprsz / sizeof(TYPE); i++) { \ + d[i] =3D n[i] < m[i] ? (UTYPE)m[i] - (UTYPE)n[i] \ + : (UTYPE)n[i] - (UTYPE)m[i]; \ + } \ +} + +DO_ABSDIFF(gvec_sabsdiff_h, int16_t, uint16_t) +DO_ABSDIFF(gvec_sabsdiff_w, int32_t, uint32_t) +DO_ABSDIFF(gvec_uabsdiff_b, uint8_t, uint8_t) +DO_ABSDIFF(gvec_uabsdiff_h, uint16_t, uint16_t) + +#undef DO_ABSDIFF --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549509; cv=none; d=zohomail.com; s=zohoarc; b=b8piEMe8gE5wgTQZxk5bl5sVtMqdzbhSk/igaXMxIAi3mpZiYgNErwOto82ewFxTcvz4iyiteWfPRtPz2GWu13RXOkNOH4TSqh7AaYnIEh2/hkZhtDBPYm5xWisotj+eGRkUkVoYp25K3OayNM6l1afzHmMAfePa7tY5ZII+9+U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549509; 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=LePt616kEWNKtDfBxI/yurrB9YOmVQ6VIqf+OGtl3Ng=; b=R4pMhpl6yVVUSONM9X7v2iddkAQ8C2MLbU3lwiXiOPUqdHpmLPepjfVrdsA78+5nx0MSpjLp98Jad4R5J74msbrP0xK338M4qo+i8t+vaojBCvS+KkGNx1qEBUQ0oNSZLDBxabRQsepgAJUcW8oZxdbsazkGj+zqVK3m32iP6aY= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549509467218.9753487013337; Wed, 12 Aug 2026 08:45:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7J-00058l-9J; Wed, 12 Aug 2026 11:43:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB71-0004mS-GL for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:28 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6y-0000M6-Ki for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:27 -0400 Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbqug3949947 for ; Wed, 12 Aug 2026 15:43:13 GMT Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hj2tsp9-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:13 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38e8e864ef0so1934660a91.0 for ; Wed, 12 Aug 2026 08:43:13 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= LePt616kEWNKtDfBxI/yurrB9YOmVQ6VIqf+OGtl3Ng=; b=SHAlSiNALGwD0AjN lOF8aRwDpYaWiEI4d0wEhY+XmTakV6pliENKE8IM5+Czw6aeJdxUPzZVxZnS/2z0 2yaF+/BIOm2pAefQawmNWLuDqSRRpAEkIOVk3LbbbHVWZrfYqnIyYwPDxtXd5aNf safO9xclLErkqT27leFOJde6TnjQr8t9oatjfe/9XcytsvG8pTKGA7B1YnbAodNl Zy2rpffFT8PX8VEEx3/qGhpnZHvt7q6ak5XeZh0UICDhRPfkLhrvGi47vuTl7bJU 0IeMFEA2ebWwzCABIaLK32WGu+MQqybamv/uqzksqGtIKgh94Khh+9jkZeiewysz S3Adwg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549392; x=1787154192; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=LePt616kEWNKtDfBxI/yurrB9YOmVQ6VIqf+OGtl3Ng=; b=jEhAclGVZDKG1wCHjf/nSkWLhfV4bnHghpMdvpcx7N6eDVsfDrlTPhrbQ0jwwemcDU 1WSvspWpoXp5sWwVDgKSp3Jn58jEpTfjXsaL+u2U0OOvSk20AvmlZNIAYpB0wFsbr4mQ NmR1EOT/E+4xFVdd0ASWQ/eIkEIz0q72ZEhyiBqXQTXBuNSUP64lGDJfNfqk/HAQ7XkW CaupLALSS2sf0wH3CFAXhdgug3pmI9zLSvedqYpkVcHdXdxLXcN/uW2d6I9ZznJM5/5P LyBrnyKt+6vS5IgSd3uFCKOOK9YozAR7kRjVzVn8Igc+uw+bBc/OANrdlHfzVWl1ipew 0GRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549392; x=1787154192; h=content-transfer-encoding:content-type: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 :content-type; bh=LePt616kEWNKtDfBxI/yurrB9YOmVQ6VIqf+OGtl3Ng=; b=NyR2iU+7X0ZnUERqQoOY4v+9d0cI7X2Qcp/5iy7laMbCzJhMn5ce8PboVn4zwXgYXG fuw9v7np++SSt/0AqND8edVadU97j9wpLnzuJg6hK0ARmBdYO35TekApSDOX7ERZaKTR b4m0z2ZX3pqAoU1dIggXwXgSiNOEO5UtOhRP/6b5ztKfsGBh73NUkUneWMF6D722upDZ c+tR4BevHlcWrf0pQ4noN5yIYdrEezURlKI8cmvissjNqIOkWdL+0k4zAllEX7GOoOwS +TNzlmOzT/eoi5i+WcoaIRfN02cQyBoRgpzEtyp8n0arKxMGBu26hQZTmpW86a52f+2q IQSQ== X-Gm-Message-State: AOJu0YzdlL+YAo7x8eI2jtmfj8o4vwOeejUuX0KT1aBKxVYEonuR8MpX 4x4egd5d0Yl7MmnKILyfGnToMBsDIpWnkb9UvwVZ22BF9sCNVdz5PgTB6azpehKeEfLFJMRLQsl V8L5h3pOfLubsUdXyI6681awylz6kf755OVLb17AMqgknQSx6wEDfNkiy3fvDC1SPDA== X-Gm-Gg: AR+sD13EZhEO4L4dak43jyhue6BAJ5X/op74rkBIDWcWmio4yzeLptTZ0UN1pOdcc1D 5VD680rpjEkT4W4je8MZ+t0n4XbJaNUTGzDy1/6h/wosFhMxhJeQmaCJ9z86/LpiDzxopFn8Mym DAeZTavndhGQIIJyHVB6iTL+Ddt+4phOIT+pjAOkLI1YZBySiomB7CXpjI6oAyp6WjReex4zCcE gLHydk2j3IZfBDFUuK5vik3SWtlnCPXQrYF1qGsr5y0Zqc/jFWRXeh9cQFzI+OuRqAvYaFsn0Eu GCo/W4wWors4JKkof54iP6JJ0JVMRADZKc/dis6c71KcA5eM8SgIc4d/HB/frtTwhk7mSAphXDB rXfvs7CGuSnG8Z01f4wd5vNSgBF/c4p+pkuDURVtt7Mccibg9 X-Received: by 2002:a17:90b:3f85:b0:38d:fda6:4873 with SMTP id 98e67ed59e1d1-393012c974amr7486185a91.10.1786549392469; Wed, 12 Aug 2026 08:43:12 -0700 (PDT) X-Received: by 2002:a17:90b:3f85:b0:38d:fda6:4873 with SMTP id 98e67ed59e1d1-393012c974amr7486105a91.10.1786549391960; Wed, 12 Aug 2026 08:43:11 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Marco Liebel , Pierrick Bouvier Subject: [PULL v2 23/41] target/hexagon: add GVec overrides for HVX vector average Date: Wed, 12 Aug 2026 08:42:02 -0700 Message-Id: <20260812154220.1029828-24-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=a8EAM0SF c=1 sm=1 tr=0 ts=6a7c9491 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=4RYLHjVto7nR_YSnh5AA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-ORIG-GUID: nisnE0e1JLNdMPSaJI1uW8soYiPWs_tY X-Proofpoint-GUID: nisnE0e1JLNdMPSaJI1uW8soYiPWs_tY X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX2jonTGpA1PJj +OmXnhPLah9+I8v9D3MmNBBSQFYTKgNrEVsAf0E+SDRsUTAwYpbQ5fWSGf3l4aCXzScenB3bgvu DJliw+1oEXNFJwLs4EuYB2GeH3XVGfg= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX+7hleRjFiLiQ AgjQ7jG11zIdfl56V5Cg9LCuy2VnDU1ERul4y953Lt/1Sw+mQ+sua357L7HaAvHcK3RlKConlcM l7tUZA2jMgt522CuwdpoQV5DdPpLv5o3q3gf1MwIyOyTEsB92fiomTtX/goSckC583UUFLEC+kI 0tKvKElw/OCSfgTn67IVJUxdiyffF7dO0s1n/b3g6MweF/URL+0WYHUWrZqnCoI3JV11mihgSJP 99K5dgDvkyakedBfRuogk7ZfFa7lIo9bIlC+OpM0wGv+71AD+O1tlp93c9fG8IIpCtgOAtgbhT+ LA6T6pERNslUg3bXg1LyxnT+R94yLoGrHBPtxHYqw7TArfAXuiNhGOakdXA29SzsNo9HKEsH2+u sNgdpeIEC4FOeaYJIVe8Fvb/60421NfP5jfQC5S/w5/C0ihq/ZJ/uZq1hxrkeCpjvgfG0OD9YdO Nebi05ELDnq7rBb2rWQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 phishscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 adultscore=0 spamscore=0 malwarescore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549509954158500 Reviewed-by: Marco Liebel Link: https://lore.kernel.org/qemu-devel/20260807152241.1576334-6-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/gen_tcg_hvx.h | 62 ++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/target/hexagon/gen_tcg_hvx.h b/target/hexagon/gen_tcg_hvx.h index cbf84a8caee..2a342cdee69 100644 --- a/target/hexagon/gen_tcg_hvx.h +++ b/target/hexagon/gen_tcg_hvx.h @@ -342,6 +342,68 @@ static inline void assert_vhist_tmp(DisasContext *ctx) gen_gvec_sabsdiff(MO_32, VdV_off, VuV_off, VvV_off, \ VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE) =20 +#define fGEN_TCG_VEC_AVG(VECE, SHIFT_FN) \ + do { \ + intptr_t tmpoff =3D offsetof(CPUHexagonState, vtmp); \ + tcg_gen_gvec_and(MO_64, tmpoff, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE); \ + tcg_gen_gvec_xor(MO_64, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE); \ + SHIFT_FN(VECE, VdV_off, VdV_off, 1, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE); \ + tcg_gen_gvec_add(VECE, VdV_off, tmpoff, VdV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE); \ + } while (0) + +#define fGEN_TCG_V6_vavgub(SHORTCODE) \ + fGEN_TCG_VEC_AVG(MO_8, tcg_gen_gvec_shri) + +#define fGEN_TCG_V6_vavguh(SHORTCODE) \ + fGEN_TCG_VEC_AVG(MO_16, tcg_gen_gvec_shri) + +#define fGEN_TCG_V6_vavguw(SHORTCODE) \ + fGEN_TCG_VEC_AVG(MO_32, tcg_gen_gvec_shri) + +#define fGEN_TCG_V6_vavgb(SHORTCODE) \ + fGEN_TCG_VEC_AVG(MO_8, tcg_gen_gvec_sari) + +#define fGEN_TCG_V6_vavgh(SHORTCODE) \ + fGEN_TCG_VEC_AVG(MO_16, tcg_gen_gvec_sari) + +#define fGEN_TCG_V6_vavgw(SHORTCODE) \ + fGEN_TCG_VEC_AVG(MO_32, tcg_gen_gvec_sari) + +#define fGEN_TCG_VEC_AVGRND(VECE, SHIFT_FN) \ + do { \ + intptr_t tmpoff =3D offsetof(CPUHexagonState, vtmp); \ + tcg_gen_gvec_or(MO_64, tmpoff, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE); \ + tcg_gen_gvec_xor(MO_64, VdV_off, VuV_off, VvV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE); \ + SHIFT_FN(VECE, VdV_off, VdV_off, 1, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE); \ + tcg_gen_gvec_sub(VECE, VdV_off, tmpoff, VdV_off, \ + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE); \ + } while (0) + +#define fGEN_TCG_V6_vavgubrnd(SHORTCODE) \ + fGEN_TCG_VEC_AVGRND(MO_8, tcg_gen_gvec_shri) + +#define fGEN_TCG_V6_vavguhrnd(SHORTCODE) \ + fGEN_TCG_VEC_AVGRND(MO_16, tcg_gen_gvec_shri) + +#define fGEN_TCG_V6_vavguwrnd(SHORTCODE) \ + fGEN_TCG_VEC_AVGRND(MO_32, tcg_gen_gvec_shri) + +#define fGEN_TCG_V6_vavgbrnd(SHORTCODE) \ + fGEN_TCG_VEC_AVGRND(MO_8, tcg_gen_gvec_sari) + +#define fGEN_TCG_V6_vavghrnd(SHORTCODE) \ + fGEN_TCG_VEC_AVGRND(MO_16, tcg_gen_gvec_sari) + +#define fGEN_TCG_V6_vavgwrnd(SHORTCODE) \ + fGEN_TCG_VEC_AVGRND(MO_32, tcg_gen_gvec_sari) + /* Vector shift right - various forms */ #define fGEN_TCG_V6_vasrh(SHORTCODE) \ do { \ --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549594; cv=none; d=zohomail.com; s=zohoarc; b=E3XCOUhLZ331TUrfb1THthtUc0cUCcSOKijcJ73pMxzkfEsbsafshuKgVHqT7jmwpRSsPr8LbQccRtdVGm18o4Svdyzans2LONwAOqmsGKCSFWs5WEPp/x4VuCsK5NE0MkLgn9cynFfuPtrdb8QwBsdznPRi6/1/2T9TI+fuluU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549594; 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=l/TPmb71nhtmwh1BntVvFun3sm2MPM4sfZPk8QztV8w=; b=ItBEmg5QMhjMuYf8oPqPhB09F8hjZl2BfsYnalJsyBTMrOgsiKjak7yTdJrAca1lGKmnFMNlkV57o5cA3MlsGpFcOb0lKu0n+IKgjYC9Rj936RVzLNN+MGpvEne3QY2BQRwIJSH4WvPZq+Lo3wUbjS8s6EWFX4sgH0ftVrVr1SA= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17865495944144.573286042898644; Wed, 12 Aug 2026 08:46:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7O-0005Ia-0D; Wed, 12 Aug 2026 11:43:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB72-0004mT-1f for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:28 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB70-0000MZ-FM for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:27 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbckQ3641666 for ; Wed, 12 Aug 2026 15:43:14 GMT Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0p3d1p4t-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:14 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cbb6433e9d4so1345652a12.3 for ; Wed, 12 Aug 2026 08:43:14 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= l/TPmb71nhtmwh1BntVvFun3sm2MPM4sfZPk8QztV8w=; b=aosC7/V4Tqqs1rB/ I9pxYr61N9Xs4224XAsuNbBSHI9R338cF6JyaHI53aiyqsC2UrisPdd1VImupxdF PjuTFizygFVdRyLmasRlm/OBa6HGJx4DdK9dqwIWQ3JnwcEPMtLNpLGG/usOeUcG k8HUp2ivrjq5keuwSmzhRaN3ZakJgxhc/Jv24/DYvEQ8HLhz9Jjo88A6Y0k3JNlb y0DYOYiOxWqp4j5x8hc7Aat2p3SvVTpxGgKKRrNO/UgvATnmMOa1Z3rZ5F64rex2 4hnjY9HWa8MrQUBEXAuMwXPqm67F+deXncw/t0mqVPKEW6ywiknenBg+m7BQFjJV RYRkEg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549393; x=1787154193; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=l/TPmb71nhtmwh1BntVvFun3sm2MPM4sfZPk8QztV8w=; b=QIexrsV2yPAQnY8dp3iijiD3J3A+44b57IKIWot/cSIBcGLNi1RysQs6QmExvfKdN+ n+5AVciTDUIjuLa4ZKRQLGUoedUazusjETvKUHcH4X04hpcGr8JrH8eGHAekG5wDTYb1 N8ENqk/R58dMYYUs27GlYUyCqHF+0hiHrAdQtf+5GeOnpZ/Ct4Z9f5PUMKvkjh563K4U Fa16vCaeIKcWFAlZw4eCLi0ONxn50KzKxcpP0VlVbXbxXUpZPooyELFDaTmM2py1ZFZA shZIKThqUHfmp+oX/YvCuIwzauHIik8RppwscN2mmeG+TSYk6iKUFx/+Ze6JYJ23lueV 8L2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549393; x=1787154193; h=content-transfer-encoding:content-type: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 :content-type; bh=l/TPmb71nhtmwh1BntVvFun3sm2MPM4sfZPk8QztV8w=; b=mpNZqGpzmATZifxtMouPrUMUiCixD5lqKP6giAAM4xsCcwsFeWvMEcDcYNrf2buYNl /HD6QUFw3teZNGCfRqE4ITM7wyd7RJ5JwIp/qhONwTbaa7RnJZabBQsGW8miCGrh5OjL TjcoJiZsJARp63JKJsPIyM/+quFTp96vpql/gDdw0pONM1NfqUbOsv1HzKD4TLfWHaZa P+5NXQhCeAASl0gjsywSvw3OSetZFShcfOrNQcEYzL7O8FgPgq7IvoQlww+zN4exLPX+ TsiRcVd3jWg3mMwGdQfhyg5Ibii/B4mgy+RzKZp2rarBErFPptmCuwHMN/FokP212j4k HSgA== X-Gm-Message-State: AOJu0YyZha1j7gCRFCi9DLGWZlnuPOqKTl+Zn97F7Mq0socAAL8wVDPx qkfPU7nM2W61/Y2elkXDBCJKkXOnF1TtLpIx0L3FKwb9xNaz+C1nujbci+hIAnF1aQX1XWvvmXR Y2tY20U6n5+KiwijCax4dCIKw7kfcgV2lEPQep84EEST42Q1vYOX8i/V1viMzXcGwpg== X-Gm-Gg: AR+sD11F7HufJ9ldsTmIar7b7oQf7pku9KAQIShbWMGBeovJDICt29DgvNfqDvQxzec u8r3Hvhe/pB/L9OdV22+lCjT/Lhrtt65vTJGn2bTnmGCN44QTV4idYd81dgcuhf5zINl/1xPn38 qU4fQpmWkrSh5WW5Jr78yRrkKE0QNE2QExFXe0OZB5wvXqkCSHiFk34EuI6TwDe6weLd6pZOWeZ 1zlcak/ZUVzI18lH6Yu/JDChyN+2T7DG9fnRig3YAXS84wH5zY39lJbrAZH5FgCmf0Q/MVvw+/q 9SfYEF8TMkLIfb5vx0vrfSn+42sv57ii6zw2AKlkXA9x2fttyIvHypPGXwEGYhBkjS4pCmt8dn9 sh7mtMiF28hNEs4MHgWy70Cy5QqtEroiP6BAxzatoymfozx6c X-Received: by 2002:a05:6a20:a11b:b0:3bf:77d7:667d with SMTP id adf61e73a8af0-3cc3f790676mr6022597637.28.1786549393315; Wed, 12 Aug 2026 08:43:13 -0700 (PDT) X-Received: by 2002:a05:6a20:a11b:b0:3bf:77d7:667d with SMTP id adf61e73a8af0-3cc3f790676mr6022535637.28.1786549392846; Wed, 12 Aug 2026 08:43:12 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier Subject: [PULL v2 24/41] tests/tcg/hexagon: add HVX test for V6_vsubwsat saturation Date: Wed, 12 Aug 2026 08:42:03 -0700 Message-Id: <20260812154220.1029828-25-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: pZv-fqkdYlqHXkQfOilGKRjRQofUmTBv X-Proofpoint-GUID: pZv-fqkdYlqHXkQfOilGKRjRQofUmTBv X-Authority-Analysis: v=2.4 cv=UfNhjqSN c=1 sm=1 tr=0 ts=6a7c9492 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=KziaR8soUeEz0EukW7EA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX1THlupBI1d1t V5F7MbazSDDowBhJ98gvZ754F5HDjzXc1TYEuy74FYP7E2Iq/yVXMuLVRqz6l1wowpYKLa7bmOY xDfyK3nGPVJIqDIQKQKPdvY8m4WMQWHb+FNk+MZhEW153wCTBcMzUC+H7NM6Vye6jQ60iS443ss E0K8ao5BOVDWIWvBCtzfUQS4mWGjuAya7ukWDkFTi9+RwolAjCpMA+aTLTM33E7TxVsPNzfTqDV E3mNI63bo8wYLihRPKTB5W0oeQHpvNDqFj52nHp6SrXNDzqZ1AgUby3tpl28Hna6JA+k8Wsc2L4 44ZPksODIwL+96IOgne70yZAvrWtltlxG+yDo4f67iILpQr7dqe8OxYePPrbkfMRgWfxdGz2AJy nBK+IXL0vQq5HPQ7sQsrX+0aeKGpkzutMizOl8iTJ2NR08WDRhPOwzO2FCxZMbBLOWDP3MiTj9z CeyLRHEY8YFcUbx94pg== X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXwI7bO8t7VLbB H9303B4ay8j1qHhCyc6FTUsZQ07L9clgKYCj6wXTd5RyEJQoWknSUquTjbUWuUAaCJfn6pBQpFV C7w6xomVIrhRZjDsm4QjhuYlHYj+1ow= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 priorityscore=1501 suspectscore=0 impostorscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549596565158500 Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260807152241.1576334-7-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- tests/tcg/hexagon/hvx_misc.c | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tests/tcg/hexagon/hvx_misc.c b/tests/tcg/hexagon/hvx_misc.c index 90c3733da07..641cff59aba 100644 --- a/tests/tcg/hexagon/hvx_misc.c +++ b/tests/tcg/hexagon/hvx_misc.c @@ -20,6 +20,8 @@ #include #include #include +#include +#include =20 int err; =20 @@ -386,6 +388,47 @@ static void test_vsubuwsat_dv(void) check_output_w(__LINE__, 2); } =20 +static void test_vsubwsat(void) +{ + const int32_t x0 =3D INT32_MIN; + const int32_t y0 =3D 1; + const int32_t x1 =3D INT32_MAX; + const int32_t y1 =3D -1; + HVX_Vector v0; + HVX_Vector v1; + HVX_Vector vres; + + /* INT32_MIN - 1 underflows and must saturate to INT32_MIN */ + memset(expect, 0x12, sizeof(MMVector)); + memset(output, 0x34, sizeof(MMVector)); + + v0 =3D Q6_V_vsplat_R(x0); + v1 =3D Q6_V_vsplat_R(y0); + vres =3D Q6_Vw_vsub_VwVw_sat(v0, v1); + memcpy(&output[0], &vres, sizeof(MMVector)); + + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / 4; j++) { + expect[0].w[j] =3D INT32_MIN; + } + + check_output_w(__LINE__, 1); + + /* INT32_MAX - (-1) overflows and must saturate to INT32_MAX */ + memset(expect, 0x12, sizeof(MMVector)); + memset(output, 0x34, sizeof(MMVector)); + + v0 =3D Q6_V_vsplat_R(x1); + v1 =3D Q6_V_vsplat_R(y1); + vres =3D Q6_Vw_vsub_VwVw_sat(v0, v1); + memcpy(&output[0], &vres, sizeof(MMVector)); + + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / 4; j++) { + expect[0].w[j] =3D INT32_MAX; + } + + check_output_w(__LINE__, 1); +} + static void test_load_tmp_predicated(void) { void *p0 =3D buffer0; @@ -530,6 +573,7 @@ int main() =20 test_vadduwsat(); test_vsubuwsat_dv(); + test_vsubwsat(); =20 test_load_tmp_predicated(); test_load_cur_predicated(); --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549523; cv=none; d=zohomail.com; s=zohoarc; b=dvkYLk6Tu9PT1pa5wCFkxZ07lLm+c2kMVgAgIyK2qbzqZa0ptDuILMn2sXvV4mBUnxIlw/w8j2Ci2ENbawnx8Fni/5bOSGC52c2xkcJWag58QHn9r8kny2mkS3F57EtMX2ISJP7/5nNCo7RjLPZvIh3EulkwMuNRsPNXdcNEePc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549523; 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=W6c6LZ+jwSWDITdL6eA5pVfUOXy66bHnIoas/zO1RfU=; b=gcwaFDenwsS3v21NIc+Bcsh6gLWZeBtK/V1UUHB9kmap/JrxfLqRbUjq8gRqZVAGsoHOMXxMAt+H3SOSpBfpdrTxjrs+8Z00ZFNXSqhut0Uu6V3uB5QGeRWc0BQmHQyJqPfSFw6Gc9tGQsbTvKhzy/dXrHJYLYC/fHM9dq1tvKk= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549523174248.1892942809916; Wed, 12 Aug 2026 08:45:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7Q-0005Qn-HL; Wed, 12 Aug 2026 11:43:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB72-0004nh-U8 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:30 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB71-0000N7-D1 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:28 -0400 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDcalB104593 for ; Wed, 12 Aug 2026 15:43:16 GMT Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0nuchqny-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:16 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2cfe48ca1efso15375255ad.0 for ; Wed, 12 Aug 2026 08:43:16 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= W6c6LZ+jwSWDITdL6eA5pVfUOXy66bHnIoas/zO1RfU=; b=lxWLCa9h+s+9RS0m 2mmNETYZTGRbZltsqgOV1YRSatkmAm71q2wj9G7Z9aTrAxSBtdT2DcBF/VjnmiBX OHFi7kc/SFa8tb1ssT+9hXBADQDNVoY4hIv0Kw8YMyRbueH7WMUajrNNbEtd1/tW yJF42LTrCVGlQXXuogm/rB8zEgbcwLE+EE0GjyuwyBybpbEVdH6l0Vabx6bWOUz6 z/yaG9oLL4sLvQUW5Ifb0WbmcI7XjRw2HL2MoXV7nv2FYeSEUw1yWqKJwJj4b9/3 GN2sTLRILipT3oGickz1RAgGcxsLMR7+FiVTt01pUSRDejBJ+rofQK6+MhJ9vxY7 rQPIJQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549395; x=1787154195; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=W6c6LZ+jwSWDITdL6eA5pVfUOXy66bHnIoas/zO1RfU=; b=N7uKfqlg37e9j92g0q914F4+RxYIRdzpA38rIaeAIVPp+VO8PRI4b3uNylyd2hXPc6 nY3SXa34ijE0LLMBfDzCqRvMRuASYh5NEuD23kybvCcxGWqzoD0N8NsYS76nJHl8Al/r j+djL4j0ZQplsG/Hwa+yfntzLxySf5DZYf5/hi931HXlGDKsDN1cJFFB7gotjZOzc3Xa mtqK8cXR40DWPK40ytcOFkCR7kYxTo2CjUeQj6aXBH9mtpaGYfPsvz4kRrJnZPqZfjP4 /tqXscluhSstCw8E3KS2RsAwHR8wmS0VDxJtg7cRgd3cYw/JbzmqN+OmvoASbs836ari DU7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549395; x=1787154195; h=content-transfer-encoding:content-type: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 :content-type; bh=W6c6LZ+jwSWDITdL6eA5pVfUOXy66bHnIoas/zO1RfU=; b=MVaYd+ilZgEpiYwboDxwEp+cNqL673N7Cw9EqePo1tNiQ0nOGmiLMqNicBpbgtdEAv DGw0I/fXyxw7kQrGd67Bd9A9GrkDDW26eZQSA5Y//ri+phEiRwWepzrANIOZLCsZ2V5h fyvgCAUiKMqWUHfmk29NYSQ+Y1h16jUFKlFk0TRp5eY5ttlQH+A6AN3sXtK7uBwdhuMg 7DbPh0XUeRJnoZ4P04Aq8vD2VESbDy1NtzFgzvJfCCfTMMWq8sssOMc/I0imDtAEy5ca Dq6waRDp8PlDxFlCH0SzxKrAAdVEE+UFHwXbZ1e2zte8NKgCr5fRteikwCfTZ5IUST9y fg1g== X-Gm-Message-State: AOJu0YyhOoBIxSKsx1sw2vITAWHcP3ZK05RYAvKH2z+KHXHvdMdEqFvB 5ZjAsU+FztbdjDeeX9UnMkLwisaxy/kdGMKGYN4GIM0jfRs7d5FpLTdaH/KjsvhO4wnxEA+dAUv zrbgGqhfLf6W+hifqfr8DW4DkJTxhh/CjPkvrH9qj4YjHrgaXmAbOEeUowJQiKncpYg== X-Gm-Gg: AR+sD10foEwce220L49uhxAg34xVqawTlmXwaWSmXfkCtOOJe3JCEeA0tWIatTlXRCV kZklrl6C6ST3yixmBzPBWlon2CEJZ5HCsXhei0g4HJFMWO9O5khIt7V3wJndpQerFIdz521cQkj Cf32mB6FfIDxWWHhGoRKRrBlRloKwS1LIp5QUhzIFnzzCyF9k26fcTPr9LbhqFF/sa1bRhi4GRI Eyi82WX6EgJ+nv/XTrn4gSPp2LFjjQB3ZGm4eyDgCrSIiTgUb35DuAyeDoXGjn7r26CnJwVpaik FW+AU5i2WLhiwp5DI/hBmn5DNsPyGsmlmhdGaRLnlteiC4GAN7eM2XvzlNUWgFpB7Ayqw2FN0yA 2JZBOX3/mXPoi4ALyd33Q7imhzfZCt1DtPSmC9dv1ZsUzYhcv X-Received: by 2002:a05:6a20:d495:b0:3c3:9070:96b3 with SMTP id adf61e73a8af0-3cc3f52b68cmr7166514637.3.1786549395338; Wed, 12 Aug 2026 08:43:15 -0700 (PDT) X-Received: by 2002:a05:6a20:d495:b0:3c3:9070:96b3 with SMTP id adf61e73a8af0-3cc3f52b68cmr7166426637.3.1786549394781; Wed, 12 Aug 2026 08:43:14 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Pierrick Bouvier Subject: [PULL v2 25/41] tests/tcg/hexagon: add HVX tests for vabsdiff Date: Wed, 12 Aug 2026 08:42:04 -0700 Message-Id: <20260812154220.1029828-26-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: YroiSk4_aFUNeLZmMuqmpWHjjC0SWN5e X-Proofpoint-ORIG-GUID: YroiSk4_aFUNeLZmMuqmpWHjjC0SWN5e X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXzIDlcNagvfSG OdIhH3dgx9hVJm8IEbWUjvn3rZdeBvi8g7VyNUNiI0sq9Cfn3poseKpq/62PwI4q22rcXjYGmSo ePTuq8KYj59FhDB75/HUSZObABqRZPRFjKeDuw3VABsQ5QXXj3zdrePJTCPrbRDoLnptJMrGFgo 2hRXJmqQxDS6tx4LFGSLgmTKAsqIC2wj1GtN9rz3G53ChSiaW+YGnRiKCBs6QaT8caBOE5osGPQ apEiao5Ai455REFHIlJ7Cs5sF5vZLvXagxJy4hSLadTCfd8CUgm05Q/qWBYUM8XNS1UnntXbphn TxG4rzJk+YNCpjM3HB6VVwOE6ULkNxiXgGLfgrBAD09/43I6A0eYccLqjUNHMMj7viIW7Ay62xV EaJWkcckYZB5KTSIC4OFxn/OM6L6U766YmDw8ZWkg31vycFAwuXyNOt0aA3NGSJy6K5kJuevxh0 kQZ7DFG8SPwd4+XCKiw== X-Authority-Analysis: v=2.4 cv=VcjH+lp9 c=1 sm=1 tr=0 ts=6a7c9494 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=BpNi1cdwbXwK4F8ztrgA:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX6HMIzR0YPqKw OppZ5+N5sWaqvyh2WD+TKXxiG4OwdRQBiHtKjOu9uQx43nmTr/5NUqLttWzTPkAGs4pdw3uDFlK fubVb5Y0JtpIZgUUsEcmZ890rbd/a6c= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 adultscore=0 priorityscore=1501 phishscore=0 suspectscore=0 clxscore=1015 bulkscore=0 lowpriorityscore=0 malwarescore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549524152158500 Cover the four vabsdiff variants. The expected value is computed in int64_t to avoid overflowing the source element type. Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/20260807152241.1576334-8-brian.cai= n@oss.qualcomm.com Signed-off-by: Brian Cain --- tests/tcg/hexagon/hvx_misc.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/tcg/hexagon/hvx_misc.c b/tests/tcg/hexagon/hvx_misc.c index 641cff59aba..32a3661a86f 100644 --- a/tests/tcg/hexagon/hvx_misc.c +++ b/tests/tcg/hexagon/hvx_misc.c @@ -317,6 +317,34 @@ TEST_VEC_OP2(vand, vand, , d, 8, &) TEST_VEC_OP2(vor, vor, , d, 8, |) TEST_VEC_OP1(vnot, vnot, , d, 8, ~) =20 +#define TEST_VEC_ABSDIFF(NAME, INTRINSIC, SRC_FIELD, DST_FIELD, \ + CHECK_FIELD, FIELDSZ) \ +static inline void test_##NAME(void) \ +{ \ + HVX_Vector v0; \ + HVX_Vector v1; \ + HVX_Vector vres; \ + for (int i =3D 0; i < BUFSIZE; i++) { \ + memcpy(&v0, &buffer0[i], sizeof(MMVector)); \ + memcpy(&v1, &buffer1[i], sizeof(MMVector)); \ + vres =3D INTRINSIC(v0, v1); \ + memcpy(&output[i], &vres, sizeof(MMVector)); \ + } \ + for (int i =3D 0; i < BUFSIZE; i++) { \ + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / FIELDSZ; j++) { \ + int64_t diff =3D (int64_t)buffer0[i].SRC_FIELD[j] - \ + (int64_t)buffer1[i].SRC_FIELD[j]; \ + expect[i].DST_FIELD[j] =3D diff < 0 ? -diff : diff; \ + } \ + } \ + check_output_##CHECK_FIELD(__LINE__, BUFSIZE); \ +} + +TEST_VEC_ABSDIFF(vabsdiffub, Q6_Vub_vabsdiff_VubVub, ub, ub, b, 1) +TEST_VEC_ABSDIFF(vabsdiffuh, Q6_Vuh_vabsdiff_VuhVuh, uh, uh, h, 2) +TEST_VEC_ABSDIFF(vabsdiffh, Q6_Vuh_vabsdiff_VhVh, h, uh, h, 2) +TEST_VEC_ABSDIFF(vabsdiffw, Q6_Vuw_vabsdiff_VwVw, w, uw, w, 4) + TEST_PRED_OP2(pred_or, or, |, "") TEST_PRED_OP2(pred_or_n, or, |, "!") TEST_PRED_OP2(pred_and, and, &, "") @@ -575,6 +603,11 @@ int main() test_vsubuwsat_dv(); test_vsubwsat(); =20 + test_vabsdiffub(); + test_vabsdiffuh(); + test_vabsdiffh(); + test_vabsdiffw(); + test_load_tmp_predicated(); test_load_cur_predicated(); =20 --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549436; cv=none; d=zohomail.com; s=zohoarc; b=EaBOpMFKriGxtnjaKe9QL7EMROY9d9OLB+ahbCfXUi+RvIeVyb357VzOZ+nqzxzU47YVO/XW2GVL4JFKtpjVzl6rF0wFfuIW8HuGazE70VdvfItS3mhmQboJqMvfjg52pQqNh/3quzBrh2BUichCntD1JIKOR9LKCD95vTNIWsI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549436; 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=5sDN+24hypkTekOQXHBHl75clgqYVMX5JjKwamE+al0=; b=SqQcSDanIJ8BeyMhVGDQinSseeCykoRWICdncOLlI0Fg3+epiG+y/f2YW36xGYNKMOWWStSoqL9YcY6oVDgnbdliW3xfNIAeIYdKCg4u9/IW7fWaCjj1DnBpNdhzYWOvMHGeqyL8oTezYwIr2IALChAVnUuLkGE7LG93cqTKOFA= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549436820398.64019030141037; Wed, 12 Aug 2026 08:43:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7L-0005Ff-9Z; Wed, 12 Aug 2026 11:43:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB74-0004oQ-Qi for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:32 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB72-0000NJ-Ni for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:30 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbhEj3641682 for ; Wed, 12 Aug 2026 15:43:17 GMT Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0p3d1p51-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:17 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-cb4bd11ddf8so1245924a12.3 for ; Wed, 12 Aug 2026 08:43:17 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= qcppdkim1; bh=5sDN+24hypkTekOQXHBHl75clgqYVMX5JjKwamE+al0=; b=Aj ZuR7AB976835mYEdRfT8xiJ/7gRHD6BYGq0j0qBMdyh8YenyQMjsB3KLPaitN7UX EvB2mo0DxPaaBJnxlOmtf6izkKXsNboziqEu+/WjYpA17aREYUFUv1uqQxj7aQ+V Ua0/zWH9iKXkvYQH9HIDyKR9r134sdCr4nqhpm13nEShi700z0J05ofGKz5AKUO9 fEjpC/PFZbcV9XBYHDmG1qg2TlV9LDdrIhuLTYCeCKkPPdzoWZWfDPUJNjcky/gF SQoBrIXrFvtc9SYW3Xax2xqj1CzkNrPwfri2WN7jjcQDG+PN2r2Y9wp4dm7V3tdy 6Hc0mXSNQ/Kdt4JY3L5g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549397; x=1787154197; darn=nongnu.org; h=content-transfer-encoding:content-type:content-type:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=5sDN+24hypkTekOQXHBHl75clgqYVMX5JjKwamE+al0=; b=f3wUXdiCQwWcDfmpBwopncO5+isKjtpyaIBbmbA0GdZ1p34tOV9edqAJdyNV95h25K OHOSuOOQ5+q20cKnX0FIM9roAERIy7KUC0xpe7axu6Ft+vK0LPeS7efUp0c9pUrOUZ2k 1GJ0nBlw/cJXCLHSnRvNJXf+t5s09ftCLF1co98uxD36HN8BGDt30QmRuyE8RP3N3d64 xHYIn9EU2e3BuIYAu6YEK/RjGwn0PB6HDkeyHsVflfYuU3SR3zXHt2cSGcULBzF9kxMZ bGPB5D98L5ByJHd3wAH1DYf/hzbTKqQDaeHOyOUOu0AxALlksXPSuu5AG7iCKBuFPHru mh4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549397; x=1787154197; h=content-transfer-encoding:content-type:content-type: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 :content-type; bh=5sDN+24hypkTekOQXHBHl75clgqYVMX5JjKwamE+al0=; b=celPhJ2GHeIx1877kEhk4Oj8Zwd9zvGgYUV8UTHMIm7YX7ArxAkKsQivHCsDu+4qM4 WnMLu9VSHzOzmqD1BdIObJlrO2Wu907+OlK9IhWiwEGwAAROU1NAGugtOo94mS9ZVAu2 wcUhG2VeaJQIfIHC1/pFmcYhtcu18qNOTO+6AuQrd5xAAggof1Tq+Mz4cP3MW+Bb9Iml xE5PyEQC8sNAVLzfsyeiDY0I2/Mtv341ekIBFJKCIEW3e+5X7kPbsqSHxeo6vYFpuN6M xjTuoJVp/1AaBUdiNwWtGMVMVaug2c6VAEJUvjGJlmfDKbCXuuC8IoQvJvcETy2Cx1GF SXYg== X-Gm-Message-State: AOJu0Yz0Nn8wLhUe02DQW1YfppvhNkKcXBodO1jZIk+dD8GZiF8facuv io7Ry2XM4GFtZ16E0IRYSK8nuSUr/bP3zksYoPSJ0BJif5FZLpOwvz/1Qu0YopxxFI5TuWUpY8e yB2wog7F2beyDIwLDmfXGTVdK9otA4OGC0oI3SRZYs1z33gn9K7HSgvCHrxHYCkLnEg== X-Gm-Gg: AR+sD12TZDryrhrcbViKlAyq63H5NGVetu4uRnZDNWeSPO3Smcp28hl6DRpJvWEenOs 3W+yjNbUhXfS2anZbJieXXCZdvNFOAqjD18g+qHRb6TGxOxZ1e+VDQHttC2QBuz7LVUJEIgys9X 5+3fzlQYKwvHFOWGCQwCDnrx6f9CwLVr9jivJK35TQrHYX/m1VpquWmeBY8Y0wiX4vw9q/Tf1Z6 N1QIcLPrd1/vu+udasRfXIUZY+AosF2wKcGdnjrI1aIi7lf3q93/yyOYmKa/zGzLy7u7YKh28DZ B1vj7+reURv8w52vi16h10Pb0RaRsRLSjyURH5US9zenjThf0jSZQVBmsTAX5nbQJLYLiBSKCK5 hHVU8i06Ao3UG9cF5Ozs3vgVieRKs24CqvZpCIEz7vGdZXn/m X-Received: by 2002:a05:6a21:9201:b0:3c3:875d:c546 with SMTP id adf61e73a8af0-3cc3f52bac9mr8204384637.7.1786549396532; Wed, 12 Aug 2026 08:43:16 -0700 (PDT) X-Received: by 2002:a05:6a21:9201:b0:3c3:875d:c546 with SMTP id adf61e73a8af0-3cc3f52bac9mr8204310637.7.1786549396031; Wed, 12 Aug 2026 08:43:16 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Taylor Simpson , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PULL v2 26/41] Hexagon (target/hexagon) Clean up disassembly of control and system regs Date: Wed, 12 Aug 2026 08:42:05 -0700 Message-Id: <20260812154220.1029828-27-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: Pg8wM9CMwPdPOOeuynmXB-11wOKiyg41 X-Proofpoint-GUID: Pg8wM9CMwPdPOOeuynmXB-11wOKiyg41 X-Authority-Analysis: v=2.4 cv=UfNhjqSN c=1 sm=1 tr=0 ts=6a7c9495 cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=VwQbUJbxAAAA:8 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=xj1xkUDO_rLk8COKPxsA:9 a=QEXdDO2ut3YA:10 a=3WC7DwWrALyhR5TkjVHa:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXzHYWvRoCs4Qz 8w8Q9LQnsG5+MTf/8RoUci789qNnLOmXk0JZQsZjJ0SBphMgf234Z2A0kI1D6AkcW6mgNCr89er zP6yv48BxoWExdGG9qQ04Ac8dr4mdgiox3tCU8Vj0nGtjZhlmbgO7AS5PnHbnf3VxI8WB5o114s 7gaqjSwAO0duhMWR1U0RGCOme2pF0sI+jKAcZYVgMGnZUyWG9JskozQ/LZq+vv2dE6Epb5UqD4w FttsVHhSB2oeJ4qrYSRe+NKOHeM9+F9QN/5QL7eHlBtSI0Sm+DBWEbvQZmUe37Q5GwM1MwW1W6U FaldXuL4e1bDqBpFYK2XvQgu1BzI/ADbHnutHuuFxr+p0KMgz/k/aA+3efadvhbvyGGnI1wGqKe kQwYi3nh8lmUlec8hCuoGDytNnD9jvu59P+vLMa0O0ovO7kVyrN+nVyd8ryPOASZjji/YI+bkVV AXjVTe2b1THtGvI5rcA== X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX0F4ZoX2jXWOk ItvVVwt9D8Rgflj3N5oCblC5SEN5kcNOyIIWsv5Lq+aPHDcPfLgLlaIwlcTwdHXpx6gH2H9cZgK immemphmRN7fiLe93n7XajK5hPAaHc4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 priorityscore=1501 suspectscore=0 impostorscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549437700158500 Content-Type: text/plain; charset="utf-8" From: Taylor Simpson Change disassembly of control regs from C{num}/{name} to {name} Change disassembly of system regs from S{num}/r{num} to {name} Signed-off-by: Taylor Simpson Reviewed-by: Brian Cain Reviewed-by: Philippe Mathieu-Daud=C3=A9 Link: https://lore.kernel.org/qemu-devel/20260811032206.58501-1-ltaylorsimp= son@gmail.com Signed-off-by: Brian Cain --- target/hexagon/printinsn.c | 99 +++++++++++++++++++++++++++++++-- target/hexagon/gen_printinsn.py | 14 +++-- 2 files changed, 101 insertions(+), 12 deletions(-) diff --git a/target/hexagon/printinsn.c b/target/hexagon/printinsn.c index a7e46f4bcd9..1673e954214 100644 --- a/target/hexagon/printinsn.c +++ b/target/hexagon/printinsn.c @@ -23,18 +23,105 @@ #include "internal.h" #include "decode.h" =20 -static const char *sreg2str(unsigned int reg) +/* + * Used when there is some sort of error and we can't figure out the real + * system register name + */ +static const char *const generic_sreg_names[256] =3D { + "S000", "S001", "S002", "S003", "S004", "S005", "S006", "S007", + "S008", "S009", "S010", "S011", "S012", "S013", "S014", "S015", + "S016", "S017", "S018", "S019", "S020", "S021", "S022", "S023", + "S024", "S025", "S026", "S027", "S028", "S029", "S030", "S031", + "S032", "S033", "S034", "S035", "S036", "S037", "S038", "S039", + "S040", "S041", "S042", "S043", "S044", "S045", "S046", "S047", + "S048", "S049", "S050", "S051", "S052", "S053", "S054", "S055", + "S056", "S057", "S058", "S059", "S060", "S061", "S062", "S063", + "S064", "S065", "S066", "S067", "S068", "S069", "S070", "S071", + "S072", "S073", "S074", "S075", "S076", "S077", "S078", "S079", + "S080", "S081", "S082", "S083", "S084", "S085", "S086", "S087", + "S088", "S089", "S090", "S091", "S092", "S093", "S094", "S095", + "S096", "S097", "S098", "S099", "S100", "S101", "S102", "S103", + "S104", "S105", "S106", "S107", "S108", "S109", "S110", "S111", + "S112", "S113", "S114", "S115", "S116", "S117", "S118", "S119", + "S120", "S121", "S122", "S123", "S124", "S125", "S126", "S127", + "S128", "S129", "S130", "S131", "S132", "S133", "S134", "S135", + "S136", "S137", "S138", "S139", "S140", "S141", "S142", "S143", + "S144", "S145", "S146", "S147", "S148", "S149", "S150", "S151", + "S152", "S153", "S154", "S155", "S156", "S157", "S158", "S159", + "S160", "S161", "S162", "S163", "S164", "S165", "S166", "S167", + "S168", "S169", "S170", "S171", "S172", "S173", "S174", "S175", + "S176", "S177", "S178", "S179", "S180", "S181", "S182", "S183", + "S184", "S185", "S186", "S187", "S188", "S189", "S190", "S191", + "S192", "S193", "S194", "S195", "S196", "S197", "S198", "S199", + "S200", "S201", "S202", "S203", "S204", "S205", "S206", "S207", + "S208", "S209", "S210", "S211", "S212", "S213", "S214", "S215", + "S216", "S217", "S218", "S219", "S220", "S221", "S222", "S223", + "S224", "S225", "S226", "S227", "S228", "S229", "S230", "S231", + "S232", "S233", "S234", "S235", "S236", "S237", "S238", "S239", + "S240", "S241", "S242", "S243", "S244", "S245", "S246", "S247", + "S248", "S249", "S250", "S251", "S252", "S253", "S254", "S255", +}; + +static const char *sreg2str(uint8_t reg) { - if (reg < TOTAL_PER_THREAD_REGS) { - return hexagon_regnames[reg]; +#ifndef CONFIG_USER_ONLY + if (reg < NUM_SREGS) { + return hexagon_sregnames[reg]; } else { - return "???"; + return generic_sreg_names[reg]; } +#else + return generic_sreg_names[reg]; +#endif } =20 -static const char *creg2str(unsigned int reg) +/* + * Used when there is some sort of error and we can't figure out the real + * control register name + */ +static const char *const generic_creg_names[256] =3D { + "C000", "C001", "C002", "C003", "C004", "C005", "C006", "C007", + "C008", "C009", "C010", "C011", "C012", "C013", "C014", "C015", + "C016", "C017", "C018", "C019", "C020", "C021", "C022", "C023", + "C024", "C025", "C026", "C027", "C028", "C029", "C030", "C031", + "C032", "C033", "C034", "C035", "C036", "C037", "C038", "C039", + "C040", "C041", "C042", "C043", "C044", "C045", "C046", "C047", + "C048", "C049", "C050", "C051", "C052", "C053", "C054", "C055", + "C056", "C057", "C058", "C059", "C060", "C061", "C062", "C063", + "C064", "C065", "C066", "C067", "C068", "C069", "C070", "C071", + "C072", "C073", "C074", "C075", "C076", "C077", "C078", "C079", + "C080", "C081", "C082", "C083", "C084", "C085", "C086", "C087", + "C088", "C089", "C090", "C091", "C092", "C093", "C094", "C095", + "C096", "C097", "C098", "C099", "C100", "C101", "C102", "C103", + "C104", "C105", "C106", "C107", "C108", "C109", "C110", "C111", + "C112", "C113", "C114", "C115", "C116", "C117", "C118", "C119", + "C120", "C121", "C122", "C123", "C124", "C125", "C126", "C127", + "C128", "C129", "C130", "C131", "C132", "C133", "C134", "C135", + "C136", "C137", "C138", "C139", "C140", "C141", "C142", "C143", + "C144", "C145", "C146", "C147", "C148", "C149", "C150", "C151", + "C152", "C153", "C154", "C155", "C156", "C157", "C158", "C159", + "C160", "C161", "C162", "C163", "C164", "C165", "C166", "C167", + "C168", "C169", "C170", "C171", "C172", "C173", "C174", "C175", + "C176", "C177", "C178", "C179", "C180", "C181", "C182", "C183", + "C184", "C185", "C186", "C187", "C188", "C189", "C190", "C191", + "C192", "C193", "C194", "C195", "C196", "C197", "C198", "C199", + "C200", "C201", "C202", "C203", "C204", "C205", "C206", "C207", + "C208", "C209", "C210", "C211", "C212", "C213", "C214", "C215", + "C216", "C217", "C218", "C219", "C220", "C221", "C222", "C223", + "C224", "C225", "C226", "C227", "C228", "C229", "C230", "C231", + "C232", "C233", "C234", "C235", "C236", "C237", "C238", "C239", + "C240", "C241", "C242", "C243", "C244", "C245", "C246", "C247", + "C248", "C249", "C250", "C251", "C252", "C253", "C254", "C255", +}; + +static const char *creg2str(uint8_t reg) { - return sreg2str(reg + HEX_REG_SA0); + uint8_t gpr =3D reg + HEX_REG_SA0; + if (gpr < TOTAL_PER_THREAD_REGS) { + return hexagon_regnames[gpr]; + } else { + return generic_creg_names[reg]; + } } =20 static void snprintinsn(GString *buf, Insn *insn) diff --git a/target/hexagon/gen_printinsn.py b/target/hexagon/gen_printinsn= .py index d5f969960ad..cf1a12adbc1 100755 --- a/target/hexagon/gen_printinsn.py +++ b/target/hexagon/gen_printinsn.py @@ -28,13 +28,14 @@ ## Generate data for printing each instruction (format string + operan= ds) ## def regprinter(m): - str =3D m.group(1) - str +=3D ":".join(["%d"] * len(m.group(2))) - str +=3D m.group(3) if ("S" in m.group(1)) and (len(m.group(2)) =3D=3D 1): - str +=3D "/%s" + str =3D "%s" elif ("C" in m.group(1)) and (len(m.group(2)) =3D=3D 1): - str +=3D "/%s" + str =3D "%s" + else: + str =3D m.group(1) + str +=3D ":".join(["%d"] * len(m.group(2))) + str +=3D m.group(3) return str =20 =20 @@ -142,11 +143,12 @@ def main(): else: regno =3D ri if len(b) =3D=3D 1: - f.write(f", insn->regno[{regno}]") if "S" in a: f.write(f", sreg2str(insn->regno[{regno}])") elif "C" in a: f.write(f", creg2str(insn->regno[{regno}])") + else: + f.write(f", insn->regno[{regno}]") elif len(b) =3D=3D 2: f.write(f", insn->regno[{regno}] + 1" f", insn->re= gno[{regno}]") else: --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549454; cv=none; d=zohomail.com; s=zohoarc; b=eBs5zrUFCcXQEaQHv6lCqiuXaeEGYlVEdVRTWltIqlchQBgCuY3vAbwptbywJSfuMNtbxr1mjBPz4iDbpeSI8EEW4FLFoNWY74WK3nArAA0Qy3TfH+DIzcJyuH3jBdxEbfomSvTKONC+OwQ7rJyqa60wc7MeIeN971ZKPEl5IO0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549454; 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=Wta+TW/oxE1aSoYGZHF62xn7yYX3McYGAcm2TXtN+6A=; b=NSxmX47EOxOUGjc/sVPS+3tAVcC04sVGPvJlMMwUIKpoeYI4p8E7TuYHXKkx8RI+RgXsRamdkbAqnqNkS/+FIKiL2WrZhgpsVT4ahQUpNcnzYqjDhl7zf1z4R6y+62h/IFKdqPoNK9jrRV1G893wqInMLwAkb2ztgmpHtEPwdXU= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549454401584.8603320846756; Wed, 12 Aug 2026 08:44:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7J-0005Aj-MO; Wed, 12 Aug 2026 11:43:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6w-0004eq-ES for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:22 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6u-0000NT-6Y for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:22 -0400 Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbZuY3597639 for ; Wed, 12 Aug 2026 15:43:18 GMT Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g08jrmrs4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:18 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-ca6bd8a190cso1473081a12.0 for ; Wed, 12 Aug 2026 08:43:18 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Wta+TW/oxE1aSoYGZHF62xn7yYX3McYGAcm2TXtN+6A=; b=CtmEZczs96C0cmiU Mh7dDB2c207IswjmNk+en70lmmpjiPcTn1RVUAugYaDJRAjKBiO1Q7abh3ung8m4 wXjhaeslZAeMmRb0CBkABDqdvEDZAjNeC+UqG13pZAOI829YBTLPp5o5PSTdLU51 2S3kBWS+uv7cHoH+Am6v2WpRCjyD0wtPeyAifc3jkKXUpDifOTLm7xgGsTwMbman 3YKKEKU+xKJCdkrkuu4gOP6/4tGPNyF+VuOIlwABktXOwstDQ75fHDDND0Hmgv9W mgvSNyl6hworaF/K2+ulJWQSJMNTakyJS0aoXpmd1+NmzQjMS7OQe8eqFPTeKwLl xO/LdQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549398; x=1787154198; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Wta+TW/oxE1aSoYGZHF62xn7yYX3McYGAcm2TXtN+6A=; b=DXP8QQE0MWZ8kM3ULpYRyS7GaOL6SlocsoPPtamJD0G1dDv8OJdwcxShA3jGsfwUKO 1JPY2TW2fbxGIxm1ZvdnMvsMO1ZJVcxWl8ym1hZlbYWZi1M8vclAQxcvLEg9XbI2uc9T 8kmOGYTiJI8RQqaAoV3oZ6/2/NsRlVHKeA0E6ShpWMrcpQ8BsVt7MIYw/OQ8kPLBhuSR RZ6gQPS3eGv59DUbfZLZRevzOpYCfZdfA4MIZqldWlx6P47CttfY9aHNPWtgGTk9n2q5 PTnNJ6CJY2eZDrhrDy8SpaDugxldBuiHfKh/evpzMEXzBqiA6Zp+wDqkKDntTs8J/T8H 7OZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549398; x=1787154198; h=content-transfer-encoding:content-type: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 :content-type; bh=Wta+TW/oxE1aSoYGZHF62xn7yYX3McYGAcm2TXtN+6A=; b=MOoGkTD/LKtnyPjmBZ9XrKHMC1ODAl6ikpRDRfm2DRzueojP5njjhJgHfkap2srxH4 gyUo9FYsiJhbyfJsi0z/1yPgte9FjF9uyfq/hQfO+PeCEphtN5MsRxtM7lzAJQkuDPr2 2z4VswIgfaqoaUyKBMm/HjeaiPHtF0wHpwQIe4BmFKNkQCWrXlzQDKGgWqBRSCo41lFm 7p+GZVSqLFpF9fD05V6pkQXXdajZUtN3fNRfJSR7MLxVCP8fVu3Z1guGWrPkY4GUicGk ds2pMlNAf/5Hv4NQ2SnC+CYDAArhWvoY7FBA/lFUv9mFnZlGTNRLaVr6pFoN7gSWoQ1F 4oLw== X-Gm-Message-State: AOJu0Yyc/1i5mf6Bc7+YFn70Ydqwe8rLD/LY6+ZL0dY61jO77Apo1LnX MZlBJsuOzzUXzCy0VwDBGdzNLf8spJVeqzuqllTacKo87OMxad1NwVC93FpVr/TaW0KwybBEknH V/HWLvbJD9ThJ2m45GWLbeSo5s3wuG430B4j7AP0pyAygXSRoXAdVb09HoXXPWiRiPg== X-Gm-Gg: AR+sD12WH7dK+gAEADW5U92+8n4bYn6Bw6lPU7ygcxk2+astQbwmbdvkpuz9Ri4v86v DSbzEmZOjgLxcP4h3mLOI6wdbYa18xsQ+4vbbcaUckMole0x4NFAwZnfghrbV87QezxiqIeCoYQ DfdtvPv6888k3MmBlNZnS3mgROhUZibBaz5uXPlKd5HoJjQdgS09jLkb3gspNTwdOljydzBBzLE qctySz2IVhGwpcQhCD2T91Luk9QpKc7CDvzbOMUj2Jxfy38k/Z8KkF2etX+TJICKTUmS7mWJXA6 oC0xx7qFCmBFGLhQvDhCUrPB1Cmkq6gpTvrgkRDompXc2VZmX4+WsGCSr8/jn+oZLEpDatp32Yc /hjW/FaOIlNN9pTj+OU5vnLhjmHS5tqYQH/cEwbIPRr9C2tIV X-Received: by 2002:a05:6a21:6004:b0:3c4:3321:4fe8 with SMTP id adf61e73a8af0-3cc3f5f2afbmr8202051637.14.1786549397967; Wed, 12 Aug 2026 08:43:17 -0700 (PDT) X-Received: by 2002:a05:6a21:6004:b0:3c4:3321:4fe8 with SMTP id adf61e73a8af0-3cc3f5f2afbmr8201974637.14.1786549397487; Wed, 12 Aug 2026 08:43:17 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , Pierrick Bouvier Subject: [PULL v2 27/41] target/hexagon: fix incorrect/too-permissive HVX encodings Date: Wed, 12 Aug 2026 08:42:06 -0700 Message-Id: <20260812154220.1029828-28-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: zZ_Vjk1pkFKA4QTdOhdw8dFal7xvk1JY X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX8beXQzTXJHzu R6XpHes5kmrZhp58Ymr2yM2l6b1nWrXmp5clk7izBPUm9YL+iPnM1gIiA3ddGpeBs5dOTm7ulXY WETDuvI3VboR1r6/bgZlFzFRA7EXQvQ= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXzO3H3m6dCOi9 VdiJbCWGarnUaBhfFwjBiYJB4RGjVj6jof0w7oBMWsaFJblrkXSyqkv5PS2FiZObNwd0tjIzChz 3rLhFhyfBk2V/XfB+TS4GMMTT24wFY8vFos5umpbXA5brZzAi6pQQtiOPoAxgyJpeOoVoZAYjMt TrvyIJy/CMtzhrNQ6qn+8t3ETg3wI7TdrQyV+QaE0NtPghg2t6Guev/MiwknJZJPDjyudAD7Ihg kDypxliXWEJ2FWXufdsP7surALGSMiwcjqIAm6pp8cy400H+VBNFGiMAftbOFo0eUk4T9hpAKm5 rTOUyCNcI/cEf6pZJwhwfSPo94b2lcYzJmcc2JODtQMctWgwzJ6FRjQUEtADuY4TTCotM3KZRPI LgY3VIB1huXFJXt7PYPyelP3pwYK9JbbWLH0JJ/mQI9rDzppgsxHcXcymez3UYRMqYhExSCB++A pz9BFfC/qZxZZ7glurA== X-Authority-Analysis: v=2.4 cv=Z7Dc2nRA c=1 sm=1 tr=0 ts=6a7c9496 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=LtKSMYrkcOpncNoavBoA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-ORIG-GUID: zZ_Vjk1pkFKA4QTdOhdw8dFal7xvk1JY X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 impostorscore=0 spamscore=0 priorityscore=1501 bulkscore=0 phishscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549455606158500 From: Matheus Tavares Bernardino The following encodings have become stricter since v68: - V6_vunpackob, V6_vunpackoh: ---00 -> --000 - V6_vaddbq/hq/wq, V6_vaddbnq/hnq/wnq: ---01 -> --001 - V6_vsubbq/hq, V6_vsubwq/bnq/hnq/wnq: ---01/---10 -> --001/--010 - V6_vhist, V6_vwhist128/256, V6_vwhist128/256_sat: ---00 -> --000 - V6_vhistq, V6_vwhist128/256q, V6_vwhist128/256q_sat: ---10 -> --010 Pre v68 compilers, by default, already use "0" for the non-specified bit that changed in v68, so unless someone is manually writing the binary encoding, this should not cause any backwards incompatibility with pre-v68 binaries. Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/1fe4b8a0fcae6705a591b1b5131e28f6d8= 062eed.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/imported/mmvec/encode_ext.def | 48 ++++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 402438f566c..6d70086b5f5 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -647,36 +647,36 @@ DEF_ENC(V6_vsubububb_sat, ICLASS_CJ" 1 110 101 vvv= vv PP 0 uuuuu 101 ddddd") DEF_ENC(V6_vmpyewuh_64, ICLASS_CJ" 1 110 101 vvvvv PP 0 uuuuu 110 d= dddd") =20 DEF_FIELDROW_DESC32( ICLASS_CJ" 1 110 --0 ----- PP 1 ----- ----- --= -","Vx32=3DVu32") -DEF_ENC(V6_vunpackob, ICLASS_CJ" 1 110 --0 ---00 PP 1 uuuuu 000 xx= xxx") // -DEF_ENC(V6_vunpackoh, ICLASS_CJ" 1 110 --0 ---00 PP 1 uuuuu 001 xx= xxx") // +DEF_ENC(V6_vunpackob, ICLASS_CJ" 1 110 --0 --000 PP 1 uuuuu 000 xx= xxx") // +DEF_ENC(V6_vunpackoh, ICLASS_CJ" 1 110 --0 --000 PP 1 uuuuu 001 xx= xxx") // //DEF_ENC(V6_vunpackow, ICLASS_CJ" 1 110 --0 ---00 PP 1 uuuuu 010 xxxx= x") // =20 -DEF_ENC(V6_vhist, ICLASS_CJ" 1 110 --0 ---00 PP 1 -000- 100 ---= --") -DEF_ENC(V6_vwhist256, ICLASS_CJ" 1 110 --0 ---00 PP 1 -0010 100 ---= --") -DEF_ENC(V6_vwhist256_sat, ICLASS_CJ" 1 110 --0 ---00 PP 1 -0011 100 ---= --") -DEF_ENC(V6_vwhist128, ICLASS_CJ" 1 110 --0 ---00 PP 1 -010- 100 ---= --") -DEF_ENC(V6_vwhist128m, ICLASS_CJ" 1 110 --0 ---00 PP 1 -011i 100 --= ---") +DEF_ENC(V6_vhist, ICLASS_CJ" 1 110 --0 --000 PP 1 -000- 100 ---= --") +DEF_ENC(V6_vwhist256, ICLASS_CJ" 1 110 --0 --000 PP 1 -0010 100 ---= --") +DEF_ENC(V6_vwhist256_sat, ICLASS_CJ" 1 110 --0 --000 PP 1 -0011 100 ---= --") +DEF_ENC(V6_vwhist128, ICLASS_CJ" 1 110 --0 --000 PP 1 -010- 100 ---= --") +DEF_ENC(V6_vwhist128m, ICLASS_CJ" 1 110 --0 --000 PP 1 -011i 100 --= ---") =20 DEF_FIELDROW_DESC32( ICLASS_CJ" 1 110 --0 ----- PP 1 ----- ----- --= -","if (Qv4) Vx32=3DVu32") -DEF_ENC(V6_vaddbq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 000 x= xxxx") // -DEF_ENC(V6_vaddhq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 001 x= xxxx") // -DEF_ENC(V6_vaddwq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 010 x= xxxx") // -DEF_ENC(V6_vaddbnq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 011 xxxx= x") // -DEF_ENC(V6_vaddhnq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 100 xxxx= x") // -DEF_ENC(V6_vaddwnq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 101 xxxx= x") // -DEF_ENC(V6_vsubbq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 110 x= xxxx") // -DEF_ENC(V6_vsubhq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 111 x= xxxx") // +DEF_ENC(V6_vaddbq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 000 x= xxxx") // +DEF_ENC(V6_vaddhq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 001 x= xxxx") // +DEF_ENC(V6_vaddwq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 010 x= xxxx") // +DEF_ENC(V6_vaddbnq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 011 xxxx= x") // +DEF_ENC(V6_vaddhnq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 100 xxxx= x") // +DEF_ENC(V6_vaddwnq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 101 xxxx= x") // +DEF_ENC(V6_vsubbq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 110 x= xxxx") // +DEF_ENC(V6_vsubhq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 111 x= xxxx") // =20 -DEF_ENC(V6_vsubwq, ICLASS_CJ" 1 110 vv0 ---10 PP 1 uuuuu 000 x= xxxx") // -DEF_ENC(V6_vsubbnq, ICLASS_CJ" 1 110 vv0 ---10 PP 1 uuuuu 001 xxxx= x") // -DEF_ENC(V6_vsubhnq, ICLASS_CJ" 1 110 vv0 ---10 PP 1 uuuuu 010 xxxx= x") // -DEF_ENC(V6_vsubwnq, ICLASS_CJ" 1 110 vv0 ---10 PP 1 uuuuu 011 xxxx= x") // +DEF_ENC(V6_vsubwq, ICLASS_CJ" 1 110 vv0 --010 PP 1 uuuuu 000 x= xxxx") // +DEF_ENC(V6_vsubbnq, ICLASS_CJ" 1 110 vv0 --010 PP 1 uuuuu 001 xxxx= x") // +DEF_ENC(V6_vsubhnq, ICLASS_CJ" 1 110 vv0 --010 PP 1 uuuuu 010 xxxx= x") // +DEF_ENC(V6_vsubwnq, ICLASS_CJ" 1 110 vv0 --010 PP 1 uuuuu 011 xxxx= x") // =20 -DEF_ENC(V6_vhistq, ICLASS_CJ" 1 110 vv0 ---10 PP 1 --00- 100 --= ---") -DEF_ENC(V6_vwhist256q, ICLASS_CJ" 1 110 vv0 ---10 PP 1 --010 100 --= ---") -DEF_ENC(V6_vwhist256q_sat, ICLASS_CJ" 1 110 vv0 ---10 PP 1 --011 100 --= ---") -DEF_ENC(V6_vwhist128q, ICLASS_CJ" 1 110 vv0 ---10 PP 1 --10- 100 --= ---") -DEF_ENC(V6_vwhist128qm, ICLASS_CJ" 1 110 vv0 ---10 PP 1 --11i 100 -= ----") +DEF_ENC(V6_vhistq, ICLASS_CJ" 1 110 vv0 --010 PP 1 --00- 100 --= ---") +DEF_ENC(V6_vwhist256q, ICLASS_CJ" 1 110 vv0 --010 PP 1 --010 100 --= ---") +DEF_ENC(V6_vwhist256q_sat, ICLASS_CJ" 1 110 vv0 --010 PP 1 --011 100 --= ---") +DEF_ENC(V6_vwhist128q, ICLASS_CJ" 1 110 vv0 --010 PP 1 --10- 100 --= ---") +DEF_ENC(V6_vwhist128qm, ICLASS_CJ" 1 110 vv0 --010 PP 1 --11i 100 -= ----") =20 =20 DEF_ENC(V6_vandvqv, ICLASS_CJ" 1 110 vv0 ---11 PP 1 uuuuu 000 d= dddd") --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549641; cv=none; d=zohomail.com; s=zohoarc; b=EDZTa/UgQXSHz93WGi8HcdkCOiG9lUpvDW/w3FuwAQKGppjVaVOveiUmwNJJ9vMpdhrLoIuygO7s3H6DsMoiMhuvLbvSlgmitM0V4nJEx9IgfE3DSV0SvBsZIIaTMfbbDnXg+IAy2POBqNIR5/Q2dutyqT1SqNaWzMdjpoTSpY4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549641; 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=zHUry/iBnu0U9G+j4Gd7iDSyN5pzPTs98gnWW4sX0so=; b=b0yOO/Lmnl3r1kZy1O8m2EDuHAKfV39K/897UZQfI8yvJp74oaKH3x75YSu1qeKtzNAW5i9LW9M9krs58sx6GU5k1ADJPQQ00x6BD14D+8LmG32tJCjBFSQfYFuh06gzk6/GwJVqxHJZ7iTJehZT9C34qPLOny6jravcNsbNe0w= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178654964189745.632983242169985; Wed, 12 Aug 2026 08:47:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7Q-0005Q6-9N; Wed, 12 Aug 2026 11:43:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB77-0004qK-MU for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:34 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB75-0000Nm-N8 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:33 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbuZt2728903 for ; Wed, 12 Aug 2026 15:43:20 GMT Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hfw2rja-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:20 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2cee1ec30f2so16697855ad.3 for ; Wed, 12 Aug 2026 08:43:20 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= zHUry/iBnu0U9G+j4Gd7iDSyN5pzPTs98gnWW4sX0so=; b=FSHr+uUlUh1OrlYw U7sJ1UVL6CqwsOyXzu2tSCcEqSicSum2etgR4nEnKVcrcQM/YnzP7QN9VhXKvtce 44yOVi8X9ZqBTp+35W2xdOMjD3tmKcTmaTKKODlP8P8IplwyYi/EHnhoFcVBCyPK Fzd/6vK4jh/vtmIzAJFIhG3PaZVajSEuPoSxUn7ztmyOfKNvzhzPKpyYzcdLFA8J uN9UgCNrFyx4e5HltGPfE1j4Ja4CuUeSOAaiYLSf6ovLN7qzK+Q03IpdEc7QJOtp HFsp3cRvlVYAc30KA7S7QrN9FdbCHINgw3oE8Yh95oGTZgV+IjvtVTGpuTZmi+Ny tJ0W0A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549400; x=1787154200; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=zHUry/iBnu0U9G+j4Gd7iDSyN5pzPTs98gnWW4sX0so=; b=hmz2NgFgj4GN5/I9/goET+oUa6a1+mlGYape946BrUZ1Qg7VoeF4DitzdfsRFVQLv7 PtdY2Xp/1Y4q4/SPhLc7pIz9O4Kjbv6wrji3etUdXWHl75bL4tA7Q1TmTvf+XZ06QbZH kJsekR38PVofXsGMIb8ji6bfkUrDxUd9Pu1CcpHCFjfQW1jdhkSlzR4KOo5ua0t7ROgu zBUjKrORoxJpwmdTIzdwWj4jlfw9GO+se2Izjv40mIfJOJ4dxiNgmQwHqhmDYoN/hNlY SIhJFhe+y4Bcuu1gp+QUwR5yOHUnUhghkNax4u74JJeNjcMF6OhhUDSm/+dQUlYcFjS0 U0FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549400; x=1787154200; h=content-transfer-encoding:content-type: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 :content-type; bh=zHUry/iBnu0U9G+j4Gd7iDSyN5pzPTs98gnWW4sX0so=; b=X8QHoirMXsgPJUIULKYV4kBXkPcRYvKw4FM9XU/S3I/TNlHIj55xviSSKuVXEaKQiQ MYjFpV6PPVhz6+u4PgZWIBEjhrGANjxH9v3OgD9aFO5ApDM/z7wAaco6gcApYbv8ARfe Yl6MhBLHpSf5t2qakOrJUgRBvUuTf/XaRb2/YsByOwI73Blnx0fSG1hpaFALOilDBq8V R9TDKESpUJkja0J1PEjR4k+3+Z/AwsCoDi+uZnFThXagHOjVBT8N/t5LQJd8E/QS0AJo QHnX278N9Dm7GF5MOcMHHEOQY6Wb9+wZIvCOdmpjQ86hDknKKQuchIdMpzbPBOgHHKSS hPtQ== X-Gm-Message-State: AOJu0YwZuzzD2AGqzN0GwlC3sLCoe59L4Wnvc98P0QBeJLuizBWUUw5U ZN3POyP/02JGen7iTNV41kDij4DiyE0E8eZcmOp7QDKrRF5p3OILG28Y41Ni7m9n9hzNWH14spJ +naUgKtCUJH5ZdFkJdX79M58riI5bNySbl+7fQ//XLEZemPl9SkB8qYE14Ym5tuFhBQ== X-Gm-Gg: AR+sD13LapAsBaNi5UhQTNrv3cFe1uF7Kzpt6CrA/eyHnu0K6Tkdd+VdhLyTKK3paik FLlIVcCcV/R/LiiOI4/lvq2LAojbRXsA6qodTj2kFuM1XeCZbxXwKJHJXf6X2LK1/eXj8nSQv2A 6KIBYEQ9rMm3DxTYGZB/HB1YbubRn7xTfvVMUCHjNKA3euI8siOkXld/8j8UlA18qSx2swAjPmx H9vST872kTg/nOFCHFIW6SmU3ELPh3tLnNLdIQI8pxLrR6LzEVHB0RseMRDYm02uHOyrPRuc1Oh 5RCyD5Xh5IjbDh/DrXo7YFY14SMlNGELNkn450hNjUix7ZtLu+gm0s7gk0fScIH2D2b6k6+1MEA ledPqplQ0bkXSdEzFBZPze2cs0VnGRp+O13pKvNqhmptTSjwR X-Received: by 2002:a05:6300:668b:b0:3cb:c1f8:5722 with SMTP id adf61e73a8af0-3cc3f5bb37amr7675684637.10.1786549399435; Wed, 12 Aug 2026 08:43:19 -0700 (PDT) X-Received: by 2002:a05:6300:668b:b0:3cb:c1f8:5722 with SMTP id adf61e73a8af0-3cc3f5bb37amr7675630637.10.1786549398979; Wed, 12 Aug 2026 08:43:18 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Pierrick Bouvier Subject: [PULL v2 28/41] target/hexagon/cpu: add HVX IEEE FP extension Date: Wed, 12 Aug 2026 08:42:07 -0700 Message-Id: <20260812154220.1029828-29-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX+eOCOwZdtK/g yJ2/avsAERhthzFPK2AwVqx9fZQQgL+BW1cwk0d3kh6IIss3KSOMgv5ounpN5KnyRdCvYAmrZZW VVicyKwVOAaiTlzBJSLt5bsF4cbsA3A= X-Proofpoint-GUID: eL4SNoi4U24SrDkCqy-LA2hvOABzHx1f X-Authority-Analysis: v=2.4 cv=fpDsol4f c=1 sm=1 tr=0 ts=6a7c9498 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=CC7RwyyrOC5QBtJvQJ8A:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-ORIG-GUID: eL4SNoi4U24SrDkCqy-LA2hvOABzHx1f X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX5cDT3cIkW+Z6 ha82QCcjcwhXv+njnXYMJO3SfnpARNOGebpPQNO8FIGLx3oQMOkwUKuTQo98TE+CNuBkb4rAzm/ SbmDfe4qnjPor684Bwuc9bg2mb3jhIuS8VvKbVrDoWHUukRZpMy9z8+tc2l4I6eOEhr9XegxuiV OBMgh4NanPUdKb1CKin1GF//NuoMptAQT/LHy3kQXXUlSKf+zPoVUFlgJsD4tSjVIqnEgWzXdo+ JuMOIf5mQBC2JtNWNcrv+CqlS5xxaj3pHw5R8Qy4iRj2In241XV4CB8PHo/HovWgOPUP6Oh0GAi Mmshy3WngNFzCt2kW1gz98K29Y8W6Chr2ogz+Xdv80W8YlgZrVEj/Jlhu/Pa0kZhz0H5eAhIxhh xxZHOgr9opUR/k3jALkX0P749eiiZvBAJ/fY6hn04WAbGhcPTwTVwfdA2rblfbqJh7mjBn6mPy4 cwaNCOrHQbbPFKD+p6w== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 spamscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 malwarescore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549642960158500 From: Matheus Tavares Bernardino This flag will be used to control the HVX IEEE float instructions, which are only available at some Hexagon cores. When unavailable, the instruction effectively only set the destination registers to 0. Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/10fb5b86db60a465e51db2cf73185307a1= ec0895.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/cpu.h | 1 + target/hexagon/translate.h | 1 + target/hexagon/attribs_def.h.inc | 3 +++ target/hexagon/cpu.c | 1 + target/hexagon/translate.c | 1 + target/hexagon/gen_tcg_funcs.py | 12 ++++++++++++ target/hexagon/hex_common.py | 25 +++++++++++++++++++++++++ 7 files changed, 44 insertions(+) diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h index f6c3c639325..502f27983be 100644 --- a/target/hexagon/cpu.h +++ b/target/hexagon/cpu.h @@ -194,6 +194,7 @@ struct ArchCPU { bool lldb_compat; target_ulong lldb_stack_adjust; bool short_circuit; + bool ieee_fp_extension; #ifndef CONFIG_USER_ONLY HexagonTLBState *tlb; uint32_t boot_addr; diff --git a/target/hexagon/translate.h b/target/hexagon/translate.h index 2fca157553b..3c5773e2c73 100644 --- a/target/hexagon/translate.h +++ b/target/hexagon/translate.h @@ -81,6 +81,7 @@ typedef struct DisasContext { target_ulong branch_dest; bool is_tight_loop; bool short_circuit; + bool ieee_fp_extension; bool read_after_write; bool has_hvx_overlap; TCGv new_value[TOTAL_PER_THREAD_REGS]; diff --git a/target/hexagon/attribs_def.h.inc b/target/hexagon/attribs_def.= h.inc index 6c55063a309..b1c155ea6d1 100644 --- a/target/hexagon/attribs_def.h.inc +++ b/target/hexagon/attribs_def.h.inc @@ -196,5 +196,8 @@ DEF_ATTRIB(NOTE_SHIFT_RESOURCE, "Uses the HVX shift res= ource.", "", "") DEF_ATTRIB(RESTRICT_NOSLOT1_STORE, "Packet must not have slot 1 store", ""= , "") DEF_ATTRIB(RESTRICT_LATEPRED, "Predicate can not be used as a .new.", "", = "") =20 +/* HVX IEEE FP extension attributes */ +DEF_ATTRIB(HVX_IEEE_FP, "HVX IEEE FP extension instruction", "", "") + /* Keep this as the last attribute: */ DEF_ATTRIB(ZZ_LASTATTRIB, "Last attribute in the file", "", "") diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index 75cae450299..f25878cd670 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -75,6 +75,7 @@ static const Property hexagon_cpu_properties[] =3D { DEFINE_PROP_UNSIGNED("lldb-stack-adjust", HexagonCPU, lldb_stack_adjus= t, 0, qdev_prop_uint32, target_ulong), DEFINE_PROP_BOOL("short-circuit", HexagonCPU, short_circuit, true), + DEFINE_PROP_BOOL("ieee-fp", HexagonCPU, ieee_fp_extension, true), }; =20 const char * const hexagon_regnames[TOTAL_PER_THREAD_REGS] =3D { diff --git a/target/hexagon/translate.c b/target/hexagon/translate.c index 199b4f8c2ec..58c84df66ec 100644 --- a/target/hexagon/translate.c +++ b/target/hexagon/translate.c @@ -1211,6 +1211,7 @@ static void hexagon_tr_init_disas_context(DisasContex= tBase *dcbase, ctx->is_tight_loop =3D FIELD_EX32(hex_flags, TB_FLAGS, IS_TIGHT_LOOP); ctx->short_circuit =3D hex_cpu->short_circuit; ctx->hex_def =3D HEXAGON_CPU_GET_CLASS(hex_cpu)->hex_def; + ctx->ieee_fp_extension =3D hex_cpu->ieee_fp_extension; #ifndef CONFIG_USER_ONLY ctx->num_cycles =3D 0; ctx->pcycle_enabled =3D FIELD_EX32(hex_flags, TB_FLAGS, PCYCLE_ENABLED= ); diff --git a/target/hexagon/gen_tcg_funcs.py b/target/hexagon/gen_tcg_funcs= .py index 43e68077495..2592acf21eb 100755 --- a/target/hexagon/gen_tcg_funcs.py +++ b/target/hexagon/gen_tcg_funcs.py @@ -23,6 +23,15 @@ import hex_common from textwrap import dedent =20 +def gen_disabled_ieee_insn(f, tag, regs): + f.write(" if (!ctx->ieee_fp_extension) {\n") + for regtype, regid in regs: + reg =3D hex_common.get_register(tag, regtype, regid) + if reg.is_hvx_reg() and reg.is_written(): + reg.gen_zero(f) + f.write(" return;\n") + f.write(" }\n") + ## ## Generate the TCG code to call the helper ## For A2_add: Rd32=3Dadd(Rs32,Rt32), { RdV=3DRsV+RtV;} @@ -74,6 +83,9 @@ def gen_tcg_func(f, tag, regs, imms): i =3D 1 if immlett.isupper() else 0 f.write(f" int {hex_common.imm_name(immlett)} =3D insn->immed[{= i}];\n") =20 + if "A_HVX_IEEE_FP" in hex_common.attribdict[tag]: + gen_disabled_ieee_insn(f, tag, regs) + if hex_common.is_idef_parser_enabled(tag): gpr_operands =3D [ hex_common.get_register(tag, regtype, regid) diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py index 09a025ba13e..ce5e38bea44 100755 --- a/target/hexagon/hex_common.py +++ b/target/hexagon/hex_common.py @@ -784,6 +784,11 @@ def decl_tcg(self, f, tag, regno): TCGv_ptr {self.reg_tcg()} =3D tcg_temp_new_ptr(); tcg_gen_addi_ptr({self.reg_tcg()}, tcg_env, {self.hvx_off(= )}); """)) + def gen_zero(self, f): + f.write(code_fmt(f"""\ + tcg_gen_gvec_dup_imm(MO_64, {self.hvx_off()}, + sizeof(MMVector), sizeof(MMVector), 0); + """)) def gen_write(self, f, tag): pass def helper_hvx_desc(self, f): @@ -850,6 +855,11 @@ def decl_tcg(self, f, tag, regno): TCGv_ptr {self.reg_tcg()} =3D tcg_temp_new_ptr(); tcg_gen_addi_ptr({self.reg_tcg()}, tcg_env, {self.hvx_off(= )}); """)) + def gen_zero(self, f): + f.write(code_fmt(f"""\ + tcg_gen_gvec_dup_imm(MO_64, {self.hvx_off()}, + sizeof(MMVector), sizeof(MMVector), 0); + """)) def gen_write(self, f, tag): pass def helper_hvx_desc(self, f): @@ -882,6 +892,11 @@ def decl_tcg(self, f, tag, regno): vreg_src_off(ctx, {self.reg_num}), sizeof(MMVector), sizeof(MMVector)); """)) + def gen_zero(self, f): + f.write(code_fmt(f"""\ + tcg_gen_gvec_dup_imm(MO_64, {self.hvx_off()}, + sizeof(MMVector), sizeof(MMVector), 0); + """)) def gen_write(self, f, tag): f.write(code_fmt(f"""\ gen_vreg_write(ctx, {self.hvx_off()}, {self.reg_num}, @@ -915,6 +930,11 @@ def decl_tcg(self, f, tag, regno): TCGv_ptr {self.reg_tcg()} =3D tcg_temp_new_ptr(); tcg_gen_addi_ptr({self.reg_tcg()}, tcg_env, {self.hvx_off(= )}); """)) + def gen_zero(self, f): + f.write(code_fmt(f"""\ + tcg_gen_gvec_dup_imm(MO_64, {self.hvx_off()}, + sizeof(MMVectorPair), sizeof(MMVectorPair), 0); + """)) def gen_write(self, f, tag): pass def helper_hvx_desc(self, f): @@ -974,6 +994,11 @@ def decl_tcg(self, f, tag, regno): TCGv_ptr {self.reg_tcg()} =3D tcg_temp_new_ptr(); tcg_gen_addi_ptr({self.reg_tcg()}, tcg_env, {self.hvx_off(= )}); """)) + def gen_zero(self, f): + f.write(code_fmt(f"""\ + tcg_gen_gvec_dup_imm(MO_64, {self.hvx_off()}, + sizeof(MMVectorPair), sizeof(MMVectorPair), 0); + """)) def gen_write(self, f, tag): f.write(code_fmt(f"""\ gen_vreg_write_pair(ctx, {self.hvx_off()}, {self.reg_num}, --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549470; cv=none; d=zohomail.com; s=zohoarc; b=bvQZeGMsuVGVArI6srgbEgR4i1hb2hyS13xmlr1mXxRdFLx+nHoNeESRRqe1oi5T9e3PHTThIHAf1VT+0M1Ohl1VwJ2+cKmlmdR4vXisE/21Tx/j12sTA+ON3LYAVYVuMBgGs8ZAjXbT6Y3p39Cv+R1+HtWAqhfk4CIGUZzri/I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549470; 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=6JZfcYgiHkLJYfajT4dIecVjGyRwLhk+lobOnrbE4ow=; b=aLnenWLmxWvIYg8f7PmssSMrsBdsPlcpWg/Wg9e8pDDmlj+qJCEUE9ixP/GupR/KlLB43v/z2QIuUP/Yhhp/7VOLjuks5KFyHYH9sUpPP14EToJpKqx0Sw8CMYxLLdRC8xLvzDWVMYpqSXXs7KwHpNXQOHr8CzOy1tshjuqE/MU= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549470332706.9279858417552; Wed, 12 Aug 2026 08:44:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7L-0005HR-Ua; Wed, 12 Aug 2026 11:43:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB78-0004r4-Nq for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:35 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB76-0000O6-Us for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:34 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbtFH2728893 for ; Wed, 12 Aug 2026 15:43:22 GMT Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hfw2rjd-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:21 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2cee894b3d8so21290685ad.2 for ; Wed, 12 Aug 2026 08:43:21 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= qcppdkim1; bh=6JZfcYgiHkLJYfajT4dIecVjGyRwLhk+lobOnrbE4ow=; b=B4 DyPTl95Kvt3RE61qPzsN1mSHcm5IRh6SDQrtpKSdjeSPStYGoZ1lDL3gW4p/AhdK G9P6m1VisQfuabkvyMoSHmVWs0q0anRXOzYBQyj+KX/dpRRgOO+Pfv/ofxTLjX9Z uxR8Vxij3Rn1GJiWTNkVFxOHhamU+hgJz2w+A/Xxr/ea9DAiZ8XpCAwenXuBFSsc CHxy5Y6Ou4mS3iwQqkN8thkC64vpERo8FJ8aheRZXYclZkH32LRGU2B+y6sxsjiI Xafq4v6F0paEHW1DvfFV4iH3lXxEXlZzasS9OUhEMe7XAOtd0EJjNMOPlucXImpx Q4CFfHmGAIFI1qUBFWcw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549401; x=1787154201; darn=nongnu.org; h=content-transfer-encoding:content-type:content-type:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=6JZfcYgiHkLJYfajT4dIecVjGyRwLhk+lobOnrbE4ow=; b=GyrJpGhtWHsfHRQmVqhGu0ReGPTX5NWyiF/V9fqCo+7UB8DKh1Bfs7qHQnbCvRgI1U ZeeyjcylFDURroVphLmMNfTjrGhsXN3018tRyg4bCSjLG+KZt8vNF+ftxndHfeKAcerq mLaSc+BP4McyxnSSsBWqZdg+M+Aghr29Fw1NZ0aCqk4+JfwuNgl133nb+9G+va+VGSfD 3tZpM2SgPwMN1gQ0gH1eVHdqOifJpkXDgAtFb2Gy5C7db584O5iPMQ+2Q+BPVM45sf9z 3zlu1YrecZk634I9y4qbvSvKkINFvR3vcv9IBmj/7ZXaTI9xMZiC0ASNM1lNNrjrHDEl UEow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549401; x=1787154201; h=content-transfer-encoding:content-type:content-type: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 :content-type; bh=6JZfcYgiHkLJYfajT4dIecVjGyRwLhk+lobOnrbE4ow=; b=PIaa4PmOU/1zAzJvsESKvMoNk6I5V9EPy9bpN2OEqppK2isidooB6KKWFlzcf1wcE4 Er4v8Sn2+sjGyRxf1rP1Vg6Qb/QybGTmXh+xKC7RQX1Q/xESgNxHo+jAHah94nrefwz5 fF3rSxZoHoJq+abuFGfbnE8azHdZZdmWMBYYQ8rUlOUQYVgrB8ZcovsygFq0E9KcWG2T jvTy2HdhWk8Dmh7inytyUdcIiYrqCyPwFTRHtvhuHHcabzYKxXx5WkwghfrPHR2Cn/x7 Nv6Y4C8Vl9tGDkBwZCW+84sWX8ptuRAq44iIBvykupw99kTtrkERFIJrRW1Ug2FZdRqh naLg== X-Gm-Message-State: AOJu0Yy/Ekh74EfovAaaGssvVh/6WlqQoSmJNsSCkq/C+hPfEGMMdygH gXFfFdaWYF5vHIvtWVcGCHoAubZczdbgjrEtLKdbCSQZcz9nXm8DjPhbWlGY+hq1CMRI0q32AsN Lm0avKODRe3xAl070f5fp3PY07YoIof7tNqPNT7DkFrIA8PpaBpFBS+plh5seq7kO2g== X-Gm-Gg: AR+sD12AtYAcyQhpQ+a6ia+DMz0+OPVKBGwJ4ezkx39wXR+hVX4z8RAzd5pKRC7STXZ xIeAlVegqpN3vJJKFIW2sf8gSx8BwbuEW7MInFrPJ1ZhudWZk2JcGfRbJeUQBKHcCT5yfoet+Zw bqBlxKQAm0ER96ytb+C8aKVL3weBXRRJQ4KzgmwbahsRlPQ+wO8mnB35YB5UUxPafQMbSulxHYw UD4SV9S02mE6M259cRPc9FKY2dB7agX4w0suI5hAstAIF7hGQaZDL3mecXcAkgERk6WMxfsbc7S IWelX6whaDs9rTgQQMDmFA0GVa3nC3AESABohAWeGavSIWiFWZZeSyNmSvn95F6cZx0V4g1pFYA BhF/X2XVQdCnZFn4fKPyKcTqFDosvgNpwfcViRz1yRq117DRs X-Received: by 2002:a05:6a20:734b:b0:3c0:b766:74f4 with SMTP id adf61e73a8af0-3cc3f7e214emr5955567637.31.1786549400742; Wed, 12 Aug 2026 08:43:20 -0700 (PDT) X-Received: by 2002:a05:6a20:734b:b0:3c0:b766:74f4 with SMTP id adf61e73a8af0-3cc3f7e214emr5955509637.31.1786549400247; Wed, 12 Aug 2026 08:43:20 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PULL v2 29/41] hexagon: group cpu configurations in their own struct Date: Wed, 12 Aug 2026 08:42:08 -0700 Message-Id: <20260812154220.1029828-30-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX3WHqRbnqxhtW ZZWoD34tCH4Gtru/KBuFBC6uG+Mp8jvZ8ycUcnCvhguKqzfNicbV+ZBj4lU3bfE6h0dYq3BGdgB zH17tMe0fo/+WtSc7g4766yHQ+thcPg= X-Proofpoint-GUID: -G1cLwYzZIiV2mm_QU_ZTF2qjvvEpA-o X-Authority-Analysis: v=2.4 cv=fpDsol4f c=1 sm=1 tr=0 ts=6a7c9499 cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=KKAkSRfTAAAA:8 a=Cawoy3z-aL3jkQ-xqsQA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: -G1cLwYzZIiV2mm_QU_ZTF2qjvvEpA-o X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX+eVG3HU6gY3N EvmBsVPSLM0FUYP8aIflq/RDCEwhfOqoe/u6L7I0Djb5y5hTvTqNrrUxuQyE+o6UHkL05xcn0Hu lcLWt6424eOigNcfp+uTIEzFek+A6tY5XUG9WEJ/rdJDpta4iTtV/udJv8i+Vq1OYSBOn0igdnQ YHcojWljyi3HeR/eDRKljOgsdcIQ7cbekjgHKYtKxVbnKEPNYofhmWr4kQrJmtljSJQNiE43P3C JSOFOq+Ot3IwSNdFc4J3/+c4oHf6oj6JzlOYpG6qfI+ZXn7hQgYpFEKvdxkYMjNksrHIm4PD9BI GK7Q3wDcljfN0MQfScRXa9lD6tD+lsJpbXvq/A/rF7yPGOi/h/NEkZZPeCa2oggXRwdCC9wuIBy jrZXIaE1ZPvxpJoH7mHlXrCwjfVYEEVFHtfVI/pgHDf/a1KzQoov+DQulaaqgW47wtu2yTLl6fz OkqX3rH8Whiel+R8VDQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 spamscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 malwarescore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549471709158500 Content-Type: text/plain; charset="utf-8" From: Matheus Tavares Bernardino This will be used in a follow up commit. Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/8f9a2e2ccfd2eeda73a63d1a6abbfd6e54= 58b44c.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/cpu.h | 10 +++------- target/hexagon/cpu_bits.h | 7 +++++++ target/hexagon/cpu.c | 14 +++++++------- target/hexagon/translate.c | 6 +++--- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h index 502f27983be..b0d726bf022 100644 --- a/target/hexagon/cpu.h +++ b/target/hexagon/cpu.h @@ -186,15 +186,13 @@ typedef struct HexagonCPUClass { const HexagonCPUDef *hex_def; } HexagonCPUClass; =20 +#include "cpu_bits.h" + struct ArchCPU { CPUState parent_obj; =20 CPUHexagonState env; - - bool lldb_compat; - target_ulong lldb_stack_adjust; - bool short_circuit; - bool ieee_fp_extension; + HexagonCPUConfig cfg; #ifndef CONFIG_USER_ONLY HexagonTLBState *tlb; uint32_t boot_addr; @@ -204,8 +202,6 @@ struct ArchCPU { #endif }; =20 -#include "cpu_bits.h" - FIELD(TB_FLAGS, IS_TIGHT_LOOP, 0, 1) FIELD(TB_FLAGS, MMU_INDEX, 1, 3) FIELD(TB_FLAGS, PCYCLE_ENABLED, 4, 1) diff --git a/target/hexagon/cpu_bits.h b/target/hexagon/cpu_bits.h index 164e74c782b..797ecabca92 100644 --- a/target/hexagon/cpu_bits.h +++ b/target/hexagon/cpu_bits.h @@ -21,6 +21,13 @@ #include "qemu/bitops.h" #include "cpu-qom.h" =20 +typedef struct HexagonCPUConfig { + bool lldb_compat; + uint32_t lldb_stack_adjust; + bool short_circuit; + bool ieee_fp_extension; +} HexagonCPUConfig; + #define PCALIGN 4 #define PCALIGN_MASK (PCALIGN - 1) =20 diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index f25878cd670..3bc2a2efa97 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -71,11 +71,11 @@ static const Property hexagon_cpu_properties[] =3D { TYPE_HEXAGON_GLOBALREG, HexagonGlobalRegState *), DEFINE_PROP_UINT32("htid", HexagonCPU, htid, 0), #endif - DEFINE_PROP_BOOL("lldb-compat", HexagonCPU, lldb_compat, false), - DEFINE_PROP_UNSIGNED("lldb-stack-adjust", HexagonCPU, lldb_stack_adjus= t, 0, - qdev_prop_uint32, target_ulong), - DEFINE_PROP_BOOL("short-circuit", HexagonCPU, short_circuit, true), - DEFINE_PROP_BOOL("ieee-fp", HexagonCPU, ieee_fp_extension, true), + DEFINE_PROP_BOOL("lldb-compat", HexagonCPU, cfg.lldb_compat, false), + DEFINE_PROP_UNSIGNED("lldb-stack-adjust", HexagonCPU, cfg.lldb_stack_a= djust, + 0, qdev_prop_uint32, target_ulong), + DEFINE_PROP_BOOL("short-circuit", HexagonCPU, cfg.short_circuit, true), + DEFINE_PROP_BOOL("ieee-fp", HexagonCPU, cfg.ieee_fp_extension, true), }; =20 const char * const hexagon_regnames[TOTAL_PER_THREAD_REGS] =3D { @@ -127,7 +127,7 @@ const char * const hexagon_gregnames[] =3D { static target_ulong adjust_stack_ptrs(CPUHexagonState *env, target_ulong a= ddr) { HexagonCPU *cpu =3D env_archcpu(env); - target_ulong stack_adjust =3D cpu->lldb_stack_adjust; + target_ulong stack_adjust =3D cpu->cfg.lldb_stack_adjust; target_ulong stack_start =3D env->stack_start; target_ulong stack_size =3D 0x10000; =20 @@ -239,7 +239,7 @@ static void hexagon_dump(CPUHexagonState *env, FILE *f,= int flags) { HexagonCPU *cpu =3D env_archcpu(env); =20 - if (cpu->lldb_compat) { + if (cpu->cfg.lldb_compat) { /* * When comparing with LLDB, it doesn't step through single-cycle * hardware loops the same way. So, we just skip them here diff --git a/target/hexagon/translate.c b/target/hexagon/translate.c index 58c84df66ec..06a8159d283 100644 --- a/target/hexagon/translate.c +++ b/target/hexagon/translate.c @@ -1209,9 +1209,9 @@ static void hexagon_tr_init_disas_context(DisasContex= tBase *dcbase, ctx->num_hvx_insns =3D 0; ctx->branch_cond =3D TCG_COND_NEVER; ctx->is_tight_loop =3D FIELD_EX32(hex_flags, TB_FLAGS, IS_TIGHT_LOOP); - ctx->short_circuit =3D hex_cpu->short_circuit; + ctx->short_circuit =3D hex_cpu->cfg.short_circuit; ctx->hex_def =3D HEXAGON_CPU_GET_CLASS(hex_cpu)->hex_def; - ctx->ieee_fp_extension =3D hex_cpu->ieee_fp_extension; + ctx->ieee_fp_extension =3D hex_cpu->cfg.ieee_fp_extension; #ifndef CONFIG_USER_ONLY ctx->num_cycles =3D 0; ctx->pcycle_enabled =3D FIELD_EX32(hex_flags, TB_FLAGS, PCYCLE_ENABLED= ); @@ -1268,7 +1268,7 @@ static void hexagon_tr_translate_packet(DisasContextB= ase *dcbase, CPUState *cpu) * so end the TLB after every packet. */ HexagonCPU *hex_cpu =3D env_archcpu(env); - if (hex_cpu->lldb_compat && qemu_loglevel_mask(CPU_LOG_TB_CPU)) { + if (hex_cpu->cfg.lldb_compat && qemu_loglevel_mask(CPU_LOG_TB_CPU)= ) { ctx->base.is_jmp =3D DISAS_TOO_MANY; } } --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549689; cv=none; d=zohomail.com; s=zohoarc; b=JrLHSaxtS14wMQG5zAyzWju/x2le20LWJ/U6emI/S7hwhtTskyCrgsYYw7uzmKWvC+XXrqebkUVNKdpx0msh5c83hzplBiFp0hRyaqzWVQ9XBSqZQ+O3sEjq62vhizpRU7qMPDXVtyb2zFTSQcmz/UCx76eUL7Ce4sx/9Usj24g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549689; 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=ilQOOAp/UKD4L2UOJGfi12Jb+ODX4pSGS6wV85LXr8E=; b=RsVmFfvdiDXXYVJG2wpTpsy/LL3YYWibJW7q0B3oEvlpIByIgHTYFF1VWJ2BZj1Njd7OixCaIlAMs9KU2hlej+IBszUwJM5VacH9rmbqP8BTW9hvTKiEumqu3Hl8t9NMvIEAeoKN16z572Kt02fLzVKb4PsnUCC0yuoTkNsIX3U= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178654968933730.74102809885278; Wed, 12 Aug 2026 08:48:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7K-0005Bl-0p; Wed, 12 Aug 2026 11:43:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB70-0004hP-Dy for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:26 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB6y-0000OV-HC for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:26 -0400 Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbxqU3194427 for ; Wed, 12 Aug 2026 15:43:23 GMT Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0mnda0ej-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:23 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-caf5fa127d4so1607491a12.0 for ; Wed, 12 Aug 2026 08:43:23 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= qcppdkim1; bh=ilQOOAp/UKD4L2UOJGfi12Jb+ODX4pSGS6wV85LXr8E=; b=Y/ r3eOf7dKg4ZkW2TISUADfOzlKxX6yKH9tXbbmymVUjzelt4tOVcHe1zTWEtsZeet mf7sAm1yKtOG7MF8RICatEa6adbnmJjhE+UrCB3bFdxKKqRXcnZqNkAP7rTJt0Dt VfgrYIbaHKnCevAoLyq5bFVFnIeCQ3/BQfMbe8vVjmLTlmQi1XhOzl4U1V18+m7j SSxHViAcK2RCjQcyOT1E4T+09/la2TsAh5/2q0C50fCtcBWCYM4/4ee5P+hB6OGg IVDSZ8wCAp5FS+IgTPBPQM+YjpeeldqY1hKHwNydf0/rijN3RGRsS6ki12eh9qjf IYUPDwIa6ZJNs7MJGy6g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549402; x=1787154202; darn=nongnu.org; h=content-transfer-encoding:content-type:content-type:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=ilQOOAp/UKD4L2UOJGfi12Jb+ODX4pSGS6wV85LXr8E=; b=YBjQoSBT2XVAbsGeFrsCzmQyCLgsIs9IK56rhpwvQ4/wS1DekdbGVrihG0TOfhCVCp NcRb0CclOhM12HqMjrHo1ujRgndEum1NvfAnXPOOvIG012dppU0GsT5QpSxClYO+mLlO /ZQtyIFByPSk3iuqyqgi9Tiam/frRnb3aiFSPWS8qXQ25SquKXUTMZFlBhH8935MH2O4 xCiVZZnpoxbkUbRTz84lKYMjAb3ByTZNfJlY4whcODEB7wMMsiguFfqZDDpHAj/2lJkL dlhQFsRiuvO6Nv+R+N8IYTP9O8u4CgZJmwB1OwvOXGTfM9cirYxiIIc3TgNO0yWc5E5z fflg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549402; x=1787154202; h=content-transfer-encoding:content-type:content-type: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 :content-type; bh=ilQOOAp/UKD4L2UOJGfi12Jb+ODX4pSGS6wV85LXr8E=; b=VYt2xT2wJu7+KB1w+It32WToFjHOe9UukDjgJMVlmfN+BgLjSRhRz/hYkKv0xRKkct 59Yxb1bpRi8BcMxLAy1tVbC5vGuVQmPKtOLuVZIPuRsZ82YofuCPDsozoDQxz7XWB+1I guKXGIhMq+UnBsTAGnvOyxBuDIl7/hh68yIAWT1oMa810VZwtukFMW1ytpV3hBMELzFo NbJDwqc5BvKa/gSywjnlVZ4jvEc4MtOmGLErgTaEuufVEnU76l3Bq5DfFvU/dSahfF4D 9v0hPR4+vE6nJe74LarG8T5KshBA2eFKE1/2imAwH4a1sroZ44jTmTkZP2/wjEVmgiIN AYCg== X-Gm-Message-State: AOJu0Yy2D9Af5dtvaYtzy+J8DjnvRCo+/owR4zJL1OeB5ldkHr61Bi66 J45+CAs0j1jytxg+4lq3FVWlJphEmHmNT5eghM2liMX5duT1+40GwCLMzdtTXWVo7BskrFUxCCt /KHk5qXOJKLGo8KfC1/ddpkuNw1j/iGAAS8Dh68XhzX0wcEaCl9+bMAvzYIXO7QPs3g== X-Gm-Gg: AR+sD117YPfvDo3Xhj+lp9H7KWk/kcy91DeUCpGoJqVfZjuZbbDxb5X4mm2JQfRsSL8 E3jd6R/4NqN6wTdkM2qPIt6INkCQNa/mfTc0EzTGFLCzmiSDkLGyPHpXAeTtlVFCV9oAxFHY+5K oSL9fsO1ELrpifAzzPHaNcbd7cdpQ049BRINfzjI3qf6yhIC1R9IUsbpmkTEaHKBzEzUvc0VGmx v6s7SrEbgT3Hyq2AeLPbajqjbBSdMKf048BkmpDXdEEgF8poxwJtM3w8DjY7zzDAfVdLVG8Ljtd qxpTcZH6gvsVdD1vbdbw0FkVPE0QaQcTp0quAXkbuEXelT23l/hADjA3mZoZltWQ41j12dox9k0 7s34pvG/I2cA31JgpR+1kzF9WSAN0NIPm1DFZNyCZ8AZTVh53 X-Received: by 2002:a05:6a20:3d1c:b0:3c0:278c:6a31 with SMTP id adf61e73a8af0-3cc3f5c7203mr7624164637.11.1786549402413; Wed, 12 Aug 2026 08:43:22 -0700 (PDT) X-Received: by 2002:a05:6a20:3d1c:b0:3c0:278c:6a31 with SMTP id adf61e73a8af0-3cc3f5c7203mr7624101637.11.1786549401863; Wed, 12 Aug 2026 08:43:21 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PULL v2 30/41] hexagon: print info on "-d in_asm" for disabled IEEE FP instructions Date: Wed, 12 Aug 2026 08:42:09 -0700 Message-Id: <20260812154220.1029828-31-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXysJkZC3oJEFD oFMu0EBad1bbGjHw7PJmLFXXFtvV31jeNn3lx5+dKceLRxuyQI6WZE0hJGuaENU1tF6PgYeHhAT PtzMX6K0+NT8SxnmXme27g6VJOcFUQY= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX4WvA70Efqofe aIhklkAe/0IRj83Trek8B0vpKhngoVInqmc97eIeFr4IzUChXF3iOkIW+NZqSp06BhqtcYiTqq9 TKF61yp2RMjWLzRONcPw28RSndcpyWUcwF7OgWOj6Gy0auK7cfwS4nDXHx+/iDWBDNIz7h854vS HG3kMkgVrySA33d4HHuZnBswNr4QXREkLjVjbQdFXl5BdpH5pZ95eG7vVvsoUxmgwt/0n3E0EBw J0FMTz9GW+GYgAx/3CcW6zkpSFh5qBbjWLRYqHywGW0IVjIwqDWk7sB1rd9Qgse2B8YvnhojHsp WTi9fs+RRWvFvePTaXitsR7R1c6Ss77EWz10VPXrBNscgxXtPih1Dt+jn0/C1Rqj018Kk1AUG0S +kEqA/z4k+6fPQghYtZzKAxc2EDailNues7/LyJ+bFD5fx6zY0hdKmewvyz37fBWEwJHTt50iqV i7xOJqk50iqByB+ZCsg== X-Proofpoint-GUID: lOm15f7PEJvB2BXhIQZK-tEsZgGd8iE4 X-Authority-Analysis: v=2.4 cv=C87ZDwP+ c=1 sm=1 tr=0 ts=6a7c949b cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=KKAkSRfTAAAA:8 a=IhfiGzgP4Q6HOvFVnfUA:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: lOm15f7PEJvB2BXhIQZK-tEsZgGd8iE4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 suspectscore=0 phishscore=0 lowpriorityscore=0 spamscore=0 clxscore=1015 priorityscore=1501 bulkscore=0 adultscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549691355158500 Content-Type: text/plain; charset="utf-8" From: Matheus Tavares Bernardino When cpu->cfg.ieee_fp_extension is off, IEEE FP instructions don't get executed. Let's print that info on the "-d in_asm" output to help users. This will generate an output like the following: 0x00020e30: 0x1f82e1c0 { V0.sf =3D vadd(V1.sf,V2.sf) (disabled: no i= eee_fp) } Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/1bdc772e4a795ecd9f5bf2b7e7143cc4b2= 97318c.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/cpu_bits.h | 5 +++-- target/hexagon/printinsn.h | 2 +- disas/hexagon.c | 4 ++-- target/hexagon/cpu.c | 5 ++++- target/hexagon/decode.c | 4 ++-- target/hexagon/printinsn.c | 9 +++++++-- 6 files changed, 19 insertions(+), 10 deletions(-) diff --git a/target/hexagon/cpu_bits.h b/target/hexagon/cpu_bits.h index 797ecabca92..a8fba4aa188 100644 --- a/target/hexagon/cpu_bits.h +++ b/target/hexagon/cpu_bits.h @@ -26,6 +26,7 @@ typedef struct HexagonCPUConfig { uint32_t lldb_stack_adjust; bool short_circuit; bool ieee_fp_extension; + const HexagonCPUDef *hex_def; } HexagonCPUConfig; =20 #define PCALIGN 4 @@ -130,7 +131,7 @@ static inline bool is_packet_end(uint32_t endocing) return ((bits =3D=3D 0x3) || (bits =3D=3D 0x0)); } =20 -int disassemble_hexagon(uint32_t *words, int nwords, bfd_vma pc, GString *= buf, - const HexagonCPUDef *hex_def); +int disassemble_hexagon(uint32_t *words, int nwords, bfd_vma pc, + GString *buf, const HexagonCPUConfig *cfg); =20 #endif diff --git a/target/hexagon/printinsn.h b/target/hexagon/printinsn.h index de962b5f2e6..c8389408d39 100644 --- a/target/hexagon/printinsn.h +++ b/target/hexagon/printinsn.h @@ -22,6 +22,6 @@ #include "insn.h" =20 void snprint_a_pkt_disas(GString *buf, Packet *pkt, uint32_t *words, - target_ulong pc, const HexagonCPUDef *hex_def); + target_ulong pc, const HexagonCPUConfig *cfg); =20 #endif diff --git a/disas/hexagon.c b/disas/hexagon.c index 36b8321c26a..e2d3804606e 100644 --- a/disas/hexagon.c +++ b/disas/hexagon.c @@ -31,7 +31,6 @@ =20 int print_insn_hexagon(bfd_vma memaddr, struct disassemble_info *info) { - const HexagonCPUDef *hex_def =3D (const HexagonCPUDef *)info->target_i= nfo; uint32_t words[PACKET_WORDS_MAX]; bool found_end =3D false; GString *buf; @@ -58,8 +57,9 @@ int print_insn_hexagon(bfd_vma memaddr, struct disassembl= e_info *info) return PACKET_WORDS_MAX * sizeof(uint32_t); } =20 + const HexagonCPUConfig *cfg =3D info->target_info; buf =3D g_string_sized_new(PACKET_BUFFER_LEN); - len =3D disassemble_hexagon(words, i, memaddr, buf, hex_def); + len =3D disassemble_hexagon(words, i, memaddr, buf, cfg); (*info->fprintf_func)(info->stream, "%s", buf->str); g_string_free(buf, true); =20 diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index 3bc2a2efa97..666b0cad532 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -444,12 +444,13 @@ static void hexagon_cpu_disas_set_info(const CPUState= *cs, const HexagonCPU *cpu =3D HEXAGON_CPU(cs); info->print_insn =3D print_insn_hexagon; info->endian =3D BFD_ENDIAN_LITTLE; - info->target_info =3D HEXAGON_CPU_GET_CLASS(cpu)->hex_def; + info->target_info =3D &cpu->cfg; } =20 static void hexagon_cpu_realize(DeviceState *dev, Error **errp) { CPUState *cs =3D CPU(dev); + HexagonCPU *cpu =3D HEXAGON_CPU(dev); HexagonCPUClass *mcc =3D HEXAGON_CPU_GET_CLASS(dev); Error *local_err =3D NULL; =20 @@ -459,6 +460,8 @@ static void hexagon_cpu_realize(DeviceState *dev, Error= **errp) return; } =20 + cpu->cfg.hex_def =3D mcc->hex_def; + gdb_register_coprocessor(cs, hexagon_hvx_gdb_read_register, hexagon_hvx_gdb_write_register, gdb_find_static_feature("hexagon-hvx.xml")); diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c index e6bb7733be8..b12e91fe6a6 100644 --- a/target/hexagon/decode.c +++ b/target/hexagon/decode.c @@ -856,7 +856,7 @@ int decode_packet(DisasContext *ctx, int max_words, con= st uint32_t *words, =20 /* Used for "-d in_asm" logging */ int disassemble_hexagon(uint32_t *words, int nwords, bfd_vma pc, - GString *buf, const HexagonCPUDef *hex_def) + GString *buf, const HexagonCPUConfig *cfg) { HexagonCPUDef any_def =3D { .hex_version =3D HEX_VER_ANY, /* Allow decode to accept anything = */ @@ -867,7 +867,7 @@ int disassemble_hexagon(uint32_t *words, int nwords, bf= d_vma pc, ctx.hex_def =3D &any_def; =20 if (decode_packet(&ctx, nwords, words, &ctx.pkt, true) > 0) { - snprint_a_pkt_disas(buf, &ctx.pkt, words, pc, hex_def); + snprint_a_pkt_disas(buf, &ctx.pkt, words, pc, cfg); return ctx.pkt.encod_pkt_size_in_bytes; } else { for (int i =3D 0; i < nwords; i++) { diff --git a/target/hexagon/printinsn.c b/target/hexagon/printinsn.c index 1673e954214..023ea12dba5 100644 --- a/target/hexagon/printinsn.c +++ b/target/hexagon/printinsn.c @@ -139,7 +139,7 @@ static void snprintinsn(GString *buf, Insn *insn) } =20 void snprint_a_pkt_disas(GString *buf, Packet *pkt, uint32_t *words, - target_ulong pc, const HexagonCPUDef *hex_def) + target_ulong pc, const HexagonCPUConfig *cfg) { bool has_endloop0 =3D false; bool has_endloop1 =3D false; @@ -171,12 +171,17 @@ void snprint_a_pkt_disas(GString *buf, Packet *pkt, u= int32_t *words, } =20 g_string_append(buf, "\t"); - if (opcode_supported(pkt->insn[i].opcode, hex_def)) { + if (opcode_supported(pkt->insn[i].opcode, cfg->hex_def)) { snprintinsn(buf, &(pkt->insn[i])); } else { g_string_append(buf, ""); } =20 + if (!cfg->ieee_fp_extension && + GET_ATTRIB(pkt->insn[i].opcode, A_HVX_IEEE_FP)) { + g_string_append(buf, " (disabled: no ieee_fp)"); + } + if (i < pkt->num_insns - 1) { /* * Subinstructions are two instructions encoded --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549476; cv=none; d=zohomail.com; s=zohoarc; b=NLl9TPgjBaMi8FsUtUL7YjJ+gX8hp2gVlMe+mvzf9x8yfPDYBuc0+jlI2gk8BUdsbu+/dTGoi9tzDjMCFPy0LSUsvS1x5S2dWaCjNG7iDM9Z4tkPPWW6Jw2kN3N+Hh6FZtKKwR8L5fJKqzrsXhZak1wlfwSTWfN+/Yc3wNAmfp0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549476; 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=vF2DvS48k4WAVgJLmyJZHWhlugQWf4EC+15vhjdlsoc=; b=We0wR1OXLhVze1jZAQbYQHLGceVXOsrRaKfwIMa9t0kRCSlMKLUbhbND4DK+qKrtJmMzorXpHu/3LjM9EXIxOQfb1GN82Pvg15I5NwXgkuA1P9CgQeD07t9T51ANRcCVHIXNAtwJaKR0Nc79pd2PQ+yWwr4SDLaKgrUUS+yXw3I= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549476834771.0286909233077; Wed, 12 Aug 2026 08:44:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7R-0005Y9-Gj; Wed, 12 Aug 2026 11:43:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7C-0004tx-Dw for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:39 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB79-0000P9-Pc for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:38 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbrTV3971762 for ; Wed, 12 Aug 2026 15:43:25 GMT Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0jgrjjd1-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:24 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-3811279d51aso2104997a91.1 for ; Wed, 12 Aug 2026 08:43:24 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= vF2DvS48k4WAVgJLmyJZHWhlugQWf4EC+15vhjdlsoc=; b=OjiLlvfSMOCLcOhM D+rl5OJGp2gS4glb+3XDn51Ho693gA+K67gRJMprz7IUohaB0WqnwmNfip86mxe6 C7fDU4DKr+AUC8FJNpkrGuwjfxnx0VWo1s/hFikwcFEjsNwJ8Nl9cFirBSRhuNMh FxeXHGfXkLlngKTNo/1DfGrxV04BDixvWedZwB33w4mwipc4pjn9EzjjCuYSXs84 vW4b8YLhnQPraSXBsw/cTFNN0Eg8ihYo6UUkv5W01/i4kx6TVEGnf7larM2urDhv b3aiZa70Tg/z/fLoL22VXlQh692/RsfjI22C/iXQmtgJwjLow27YMNxXPoR7PTX4 kYKscg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549404; x=1787154204; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=vF2DvS48k4WAVgJLmyJZHWhlugQWf4EC+15vhjdlsoc=; b=OJG3qszgNoVkHkLMMzKHlkMf2YiWI9k8aLw2OOgy0T0Y1BgDS30g5UcsNXFJS8ptnY hz3RpM3CbEWaNElW20/9AJlG4hO4mjgmjPoiYgLJDFtSEQWpE9qE44Yur9xZO/AQ2t2N kn9Nto/3tWp4Jr/PRkSZSxEPBmZPV3Dt3svmwNBdVI/E1p3Ckj94jgNTw0WoYz4IgLG7 36q9M25Ah/5uyZ8tiYtAp5GNpGbZe+elOuUwPuct/2BcoFzQcSwp+98SYIEADJRJ4fOX LOu4OB89jfMRmN0wmS7wAYwNezxKM3dCix775ZOBIeMC2Z3QCVVyQamzj9IytvA0w1HA XA2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549404; x=1787154204; h=content-transfer-encoding:content-type: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 :content-type; bh=vF2DvS48k4WAVgJLmyJZHWhlugQWf4EC+15vhjdlsoc=; b=Uk3Qy1S64IQQ6wmzIam6SXv4zagE+hNK2jexePLkimb5fmWcK0IF+M8gvTSN/Jyna0 GHE98Y+9L6l+INHP0wOITLxKdliyDmTw7p5ldmoA12SSqmqopIPM2qbpe6p8M/Mlxc0m 3BMg6LpnbWMj0aPXWsMPGpcFNvvDiRvGP+qWUmrJbEnIAgixS7pnquGDakuccjXGtAb8 UAGopw3yLAIIKB6EbEi2xmbsnu0cRNYRAMctmeahC1tNxBifD56A2gKTJhQKBpup8wkd 4kR6D1pTp4+4BVutxFIa4nrq18j/u8B9eTnb3cw/briSdpx3oYhQgWGN4PycZCXB4PfO gdMg== X-Gm-Message-State: AOJu0YwdisPiFN/61YDX/Qs8cow0VT4Obhpi7r+TOeEEzXInw1l1epAL sOr6Aubo0RkVHkmEmzgpQIcthI9vyao8wBe3CFc+0wF4RH/st7+hZt5j42x88RFv8P1H8Evnnbw EluTC8M8eICW3vC618qk+2QN+rpoyzy6nD+4BhnHjL1aD9vlbgMs5LrNQqnuYniNM1w== X-Gm-Gg: AR+sD12TzcVQL4S1ikIBsGxUwpY6jvIBoWllroMUU7i2JEYLQJF6p94GT45HGHYX4h5 nAWXchyCWIqmzGHAAbiUWAWnHKp3em8iHreyIVW+TCOsnuxozFiRH16X7vODrcJKZZJE/WbHP+/ cPwv7djW3SFzmsPntebja1L7hNfbAT4vQdwUQygDpiRT2ychVkekH4Pb4QuR+Up54X9q8L6x12l 13G9pIuO72wsLOjigjUs7y0qu8LCfYFc7BA4YwngMFyunbavM0ujm6lScE2mmrVhpkiQTdsLs3N ULF+Oc67kuFho8HnvbfjhUoQkfY7sa4MdIrb6fnmzsulVTcUW12GYQwjI5S0eSTdJHzQ3+TeJB9 XOjxJOzNy3De7D5pcfzwYt8O/4mROigj5QIBrw5FIxAH7JdAR X-Received: by 2002:a05:6a21:6012:b0:3c3:6c90:65b1 with SMTP id adf61e73a8af0-3cc3f74c2e2mr6807773637.25.1786549403728; Wed, 12 Aug 2026 08:43:23 -0700 (PDT) X-Received: by 2002:a05:6a21:6012:b0:3c3:6c90:65b1 with SMTP id adf61e73a8af0-3cc3f74c2e2mr6807700637.25.1786549403139; Wed, 12 Aug 2026 08:43:23 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , Pierrick Bouvier Subject: [PULL v2 31/41] target/hexagon: add v68 HVX IEEE float arithmetic insns Date: Wed, 12 Aug 2026 08:42:10 -0700 Message-Id: <20260812154220.1029828-32-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX2hIZ5zfw5ilZ N4xlvaiGmEBC8Ahz/LyTZvKcJLLkn6VILZFhF08qhwQwlb8zT3+IJCj9CjwFURaejujYyd7nVCT Kh3LA8hCnuQykqF2JJTBlEdpAr4HRF5UQpzU5+whba9VOYCUyh5NkpfZYdJiILGubQNm8QxJtCL ohqJRgacZzKx4cjFn9D5YF+zN+PSGyq2cTX1nm0MKl0MsVTBVIPEstDjlSyF29PtBC/whZ+zJDb SfuKCoxgFrWwFcngU9x3ipBzmEj/dLuzMkKsS5qL/XhOdpgFS4Na5ZL/O3MsZKQBx1wBhuc3Cui T3nnlLuu7E+ioQTiyPUshRYk1Kvbp5rtQDnQN3m56gJeZQv3bD3c33xR6rJE+/N0dSj/TAu8Mae EgWfXiJ6PLv9Q9euGzhzRYFgPalns2Ejlp2953iscvchV52G18IAY0OBIx5WkPlVHzqOejUNPUj rSBaH7r2RvJiGmKC0hA== X-Proofpoint-ORIG-GUID: pThl7jK6wGNz-9SQwZBD6mPFLJnRAHrQ X-Authority-Analysis: v=2.4 cv=TNJ1jVla c=1 sm=1 tr=0 ts=6a7c949c cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=jpBV4qzoUt2RcIzicscA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-GUID: pThl7jK6wGNz-9SQwZBD6mPFLJnRAHrQ X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX3ySQuGf9tvty vKb42fogS2dh5uyR4Gpo7FZMxcvGdjezLQnmcdqdFN1wJ5of8iGs1W2V9T4pQ7RN9ceSPO6hDRT PgqUmCqNb9wmE+cgYj0m/+a9EySTiTM= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 phishscore=0 impostorscore=0 adultscore=0 suspectscore=0 bulkscore=0 spamscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549477891158500 From: Matheus Tavares Bernardino Add HVX IEEE floating-point arithmetic instructions: - vmpy_sf_sf, vmpy_sf_hf, vmpy_hf_hf: multiply operations - vdmpy_sf_hf: dot-product multiply - vmpy_sf_hf_acc, vmpy_hf_hf_acc, vdmpy_sf_hf_acc: multiply-accumulate - vadd_sf_sf, vsub_sf_sf, vadd_sf_hf, vsub_sf_hf: add/sub with sf output - vadd_hf_hf, vsub_hf_hf: add/sub with hf output Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/8923b6c6bc4fe750c07a07bcd490761f8b= ab52fe.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/cpu.h | 1 + target/hexagon/mmvec/hvx_ieee_fp.h | 18 ++++ target/hexagon/mmvec/macros.h | 1 + target/hexagon/mmvec/mmvec.h | 2 + target/hexagon/attribs_def.h.inc | 4 + target/hexagon/arch.c | 8 ++ target/hexagon/cpu.c | 3 + target/hexagon/mmvec/hvx_ieee_fp.c | 21 ++++ target/hexagon/hex_common.py | 1 + target/hexagon/imported/mmvec/encode_ext.def | 18 ++++ target/hexagon/imported/mmvec/ext.idef | 101 +++++++++++++++++++ target/hexagon/meson.build | 1 + 12 files changed, 179 insertions(+) create mode 100644 target/hexagon/mmvec/hvx_ieee_fp.h create mode 100644 target/hexagon/mmvec/hvx_ieee_fp.c diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h index b0d726bf022..c50fbb3f72a 100644 --- a/target/hexagon/cpu.h +++ b/target/hexagon/cpu.h @@ -152,6 +152,7 @@ typedef struct CPUArchState { MemLog mem_log_stores[STORES_MAX]; =20 float_status fp_status; + float_status hvx_fp_status; =20 target_ulong llsc_addr; target_ulong llsc_val; diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h new file mode 100644 index 00000000000..75008deb3b7 --- /dev/null +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HEXAGON_HVX_IEEE_H +#define HEXAGON_HVX_IEEE_H + +#include "fpu/softfloat.h" + +#define f16_to_f32(A) float16_to_float32((A), true, &env->hvx_fp_status) + +float32 fp_mult_sf_hf(float16 a1, float16 a2, float_status *fp_status); +float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, float16 a4, + float_status *fp_status); + +#endif diff --git a/target/hexagon/mmvec/macros.h b/target/hexagon/mmvec/macros.h index c7840fbf2e1..ac709d89938 100644 --- a/target/hexagon/mmvec/macros.h +++ b/target/hexagon/mmvec/macros.h @@ -23,6 +23,7 @@ #include "mmvec/system_ext_mmvec.h" #include "accel/tcg/getpc.h" #include "accel/tcg/probe.h" +#include "mmvec/hvx_ieee_fp.h" =20 #ifndef QEMU_GENERATE #define VdV (*(MMVector *restrict)(VdV_void)) diff --git a/target/hexagon/mmvec/mmvec.h b/target/hexagon/mmvec/mmvec.h index 4a4f6cc9805..9841687f83f 100644 --- a/target/hexagon/mmvec/mmvec.h +++ b/target/hexagon/mmvec/mmvec.h @@ -41,6 +41,8 @@ typedef union { int16_t h[MAX_VEC_SIZE_BYTES / 2]; uint8_t ub[MAX_VEC_SIZE_BYTES / 1]; int8_t b[MAX_VEC_SIZE_BYTES / 1]; + float32 sf[MAX_VEC_SIZE_BYTES / 4]; + float16 hf[MAX_VEC_SIZE_BYTES / 2]; } MMVector; =20 typedef union { diff --git a/target/hexagon/attribs_def.h.inc b/target/hexagon/attribs_def.= h.inc index b1c155ea6d1..ecd08d02dff 100644 --- a/target/hexagon/attribs_def.h.inc +++ b/target/hexagon/attribs_def.h.inc @@ -198,6 +198,10 @@ DEF_ATTRIB(RESTRICT_LATEPRED, "Predicate can not be us= ed as a .new.", "", "") =20 /* HVX IEEE FP extension attributes */ DEF_ATTRIB(HVX_IEEE_FP, "HVX IEEE FP extension instruction", "", "") +DEF_ATTRIB(HVX_IEEE_FP_ACC, "HVX IEEE FP accumulate instruction", "", "") +DEF_ATTRIB(HVX_IEEE_FP_OUT_16, "HVX IEEE FP 16-bit output", "", "") +DEF_ATTRIB(HVX_IEEE_FP_OUT_32, "HVX IEEE FP 32-bit output", "", "") +DEF_ATTRIB(CVI_VX_NO_TMP_LD, "HVX multiply without tmp load", "", "") =20 /* Keep this as the last attribute: */ DEF_ATTRIB(ZZ_LASTATTRIB, "Last attribute in the file", "", "") diff --git a/target/hexagon/arch.c b/target/hexagon/arch.c index 0a400bf7a77..3c417358e06 100644 --- a/target/hexagon/arch.c +++ b/target/hexagon/arch.c @@ -199,6 +199,10 @@ void arch_fpop_start(CPUHexagonState *env) set_float_rounding_mode( softfloat_roundingmodes[fREAD_REG_FIELD(USR, USR_FPRND)], &env->fp_status); + /* + * No need to check env->hvx_fp_status, these instructions don't + * raise exceptions nor interact with usr fields. + */ } =20 #ifdef CONFIG_USER_ONLY @@ -237,6 +241,10 @@ void arch_fpop_end(CPUHexagonState *env, bool pkt_need= _commit) SOFTFLOAT_TEST_FLAG(float_flag_overflow, FPOVFF, FPOVFE); SOFTFLOAT_TEST_FLAG(float_flag_underflow, FPUNFF, FPUNFE); } + /* + * No need to check env->hvx_fp_status, these instructions don't + * raise exceptions nor interact with usr fields. + */ } =20 int arch_sf_recip_common(float32 *Rs, float32 *Rt, float32 *Rd, int *adjus= t, diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index 666b0cad532..0ddd898e6e9 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -420,6 +420,9 @@ static void hexagon_cpu_reset_hold(Object *obj, ResetTy= pe type) set_float_detect_tininess(float_tininess_before_rounding, &env->fp_sta= tus); /* Default NaN value: sign bit set, all frac bits set */ set_float_default_nan_pattern(0b11111111, &env->fp_status); + + set_default_nan_mode(1, &env->hvx_fp_status); + set_float_default_nan_pattern(0b01111111, &env->hvx_fp_status); #ifndef CONFIG_USER_ONLY memset(env->t_sreg, 0, sizeof(uint32_t) * NUM_SREGS); memset(env->greg, 0, sizeof(uint32_t) * NUM_GREGS); diff --git a/target/hexagon/mmvec/hvx_ieee_fp.c b/target/hexagon/mmvec/hvx_= ieee_fp.c new file mode 100644 index 00000000000..3367226998b --- /dev/null +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -0,0 +1,21 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hvx_ieee_fp.h" + +float32 fp_mult_sf_hf(float16 a1, float16 a2, float_status *fp_status) +{ + return float32_mul(float16_to_float32(a1, true, fp_status), + float16_to_float32(a2, true, fp_status), fp_status); +} + +float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, float16 a4, + float_status *fp_status) +{ + return float32_add(fp_mult_sf_hf(a1, a3, fp_status), + fp_mult_sf_hf(a2, a4, fp_status), fp_status); +} diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py index ce5e38bea44..602f49e1f53 100755 --- a/target/hexagon/hex_common.py +++ b/target/hexagon/hex_common.py @@ -253,6 +253,7 @@ def need_env(tag): "A_LOAD" in attribdict[tag] or "A_CVI_GATHER" in attribdict[tag] or "A_CVI_SCATTER" in attribdict[tag] or + "A_HVX_IEEE_FP" in attribdict[tag] or "A_IMPLICIT_WRITES_USR" in attribdict[tag] or "A_PRIV" in attribdict[tag] or "J2_trap" in tag) diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 6d70086b5f5..4ce87d09fdd 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -804,5 +804,23 @@ DEF_ENC(V6_vmpyewuh, ICLASS_CJ" 1 111 111 vvvvv PP = 0 uuuuu 101 ddddd") DEF_ENC(V6_vmpyowh, ICLASS_CJ" 1 111 111 vvvvv PP 0 uuuuu 111 ddddd= ") DEF_ENC(V6_vmpyuhvs,"00011111110vvvvvPP1uuuuu111ddddd") =20 +/* IEEE FP multiply instructions */ +DEF_ENC(V6_vmpy_sf_sf,"00011111100vvvvvPP1uuuuu001ddddd") +DEF_ENC(V6_vmpy_sf_hf,"00011111100vvvvvPP1uuuuu010ddddd") +DEF_ENC(V6_vmpy_hf_hf,"00011111100vvvvvPP1uuuuu011ddddd") +DEF_ENC(V6_vdmpy_sf_hf,"00011111101vvvvvPP1uuuuu110ddddd") + +/* IEEE FP multiply-accumulate instructions */ +DEF_ENC(V6_vmpy_sf_hf_acc,"00011100010vvvvvPP1uuuuu001xxxxx") +DEF_ENC(V6_vmpy_hf_hf_acc,"00011100010vvvvvPP1uuuuu010xxxxx") +DEF_ENC(V6_vdmpy_sf_hf_acc,"00011100010vvvvvPP1uuuuu011xxxxx") + +/* IEEE FP add/sub instructions */ +DEF_ENC(V6_vadd_sf_sf,"00011111100vvvvvPP1uuuuu110ddddd") +DEF_ENC(V6_vsub_sf_sf,"00011111100vvvvvPP1uuuuu111ddddd") +DEF_ENC(V6_vadd_sf_hf,"00011111100vvvvvPP1uuuuu100ddddd") +DEF_ENC(V6_vsub_sf_hf,"00011111100vvvvvPP1uuuuu101ddddd") +DEF_ENC(V6_vadd_hf_hf,"00011111101vvvvvPP1uuuuu111ddddd") +DEF_ENC(V6_vsub_hf_hf,"00011111011vvvvvPP1uuuuu000ddddd") =20 #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index 03d31f6181d..14df8e47901 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -2895,9 +2895,110 @@ EXTINSN(V6_vprefixqw,"Vd32.w=3Dprefixsum(Qv4)", A= TTRIBS(A_EXTENSION,A_CVI,A_CVI_ } } ) =20 +/* KVX - IEEE FP Instructions */ =20 +/* Single pipe, 32-bit output */ +#define ITERATOR_INSN_IEEE_FP_32(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_OUT_32), \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) =20 +/* Single pipe, 16-bit output */ +#define ITERATOR_INSN_IEEE_FP_16(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_OUT_16), \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) =20 +/* Two pipes: P2 & P3, single output: P2, 32-bit output */ +#define ITERATOR_INSN_IEEE_FP_DOUBLE_SINGLE_32(WIDTH,TAG,SYNTAX,DESCR,CODE= ) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX_DV,A_HVX_IEEE_FP_OUT_32),= \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* Two pipes: P2 & P3, two outputs, 32-bit output */ +#define ITERATOR_INSN_IEEE_FP_DOUBLE_32(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX_DV,A_HVX_IEEE_FP_OUT_32),= \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* + * single pipe, accumulate instruction, produces 16-bit output, requires 1= 6-bit + * accumulate input + */ +#define ITERATOR_INSN_IEEE_FP_ACC_16(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_ACC,A_HVX_I= EEE_FP_OUT_16,A_CVI_VX_NO_TMP_LD), \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* + * single pipe, accumulate instruction, produces 32-bit output, requires 3= 2-bit + * accumulate input + */ +#define ITERATOR_INSN_IEEE_FP_ACC_32(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_ACC,A_HVX_I= EEE_FP_OUT_32,A_CVI_VX_NO_TMP_LD), \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* IEEE FP multiply instructions */ +ITERATOR_INSN_IEEE_FP_DOUBLE_SINGLE_32(32, vmpy_sf_sf, + "Vd32.sf=3Dvmpy(Vu32.sf,Vv32.sf)", "Vector IEEE mul: sf", + VdV.sf[i] =3D float32_mul(VuV.sf[i], VvV.sf[i], &env->hvx_fp_status)) +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vmpy_sf_hf, + "Vdd32.sf=3Dvmpy(Vu32.hf,Vv32.hf)", "Vector IEEE mul: hf widen to sf", + VddV.v[0].sf[i] =3D fp_mult_sf_hf(VuV.hf[2*i], VvV.hf[2*i], &env->hvx_= fp_status); + VddV.v[1].sf[i] =3D fp_mult_sf_hf(VuV.hf[2*i+1], VvV.hf[2*i+1], &env->= hvx_fp_status)) +ITERATOR_INSN_IEEE_FP_16(16, vmpy_hf_hf, "Vd32.hf=3Dvmpy(Vu32.hf,Vv32.= hf)", + "Vector IEEE mul: hf", + VdV.hf[i] =3D float16_mul(VuV.hf[i], VvV.hf[i], &env->hvx_fp_status)) +ITERATOR_INSN_IEEE_FP_32(32, vdmpy_sf_hf, "Vd32.sf=3Dvdmpy(Vu32.hf,Vv3= 2.hf)", + "Vector IEEE mul reduction: hf widen to sf", + VdV.sf[i] =3D fp_vdmpy(VuV.hf[2*i+1], VuV.hf[2*i], VvV.hf[2*i+1], + VvV.hf[2*i], &env->hvx_fp_status)) + +/* IEEE FP multiply-accumulate instructions */ +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vmpy_sf_hf_acc, + "Vxx32.sf+=3Dvmpy(Vu32.hf,Vv32.hf)", "Vector IEEE fma: hf widen to sf", + VxxV.v[0].sf[i] =3D float32_muladd(f16_to_f32(VuV.hf[2*i]), + f16_to_f32(VvV.hf[2*i]), + VxxV.v[0].sf[i], 0, &env->hvx_fp_stat= us); + VxxV.v[1].sf[i] =3D float32_muladd(f16_to_f32(VuV.hf[2*i+1]), + f16_to_f32(VvV.hf[2*i+1]), + VxxV.v[1].sf[i], 0, &env->hvx_fp_stat= us)) +ITERATOR_INSN_IEEE_FP_ACC_16(16, vmpy_hf_hf_acc, + "Vx32.hf+=3Dvmpy(Vu32.hf,Vv32.hf)", "Vector IEEE fma: hf", + VxV.hf[i] =3D float16_muladd(VuV.hf[i], VvV.hf[i], VxV.hf[i], 0, &env-= >hvx_fp_status)) +ITERATOR_INSN_IEEE_FP_ACC_32(32, vdmpy_sf_hf_acc, + "Vx32.sf+=3Dvdmpy(Vu32.hf,Vv32.hf)", "Vector IEEE fma reduce: hf widen= to sf", + VxV.sf[i] =3D float32_add(fp_vdmpy(VuV.hf[2*i+1], VuV.hf[2*i], + VvV.hf[2*i+1], VvV.hf[2*i], + &env->hvx_fp_status), + VxV.sf[i], &env->hvx_fp_status)) + +/* IEEE FP add/sub instructions */ +ITERATOR_INSN_IEEE_FP_32(32, vadd_sf_sf, "Vd32.sf=3Dvadd(Vu32.sf,Vv32.sf)", + "Vector IEEE add: sf", + VdV.sf[i] =3D float32_add(VuV.sf[i], VvV.sf[i], &env->hvx_fp_status)) +ITERATOR_INSN_IEEE_FP_32(32, vsub_sf_sf, "Vd32.sf=3Dvsub(Vu32.sf,Vv32.sf)", + "Vector IEEE sub: sf", + VdV.sf[i] =3D float32_sub(VuV.sf[i], VvV.sf[i], &env->hvx_fp_status)) +ITERATOR_INSN_IEEE_FP_16(16, vadd_hf_hf, "Vd32.hf=3Dvadd(Vu32.hf,Vv32.hf)", + "Vector IEEE add: hf", + VdV.hf[i] =3D float16_add(VuV.hf[i], VvV.hf[i], &env->hvx_fp_status)) +ITERATOR_INSN_IEEE_FP_16(16, vsub_hf_hf, "Vd32.hf=3Dvsub(Vu32.hf,Vv32.hf)", + "Vector IEEE sub: hf", + VdV.hf[i] =3D float16_sub(VuV.hf[i], VvV.hf[i], &env->hvx_fp_status)) +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vadd_sf_hf, + "Vdd32.sf=3Dvadd(Vu32.hf,Vv32.hf)", "Vector IEEE add: hf widen to sf", + VddV.v[0].sf[i] =3D float32_add(f16_to_f32(VuV.hf[2*i]), + f16_to_f32(VvV.hf[2*i]), &env->hvx_fp_st= atus); + VddV.v[1].sf[i] =3D float32_add(f16_to_f32(VuV.hf[2*i+1]), + f16_to_f32(VvV.hf[2*i+1]), &env->hvx_fp_= status)) +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vsub_sf_hf, + "Vdd32.sf=3Dvsub(Vu32.hf,Vv32.hf)", "Vector IEEE sub: hf widen to sf", + VddV.v[0].sf[i] =3D float32_sub(f16_to_f32(VuV.hf[2*i]), + f16_to_f32(VvV.hf[2*i]), &env->hvx_fp_st= atus); + VddV.v[1].sf[i] =3D float32_sub(f16_to_f32(VuV.hf[2*i+1]), + f16_to_f32(VvV.hf[2*i+1]), &env->hvx_fp_= status)) =20 /*************************************************************************= ***** DEBUG Vector/Register Printing diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build index 59cb09c1070..4c921eee73b 100644 --- a/target/hexagon/meson.build +++ b/target/hexagon/meson.build @@ -252,6 +252,7 @@ hexagon_ss.add(files( 'fma_emu.c', 'mmvec/decode_ext_mmvec.c', 'mmvec/system_ext_mmvec.c', + 'mmvec/hvx_ieee_fp.c', )) =20 hexagon_softmmu_ss.add(files( --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549577; cv=none; d=zohomail.com; s=zohoarc; b=lOA/imgy2HPYkdpxDGChg+uvrElfRwjOEpBDdJqQBCHyfHxEhJy8TZ8h3Ly75deyemv0KTkJUrh9ckM3szGDxkcAmQlBqYGb4UyhC7wBOR8lRYdbjWxM/gtfFAkCZoQab4cFxgsRGD0nWbQLy61HU8wl5f58QIKTjN/MYDBwDOA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549577; 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=B/3nJt6U3ynSchTcPkH7RPUpuLQ7FlVKqI34s2IviEI=; b=giO8Ud3j20FV3qjHyJW5M0JUD6o+cmCSHmp7+tZIhUHH8ZDFootgDtyznzEYndWoZqS/KyFFjqm0v+t4u9a4K0qzRpNbm4WnYmtMRAlEhz75RmDBHb6MfEBBGqxWHDGvNSK6+/9jzZkBCElO0Nvy6uHu/o9uQrbbDqsbmUScKqo= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549577636887.1115543543701; Wed, 12 Aug 2026 08:46:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7N-0005II-G1; Wed, 12 Aug 2026 11:43:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7E-0004v4-Br for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:41 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7B-0000Q7-Cj for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:40 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDboQo3875362 for ; Wed, 12 Aug 2026 15:43:26 GMT Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hj1jsuq-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:26 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38f5ac7416eso1334490a91.3 for ; Wed, 12 Aug 2026 08:43:26 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= B/3nJt6U3ynSchTcPkH7RPUpuLQ7FlVKqI34s2IviEI=; b=axVKbOvmK8laYx97 GgFNQTH8A+noehaZVeghQl5oIlUqhFNZyeOs5uBAKaj5S/lil8TE/sfkgu17Etmt VjGlQ/LwJwCuxNui41T6jMTAdanWKD4TKGVQoRruadCkA45BgTxWloTup9Gp1T29 2YLEZh3trPZNI9XD1DaBhbfN0aXTTn6ZfNlqfnkWyA+lylyKaS6lcKr/x8Xznqcu j2J0OWLAGuAhXk1rPMvqGSVID58yfWxZuNqRXiTRBth7Wkuw8aDjQs1YJu2MGfp5 j8z8Dc4aX410K/S9rKfmLsInkQExrledBygw0+Hc+S4qWEGrLblVz4u6wm9I66qM MrNsug== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549405; x=1787154205; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=B/3nJt6U3ynSchTcPkH7RPUpuLQ7FlVKqI34s2IviEI=; b=acC2sMxd0Kehdmi6YeUwqot5gyixTl0XZ/iZGKV0JqyDf9bv6F3AeGUjm01RmkFdE1 7KBI6W6YzRrrmwZIbwu54JAMfgcXthuvaisymx+lrT6sHtKFLeTHIvAGdY56uCpRTcfN JE9krAw1zcBnSgj8h5jgXjul0uBa+C8P/eGjdoFkNz2zgb02j1reXwUCaQkR/Z3tYUha 3w/WP0y0CHZKZwD/r8PMgXw7reHqsgLi8aUsYixoG5UmYpHgvMMU+5gAVBqZ1vlHBdhe D9QANZEEEeOIDZYt4FlfgqcajTA1v6zD5qZm+Oj55+FOHIGfHy37qGKafgVBKhYU/93R h0Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549405; x=1787154205; h=content-transfer-encoding:content-type: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 :content-type; bh=B/3nJt6U3ynSchTcPkH7RPUpuLQ7FlVKqI34s2IviEI=; b=ajN3NPFPfczwZfb3ngIl3ualoH1EFjpxvQz5SuldZ4uDcvG8GGUtyAgZN/THDNI+Dj tVPrBKBZz+HX70NQNkwkOXezGLtM8eSbHRvIbXDcIACmhOl/ml0dtkZbUyLzIFd8uwSD sIMm5RRuCZvpcWEr/pQxfPTuUR0EjVCrOyDAIMkswOXYikRlwAiEqA/e3/7tBfCnJVKa 2LspQQceavwUw2jpJYno6GFU1+wrpmWI3zayqJdMApHJ1mjLpTNmHZVejMD1B89oqWQF U6Da1mX/YLnLNhs8m1LXf1XLWzBreqrrO9XQMQx8QFzjG3KarsY//r0b90cGX2E+Honf KAFw== X-Gm-Message-State: AOJu0Yx2SkwVzSjsPKakYisl/GASw55AecFcrdHvAWhnT06NMdBiaEPE KUBBAW3379VOI2P5UvIEFFiOzetMK5SqtVYnGXAEFKO/9cRz5JvUfbt0VmuhgV91+/Kw8aVnJXx VOtCd/HnbrRBEefndBbnsqLnBE/F5ylHlSzmDVKspcx+eeZW+7W2iWNoH9dsw3fhRBA== X-Gm-Gg: AR+sD10KqlUCkLaBoFbkeBqq+AAb8TrOHgnOF3PpDFhEydaa41/nK8at4/Fd1FUWY/m yOz9d3k1qcLeNkiKr0zhiCHO2yqj2eW2sGxtWHz3sOfh1ZLt3eQLu+5m/IsktJHYfo7rcSBLtKa qLncUi7qoNis88pvoA02u5HjohEI/7zRQfz9UaMqYFn1+w5mBs0zTddqCl9hkoASi8pcn9MZ/HZ IuU1+JbkdZXwUvCcdbpNgBO64EDvkItOMM06VR/MkmTuirCV5HynLh/O51iiwEW0RRO45OjsAuN cIMjWJnwdmD840azB715qvgZAW7Ig4xPpTBYpea/Lc4acUzzmanRyAe14TGRRCPGFWVwtknLrG0 yEPz0YLTyErbDpsj3jsajsomAHtHb5fwefs39WTIVfS8XJvra X-Received: by 2002:a17:90b:3cc5:b0:38f:efed:5448 with SMTP id 98e67ed59e1d1-3930128b3a4mr7395377a91.8.1786549405210; Wed, 12 Aug 2026 08:43:25 -0700 (PDT) X-Received: by 2002:a17:90b:3cc5:b0:38f:efed:5448 with SMTP id 98e67ed59e1d1-3930128b3a4mr7395304a91.8.1786549404668; Wed, 12 Aug 2026 08:43:24 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , Pierrick Bouvier Subject: [PULL v2 32/41] target/hexagon: add v68 HVX IEEE float min/max insns Date: Wed, 12 Aug 2026 08:42:11 -0700 Message-Id: <20260812154220.1029828-33-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: zFaKhut2gWdSMTKWX4Gk34X9_8qm9udE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXxjdiSFYmE2GR ANrovhEdvrHAD2rDeOdoI5hzYtIy/vowzome2aTsj4MDYUzmbLo8SqfucQjkAbv0r4mc9M+qjvN gPcqX9I5vIhg+oKoLOInB8lw20HXSZy9vxtXKtxi7OnB7RWrqs6Nuwf3G6Vg4ml+tQfD3nKRFLF Nw93tW6RAh9zwkHfbIFHkoO/1XkqpCQWSJ8ymchxn1xg4VK/jzs+aVlAGO5ApX2R4Z/41okRZ2K Xc3g9LYjJ1T5wmcDT/mOdhL843C47f97bLDUOE67kmmRIh1fo/q8X8c+xesmG900KlGsfDnUyQC K+vDs1mEfaqGCuF4HO3Fa9rcIeFbbi7hqXyE3iMkFx1JCt9C4ue0oU21qiQvuUM4UcspXaJEwqU pgz67vOREdf2fT9yptAJQG1K4qM8m9zO8tHnvqGv3+glvvFjIGGFsCerDZR8NLxxPWP8bmsxuI9 mDLxj8nZtlfvXbAHu7g== X-Authority-Analysis: v=2.4 cv=K6ES2SWI c=1 sm=1 tr=0 ts=6a7c949e cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=KsDfajj0LuzFEeFCdIYA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-GUID: zFaKhut2gWdSMTKWX4Gk34X9_8qm9udE X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX6QNfaUsIw1Ks Kp7KGBZ10tJWoM6H2gQ60VRKBigTj+hwKKfKPXZr8+0dX1asRfeLcODLMnv5ABinnAigw2g9o0y 0aCE7zPGB+NFAgo2F9LXlCujauOY2Zg= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 adultscore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549578622158500 From: Matheus Tavares Bernardino Add HVX IEEE floating-point min/max instructions: - vfmin_hf, vfmin_sf: IEEE floating-point minimum - vfmax_hf, vfmax_sf: IEEE floating-point maximum - vmax_hf, vmax_sf: qfloat IEEE maximum - vmin_hf, vmin_sf: qfloat IEEE minimum The Hexagon qfloat variants are similar to the IEEE-754 ones, but they handle NaN slightly differently. See comment on hvx_ieee_fp.h Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/8e274a7a10a5aae23eb1250db0b4f4250c= 81f3ef.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/mmvec/hvx_ieee_fp.h | 6 +++ target/hexagon/attribs_def.h.inc | 2 + target/hexagon/mmvec/hvx_ieee_fp.c | 50 ++++++++++++++++++++ target/hexagon/hex_common.py | 1 + target/hexagon/imported/mmvec/encode_ext.def | 10 ++++ target/hexagon/imported/mmvec/ext.idef | 36 +++++++++++++- 6 files changed, 104 insertions(+), 1 deletion(-) diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h index 75008deb3b7..dff2fab14cd 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.h +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -15,4 +15,10 @@ float32 fp_mult_sf_hf(float16 a1, float16 a2, float_stat= us *fp_status); float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, float16 a4, float_status *fp_status); =20 +/* Qfloat min/max treat +NaN as greater than +INF and -NaN as smaller than= -INF */ +float32 qf_max_sf(float32 a1, float32 a2, float_status *fp_status); +float32 qf_min_sf(float32 a1, float32 a2, float_status *fp_status); +float16 qf_max_hf(float16 a1, float16 a2, float_status *fp_status); +float16 qf_min_hf(float16 a1, float16 a2, float_status *fp_status); + #endif diff --git a/target/hexagon/attribs_def.h.inc b/target/hexagon/attribs_def.= h.inc index ecd08d02dff..d12f6ac4b1a 100644 --- a/target/hexagon/attribs_def.h.inc +++ b/target/hexagon/attribs_def.h.inc @@ -84,6 +84,7 @@ DEF_ATTRIB(CVI_SCATTER, "CVI Scatter operation", "", "") DEF_ATTRIB(CVI_SCATTER_RELEASE, "CVI Store Release for scatter", "", "") DEF_ATTRIB(CVI_TMP_DST, "CVI instruction that doesn't write a register", "= ", "") DEF_ATTRIB(CVI_SLOT23, "Can execute in slot 2 or slot 3 (HVX)", "", "") +DEF_ATTRIB(CVI_VA_2SRC, "Execs on multimedia vector engine; requires two s= rcs", "", "") =20 DEF_ATTRIB(VTCM_ALLBANK_ACCESS, "Allocates in all VTCM schedulers.", "", "= ") =20 @@ -202,6 +203,7 @@ DEF_ATTRIB(HVX_IEEE_FP_ACC, "HVX IEEE FP accumulate ins= truction", "", "") DEF_ATTRIB(HVX_IEEE_FP_OUT_16, "HVX IEEE FP 16-bit output", "", "") DEF_ATTRIB(HVX_IEEE_FP_OUT_32, "HVX IEEE FP 32-bit output", "", "") DEF_ATTRIB(CVI_VX_NO_TMP_LD, "HVX multiply without tmp load", "", "") +DEF_ATTRIB(HVX_FLT, "This a floating point HVX instruction.", "", "") =20 /* Keep this as the last attribute: */ DEF_ATTRIB(ZZ_LASTATTRIB, "Last attribute in the file", "", "") diff --git a/target/hexagon/mmvec/hvx_ieee_fp.c b/target/hexagon/mmvec/hvx_= ieee_fp.c index 3367226998b..2ae79a485a3 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.c +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -19,3 +19,53 @@ float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, flo= at16 a4, return float32_add(fp_mult_sf_hf(a1, a3, fp_status), fp_mult_sf_hf(a2, a4, fp_status), fp_status); } + +#define float32_is_pos_nan(X) (float32_is_any_nan(X) && !float32_is_neg(X)) +#define float32_is_neg_nan(X) (float32_is_any_nan(X) && float32_is_neg(X)) +#define float16_is_pos_nan(X) (float16_is_any_nan(X) && !float16_is_neg(X)) +#define float16_is_neg_nan(X) (float16_is_any_nan(X) && float16_is_neg(X)) + +/* Qfloat min/max treat +NaN as greater than +INF and -NaN as smaller than= -INF */ +float32 qf_max_sf(float32 a1, float32 a2, float_status *fp_status) +{ + if (float32_is_pos_nan(a1) || float32_is_neg_nan(a2)) { + return a1; + } + if (float32_is_pos_nan(a2) || float32_is_neg_nan(a1)) { + return a2; + } + return float32_max(a1, a2, fp_status); +} + +float32 qf_min_sf(float32 a1, float32 a2, float_status *fp_status) +{ + if (float32_is_pos_nan(a1) || float32_is_neg_nan(a2)) { + return a2; + } + if (float32_is_pos_nan(a2) || float32_is_neg_nan(a1)) { + return a1; + } + return float32_min(a1, a2, fp_status); +} + +float16 qf_max_hf(float16 a1, float16 a2, float_status *fp_status) +{ + if (float16_is_pos_nan(a1) || float16_is_neg_nan(a2)) { + return a1; + } + if (float16_is_pos_nan(a2) || float16_is_neg_nan(a1)) { + return a2; + } + return float16_max(a1, a2, fp_status); +} + +float16 qf_min_hf(float16 a1, float16 a2, float_status *fp_status) +{ + if (float16_is_pos_nan(a1) || float16_is_neg_nan(a2)) { + return a2; + } + if (float16_is_pos_nan(a2) || float16_is_neg_nan(a1)) { + return a1; + } + return float16_min(a1, a2, fp_status); +} diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py index 602f49e1f53..e33d43e3ce0 100755 --- a/target/hexagon/hex_common.py +++ b/target/hexagon/hex_common.py @@ -254,6 +254,7 @@ def need_env(tag): "A_CVI_GATHER" in attribdict[tag] or "A_CVI_SCATTER" in attribdict[tag] or "A_HVX_IEEE_FP" in attribdict[tag] or + "A_HVX_FLT" in attribdict[tag] or "A_IMPLICIT_WRITES_USR" in attribdict[tag] or "A_PRIV" in attribdict[tag] or "J2_trap" in tag) diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 4ce87d09fdd..d7f50db7785 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -823,4 +823,14 @@ DEF_ENC(V6_vsub_sf_hf,"00011111100vvvvvPP1uuuuu101dddd= d") DEF_ENC(V6_vadd_hf_hf,"00011111101vvvvvPP1uuuuu111ddddd") DEF_ENC(V6_vsub_hf_hf,"00011111011vvvvvPP1uuuuu000ddddd") =20 +/* IEEE FP min/max instructions */ +DEF_ENC(V6_vfmin_hf,"00011100011vvvvvPP1uuuuu000ddddd") +DEF_ENC(V6_vfmin_sf,"00011100011vvvvvPP1uuuuu001ddddd") +DEF_ENC(V6_vfmax_hf,"00011100011vvvvvPP1uuuuu010ddddd") +DEF_ENC(V6_vfmax_sf,"00011100011vvvvvPP1uuuuu011ddddd") +DEF_ENC(V6_vmax_sf,"00011111110vvvvvPP1uuuuu001ddddd") +DEF_ENC(V6_vmin_sf,"00011111110vvvvvPP1uuuuu010ddddd") +DEF_ENC(V6_vmax_hf,"00011111110vvvvvPP1uuuuu011ddddd") +DEF_ENC(V6_vmin_hf,"00011111110vvvvvPP1uuuuu100ddddd") + #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index 14df8e47901..0e9cace2035 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -43,7 +43,9 @@ EXTINSN(V6_##TAG, SYNTAX, ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA), \ DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) =20 - +#define ITERATOR_INSN_ANY_SLOT_2SRC(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC= ,A_HVX_FLT), \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) =20 #define ITERATOR_INSN2_ANY_SLOT(WIDTH,TAG,SYNTAX,SYNTAX2,DESCR,CODE) \ ITERATOR_INSN_ANY_SLOT(WIDTH,TAG,SYNTAX2,DESCR,CODE) @@ -3000,6 +3002,38 @@ ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vsub_sf_hf, VddV.v[1].sf[i] =3D float32_sub(f16_to_f32(VuV.hf[2*i+1]), f16_to_f32(VvV.hf[2*i+1]), &env->hvx_fp_= status)) =20 +#define ITERATOR_INSN_IEEE_FP_16_32_LATE(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ + ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_OUT= _16,A_HVX_IEEE_FP_OUT_32), \ + DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* IEEE FP min/max instructions */ +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vfmin_hf, "Vd32.hf=3Dvfmin(Vu32.hf,Vv= 32.hf)", \ + "Vector IEEE min: hf", VdV.hf[i] =3D float16_min(VuV.hf[i], VvV.hf[i]= , \ + &env->hvx_fp_status)) +ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vfmin_sf, "Vd32.sf=3Dvfmin(Vu32.sf,Vv= 32.sf)", \ + "Vector IEEE min: sf", VdV.sf[i] =3D float32_min(VuV.sf[i], VvV.sf[i]= , \ + &env->hvx_fp_status)) +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vfmax_hf, "Vd32.hf=3Dvfmax(Vu32.hf,V= v32.hf)", \ + "Vector IEEE max: hf", VdV.hf[i] =3D float16_max(VuV.hf[i], VvV.hf[i],= \ + &env->hvx_fp_status)) +ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vfmax_sf, "Vd32.sf=3Dvfmax(Vu32.sf,V= v32.sf)", \ + "Vector IEEE max: sf", VdV.sf[i] =3D float32_max(VuV.sf[i], VvV.sf[i],= \ + &env->hvx_fp_status)) + +ITERATOR_INSN_ANY_SLOT_2SRC(32,vmax_sf,"Vd32.sf=3Dvmax(Vu32.sf,Vv32.sf)", \ + "Vector max of sf input", VdV.sf[i] =3D qf_max_sf(VuV.sf[i], VvV.sf[i]= , \ + &env->hvx_fp_status)) +ITERATOR_INSN_ANY_SLOT_2SRC(32,vmin_sf,"Vd32.sf=3Dvmin(Vu32.sf,Vv32.sf)", \ + "Vector min of sf input", VdV.sf[i] =3D qf_min_sf(VuV.sf[i], VvV.sf[i]= , \ + &env->hvx_fp_status)) +ITERATOR_INSN_ANY_SLOT_2SRC(16,vmax_hf,"Vd32.hf=3Dvmax(Vu32.hf,Vv32.hf)", \ + "Vector max of hf input", VdV.hf[i] =3D qf_max_hf(VuV.hf[i], VvV.hf[i]= , \ + &env->hvx_fp_status)) +ITERATOR_INSN_ANY_SLOT_2SRC(16,vmin_hf,"Vd32.hf=3Dvmin(Vu32.hf,Vv32.hf)", \ + "Vector min of hf input", VdV.hf[i] =3D qf_min_hf(VuV.hf[i], VvV.hf[i]= , \ + &env->hvx_fp_status)) + /*************************************************************************= ***** DEBUG Vector/Register Printing *************************************************************************= *****/ --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549698; cv=none; d=zohomail.com; s=zohoarc; b=h5py4ZYPU5PD3a9wIh5fp8Le8ZB1s1f7lGyVwMz5v7UDm4Fcps8+x+EXXlkPqQtwbM0uKgbPJWRijwjfDbljNplVf2OWUYLfBKnlno+5debnXhIs/w+qgwKvwqQUNPd9Xc7sIFyQSDfPGS5sFCOtnwbqmxI/07jOdqa8/sBuzfI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549698; 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=5/n737thazqYjWE2APiBFFarZmcAmui0FVLXX1/ztHU=; b=Vrv/VryPokW8Fz82aiq5c96EkrpWmDQIONvblEypITB7iDNgXOY+SIAlpnQ4p2+r8g8Ic3DaFzvAaN6Kxj1dAs+nC2ydB+4v/H6spjXdkbFR+6NhRvKqS/5y31LoYYIwhC+5DDagppaNRRNHXFaCh142pCFmWKxxFj8Y92rL4Ss= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17865496983141009.0433191190951; Wed, 12 Aug 2026 08:48:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7K-0005Bq-37; Wed, 12 Aug 2026 11:43:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7G-00050w-Sb for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:43 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7F-0000R4-2r for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:42 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbtFI2728893 for ; Wed, 12 Aug 2026 15:43:30 GMT Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hfw2rk9-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:30 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cb11535e6a1so924936a12.0 for ; Wed, 12 Aug 2026 08:43:29 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 5/n737thazqYjWE2APiBFFarZmcAmui0FVLXX1/ztHU=; b=LhhxdYXqmFp+JhYQ bfWlWw0Q/4b3KJ9i6UJGszeOEdbGEzKts3Vx5sQyyXudEZ+Pp6kQ/8Sh9V747HCs lxEf9Q5dnhW8Un+Qd7MHXo7pYa3qzT070CUW/G0H/bEgvV5HhvlzGgxn0JA5/Kdy qUsSBMgyyGaPegUwREC83soDDbGSkn9KpAtqoGEnsCw3aE4GuTtFpR4lq6v9fwDg WnNX3zfcVYBX4ramiVPPlpkovGCjsbHusRRN6OtlPbdAwbaQBJ0tkQlFnW9evK7f xmVCPbme4aSyMXNtVMEvjFhAqSjDkmEfLKtBVkklmv1QmPQMp/25jRvwp5ANXFJe XbeV+w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549409; x=1787154209; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=5/n737thazqYjWE2APiBFFarZmcAmui0FVLXX1/ztHU=; b=d9ex4rtC8l7EIvZO66P2qBSo4kFG5hcn1M9Iwyi3CQPsr5h1wJerHvmT9MShlpd9qO xm0UhEPorQHcqg+F+KEO7sFZZIR1r1KzMySLUYQZl0Skc0i30FjvCXc60AyMvSUIrR9z TuiWV4+BmM12ozS5eSbvEJ4KUGokSaKJO8RDTvrHjKna5qlKh2nqPu1G+yFEV3YpMJzz JMIRQlB306k8p4pm6ksjz6R9sw4/5GmNoaGPVAqgKwYaiEFjOF13EwVHDqpBsnIE3M6I f7RYXf94xoD7h+ay2sJkufvHycSPITGeuPMPkQXXf7qdINO+QmlFtVkMKdB4BVD08uwS qAZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549409; x=1787154209; h=content-transfer-encoding:content-type: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 :content-type; bh=5/n737thazqYjWE2APiBFFarZmcAmui0FVLXX1/ztHU=; b=rasVWtMOlZFe5EfG3GRETRCXoXpKbmQgOy//D0KRF8OkaRBVQn+uu6hlSgeuzqAe/T ThuRN0gajZppUq2DeyGo4r6MLgumokpLABLDIKoHqZMRxTNB16iO9v9qFb21L4wU0k/r 1xsKs4qMqemuLtG2bE9HDmrqaiP+TUrZ27IKBoTzsIHjbt9ztDtZ7PgTjkPSVYXIdOb3 PZMZJ4sx/hjfXV+4m5G4v7YgHyaIp8ZOxASH5G3MagD6Tsu/47uGe6sEjRIrvTazEqqG Hqy2Y4H9+Tw41qk+c8EKa8DBA0j30xdnCVIDFpwNQYbhbs6n5SsSYz/T6DJStNbZ11Sw CYbg== X-Gm-Message-State: AOJu0YzQSunZQHFpJZCRZ/X7d5C+dXva2qCQB+TUbUik0hT5FN77dR2A iJdWW/mqLMBQ6HPVKqGQ76tBIq8sOv9dxzWWlriMzKQgnIihFw6VThEiJ6aLL6yPUwTFriwOZFh xJl5bNDI0XT57DUlkAveEDkQLe6SPyWwD1ZdTEKcU9RsfzLckTFXDB1MBoFXkKQSzrQ== X-Gm-Gg: AR+sD10D1zUsLa/UsFsAFe4y91f6QytnwTaGmXvVr7nSqwh2tmN9xOjE6Jv5U6DNheP fJQTmP8b+GZP46y5eDRzgHz1w/4Xzi5WwjIHfWHVgrNrsazpIum+8nNs+HczI4fp18h2XtmFUEf xglf7ELyV8+WKajSjgIe1el5vo3Rj/kaam/j6vRhRPzpm4cmPLqAzoMCEu2rK/3KKQpsBKC5Zlk fAnL8x8QZPDIMW/T+LxUkmiob9mh+5MPi1ge+vaXNhGF5Gm7hI0PuWGJVJ4mWBjoG8+Sqcro4q5 8JC7yXPdvNpYk3guOPIL5PETzzi8NqbRrURf16QP04F8Glt71IBaQ8cGMm+NUjGqfLWj7r4R7up DQwkYR0aFqLh9KTOzvJZIk6Y9kH32odvZfNb+zGzhhATMoyxm X-Received: by 2002:a05:6a20:c90d:b0:3c8:e140:63c3 with SMTP id adf61e73a8af0-3cc3f8a3a8bmr7270536637.37.1786549409141; Wed, 12 Aug 2026 08:43:29 -0700 (PDT) X-Received: by 2002:a05:6a20:c90d:b0:3c8:e140:63c3 with SMTP id adf61e73a8af0-3cc3f8a3a8bmr7270472637.37.1786549408599; Wed, 12 Aug 2026 08:43:28 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , Pierrick Bouvier Subject: [PULL v2 33/41] target/hexagon: add v68 HVX IEEE float misc insns Date: Wed, 12 Aug 2026 08:42:12 -0700 Message-Id: <20260812154220.1029828-34-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX5a9Lm29BAls8 P8BgUR+uaGa1MJQXqEEJZqGeMBKbnLmA/nq7iNEfgZOLXGqdh1An4mIrooeUdtBXXToJIR6RwKb SPFrg28ykh6CptwwtZUWbYrGE/4yRh8= X-Proofpoint-GUID: CRksGj3DeEdPDB9HiLNQXjfdEhwySlt6 X-Authority-Analysis: v=2.4 cv=fpDsol4f c=1 sm=1 tr=0 ts=6a7c94a2 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=G0yDBwImisZ_IgVzhjkA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-ORIG-GUID: CRksGj3DeEdPDB9HiLNQXjfdEhwySlt6 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX6GT1SaGhhmox RQpfG0YNdHpCKIpOy5bNvqrVvhhSRNlrThkqNCrStR3UsID2ab++8T7BSctIYIPA3f2KD2FYBhv YvOKjEhvPnT9iPN6vgOgnzsnOzID9649ccCk0g9hpe20Fw7W+01dqGjITbRUNlOjMwECzqImNg/ fm7RrPQjXaf87UbybMaKG12GQ+YCt47XB632sqQcRnKI/+BIj9RzyZCyOVLOrmgIFrNXllqyKW4 V67nC1md1VJiWKFMTM6dnccokGIHfTU2DWpGdTYNqmS6PbloDMs0BSEHi5JF9GR5BiLcNa9sdLY 2DYPlOnPtBaiESfA3+PLnK+nsSLnmD5uY8ExHKPnq64byP/YqlvQ+et5r96a0ddXjOzvNc8X8e5 MGdr5hwvsVQmwZJOnal/T/w086Dui8dLGaY5FR37Q/CzXmNY3TBczCSu0rymciK71kW7WzTogRj H6PrMgss5ZRNoWxlNXA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 spamscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 malwarescore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549699217158500 From: Matheus Tavares Bernardino Add HVX IEEE floating-point miscellaneous instructions: - vassign_fp (vfmv): vector move - vfneg_hf, vfneg_sf: vector floating-point negate - vabs_hf, vabs_sf: vector absolute value Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/0bd3279ca0bbf7c01548e3b4e7a9c8fdbd= be4ee1.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/imported/mmvec/encode_ext.def | 7 +++++++ target/hexagon/imported/mmvec/ext.idef | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index d7f50db7785..72daf8724ca 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -833,4 +833,11 @@ DEF_ENC(V6_vmin_sf,"00011111110vvvvvPP1uuuuu010ddddd") DEF_ENC(V6_vmax_hf,"00011111110vvvvvPP1uuuuu011ddddd") DEF_ENC(V6_vmin_hf,"00011111110vvvvvPP1uuuuu100ddddd") =20 +/* IEEE FP move, negate, abs instructions */ +DEF_ENC(V6_vassign_fp,"00011110--0-0110PP1uuuuu001ddddd") +DEF_ENC(V6_vfneg_hf,"00011110--0-0110PP1uuuuu010ddddd") +DEF_ENC(V6_vfneg_sf,"00011110--0-0110PP1uuuuu011ddddd") +DEF_ENC(V6_vabs_hf,"00011110--0-0110PP1uuuuu100ddddd") +DEF_ENC(V6_vabs_sf,"00011110--0-0110PP1uuuuu101ddddd") + #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index 0e9cace2035..1b16ed0628a 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -3034,6 +3034,18 @@ ITERATOR_INSN_ANY_SLOT_2SRC(16,vmin_hf,"Vd32.hf=3Dvm= in(Vu32.hf,Vv32.hf)", \ "Vector min of hf input", VdV.hf[i] =3D qf_min_hf(VuV.hf[i], VvV.hf[i]= , \ &env->hvx_fp_status)) =20 +/* IEEE FP move, negate, abs instructions */ +ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vassign_fp, "Vd32.w=3Dvfmv(Vu32.w)", \ + "Vector IEEE move", VdV.w[i] =3D VuV.w[i]) +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vfneg_hf, "Vd32.hf=3Dvfneg(Vu32.hf)",= \ + "Vector IEEE neg: hf", VdV.hf[i] =3D float16_chs(VuV.hf[i])) +ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vfneg_sf, "Vd32.sf=3Dvfneg(Vu32.sf)",= \ + "Vector IEEE neg: sf", VdV.sf[i] =3D float32_chs(VuV.sf[i])) +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vabs_hf, "Vd32.hf=3Dvabs(Vu32.hf)", \ + "Vector IEEE abs: hf", VdV.hf[i] =3D float16_abs(VuV.hf[i])) +ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vabs_sf, "Vd32.sf=3Dvabs(Vu32.sf)", \ + "Vector IEEE abs: sf", VdV.sf[i] =3D float32_abs(VuV.sf[i])) + /*************************************************************************= ***** DEBUG Vector/Register Printing *************************************************************************= *****/ --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549603; cv=none; d=zohomail.com; s=zohoarc; b=fCK5VbRNGg8PVX2RGf79VnLc0aNqjq+/bU21jpcbT/maYyNVsBGkAT1cKY+8bCv65h8bAofEy2jcWfMlLTkxWJ+c3UaXGdyXUDYXwo4pH6m0g5+riVxaDEttu5uYjDqKRnIPHjD49l4Ustv1+hw7nE21oP52sBNFS/4d8c+XNzY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549603; 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=W1JPnA+SLe1Gzw4NibWpj1AIx0WcdsRAf5hahbaUW2s=; b=KK3QXLrbMNRQ41G0WUsPgz3zSXdafYadOc43POXg8/0oKHfGQVUWaHoS8J+KKG4hCW5G657YdtOk4S2IQODjOXl92GCqgS1rliVpn2rJYbo5AW8vY77ScNQYK0oviZdjG6+d8VYSIvvE9KsXkqD0jEsXA3GXYKIXTdQRDCCM9hk= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549603250363.23893053853226; Wed, 12 Aug 2026 08:46:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7O-0005JD-O2; Wed, 12 Aug 2026 11:43:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7I-000583-Py for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:44 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7G-0000RN-H5 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:44 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbmfp3971660 for ; Wed, 12 Aug 2026 15:43:31 GMT Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0jgrjje0-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:31 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-38e8e864ef0so1934988a91.0 for ; Wed, 12 Aug 2026 08:43:31 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= W1JPnA+SLe1Gzw4NibWpj1AIx0WcdsRAf5hahbaUW2s=; b=WUWOMrRgdYPNs6d3 MoYlKt9Is0GS14F+Wsu+PuaUUeY7OGv3Rf96RGxK7Jg+iHM5i59Ny5z9v6UeosTw PYW3NNsbS/+GBe9uf7FcMRMLD3ZJjd0SL8g2KKZ09YRmEOldnF5x+98KY8irIPgB RdFqkCDYjXhncT6rAmmS0g2ZhE8fpkfGTdR4acFqccIIDn2pYv8etoy+6YaY9cBX N9nZz8lDX1JNXCDqgGJuXy6cR6jEkIRfBvwisCGGueHpAS4T0mRj0R3V2oLmd6kx jjof4ntOiRtRAdbFPX81d5lfLqRA1joaVeQC8J1OXkVuVutnCW2uB30UTocKieJZ 6MClLw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549410; x=1787154210; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=W1JPnA+SLe1Gzw4NibWpj1AIx0WcdsRAf5hahbaUW2s=; b=Mb+Nb9t7hUtApVaSb7qj3MKAHgslAhQt5TmA831MkidwDhZ27RdXZA0GjQspmCMf+b UtRmtwaFKYGTfFEVixakDNPdhVdoPFcEjpGhiC01i7fWp06uJirgiDjaf8aE8Y7VoIk7 4x3J4bXcm7Z0SbC7w33gW/sLMBJ0c/VXJg3jIU2Dw0Q1A6l3mqBErpA/60o8Bz9tfxzC XWRR6a38RxFAssvyS9aLkPe/ckqunY7JDyW+jz+7ISnuHDM9BXs2x2KtEa9jXqRum9D6 e8gT39XY0XTgCv7ybe5dABsRo2/AVfzD3W51sBJVmw5/3Vl7RwMhpQ/E6uGLr8BnGc2E cAZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549410; x=1787154210; h=content-transfer-encoding:content-type: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 :content-type; bh=W1JPnA+SLe1Gzw4NibWpj1AIx0WcdsRAf5hahbaUW2s=; b=MNQHMOF9K3DrX79oXs/AZvfG7w+x7X9Iu0eOfLw3IgpROwEG1XuiADVm8DDkFfPoyY 4rk5K4zSXdpYjvSrGO8ckt0JnXndyG95poUmHrP+PzPSaqk1rW9OEAlAs3txTTlk6O+j kpTQhxsQTD/wlGXtWNuHZiuZSB6MByhfeodMmaXXjB/qUxwOHtKfJl2qm+LKHwLNkYwJ B184NnyHB6wXsQI/coT9+fN1ic/4wveG3bFlVbez3QmPDe1bwq8rZp+vhmxHxXQrWwYw tVr01P8YUqk2+U6a4K/9SklBrddyWC8sy9bVAf/YyFVYleDIs6SyQUCBhBb056ju5nLj bVRA== X-Gm-Message-State: AOJu0YywoitDy9ywv/LwBBMFgiYVRsTz55aoNsCFgOuydX/aKKoocCZ1 TCuZZyOTOmb2b8+7/UkeQCLTxt4Z05hOFCWFnwodAp7EUwkJTxRpTkz4bxR1q519QCvP1sbiAaI dvwFCmHS0h/1mvh8HuRkZTSeRDHg+rTbqDjcAo4p10OyDJXg0DrXLQh88cGsdepIc5Q== X-Gm-Gg: AR+sD12eX+TW5lskDy7SY/pue2XzJBdGiM2ah3K/wgzFHX8Lw/5Cs/211u1/0NK9ct7 yi4CkrLe8fjak4EPsiqJQY7WKWUFOhUrEdinGlge1RqDYt/UABbMRIXC/xvpoxpx7lGON/TVMv1 oR40Ay0/tNaRg8vhX7A5xhvBgyiknzhycdphqjod5u26PgwJiILeJyLE45kMaOXxee1Wem0IGMd vt4A23sxeTesKOwruplagHJPaGfpjkuvK37cF9YDQGOfy2ApGPcOAmfiODW9Efz5QGbPPWdoqtq nXXHifLz/v52QL4emyz0aW6Kf3M8fznnqD8VdK57M09KlDs8X8KDSp8da+Ksg16b5povh3XFeRZ V1EdWkF5IulwzrgzNB9MTFri8MH/jdHGkepr1wmNnsQ049SGL X-Received: by 2002:a17:90a:d64f:b0:390:8361:a532 with SMTP id 98e67ed59e1d1-393011eea08mr7594314a91.7.1786549410353; Wed, 12 Aug 2026 08:43:30 -0700 (PDT) X-Received: by 2002:a17:90a:d64f:b0:390:8361:a532 with SMTP id 98e67ed59e1d1-393011eea08mr7594247a91.7.1786549409860; Wed, 12 Aug 2026 08:43:29 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , Pierrick Bouvier Subject: [PULL v2 34/41] target/hexagon: add v68 HVX IEEE float conversion insns Date: Wed, 12 Aug 2026 08:42:13 -0700 Message-Id: <20260812154220.1029828-35-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX7pLr7Nv7rUJb db4iJUi/6k6ZrIFb3U+eQ3KlC4hq6astKjHZNQCN4vGSOIL3uq5Zo5vKjoy+q907c1l7BYO2jHL ScRlLfItAyzrs5cX7r5CeyrnUZs5knvscIpPpASAl3RC7hE46FS4PSdzo9NFtRHc9vuMxZlF9Y6 x+ESAUeP9fkORbWPPvucId//bOSfKLsLFAxRuyJkRl0C4753+XEIaMvch2oQuPps9/a2jFdEPEv qsPckkBVxtx1dVRgdUGZu/l+DQ3r1+K8wnqTJrnubmV6StNqxyupIkMZAtN9JlAyJJehn7jR5J1 tbMe8V9sPd44zgWmQLYQp19VxhTYD1BBUErPNs3MpWtkEr7h/IEdKxSkdZL7TwmoK/+AJX1A2oP 4+H4Mk+em63vfkU/ss2+fyt4wgPvLNymTjHvGl1BWT0Q7OzMMJUY/ePaBXF5y81lsAHwEI5aFBB D/dJAhPr6NhbqIVLykA== X-Proofpoint-ORIG-GUID: Tab3FSv_booovql8eSOxOEJgkjYasq3Y X-Authority-Analysis: v=2.4 cv=TNJ1jVla c=1 sm=1 tr=0 ts=6a7c94a3 cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=2JvGeOnW2cDEA-NDw-QA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-GUID: Tab3FSv_booovql8eSOxOEJgkjYasq3Y X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX/3nFrExO7vxV bVL6xZtHtoJKVSwZGSsHoJKnrgYL8VtbrEfNcvNsNa355Me+tQgJNGBiEvEHbbT6r7ASJVDkv/b Qg4X9qrn2pXRqZDk7uDQyTksluvIjNY= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 phishscore=0 impostorscore=0 adultscore=0 suspectscore=0 bulkscore=0 spamscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549604741158500 From: Matheus Tavares Bernardino Add HVX IEEE floating-point conversion instructions: - vconv_hf_h, vconv_h_hf, vconv_sf_w, vconv_w_sf: vconv operations - vcvt_hf_sf, vcvt_sf_hf: float <-> half float conversions - vcvt_hf_b, vcvt_hf_h, vcvt_hf_ub, vcvt_hf_uh: int to half float - vcvt_b_hf, vcvt_h_hf, vcvt_ub_hf, vcvt_uh_hf: half float to int Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/beca620d2e5e0bc15886bf967ab3961a49= eca5f7.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/mmvec/hvx_ieee_fp.h | 4 + target/hexagon/mmvec/hvx_ieee_fp.c | 18 ++++ target/hexagon/imported/mmvec/encode_ext.def | 18 ++++ target/hexagon/imported/mmvec/ext.idef | 97 ++++++++++++++++++++ 4 files changed, 137 insertions(+) diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h index dff2fab14cd..bdc21e08f0f 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.h +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -10,6 +10,7 @@ #include "fpu/softfloat.h" =20 #define f16_to_f32(A) float16_to_float32((A), true, &env->hvx_fp_status) +#define f32_to_f16(A) float32_to_float16((A), true, &env->hvx_fp_status) =20 float32 fp_mult_sf_hf(float16 a1, float16 a2, float_status *fp_status); float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, float16 a4, @@ -21,4 +22,7 @@ float32 qf_min_sf(float32 a1, float32 a2, float_status *f= p_status); float16 qf_max_hf(float16 a1, float16 a2, float_status *fp_status); float16 qf_min_hf(float16 a1, float16 a2, float_status *fp_status); =20 +int32_t conv_w_sf(float32 a, float_status *fp_status); +int16_t conv_h_hf(float16 a, float_status *fp_status); + #endif diff --git a/target/hexagon/mmvec/hvx_ieee_fp.c b/target/hexagon/mmvec/hvx_= ieee_fp.c index 2ae79a485a3..697f35b5ed8 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.c +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -69,3 +69,21 @@ float16 qf_min_hf(float16 a1, float16 a2, float_status *= fp_status) } return float16_min(a1, a2, fp_status); } + +int32_t conv_w_sf(float32 a, float_status *fp_status) +{ + /* float32_to_int32 converts any NaN to MAX, hexagon looks at the sign= . */ + if (float32_is_any_nan(a)) { + return float32_is_neg(a) ? INT32_MIN : INT32_MAX; + } + return float32_to_int32_round_to_zero(a, fp_status); +} + +int16_t conv_h_hf(float16 a, float_status *fp_status) +{ + /* float16_to_int16 converts any NaN to MAX, hexagon looks at the sign= . */ + if (float16_is_any_nan(a)) { + return float16_is_neg(a) ? INT16_MIN : INT16_MAX; + } + return float16_to_int16_round_to_zero(a, fp_status); +} diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 72daf8724ca..c1ed1b6c231 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -840,4 +840,22 @@ DEF_ENC(V6_vfneg_sf,"00011110--0-0110PP1uuuuu011ddddd") DEF_ENC(V6_vabs_hf,"00011110--0-0110PP1uuuuu100ddddd") DEF_ENC(V6_vabs_sf,"00011110--0-0110PP1uuuuu101ddddd") =20 +/* IEEE FP vcvt instructions */ +DEF_ENC(V6_vcvt_sf_hf,"00011110--0-0100PP1uuuuu100ddddd") +DEF_ENC(V6_vcvt_hf_sf,"00011111011vvvvvPP1uuuuu001ddddd") +DEF_ENC(V6_vcvt_hf_ub,"00011110--0-0100PP1uuuuu001ddddd") +DEF_ENC(V6_vcvt_hf_b,"00011110--0-0100PP1uuuuu010ddddd") +DEF_ENC(V6_vcvt_hf_uh,"00011110--0-0100PP1uuuuu101ddddd") +DEF_ENC(V6_vcvt_hf_h,"00011110--0-0100PP1uuuuu111ddddd") +DEF_ENC(V6_vcvt_uh_hf,"00011110--0--101PP1uuuuu000ddddd") +DEF_ENC(V6_vcvt_h_hf,"00011110--0-0110PP1uuuuu000ddddd") +DEF_ENC(V6_vcvt_ub_hf,"00011111110vvvvvPP1uuuuu101ddddd") +DEF_ENC(V6_vcvt_b_hf,"00011111110vvvvvPP1uuuuu110ddddd") + +/* IEEE FP vconv instructions */ +DEF_ENC(V6_vconv_sf_w,"00011110--0--101PP1uuuuu011ddddd") +DEF_ENC(V6_vconv_w_sf,"00011110--0--101PP1uuuuu001ddddd") +DEF_ENC(V6_vconv_hf_h,"00011110--0--101PP1uuuuu100ddddd") +DEF_ENC(V6_vconv_h_hf,"00011110--0--101PP1uuuuu010ddddd") + #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index 1b16ed0628a..788ce1d2ae2 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -63,6 +63,9 @@ ITERATOR_INSN_ANY_SLOT_DOUBLE_VEC(WIDTH,TAG,SYNTAX2,DESCR= ,CODE) EXTINSN(V6_##TAG, SYNTAX, ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VS), \ DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) =20 +#define ITERATOR_INSN_SHIFT_SLOT_FLT(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VS,A_HVX_FLT), \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) =20 #define ITERATOR_INSN_SHIFT3_SLOT(WIDTH,TAG,SYNTAX,DESCR,CODE) \ EXTINSN(V6_##TAG, SYNTAX, ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VS,A_CVI_VS_3SRC= ,A_NOTE_SHIFT_RESOURCE,A_NOTE_NOVP,A_NOTE_VA_UNARY), \ @@ -3046,6 +3049,100 @@ ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vabs_hf, "Vd3= 2.hf=3Dvabs(Vu32.hf)", \ ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vabs_sf, "Vd32.sf=3Dvabs(Vu32.sf)", \ "Vector IEEE abs: sf", VdV.sf[i] =3D float32_abs(VuV.sf[i])) =20 +/* Two pipes: P2 & P3, two outputs, 16-bit */ +#define ITERATOR_INSN_IEEE_FP_DOUBLE_16(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX_DV,A_HVX_IEEE_FP_OUT_16),= \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* Two pipes: P2 & P3, two outputs, 32-bit output */ +#define ITERATOR_INSN_IEEE_FP_DOUBLE_32(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ + ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX_DV,A_HVX_IEEE_FP_OUT_= 32), \ + DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* Single pipe, 16-bit output */ +#define ITERATOR_INSN_IEEE_FP_16(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ + ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_OUT_16)= , \ + DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* single pipe, output can feed 16- or 32-bit accumulate */ +#define ITERATOR_INSN_IEEE_FP_16_32(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ + ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_OUT_16,= A_HVX_IEEE_FP_OUT_32), \ + DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/*************************************************************************= ***** + * IEEE FP convert instructions + *************************************************************************= *****/ + +ITERATOR_INSN_IEEE_FP_DOUBLE_16(32, vcvt_hf_ub, "Vdd32.hf=3Dvcvt(Vu32.ub)= ", + "Vector IEEE cvt from int: ub widen to hf", + VddV.v[0].hf[2*i] =3D uint64_to_float16_scalbn(VuV.ub[4*i], float_ro= und_nearest_even, 0); + VddV.v[0].hf[2*i+1] =3D uint64_to_float16_scalbn(VuV.ub[4*i+1], float_= round_nearest_even, 0); + VddV.v[1].hf[2*i] =3D uint64_to_float16_scalbn(VuV.ub[4*i+2], float_= round_nearest_even, 0); + VddV.v[1].hf[2*i+1] =3D uint64_to_float16_scalbn(VuV.ub[4*i+3], float_= round_nearest_even, 0)) + +ITERATOR_INSN_IEEE_FP_DOUBLE_16(32, vcvt_hf_b, "Vdd32.hf=3Dvcvt(Vu32.b)", + "Vector IEEE cvt from int: b widen to hf", + VddV.v[0].hf[2*i] =3D int64_to_float16_scalbn(VuV.b[4*i], float_roun= d_nearest_even, 0); + VddV.v[0].hf[2*i+1] =3D int64_to_float16_scalbn(VuV.b[4*i+1], float_ro= und_nearest_even, 0); + VddV.v[1].hf[2*i] =3D int64_to_float16_scalbn(VuV.b[4*i+2], float_ro= und_nearest_even, 0); + VddV.v[1].hf[2*i+1] =3D int64_to_float16_scalbn(VuV.b[4*i+3], float_ro= und_nearest_even, 0)) + +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vcvt_sf_hf, "Vdd32.sf=3Dvcvt(Vu32.hf)", + "Vector IEEE cvt: hf widen to sf", + VddV.v[0].sf[i] =3D f16_to_f32(VuV.hf[2*i]); + VddV.v[1].sf[i] =3D f16_to_f32(VuV.hf[2*i+1])) + +ITERATOR_INSN_IEEE_FP_16(16, vcvt_hf_uh, "Vd32.hf=3Dvcvt(Vu32.uh)", + "Vector IEEE cvt from int: uh to hf", + VdV.hf[i] =3D uint64_to_float16_scalbn(VuV.uh[i], float_round_nearest_= even, 0)) +ITERATOR_INSN_IEEE_FP_16(16, vcvt_hf_h, "Vd32.hf=3Dvcvt(Vu32.h)", + "Vector IEEE cvt from int: h to hf", + VdV.hf[i] =3D int64_to_float16_scalbn(VuV.h[i], float_round_nearest_ev= en, 0)) +ITERATOR_INSN_IEEE_FP_16_32(16, vcvt_uh_hf, "Vd32.uh=3Dvcvt(Vu32.hf)", + "Vector IEEE cvt to int: hf to uh", + VdV.uh[i] =3D float16_to_uint16_scalbn(VuV.hf[i], float_round_nearest_= even, 0, &env->hvx_fp_status)) +ITERATOR_INSN_IEEE_FP_16_32(16, vcvt_h_hf, "Vd32.h=3Dvcvt(Vu32.hf)", + "Vector IEEE cvt to int: hf to h", + VdV.h[i] =3D float16_to_int16_scalbn(VuV.hf[i], float_round_nearest_e= ven, 0, &env->hvx_fp_status)) + +ITERATOR_INSN_IEEE_FP_16(32, vcvt_hf_sf, "Vd32.hf=3Dvcvt(Vu32.sf,Vv32.sf)", + "Vector IEEE cvt: sf to hf", + VdV.hf[2*i] =3D f32_to_f16(VuV.sf[i]); + VdV.hf[2*i+1] =3D f32_to_f16(VvV.sf[i])) + +ITERATOR_INSN_IEEE_FP_16_32(32, vcvt_ub_hf, "Vd32.ub=3Dvcvt(Vu32.hf,Vv32.h= f)", "Vector cvt to int: hf narrow to ub", + VdV.ub[4*i] =3D float16_to_uint8_scalbn(VuV.hf[2*i], float_round_nea= rest_even, 0, &env->hvx_fp_status); + VdV.ub[4*i+1] =3D float16_to_uint8_scalbn(VuV.hf[2*i+1], float_round_n= earest_even, 0, &env->hvx_fp_status); + VdV.ub[4*i+2] =3D float16_to_uint8_scalbn(VvV.hf[2*i], float_round_nea= rest_even, 0, &env->hvx_fp_status); + VdV.ub[4*i+3] =3D float16_to_uint8_scalbn(VvV.hf[2*i+1], float_round_n= earest_even, 0, &env->hvx_fp_status)) + +ITERATOR_INSN_IEEE_FP_16_32(32, vcvt_b_hf, "Vd32.b=3Dvcvt(Vu32.hf,Vv32.hf= )", + "Vector cvt to int: hf narrow to b", + VdV.b[4*i] =3D float16_to_int8_scalbn(VuV.hf[2*i], float_round_neare= st_even, 0, &env->hvx_fp_status); + VdV.b[4*i+1] =3D float16_to_int8_scalbn(VuV.hf[2*i+1], float_round_nea= rest_even, 0, &env->hvx_fp_status); + VdV.b[4*i+2] =3D float16_to_int8_scalbn(VvV.hf[2*i], float_round_neare= st_even, 0, &env->hvx_fp_status); + VdV.b[4*i+3] =3D float16_to_int8_scalbn(VvV.hf[2*i+1], float_round_nea= rest_even, 0, &env->hvx_fp_status)) + +ITERATOR_INSN_SHIFT_SLOT_FLT(32, vconv_w_sf,"Vd32.w=3DVu32.sf", + "Vector conversion of sf32 format to int w", + VdV.w[i] =3D conv_w_sf(VuV.sf[i], &env->hvx_fp_status)) + +ITERATOR_INSN_SHIFT_SLOT_FLT(16, vconv_h_hf,"Vd32.h=3DVu32.hf", + "Vector conversion of hf16 format to int hw", + VdV.h[i] =3D conv_h_hf(VuV.hf[i], &env->hvx_fp_status)) + +ITERATOR_INSN_SHIFT_SLOT_FLT(32, vconv_sf_w,"Vd32.sf=3DVu32.w", + "Vector conversion of int w format to sf32", + VdV.sf[i] =3D int32_to_float32(VuV.w[i], &env->hvx_fp_status)) + +ITERATOR_INSN_SHIFT_SLOT_FLT(16, vconv_hf_h,"Vd32.hf=3DVu32.h", + "Vector conversion of int hw format to hf16", + VdV.hf[i] =3D float16_val(int16_to_float16(VuV.h[i], &env->hvx_fp_stat= us))) + /*************************************************************************= ***** DEBUG Vector/Register Printing *************************************************************************= *****/ --=20 2.34.1 From nobody Wed Aug 26 07:25:08 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549567; cv=none; d=zohomail.com; s=zohoarc; b=ZVsol40ejysE5UeuQi6Bo931veFMfdapKl1QRsQATvVwF28ZokGuyX2RpuMvEZ25xSiai35T6DbRd1Z+Lqy3Q5kYbpAu/Yb2/7EQjWD2aL5rjqFbphOppk7RW51VIifQ5ANH3Gxtv0OSGl6QCxpw457x3qHk/JRCclC9d2scQ3g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549567; 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=N72nrCUZZvd6uAkTA4I3v1vmrC/4bjSLZwkcdbuO9GQ=; b=I9X76dBLLnOeqt2HE31ZQF6eEwVFjTh877Z/1Sdv7ETYFjyL8rfyhwdXAHznXQWVOIB7Kr96umNfQnHTmev7FD9DVYzkuIpZ0rveZfxMd8f7R8GjBpEGa+IKAvg15tp9tSMak9QlU/RiZEv2EJtR1ZiiqAF4EjoANmx+XHir+2U= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549567341671.8512724745573; Wed, 12 Aug 2026 08:46:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7N-0005IZ-VK; Wed, 12 Aug 2026 11:43:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7K-0005EI-FC for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:46 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7I-0000Rk-2v for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:46 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbvHO2728922 for ; Wed, 12 Aug 2026 15:43:33 GMT Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hfw2rkk-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:33 +0000 (GMT) Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-84f7002f9afso1151627b3a.3 for ; Wed, 12 Aug 2026 08:43:32 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= N72nrCUZZvd6uAkTA4I3v1vmrC/4bjSLZwkcdbuO9GQ=; b=SGx1PAJfeqCVpvm3 kRarsgfHmr4hgBmfNIsMWfIROaVnWsjI1K+gylj4VE47iL7z3nstwgdLE+7yiHaK 2TKmMBntbc1pGOM7HF1BDG2Difpvu0n4d0fA6We9V6ndMizouwk8L0YYu5ARxQ2F 8mGVnCexdKlOvXbpHkjlcqNBnYfSbR3lnwQLAoP2VPksq3EQ+VxMKi2TcmJFfKvb qyxzLpZOMoJBU/eRgz80vXs2nSFir6MB1oCnHcRF8VRkgAwgMTomlVwvUA82kL42 To5gq7NNIPceZkblBglLd6b8+AuK8Rtv2eNgIBeRnFFXech3lhVPmALOgbxO6UO1 SSIXPg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549412; x=1787154212; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=N72nrCUZZvd6uAkTA4I3v1vmrC/4bjSLZwkcdbuO9GQ=; b=F9jcdn3tzxRmMB3nm/8KHQIVlSv1S9UkeNoWHh0Odjdi/Hhyzj57bK4H+zG8dIzxZG B8KG1cN7FDx7hs+IFJant0GRcO8HR1Eir6UN+CbcHxI1/p5etz2Gl3jW06sw7QRj3Ly+ YmUzeN1a9b/XhyqPl4XAbFUPCqWYPOWYv4ey1zqIewCkwXEX6ulzjrGQgC+6uMfOfZkL yr4ptHumsAFLPxye9nenL6uIMFoK+ER8q4h//l0mE7KEISB4Mo9ysf/EDW61JnrEXByX QPrV/t8E8RdO8Lp90PjlJe1tt2HcZ1vQggbIKUeup3RaE1ay+vq5fCqpBrklUE3lL5Z9 s2ZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549412; x=1787154212; h=content-transfer-encoding:content-type: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 :content-type; bh=N72nrCUZZvd6uAkTA4I3v1vmrC/4bjSLZwkcdbuO9GQ=; b=c5Ws0GZo1vLA/j+wGVUKgkQWJ3uvhBkr3W9KmgYu+905LaFoFxcJ6IFsh+IMGQkc3E SVKJ3tYcySRm03gxpyh7QqVbS3NwhKxERW8CaNuh/MfiSu6aphWsEHT+6wf+WuKbKl3y BAskGhHGqOojpPoBi6hbsNKJrl5B+2yDpKJxQ+KJrlGkvJvlcDJkYY68/dE7Z9d0pf02 2G/NWDk5uQjZdlcdGUY+zuJ1H/i5eBky73vPrFF6u4ky8QQbFgUH+8BVtifLEbiFBCqm aRRCVHZYM7dtNbn0W0jr4gjKpxekFTNbSADjOVXpkWBfGhU1vYJttQ58i+AYQ4NkyapH 1cGQ== X-Gm-Message-State: AOJu0YxvfrJE9A2LI4TwQ3D9SNQjTncrPnhgYzYKbLAXO4Kw0FaqxEdu uxv99oYREF1s1PPYC9E2Dvxa7JjArBUzxjZMGy3xrOciWQ5d2/3UV1SJA5uawlv5U2FIm31vmH1 JPB8i+QC0VlcSMDs4i4fJ45qEd1ipX/9vs4nLLubAEGGs6v8RQGBmb9QRTEj5IDZs+A== X-Gm-Gg: AR+sD12G7jW37Yl4xq7PCIM3R5LPXQLwuKlaKHNDGiM9dkFc/gYNATholYxK+v9Qkof Wy19tb0Ok+rj3MainqB+H6RR6DvQgZGbBnnKRJt/XN9oR/j6S0NBLl3l/zE9VizENyjZZu1hQPZ JPwJJ8pQBlJLFGOjQ/ZNZ5HvIDegyUEI4zECqlXHB0+xbHHcWp7Zj1gJUv7I9CgAn1mHZCG9Y5w I7WWh9QzKdKI60S0OCUhd++X/zowQ+82fuBt8456jh4hHDU6AV0DDtMjLEyQkv+f9YJ0pQfwtT0 tznAXmhdMNCMu+VOqUs7aH7EzEdWJER+Uajuno/hDGhxB2O/oddKs7SI/fZLWv38+dUd/0aoECz iB+XpI0hTYy7MkM4UgPJ+/4FLticlTs7cNg0cFs6x5K+qQUD1 X-Received: by 2002:a05:6a21:6e91:b0:3bf:b84c:2984 with SMTP id adf61e73a8af0-3cc3f5bc65cmr7228673637.11.1786549411972; Wed, 12 Aug 2026 08:43:31 -0700 (PDT) X-Received: by 2002:a05:6a21:6e91:b0:3bf:b84c:2984 with SMTP id adf61e73a8af0-3cc3f5bc65cmr7228597637.11.1786549411297; Wed, 12 Aug 2026 08:43:31 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , Pierrick Bouvier Subject: [PULL v2 35/41] target/hexagon: add v68 HVX IEEE float compare insns Date: Wed, 12 Aug 2026 08:42:14 -0700 Message-Id: <20260812154220.1029828-36-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXw0JGoJinbxmB B03HLo6+JZiw79TeUIaOZ+rgu2js+H8rbX1W2Kfz5IKgmRkE0gH4YbQjOsYxaPZDx8VOZ3BYkr2 JQ2oP3BzbfJBqVM6+SVylHRvgvMXssU= X-Proofpoint-GUID: 6G8-d0ZmgKqndLWgmd8XjR4kEeDxAn6J X-Authority-Analysis: v=2.4 cv=fpDsol4f c=1 sm=1 tr=0 ts=6a7c94a5 cx=c_pps a=rEQLjTOiSrHUhVqRoksmgQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=u3fQtnv4TpRuBU7d53gA:9 a=QEXdDO2ut3YA:10 a=2VI0MkxyNR6bbpdq8BZq:22 X-Proofpoint-ORIG-GUID: 6G8-d0ZmgKqndLWgmd8XjR4kEeDxAn6J X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXzybGU7twXfN3 +HNRRuHuNDzdfrDd7kTxe+RHkx8YUialcriIpqAUoSHciQhdjgZ2YyJnloBzkNRKLx+cxqa4hyX 6SVz1IngK5AQwDaDdBT98onAEmc21J/BEaAbwTCU3UmB+sgSqukjB2OGkmIhtpUtn5kQUJANJ2z iE+P3PgK2HISEIACEOorzP0ZnvcDBWgYQ97xBOYgPLteWMq4JMo7tBle12ekYLEwS1PXsQyEmMv 2DEpKW5KFIzSqkoBH9ebBBJxRh43nx/MS83Li7+NZzbYFHwTXwxqBYwbn0RdHHe2qUCEeb8x4Kv x4xbEtAjDDBEhMhWOvNOTdJg7WVyokSExGjQ+b1ZqCysIRwpDQplyje31sHSpNbDjacc6jyyd3p 7zb7lFRTMTDJ4JR3eTYKTEW3SSVGNcXTUDptTzZyjovNpE0RkkQo5hOml8KZ+1oygcI12nQ3PZB HEy5LX0tMwUSPLIDbXw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 spamscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 malwarescore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549568353158500 From: Matheus Tavares Bernardino Add HVX IEEE floating-point compare instructions: - V6_vgthf, V6_vgtsf: greater-than compare - V6_vgthf_and, V6_vgtsf_and: greater-than with predicate-and - V6_vgthf_or, V6_vgtsf_or: greater-than with predicate-or - V6_vgthf_xor, V6_vgtsf_xor: greater-than with predicate-xor Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/96e27588ad5a7d47ba9f56f1d547729a19= b691c5.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/mmvec/hvx_ieee_fp.h | 4 ++ target/hexagon/mmvec/macros.h | 6 +- target/hexagon/mmvec/hvx_ieee_fp.c | 48 +++++++++++++++ target/hexagon/imported/mmvec/encode_ext.def | 10 ++++ target/hexagon/imported/mmvec/ext.idef | 61 ++++++++++++++++++++ 5 files changed, 128 insertions(+), 1 deletion(-) diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h index bdc21e08f0f..01728121ebb 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.h +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -25,4 +25,8 @@ float16 qf_min_hf(float16 a1, float16 a2, float_status *f= p_status); int32_t conv_w_sf(float32 a, float_status *fp_status); int16_t conv_h_hf(float16 a, float_status *fp_status); =20 +/* IEEE - FP compare instructions */ +uint32_t cmpgt_sf(float32 a1, float32 a2, float_status *fp_status); +uint16_t cmpgt_hf(float16 a1, float16 a2, float_status *fp_status); + #endif diff --git a/target/hexagon/mmvec/macros.h b/target/hexagon/mmvec/macros.h index ac709d89938..757fbec5c9a 100644 --- a/target/hexagon/mmvec/macros.h +++ b/target/hexagon/mmvec/macros.h @@ -354,6 +354,10 @@ do { \ COE =3D (sextract32(VAL, 24 + 2 * POS, 2) << 8) | \ extract32(VAL, POS * 8, 8); \ - } while (0); + } while (0) \ + ; + +#define fCMPGT_SF(A, B) cmpgt_sf(A, B, &env->hvx_fp_status) +#define fCMPGT_HF(A, B) cmpgt_hf(A, B, &env->hvx_fp_status) =20 #endif diff --git a/target/hexagon/mmvec/hvx_ieee_fp.c b/target/hexagon/mmvec/hvx_= ieee_fp.c index 697f35b5ed8..d7751adbe29 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.c +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -87,3 +87,51 @@ int16_t conv_h_hf(float16 a, float_status *fp_status) } return float16_to_int16_round_to_zero(a, fp_status); } + +/* + * Returns true if f1 > f2, where at least one of the elements is guarante= ed + * to be NaN. + * Up to v73, Hexagon HVX IEEE FP follows this order: + * QNaN > SNaN > +Inf > numbers > -Inf > SNaN_neg > QNaN_neg + */ +static bool float32_nan_compare(float32 f1, float32 f2, float_status *fp_s= tatus) +{ + /* opposite signs case */ + if (float32_is_neg(f1) !=3D float32_is_neg(f2)) { + return !float32_is_neg(f1); + } + + /* same sign case */ + bool result =3D (float32_is_any_nan(f1) && !float32_is_any_nan(f2)) || + (float32_is_quiet_nan(f1, fp_status) && !float32_is_quiet_nan(f2, = fp_status)); + return float32_is_neg(f1) ? !result : result; +} + +static bool float16_nan_compare(float16 f1, float16 f2, float_status *fp_s= tatus) +{ + /* opposite signs case */ + if (float16_is_neg(f1) !=3D float16_is_neg(f2)) { + return !float16_is_neg(f1); + } + + /* same sign case */ + bool result =3D (float16_is_any_nan(f1) && !float16_is_any_nan(f2)) || + (float16_is_quiet_nan(f1, fp_status) && !float16_is_quiet_nan(f2, = fp_status)); + return float16_is_neg(f1) ? !result : result; +} + +uint32_t cmpgt_sf(float32 a1, float32 a2, float_status *fp_status) +{ + if (float32_is_any_nan(a1) || float32_is_any_nan(a2)) { + return float32_nan_compare(a1, a2, fp_status); + } + return float32_compare(a1, a2, fp_status) =3D=3D float_relation_greate= r; +} + +uint16_t cmpgt_hf(float16 a1, float16 a2, float_status *fp_status) +{ + if (float16_is_any_nan(a1) || float16_is_any_nan(a2)) { + return float16_nan_compare(a1, a2, fp_status); + } + return float16_compare(a1, a2, fp_status) =3D=3D float_relation_greate= r; +} diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index c1ed1b6c231..3572e4de4cc 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -858,4 +858,14 @@ DEF_ENC(V6_vconv_w_sf,"00011110--0--101PP1uuuuu001dddd= d") DEF_ENC(V6_vconv_hf_h,"00011110--0--101PP1uuuuu100ddddd") DEF_ENC(V6_vconv_h_hf,"00011110--0--101PP1uuuuu010ddddd") =20 +/* IEEE FP compare instructions */ +DEF_ENC(V6_vgtsf,"00011100100vvvvvPP1uuuuu011100dd") +DEF_ENC(V6_vgthf,"00011100100vvvvvPP1uuuuu011101dd") +DEF_ENC(V6_vgtsf_and,"00011100100vvvvvPP1uuuuu110010xx") +DEF_ENC(V6_vgthf_and,"00011100100vvvvvPP1uuuuu110011xx") +DEF_ENC(V6_vgtsf_or,"00011100100vvvvvPP1uuuuu001100xx") +DEF_ENC(V6_vgthf_or,"00011100100vvvvvPP1uuuuu001101xx") +DEF_ENC(V6_vgtsf_xor,"00011100100vvvvvPP1uuuuu111010xx") +DEF_ENC(V6_vgthf_xor,"00011100100vvvvvPP1uuuuu111011xx") + #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index 788ce1d2ae2..a7043d598c6 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -3143,6 +3143,67 @@ ITERATOR_INSN_SHIFT_SLOT_FLT(16, vconv_hf_h,"Vd32.hf= =3DVu32.h", "Vector conversion of int hw format to hf16", VdV.hf[i] =3D float16_val(int16_to_float16(VuV.h[i], &env->hvx_fp_stat= us))) =20 +/*************************************************************************= ***** + * IEEE FP compare instructions + *************************************************************************= *****/ + +#define VCMPGT_SF(DEST, ASRC, ASRCOP, CMP, N, SRC, MASK, WIDTH) \ +{ \ + for (fHIDE(int) i =3D 0; i < fVBYTES(); i +=3D WIDTH) { \ + fHIDE(int) VAL =3D fCMPGT_SF(VuV.SRC[i/WIDTH],VvV.SRC[i/WIDTH]) ? = MASK : 0; \ + fSETQBITS(DEST,WIDTH,MASK,i,ASRC ASRCOP VAL); \ + } \ +} + +#define VCMPGT_HF(DEST, ASRC, ASRCOP, CMP, N, SRC, MASK, WIDTH) \ +{ \ + for (fHIDE(int) i =3D 0; i < fVBYTES(); i +=3D WIDTH) { \ + fHIDE(int) VAL =3D fCMPGT_HF(VuV.SRC[i/WIDTH],VvV.SRC[i/WIDTH]) ? = MASK : 0; \ + fSETQBITS(DEST,WIDTH,MASK,i,ASRC ASRCOP VAL); \ + } \ +} + +/* Vector SF compare */ +#define MMVEC_CMPGT_SF(TYPE,TYPE2,DESCR,N,MASK,WIDTH,SRC) \ + EXTINSN(V6_vgt##TYPE##_and, "Qx4&=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-and", \ + VCMPGT_SF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), &, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE##_xor, "Qx4^=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-xor", \ + VCMPGT_SF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), ^, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE##_or, "Qx4|=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE2= ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-or", \ + VCMPGT_SF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), |, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE, "Qd4=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than", \ + VCMPGT_SF(QdV, , , ">", N, SRC, MASK, WIDTH)) + +/* Vector HF compare */ +#define MMVEC_CMPGT_HF(TYPE,TYPE2,DESCR,N,MASK,WIDTH,SRC) \ + EXTINSN(V6_vgt##TYPE##_and, "Qx4&=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-and", \ + VCMPGT_HF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), &, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE##_xor, "Qx4^=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-xor", \ + VCMPGT_HF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), ^, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE##_or, "Qx4|=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE2= ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-or", \ + VCMPGT_HF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), |, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE, "Qd4=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than", \ + VCMPGT_HF(QdV, , , ">", N, SRC, MASK, WIDTH)) + +MMVEC_CMPGT_SF(sf,"sf","Vector sf Compare ", fVELEM(32), 0xF, 4, sf) +MMVEC_CMPGT_HF(hf,"hf","Vector hf Compare ", fVELEM(16), 0x3, 2, hf) + /*************************************************************************= ***** DEBUG Vector/Register Printing *************************************************************************= *****/ --=20 2.34.1 From nobody Wed Aug 26 07:25:09 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549566; cv=none; d=zohomail.com; s=zohoarc; b=AabR3to67A8+7y3iroTPPDmu54IwjyAD/UHw8HOJWAiu2VQtk1Lem3p5QvdRTW1AQbj8VZfVqiaGvABI2Q3IGMOQ8TDSnagOHrbByISdrG8luyFrTRKjbAS3Vom59MLTraZjpZxoDeFvyhLuR/CYTTge/5Rl2GE6cT9M10mDnDI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549566; 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=fzFyrSxrZ2iHooQXAW6xHAXcLUiTbAxGyqaQB6rUxh0=; b=oMBsA2jfLRJRJmJhI/DRMxPZ3XWeRmeOfOFZ6omZuG0QhfeeMezc13600HcdP3L4DAvVyy1YMgeokQfvxf4uOapcBYHkBum+kOEguKC6vK25ykNUUMQZIDULOyVmT+/iQ2l64I7nCtpmciWaYU1s0dxxvQtN8I5w7O5jFfOAnOY= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549566957897.4121582938625; Wed, 12 Aug 2026 08:46:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7S-0005aj-Qa; Wed, 12 Aug 2026 11:43:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7M-0005Hk-BW for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:48 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7J-0000SV-UT for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:48 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbmls3971657 for ; Wed, 12 Aug 2026 15:43:35 GMT Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0jgrjjed-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:34 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-cbef1d25500so213064a12.1 for ; Wed, 12 Aug 2026 08:43:34 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= fzFyrSxrZ2iHooQXAW6xHAXcLUiTbAxGyqaQB6rUxh0=; b=kDS5msTdRxvWL3Gr vfSDepczJkdzJEh1RX6qlGl+CMQfgJ33NFVLAE7w8ndz5+b3JVPeha25XQD1XMlD 4ZZlnq4ANG6GK9j5+p89AdnZKQmn0kx4gPuQRw2e8aZE8ErvN7vdc3PEE2v/5bLd q8JdFh6WZhx1yYctgwxfkX879q6qgwsEgAMCQ7sqHEgHSoQ0O33/ismjBWzt6WpR E0qmtg9d/2ZztpGJtI4Vh/OtCQ+c320bIFjBnEcn/NryTArosecy3Be4Rnamgsq8 6DL6B5YKV7OJmDqNfS1iLqJRcS8/eqCY+dCcWx0P0WO13dPD8oSQZQd1n0gnrgxv T+5chA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549414; x=1787154214; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=fzFyrSxrZ2iHooQXAW6xHAXcLUiTbAxGyqaQB6rUxh0=; b=ZuOZLW/RggTd2TCJBbIXnNh7V2CE8xYoOsyMu5GMpqWnwvK3v0NN9sd3zTEuc1hP0G NaQb7JoDyL1UiMI8106j5hrMeV9GEmVxgIZ7PMqVzMImGYrvnJkEg/cM6xpLo1Aw4cvO n4d1j54Mq/ejXzWVS+Ofefv/iuRr/BIGUiDPUzYTc22plU4UiBEcvJppTaryNVe14MSl BDqekg9ydhKHor1X7RS4oF/oqNeK1FcBym8ARLP138Tr1awnRTkX8liUMRSlv42vwbdE T4B34ndABBYxApWGz64hhosfWFJlnM8A/ta0pJ5mQv4zyqYMDTQxP82Gh4BFAKP/LyAE C6XQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549414; x=1787154214; h=content-transfer-encoding:content-type: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 :content-type; bh=fzFyrSxrZ2iHooQXAW6xHAXcLUiTbAxGyqaQB6rUxh0=; b=i8STCP69f9DC7BK039e7fAc6C7nwYSd8YGRkpS3ion4VDCGAsW9HWGk9ykOUSvfB4w m/TZ3uLBg5aTsp6JB0HWUd6TVR/8zQUt8cFdWwKmGOehOuiCI3RZJxqX++SqjgLt99kg /qtVv7UUdAZwoY/CAzpM1frx7Ko+eV0tj21O/yD/bAoIzZ7/jbx646QVgeqT9jfJVlL6 VCDvZvOWSe+zbkf5KTZgVxDPifdisn6rsSfOOuQNi1PFiCKfXj5P2GjH0RvhAvzkN6nk KwuDwUhqA3HA+9E4fUWS80A3Z5lKkzhuKKlNf30/V9OoM8aAc9tz0B53sByff7bWLyFS eviw== X-Gm-Message-State: AOJu0YyltsxT3t1VV7N/vUDPHtI3ar5GNurWlwVgpiX4QFvq/L5NVIsQ f5UEy8G1wo9+QIU/eZMGQ/ENQytkh/8cV+i9eaUELo1+yuh1/5HgLPPnk37vadX8CkdhG+hR52I ex+5Jkl0xTM13f1heAfDTFjYCvvbhJ0/E/RV+vgt0ajd7sSN/uNAxi1xqac+oAESnYA== X-Gm-Gg: AR+sD12mjQlcypKiHcucaly4iQA05Ze4t5mI2OhNr7Qv0EwdWKwBtCgvLypO1QoEXbW iE3vyVD81hTO0+xGZ6M6CQaSz1rLVnwN8udQ1LQEPa/m5pNyfR3JbdfpjFNNOGaq0P0B3cQqRlx H7+drod+CpCYgwt5UjBBJi0BKH/itUJliiPvzQAaW4Z4UIV2YbLp2ylVwMy/vi06/G9etT0c3W2 i2P3APcxU3+boSU7UNa7xjAAFJOCtj7d6RaauWwY/4iVAwWUe0jgU3NYW0JSEOv5s3WfDCLsAbz 0acvXu/oPD4oFr6TAyHqa9UCJn/Zl57CwGuD9l5lwBMDUeYUX2mFO4WB1wuwt8YL88i6E5jUnMy X/lWGJjAUEskfGKeVKCqW012K18Lw/ctrePzRiQashTy4dSys X-Received: by 2002:a05:6a20:6f8a:b0:3bf:6237:4d4a with SMTP id adf61e73a8af0-3cc3f739ac7mr8562050637.24.1786549413620; Wed, 12 Aug 2026 08:43:33 -0700 (PDT) X-Received: by 2002:a05:6a20:6f8a:b0:3bf:6237:4d4a with SMTP id adf61e73a8af0-3cc3f739ac7mr8561964637.24.1786549413025; Wed, 12 Aug 2026 08:43:33 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , Pierrick Bouvier Subject: [PULL v2 36/41] target/hexagon: add v73 HVX IEEE bfloat16 insns Date: Wed, 12 Aug 2026 08:42:15 -0700 Message-Id: <20260812154220.1029828-37-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX+vg47fOjyccN m8xVOcYjR+HlkQcOdgOzhgXSach49aqV+Gs/PyJkoMnyt4PCJRKTYFSDbSKJcnCRrgSzfxCQ/pC a8wYEVrHobI771ViawAEkN0HX40mCV5b0dV+Pn+tekp/Qu1xnChRrbwyGFjU/oc4SyvAOLf7TTD TK8yRCSpPhMxNb1/B7PzjkrY2MAKt4UtoeCqkxvvDaGV+i3fapXpd9FWXmTMgAJZtlGc4wIhqCR H2hxc3TM/wrl2TmshvDs1RTuzZ/OK9IoVWcycJ3Wo8pPrYMG/OTInONeTlZy5lIVzFAK7RIuUNi tcOHppmADBhCyColuRgI7qXi8ARu41YeYVEu0WG6OOGI1tT6mEoY5JGU56oSMNvz/HJpt6P6lAn N+C2BJBl1sH1hKtMUyCzI5JWpuMYBU/CD+l8YjY1611/I523xad76l+iAxqiDzo7th8AmB9FP8t p2RqrOhxG7OY64tyfHg== X-Proofpoint-ORIG-GUID: nZXGSccZgtwvZk2--FUWd8orVB9Txf-9 X-Authority-Analysis: v=2.4 cv=TNJ1jVla c=1 sm=1 tr=0 ts=6a7c94a6 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=S7C5apGguM20fOCqQjAA:9 a=QEXdDO2ut3YA:10 a=_Vgx9l1VpLgwpw_dHYaR:22 X-Proofpoint-GUID: nZXGSccZgtwvZk2--FUWd8orVB9Txf-9 X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfXyW157Zc2QF8V 9gSL4lLp5kjBkaNbJz0lPvgJRqnjq+L+fCbg/7HgSkiq0KexSoxQC2i+sZmRs+6KP53GLdUuPYn u3I6Eh7vaHkArDmapNqSJ2Lg+jX1Krs= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 phishscore=0 impostorscore=0 adultscore=0 suspectscore=0 bulkscore=0 spamscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549568497158501 From: Matheus Tavares Bernardino Add HVX IEEE bfloat16 (bf16) instructions: Arithmetic operations: - V6_vadd_sf_bf, V6_vsub_sf_bf: add/sub bf16 widening to sf output - V6_vmpy_sf_bf: multiply bf16 widening to sf output - V6_vmpy_sf_bf_acc: multiply-accumulate bf16 widening to sf output Min/Max operations: - V6_vmin_bf, V6_vmax_bf: bf16 min/max Comparison operations: - V6_vgtbf: greater-than compare - V6_vgtbf_and, V6_vgtbf_or, V6_vgtbf_xor: predicate variants Conversion operations: - V6_vcvt_bf_sf: convert sf to bf16 Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/1a253373567781e0e141c34b41eaffad47= 89a493.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- target/hexagon/mmvec/hvx_ieee_fp.h | 37 ++++++++++++ target/hexagon/mmvec/macros.h | 4 ++ target/hexagon/mmvec/mmvec.h | 1 + target/hexagon/imported/mmvec/encode_ext.def | 15 +++++ target/hexagon/imported/mmvec/ext.idef | 62 ++++++++++++++++++++ 5 files changed, 119 insertions(+) diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h index 01728121ebb..b7e379b0893 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.h +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -9,8 +9,11 @@ =20 #include "fpu/softfloat.h" =20 +#define FP32_DEF_NAN 0x7FFFFFFF + #define f16_to_f32(A) float16_to_float32((A), true, &env->hvx_fp_status) #define f32_to_f16(A) float32_to_float16((A), true, &env->hvx_fp_status) +#define bf16_to_f32(A) bfloat16_to_float32(A, &env->hvx_fp_status) =20 float32 fp_mult_sf_hf(float16 a1, float16 a2, float_status *fp_status); float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, float16 a4, @@ -29,4 +32,38 @@ int16_t conv_h_hf(float16 a, float_status *fp_status); uint32_t cmpgt_sf(float32 a1, float32 a2, float_status *fp_status); uint16_t cmpgt_hf(float16 a1, float16 a2, float_status *fp_status); =20 +/* IEEE BFloat instructions */ + +#define fp_mult_sf_bf(A, B) \ + float32_mul(bf16_to_f32(A), bf16_to_f32(B), &env->hvx_fp_status) + +#define fp_add_sf_bf(A, B) \ + float32_add(bf16_to_f32(A), bf16_to_f32(B), &env->hvx_fp_status) + +#define fp_sub_sf_bf(A, B) \ + float32_sub(bf16_to_f32(A), bf16_to_f32(B), &env->hvx_fp_status) + +#define fp_mult_sf_bf_acc(f1, f2, f3) \ + float32_muladd(bf16_to_f32(f1), bf16_to_f32(f2), f3, 0, &env->hvx_fp_s= tatus) + +static inline bfloat16 f32_to_bf16(float32 A, float_status *fp_status) +{ + uint32_t rslt =3D A; + if ((rslt & 0x1FFFF) =3D=3D 0x08000) { + /* do not round up if exactly .5 and even already */ + } else if ((rslt & 0x8000) =3D=3D 0x8000) { + rslt +=3D 0x8000; /* rounding to nearest number */ + } + rslt =3D float32_is_any_nan(A) ? FP32_DEF_NAN : rslt; + return float32_to_bfloat16(rslt, fp_status); +} + +#define fp_min_bf(A, B) \ + f32_to_bf16(float32_min(bf16_to_f32(A), bf16_to_f32(B), &env->hvx_fp_s= tatus), \ + &env->hvx_fp_status); + +#define fp_max_bf(A, B) \ + f32_to_bf16(float32_max(bf16_to_f32(A), bf16_to_f32(B), &env->hvx_fp_s= tatus), \ + &env->hvx_fp_status); + #endif diff --git a/target/hexagon/mmvec/macros.h b/target/hexagon/mmvec/macros.h index 757fbec5c9a..b36f833b1de 100644 --- a/target/hexagon/mmvec/macros.h +++ b/target/hexagon/mmvec/macros.h @@ -25,6 +25,9 @@ #include "accel/tcg/probe.h" #include "mmvec/hvx_ieee_fp.h" =20 +#define fBFLOAT() +#define fCVI_VX_NO_TMP_LD() + #ifndef QEMU_GENERATE #define VdV (*(MMVector *restrict)(VdV_void)) #define VsV (*(MMVector *restrict)(VsV_void)) @@ -359,5 +362,6 @@ =20 #define fCMPGT_SF(A, B) cmpgt_sf(A, B, &env->hvx_fp_status) #define fCMPGT_HF(A, B) cmpgt_hf(A, B, &env->hvx_fp_status) +#define fCMPGT_BF(A, B) fCMPGT_SF((uint32_t)(A) << 16, (uint32_t)(B) << 16) =20 #endif diff --git a/target/hexagon/mmvec/mmvec.h b/target/hexagon/mmvec/mmvec.h index 9841687f83f..8e72f2f6ae7 100644 --- a/target/hexagon/mmvec/mmvec.h +++ b/target/hexagon/mmvec/mmvec.h @@ -43,6 +43,7 @@ typedef union { int8_t b[MAX_VEC_SIZE_BYTES / 1]; float32 sf[MAX_VEC_SIZE_BYTES / 4]; float16 hf[MAX_VEC_SIZE_BYTES / 2]; + bfloat16 bf[MAX_VEC_SIZE_BYTES / 2]; } MMVector; =20 typedef union { diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 3572e4de4cc..16f043b77dc 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -868,4 +868,19 @@ DEF_ENC(V6_vgthf_or,"00011100100vvvvvPP1uuuuu001101xx") DEF_ENC(V6_vgtsf_xor,"00011100100vvvvvPP1uuuuu111010xx") DEF_ENC(V6_vgthf_xor,"00011100100vvvvvPP1uuuuu111011xx") =20 +/* BFLOAT instructions */ +DEF_ENC(V6_vmpy_sf_bf,"00011101010vvvvvPP1uuuuu100ddddd") +DEF_ENC(V6_vmpy_sf_bf_acc,"00011101000vvvvvPP1uuuuu000xxxxx") +DEF_ENC(V6_vadd_sf_bf,"00011101010vvvvvPP1uuuuu110ddddd") +DEF_ENC(V6_vsub_sf_bf,"00011101010vvvvvPP1uuuuu101ddddd") +DEF_ENC(V6_vmax_bf,"00011101010vvvvvPP1uuuuu111ddddd") +DEF_ENC(V6_vmin_bf,"00011101010vvvvvPP1uuuuu000ddddd") +DEF_ENC(V6_vcvt_bf_sf,"00011101010vvvvvPP1uuuuu011ddddd") + +/* BFLOAT compare instructions */ +DEF_ENC(V6_vgtbf,"00011100100vvvvvPP1uuuuu011110dd") +DEF_ENC(V6_vgtbf_and,"00011100100vvvvvPP1uuuuu110100xx") +DEF_ENC(V6_vgtbf_or,"00011100100vvvvvPP1uuuuu001110xx") +DEF_ENC(V6_vgtbf_xor,"00011100100vvvvvPP1uuuuu111100xx") + #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index a7043d598c6..857aa6133f8 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -3163,6 +3163,15 @@ ITERATOR_INSN_SHIFT_SLOT_FLT(16, vconv_hf_h,"Vd32.hf= =3DVu32.h", } \ } =20 +#define VCMPGT_BF(DEST, ASRC, ASRCOP, CMP, N, SRC, MASK, WIDTH) \ +{ \ + fBFLOAT(); \ + for (fHIDE(int) i =3D 0; i < fVBYTES(); i +=3D WIDTH) { \ + fHIDE(int) VAL =3D fCMPGT_BF(VuV.SRC[i/WIDTH],VvV.SRC[i/WIDTH]) ? = MASK : 0; \ + fSETQBITS(DEST,WIDTH,MASK,i,ASRC ASRCOP VAL); \ + } \ +} + /* Vector SF compare */ #define MMVEC_CMPGT_SF(TYPE,TYPE2,DESCR,N,MASK,WIDTH,SRC) \ EXTINSN(V6_vgt##TYPE##_and, "Qx4&=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")", \ @@ -3201,8 +3210,61 @@ ITERATOR_INSN_SHIFT_SLOT_FLT(16, vconv_hf_h,"Vd32.hf= =3DVu32.h", DESCR" greater than", \ VCMPGT_HF(QdV, , , ">", N, SRC, MASK, WIDTH)) =20 +/* Vector BF compare */ +#define MMVEC_CMPGT_BF(TYPE,TYPE2,DESCR,N,MASK,WIDTH,SRC) \ + EXTINSN(V6_vgt##TYPE##_and, "Qx4&=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")",\ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-and", \ + VCMPGT_BF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), &, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE##_xor, "Qx4^=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-xor", \ + VCMPGT_BF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), ^, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE##_or, "Qx4|=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE2= ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-or", \ + VCMPGT_BF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), |, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE, "Qd4=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than", \ + VCMPGT_BF(QdV, , , ">", N, SRC, MASK, WIDTH)) + MMVEC_CMPGT_SF(sf,"sf","Vector sf Compare ", fVELEM(32), 0xF, 4, sf) MMVEC_CMPGT_HF(hf,"hf","Vector hf Compare ", fVELEM(16), 0x3, 2, hf) +MMVEC_CMPGT_BF(bf,"bf","Vector bf Compare ", fVELEM(16), 0x3, 2, bf) + +/*************************************************************************= ***** + BFloat arithmetic and max/min instructions + *************************************************************************= *****/ + +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vadd_sf_bf, + "Vdd32.sf=3Dvadd(Vu32.bf,Vv32.bf)", "Vector IEEE add: bf widen to sf", + VddV.v[0].sf[i] =3D fp_add_sf_bf(VuV.bf[2*i], VvV.bf[2*i]); + VddV.v[1].sf[i] =3D fp_add_sf_bf(VuV.bf[2*i+1], VvV.bf[2*i+1]); fBFLOA= T()) +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vsub_sf_bf, + "Vdd32.sf=3Dvsub(Vu32.bf,Vv32.bf)", "Vector IEEE sub: bf widen to sf", + VddV.v[0].sf[i] =3D fp_sub_sf_bf(VuV.bf[2*i], VvV.bf[2*i]); + VddV.v[1].sf[i] =3D fp_sub_sf_bf(VuV.bf[2*i+1], VvV.bf[2*i+1]); fBFLOA= T()) +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vmpy_sf_bf, + "Vdd32.sf=3Dvmpy(Vu32.bf,Vv32.bf)", "Vector IEEE mul: hf widen to sf", + VddV.v[0].sf[i] =3D fp_mult_sf_bf(VuV.bf[2*i], VvV.bf[2*i]); + VddV.v[1].sf[i] =3D fp_mult_sf_bf(VuV.bf[2*i+1], VvV.bf[2*i+1]); fBFLO= AT()) +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vmpy_sf_bf_acc, + "Vxx32.sf+=3Dvmpy(Vu32.bf,Vv32.bf)", "Vector IEEE fma: hf widen to sf", + VxxV.v[0].sf[i] =3D fp_mult_sf_bf_acc(VuV.bf[2*i], VvV.bf[2*i], VxxV.v= [0].sf[i]); + VxxV.v[1].sf[i] =3D fp_mult_sf_bf_acc(VuV.bf[2*i+1], VvV.bf[2*i+1], Vx= xV.v[1].sf[i]); + fCVI_VX_NO_TMP_LD(); fBFLOAT()) +ITERATOR_INSN_IEEE_FP_16(32, vcvt_bf_sf, + "Vd32.bf=3Dvcvt(Vu32.sf,Vv32.sf)", "Vector IEEE cvt: sf to bf", + VdV.bf[2*i] =3D f32_to_bf16(VuV.sf[i], &env->hvx_fp_status); + VdV.bf[2*i+1] =3D f32_to_bf16(VvV.sf[i], &env->hvx_fp_status); fBFLOAT= ()) + +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vmax_bf, "Vd32.bf=3Dvmax(Vu32.bf,Vv32= .bf)", + "Vector IEEE max: bf", VdV.bf[i] =3D fp_max_bf(VuV.bf[i], VvV.bf[i]); + fBFLOAT()) +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vmin_bf, "Vd32.bf=3Dvmin(Vu32.bf,Vv32= .bf)", + "Vector IEEE min: bf", VdV.bf[i] =3D fp_min_bf(VuV.bf[i], VvV.bf[i]); + fBFLOAT()) =20 /*************************************************************************= ***** DEBUG Vector/Register Printing --=20 2.34.1 From nobody Wed Aug 26 07:25:09 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549682; cv=none; d=zohomail.com; s=zohoarc; b=dQRKd9Lxr4JxrXy8OB06stfjLnnCqOB41phQtkLi3xZ46aLcvRVYHKR42LJAjJl7Cu6z7Gwe09PwBsbqtWuODzG1cS9myxR4S63BpGs1acmTcpq+sPLO5vX/SYB407tZB0q7Tu23QCG8pelPYAqEwDAvPedQlpStqinJcsy+5F0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549682; 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=r4vE9njv5VOj8J3Spwon7COYaOlw8NYjgg8VtUPNFps=; b=BUK11UmDATpdK0SlvF4WxTWreZDn/vDyqbZjzkWoWIiR+5pmk1GECqYh3tsBjVO30zp3OEaEV31ATtHAnOSti3+Ci+ud+5CbcRm4XjuXDcLTbK2LWUqLTZmene/8qniyEAvQGrexwAVHhtUkAKhLZ5ghc9XjkJ0oFUeA/Vznd4k= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549682121785.0836104418166; Wed, 12 Aug 2026 08:48:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7c-0005oT-Cj; Wed, 12 Aug 2026 11:44:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7O-0005Id-28 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:50 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7L-0000TT-Lm for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:49 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbmBS3971645 for ; Wed, 12 Aug 2026 15:43:36 GMT Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0jgrjjek-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:36 +0000 (GMT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-38e22137fb3so1549140a91.0 for ; Wed, 12 Aug 2026 08:43:36 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= r4vE9njv5VOj8J3Spwon7COYaOlw8NYjgg8VtUPNFps=; b=pP1z4S1qVxCHXzL8 LPLPsMdY6DGzJbV+NNHRohrB6k+Prl9+foFRtxNsPfKLwMHoqpLkpxUvlRp34bAE DYRceD1IEtT92JfTOq/43yaZ4YFRPzfbjoPxBvgzfZ10oPuMAVYsebb63fReygBN uc4aaNGTt4fY7Iz11XsencXUDJ6UTiG1oC8F+rQPB5EvTQb3HEoAHlSbs7hnagRD pcMGFDoPFDEb7UWMlGyBqVN1wvgR601d5PoJCE1y5ku1olrJ1Mu5vOmElNv43GHx akoTwrYlfD9gn0FV6/Pd2+6gOnqc7j1PSKLY1w1pfh1DF/r1vgOSGeLuXJWrAMmA nuLRUw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549415; x=1787154215; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=r4vE9njv5VOj8J3Spwon7COYaOlw8NYjgg8VtUPNFps=; b=J2zRW9UIpK5cuKjREk97WaO8N5oumr4i8+Z1PUyl/Kuju7f2Jpzp/dLkEZnv2SPXc7 rLItEA3nZbw/rmyeMYGaTpqjB4wGPbRaUCwzKWpdP9SPMfQDozvIQOlpLaVJVxVMN38t yquKvazvIptn0KB+RNbI69/2/APYDz67wlrRVKslWD4S1zFArDIYp+HvkSz/P0p+dT+4 zj5tNjZ7FO+gwfKVKUDZHiYreE6WoVaT6u8rURgKFvQywCFGKfmf0PGOHTMpRVKIAMqA TO5SzjRCTTaJmRjgEGkBvFQG2caiMsQpwh3+XymPUSQbAu9QuNwb+ownnXBdhRR7wapf GSfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549415; x=1787154215; h=content-transfer-encoding:content-type: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 :content-type; bh=r4vE9njv5VOj8J3Spwon7COYaOlw8NYjgg8VtUPNFps=; b=N6JNEPEBzhnjdtMSErvWFu/66gtkFtket4W83iDpp/N9bAU7+FueuNngdYCfO7hQey 7jBDP2NtCuyjv5Jd7wBrBslcPJQO0x4NA2bc3e6KMIgIYLoyzu7f/5OHy+P9UjVhV7Mt eDtLAvFVgonwAWSLs7lNmtVSqkdEuXsJJ1vhmykf4thYdjLs8n5FBRvB/QAoBvBq1j+n 68qz6AIpxR8/17VZUh2DR+wpneoQsHXudQs5N4bolOd0YwphoAqb1OKYTL4ouKcHjYS7 XJKMXxoMq2u3mkDRUm2o3gYRhbwNxi4UFoMoV69gLf3TlcSyQdipI9AbtsJ+OwNy3NK1 D/9Q== X-Gm-Message-State: AOJu0Yy2uy0SqxPmPBYl+mkojM3mMSR759zca6jpx97hcQ3Pn4+XGxHJ nmVm9XAiACJzMvJ3gBINpYXMR2lXHqUEEyKl6meHoaQECTNoKeKn5Z+XfprSVqtaUL1sQv6wR2z ZZ4U0Mzj6atwbsNr1CKcPmi7x+rKNIBQQze7imkFP1caV8yxBbAGsRHbupo859rYadg== X-Gm-Gg: AR+sD139x3Y6Z6gU6cADUGxxW0IqvNtkkaqutp1wgtyuKNV6wK8NEu0gI+vbUzrSo/O abrcHJcBj5PlANku14X86BzpqARq6jQwn3P3vETuktx0UBszMvtZRHZ5ueK+TcbqbhVcO7Qkyao 4cl7S5/MSaye8oNDkeUMKu9j9n12vxeZbrqbUzkq6zuRDJXhM3o9M5muKx1Ye4OMIUGIrjTzL7U Pngu7Ld9QKrapM1nMTuZsP0nnJ4dKAzH4EAJebGOVg9teI5K0LDJbYEBcmxnZsdnni18G16uTH6 lDDk8bU502e7IzMHw2latgLUcWWUdSDCM1YPgex75WAhCfte203EoyIqZn5LKMOSOefTrpXPWwI wZdc6LOKsv9OdWQKIzp/uNOugAp7ef5oGA3c/XhcVANzkDGwB X-Received: by 2002:a17:90b:4d0a:b0:38e:6aa7:68ad with SMTP id 98e67ed59e1d1-39301408d9fmr5305936a91.5.1786549415148; Wed, 12 Aug 2026 08:43:35 -0700 (PDT) X-Received: by 2002:a17:90b:4d0a:b0:38e:6aa7:68ad with SMTP id 98e67ed59e1d1-39301408d9fmr5305896a91.5.1786549414636; Wed, 12 Aug 2026 08:43:34 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , Pierrick Bouvier Subject: [PULL v2 37/41] tests/hexagon: add tests for v68 HVX IEEE float arithmetics Date: Wed, 12 Aug 2026 08:42:16 -0700 Message-Id: <20260812154220.1029828-38-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX4Dx+QAjctOa2 nng7HUMgpMMeex/qiha0hK4yV44SPUG5yeurTDCwFYcgh1S3WY4FexIJv2eM3QywWN2OpL5tAgJ 35UJsbFwbJR8bMsD5jF8pail3nFzazW7K0nbvqGjapB5I8PbSlxzYoVeNHLBYcqqDL7bxH1EgC+ 23u1fkEk4m6oGluGKxxV+Qo5DF7I33b3x2mLBjyf+LM7NaoEo2o8nJLiDeuanvAoeDnNz+TeIv0 88923tjVjLA4XoZuNxY3xDRrTvPzQWTPSyi9fFDzhXo+PtKX+iDIKumx4xvgxAGBhoTYCeFOzNM VcvQQLqGKEtWeeChXvRkOCpN720uwp11BeJzSqQ2lw26WWS/vI2MPIAoRF14M46RP7CRaXXjdfq 9CtrLmJzuOwROkuited1lm8I616IWXzsNHxio+1D8hAA99LT/UkhRtK+jJoHqz9GbHe+LF50LB+ 89IrQufuwFiViT/mhkA== X-Proofpoint-ORIG-GUID: 2nKEjn1Kj-gNxUQcbln8nubxjF7s9aAZ X-Authority-Analysis: v=2.4 cv=TNJ1jVla c=1 sm=1 tr=0 ts=6a7c94a8 cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=sseQNg6DTrydJvRsLEYA:9 a=QEXdDO2ut3YA:10 a=mQ_c8vxmzFEMiUWkPHU9:22 X-Proofpoint-GUID: 2nKEjn1Kj-gNxUQcbln8nubxjF7s9aAZ X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX8s2IHOJKxYUq 52VCRiojq969SgqGOmH/LbrvegawC26AUqyneBvOu1GW+CAfVMUF66T8GDPUtEqe0iJvMvRrEj2 IbMUlyhS7qmM/cM/TCj3IBC9PDDDN7Q= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 phishscore=0 impostorscore=0 adultscore=0 suspectscore=0 bulkscore=0 spamscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549683285158500 From: Matheus Tavares Bernardino Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/791f122bfd744a77177608b524d852fe82= 6cd595.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- tests/tcg/hexagon/hex_test.h | 4 + tests/tcg/hexagon/hvx_misc.h | 41 ++++++++ tests/tcg/hexagon/fp_hvx.c | 155 ++++++++++++++++++++++++++++ tests/tcg/hexagon/fp_hvx_disabled.c | 57 ++++++++++ tests/tcg/hexagon/Makefile.target | 8 ++ 5 files changed, 265 insertions(+) create mode 100644 tests/tcg/hexagon/fp_hvx.c create mode 100644 tests/tcg/hexagon/fp_hvx_disabled.c diff --git a/tests/tcg/hexagon/hex_test.h b/tests/tcg/hexagon/hex_test.h index cfed06a58b4..e7a6644d416 100644 --- a/tests/tcg/hexagon/hex_test.h +++ b/tests/tcg/hexagon/hex_test.h @@ -19,6 +19,8 @@ #ifndef HEX_TEST_H #define HEX_TEST_H =20 +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + static inline void __check32(int line, uint32_t val, uint32_t expect) { if (val !=3D expect) { @@ -110,6 +112,7 @@ static inline void __check64_ne(int line, uint64_t val,= uint64_t expect) =20 /* Some useful floating point values */ const uint32_t SF_INF =3D 0x7f800000; +const uint32_t SF_INF_neg =3D 0xff800000; const uint32_t SF_QNaN =3D 0x7fc00000; const uint32_t SF_QNaN_special =3D 0x7f800001; const uint32_t SF_SNaN =3D 0x7fb00000; @@ -128,6 +131,7 @@ const uint32_t SF_large_pos =3D 0x5afa572e; const uint32_t SF_any =3D 0x3f800000; const uint32_t SF_denorm =3D 0x00000001; const uint32_t SF_random =3D 0x346001d6; +const uint32_t SF_neg_two =3D 0xc0000000; =20 const uint64_t DF_QNaN =3D 0x7ff8000000000000ULL; const uint64_t DF_SNaN =3D 0x7ff7000000000000ULL; diff --git a/tests/tcg/hexagon/hvx_misc.h b/tests/tcg/hexagon/hvx_misc.h index 2e868340fd2..0330cb289dd 100644 --- a/tests/tcg/hexagon/hvx_misc.h +++ b/tests/tcg/hexagon/hvx_misc.h @@ -18,6 +18,8 @@ #ifndef HVX_MISC_H #define HVX_MISC_H =20 +#include "hex_test.h" + static inline void check(int line, int i, int j, uint64_t result, uint64_t expect) { @@ -34,8 +36,10 @@ typedef union { uint64_t ud[MAX_VEC_SIZE_BYTES / 8]; int64_t d[MAX_VEC_SIZE_BYTES / 8]; uint32_t uw[MAX_VEC_SIZE_BYTES / 4]; + uint32_t sf[MAX_VEC_SIZE_BYTES / 4]; /* convenience alias */ int32_t w[MAX_VEC_SIZE_BYTES / 4]; uint16_t uh[MAX_VEC_SIZE_BYTES / 2]; + uint16_t hf[MAX_VEC_SIZE_BYTES / 2]; /* convenience alias */ int16_t h[MAX_VEC_SIZE_BYTES / 2]; uint8_t ub[MAX_VEC_SIZE_BYTES / 1]; int8_t b[MAX_VEC_SIZE_BYTES / 1]; @@ -63,7 +67,9 @@ static inline void check_output_##FIELD(int line, size_t = num_vectors) \ =20 CHECK_OUTPUT_FUNC(d, 8) CHECK_OUTPUT_FUNC(w, 4) +CHECK_OUTPUT_FUNC(sf, 4) CHECK_OUTPUT_FUNC(h, 2) +CHECK_OUTPUT_FUNC(hf, 2) CHECK_OUTPUT_FUNC(b, 1) =20 static inline void init_buffers(void) @@ -81,6 +87,33 @@ static inline void init_buffers(void) } } =20 +static const uint32_t FP_VALUES[] =3D { + SF_INF, SF_INF_neg, SF_QNaN, SF_QNaN_special, SF_SNaN, SF_QNaN_neg, + SF_SNaN_neg, SF_HEX_NaN, SF_zero, SF_zero_neg, SF_one, SF_one_recip, + SF_one_invsqrta, SF_two, SF_four, SF_small_neg, SF_large_pos, SF_any, + SF_denorm, SF_random, SF_neg_two, +}; +#define FP_VALUES_MAX ARRAY_SIZE(FP_VALUES) + +static inline void init_buffers_fp(void) +{ + _Static_assert(BUFSIZE * (MAX_VEC_SIZE_BYTES / 4) > + FP_VALUES_MAX * FP_VALUES_MAX, + "test arrays can't fit all FP_VALUES combinations"); + int counter1 =3D 0, counter2 =3D 0; + for (int i =3D 0; i < BUFSIZE; i++) { + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / 4; j++) { + buffer0[i].sf[j] =3D FP_VALUES[counter1]; + buffer1[i].sf[j] =3D FP_VALUES[counter2]; + counter2++; + if (counter2 =3D=3D FP_VALUES_MAX) { + counter2 =3D 0; + counter1 =3D (counter1 + 1) % FP_VALUES_MAX; + } + } + } +} + #define VEC_OP1(ASM, EL, IN, OUT) \ asm("v2 =3D vmem(%0 + #0)\n\t" \ "v2" #EL " =3D " #ASM "(v2" #EL ")\n\t" \ @@ -175,4 +208,12 @@ static inline void test_##NAME(bool invert) \ check_output_b(__LINE__, BUFSIZE); \ } =20 +#define float_sf(x) ({ typeof(x) _x =3D (x); *((float *)&(_x)); }) +#define float_hf(x) ({ typeof(x) _x =3D (x); *((_Float16 *) &(_x)); }) +#define raw_sf(x) ({ typeof(x) _x =3D (x); *((uint32_t *)&(_x)); }) +#define raw_hf(x) ({ typeof(x) _x =3D (x); *((uint16_t *)&(_x)); }) +#define float_hf_to_sf(x) ((float)x) +#define bytes_hf 2 +#define bytes_sf 4 + #endif diff --git a/tests/tcg/hexagon/fp_hvx.c b/tests/tcg/hexagon/fp_hvx.c new file mode 100644 index 00000000000..a309654ed78 --- /dev/null +++ b/tests/tcg/hexagon/fp_hvx.c @@ -0,0 +1,155 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include +#include +#include + +int err; +#include "hvx_misc.h" + +#if __HEXAGON_ARCH__ > 75 +#error "After v75, compiler will replace some FP HVX instructions." +#endif + +/*************************************************************************= ***** + * NAN handling + *************************************************************************= ****/ + +#define isnan(X) \ + (sizeof(X) =3D=3D bytes_hf ? ((raw_hf(X) & ~0x8000) > 0x7c00) : \ + ((raw_sf(X) & ~(1 << 31)) > 0x7f800000UL)) + +#define CHECK_NAN(A, DEF_NAN) (isnan(A) ? DEF_NAN : (A)) +#define NAN_SF float_sf(0x7FFFFFFF) +#define NAN_HF float_hf(0x7FFF) + +/*************************************************************************= ***** + * Binary operations + *************************************************************************= ****/ + +#define DEF_TEST_OP_2(vop, op, type_res, type_arg) \ + static void test_##vop##_##type_res##_##type_arg(void) \ + { \ + memset(expect, 0xff, sizeof(expect)); \ + memset(output, 0xff, sizeof(output)); \ + for (int i =3D 0; i < BUFSIZE; i++) { \ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[i]; \ + HVX_Vector hvx_buffer0 =3D *(HVX_Vector *)&buffer0[i]; \ + HVX_Vector hvx_buffer1 =3D *(HVX_Vector *)&buffer1[i]; \ + *hvx_output =3D \ + Q6_V##type_res##_##vop##_V##type_arg##V##type_arg(hvx_buff= er0, \ + hvx_buff= er1); \ + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / bytes_##type_res; j= ++) { \ + expect[i].type_res[j] =3D \ + raw_##type_res(op(float_##type_arg(buffer0[i].type_arg= [j]), \ + float_##type_arg(buffer1[i].type_arg= [j]))); \ + } \ + } \ + check_output_##type_res(__LINE__, BUFSIZE); \ + } + +#define SUM(X, Y, DEF_NAN) CHECK_NAN((X) + (Y), DEF_NAN) +#define SUB(X, Y, DEF_NAN) CHECK_NAN((X) - (Y), DEF_NAN) +#define MULT(X, Y, DEF_NAN) CHECK_NAN((X) * (Y), DEF_NAN) + +#define SUM_SF(X, Y) SUM(X, Y, NAN_SF) +#define SUM_HF(X, Y) SUM(X, Y, NAN_HF) +#define SUB_SF(X, Y) SUB(X, Y, NAN_SF) +#define SUB_HF(X, Y) SUB(X, Y, NAN_HF) +#define MULT_SF(X, Y) MULT(X, Y, NAN_SF) +#define MULT_HF(X, Y) MULT(X, Y, NAN_HF) + +DEF_TEST_OP_2(vadd, SUM_SF, sf, sf); +DEF_TEST_OP_2(vadd, SUM_HF, hf, hf); +DEF_TEST_OP_2(vsub, SUB_SF, sf, sf); +DEF_TEST_OP_2(vsub, SUB_HF, hf, hf); +DEF_TEST_OP_2(vmpy, MULT_SF, sf, sf); +DEF_TEST_OP_2(vmpy, MULT_HF, hf, hf); + +/*************************************************************************= ***** + * Other tests + *************************************************************************= ****/ + +static void test_vdmpy_sf_hf(bool acc) +{ + memset(expect, 0xff, sizeof(expect)); + + for (int i =3D 0; i < BUFSIZE; i++) { + HVX_Vector hvx_buffer0 =3D *(HVX_Vector *)&buffer0[i]; + HVX_Vector hvx_buffer1 =3D *(HVX_Vector *)&buffer1[i]; + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[i]; + + uint32_t PREFIL_VAL =3D 0x111222; + *hvx_output =3D Q6_V_vsplat_R(PREFIL_VAL); + + if (!acc) { + *hvx_output =3D Q6_Vsf_vdmpy_VhfVhf(hvx_buffer0, hvx_buffer1); + } else { + *hvx_output =3D Q6_Vsf_vdmpyacc_VsfVhfVhf(*hvx_output, hvx_buf= fer0, + hvx_buffer1); + } + + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / 4; j++) { + float a1 =3D float_hf_to_sf(float_hf(buffer0[i].hf[2 * j + 1])= ); + float a2 =3D float_hf_to_sf(float_hf(buffer0[i].hf[2 * j])); + float a3 =3D float_hf_to_sf(float_hf(buffer1[i].hf[2 * j + 1])= ); + float a4 =3D float_hf_to_sf(float_hf(buffer1[i].hf[2 * j])); + /* + * Note, IEEE FP specifies +0.0 + -0.0 =3D=3D +0.0. So we use = -0.0 in + * the default case to preserve the zero sign. + */ + float prev =3D acc ? float_sf(PREFIL_VAL) : -0.0; + expect[i].sf[j] =3D raw_sf(CHECK_NAN((a1 * a3) + (a2 * a4) + p= rev, NAN_SF)); + } + } + check_output_sf(__LINE__, BUFSIZE); +} + +static void test_new(void) +{ + asm volatile("r0 =3D #%2\n" + "v0 =3D vsplat(r0)\n" + "vmem(%1 + #0) =3D v0\n" + "r1 =3D #%3\n" + "v1 =3D vsplat(r1)\n" + "v2 =3D vsplat(r1)\n" + "{\n" + " v0.sf =3D vadd(v1.sf, v2.sf)\n" + " vmem(%0 + #0) =3D v0.new\n" + "}\n" + : + : "r"(output), "r"(expect), "i"(SF_two), "i"(SF_one) + : "r0", "r1", "v0", "v1", "v2", "memory"); + check_output_w(__LINE__, 1); +} + +int main(void) +{ + init_buffers_fp(); + + /* add/sub */ + test_vadd_sf_sf(); + test_vadd_hf_hf(); + test_vsub_sf_sf(); + test_vsub_hf_hf(); + + /* multiply */ + test_vmpy_sf_sf(); + test_vmpy_hf_hf(); + + /* dot product */ + test_vdmpy_sf_hf(false); + test_vdmpy_sf_hf(true); + + test_new(); + + puts(err ? "FAIL" : "PASS"); + return err ? 1 : 0; +} diff --git a/tests/tcg/hexagon/fp_hvx_disabled.c b/tests/tcg/hexagon/fp_hvx= _disabled.c new file mode 100644 index 00000000000..388a42e2b79 --- /dev/null +++ b/tests/tcg/hexagon/fp_hvx_disabled.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include + +int err; +#include "hvx_misc.h" + +static void test_disabled(void) +{ + memset(output, 0xAA, sizeof(output)); + memset(expect, 0, sizeof(expect)); + asm volatile("r0 =3D #0xff\n" + "v0 =3D vsplat(r0)\n" + "r1 =3D #0x1\n" + "v1 =3D vsplat(r1)\n" + "v2 =3D vsplat(r1)\n" + "v0.sf =3D vadd(v1.sf, v2.sf)\n" + "vmem(%0 + #0) =3D v0\n" + : + : "r"(output) + : "r0", "r1", "v0", "v1", "v2", "memory"); + check_output_w(__LINE__, 1); +} + +static void test_disabled_with_new(void) +{ + memset(output, 0xAA, sizeof(output)); + memset(expect, 0, sizeof(expect)); + asm volatile("r0 =3D #0xff\n" + "v0 =3D vsplat(r0)\n" + "r1 =3D #0x1\n" + "v1 =3D vsplat(r1)\n" + "v2 =3D vsplat(r1)\n" + "{\n" + " v0.sf =3D vadd(v1.sf, v2.sf)\n" + " vmem(%0 + #0) =3D v0.new\n" + "}\n" + : + : "r"(output) + : "r0", "r1", "v0", "v1", "v2", "memory"); + check_output_w(__LINE__, 1); +} + +int main(void) +{ + test_disabled(); + test_disabled_with_new(); + puts(err ? "FAIL" : "PASS"); + return err ? 1 : 0; +} diff --git a/tests/tcg/hexagon/Makefile.target b/tests/tcg/hexagon/Makefile= .target index 80e56f7d055..2a5958711bd 100644 --- a/tests/tcg/hexagon/Makefile.target +++ b/tests/tcg/hexagon/Makefile.target @@ -50,6 +50,8 @@ HEX_TESTS +=3D vector_add_int HEX_TESTS +=3D scatter_gather HEX_TESTS +=3D hvx_misc HEX_TESTS +=3D hvx_histogram +HEX_TESTS +=3D fp_hvx +HEX_TESTS +=3D fp_hvx_disabled HEX_TESTS +=3D invalid-slots HEX_TESTS +=3D valid-slots HEX_TESTS +=3D invalid-encoding @@ -136,6 +138,12 @@ v68_hvx: CFLAGS +=3D -mhvx -Wno-unused-function v69_hvx: v69_hvx.c hvx_misc.h v69_hvx: CFLAGS +=3D -mhvx -Wno-unused-function v73_scalar: CFLAGS +=3D -Wno-unused-function +fp_hvx: fp_hvx.c hvx_misc.h hex_test.h +fp_hvx: CFLAGS +=3D -mhvx -mhvx-ieee-fp +fp_hvx_disabled: fp_hvx_disabled.c hvx_misc.h hex_test.h +fp_hvx_disabled: CFLAGS +=3D -mhvx -mhvx-ieee-fp + +run-fp_hvx_disabled: QEMU_OPTS +=3D -cpu v73,ieee-fp=3Dfalse =20 hvx_histogram: hvx_histogram.c hvx_histogram_row.S $(CC) $(CFLAGS) $(CROSS_CC_GUEST_CFLAGS) $^ -o $@ $(LDFLAGS) --=20 2.34.1 From nobody Wed Aug 26 07:25:09 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549628; cv=none; d=zohomail.com; s=zohoarc; b=YOOsI785Pwc0fc1X7EC4sQwUB+P3kkfbVoRU7kTxBsqgfh8imBMYzKlWW/2tp6blLP7Rv34MPyrHvy9oRyYVQkYOeZtQ6GsBp73KxG69+mUWAdAXmBNJ3GMiuJbLOpAYMdNR2ptY7nYRLHTZ0/9t1O12PMw3naUW9W+kn0yTGz8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549628; 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=NGriTnLoz2RElF9KQ1Lq7rPTXvqV1eVC9zv9DU0v1dY=; b=OBGHINf7nBOfU+qDw6nI486K2Rrn2pl6cq3CBsDv9wLguVUJBQvipKsEHyn+vz43Wj+InTr1BehdK632TNMoEMBD3BGeuedIBkGR3nkJeJunMgoWY3btX6ffcWIL5I7w1wnT777XH5Xzua7dGTO8AT+UgthLk5j5jpIV4+PZcDU= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549628953647.6638742419552; Wed, 12 Aug 2026 08:47:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7U-0005gP-Au; Wed, 12 Aug 2026 11:43:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7O-0005In-BG for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:50 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7M-0000Td-LD for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:50 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDc5cl3875922 for ; Wed, 12 Aug 2026 15:43:37 GMT Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hj1jsvv-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:37 +0000 (GMT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-38ce7fabf76so1635122a91.2 for ; Wed, 12 Aug 2026 08:43:37 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= NGriTnLoz2RElF9KQ1Lq7rPTXvqV1eVC9zv9DU0v1dY=; b=Dx7RIuzAPwAlPMeD 3m5AkWoOGb28slYi5QPa0/R4tjouz3w7yo6RLUbRdyG/0HwbKDxTGtkx7sBtq85M VHGX9qL0a7Zcf/i/hVzeXmpAw6lXp+/5xzoWC6yYXyD3uZGvsOT1egI1wUZ0DB+b l1q+p2b7N/ucsYAofiU38Cqj7u12ytDx2wqac9vwxEhUBXSP5X429jd9CLPhA94C jmNIGNixMAXVHSp42O5YI4mjzPdBR+jKDvrYzibaQd0g6QEcw3WGZG5L0VjBPFVn OzX7rkz1MMSyXOVb+Cza7M01dGqE24f+gLaXQ2FIPpxnTdIzJLWERr1Fb8LVk0DQ kVOSbg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549417; x=1787154217; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=NGriTnLoz2RElF9KQ1Lq7rPTXvqV1eVC9zv9DU0v1dY=; b=BIbOktY3K6gcY5VrMB6QnPliBsYmlkIS7vK/3DB2utt2TfFGjHU+OptA+nrZFTBhP4 Ml2MGPIs5HZn3oFcjXpq+LVM/aQJuj5a8Mt0TqXqiJcDGXViAREuSxxJmSK/RncSbbsK FKTsRT9eqLnMvlz3bDxOYQfGAeTiXvqx8FEstHeFoEhopITUZU0iXRMAYGlfopW+mPpw b6xX/uw6TbUvLuGY6eZWOzgV0d5LNHauUgUSAlkgzcJzPv53w2DE8ufkGketVgWlbkUW SaofPT0aFNnaAwL+x0tSpVLVSwQfuCK3cPBLYZHuMDy0awU6SH0noVV8OOoSGmYpL26d rBWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549417; x=1787154217; h=content-transfer-encoding:content-type: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 :content-type; bh=NGriTnLoz2RElF9KQ1Lq7rPTXvqV1eVC9zv9DU0v1dY=; b=pxHyDKH0YPrx8fq9PJHHlEi4j046GfbclNR1UelSYX06SUIcxgdoMXqraal2tBDcYw ckS7DKQNnl9HEnRhir2UJ+I7mfMyX3GF/N6viU0Z2dxgRgJtgViZVf8C9+QqmCISgGCW 8wJbl3jrdORnJGK4rI1RAuhDa6Iy5zjdafxdrYzVgME9jvt4KpaTtN3ukIMQ69AHAgRi 0QURAmShdNa9e7RAAy2SEeKalsdj3uSh0sThLb443wMINKDfLYH69kG2aqTpZAR4Ho5M 41ciG6nrG4KEYZRkHW+/xd1rIG1MRGYdp9KAJoBLV0COu4JMngulyLEhgmVIF3U0YaON upkw== X-Gm-Message-State: AOJu0YxEdZD6jYAETECm/3jOj8Y/v+NecOYQe4mIQEWHM2fRihY2orPL AHxhymV7s1cCD9AkMeuH2qv7BajAJtL736qXFJB639j+yMLg31W4TM2N11E1Pl9SDQ5c475bG5E xTqEceLKx/9lEJMD+KX5EKBGzIq5LhgTVCqxqYlvRquEJGRVbnYPX3bdBLR/Z2iRzTg== X-Gm-Gg: AR+sD13u25a0Th++q2SP4bFB3n1zucbeSbHbUmJQsuuWcKuQIrV9V5EgBFfCqA8TXPT ZiADb1YAN8jWRh0DNSccQr6QdqLPwLP1guW7BO1BQ4Mw3Kkiwo6c1O9m1VbvzkuHBE9GBONsYs3 slafvryhEjRh8DoZh1Su6nyDyK/320Kh19QDqd8036rAY/flWFx7YjmL8ZJEATYgpN/3jztkHH7 Dr277wdqYIrpCQ7L8lCecZtFdXsB6TfkT38lIRudPQ7AJRuKUqLuXGduOT+08raYkSNQFPiMdB2 EzvxQejVaWFVhgUqas+L9/zrrzzhr0IWCJUM/rsDUm98AnqYLW+8GlmCux/Mf1uw2NbXQ4nRmK2 gtb8z1VkLLzuh4fscN634O9/XkPr8+CViHCAvU2AWFhuBjutf X-Received: by 2002:a17:90b:164c:b0:38e:740f:9764 with SMTP id 98e67ed59e1d1-393016a76cdmr6819837a91.18.1786549416665; Wed, 12 Aug 2026 08:43:36 -0700 (PDT) X-Received: by 2002:a17:90b:164c:b0:38e:740f:9764 with SMTP id 98e67ed59e1d1-393016a76cdmr6819788a91.18.1786549416181; Wed, 12 Aug 2026 08:43:36 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , Pierrick Bouvier Subject: [PULL v2 38/41] tests/hexagon: add tests for v68 HVX IEEE float min/max Date: Wed, 12 Aug 2026 08:42:17 -0700 Message-Id: <20260812154220.1029828-39-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: PF5JlROWzR4XZ8x3O4ukAd-2SXjjOrZI X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX32gf/Szai8uh ftIlapff+6n5bnOSYYKgEY5i1qq3ntARIGT2ECvYgrlrHFopIG+PPK97RrsEMRto8Vx1x7WWJ4E VwH+EX0Rw7tgb4JsBqx8s5HEiERnu6ap/RzVAMhPOX+e5eVbTIprFNULKbWOeYQ35QZrYuOK5gy SRTzRSQP01m1TEknXb5HzS2L/3HX2bIZJZow9WNHt/XyBEUmtM0icPsWY2CjiRil2HTSWDEbrkJ 48hTQHxbp7NeREdl/1J8g3mVFrDE56/jW7ipA1jZAMOEP+5gz2udwSGKnCNpscTeXNQWw7B8zIt c0UqHEFJBYL2ce1/kuKFBCp2AgmSXGtUJz8E9gWeQWO6P7xQhPANuPgmDbjLHMqcCGf91S7iMfQ JNnHCIdK8YM/8m9gRZ7xn7GidNnm0UPRdoHSTgXI3Ib0e2Sd/XXUitEg+h7XG6hb+H0a0y0wfZQ wZkhRdzakiSLeXrf36Q== X-Authority-Analysis: v=2.4 cv=K6ES2SWI c=1 sm=1 tr=0 ts=6a7c94a9 cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=kx3085Z4g_GOeJDqwkIA:9 a=QEXdDO2ut3YA:10 a=mQ_c8vxmzFEMiUWkPHU9:22 X-Proofpoint-GUID: PF5JlROWzR4XZ8x3O4ukAd-2SXjjOrZI X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX/WfFh6HidesT gzxb8rcvvgU1NQ/q122aH7J3ZnX9VZOJEiJXpLhHeNZZo5mEPc+xpimhvSxrtwLuhD2MPgS9ebm o1pZXoP6DqhiMj/nL0DijczEp2fYkIc= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 adultscore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549630790158500 From: Matheus Tavares Bernardino Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/7fdbc12ed4c62a16068c380a85ee235605= 1e61ea.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- tests/tcg/hexagon/fp_hvx.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/tcg/hexagon/fp_hvx.c b/tests/tcg/hexagon/fp_hvx.c index a309654ed78..dee0781bd72 100644 --- a/tests/tcg/hexagon/fp_hvx.c +++ b/tests/tcg/hexagon/fp_hvx.c @@ -73,6 +73,30 @@ DEF_TEST_OP_2(vsub, SUB_HF, hf, hf); DEF_TEST_OP_2(vmpy, MULT_SF, sf, sf); DEF_TEST_OP_2(vmpy, MULT_HF, hf, hf); =20 +#define signbit_fp(X) \ + (sizeof(X) =3D=3D bytes_hf ? ((raw_hf(X) & 0x8000) !=3D 0) : \ + ((raw_sf(X) & 0x80000000) !=3D 0)) + +#define STD_MIN(X, Y) ((X) < (Y) ? (X) : (Y)) +#define STD_MAX(X, Y) ((X) > (Y) ? (X) : (Y)) + +#define MIN(X, Y, DEF_NAN) \ + ((isnan(X) || isnan(Y)) ? DEF_NAN : \ + ((X) !=3D (Y)) ? STD_MIN(X, Y) : (signbit_fp(X) ? (X) : (Y))) /* -0 <= +0 */ +#define MAX(X, Y, DEF_NAN) \ + ((isnan(X) || isnan(Y)) ? DEF_NAN : \ + ((X) !=3D (Y)) ? STD_MAX(X, Y) : (signbit_fp(X) ? (Y) : (X))) /* -0 <= +0 */ + +#define MIN_HF(X, Y) MIN(X, Y, NAN_HF) +#define MAX_HF(X, Y) MAX(X, Y, NAN_HF) +#define MIN_SF(X, Y) MIN(X, Y, NAN_SF) +#define MAX_SF(X, Y) MAX(X, Y, NAN_SF) + +DEF_TEST_OP_2(vfmin, MIN_SF, sf, sf); +DEF_TEST_OP_2(vfmax, MAX_SF, sf, sf); +DEF_TEST_OP_2(vfmin, MIN_HF, hf, hf); +DEF_TEST_OP_2(vfmax, MAX_HF, hf, hf); + /*************************************************************************= ***** * Other tests *************************************************************************= ****/ @@ -150,6 +174,12 @@ int main(void) =20 test_new(); =20 + /* min/max */ + test_vfmin_sf_sf(); + test_vfmin_hf_hf(); + test_vfmax_sf_sf(); + test_vfmax_hf_hf(); + puts(err ? "FAIL" : "PASS"); return err ? 1 : 0; } --=20 2.34.1 From nobody Wed Aug 26 07:25:09 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786549637; cv=none; d=zohomail.com; s=zohoarc; b=GGxhg2p8dPIc0MaAJ2f8sovo9CFLQphwUF7L81O3J/r74Kh07H5PbRGayqapG4Bq98TMLTbIlQp+DoYBF3cF9p/vnPRW1IpCMNrU26U8LrtSqwlHSXq+EEiKx6vwbeMuQYzak6QvCMdLunA+FSCB/dpiQm+6JHzQ+djkJxiYO0s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786549637; 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=2WTOMfuP4/EU2u/giN6RzuPxyfgSGr8jUiOBlC/ujX8=; b=GIunFA2xMHcxV7eAF/CWRe8AxeMEEnbqkXo+xozog116GoJExHLOlefi8jrrLAYrLdrDxHoCeVh5tOxQ7iTnTy6swa11RAlnJFZ4YFh1/qAQDFmyQGj6mfAPBlSVDPmRIkCqkZ8l3DH8n64SZBacMdUvMtRvgV/HM+tDevArpFM= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786549637517572.0442971828509; Wed, 12 Aug 2026 08:47:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuB7U-0005gY-BH; Wed, 12 Aug 2026 11:43:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7Q-0005RD-J0 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:52 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuB7O-0000U2-3d for qemu-devel@nongnu.org; Wed, 12 Aug 2026 11:43:52 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbvHP2728922 for ; Wed, 12 Aug 2026 15:43:39 GMT Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hfw2rm6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 15:43:39 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-38e475f83a2so1728607a91.1 for ; Wed, 12 Aug 2026 08:43:38 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31da7bf64b5sm8121190eec.10.2026.08.12.08.43.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 08:43:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 2WTOMfuP4/EU2u/giN6RzuPxyfgSGr8jUiOBlC/ujX8=; b=Bjl4HeklhrWI+skX e85t+6k5l3nMh9iYZsI55DmVhIKTzO7ip9Uttu6SJOrsDpLt6tRXAkIgBlHynBIe nzXv6YG4XWBlBC0ExJre56VFA4KqqFGwN6hrnwYIwtnOnn794gfvVJhQ2lyNYcWX 8QgMnAaRzrt8UmTPuYzO7REKZx86YRQUAa3qK9Gfn9F17Pbv6iV1KHBKV7Fjatmr u4VzAasSoU2HDVXvvUMaWD8FHm3YSjERWBfuDaQaVzg2Uv2XEsuCdKDg5t8C/W9Z xKW4AfVxI1f2//7dowKmoFm0jRcrXvBecR+nBnEO1/H24juGycQ5MRlh4RZ77iCM krUILQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786549418; x=1787154218; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=2WTOMfuP4/EU2u/giN6RzuPxyfgSGr8jUiOBlC/ujX8=; b=JuwXe52ZrHKhFawg/Ant3FBApwVmGV5LjWceh1+RdL/VzmRaNMqYdUGswdrDMAxOZS Yn+qg48DnUDu65ogqEiBtLBMEuxrcVJ/xmzrTSMCGbOhsID7VwWMgn7bnY612L6FGRqo UhXRSNVpRx8f66lRpsVTEva08TFtm4ItKv0PmwMV+nUoiCo2pzKfOrvS0qwx+xhbRVNz L5v/VKzmB95aLc/1FCRdHebDR6pMZNa2XYIXJz0fl0oLyR7a8qkdq/p5pAWmgGA6uccp Wb5UVGAYZIWY3o3V+SAp9qZ9eL4u7OpbkU3fA2cnOtfO7rRXNjBj7lmsKiopeCY7S83q z+0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786549418; x=1787154218; h=content-transfer-encoding:content-type: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 :content-type; bh=2WTOMfuP4/EU2u/giN6RzuPxyfgSGr8jUiOBlC/ujX8=; b=jYM3Qi/ExcOco5OrfO1AtpYLCTDwgjma+K5mmFIp7JOM/pLPvfqZBbhxGzeKTBo9/b /3AX2Yjn6R7Lnz/us99zdlmmqNehm8dCKZ6ybtJXWKEnN370b0wk0Sj+Mn5A0VdxqOEH NDxUJxMqtrMhdq6btQGfnTQCCrB2uT/W6RgvNc0BA2Dd3CK//p23zlZTzOb6WECSTrSq Bvxm8zzLkSucl5+CKcC7lQ1oyoERulY6eoBIGAa8yht5nL37wX3t0/Kjh8/mZOM8MKW9 t7eOudKixERW7FuosJxRSpQJbNuf9Md8FlcmI7omdFJGjwXMvgfJf3VMNjAkpmqrKEfy UaPg== X-Gm-Message-State: AOJu0YzM008b+h4g1Q+kFbGAEPqdoBAEwvCakw5ojO4uA4L9eIiv5KoY 4d+QqKbFSwomoplMWHX0JURSFnG4pXSFCOiMa6ixijWOuN7LGnuiWOPfvSNSFB3WJT4qII0xdPs QzEJJ2o9gyhmzBraN+fAtE0PH+XjYm7KeJDpUOIu9RoOeGhI2X2kdB7Hauz9UwtU5wQ== X-Gm-Gg: AR+sD12DdHIUJngZ/WlkE20/YXgKgEI8XG9v+he9CGTVknvGEfv3RX5tqBU1uO8D5N9 F+Tdi5nkRwUXU7209VNlsXFnYwNLaT5TZI7uRzZLH1pVKMqnBvgfc93xdY20tJ/XWz2fPEhiUjX 1AHamDvUtmIK/O6I85UZuUS3TOgqk1bNwcjnsgNuDqELCe91sB/Xp5+UbM5tWUyujuTbQ/N09gO 2tJnkNPx92UGVdYoq2ArpT7T+nIm6gIrFmMUZ2SyZ8Glv7//SJTBs3yuSn3ppsFYqtmnq6lPDyR lDCyxtoQsF9lLDxSonVPzN0zGvdbsYhynqH67L/Kxfm++MpxMiPhPI0ovAav0ts1PgWfgb3By7+ nBiTBTwo3DUqLdHcVP3Am2n9R2+VdTd7wbixz7cN3m6iwGUgf X-Received: by 2002:a17:90b:520a:b0:38e:8021:2ea9 with SMTP id 98e67ed59e1d1-393017b1e79mr7516098a91.19.1786549417959; Wed, 12 Aug 2026 08:43:37 -0700 (PDT) X-Received: by 2002:a17:90b:520a:b0:38e:8021:2ea9 with SMTP id 98e67ed59e1d1-393017b1e79mr7516060a91.19.1786549417518; Wed, 12 Aug 2026 08:43:37 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , Pierrick Bouvier Subject: [PULL v2 39/41] tests/hexagon: add tests for v68 HVX IEEE float conversions Date: Wed, 12 Aug 2026 08:42:18 -0700 Message-Id: <20260812154220.1029828-40-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX9f+o29isHegu KumnzckkVSj044inulW/g2j1K2WgrV/zXdgRMPCF+n1Ja4RjHR+awEhavr8+N6DmF3ghqD/FJ5s 0xQAI2eFXxJU/eEPngGUhQ0WfF6Q1+Q= X-Proofpoint-GUID: _gWHVKQdaXDmZN_U5KNjTKqcwVKkpZcI X-Authority-Analysis: v=2.4 cv=fpDsol4f c=1 sm=1 tr=0 ts=6a7c94ab cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=OZRFAO6Uk6ULta4fWVgA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-ORIG-GUID: _gWHVKQdaXDmZN_U5KNjTKqcwVKkpZcI X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyOCBTYWx0ZWRfX3wRLhm3P69aB Ljt275VJv1sWnrSj3g4jFe6IXUqevvBWuIqC1+lx/y5fH/ZCxpGmU8eIyE4SYz9car0wqwUI0kS WUx2kmPFIPeAxpGLcMLjxD4chqkU/03sRvGXH7tJpdFVcLzlhK1DzN51ut7NVq0PXLIh6V91oGD s9zgn4LZZV4Cn9ZaTICpQNE5vKD4mv4YqQsTYR7XKqDYH9+Vo6EkO1F5RbursaPprXPGN9QxIT5 S36C5T1nNK806Vo72NgucRfsXm+LYW2FQBf5CIaZsq7v1Gp4MTd26yUUkQqpmjZK1i+wWiy7LFs ztWJ5ETbqfFj44iodl3L6B68eL0vCvdCKsMAT9vNTOuAY2qLKf2MAbKgFnxE1jdKLgfJPuHWTX2 S8tZZ6/hZk3PMmVMQ3OK9tt3Pw4J5p04wiV3CSdMc81VhmVTGk79yF7WNX7c77Umd20yKnKR7eg uUzqO97k+ZnkqP35DMQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 spamscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 malwarescore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120128 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786549638964158500 From: Matheus Tavares Bernardino Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/ec6af07a285c47e5f6df343860bfedce5b= ed9421.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- tests/tcg/hexagon/hex_test.h | 14 +++ tests/tcg/hexagon/hvx_misc.h | 2 + tests/tcg/hexagon/fp_hvx_cvt.c | 188 ++++++++++++++++++++++++++++++ tests/tcg/hexagon/Makefile.target | 3 + 4 files changed, 207 insertions(+) create mode 100644 tests/tcg/hexagon/fp_hvx_cvt.c diff --git a/tests/tcg/hexagon/hex_test.h b/tests/tcg/hexagon/hex_test.h index e7a6644d416..d5da8ad240c 100644 --- a/tests/tcg/hexagon/hex_test.h +++ b/tests/tcg/hexagon/hex_test.h @@ -111,6 +111,20 @@ static inline void __check64_ne(int line, uint64_t val= , uint64_t expect) "usr =3D r2\n\t" =20 /* Some useful floating point values */ +const uint16_t HF_INF =3D 0x7c00; +const uint16_t HF_INF_neg =3D 0xfc00; +const uint16_t HF_QNaN =3D 0x7e00; +const uint16_t HF_SNaN =3D 0x7d00; +const uint16_t HF_QNaN_neg =3D 0xfe00; +const uint16_t HF_zero =3D 0x0000; +const uint16_t HF_zero_neg =3D 0x8000; +const uint16_t HF_one =3D 0x3c00; +const uint16_t HF_one_recip =3D 0x3bf9; +const uint16_t HF_two =3D 0x4000; +const uint16_t HF_small_neg =3D 0x8010; +const uint16_t HF_any =3D 0x3c00; +const uint16_t HF_neg_two =3D 0xc000; + const uint32_t SF_INF =3D 0x7f800000; const uint32_t SF_INF_neg =3D 0xff800000; const uint32_t SF_QNaN =3D 0x7fc00000; diff --git a/tests/tcg/hexagon/hvx_misc.h b/tests/tcg/hexagon/hvx_misc.h index 0330cb289dd..43de20da6ac 100644 --- a/tests/tcg/hexagon/hvx_misc.h +++ b/tests/tcg/hexagon/hvx_misc.h @@ -69,7 +69,9 @@ CHECK_OUTPUT_FUNC(d, 8) CHECK_OUTPUT_FUNC(w, 4) CHECK_OUTPUT_FUNC(sf, 4) CHECK_OUTPUT_FUNC(h, 2) +CHECK_OUTPUT_FUNC(uh, 2) CHECK_OUTPUT_FUNC(hf, 2) +CHECK_OUTPUT_FUNC(ub, 1) CHECK_OUTPUT_FUNC(b, 1) =20 static inline void init_buffers(void) diff --git a/tests/tcg/hexagon/fp_hvx_cvt.c b/tests/tcg/hexagon/fp_hvx_cvt.c new file mode 100644 index 00000000000..b08eba92da8 --- /dev/null +++ b/tests/tcg/hexagon/fp_hvx_cvt.c @@ -0,0 +1,188 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include +#include +#include + +#if __HEXAGON_ARCH__ > 75 +#error "After v75, compiler will replace some FP HVX instructions." +#endif + +int err; +#include "hvx_misc.h" +#include "hex_test.h" + +#define TEST_EXP(TO, FROM, VAL, EXP) do { \ + ((MMVector *)&buffer)->FROM[index] =3D VAL; \ + expect[0].TO[index] =3D EXP; \ + index++; \ +} while (0) + +#define DEF_TEST_CVT(TO, FROM, TESTS) \ + static void test_vcvt_##TO##_##FROM(void) \ + { \ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; \ + HVX_Vector buffer; \ + int index =3D 0; \ + memset(&buffer, 0, sizeof(buffer)); \ + memset(expect, 0, sizeof(expect)); \ + TESTS \ + * hvx_output =3D Q6_V##TO##_vcvt_V##FROM(buffer); \ + check_output_##TO(__LINE__, 1); \ + } + +DEF_TEST_CVT(uh, hf, { \ + TEST_EXP(uh, hf, HF_QNaN, UINT16_MAX); \ + TEST_EXP(uh, hf, HF_SNaN, UINT16_MAX); \ + TEST_EXP(uh, hf, HF_QNaN_neg, UINT16_MAX); \ + TEST_EXP(uh, hf, HF_INF, UINT16_MAX); \ + TEST_EXP(uh, hf, HF_INF_neg, 0); \ + TEST_EXP(uh, hf, HF_neg_two, 0); \ + TEST_EXP(uh, hf, HF_zero_neg, 0); \ + TEST_EXP(uh, hf, raw_hf((_Float16)2.1), 2); \ + TEST_EXP(uh, hf, HF_one_recip, 1); \ +}) + +DEF_TEST_CVT(h, hf, { \ + TEST_EXP(h, hf, HF_QNaN, INT16_MAX); \ + TEST_EXP(h, hf, HF_SNaN, INT16_MAX); \ + TEST_EXP(h, hf, HF_QNaN_neg, INT16_MAX); \ + TEST_EXP(h, hf, HF_INF, INT16_MAX); \ + TEST_EXP(h, hf, HF_INF_neg, INT16_MIN); \ + TEST_EXP(h, hf, HF_neg_two, -2); \ + TEST_EXP(h, hf, HF_zero_neg, 0); \ + TEST_EXP(h, hf, raw_hf((_Float16)2.1), 2); \ + TEST_EXP(h, hf, HF_one_recip, 1); \ +}) + +/* + * Some cvt operations take two vectors as input and perform the following: + * VdV.TO[4*i] =3D OP(VuV.FROM[2*i]); + * VdV.TO[4*i+1] =3D OP(VuV.FROM[2*i+1]); + * VdV.TO[4*i+2] =3D OP(VvV.FROM[2*i]); + * VdV.TO[4*i+3] =3D OP(VvV.FROM[2*i+1])) + * We use bf_index and index in a way that the tests are always done either + * using the first or third line of the above snippet. + */ +#define TEST_EXP_2(TO, FROM, VAL, EXP) do { \ + ((MMVector *)&buffers[bf_index])->FROM[2 * index] =3D VAL; \ + expect[0].TO[(4 * index) + (2 * bf_index)] =3D EXP; \ + index++; \ + bf_index =3D (bf_index + 1) % 2; \ +} while (0) + +#define DEF_TEST_CVT_2(TO, FROM, TESTS) \ + static void test_vcvt_##TO##_##FROM(void) \ + { \ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; \ + HVX_Vector buffers[2]; \ + int index =3D 0, bf_index =3D 0; \ + memset(&buffers, 0, sizeof(buffers)); \ + memset(expect, 0, sizeof(expect)); \ + TESTS \ + * hvx_output =3D Q6_V##TO##_vcvt_V##FROM##V##FROM(buffers[0], buff= ers[1]); \ + check_output_##TO(__LINE__, 1); \ + } + +DEF_TEST_CVT_2(ub, hf, { \ + TEST_EXP_2(ub, hf, HF_QNaN, UINT8_MAX); \ + TEST_EXP_2(ub, hf, HF_SNaN, UINT8_MAX); \ + TEST_EXP_2(ub, hf, HF_QNaN_neg, UINT8_MAX); \ + TEST_EXP_2(ub, hf, HF_INF, UINT8_MAX); \ + TEST_EXP_2(ub, hf, HF_INF_neg, 0); \ + TEST_EXP_2(ub, hf, HF_small_neg, 0); \ + TEST_EXP_2(ub, hf, HF_neg_two, 0); \ + TEST_EXP_2(ub, hf, HF_zero_neg, 0); \ + TEST_EXP_2(ub, hf, raw_hf((_Float16)2.1), 2); \ + TEST_EXP_2(ub, hf, HF_one_recip, 1); \ +}) + +DEF_TEST_CVT_2(b, hf, { \ + TEST_EXP_2(b, hf, HF_QNaN, INT8_MAX); \ + TEST_EXP_2(b, hf, HF_SNaN, INT8_MAX); \ + TEST_EXP_2(b, hf, HF_QNaN_neg, INT8_MAX); \ + TEST_EXP_2(b, hf, HF_INF, INT8_MAX); \ + TEST_EXP_2(b, hf, HF_INF_neg, INT8_MIN); \ + TEST_EXP_2(b, hf, HF_small_neg, 0); \ + TEST_EXP_2(b, hf, HF_neg_two, -2); \ + TEST_EXP_2(b, hf, HF_zero_neg, 0); \ + TEST_EXP_2(b, hf, raw_hf((_Float16)2.1), 2); \ + TEST_EXP_2(b, hf, HF_one_recip, 1); \ +}) + +#define DEF_TEST_VCONV(TO, FROM, TESTS) \ + static void test_vconv_##TO##_##FROM(void) \ + { \ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; \ + HVX_Vector buffer; \ + int index =3D 0; \ + memset(&buffer, 0, sizeof(buffer)); \ + memset(expect, 0, sizeof(expect)); \ + TESTS \ + * hvx_output =3D Q6_V##TO##_equals_V##FROM(buffer); \ + check_output_##TO(__LINE__, 1); \ + } + +DEF_TEST_VCONV(w, sf, { \ + TEST_EXP(w, sf, SF_QNaN, INT32_MAX); \ + TEST_EXP(w, sf, SF_SNaN, INT32_MAX); \ + TEST_EXP(w, sf, SF_QNaN_neg, INT32_MIN); \ + TEST_EXP(w, sf, SF_INF, INT32_MAX); \ + TEST_EXP(w, sf, SF_INF_neg, INT32_MIN); \ + TEST_EXP(w, sf, SF_small_neg, 0); \ + TEST_EXP(w, sf, SF_neg_two, -2); \ + TEST_EXP(w, sf, SF_zero_neg, 0); \ + TEST_EXP(w, sf, raw_sf(2.1f), 2); \ + TEST_EXP(w, sf, raw_sf(2.8f), 2); \ +}) + +DEF_TEST_VCONV(h, hf, { \ + TEST_EXP(h, hf, HF_QNaN, INT16_MAX); \ + TEST_EXP(h, hf, HF_SNaN, INT16_MAX); \ + TEST_EXP(h, hf, HF_QNaN_neg, INT16_MIN); \ + TEST_EXP(h, hf, HF_INF, INT16_MAX); \ + TEST_EXP(h, hf, HF_INF_neg, INT16_MIN); \ + TEST_EXP(h, hf, HF_small_neg, 0); \ + TEST_EXP(h, hf, HF_neg_two, -2); \ + TEST_EXP(h, hf, HF_zero_neg, 0); \ + TEST_EXP(h, hf, raw_hf((_Float16)2.1), 2); \ + TEST_EXP(h, hf, raw_hf((_Float16)2.8), 2); \ +}) + +DEF_TEST_VCONV(hf, h, { \ + TEST_EXP(hf, h, 0, HF_zero); \ + TEST_EXP(hf, h, 2, HF_two); \ + TEST_EXP(hf, h, -2, HF_neg_two); \ + TEST_EXP(hf, h, 2049, raw_hf((_Float16)2048)); /* rounds DOWN */ \ + TEST_EXP(hf, h, 2051, raw_hf((_Float16)2052)); /* rounds UP */ \ +}) + +DEF_TEST_VCONV(sf, w, { \ + TEST_EXP(sf, w, 0, SF_zero); \ + TEST_EXP(sf, w, 2, SF_two); \ + TEST_EXP(sf, w, -2, SF_neg_two); \ + TEST_EXP(sf, w, 16777217, raw_sf((float)16777216)); /* rounds DOWN */ \ + TEST_EXP(sf, w, 16777219, raw_sf((float)16777220)); /* rounds UP */ \ +}) + +int main(void) +{ + test_vcvt_uh_hf(); + test_vcvt_h_hf(); + test_vcvt_ub_hf(); + test_vcvt_b_hf(); + test_vconv_w_sf(); + test_vconv_sf_w(); + test_vconv_h_hf(); + test_vconv_hf_h(); + + puts(err ? "FAIL" : "PASS"); + return err ? 1 : 0; +} diff --git a/tests/tcg/hexagon/Makefile.target b/tests/tcg/hexagon/Makefile= .target index 2a5958711bd..0978e7ca916 100644 --- a/tests/tcg/hexagon/Makefile.target +++ b/tests/tcg/hexagon/Makefile.target @@ -51,6 +51,7 @@ HEX_TESTS +=3D scatter_gather HEX_TESTS +=3D hvx_misc HEX_TESTS +=3D hvx_histogram HEX_TESTS +=3D fp_hvx +HEX_TESTS +=3D fp_hvx_cvt HEX_TESTS +=3D fp_hvx_disabled HEX_TESTS +=3D invalid-slots HEX_TESTS +=3D valid-slots @@ -142,6 +143,8 @@ fp_hvx: fp_hvx.c hvx_misc.h hex_test.h fp_hvx: CFLAGS +=3D -mhvx -mhvx-ieee-fp fp_hvx_disabled: fp_hvx_disabled.c hvx_misc.h hex_test.h fp_hvx_disabled: CFLAGS +=3D -mhvx -mhvx-ieee-fp +fp_hvx_cvt: fp_hvx_cvt.c hvx_misc.h hex_test.h +fp_hvx_cvt: CFLAGS +=3D -mhvx -mhvx-ieee-fp =20 run-fp_hvx_disabled: QEMU_OPTS +=3D -cpu v73,ieee-fp=3Dfalse =20 --=20 2.34.1 From nobody Wed Aug 26 07:25:09 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786551236; cv=none; d=zohomail.com; s=zohoarc; b=BXd8wdP0590/JzZIKmlslSdSIxPNE45O6XNCURZDK0z7qaVYrg5e0RiYQFvCpiyGjWj+3K47TGCNx/IdfrBtD/lIYSouuWDm1OUH0hjIfrcFwiBBEPiWjBcmk1JkdiZAokQxaebOjVNoR0y0qIsPKgAyMGgBqTTlEyU9YSlNtqY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786551236; 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=z50AkMWL2pvSeMPaC0cMDjmEEN3cDmewxPVUe74Axsk=; b=ALhr7+rTf9LsnFtmgJxtIgXyq9b3rTRHFV0MoxFyU05Sl9WD3Pwa+6CdZrFWV1werSJsMt/4Rwah95PmhcaoeEfUgE3cJnoXGCOFJ6ZFenrdOq1GVey+r/iVD0To5F6IMGnr1i3ULirr5H4gELzrcwQnIXnUrlpgz+x+V5RyHnk= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786551236113898.8115484914788; Wed, 12 Aug 2026 09:13:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuBaL-0003Iz-TN; Wed, 12 Aug 2026 12:13:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuBaK-0003Gk-Cr for qemu-devel@nongnu.org; Wed, 12 Aug 2026 12:13:44 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuBaI-00050l-7L for qemu-devel@nongnu.org; Wed, 12 Aug 2026 12:13:44 -0400 Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbr9h3950358 for ; Wed, 12 Aug 2026 16:13:41 GMT Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0hj2txm3-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 16:13:40 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38e1118e4abso1922797a91.0 for ; Wed, 12 Aug 2026 09:13:40 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1412458461bsm18100074c88.13.2026.08.12.09.13.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 09:13:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= z50AkMWL2pvSeMPaC0cMDjmEEN3cDmewxPVUe74Axsk=; b=JSwCeyeDT5KJhzrJ eujJz05ssZ9bKROw/FGITOxoFmuHIPaNGpJgCId1XIlYmV8nwwrSWlyuLJfYmYqC /uKJXeX6lpwAmFYDELfEsqnsHrX9oojxPIP+g1XopKzc0aWgu4Ga2FMpgsXVaAf/ xFzRwW+81B34LTwtxkShxrCr8CaL0XNP/Yam2teiIHM0wxyv7Xc85NZO6tRycSOh CjR/tq1PjbLaVZIieFw9xxS16L4BWTEjVqL+Afjpn1zdnsIiMVWMoG0ku+6U7G7+ jmSSp+wa861Jk9eB7lqAIfuM5Bu9UhZ3alH1hWULgtb7SKKTvgETr4G2vpApN42w o+eO3A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786551220; x=1787156020; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=z50AkMWL2pvSeMPaC0cMDjmEEN3cDmewxPVUe74Axsk=; b=FcUp84jJAR3hslEuHvtxOP1h7hJALhBvqsBNYT2sVvsXfzrNoaLKmshbZur8RharBx USynf2xmT7E/T+LStTgB2gt6GjuBfK24LdUkLABWd8t17f4yqw+vk192+xPd2SycUoeB JjJWohHCYWgSH68M4h+lVtSoR4ssVtUf8m8EelHEL7G78/j5tCMg/M2swCbIpgM5Zjto 3AORrrFqXuC+xuX8ey/zK1fsRdk/hq3h6TB3qxmh1IVCMEC0NQ1TFE4omxkFO2W1fAeX kuhT8vGhP19zHovRnsSeBkaHNUfF6ieQK5eaURbg/MgAT7jKZjhIdSFHXFJRjPsh+0b0 ih8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786551220; x=1787156020; h=content-transfer-encoding:content-type: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 :content-type; bh=z50AkMWL2pvSeMPaC0cMDjmEEN3cDmewxPVUe74Axsk=; b=rQc2yXwNuoE9COhzmb9NkPuwDelc/KlmEXn9M7c57c8HCNgemq1ATMPFXVB1Qhpqcc CJuvzdtWiHDT7b1C1F9zjZEA8EA3ejoZ1p3Dq23C0kdoJ/PQNJVsd/40a+YZJ7yDYR9m YK7oZXf1Cp7oV3F6XWfU1x6iO2lhkLn9snpfIqFxouXAimFTHWVZGFGTe1Z9dw7WjVPk c0nwolxGBHZuCCzu0sBmpQZjbPsPZQ9hP/KG3BVxAt0TaD4UixDeceOWKOjS/W8+0VsU ezKD9eIo3xAAdp/oe6H8VkO7p4lutQXk/oh+wtRL7UOwlRrTRozqMgUt8lPPV1myh5w/ dzCg== X-Gm-Message-State: AOJu0Yyo9NMxOgGKURff2nZDFsr9rAeWloiAi/VPE4nwWfUnJRHUz3HX WxomQZ1ePHIFD/1/7hosS0w0XZMQSeZjT2zXPTSRQ/5kR26VuBLrPkx7pBnX7rYg/L1STcU/s2L HwIIsxhhUUwVU9UyrAtzgqJnMbmaQf19yIapqjnDi0v+UvAgjA95dyZ7kB/uaydpb8w== X-Gm-Gg: AR+sD100YYr6q8kqoVwrUqqWRRgmVsRJ0J+Za5qwzrPOvL8NqGHxyune1VUiHhqy+oG 1qjF2hiBo9SlqlL4dk/TY4/oV/o9r6wKURXJPy1WXeaEH6Lccrz8KELrae69NyYkOCCxGLtcT1D mLZe9JNM6a1V22/Kt8/hV40vLxIpk6ro3zDewJfS/tfb2LDBhG9UHzOpjfh6X8c7uKH3izJQvr9 5tRSr02Sc8DNe4/Z5xk81N6buTaGY61hRjBE+mGHKbKD+HiILq+V9oS9kGozUMjpU9wrwL+X4S/ RIx8zWgJue0k5h0I84IQ6ooNAgMQPYo01dmFPn9mVhbqZWjRKXhmbC1PZLyjdVQt4/AhBT+/5rh S8U1GUSp2pIek7nqgFDZCPCMzDS1OaoCSF9U+QLvVjjNRf3dC X-Received: by 2002:a17:90b:57c6:b0:37f:c22a:c188 with SMTP id 98e67ed59e1d1-39301285e89mr7036893a91.4.1786551219806; Wed, 12 Aug 2026 09:13:39 -0700 (PDT) X-Received: by 2002:a17:90b:57c6:b0:37f:c22a:c188 with SMTP id 98e67ed59e1d1-39301285e89mr7036795a91.4.1786551219097; Wed, 12 Aug 2026 09:13:39 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , Pierrick Bouvier Subject: [PULL v2 40/41] tests/hexagon: add tests for v68 HVX IEEE float comparisons Date: Wed, 12 Aug 2026 08:42:19 -0700 Message-Id: <20260812154220.1029828-41-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=a8EAM0SF c=1 sm=1 tr=0 ts=6a7c9bb4 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=2TiPz2L2oVPrSfT5lIsA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-ORIG-GUID: ghH6RC1pVp2iayv_5rcW6OIRT87e5zZx X-Proofpoint-GUID: ghH6RC1pVp2iayv_5rcW6OIRT87e5zZx X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzMSBTYWx0ZWRfX5iDX0IzdBMnF hh/KFGuKl3F97GmY5sXDDD6Qw+OQ6csLTedgcylVVR4PHLcIj/1rJrZZhhI4xXnV6SegqtthvwV LRXhpSrgbR2g8nu0Zb+V1yxpwLU0g1E= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzMSBTYWx0ZWRfX2Jcli+Cbqz0p h4QPKRXgDfvEr5yUazE9QSI4NU90aSqDbtHyU8exkp0p0pcLzF6nykDjY5M8hP51OCHyIubOoD5 DmSSuqJ0I6Ht1Zh4oE9jzerKeW6bZgsbz/gfah0TwynPJPxmt/OQKfcJ26ho7Dz3CiCtM+VLZvs 4gtm6fqcWFrHD+kvBq5iQnT5cSLlLbouveS2MAYQj82STIOPX1bQhTMEFh97qViy3hrwcMw85p4 DYz59v+ygWbvyJBMvR6pWLjDgwZvLUZSaG9p+v6Nf4/N4HYaUp5j3chooI4B4vHCCcaycBCcuyu YKKxDa8XBBRr2EoqFzxUGFH/LbJe0JTKRqUITDRklLspj6uDfdfPlKk9ZR/qr4JwufldCNbjOlu Ene0ZNqLS3OCoW38ZdNTYFvWKkEIgdZ3NJmJWrsa4jUe+IcTHxGVDD7byOZ3Avoo3bv8R8BaQOc EPDl4BxMbaVRoT/meIg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 phishscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 adultscore=0 spamscore=0 malwarescore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120131 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786551237383158500 From: Matheus Tavares Bernardino Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/53e73707092d31bcde6ed8189c5496b003= 45f8fa.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- tests/tcg/hexagon/hex_test.h | 1 + tests/tcg/hexagon/fp_hvx_cmp.c | 224 ++++++++++++++++++++++++++++++ tests/tcg/hexagon/Makefile.target | 3 + 3 files changed, 228 insertions(+) create mode 100644 tests/tcg/hexagon/fp_hvx_cmp.c diff --git a/tests/tcg/hexagon/hex_test.h b/tests/tcg/hexagon/hex_test.h index d5da8ad240c..79d30ec61c6 100644 --- a/tests/tcg/hexagon/hex_test.h +++ b/tests/tcg/hexagon/hex_test.h @@ -115,6 +115,7 @@ const uint16_t HF_INF =3D 0x7c00; const uint16_t HF_INF_neg =3D 0xfc00; const uint16_t HF_QNaN =3D 0x7e00; const uint16_t HF_SNaN =3D 0x7d00; +const uint16_t HF_SNaN_neg =3D 0xfd00; const uint16_t HF_QNaN_neg =3D 0xfe00; const uint16_t HF_zero =3D 0x0000; const uint16_t HF_zero_neg =3D 0x8000; diff --git a/tests/tcg/hexagon/fp_hvx_cmp.c b/tests/tcg/hexagon/fp_hvx_cmp.c new file mode 100644 index 00000000000..8068d1c3ee4 --- /dev/null +++ b/tests/tcg/hexagon/fp_hvx_cmp.c @@ -0,0 +1,224 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include +#include +#include +#include + +#if __HEXAGON_ARCH__ > 75 +#error "After v75, compiler will replace some FP HVX instructions." +#endif + +int err; +#include "hvx_misc.h" +#include "hex_test.h" + +#define MAX_TESTS_hf (MAX_VEC_SIZE_BYTES / 2) +#define MAX_TESTS_sf (MAX_VEC_SIZE_BYTES / 4) + +#define TRUE_MASK_sf 0xffffffff +#define TRUE_MASK_hf 0xffff + +static const char *comparisons[MAX_TESTS_sf][2]; +static HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; +static HVX_Vector buffers[2], true_vec, false_vec; +static int exp_index; + +#define ADD_TEST_CMP(TYPE, VAL1, VAL2, EXP) do { \ + ((MMVector *)&buffers[0])->TYPE[exp_index] =3D VAL1; \ + ((MMVector *)&buffers[1])->TYPE[exp_index] =3D VAL2; \ + expect[0].TYPE[exp_index] =3D EXP ? TRUE_MASK_##TYPE : 0; \ + comparisons[exp_index][0] =3D #VAL1; \ + comparisons[exp_index][1] =3D #VAL2; \ + assert(exp_index < MAX_TESTS_##TYPE); \ + exp_index++; \ +} while (0) + +#define TEST_CMP_GT(TYPE, VAL1, VAL2) do { \ + ADD_TEST_CMP(TYPE, VAL1, VAL2, true); \ + ADD_TEST_CMP(TYPE, VAL2, VAL1, false); \ +} while (0) + +#define PREP_TEST() do { \ + memset(&buffers, 0, sizeof(buffers)); \ + memset(expect, 0, sizeof(expect)); \ + exp_index =3D 0; \ +} while (0) + +#define CHECK(TYPE, TYPESZ) do { \ + HVX_VectorPred pred =3D Q6_Q_vcmp_gt_V##TYPE##V##TYPE(buffers[0], buff= ers[1]); \ + *hvx_output =3D Q6_V_vmux_QVV(pred, true_vec, false_vec); \ + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / TYPESZ; j++) { \ + if (output[0].TYPE[j] !=3D expect[0].TYPE[j]) { \ + printf("ERROR: expected %s %s %s\n", comparisons[j][0], \ + (expect[0].TYPE[j] !=3D 0 ? ">" : "<=3D"), comparisons[= j][1]); \ + err++; \ + } \ + } \ +} while (0) + +static void test_cmp_sf(void) +{ + /* + * General ordering for sf: + * QNaN > SNaN > +Inf > numbers > -Inf > SNaN_neg > QNaN_neg + */ + + /* Test equality */ + PREP_TEST(); + ADD_TEST_CMP(sf, raw_sf(2.2), raw_sf(2.2), false); + ADD_TEST_CMP(sf, SF_SNaN, SF_SNaN, false); + CHECK(sf, 4); + + /* Common numbers */ + PREP_TEST(); + TEST_CMP_GT(sf, raw_sf(2.2), raw_sf(2.1)); + TEST_CMP_GT(sf, raw_sf(0), raw_sf(-2.2)); + CHECK(sf, 4); + + /* Infinity vs Infinity/NaN */ + PREP_TEST(); + TEST_CMP_GT(sf, SF_QNaN, SF_INF); + TEST_CMP_GT(sf, SF_SNaN, SF_INF); + TEST_CMP_GT(sf, SF_INF, SF_INF_neg); + TEST_CMP_GT(sf, SF_INF, SF_SNaN_neg); + TEST_CMP_GT(sf, SF_INF, SF_QNaN_neg); + TEST_CMP_GT(sf, SF_INF_neg, SF_SNaN_neg); + TEST_CMP_GT(sf, SF_INF_neg, SF_QNaN_neg); + TEST_CMP_GT(sf, SF_SNaN, SF_INF_neg); + TEST_CMP_GT(sf, SF_QNaN, SF_INF_neg); + CHECK(sf, 4); + + /* NaN vs NaN */ + PREP_TEST(); + TEST_CMP_GT(sf, SF_QNaN, SF_SNaN); + TEST_CMP_GT(sf, SF_SNaN, SF_SNaN_neg); + TEST_CMP_GT(sf, SF_SNaN_neg, SF_QNaN_neg); + CHECK(sf, 4); + + /* NaN vs non-NaN */ + PREP_TEST(); + TEST_CMP_GT(sf, SF_QNaN, SF_one); + TEST_CMP_GT(sf, SF_SNaN, SF_one); + TEST_CMP_GT(sf, SF_one, SF_QNaN_neg); + TEST_CMP_GT(sf, SF_one, SF_SNaN_neg); + CHECK(sf, 4); +} + +static void test_cmp_hf(void) +{ + /* + * General ordering for hf: + * QNaN > SNaN > +Inf > numbers > -Inf > QSNaN_neg > QNaN_neg + */ + + /* Test equality */ + PREP_TEST(); + ADD_TEST_CMP(hf, raw_hf((_Float16)2.2), raw_hf((_Float16)2.2), false= ); + ADD_TEST_CMP(hf, HF_SNaN, HF_SNaN, false); + CHECK(hf, 2); + + /* Common numbers */ + PREP_TEST(); + TEST_CMP_GT(hf, raw_hf((_Float16)2.2), raw_hf((_Float16)2.1)); + TEST_CMP_GT(hf, raw_hf((_Float16)0), raw_hf((_Float16) - 2.2)); + CHECK(hf, 2); + + /* Infinity vs Infinity/NaN */ + PREP_TEST(); + TEST_CMP_GT(hf, HF_QNaN, HF_INF); + TEST_CMP_GT(hf, HF_SNaN, HF_INF); + TEST_CMP_GT(hf, HF_INF, HF_INF_neg); + TEST_CMP_GT(hf, HF_INF, HF_SNaN_neg); + TEST_CMP_GT(hf, HF_INF, HF_QNaN_neg); + TEST_CMP_GT(hf, HF_INF_neg, HF_SNaN_neg); + TEST_CMP_GT(hf, HF_INF_neg, HF_QNaN_neg); + TEST_CMP_GT(hf, HF_SNaN, HF_INF_neg); + TEST_CMP_GT(hf, HF_QNaN, HF_INF_neg); + CHECK(hf, 2); + + /* NaN vs NaN */ + PREP_TEST(); + TEST_CMP_GT(hf, HF_QNaN, HF_SNaN); + TEST_CMP_GT(hf, HF_SNaN, HF_SNaN_neg); + TEST_CMP_GT(hf, HF_SNaN_neg, HF_QNaN_neg); + CHECK(hf, 2); + + /* NaN vs non-NaN */ + PREP_TEST(); + TEST_CMP_GT(hf, HF_QNaN, HF_one); + TEST_CMP_GT(hf, HF_SNaN, HF_one); + TEST_CMP_GT(hf, HF_one, HF_QNaN_neg); + TEST_CMP_GT(hf, HF_one, HF_SNaN_neg); + CHECK(hf, 2); +} + +static void check_byte_pred(HVX_VectorPred pred, int byte_idx, uint8_t exp= _mask, + int line) +{ + /* + * Note: ((uint8_t *)&pred)[N] returns the expanded value of bit N: + * 0xFF if bit is set, 0x00 if clear. + */ + for (int i =3D 0; i < 8; i++) { + int idx =3D byte_idx * 8 + i; + int val =3D ((uint8_t *)&pred)[idx]; + int exp =3D (exp_mask >> i) & 1 ? 0xff : 0x00; + if (exp !=3D val) { + printf("ERROR line %d: pred bit %d is 0x%x, should be 0x%x\n", + line, idx, val, exp); + err++; + } + } +} + +#define CHECK_BYTE_PRED(PRED, BYTE, EXP) check_byte_pred(PRED, BYTE, EXP, = __LINE__) + +static void test_cmp_variants(void) +{ + HVX_VectorPred pred; + + /* + * Setup: comparison result will have bits 4-7 set (0xF0 in pred byte = 0) + * - sf[0]: SF_zero > SF_one =3D false -> bits 0-3 =3D 0 + * - sf[1]: SF_one > SF_zero =3D true -> bits 4-7 =3D 1 + */ + PREP_TEST(); + ADD_TEST_CMP(sf, SF_zero, SF_one, false); + ADD_TEST_CMP(sf, SF_one, SF_zero, true); + + /* greater and: 0xF0 & 0xF0 =3D 0xF0 */ + memset(&pred, 0xF0, sizeof(pred)); + pred =3D Q6_Q_vcmp_gtand_QVsfVsf(pred, buffers[0], buffers[1]); + CHECK_BYTE_PRED(pred, 0, 0xF0); + + /* greater or: 0x0F | 0xF0 =3D 0xFF */ + memset(&pred, 0x0F, sizeof(pred)); + pred =3D Q6_Q_vcmp_gtor_QVsfVsf(pred, buffers[0], buffers[1]); + CHECK_BYTE_PRED(pred, 0, 0xFF); + + /* greater xor: 0xFF ^ 0xF0 =3D 0x0F */ + memset(&pred, 0xFF, sizeof(pred)); + pred =3D Q6_Q_vcmp_gtxacc_QVsfVsf(pred, buffers[0], buffers[1]); + CHECK_BYTE_PRED(pred, 0, 0x0F); +} + +int main(void) +{ + memset(&true_vec, 0xff, sizeof(true_vec)); + memset(&false_vec, 0, sizeof(false_vec)); + + test_cmp_sf(); + test_cmp_hf(); + test_cmp_variants(); + + puts(err ? "FAIL" : "PASS"); + return err ? 1 : 0; +} diff --git a/tests/tcg/hexagon/Makefile.target b/tests/tcg/hexagon/Makefile= .target index 0978e7ca916..61adf6356e4 100644 --- a/tests/tcg/hexagon/Makefile.target +++ b/tests/tcg/hexagon/Makefile.target @@ -52,6 +52,7 @@ HEX_TESTS +=3D hvx_misc HEX_TESTS +=3D hvx_histogram HEX_TESTS +=3D fp_hvx HEX_TESTS +=3D fp_hvx_cvt +HEX_TESTS +=3D fp_hvx_cmp HEX_TESTS +=3D fp_hvx_disabled HEX_TESTS +=3D invalid-slots HEX_TESTS +=3D valid-slots @@ -145,6 +146,8 @@ fp_hvx_disabled: fp_hvx_disabled.c hvx_misc.h hex_test.h fp_hvx_disabled: CFLAGS +=3D -mhvx -mhvx-ieee-fp fp_hvx_cvt: fp_hvx_cvt.c hvx_misc.h hex_test.h fp_hvx_cvt: CFLAGS +=3D -mhvx -mhvx-ieee-fp +fp_hvx_cmp: fp_hvx_cmp.c hvx_misc.h hex_test.h +fp_hvx_cmp: CFLAGS +=3D -mhvx -mhvx-ieee-fp =20 run-fp_hvx_disabled: QEMU_OPTS +=3D -cpu v73,ieee-fp=3Dfalse =20 --=20 2.34.1 From nobody Wed Aug 26 07:25:09 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1786551252; cv=none; d=zohomail.com; s=zohoarc; b=FARhLVNGK9bWFIzjO4BVsu764kx5GuoLwqD7EoN0tU0ekbq4WB9ohFgZ1q0+nGa0ponjnhmcrE5qPaLeEbVJVshXA/3pspc+Lam8TXASHjmShduANmojfbbVM0DVDuujHzR16bD4fx/sFfTzj+IFVLztyB9naS1zAmih2FIEYS4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786551252; 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=iQO6vxZ1nSVOyP90Gwz/Ea8zHgLUH0ix0EcibAMjFC0=; b=IVoZBNwWH+y108qbf88X8WVWSeerXH2VmEblEDkR7JA8N3oGfisrG0rOz8UbcgiwJ1jPtU+mwF6BhzRjiurdIkJGhW8EOTle1mjVOO+4Aj5G0Hdd3eqwAgQ+EngdC3n0ukMEcNDYpqqoGvCFiJYp/VqnUcTaPh2JRE5XA198YqA= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786551252552150.96953869188906; Wed, 12 Aug 2026 09:14:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuBaN-0003Jk-QQ; Wed, 12 Aug 2026 12:13:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuBaM-0003JM-KM for qemu-devel@nongnu.org; Wed, 12 Aug 2026 12:13:46 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuBaK-000512-9w for qemu-devel@nongnu.org; Wed, 12 Aug 2026 12:13:46 -0400 Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CDbZl0899645 for ; Wed, 12 Aug 2026 16:13:42 GMT Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g0nut9vv9-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 12 Aug 2026 16:13:41 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-cbee6bb8408so953505a12.3 for ; Wed, 12 Aug 2026 09:13:41 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1412458461bsm18100074c88.13.2026.08.12.09.13.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 09:13:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= iQO6vxZ1nSVOyP90Gwz/Ea8zHgLUH0ix0EcibAMjFC0=; b=DVawKU8M4hH1Jgoe A37LJaUdurriGRcuYynaYl/fg+IqHbjBYTv1Ecig4yH/JgUINNnNiBsd7r7tOYLX 8PTF1dSj5zMNsMcV5M7RoWFYFuSRuCe6y6pB14UuxTIM2NWmTQLiOUarADCpE2v/ K+r2B2CVnmydFEkq2q8mrdph0atcPBotWzvJspb30t9RYOBVi6lbHJoygBuMCgaM V4GjJI7oczDsb+N7mgPGh4tQwunKzd4JK0Ad9cAmWM6ECXvhoCvB0IBnx+LxcOno UmmVXv3mXrgawhPSAR7WYE3HT2g6UTrgEtOeTlfxUoxZs/8ZtR0zVQ9TF2KYplwO rAFYUA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786551221; x=1787156021; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=iQO6vxZ1nSVOyP90Gwz/Ea8zHgLUH0ix0EcibAMjFC0=; b=f/NdbSWpGOrQjkFqqJL+QCju02O3IBSr9sMHEVUCZPzWwhK0pBfYV8sD02m+GlHI3k k8HrAkX+H1YYJaucFd3cUPUKl2/ogL9qFWAQfHwb9igKXS/IYfnrWByNrm9ZpQQL8i2S sCh5C+3/PtynAVmBFEzNEd3Yz/upubjwxxDA4cAqbdIh3zOuWtTuRBkjtir3g9o0glCu LF2MxowZkKKsx+y9kS2y2KiE2I9rT8GHQUAplUUrdLkM2e6bVNrXskP4FwogmVteeYHJ nt4bJhc0FzVcMwZ2y2D8/w3hb8ZHoXo/zGTXvvDrAyjVwPm8vj4dFG4+0LBYzMXCBoD4 Py7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786551221; x=1787156021; h=content-transfer-encoding:content-type: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 :content-type; bh=iQO6vxZ1nSVOyP90Gwz/Ea8zHgLUH0ix0EcibAMjFC0=; b=adJ4Hxloy/q426Y6/lxa4nKls3jyZHoycOmozbSA/INmWIpW6yb/5i7DIGJzdu3oDe EuZxBjjhJjgQ6um8JYlJlaQOxhid6DrXf+8hiwgefU0MAqsPPigCIKp5+n+K+l9+k8sz /HcsfdqTFaJA7Zj6Emp3uHJ5tComTv0h9UStR8FqgZv+fhDpKHeqnqh6zBKPAxGXjGKT JhmEHXJlsHelSJJh2pI3BtHBKQ/EIAA4IOv6ATARSJkk0wCzI+rKFivr71ZIb6/5YmeP Pv1+ZydRx8HVnHAO67CnnKGfOzKJ1YJ3ePAA4NANwnfgcv046XXfeoflz2L2cUnt4yqY lL7A== X-Gm-Message-State: AOJu0YzE91Jvcz+Fash6nKYptg32Ck5Ci81yWsZDUF/X4QCkynEkv8QY MkHhVkcRbX/dyVkwfLTvU+EPJK58BX1ygIAP4D/MJYZJdgiASvVljVN0JFv4yV1g2zAIdvjUMgi DDd7x1A+oudSdW3tAxsXZiRnB5MVoj1Yc3p2uLJIbylnYyMeXY4TaMWVDi2ucPS2TxQ== X-Gm-Gg: AR+sD139aZEaYsbHuqkVTtM2w/vx3TDCxIDvOczEmjSrDTGTdEK5pU5bP+u62vd2x3f FoHzw6Z7O/PG7IRVnxRLElTPHPUrq3SQKZl2A6WqAAW6AV3RsuSKdcLxe7Az1TT7dPwMBHQ3IYT c3AvrqeESDUKWd6CPMrVlUtCalmGgBM1HxAJmmSXmj3OYp4sKxF/JlTDsa0KqZ26FdWtaKOgcQs GKmXYT+5Hn6COWSdxMSRxZgUN7W/tEDbRaTVniFVCNsxmc9XGrTD2mS+MGrohVgG7PO1quhqm75 /P8xORsP9D/d+O/E9kdP07Gp9EYNICRhZUsmV7jgOtsNqhLumG/x2nGNAy818N0Zs5N9mmH9buC RFgwmE+FLRZNuhZHMlKrj0TOvVlRU99Y6P8nKIuGc/S3ixQOv X-Received: by 2002:a05:6a21:6f10:b0:398:837a:7af0 with SMTP id adf61e73a8af0-3cc3f7ca7dcmr8292935637.30.1786551220967; Wed, 12 Aug 2026 09:13:40 -0700 (PDT) X-Received: by 2002:a05:6a21:6f10:b0:398:837a:7af0 with SMTP id adf61e73a8af0-3cc3f7ca7dcmr8292858637.30.1786551220478; Wed, 12 Aug 2026 09:13:40 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org, stefanha@redhat.com Cc: brian.cain@oss.qualcomm.com, Matheus Tavares Bernardino , Taylor Simpson , Pierrick Bouvier Subject: [PULL v2 41/41] tests/hexagon: add tests for HVX bfloat Date: Wed, 12 Aug 2026 08:42:20 -0700 Message-Id: <20260812154220.1029828-42-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> References: <20260812154220.1029828-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzMSBTYWx0ZWRfX/OPKf1q/Ym4C W5VMwm/cbI9B0iEZocQyCXTXx9b39x/7o8QKzIv95Xmgiu5aNFaRRdwFYVJpAEJ9lMKhWU0TQI6 NbsNFzUF+jOW4BQhNBvD7v/Gjor6N9k= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzMSBTYWx0ZWRfX7XKoF8NWTG0G KTuUtBBAmRPdybEYJaEPT/0LXFggm9VcOJ3oJKpcra0GDLLkHTIHc1bOsvvMkhDwfFwXrvI8LqY Aoh55nfUNFu5C1mn8lETXsVg2kDmzDaaKkNQA6tUcrZR8jc/5iYxMM+wXLTgvrB6sozOlIJUzup UBEIz9uDnvq/T68iqopEgg7bCXGyzYUyg1bQnWQX6caZTwIfMJTrk66oSl5HhJlitbPKbMCixOR 4LrCRJCU90Q6pwnmQeNJ1z9OAAgSnhn78e76VhSIT+f2DjoSrdXYpRJhMBI6gkVuryd0Y6OcsGW xU5/lzSMajfGOdv/GHym8seWdVZC58HBptt/uHBIErC1jNF9vZA9N6fePSB/coBzGIarM3P8teg Pco7QwHsIX+I9yzfXC9+qMed4dm3/61Y4omduf73IMJZRpYol98XSf+rk5yXiYZptZB0wNTL974 69FGx3C7badHVfPbM1g== X-Proofpoint-ORIG-GUID: 8aSSk4Qzl3mXiSoJLEOGWlK9FhOQ7t7m X-Authority-Analysis: v=2.4 cv=POA/P/qC c=1 sm=1 tr=0 ts=6a7c9bb5 cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=UXK3Z1TEhiG8phQMQjQA:9 a=QEXdDO2ut3YA:10 a=3WC7DwWrALyhR5TkjVHa:22 X-Proofpoint-GUID: 8aSSk4Qzl3mXiSoJLEOGWlK9FhOQ7t7m X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 lowpriorityscore=0 spamscore=0 clxscore=1015 impostorscore=0 bulkscore=0 suspectscore=0 priorityscore=1501 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120131 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, 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 @qualcomm.com) X-ZM-MESSAGEID: 1786551254702158500 From: Matheus Tavares Bernardino Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Brian Cain Link: https://lore.kernel.org/qemu-devel/392114c4c16e6f7f2835a6513987aafea8= 2b565c.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain --- tests/tcg/hexagon/hex_test.h | 13 +++++++++ tests/tcg/hexagon/hvx_misc.h | 30 ++++++++++++++++++++ tests/tcg/hexagon/fp_hvx.c | 41 +++++++++++++++++++++++++++ tests/tcg/hexagon/fp_hvx_cmp.c | 51 ++++++++++++++++++++++++++++++++++ tests/tcg/hexagon/fp_hvx_cvt.c | 31 +++++++++++++++++++++ 5 files changed, 166 insertions(+) diff --git a/tests/tcg/hexagon/hex_test.h b/tests/tcg/hexagon/hex_test.h index 79d30ec61c6..f86e6e1a69e 100644 --- a/tests/tcg/hexagon/hex_test.h +++ b/tests/tcg/hexagon/hex_test.h @@ -126,6 +126,19 @@ const uint16_t HF_small_neg =3D 0x8010; const uint16_t HF_any =3D 0x3c00; const uint16_t HF_neg_two =3D 0xc000; =20 +const uint16_t BF_INF =3D 0x7f80; +const uint16_t BF_INF_neg =3D 0xff80; +const uint16_t BF_QNaN =3D 0x7fc0; +const uint16_t BF_SNaN =3D 0x7f81; +const uint16_t BF_QNaN_neg =3D 0xffc0; +const uint16_t BF_SNaN_neg =3D 0xff81; +const uint16_t BF_HEX_NaN =3D 0x7fff; +const uint16_t BF_zero =3D 0x0000; +const uint16_t BF_zero_neg =3D 0x8000; +const uint16_t BF_one =3D 0x3f80; +const uint16_t BF_two =3D 0x4000; +const uint16_t BF_four =3D 0x4080; + const uint32_t SF_INF =3D 0x7f800000; const uint32_t SF_INF_neg =3D 0xff800000; const uint32_t SF_QNaN =3D 0x7fc00000; diff --git a/tests/tcg/hexagon/hvx_misc.h b/tests/tcg/hexagon/hvx_misc.h index 43de20da6ac..c21ea975c16 100644 --- a/tests/tcg/hexagon/hvx_misc.h +++ b/tests/tcg/hexagon/hvx_misc.h @@ -41,6 +41,7 @@ typedef union { uint16_t uh[MAX_VEC_SIZE_BYTES / 2]; uint16_t hf[MAX_VEC_SIZE_BYTES / 2]; /* convenience alias */ int16_t h[MAX_VEC_SIZE_BYTES / 2]; + uint16_t bf[MAX_VEC_SIZE_BYTES / 2]; uint8_t ub[MAX_VEC_SIZE_BYTES / 1]; int8_t b[MAX_VEC_SIZE_BYTES / 1]; } MMVector; @@ -73,6 +74,7 @@ CHECK_OUTPUT_FUNC(uh, 2) CHECK_OUTPUT_FUNC(hf, 2) CHECK_OUTPUT_FUNC(ub, 1) CHECK_OUTPUT_FUNC(b, 1) +CHECK_OUTPUT_FUNC(bf, 2) =20 static inline void init_buffers(void) { @@ -97,6 +99,12 @@ static const uint32_t FP_VALUES[] =3D { }; #define FP_VALUES_MAX ARRAY_SIZE(FP_VALUES) =20 +static const uint16_t BF_VALUES[] =3D { + BF_INF, BF_INF_neg, BF_QNaN, BF_SNaN, BF_QNaN_neg, BF_SNaN_neg, + BF_HEX_NaN, BF_zero, BF_zero_neg, BF_one, BF_two, BF_four, +}; +#define BF_VALUES_MAX ARRAY_SIZE(BF_VALUES) + static inline void init_buffers_fp(void) { _Static_assert(BUFSIZE * (MAX_VEC_SIZE_BYTES / 4) > @@ -116,6 +124,25 @@ static inline void init_buffers_fp(void) } } =20 +static inline void init_buffers_bf(void) +{ + _Static_assert(BUFSIZE * (MAX_VEC_SIZE_BYTES / 2) > + BF_VALUES_MAX * BF_VALUES_MAX, + "test arrays can't fit all BF_VALUES combinations"); + int counter1 =3D 0, counter2 =3D 0; + for (int i =3D 0; i < BUFSIZE; i++) { + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / 2; j++) { + buffer0[i].bf[j] =3D BF_VALUES[counter1]; + buffer1[i].bf[j] =3D BF_VALUES[counter2]; + counter2++; + if (counter2 =3D=3D BF_VALUES_MAX) { + counter2 =3D 0; + counter1 =3D (counter1 + 1) % BF_VALUES_MAX; + } + } + } +} + #define VEC_OP1(ASM, EL, IN, OUT) \ asm("v2 =3D vmem(%0 + #0)\n\t" \ "v2" #EL " =3D " #ASM "(v2" #EL ")\n\t" \ @@ -212,10 +239,13 @@ static inline void test_##NAME(bool invert) \ =20 #define float_sf(x) ({ typeof(x) _x =3D (x); *((float *)&(_x)); }) #define float_hf(x) ({ typeof(x) _x =3D (x); *((_Float16 *) &(_x)); }) +#define float_bf(x) ({ uint32_t _u =3D ((uint32_t)(x)) << 16; *((float *)&= (_u)); }) #define raw_sf(x) ({ typeof(x) _x =3D (x); *((uint32_t *)&(_x)); }) #define raw_hf(x) ({ typeof(x) _x =3D (x); *((uint16_t *)&(_x)); }) +#define raw_bf(x) ({ typeof(x) _x =3D (x); (uint16_t)(*((uint32_t *)&(_x))= >> 16); }) #define float_hf_to_sf(x) ((float)x) #define bytes_hf 2 #define bytes_sf 4 +#define bytes_bf 2 =20 #endif diff --git a/tests/tcg/hexagon/fp_hvx.c b/tests/tcg/hexagon/fp_hvx.c index dee0781bd72..4543a0aa8c7 100644 --- a/tests/tcg/hexagon/fp_hvx.c +++ b/tests/tcg/hexagon/fp_hvx.c @@ -29,6 +29,7 @@ int err; #define CHECK_NAN(A, DEF_NAN) (isnan(A) ? DEF_NAN : (A)) #define NAN_SF float_sf(0x7FFFFFFF) #define NAN_HF float_hf(0x7FFF) +#define NAN_BF float_hf(0x7FFF) =20 /*************************************************************************= ***** * Binary operations @@ -91,11 +92,43 @@ DEF_TEST_OP_2(vmpy, MULT_HF, hf, hf); #define MAX_HF(X, Y) MAX(X, Y, NAN_HF) #define MIN_SF(X, Y) MIN(X, Y, NAN_SF) #define MAX_SF(X, Y) MAX(X, Y, NAN_SF) +#define MIN_BF(X, Y) MIN(X, Y, NAN_BF) +#define MAX_BF(X, Y) MAX(X, Y, NAN_BF) =20 DEF_TEST_OP_2(vfmin, MIN_SF, sf, sf); DEF_TEST_OP_2(vfmax, MAX_SF, sf, sf); DEF_TEST_OP_2(vfmin, MIN_HF, hf, hf); DEF_TEST_OP_2(vfmax, MAX_HF, hf, hf); +DEF_TEST_OP_2(vmin, MIN_BF, bf, bf); +DEF_TEST_OP_2(vmax, MAX_BF, bf, bf); + +#define DEF_TEST_OP_2_INTERLEAVED(vop, op, type_res, type_arg) \ + static void test_##vop##_##type_res##_##type_arg(void) \ + { \ + memset(expect, 0xff, sizeof(expect)); \ + memset(output, 0xff, sizeof(output)); \ + for (int i =3D 0; i < BUFSIZE / 2; i++) { \ + HVX_VectorPair *hvx_output =3D (HVX_VectorPair *)&output[2 * i= ]; \ + HVX_Vector hvx_buffer0 =3D *(HVX_Vector *)&buffer0[i]; \ + HVX_Vector hvx_buffer1 =3D *(HVX_Vector *)&buffer1[i]; \ + *hvx_output =3D \ + Q6_W##type_res##_##vop##_V##type_arg##V##type_arg(hvx_buff= er0, \ + hvx_buff= er1); \ + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / bytes_##type_res; j= ++) { \ + expect[2 * i].type_res[j] =3D \ + raw_##type_res(op(float_##type_arg(buffer0[i].type_arg= [2 * j]), \ + float_##type_arg(buffer1[i].type_arg= [2 * j]))); \ + expect[2 * i + 1].type_res[j] =3D \ + raw_##type_res(op(float_##type_arg(buffer0[i].type_arg= [2 * j + 1]), \ + float_##type_arg(buffer1[i].type_arg[2= * j + 1]))); \ + } \ + } \ + check_output_##type_res(__LINE__, BUFSIZE); \ + } + +DEF_TEST_OP_2_INTERLEAVED(vadd, SUM_SF, sf, bf); +DEF_TEST_OP_2_INTERLEAVED(vsub, SUB_SF, sf, bf); +DEF_TEST_OP_2_INTERLEAVED(vmpy, MULT_SF, sf, bf); =20 /*************************************************************************= ***** * Other tests @@ -180,6 +213,14 @@ int main(void) test_vfmax_sf_sf(); test_vfmax_hf_hf(); =20 + /* bfloat */ + init_buffers_bf(); + test_vmin_bf_bf(); + test_vmax_bf_bf(); + test_vadd_sf_bf(); + test_vsub_sf_bf(); + test_vmpy_sf_bf(); + puts(err ? "FAIL" : "PASS"); return err ? 1 : 0; } diff --git a/tests/tcg/hexagon/fp_hvx_cmp.c b/tests/tcg/hexagon/fp_hvx_cmp.c index 8068d1c3ee4..63fb423941b 100644 --- a/tests/tcg/hexagon/fp_hvx_cmp.c +++ b/tests/tcg/hexagon/fp_hvx_cmp.c @@ -22,9 +22,11 @@ int err; =20 #define MAX_TESTS_hf (MAX_VEC_SIZE_BYTES / 2) #define MAX_TESTS_sf (MAX_VEC_SIZE_BYTES / 4) +#define MAX_TESTS_bf (MAX_VEC_SIZE_BYTES / 2) =20 #define TRUE_MASK_sf 0xffffffff #define TRUE_MASK_hf 0xffff +#define TRUE_MASK_bf 0xffff =20 static const char *comparisons[MAX_TESTS_sf][2]; static HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; @@ -160,6 +162,54 @@ static void test_cmp_hf(void) CHECK(hf, 2); } =20 +static void test_cmp_bf(void) +{ + /* + * General ordering for bf: + * QNaN > SNaN > +Inf > numbers > -Inf > SNaN_neg > QNaN_neg + */ + + /* Test equality */ + PREP_TEST(); + ADD_TEST_CMP(bf, 0, 0, false); + ADD_TEST_CMP(bf, BF_SNaN, BF_SNaN, false); + CHECK(bf, 2); + + /* Common numbers */ + PREP_TEST(); + TEST_CMP_GT(bf, BF_two, BF_one); + TEST_CMP_GT(bf, BF_one, BF_zero); + CHECK(bf, 2); + + /* Infinity vs Infinity/NaN */ + PREP_TEST(); + TEST_CMP_GT(bf, BF_QNaN, BF_INF); + TEST_CMP_GT(bf, BF_SNaN, BF_INF); + TEST_CMP_GT(bf, BF_INF, BF_INF_neg); + TEST_CMP_GT(bf, BF_INF, BF_SNaN_neg); + TEST_CMP_GT(bf, BF_INF, BF_QNaN_neg); + TEST_CMP_GT(bf, BF_INF_neg, BF_SNaN_neg); + TEST_CMP_GT(bf, BF_INF_neg, BF_QNaN_neg); + TEST_CMP_GT(bf, BF_SNaN, BF_INF_neg); + TEST_CMP_GT(bf, BF_QNaN, BF_INF_neg); + CHECK(bf, 2); + + /* NaN vs NaN */ + PREP_TEST(); + TEST_CMP_GT(bf, BF_QNaN, BF_SNaN); + TEST_CMP_GT(bf, BF_SNaN, BF_SNaN_neg); + TEST_CMP_GT(bf, BF_SNaN_neg, BF_QNaN_neg); + CHECK(bf, 2); + + /* NaN vs non-NaN */ + PREP_TEST(); + TEST_CMP_GT(bf, BF_QNaN, BF_one); + TEST_CMP_GT(bf, BF_SNaN, BF_one); + TEST_CMP_GT(bf, BF_one, BF_QNaN_neg); + TEST_CMP_GT(bf, BF_one, BF_SNaN_neg); + CHECK(bf, 2); +} + static void check_byte_pred(HVX_VectorPred pred, int byte_idx, uint8_t exp= _mask, int line) { @@ -217,6 +267,7 @@ int main(void) =20 test_cmp_sf(); test_cmp_hf(); + test_cmp_bf(); test_cmp_variants(); =20 puts(err ? "FAIL" : "PASS"); diff --git a/tests/tcg/hexagon/fp_hvx_cvt.c b/tests/tcg/hexagon/fp_hvx_cvt.c index b08eba92da8..7196bc9a33d 100644 --- a/tests/tcg/hexagon/fp_hvx_cvt.c +++ b/tests/tcg/hexagon/fp_hvx_cvt.c @@ -19,6 +19,8 @@ int err; #include "hvx_misc.h" #include "hex_test.h" =20 +#define NAN_BF 0x7FFF + #define TEST_EXP(TO, FROM, VAL, EXP) do { \ ((MMVector *)&buffer)->FROM[index] =3D VAL; \ expect[0].TO[index] =3D EXP; \ @@ -172,6 +174,34 @@ DEF_TEST_VCONV(sf, w, { \ TEST_EXP(sf, w, 16777219, raw_sf((float)16777220)); /* rounds UP */ \ }) =20 +#define TEST_EXP_BF(VAL, EXP) do { \ + ((MMVector *)&buffers[1])->sf[index] =3D VAL; \ + ((MMVector *)&buffers[0])->sf[index] =3D VAL; \ + expect[0].bf[2 * index] =3D EXP; \ + expect[0].bf[2 * index + 1] =3D EXP; \ + index++; \ +} while (0) + +static void test_vconv_bf_sf(void) +{ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; + HVX_Vector buffers[2]; + int index =3D 0; + memset(&buffers, 0, sizeof(buffers)); + memset(expect, 0, sizeof(expect)); + + TEST_EXP_BF(SF_QNaN, NAN_BF); + TEST_EXP_BF(SF_SNaN, NAN_BF); + TEST_EXP_BF(SF_QNaN_neg, NAN_BF); + TEST_EXP_BF(SF_INF, BF_INF); + TEST_EXP_BF(SF_INF_neg, BF_INF_neg); + TEST_EXP_BF(SF_one, BF_one); + TEST_EXP_BF(SF_zero_neg, BF_zero_neg); + + *hvx_output =3D Q6_Vbf_vcvt_VsfVsf(buffers[0], buffers[1]); + check_output_hf(__LINE__, 1); +} + int main(void) { test_vcvt_uh_hf(); @@ -182,6 +212,7 @@ int main(void) test_vconv_sf_w(); test_vconv_h_hf(); test_vconv_hf_h(); + test_vconv_bf_sf(); =20 puts(err ? "FAIL" : "PASS"); return err ? 1 : 0; --=20 2.34.1