[{"id":3675618,"web_url":"http://patchwork.ozlabs.org/comment/3675618/","msgid":"<CAKmqyKMp7R6QAxseL1kdq98aSVLNOfy1FR5qU7k2=pomc+RZmA@mail.gmail.com>","list_archive_url":null,"date":"2026-04-10T03:03:26","subject":"Re: [PATCH qemu v2 4/7] ot_uart: replace individual IRQ fields with\n array, add missing IRQs","submitter":{"id":64571,"url":"http://patchwork.ozlabs.org/api/people/64571/","name":"Alistair Francis","email":"alistair23@gmail.com"},"content":"On Thu, Apr 9, 2026 at 5:37 AM ~lexbaileylowrisc\n<lexbaileylowrisc@git.sr.ht> wrote:\n>\n> From: Lex Bailey <lex.bailey@lowrisc.org>\n>\n> There are 9 interrupts in the OpenTitan UART device.\n> These are documented here:\n> https://opentitan.org/book/hw/ip/uart/doc/theory_of_operation.html#interrupts\n>\n> This commit removes the individually named interrupts (of which there was only four)\n> and replaces them with an array of 9 interrupts.\n>\n> Signed-off-by: Lex Bailey <lex.bailey@lowrisc.org>\n\nReviewed-by: Alistair Francis <alistair.francis@wdc.com>\n\nAlistair\n\n> ---\n>  hw/char/ot_uart.c         | 44 +++++++++++++--------------------------\n>  include/hw/char/ot_uart.h |  5 +----\n>  2 files changed, 15 insertions(+), 34 deletions(-)\n>\n> diff --git a/hw/char/ot_uart.c b/hw/char/ot_uart.c\n> index 3bf3295b1b..923aab12af 100644\n> --- a/hw/char/ot_uart.c\n> +++ b/hw/char/ot_uart.c\n> @@ -107,6 +107,7 @@ REG32(TIMEOUT_CTRL, 0x30)\n>  #define OT_UART_NCO_BITS     16\n>  #define OT_UART_TX_FIFO_SIZE 128\n>  #define OT_UART_RX_FIFO_SIZE 128\n> +#define OT_UART_IRQ_NUM      9\n>\n>  #define R32_OFF(_r_) ((_r_) / sizeof(uint32_t))\n>\n> @@ -116,31 +117,11 @@ REG32(TIMEOUT_CTRL, 0x30)\n>\n>  static void ot_uart_update_irqs(OtUARTState *s)\n>  {\n> -    if (s->regs[R_INTR_STATE] & s->regs[R_INTR_ENABLE]\n> -        & INTR_TX_WATERMARK_MASK) {\n> -        qemu_set_irq(s->tx_watermark, 1);\n> -    } else {\n> -        qemu_set_irq(s->tx_watermark, 0);\n> -    }\n> -\n> -    if (s->regs[R_INTR_STATE] & s->regs[R_INTR_ENABLE]\n> -        & INTR_RX_WATERMARK_MASK) {\n> -        qemu_set_irq(s->rx_watermark, 1);\n> -    } else {\n> -        qemu_set_irq(s->rx_watermark, 0);\n> -    }\n> +    uint32_t state_masked = s->regs[R_INTR_STATE] & s->regs[R_INTR_ENABLE];\n>\n> -    if (s->regs[R_INTR_STATE] & s->regs[R_INTR_ENABLE] & INTR_TX_EMPTY_MASK) {\n> -        qemu_set_irq(s->tx_empty, 1);\n> -    } else {\n> -        qemu_set_irq(s->tx_empty, 0);\n> -    }\n> -\n> -    if (s->regs[R_INTR_STATE] & s->regs[R_INTR_ENABLE]\n> -        & INTR_RX_OVERFLOW_MASK) {\n> -        qemu_set_irq(s->rx_overflow, 1);\n> -    } else {\n> -        qemu_set_irq(s->rx_overflow, 0);\n> +    for (int index = 0; index < OT_UART_IRQ_NUM; index++) {\n> +        bool level = (state_masked & (1U << index)) != 0;\n> +        qemu_set_irq(s->irqs[index], level);\n>      }\n>  }\n>\n> @@ -291,6 +272,9 @@ static void ot_uart_reset_enter(Object *obj, ResetType type)\n>      s->regs[R_STATUS] = 0x0000003c;\n>\n>      s->tx_watermark_level = 0;\n> +    for (unsigned index = 0; index < ARRAY_SIZE(s->irqs); index++) {\n> +        qemu_set_irq(s->irqs[index], 0);\n> +    }\n>      ot_uart_reset_tx_fifo(s);\n>      ot_uart_reset_rx_fifo(s);\n>\n> @@ -562,21 +546,21 @@ static void ot_uart_init(Object *obj)\n>                                    ot_uart_clk_update, s, ClockUpdate);\n>      clock_set_hz(s->f_clk, OT_UART_CLOCK);\n>\n> -    sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->tx_watermark);\n> -    sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->rx_watermark);\n> -    sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->tx_empty);\n> -    sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->rx_overflow);\n> +    for (unsigned index = 0; index < OT_UART_IRQ_NUM; index++) {\n> +        sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irqs[index]);\n> +    }\n>\n>      memory_region_init_io(&s->mmio, obj, &ot_uart_ops, s,\n>                            TYPE_OT_UART, 0x400);\n>      sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio);\n>\n>      /*\n> -     * This array has a fixed size in the header. This assertion is used to\n> -     * check that it is consistent with the definition in this file. This is\n> +     * These arrays have fixed sizes in the header. These assertions are used to\n> +     * check that they are consistent with the definitions in this file. This is\n>       * ostensibly a runtime check, but may be optimised away by the compiler.\n>       */\n>      assert(REGS_SIZE == sizeof(s->regs));\n> +    assert(OT_UART_IRQ_NUM * sizeof(qemu_irq) == sizeof(s->irqs));\n>  }\n>\n>  static void ot_uart_realize(DeviceState *dev, Error **errp)\n> diff --git a/include/hw/char/ot_uart.h b/include/hw/char/ot_uart.h\n> index f489612700..a2c5ff8b33 100644\n> --- a/include/hw/char/ot_uart.h\n> +++ b/include/hw/char/ot_uart.h\n> @@ -42,6 +42,7 @@ struct OtUARTState {\n>\n>      /* <public> */\n>      MemoryRegion mmio;\n> +    qemu_irq irqs[9];\n>\n>      uint32_t tx_level;\n>\n> @@ -59,10 +60,6 @@ struct OtUARTState {\n>      Clock *f_clk;\n>\n>      CharFrontend chr;\n> -    qemu_irq tx_watermark;\n> -    qemu_irq rx_watermark;\n> -    qemu_irq tx_empty;\n> -    qemu_irq rx_overflow;\n>  };\n>\n>  struct OtUARTClass {\n> --\n> 2.49.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=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=pjm6RHFi;\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 4fsM8w05l1z1yGb\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 10 Apr 2026 13:04:32 +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 1wB2A1-0004gd-Tp; Thu, 09 Apr 2026 23:03:57 -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 <alistair23@gmail.com>)\n id 1wB2A0-0004eq-E0\n for qemu-devel@nongnu.org; Thu, 09 Apr 2026 23:03:56 -0400","from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <alistair23@gmail.com>)\n id 1wB29y-0007m0-Mz\n for qemu-devel@nongnu.org; Thu, 09 Apr 2026 23:03:56 -0400","by mail-ed1-x52c.google.com with SMTP id\n 4fb4d7f45d1cf-6701c19e7b3so2647905a12.2\n for <qemu-devel@nongnu.org>; Thu, 09 Apr 2026 20:03:54 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; t=1775790233; cv=none;\n d=google.com; s=arc-20240605;\n b=BcI6z5JxlfP9kQqmZIOa1GXT3prntiC1g4KQ8r6shumxpuAp+dQOb9iK33Psa33Q4U\n 9MQ9gWhJVZ6B5XQYX1AES6VMDrRVheBhtb5dfQM0E+D+cNJPoSsVBEuQRh4MOXRgw8JD\n Of0CAaHQaH2UKHP/vZm9ELhlThWcFpssNyVffM7tSMdXq+eaV8UKy5DvSVy9uCVB1oqs\n 2yS7uiBWmCqwgO8kkTUtFplRykoMSDf9A63UaGavDJLpfHTVhomimoEi+Ddmau5zbuOZ\n B8VBGHpmYU8E47Iyr2je7EF00p8E9KO9H+fS5wFyITnEd2kyVNIWS1Eyj94ZrUQz4/7a\n AiGg==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:dkim-signature;\n bh=FNUQ7ttPA14wG3ubBhEPotEDqCiMqDAECL/dDjGkjIA=;\n fh=zlHjzNvSCS6GFUJBw8mfTWF7TqG/+Iz8CK6dtZ6QekA=;\n b=cttaUX1CtUC/udMlqzY+60lMfN6FIWithhiEvaxHNOE4lXNGSojQOStRZqLtQaB9MK\n ecWtXJdPeZXbhbf8TJQjjSH06YW9jAviI1Wf/yYo4RqLcdXPmCjoLn+tkCWWL1/6gbBY\n 0K3xC721J/M7SCShH2TSqljpxs4uJeVYfpDmrNK7WCXlUDXrFmdjIejPS3mPiylEhnCU\n zRNvYraX0maeNroX4KA+YSXCuavCufYB+oOnqmF+b4fnWGa8HBLrnRhRp9ndIsm/u7hV\n lVhfzum8YkPEa0PeYKpzM9j89CAWn2vzWJD2qAAWHIoXzzupmdKqjqRhZC+jib4K7GkQ\n XPjA==; darn=nongnu.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1775790233; x=1776395033; darn=nongnu.org;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:from:to:cc:subject:date\n :message-id:reply-to;\n bh=FNUQ7ttPA14wG3ubBhEPotEDqCiMqDAECL/dDjGkjIA=;\n b=pjm6RHFi1V4KAtsM8B0lKqFB5bIKNcthJsq8aCuPGVPjSmCt4Cy32jYwWJj+AavbZ1\n 8q4TaQ/Jg4sITFDueJsSHsD3mw8bfVuKw0RQad+1PTtnbNvuZ6XvHUahWzErNjTCdb9t\n eM8Jj7bZX8BF6iI9F2sN0s4zzTwX1KxjTneYI8cALyBK7m1QO4x6/loV9pZEBoPwgSp3\n rfPjih9+U8H8JP948HEUeA1+wKVDYM/74tEkR0zSWg2dJ2F7VokczlGf/ASGGJIJd5U7\n dmDGVqAiF+OCCvldqzEDJ/9xuThnH9AJSpJKDmUhbnc56mNCGMXJE42spyKPWRxvGPAe\n +aXg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775790233; x=1776395033;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=FNUQ7ttPA14wG3ubBhEPotEDqCiMqDAECL/dDjGkjIA=;\n b=GIgKPdPgSYrJmol9sSlPRtNHfYsI9jn9jluIpvrzTG6l4o/tCXONqapslOKDPNM6fH\n hqqHwkWWIRmC/OvBjhD6wzo27oyH/T3mBn6PVLngUWjoBpm77u383XP+/SaeSe1oEt5c\n o0vflFm1CFiKFxWEMBVq2KLr7axGiE3mdS125oFIrXOqs8wKMygFAxOBe0PYA+2dipYm\n dp1bla9D44ACFL28gLH4pgDTifVCQv7zkqy7O/xvXE6gCMtjxf1KqZf42MpjVgatDeEx\n z3tn3ZiiwSVpmNyavkZUYO5qSeAy1ihE/Nj5SvVNxlNQyguWRru//4vJd7Vi8WZYHBre\n pQ5w==","X-Forwarded-Encrypted":"i=1;\n AJvYcCUHsofMP43GBqDphvj1zQ7O/aqNlUKQejqmLKX1fHQynE+cgVIiH+BLsUcJs3htqMzCpY1hngix75Tw@nongnu.org","X-Gm-Message-State":"AOJu0Yz8rWo9OhoT3KS8lKXeCLRwlI81u4UBh1YGYMPvtz9ZAphizNDU\n +106yUCvz09nT8XA+bHmfZ2P1i4P5UqolRC6Ns14XjyUfQbXgBWOiAkrVea8iVJa2ikvt2b9sH9\n 0+0pMKlPqcDegjs6Lmx0tULJN99W2fwQ=","X-Gm-Gg":"AeBDiev5OWeMT4liU/fcjwLaICzmJQi18ps8cqoqqIPh0wkmiR1lAtDJ9dcSS4/u3UW\n qXtyGrFjlZ2T/DRvtxELxBPIBSESypEEH44evrQLBuwtRBywniUL63LYY5/kxmxGeW1V4QDesPA\n V8UhA0f+cGiC+NPzgCxSLNz05a9aUxHgJNo8s1nbkM9afQ+eNB/V4O5EPrfJkkL2atNV6syHc7Z\n WJLAbpTeWxu+q/p+5yCmX4JlK8ImtGzd5altc0x0BftSTscMYQ1dc5Ke77HDROMckqxFgJDj5fH\n c8D63oBjMLLaXB0Pk4YuZwsQd/hesiqcbeNthw==","X-Received":"by 2002:a17:907:c99f:b0:b98:286a:e2c2 with SMTP id\n a640c23a62f3a-b9d72682908mr56161166b.38.1775790233011; Thu, 09 Apr 2026\n 20:03:53 -0700 (PDT)","MIME-Version":"1.0","References":"<177564643888.23414.7922925369077631439-0@git.sr.ht>\n <177564643888.23414.7922925369077631439-4@git.sr.ht>","In-Reply-To":"<177564643888.23414.7922925369077631439-4@git.sr.ht>","From":"Alistair Francis <alistair23@gmail.com>","Date":"Fri, 10 Apr 2026 13:03:26 +1000","X-Gm-Features":"AQROBzCrdqCFnBECR58Dh0MQhuf3Hzq0yLMkiV0cvfGTYSj_imUqNxnpLI3Jeg0","Message-ID":"\n <CAKmqyKMp7R6QAxseL1kdq98aSVLNOfy1FR5qU7k2=pomc+RZmA@mail.gmail.com>","Subject":"Re: [PATCH qemu v2 4/7] ot_uart: replace individual IRQ fields with\n array, add missing IRQs","To":"\"~lexbaileylowrisc\" <lex.bailey@lowrisc.org>","Cc":"qemu-riscv@nongnu.org, Alistair Francis <Alistair.Francis@wdc.com>,\n  Paolo Bonzini <pbonzini@redhat.com>,\n =?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n  Palmer Dabbelt <palmer@dabbelt.com>, Weiwei Li <liwei1518@gmail.com>,\n  Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>,\n Liu Zhiwei <zhiwei_liu@linux.alibaba.com>,\n  Chao Liu <chao.liu.zevorn@gmail.com>, qemu-devel@nongnu.org,\n  Amit Kumar-Hermosillo <amitkh@google.com>, nabihestefan@google.com","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","Received-SPF":"pass client-ip=2a00:1450:4864:20::52c;\n envelope-from=alistair23@gmail.com; helo=mail-ed1-x52c.google.com","X-Spam_score_int":"-17","X-Spam_score":"-1.8","X-Spam_bar":"-","X-Spam_report":"(-1.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,\n FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}}]