From nobody Wed Nov 12 14:59:25 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1571553545; cv=none; d=zoho.com; s=zohoarc; b=mK1newwWHO/9EmizIV2GhbC6c+oJtlwDG2GHe9mtBPAd8rrP42zL99XqaMBmUfeNlWAiktZr6BlDMFCOIGTFKeTrcQZGnZpvhvX5vFxFvoNyJUd6DT4yuVwfbbQzB30JjHAMgs5EOLzyQyn21gVeblVxcTrvSDAtZ+SD9IRomrU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1571553545; h=Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=qKAb18eIuousbFVAtmAKlNb+GEQxdTv5Etq0k88S7zw=; b=SojMqm6Ufu/BUMKMyWom+MtMQ4OAePcOOKYXlCr6VYxtvFarcrVENbrDaDhDLzYOTKs+DAtJD5HcXuC9phnBMz/yA4fRfz/qnUynGtblYAKFbUjZrMvNSB33KXKnEXTquocIATqH8s263ChEDlvnHARpwAjhiEx0xex7HUaE9UQ= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1571553544570439.1934445365023; Sat, 19 Oct 2019 23:39:04 -0700 (PDT) Received: from localhost ([::1]:52088 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iM4rn-0000TT-EQ for importer@patchew.org; Sun, 20 Oct 2019 02:39:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50111) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iM4qz-0008DX-SG for qemu-devel@nongnu.org; Sun, 20 Oct 2019 02:38:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iM4qy-00065m-I2 for qemu-devel@nongnu.org; Sun, 20 Oct 2019 02:38:13 -0400 Received: from smtp.duncanthrax.net ([2001:470:70c5:1111::170]:37685) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iM4qy-00064f-0k; Sun, 20 Oct 2019 02:38:12 -0400 Received: from hsi-kbw-046-005-233-221.hsi8.kabel-badenwuerttemberg.de ([46.5.233.221] helo=x280.stackframe.org) by smtp.eurescom.eu with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1iM4qw-00005V-4I; Sun, 20 Oct 2019 08:38:10 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=duncanthrax.net; s=dkim; h=Content-Transfer-Encoding:MIME-Version: Message-Id:Date:Subject:Cc:To:From; bh=qKAb18eIuousbFVAtmAKlNb+GEQxdTv5Etq0k88S7zw=; b=aELDLvmnGxAfnDse1dJhnNXCxU LF9/PeKOry3Z21pgynmX4UywgWNc4Pg8p+sBCCCuNv+Syi1WDJK4gycqOJ17n+6okj2Mj/7Q4rp8M uEIWdU0hO58PS6WNv0vlLeyrSLN5CGV86B9rAhdY+3LMA2iLGA/ZlsFfn59MxJfT3I5s=; From: Sven Schnelle To: John Snow Subject: [PATCH] fdc: support READ command with VERIFY DMA mode Date: Sun, 20 Oct 2019 08:38:00 +0200 Message-Id: <20191020063800.29208-1-svens@stackframe.org> X-Mailer: git-send-email 2.23.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2001:470:70c5:1111::170 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Sven Schnelle , qemu-devel@nongnu.org, "open list:Floppy" , Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" While working on the Tulip driver i tried to write some Teledisk images to a floppy image which didn't work. Turned out that Teledisk checks the writt= en data by issuing a READ command to the FDC but running the DMA controller in VERIFY mode. As we ignored the DMA request in that case, the DMA transfer never finished, and Teledisk reported an error. Signed-off-by: Sven Schnelle Reviewed-by: John Snow --- hw/block/fdc.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/hw/block/fdc.c b/hw/block/fdc.c index ac5d31e8c1..8a1228df78 100644 --- a/hw/block/fdc.c +++ b/hw/block/fdc.c @@ -1733,7 +1733,8 @@ static void fdctrl_start_transfer(FDCtrl *fdctrl, int= direction) dma_mode_ok =3D (dma_mode =3D=3D ISADMA_TRANSFER_WRITE); break; case FD_DIR_READ: - dma_mode_ok =3D (dma_mode =3D=3D ISADMA_TRANSFER_READ); + dma_mode_ok =3D (dma_mode =3D=3D ISADMA_TRANSFER_READ) || + (dma_mode =3D=3D ISADMA_TRANSFER_VERIFY); break; case FD_DIR_VERIFY: dma_mode_ok =3D true; @@ -1835,8 +1836,11 @@ static int fdctrl_transfer_handler (void *opaque, in= t nchan, switch (fdctrl->data_dir) { case FD_DIR_READ: /* READ commands */ - k->write_memory(fdctrl->dma, nchan, fdctrl->fifo + rel_pos, - fdctrl->data_pos, len); + if (k->get_transfer_mode(fdctrl->dma, fdctrl->dma_chann) !=3D + ISADMA_TRANSFER_VERIFY) { + k->write_memory(fdctrl->dma, nchan, fdctrl->fifo + rel_pos, + fdctrl->data_pos, len); + } break; case FD_DIR_WRITE: /* WRITE commands */ --=20 2.23.0