[{"id":3674962,"web_url":"http://patchwork.ozlabs.org/comment/3674962/","msgid":"<CAJpW4SV7gC_0i5VLzDdFJDWcjF0rYR1-0bD1X7oL3vAVJ1yXVA@mail.gmail.com>","list_archive_url":null,"date":"2026-04-08T19:02:24","subject":"Re: [PATCH v4 1/9] hw/hexagon: Add globalreg model","submitter":{"id":93092,"url":"http://patchwork.ozlabs.org/api/people/93092/","name":"Sid Manning","email":"sid.manning@oss.qualcomm.com"},"content":"On Tue, Apr 7, 2026 at 11:21 PM Brian Cain <brian.cain@oss.qualcomm.com>\nwrote:\n\n> Some of the system registers are shared among all threads\n> in the core.  This object contains the representation and\n> interface to the system registers.\n>\n> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>\n> ---\n>  include/hw/hexagon/hexagon_globalreg.h |  56 ++++++\n>  hw/hexagon/hexagon_globalreg.c         | 245 +++++++++++++++++++++++++\n>  2 files changed, 301 insertions(+)\n>  create mode 100644 include/hw/hexagon/hexagon_globalreg.h\n>  create mode 100644 hw/hexagon/hexagon_globalreg.c\n>\n> diff --git a/include/hw/hexagon/hexagon_globalreg.h\n> b/include/hw/hexagon/hexagon_globalreg.h\n> new file mode 100644\n> index 00000000000..c9e72f30b0a\n> --- /dev/null\n> +++ b/include/hw/hexagon/hexagon_globalreg.h\n> @@ -0,0 +1,56 @@\n> +/*\n> + * Hexagon Global Registers QOM Object\n> + *\n> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.\n> + * SPDX-License-Identifier: GPL-2.0-or-later\n> + */\n> +\n> +#ifndef HEXAGON_GLOBALREG_H\n> +#define HEXAGON_GLOBALREG_H\n> +\n> +#include \"hw/core/qdev.h\"\n> +#include \"hw/core/sysbus.h\"\n> +#include \"qom/object.h\"\n> +#include \"target/hexagon/cpu.h\"\n> +\n> +#define TYPE_HEXAGON_GLOBALREG \"hexagon-globalreg\"\n> +OBJECT_DECLARE_SIMPLE_TYPE(HexagonGlobalRegState, HEXAGON_GLOBALREG)\n> +\n> +struct HexagonGlobalRegState {\n> +    SysBusDevice parent_obj;\n> +\n> +    /* Array of system registers */\n> +    uint32_t regs[NUM_SREGS];\n> +\n> +    /* Global performance cycle counter base */\n> +    uint64_t g_pcycle_base;\n> +\n> +    /* Properties for global register reset values */\n> +    uint32_t boot_evb;           /* Boot Exception Vector Base\n> (HEX_SREG_EVB) */\n> +    uint64_t config_table_addr;  /* Configuration table base */\n> +    uint32_t dsp_rev;           /* DSP revision register (HEX_SREG_REV) */\n> +\n> +    /* ISDB properties */\n> +    bool isdben_etm_enable;     /* ISDB ETM enable bit */\n> +    bool isdben_dfd_enable;     /* ISDB DFD enable bit */\n> +    bool isdben_trusted;        /* ISDB trusted mode bit */\n> +    bool isdben_secure;         /* ISDB secure mode bit */\n> +};\n> +\n> +/* Public interface functions */\n> +uint32_t hexagon_globalreg_read(HexagonGlobalRegState *s, uint32_t reg,\n> +                                uint32_t htid);\n> +void hexagon_globalreg_write(HexagonGlobalRegState *s, uint32_t reg,\n> +                             uint32_t value, uint32_t htid);\n> +uint32_t hexagon_globalreg_masked_value(HexagonGlobalRegState *s,\n> uint32_t reg,\n> +                                        uint32_t value);\n> +void hexagon_globalreg_write_masked(HexagonGlobalRegState *s, uint32_t\n> reg,\n> +                                    uint32_t value);\n> +void hexagon_globalreg_reset(HexagonGlobalRegState *s);\n> +\n> +/* Global performance cycle counter access */\n> +uint64_t hexagon_globalreg_get_pcycle_base(HexagonGlobalRegState *s);\n> +void hexagon_globalreg_set_pcycle_base(HexagonGlobalRegState *s,\n> +                                       uint64_t value);\n> +\n> +#endif /* HEXAGON_GLOBALREG_H */\n> diff --git a/hw/hexagon/hexagon_globalreg.c\n> b/hw/hexagon/hexagon_globalreg.c\n> new file mode 100644\n> index 00000000000..634d3b169fd\n> --- /dev/null\n> +++ b/hw/hexagon/hexagon_globalreg.c\n> @@ -0,0 +1,245 @@\n> +/*\n> + * Hexagon Global Registers\n> + *\n> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.\n> + * SPDX-License-Identifier: GPL-2.0-or-later\n> + */\n> +\n> +#include \"qemu/osdep.h\"\n> +#include \"hw/hexagon/hexagon.h\"\n> +#include \"hw/hexagon/hexagon_globalreg.h\"\n> +#include \"hw/core/qdev-properties.h\"\n> +#include \"hw/core/sysbus.h\"\n> +#include \"hw/core/resettable.h\"\n> +#include \"migration/vmstate.h\"\n> +#include \"qom/object.h\"\n> +#include \"target/hexagon/cpu.h\"\n> +#include \"target/hexagon/hex_regs.h\"\n> +#include \"qemu/log.h\"\n> +#include \"qapi/error.h\"\n> +\n> +#define IMMUTABLE (~0)\n> +#define INVALID_REG_VAL 0xdeadbeef\n> +\n> +/* Global system register mutability masks */\n> +static const uint32_t global_sreg_immut_masks[NUM_SREGS] = {\n> +    [HEX_SREG_EVB] = 0x000000ff,\n> +    [HEX_SREG_MODECTL] = IMMUTABLE,\n> +    [HEX_SREG_SYSCFG] = 0x80001c00,\n> +    [HEX_SREG_IPENDAD] = IMMUTABLE,\n> +    [HEX_SREG_VID] = 0xfc00fc00,\n> +    [HEX_SREG_VID1] = 0xfc00fc00,\n> +    [HEX_SREG_BESTWAIT] = 0xfffffe00,\n> +    [HEX_SREG_IAHL] = 0x00000000,\n> +    [HEX_SREG_SCHEDCFG] = 0xfffffee0,\n> +    [HEX_SREG_CFGBASE] = IMMUTABLE,\n> +    [HEX_SREG_DIAG] = 0x00000000,\n> +    [HEX_SREG_REV] = IMMUTABLE,\n> +    [HEX_SREG_ISDBST] = IMMUTABLE,\n> +    [HEX_SREG_ISDBCFG0] = 0xe0000000,\n> +    [HEX_SREG_BRKPTPC0] = 0x00000003,\n> +    [HEX_SREG_BRKPTCFG0] = 0xfc007000,\n> +    [HEX_SREG_BRKPTPC1] = 0x00000003,\n> +    [HEX_SREG_BRKPTCFG1] = 0xfc007000,\n> +    [HEX_SREG_ISDBMBXIN] = IMMUTABLE,\n> +    [HEX_SREG_ISDBMBXOUT] = 0x00000000,\n> +    [HEX_SREG_ISDBEN] = 0xfffffffe,\n> +    [HEX_SREG_TIMERLO] = IMMUTABLE,\n> +    [HEX_SREG_TIMERHI] = IMMUTABLE,\n> +};\n> +\n> +static void hexagon_globalreg_init(Object *obj)\n> +{\n> +    HexagonGlobalRegState *s = HEXAGON_GLOBALREG(obj);\n> +\n> +    memset(s->regs, 0, sizeof(uint32_t) * NUM_SREGS);\n> +}\n> +\n> +static inline uint32_t apply_write_mask(uint32_t new_val, uint32_t\n> cur_val,\n> +                                        uint32_t reg_mask)\n> +{\n> +    if (reg_mask) {\n> +        return (new_val & ~reg_mask) | (cur_val & reg_mask);\n> +    }\n> +    return new_val;\n> +}\n> +\n> +uint32_t hexagon_globalreg_read(HexagonGlobalRegState *s, uint32_t reg,\n> +                                uint32_t htid)\n> +{\n> +    uint32_t value;\n> +\n> +    g_assert(reg < NUM_SREGS);\n> +    g_assert(reg >= HEX_SREG_GLB_START);\n> +    g_assert(s);\n> +\n> +    value = s->regs[reg];\n> +\n> +    return value;\n> +}\n> +\n> +void hexagon_globalreg_write(HexagonGlobalRegState *s, uint32_t reg,\n> +                             uint32_t value, uint32_t htid)\n> +{\n> +    g_assert(s);\n> +    g_assert(reg < NUM_SREGS);\n> +    g_assert(reg >= HEX_SREG_GLB_START);\n> +    s->regs[reg] = value;\n> +}\n> +\n> +uint32_t hexagon_globalreg_masked_value(HexagonGlobalRegState *s,\n> uint32_t reg,\n> +                                        uint32_t value)\n> +{\n> +    uint32_t reg_mask;\n> +\n> +    g_assert(s);\n> +    g_assert(reg < NUM_SREGS);\n> +    g_assert(reg >= HEX_SREG_GLB_START);\n> +    reg_mask = global_sreg_immut_masks[reg];\n> +    return reg_mask == IMMUTABLE ?\n> +            s->regs[reg] :\n> +            apply_write_mask(value, s->regs[reg], reg_mask);\n> +}\n> +\n> +void hexagon_globalreg_write_masked(HexagonGlobalRegState *s, uint32_t\n> reg,\n> +                                    uint32_t value)\n> +{\n> +    g_assert(s);\n> +    s->regs[reg] = hexagon_globalreg_masked_value(s, reg, value);\n> +}\n> +\n> +uint64_t hexagon_globalreg_get_pcycle_base(HexagonGlobalRegState *s)\n> +{\n> +    g_assert(s);\n> +    return s->g_pcycle_base;\n> +}\n> +\n> +void hexagon_globalreg_set_pcycle_base(HexagonGlobalRegState *s,\n> +                                       uint64_t value)\n> +{\n> +    g_assert(s);\n> +    s->g_pcycle_base = value;\n> +}\n> +\n> +static void do_hexagon_globalreg_reset(HexagonGlobalRegState *s)\n> +{\n> +    uint32_t isdben_val = 0;\n> +\n> +    g_assert(s);\n> +    memset(s->regs, 0, sizeof(uint32_t) * NUM_SREGS);\n> +\n> +    s->g_pcycle_base = 0;\n> +\n> +    s->regs[HEX_SREG_EVB] = s->boot_evb;\n> +    s->regs[HEX_SREG_CFGBASE] =\n> HEXAGON_CFG_ADDR_BASE(s->config_table_addr);\n> +    s->regs[HEX_SREG_REV] = s->dsp_rev;\n> +\n> +    if (s->isdben_etm_enable) {\n> +        isdben_val |= (1 << 0);  /* ETM enable bit */\n> +    }\n> +    if (s->isdben_dfd_enable) {\n> +        isdben_val |= (1 << 1);  /* DFD enable bit */\n> +    }\n> +    if (s->isdben_trusted) {\n> +        isdben_val |= (1 << 2);  /* Trusted bit */\n> +    }\n> +    if (s->isdben_secure) {\n> +        isdben_val |= (1 << 3);  /* Secure bit */\n> +    }\n> +    s->regs[HEX_SREG_ISDBEN] = isdben_val;\n> +    s->regs[HEX_SREG_MODECTL] = 0x1;\n> +\n> +    /*\n> +     * These register indices are placeholders in these arrays\n> +     * and their actual values are synthesized from state elsewhere.\n> +     * We can initialize these with invalid values so that if we\n> +     * mistakenly generate reads, they will look obviously wrong.\n> +     */\n> +    s->regs[HEX_SREG_PCYCLELO] = INVALID_REG_VAL;\n> +    s->regs[HEX_SREG_PCYCLEHI] = INVALID_REG_VAL;\n> +    s->regs[HEX_SREG_TIMERLO] = INVALID_REG_VAL;\n> +    s->regs[HEX_SREG_TIMERHI] = INVALID_REG_VAL;\n> +    s->regs[HEX_SREG_PMUCNT0] = INVALID_REG_VAL;\n> +    s->regs[HEX_SREG_PMUCNT1] = INVALID_REG_VAL;\n> +    s->regs[HEX_SREG_PMUCNT2] = INVALID_REG_VAL;\n> +    s->regs[HEX_SREG_PMUCNT3] = INVALID_REG_VAL;\n> +    s->regs[HEX_SREG_PMUCNT4] = INVALID_REG_VAL;\n> +    s->regs[HEX_SREG_PMUCNT5] = INVALID_REG_VAL;\n> +    s->regs[HEX_SREG_PMUCNT6] = INVALID_REG_VAL;\n> +    s->regs[HEX_SREG_PMUCNT7] = INVALID_REG_VAL;\n> +}\n> +\n> +static void hexagon_globalreg_realize(DeviceState *dev, Error **errp)\n> +{\n> +}\n>\nThis could be removed and the reference to it below in dc->realize.\nOtherwise LGTM.\nReviewed by: sid.manning@oss.qualcomm.com\n\n> +\n> +void hexagon_globalreg_reset(HexagonGlobalRegState *s)\n> +{\n> +    do_hexagon_globalreg_reset(s);\n> +}\n> +\n> +static void hexagon_globalreg_reset_hold(Object *obj, ResetType type)\n> +{\n> +    HexagonGlobalRegState *s = HEXAGON_GLOBALREG(obj);\n> +    do_hexagon_globalreg_reset(s);\n> +}\n> +\n> +static const VMStateDescription vmstate_hexagon_globalreg = {\n> +    .name = \"hexagon_globalreg\",\n> +    .version_id = 1,\n> +    .minimum_version_id = 1,\n> +    .fields = (const VMStateField[]){\n> +        VMSTATE_UINT32_ARRAY(regs, HexagonGlobalRegState, NUM_SREGS),\n> +        VMSTATE_UINT64(g_pcycle_base, HexagonGlobalRegState),\n> +        VMSTATE_UINT32(boot_evb, HexagonGlobalRegState),\n> +        VMSTATE_UINT64(config_table_addr, HexagonGlobalRegState),\n> +        VMSTATE_UINT32(dsp_rev, HexagonGlobalRegState),\n> +        VMSTATE_BOOL(isdben_etm_enable, HexagonGlobalRegState),\n> +        VMSTATE_BOOL(isdben_dfd_enable, HexagonGlobalRegState),\n> +        VMSTATE_BOOL(isdben_trusted, HexagonGlobalRegState),\n> +        VMSTATE_BOOL(isdben_secure, HexagonGlobalRegState),\n> +        VMSTATE_END_OF_LIST()\n> +    }\n> +};\n> +\n> +static const Property hexagon_globalreg_properties[] = {\n> +    DEFINE_PROP_UINT32(\"boot-evb\", HexagonGlobalRegState, boot_evb, 0x0),\n> +    DEFINE_PROP_UINT64(\"config-table-addr\", HexagonGlobalRegState,\n> +                       config_table_addr, 0xffffffffULL),\n> +    DEFINE_PROP_UINT32(\"dsp-rev\", HexagonGlobalRegState, dsp_rev, 0),\n> +    DEFINE_PROP_BOOL(\"isdben-etm-enable\", HexagonGlobalRegState,\n> +                     isdben_etm_enable, false),\n> +    DEFINE_PROP_BOOL(\"isdben-dfd-enable\", HexagonGlobalRegState,\n> +                     isdben_dfd_enable, false),\n> +    DEFINE_PROP_BOOL(\"isdben-trusted\", HexagonGlobalRegState,\n> +                     isdben_trusted, false),\n> +    DEFINE_PROP_BOOL(\"isdben-secure\", HexagonGlobalRegState,\n> +                     isdben_secure, false),\n> +};\n> +\n> +static void hexagon_globalreg_class_init(ObjectClass *klass, const void\n> *data)\n> +{\n> +    DeviceClass *dc = DEVICE_CLASS(klass);\n> +    ResettableClass *rc = RESETTABLE_CLASS(klass);\n> +\n> +    dc->realize = hexagon_globalreg_realize;\n> +    rc->phases.hold = hexagon_globalreg_reset_hold;\n> +    dc->vmsd = &vmstate_hexagon_globalreg;\n> +    dc->user_creatable = false;\n> +    device_class_set_props(dc, hexagon_globalreg_properties);\n> +}\n> +\n> +static const TypeInfo hexagon_globalreg_info = {\n> +    .name = TYPE_HEXAGON_GLOBALREG,\n> +    .parent = TYPE_SYS_BUS_DEVICE,\n> +    .instance_size = sizeof(HexagonGlobalRegState),\n> +    .instance_init = hexagon_globalreg_init,\n> +    .class_init = hexagon_globalreg_class_init,\n> +};\n> +\n> +static void hexagon_globalreg_register_types(void)\n> +{\n> +    type_register_static(&hexagon_globalreg_info);\n> +}\n> +\n> +type_init(hexagon_globalreg_register_types)\n> --\n> 2.34.1\n>\n>","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=dkaGbfza;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=MGq+ROJX;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4frYV44t54z1xv0\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 09 Apr 2026 05:46:36 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wAYdP-0002oy-Ok; Wed, 08 Apr 2026 15:32:19 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <sid.manning@oss.qualcomm.com>)\n id 1wAYAq-00018f-D7\n for qemu-devel@nongnu.org; Wed, 08 Apr 2026 15:02:54 -0400","from mx0a-0031df01.pphosted.com ([205.220.168.131])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <sid.manning@oss.qualcomm.com>)\n id 1wAYAn-0004nc-Ac\n for qemu-devel@nongnu.org; Wed, 08 Apr 2026 15:02:48 -0400","from pps.filterd (m0279864.ppops.net [127.0.0.1])\n by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 638HwC6G061698\n for <qemu-devel@nongnu.org>; Wed, 8 Apr 2026 19:02:37 GMT","from mail-yx1-f72.google.com (mail-yx1-f72.google.com\n [74.125.224.72])\n by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dduvv08bm-1\n (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n for <qemu-devel@nongnu.org>; Wed, 08 Apr 2026 19:02:37 +0000 (GMT)","by mail-yx1-f72.google.com with SMTP id\n 956f58d0204a3-65079af1ee9so117832d50.1\n for <qemu-devel@nongnu.org>; Wed, 08 Apr 2026 12:02:37 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n cc:content-type:date:from:in-reply-to:message-id:mime-version\n :references:subject:to; s=qcppdkim1; bh=J0yraWY/D9vkQEYAFOL3Rt7B\n +6xkHx05sadTAR1N3CQ=; b=dkaGbfzandcyQkvl6/rRLTdNNTfUtxWtFkbXsVzJ\n nSEXs4INOV4wlDL0seBR6ZCMFlCF5gLg5yI6lglY5yeMpfxmssJwRwVoNwzZ5aMj\n Vw1rZESft5zbYMThBz2kUYazjSj5g2BXkaFqu1EhLlbrQeWOrRH4cZ+apt9UaVvI\n GvB22VVF/sBU6R7hyBq+s4qBFKdoV4FRGP/bj8HMJ8EZky4aBXpr9Yczdo49px9n\n AWU32gFmCf65BHVfwWVHjDbHzyE7iB0d0gZCQciaO69CJWdITmM4asQgMokTSO9Q\n /ayLSAkIZg+V5skrhEPraR5v7/eS/Y3YqvRJ4qIZU3PsGA==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oss.qualcomm.com; s=google; t=1775674956; x=1776279756; darn=nongnu.org;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:from:to:cc:subject:date:message-id:reply-to;\n bh=J0yraWY/D9vkQEYAFOL3Rt7B+6xkHx05sadTAR1N3CQ=;\n b=MGq+ROJXeJt58m7zhBti4RJKS2af2rhoDr5ulVh1OJftbqW+mhgTJEwOImMNQVG5Cj\n j0VHF0sG7MRHjpyz4C6ftW366btVCNqMqosQHgIQbZdOlRRHjiXy/yKRnStG1prt2SWA\n huUEEg3Pg9dYENTk4hA3d7fV1KrQz5Cw6uCLFHgGT7STjvrn0PSiiIIgBCVjOgal4zF2\n UDz/67ZpahgqlcIsFkY/U404sILfXYvIcblzsb19OtOOeGtWD6IoEYlWSDvoDxu2gHP8\n +n+3mb1Q+bCHsshE6as6xsq5XKkjRTs4zMIW9LTMFH1ZA0q0e0Ep0akaX99FXf7T1oru\n wSog=="],"ARC-Seal":"i=1; a=rsa-sha256; t=1775674956; cv=none;\n d=google.com; s=arc-20240605;\n b=FXkvQdnUE70TntZ83aRlo/KrA7fYfWR2U5L9lmuvuYH73XFAdigg9ULBkNnO6yP459\n LBU631P6Id4AByTX1PkQZSzyHCmwGYgjAw6zUFT87xRXe04AY83ZJ1uZbjKEQ3QPkRw2\n dup4jhdHv/4t43df6ncpnSYzMR4q+So01ZrMZs8tG1GuSK1IDTaseOHR6iZfzevOGDDf\n XH0uJI1BA/kRHoIhG3XwF02vNBjNv4olBMt1XuCRsPYjnJTlfU78waaNOEq1RelqeBLd\n fDSiHmh3lI9XSWOlRA4Pku2xLK21skXOoc3XHIO85F0+bW8ax5urcuUCpcWqT8X/O28n\n CLow==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:dkim-signature;\n bh=J0yraWY/D9vkQEYAFOL3Rt7B+6xkHx05sadTAR1N3CQ=;\n fh=hrlMg29Dqn6pZO5ltCwNC0ASvPhL/YIcIIfblWuU/Ss=;\n b=SinuBNCVfMz/i3FRKDrwuyGo3Xfq3/JsnljtSFKA7+HbDwa79EDpTLzSxE51BMQRvN\n 3Y9RA1XofV6gp92RbV9rYW0zlQGDAVRNRgq8LeJqiOVb5dJ4aiUuB9kusIk4OCaAMc/7\n 5iya5sqPqH2AV4dgiPahtnsnlBh6Eo7xsuJDcBk16/QqQArMBDHfrJ4iWjrXOaR3Dp2I\n 9NDbRb0C5YRzfpC9eZP8cES35/ZgrnmU1al61HZSRbP8GQdGWmnCCGNi4Ju7EKTPEx4t\n m9z4rskJA6A8VQIdx1PfqyTVVm0Ab4s5XW4kLbAlqk9Ubp6Zjl40xiFdmAF1OdncR8Z4\n RpCA==; darn=nongnu.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775674956; x=1776279756;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=J0yraWY/D9vkQEYAFOL3Rt7B+6xkHx05sadTAR1N3CQ=;\n b=sXJrw/2hEdVIvvq3+SLBgeYGQlTyBPsb8q/2TBFZO9+IMlFOJu9WjQrMKdzZIpRdce\n e+XvBMl/zLS3UyllTAqFk02iQXFoAo63E+dLIsQaTS9bxtfi+jZaLBAb8rH8DFiIazKb\n 8+DT7wAsuqGLdpRPGIckwcU0CRxcPPNC57Aw96/SKiiLD0Z8LsnI9+E38MCN18AuYQ89\n PhJhaHQa85o7LrMWvad4IBHgGuRcr1OjLDhPuDqZ6RtZq/lQDHVDOSXYD4/KmvCIjgeN\n axixkQ3u5NY7kE5wS0ZRyFME0MnQjbYeEOluXW8AKfUxkDfVVZdhp6ZpW3/fmwB2rEZE\n AYug==","X-Gm-Message-State":"AOJu0YziqIGP15oFHniyZpO+nHOWgYr8lgKStUkv2gPtgq1jF2feICMm\n HkYeJRb+9r2Axa/YQFxxUqNeh+WkoDshtybAL+WyIbsiYpZRm8OBv8JEcza791aKOqb8t4tEFpA\n e03EHl93NCAY1c8NHZEQVNj9/3jMigU9c1SgLPI85JgjNolpli8ehshB/H3ULuKfJad/Sepo9xY\n PibaIk97DQS9wYtbMWnd1I8fDmPxZIQW5/","X-Gm-Gg":"AeBDiesP/buSPYRHVv98/j1xLL2ezd8DjI+9dla4MjZmAsnnRTd+XOdVw21gPwHA0xH\n tVCYwU1w9eF0vZo64gzm8+HlFCzK0/kpnX6OU1B+ffQQu63rW0ESAoTLJ5pYsF5rcqNBf+hekP4\n itg34nuzOqgtiGL/A5oFbfoe0vZHVb6TotklVlUWaqY5HLoEMkyvIP6LB5q7WZQKDgqfJ5vyi9T\n yhx55Y=","X-Received":["by 2002:a53:c709:0:b0:64d:5638:f068 with SMTP id\n 956f58d0204a3-650488888f0mr15043682d50.58.1775674956332;\n Wed, 08 Apr 2026 12:02:36 -0700 (PDT)","by 2002:a53:c709:0:b0:64d:5638:f068 with SMTP id\n 956f58d0204a3-650488888f0mr15043628d50.58.1775674955834; Wed, 08 Apr 2026\n 12:02:35 -0700 (PDT)"],"MIME-Version":"1.0","References":"<20260408042149.1902796-1-brian.cain@oss.qualcomm.com>\n <20260408042149.1902796-2-brian.cain@oss.qualcomm.com>","In-Reply-To":"<20260408042149.1902796-2-brian.cain@oss.qualcomm.com>","From":"Sid Manning <sid.manning@oss.qualcomm.com>","Date":"Wed, 8 Apr 2026 14:02:24 -0500","X-Gm-Features":"AQROBzBE6Dc-zbE5XQpXTZilpkNWIZ98TnS6YJj4Q_txbMBQ19iKcGA5_OCIMjQ","Message-ID":"\n <CAJpW4SV7gC_0i5VLzDdFJDWcjF0rYR1-0bD1X7oL3vAVJ1yXVA@mail.gmail.com>","Subject":"Re: [PATCH v4 1/9] hw/hexagon: Add globalreg model","To":"Brian Cain <brian.cain@oss.qualcomm.com>","Cc":"qemu-devel@nongnu.org, philmd@linaro.org, ltaylorsimpson@gmail.com,\n matheus.bernardino@oss.qualcomm.com, marco.liebel@oss.qualcomm.com,\n quic_mburton@quicinc.com, ale@rev.ng, anjo@rev.ng","Content-Type":"multipart/alternative; boundary=\"000000000000fad185064ef78adc\"","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDA4MDE3NyBTYWx0ZWRfX16MWzSLeN6ca\n emftJUDoGjaYfkj7MWajQHbmoKgTNv5bw5rFA9rXEnoDFSlOkePOA2SfHbHVu4flYIJMEdpr5Pp\n M1F/MGIyx+ktbA4MX8pMzAqbWV8tLEPs3ud2O/uxIZ/DhPcmyi/zsIgypTC7Ws8+nkFXi5qTfiP\n G60smUpgc8gWtLL3r/6VNZGEc8CT+pP8G37kAf3lz7haEoPXRVfjinxDVBHrPUM91jX4x8/eZX5\n tEALyJZS+fn8uDqcWN+wsm63jfJVZPcSffgYbVsiGeNZtALMeg4ojXUeL18N7kETG64g0lQdjC+\n P8A/kbWWWvhVOkZVd05bRk4J1RDTl/CmTYSvSknfFNPQfJ9dT3QXc6OdnCceUtBKm62MyrFNww7\n qMGAX3YkSd//lrDhGME9lajn8ciEyBj+DbghHQDDYhbdY0KioK3/t+IPH0aYBSAr/SxbzEbgELH\n p/IGDDWx0T6rdH8UaQA==","X-Authority-Analysis":"v=2.4 cv=DrxmPm/+ c=1 sm=1 tr=0 ts=69d6a64d cx=c_pps\n a=VEzVgl358Dq0xwHDEbsOzA==:117 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10\n a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22\n a=EUspDBNiAAAA:8 a=le11EiixPpdv-oWBPhwA:9 a=QEXdDO2ut3YA:10\n a=ego90-qjEEHtmwbnlnoA:9 a=BvluhdU0U9l3ixQJ:21 a=lqcHg5cX4UMA:10\n a=uujmmnXaIg8lM0-o0HFK:22","X-Proofpoint-ORIG-GUID":"8iDYZFPp0dT3QjZptJTDlAV-EO8fL3Bu","X-Proofpoint-GUID":"8iDYZFPp0dT3QjZptJTDlAV-EO8fL3Bu","X-Proofpoint-Virus-Version":"vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-08_05,2026-04-08_01,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n malwarescore=0 impostorscore=0 phishscore=0 suspectscore=0 bulkscore=0\n priorityscore=1501 clxscore=1011 lowpriorityscore=0 adultscore=0 spamscore=0\n classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0\n reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080177","Received-SPF":"pass client-ip=205.220.168.131;\n envelope-from=sid.manning@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,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001,\n RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001,\n RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-Mailman-Approved-At":"Wed, 08 Apr 2026 15:32:16 -0400","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}}]