From patchwork Tue May 21 06:53:03 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Crosthwaite X-Patchwork-Id: 245216 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 50A632C00AA for ; Tue, 21 May 2013 16:57:57 +1000 (EST) Received: from localhost ([::1]:54586 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UegWB-0001D1-Kn for incoming@patchwork.ozlabs.org; Tue, 21 May 2013 02:57:55 -0400 Received: from eggs.gnu.org ([208.118.235.92]:56650) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UegVj-000164-E3 for qemu-devel@nongnu.org; Tue, 21 May 2013 02:57:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UegVe-0003EO-Qh for qemu-devel@nongnu.org; Tue, 21 May 2013 02:57:27 -0400 Received: from mail-pb0-x232.google.com ([2607:f8b0:400e:c01::232]:40338) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UegVe-0003EF-KK for qemu-devel@nongnu.org; Tue, 21 May 2013 02:57:22 -0400 Received: by mail-pb0-f50.google.com with SMTP id wy17so305441pbc.23 for ; Mon, 20 May 2013 23:57:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references:x-gm-message-state; bh=4DRYsim6GicMGfnza06CihPXKTqivOhz5lc3DRKMce4=; b=OWT442Ahps3+XjefeTxCwIMz/bkC5jfkeNPk9T/mWbu+RcsXUKvPtziS+cD0P6uhCm JJTV3sagRabW0jvkvrgSpjpSIgEUUHsAIvSmYD9K3sG2wG4X6VJ6iI+8FGY0VniXnESe CxM9K7jd9o/6wILXewFEcWu99ZtKAZajaQhL07yZlkJPGhIMY+UXI0qp4i/NwMSHR8Oq BP4A2NLsnaodRsX4BH+yi3kWfsWf/RMJjPaFIYkyjWPig2UYNT61uTn8VzDul2rUX3Lx TVy+MB5ev8xpTbrp/1lVp0H7yjuSs2Gig9Zs1BAJt+q2LxauyB6TJyvyIV9tLVsaNn71 qoIA== X-Received: by 10.68.1.6 with SMTP id 6mr1183119pbi.146.1369119441739; Mon, 20 May 2013 23:57:21 -0700 (PDT) Received: from localhost ([203.126.243.116]) by mx.google.com with ESMTPSA id qh4sm2077101pac.8.2013.05.20.23.57.18 for (version=TLSv1.1 cipher=RC4-SHA bits=128/128); Mon, 20 May 2013 23:57:20 -0700 (PDT) From: peter.crosthwaite@xilinx.com To: qemu-devel@nongnu.org Date: Tue, 21 May 2013 16:53:03 +1000 Message-Id: <33f283ecd38bc94fe7a464f71cce4a42aeae1579.1369118806.git.peter.crosthwaite@xilinx.com> X-Mailer: git-send-email 1.8.3.rc1.44.gb387c77.dirty In-Reply-To: References: X-Gm-Message-State: ALoCoQnG7I4pzTrf5rZ3SRI3I0hvi8nLYDsAW2+awUSwHLLf4wjCc4185sks+rc8pBilqtVRdRUM X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400e:c01::232 Cc: peter.maydell@linaro.org, i.mitsyanko@samsung.com, edgar.iglesias@gmail.com Subject: [Qemu-devel] [PATCH arm-devs v1 5/5] sd/sdhci:ADMA: fix interrupt X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Peter Crosthwaite The end of transfer check was occurring and potentially returning before the interrupt flag was checked. This means the interrupt will be missed if it occurs on the last packet. Fix by checking for the interrupt before checking for the end of transfer. Signed-off-by: Peter Crosthwaite --- hw/sd/sdhci.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index 15345dc..e64899c 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -730,6 +730,15 @@ static void sdhci_do_adma(SDHCIState *s) break; } + if (dscr.attr & SDHC_ADMA_ATTR_INT) { + DPRINT_L1("ADMA interrupt: admasysaddr=0x%lx\n", s->admasysaddr); + if (s->norintstsen & SDHC_NISEN_DMA) { + s->norintsts |= SDHC_NIS_DMA; + } + + sdhci_update_irq(s); + } + /* ADMA transfer terminates if blkcnt == 0 or by END attribute */ if (((s->trnmod & SDHC_TRNS_BLK_CNT_EN) && (s->blkcnt == 0)) || (dscr.attr & SDHC_ADMA_ATTR_END)) { @@ -752,15 +761,6 @@ static void sdhci_do_adma(SDHCIState *s) return; } - if (dscr.attr & SDHC_ADMA_ATTR_INT) { - DPRINT_L1("ADMA interrupt: admasysaddr=0x%lx\n", s->admasysaddr); - if (s->norintstsen & SDHC_NISEN_DMA) { - s->norintsts |= SDHC_NIS_DMA; - } - - sdhci_update_irq(s); - return; - } } /* we have unfinished business - reschedule to continue ADMA */