From nobody Sat Nov 15 12:42:46 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1752560871; cv=none; d=zohomail.com; s=zohoarc; b=m0xHBz+//BjP6og72KcebRoVr526uTAkleQ+Txh7Y1Wq+YSFBmeo3aGFKAPqYX9OrbaYDk22XDYNctsMCeu/dwUXZMAg0jm8P4yb05K7f0NdVDqeIcEehr+0yrIbxHMPI8/t1R3trCPL/zWEGEDRTX4thSNqDwAkodnRSrbt/Rg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1752560871; 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=W2AWFB5Pyqah58zjvyeLVbkHACcax2vJ0ewRGYfkQd8=; b=EhkjtRQw7UzlWWx+RYmz3sYpK9zQJ+Cw5n6vHdhzKQ4GIXEVljR6tQTtZCDIxVAnA0S7YPP4yz3LpQyKoE+dR+2/DloeaT5g+UwwY7EyzUlFACOZmLC2SLLah7zqm4XNwSlK+57+l/FjqY0Aa8Vt5FApaWYRfFiaKF3AOPv2CAQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175256087154665.14448865459451; Mon, 14 Jul 2025 23:27:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ubZ2s-0004BL-CD; Tue, 15 Jul 2025 02:21:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ubZ21-0003aT-Gr for qemu-devel@nongnu.org; Tue, 15 Jul 2025 02:21:01 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ubZ1w-0007TA-GY for qemu-devel@nongnu.org; Tue, 15 Jul 2025 02:20:49 -0400 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-3a528243636so2737483f8f.3 for ; Mon, 14 Jul 2025 23:20:41 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b5e8dc2025sm14502765f8f.31.2025.07.14.23.20.38 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 14 Jul 2025 23:20:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1752560440; x=1753165240; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=W2AWFB5Pyqah58zjvyeLVbkHACcax2vJ0ewRGYfkQd8=; b=TukdXiaMJY4RBPOxrm54+aFfT39csaxfEQnjepRKYLOjvFvlg5jURFMwQzuxg99a7V qPTGlPj67AsozNIKEuwnFkuPNs0XhZ3MQxA+Dc347h67yAyfC7ansWi/R9rqbOKTlCEi O15bHvEQ2N0hRmxD0ChTpPMbkduhy6NKRwHuXkjXUhuVtzOhntD9D4rqEQfBNIQPyAkq 8SHbJEt4UJTOZT/rKwSzRMQ40UZ8sZZggRCBehGy+LqDnrk/9CUBCpAEBSfii/ecm/t0 udViYdLrUZ5wIV0B8QTwVrydUkppnF7PFzFeMgSE9cYXaU8dQVS92nqeAzBvu1Eg+f7B 0f2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752560440; x=1753165240; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=W2AWFB5Pyqah58zjvyeLVbkHACcax2vJ0ewRGYfkQd8=; b=QYEqptSlcmrZdsftXPhsPFEnsfV0TX79PhR2Litz8oe3IxDHs8rFnRNiRqYRezqjM3 eGbtgCx0azfEDo1SiJMJUeodUtCuCuCrTacGMp6VUwUksuM0PM/yR62I6Bqnk3nbuS4k bnvYWGsAv8Dx8jhZGQTvJpRLk9OR240iXlFVzoilQ/uCXmLgTPLBSChhYJnJwmma6tkz 07iA+O5ccnEJil6cXkcum3mEXSgdMoosit+mTXI8s9bplBgNThRfIWHy+X91c03VaBJE zceLJMRGYv49KJWgnItcDzZlHsxVvitdmj1lytLm8X1csa+6WY3Hpc//BweYT8Jnm3V3 NLHg== X-Gm-Message-State: AOJu0YyUoPqt6mLzTRH4YtaQTqvNfTI0afmN/XRUzMLCQY5FGERTI5j4 +I8fvdrjIvya+67YMbWAdncTEgodRJko6L3Vppo2DK0snMcuV6A3Bryb45cGp820WnRplESUuJ6 dIaVL X-Gm-Gg: ASbGncvZnC9mciTnvHLKZ+FC4o1OvWchaLdHXISt7JamTw3q8CNtLRciTyeHZoxi8VM qgjZIRgBrkUtiJbLNAoOW4LZs6o5Qvl+On1qX17WYLfc4rVRFPZVdwJv77s/P0qgDvnJNiW5THZ Jq+yrgwbkasLC8iN0Od5+5CqRTtnMjYiF5NJYy3gQG/BQLIIZIDZ8d4f7AoudR6E33g5l7WCnzL /1LPV6ssVtCueQS5daMdeVqrdrL//u9nmQ/1hTYbpEUml2vEZhbFUDN4+oLPUUph+nvtLpphqzX 4Om3NfZ8wYN2hR9XqG6jBft18ohVcWF6u76B5SadGFxfwozs+axm5KZDdej+z+r23JRAT2o2wta 791MUgsHHENeINlMCs7VW5Z9ifV24FF7V/BwprKtVPxCKaJPSwLShJgYboI1U7tIB8szISTVeSr F5Fsvlufg= X-Google-Smtp-Source: AGHT+IH2njBaVNZQOwFvE3Wq0RqZ+qCbBD9uRBscHqX9O9Z7FHe7Bx/nXB7qRK/pRO4kV/VqEU5b4g== X-Received: by 2002:adf:ea45:0:b0:3a8:38b3:1aa1 with SMTP id ffacd0b85a97d-3b5f18cf218mr10693915f8f.27.1752560439711; Mon, 14 Jul 2025 23:20:39 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Mark Cave-Ayland , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Fam Zheng Subject: [PULL 16/17] esp.c: add asc_mode property to indicate the current ESP mode Date: Tue, 15 Jul 2025 08:19:16 +0200 Message-ID: <20250715061918.44971-17-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250715061918.44971-1-philmd@linaro.org> References: <20250715061918.44971-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42f; envelope-from=philmd@linaro.org; helo=mail-wr1-x42f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @linaro.org) X-ZM-MESSAGEID: 1752560873228116600 From: Mark Cave-Ayland Add a new asc_mode property to ESPState which indicates the current mode of the ESP and update the ESP state machine accordingly. Bump the vmstate version and include migration logic to ensure that asc_mode is set to initiator mode such that any commands in progress will always continue. Signed-off-by: Mark Cave-Ayland Tested-by: Philippe Mathieu-Daud=C3=A9 Message-ID: <20250711204636.542964-7-mark.cave-ayland@ilande.co.uk> Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- include/hw/scsi/esp.h | 7 +++++++ hw/scsi/esp.c | 21 ++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index c9afcb7cac0..6327060c7c7 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -14,6 +14,12 @@ typedef void (*ESPDMAMemoryReadWriteFunc)(void *opaque, = uint8_t *buf, int len); #define ESP_FIFO_SZ 16 #define ESP_CMDFIFO_SZ 32 =20 +enum ESPASCMode { + ESP_ASC_MODE_DIS =3D 0, /* Disconnected */ + ESP_ASC_MODE_INI =3D 1, /* Initiator */ + ESP_ASC_MODE_TGT =3D 2 /* Target */ +}; + #define TYPE_ESP "esp" OBJECT_DECLARE_SIMPLE_TYPE(ESPState, ESP) =20 @@ -38,6 +44,7 @@ struct ESPState { uint8_t cmdfifo_cdb_offset; uint8_t lun; uint32_t do_cmd; + uint8_t asc_mode; =20 bool data_ready; int dma_enabled; diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 1c7bad8fc02..4aa58f9e485 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -275,6 +275,7 @@ static int esp_select(ESPState *s) if (!s->current_dev) { /* No such drive */ s->rregs[ESP_RSTAT] =3D 0; + s->asc_mode =3D ESP_ASC_MODE_DIS; s->rregs[ESP_RINTR] =3D INTR_DC; esp_raise_irq(s); return -1; @@ -284,6 +285,7 @@ static int esp_select(ESPState *s) * Note that we deliberately don't raise the IRQ here: this will be do= ne * either in esp_transfer_data() or esp_command_complete() */ + s->asc_mode =3D ESP_ASC_MODE_INI; return 0; } =20 @@ -308,6 +310,7 @@ static void do_command_phase(ESPState *s) if (!current_lun) { /* No such drive */ s->rregs[ESP_RSTAT] =3D 0; + s->asc_mode =3D ESP_ASC_MODE_DIS; s->rregs[ESP_RINTR] =3D INTR_DC; s->rregs[ESP_RSEQ] =3D SEQ_0; esp_raise_irq(s); @@ -1102,6 +1105,7 @@ void esp_hard_reset(ESPState *s) fifo8_reset(&s->cmdfifo); s->dma =3D 0; s->dma_cb =3D NULL; + s->asc_mode =3D ESP_ASC_MODE_DIS; =20 s->rregs[ESP_CFG1] =3D 7; } @@ -1170,6 +1174,7 @@ static void esp_run_cmd(ESPState *s) break; case CMD_MSGACC: trace_esp_mem_writeb_cmd_msgacc(cmd); + s->asc_mode =3D ESP_ASC_MODE_DIS; s->rregs[ESP_RINTR] |=3D INTR_DC; s->rregs[ESP_RSEQ] =3D 0; s->rregs[ESP_RFLAGS] =3D 0; @@ -1337,6 +1342,14 @@ static bool esp_is_between_version_5_and_6(void *opa= que, int version_id) return version_id >=3D 5 && version_id <=3D 6; } =20 +static bool esp_is_version_8(void *opaque, int version_id) +{ + ESPState *s =3D ESP(opaque); + + version_id =3D MIN(version_id, s->mig_version_id); + return version_id >=3D 8; +} + int esp_pre_save(void *opaque) { ESPState *s =3D ESP(object_resolve_path_component( @@ -1368,13 +1381,18 @@ static int esp_post_load(void *opaque, int version_= id) } } =20 + if (version_id < 8) { + /* Assume initiator mode to allow all commands to continue */ + s->asc_mode =3D ESP_ASC_MODE_INI; + } + s->mig_version_id =3D vmstate_esp.version_id; return 0; } =20 const VMStateDescription vmstate_esp =3D { .name =3D "esp", - .version_id =3D 7, + .version_id =3D 8, .minimum_version_id =3D 3, .post_load =3D esp_post_load, .fields =3D (const VMStateField[]) { @@ -1406,6 +1424,7 @@ const VMStateDescription vmstate_esp =3D { esp_is_between_version_5_and_6), VMSTATE_UINT8_TEST(lun, ESPState, esp_is_version_6), VMSTATE_BOOL(drq_state, ESPState), + VMSTATE_UINT8_TEST(asc_mode, ESPState, esp_is_version_8), VMSTATE_END_OF_LIST() }, }; --=20 2.49.0