From nobody Sun May 5 19:32:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631253490871801.521201503023; Thu, 9 Sep 2021 22:58:10 -0700 (PDT) Received: from localhost ([::1]:33924 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mOZY9-0001EH-Mo for importer@patchew.org; Fri, 10 Sep 2021 01:58:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45222) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mOZWc-0007L2-Kl for qemu-devel@nongnu.org; Fri, 10 Sep 2021 01:56:34 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:33515) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mOZWb-0002EZ-2P for qemu-devel@nongnu.org; Fri, 10 Sep 2021 01:56:34 -0400 Received: by mail-pj1-x102d.google.com with SMTP id mi6-20020a17090b4b4600b00199280a31cbso620393pjb.0 for ; Thu, 09 Sep 2021 22:56:32 -0700 (PDT) Received: from localhost.localdomain (123-193-74-252.dynamic.kbronet.com.tw. [123.193.74.252]) by smtp.gmail.com with ESMTPSA id v17sm3739101pff.6.2021.09.09.22.56.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Sep 2021 22:56:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vlSo0PzjSFDdQC+eNe3BvcniCYCo3WbCGNs2dWZA46I=; b=ILz3Z3oHWz22T8O93YFbmMzfkZr3GXGU0hsbBreJ+rubc1nKdNU1RwuyfL52ZwMW5a KihXBpvh2VGWs493mz8Lno31BKO624kgEpbyrwxSJQXndOPzPZKY/DwTRfAd4rcRIwJ7 rfftFziXn5uH9mCptyCEeeFW1yPcHDdMqzsLuETcB1sQuHxaqK7kb5HyIocxdyDX5D5C r8r0lrzV6oQ+4Ro7i2562D+p3qES27jSWwpYpg2T+BFfodIlPR83YoQlDWJqgCPY/DyM Vshd+gPrJ0ipCZzXC6wiix0lbfXBd75MZylFAMfs37qDmUOsRXRXWAQcwje+DbGIm0Zw 4amA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vlSo0PzjSFDdQC+eNe3BvcniCYCo3WbCGNs2dWZA46I=; b=I6SQcvaOObCmvYo0v0/9xrWaEZgUimgbzt7gBd1tnNcWz3bQLiwDvoB8+Mf+FJ3psS lDUxxUF97M/FQKAKkTo0kcIcTUhvEFMnB0jV8Ad6NIk6BPhq+26A+wYIKasf5SIbaiSK BcYrWwwQLoCGDgfU9UUy6tBEynt7lWrWoVGDgs2qTxFc1BdBOJzAs79asatz3BxkBv8J K0DvIpTlJEDfI0yV6oiHrWbTPEaGzGis4CsYkaqVwYqQGp1STFtUUHLiFYwjz1aVcyBw wj+PKUBiyiS6+m7kuBn91jvqVQwKm6wuWgfPnHqfFuK+LH7+L5OCVw/2t01OxyDEY6Q6 HWmA== X-Gm-Message-State: AOAM531VaxMAZLkID6fnX3jrVSJe+cMLOfGfem2ZoKw7uQgSUKAWZ2Ny fO1Qii0J4mCzIlxvODbljk9orD17biLALK3X X-Google-Smtp-Source: ABdhPJxZt5i0OufSDSEvo1Dwm8WEgm49Zx9T2oHCGjmOUm9JkKLB+qqehsgt8Kl83wYkuCNjqD3+vw== X-Received: by 2002:a17:90b:4d85:: with SMTP id oj5mr1952511pjb.41.1631253391186; Thu, 09 Sep 2021 22:56:31 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH 1/4] hw/dma: sifive_pdma: reset Next* registers when Control.claim is set Date: Fri, 10 Sep 2021 13:56:13 +0800 Message-Id: <20210910055620.946625-2-frank.chang@sifive.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210910055620.946625-1-frank.chang@sifive.com> References: <20210910055620.946625-1-frank.chang@sifive.com> MIME-Version: 1.0 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=2607:f8b0:4864:20::102d; envelope-from=frank.chang@sifive.com; helo=mail-pj1-x102d.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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Frank Chang , Palmer Dabbelt , Bin Meng , Alistair Francis , Max Hsu Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631253492503100001 Content-Type: text/plain; charset="utf-8" From: Frank Chang Setting Control.claim clears all of the chanel's Next registers. This is effective only when Control.claim is set from 0 to 1. Signed-off-by: Frank Chang Tested-by: Max Hsu Reviewed-by: Bin Meng Tested-by: Bin Meng --- hw/dma/sifive_pdma.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hw/dma/sifive_pdma.c b/hw/dma/sifive_pdma.c index 9b2ac2017d9..e723db9d700 100644 --- a/hw/dma/sifive_pdma.c +++ b/hw/dma/sifive_pdma.c @@ -54,6 +54,9 @@ #define DMA_EXEC_DST 0x110 #define DMA_EXEC_SRC 0x118 =20 +#define CONFIG_WRSZ_DEFAULT 6 +#define CONFIG_RDSZ_DEFAULT 6 + enum dma_chan_state { DMA_CHAN_STATE_IDLE, DMA_CHAN_STATE_STARTED, @@ -221,6 +224,7 @@ static void sifive_pdma_write(void *opaque, hwaddr offs= et, { SiFivePDMAState *s =3D opaque; int ch =3D SIFIVE_PDMA_CHAN_NO(offset); + bool claimed; =20 if (ch >=3D SIFIVE_PDMA_CHANS) { qemu_log_mask(LOG_GUEST_ERROR, "%s: Invalid channel no %d\n", @@ -231,6 +235,17 @@ static void sifive_pdma_write(void *opaque, hwaddr off= set, offset &=3D 0xfff; switch (offset) { case DMA_CONTROL: + claimed =3D !!s->chan[ch].control & CONTROL_CLAIM; + + if (!claimed && (value & CONTROL_CLAIM)) { + /* reset Next* registers */ + s->chan[ch].next_config =3D (CONFIG_RDSZ_DEFAULT << CONFIG_RDS= Z_SHIFT) | + (CONFIG_WRSZ_DEFAULT << CONFIG_WRSZ_= SHIFT); + s->chan[ch].next_bytes =3D 0; + s->chan[ch].next_dst =3D 0; + s->chan[ch].next_src =3D 0; + } + s->chan[ch].control =3D value; =20 if (value & CONTROL_RUN) { --=20 2.25.1 From nobody Sun May 5 19:32:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631253568110470.98107306603185; Thu, 9 Sep 2021 22:59:28 -0700 (PDT) Received: from localhost ([::1]:38548 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mOZZP-0004Jb-3V for importer@patchew.org; Fri, 10 Sep 2021 01:59:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45264) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mOZWh-0007U9-RP for qemu-devel@nongnu.org; Fri, 10 Sep 2021 01:56:40 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]:41742) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mOZWf-0002Lf-3r for qemu-devel@nongnu.org; Fri, 10 Sep 2021 01:56:39 -0400 Received: by mail-pf1-x434.google.com with SMTP id x7so927013pfa.8 for ; Thu, 09 Sep 2021 22:56:36 -0700 (PDT) Received: from localhost.localdomain (123-193-74-252.dynamic.kbronet.com.tw. [123.193.74.252]) by smtp.gmail.com with ESMTPSA id v17sm3739101pff.6.2021.09.09.22.56.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Sep 2021 22:56:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FDLzGUOT6C8RfO+UO6QhrMPhIy0i56XefPIavUICbBo=; b=ljWj/BM33cT+TsQBFb/KjacYm0VfCaKCKPDzYmZj2VCo9hzjEM7zcr3o3dt6jblgz/ rtZuZh68KS7h2uWlhMrfdgfbltkilJO0ewieKxnd/UBJ21tzT3jQ3T0vZ/JPn6b9xpOh 0wXhYhVblBYo+1aeEipHTwO1eSxy/InBw36lfkrHVbz8EizJEx3diE2EEHRWRWQkwSRf jeERVMVhFvkFIuaiXB1YCwoFTYaEDj6AcCAfjw5MYWAq7zk8GrM1K+0vm6NTieoU6F/a gaBN3geaeQxCYc57yllyHu0pXlUNOIGLKLI2z2TDJ8QUSgEZEqLmitmMzE39+BxbfsGw 5mdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FDLzGUOT6C8RfO+UO6QhrMPhIy0i56XefPIavUICbBo=; b=1nkthP3HCtrY+rHmhF4no7safs6bIHokEi/1iqOnFubY8TIEghggxRt4vP3vbe5Fx1 ahTgnAJo3CsCeMPQmgCKDZ1flVWk4TWljn1DJCbwwn+STD1wcNCI9sKhLYD5TFza70LV 0d3nWFxdsmVsjQhb/lNkLDl2lScTeAxetB+BiR0VFD3P8GoBvMDsGrGV/HlKYOTgA/Bo /D8bd4vGa/uTCACWbjgQlE8vo8LKL6CxDFXf8Ovof09LtYZOG2BYZQq3p4Gco+Bg9duq nJCPTgY33YJD8/0ufVCqy1YeDGCvvoSnDmeKPTHmqytnqH9tJ3O193DjFHtIaUSAsM0z sZdA== X-Gm-Message-State: AOAM532rrZGXW+y6DqOrUdkZPFgyVUM8OPoE5QWWDdJ7RAiIGdODGBMg IH6mspu2sziCweMaAE65CBOdsGyL2MFDv9mb X-Google-Smtp-Source: ABdhPJzyw/YkbGj0eLNS8lWlRG4uoEazA4n7ik72ETGWuAICvayRN+QTCs8AVJYF2O693jJSHsGVUg== X-Received: by 2002:a63:4384:: with SMTP id q126mr5931242pga.1.1631253395683; Thu, 09 Sep 2021 22:56:35 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH 2/4] hw/dma: sifive_pdma: claim bit must be set before DMA transactions Date: Fri, 10 Sep 2021 13:56:14 +0800 Message-Id: <20210910055620.946625-3-frank.chang@sifive.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210910055620.946625-1-frank.chang@sifive.com> References: <20210910055620.946625-1-frank.chang@sifive.com> MIME-Version: 1.0 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=2607:f8b0:4864:20::434; envelope-from=frank.chang@sifive.com; helo=mail-pf1-x434.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=unavailable autolearn_force=no X-Spam_action: no action 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: Frank Chang , Palmer Dabbelt , Bin Meng , Alistair Francis , Max Hsu Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631253570284100001 Content-Type: text/plain; charset="utf-8" From: Frank Chang Real PDMA must have Control.claim bit to be set before Control.run bit is set to start any DMA transactions. Otherwise nothing will be transferred. The following result is PDMA tested in U-boot on Unmatched board: =3D> mw.l 0x3000000 0x0 <=3D Disclaim channel 0 (Channel 0 is not claimed) =3D> mw.l 0x3000004 0x55000000 <=3D wsize =3D rsize =3D 5 (2^= 5 =3D 32 bytes) =3D> mw.q 0x3000008 0x2 <=3D NextBytes =3D 2 =3D> mw.q 0x3000010 0x84000000 <=3D NextDestination =3D 0x840= 00000 =3D> mw.q 0x3000018 0x84001000 <=3D NextSource =3D 0x84001000 =3D> mw.l 0x84000000 0x87654321 <=3D Fill test data to dst =3D> mw.l 0x84001000 0x12345678 <=3D Fill test data to src =3D> md.l 0x84000000 1; md.l 0x84001000 1 <=3D Dump src/dst memory conte= nts 84000000: 87654321 !Ce. 84001000: 12345678 xV4. =3D> md.l 0x3000000 8 <=3D Dump PDMA status 03000000: 00000000 55000000 00000002 00000000 .......U........ 03000010: 84000000 00000000 84001000 00000000 ................ =3D> mw.l 0x3000000 0x3 <=3D Set channel 0 run and cla= im bits =3D> md.l 0x3000000 8 <=3D Dump PDMA status 03000000: 00000001 66000000 00000000 00000000 .......f........ 03000010: 00000000 00000000 00000000 00000000 ................ =3D> md.l 0x84000000 1; md.l 0x84001000 1 <=3D Dump src/dst memory conte= nts 84000000: 87654321 !Ce. 84001000: 12345678 xV4. Signed-off-by: Frank Chang Tested-by: Max Hsu Reviewed-by: Bin Meng Tested-by: Bin Meng --- hw/dma/sifive_pdma.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/dma/sifive_pdma.c b/hw/dma/sifive_pdma.c index e723db9d700..1311b80a5cd 100644 --- a/hw/dma/sifive_pdma.c +++ b/hw/dma/sifive_pdma.c @@ -248,6 +248,15 @@ static void sifive_pdma_write(void *opaque, hwaddr off= set, =20 s->chan[ch].control =3D value; =20 + /* + * If channel was not claimed before run bit is set, + * DMA won't run. + */ + if (!claimed) { + s->chan[ch].control &=3D ~CONTROL_RUN; + return; + } + if (value & CONTROL_RUN) { sifive_pdma_run(s, ch); } --=20 2.25.1 From nobody Sun May 5 19:32:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631253493778156.98723241823382; Thu, 9 Sep 2021 22:58:13 -0700 (PDT) Received: from localhost ([::1]:34154 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mOZYC-0001Nb-PR for importer@patchew.org; Fri, 10 Sep 2021 01:58:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45330) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mOZWm-0007XL-6s for qemu-devel@nongnu.org; Fri, 10 Sep 2021 01:56:44 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]:33535) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mOZWj-0002RQ-3f for qemu-devel@nongnu.org; Fri, 10 Sep 2021 01:56:43 -0400 Received: by mail-pg1-x52a.google.com with SMTP id u18so908808pgf.0 for ; Thu, 09 Sep 2021 22:56:40 -0700 (PDT) Received: from localhost.localdomain (123-193-74-252.dynamic.kbronet.com.tw. [123.193.74.252]) by smtp.gmail.com with ESMTPSA id v17sm3739101pff.6.2021.09.09.22.56.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Sep 2021 22:56:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/kfYupI4luyxYQHnvH9qyv36mrOPDMHslZYxILJ0WHM=; b=LxdWXNsO6WzkFuL07dWRleCmjv9HLmAFDo9ZnVlNfQRi7LlEA/L7nUhFGbs1FEIqPd HhC2DBFzcf2n6KK8Xfo6ObXkV86OO9okA8GYIyJoXsaWc9ZugBer4NaITsrDRqGxexAV 21pwjvzk4+rN7RtHSdhBZjVp66GwY5M5FwGVbCiRwHHZ8ejg3d+CJokIUIwMqJ3kM19e cIZnpk7a26P6KjNcQwOZDJHloDP3iadfs0AFiM1pEnvKfZmorkh1vqdqeO6SpAyxEfFz khJfF2sGZL5tmPwxJUFETdxTLtvbdDdr1QAU1PVRmQZTQdi9rCHiIAz2OC30qixn1/fr RgXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/kfYupI4luyxYQHnvH9qyv36mrOPDMHslZYxILJ0WHM=; b=DEhwttU7G27AfQrIqUHbRMFhIoVVLRHiK8kY54/e52P6yAwSTpxXGU7sWngGJle0gg V7/5AscvNoHsRwZS45qaXAGcwcNR5GJVFT7va9LjgQ1Xa/o9lJwV3mRZvE2mP9cGMAQi Egtg8MepxWo/HWwscUSwkRuoXyFPvc/k8ucoBBrsoPpZnbnKxjyWw35DoJJHA4gVt3Va 67oooWKh+lfE63zy1Rpdg2/meKhWrNhpAaLYIS3URIOfqPHhgHmqU0SnlU85Si9QIMcb kmapBXLJ1Tf7ztHZdzK9aQeR9RlszDmPVI0eGaLfSGuSv2qlbtdKLMHH5QG7semz+/OS 9NhQ== X-Gm-Message-State: AOAM530U28xJVEDHrTCXzoTEOrIMyhqUwxIDGpq7ekSa0geiDyPSwJtE 4s4w8fHTfhnvQwozAtjHDxYDTlbk56we/XPQ X-Google-Smtp-Source: ABdhPJy85hbkqqsx+c+2BiJmPxBqqza0qbdKnz/Y6fDOvFO5tnQiSVolUhH07dbRvOgiqzjNNnf5SQ== X-Received: by 2002:a05:6a00:a10:b0:412:448c:89c7 with SMTP id p16-20020a056a000a1000b00412448c89c7mr6556277pfh.83.1631253399685; Thu, 09 Sep 2021 22:56:39 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH 3/4] hw/dma: sifive_pdma: allow non-multiple transaction size transactions Date: Fri, 10 Sep 2021 13:56:15 +0800 Message-Id: <20210910055620.946625-4-frank.chang@sifive.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210910055620.946625-1-frank.chang@sifive.com> References: <20210910055620.946625-1-frank.chang@sifive.com> MIME-Version: 1.0 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=2607:f8b0:4864:20::52a; envelope-from=frank.chang@sifive.com; helo=mail-pg1-x52a.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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Frank Chang , Bin Meng , Green Wan , Max Hsu , Palmer Dabbelt , Alistair Francis Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631253494702100001 Content-Type: text/plain; charset="utf-8" From: Green Wan Real PDMA is able to deal with non-multiple transaction size transactions. The following result is PDMA tested in U-boot on Unmatched board: =3D> mw.l 0x3000000 0x0 <=3D Disclaim channel 0 =3D> mw.l 0x3000000 0x1 <=3D Claim channel 0 =3D> mw.l 0x3000004 0x11000000 <=3D wsize =3D rsize =3D 1 (2^= 1 =3D 2 bytes) =3D> mw.q 0x3000008 0x3 <=3D NextBytes =3D 3 =3D> mw.q 0x3000010 0x84000000 <=3D NextDestination =3D 0x840= 00000 =3D> mw.q 0x3000018 0x84001000 <=3D NextSource =3D 0x84001000 =3D> mw.l 0x84000000 0x87654321 <=3D Fill test data to dst =3D> mw.l 0x84001000 0x12345678 <=3D Fill test data to src =3D> md.l 0x84000000 1; md.l 0x84001000 1 <=3D Dump src/dst memory conte= nts 84000000: 87654321 !Ce. 84001000: 12345678 xV4. =3D> md.l 0x3000000 8 <=3D Dump PDMA status 03000000: 00000001 11000000 00000003 00000000 ................ 03000010: 84000000 00000000 84001000 00000000 ................ =3D> mw.l 0x3000000 0x3 <=3D Set channel 0 run and cla= im bits =3D> md.l 0x3000000 8 <=3D Dump PDMA status 03000000: 40000001 11000000 00000003 00000000 ...@............ 03000010: 84000000 00000000 84001000 00000000 ................ =3D> md.l 0x84000000 1; md.l 0x84001000 1 <=3D Dump src/dst memory conte= nts 84000000: 87345678 xV4. 84001000: 12345678 xV4. Signed-off-by: Green Wan Reviewed-by: Frank Chang Tested-by: Max Hsu Signed-off-by: Frank Chang Reviewed-by: Bin Meng Tested-by: Bin Meng --- hw/dma/sifive_pdma.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/hw/dma/sifive_pdma.c b/hw/dma/sifive_pdma.c index 1311b80a5cd..d6980fbbd62 100644 --- a/hw/dma/sifive_pdma.c +++ b/hw/dma/sifive_pdma.c @@ -70,7 +70,7 @@ static void sifive_pdma_run(SiFivePDMAState *s, int ch) uint64_t dst =3D s->chan[ch].next_dst; uint64_t src =3D s->chan[ch].next_src; uint32_t config =3D s->chan[ch].next_config; - int wsize, rsize, size; + int wsize, rsize, size, remainder; uint8_t buf[64]; int n; =20 @@ -102,11 +102,7 @@ static void sifive_pdma_run(SiFivePDMAState *s, int ch) size =3D 6; } size =3D 1 << size; - - /* the bytes to transfer should be multiple of transaction size */ - if (bytes % size) { - goto error; - } + remainder =3D bytes % size; =20 /* indicate a DMA transfer is started */ s->chan[ch].state =3D DMA_CHAN_STATE_STARTED; @@ -127,6 +123,14 @@ static void sifive_pdma_run(SiFivePDMAState *s, int ch) s->chan[ch].exec_bytes -=3D size; } =20 + if (remainder) { + cpu_physical_memory_read(s->chan[ch].exec_src, buf, remainder); + cpu_physical_memory_write(s->chan[ch].exec_dst, buf, remainder); + s->chan[ch].exec_src +=3D remainder; + s->chan[ch].exec_dst +=3D remainder; + s->chan[ch].exec_bytes -=3D remainder; + } + /* indicate a DMA transfer is done */ s->chan[ch].state =3D DMA_CHAN_STATE_DONE; s->chan[ch].control &=3D ~CONTROL_RUN; --=20 2.25.1 From nobody Sun May 5 19:32:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631253664509880.2042598638475; Thu, 9 Sep 2021 23:01:04 -0700 (PDT) Received: from localhost ([::1]:40834 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mOZax-0005pQ-EJ for importer@patchew.org; Fri, 10 Sep 2021 02:01:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45364) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mOZWo-0007Za-4V for qemu-devel@nongnu.org; Fri, 10 Sep 2021 01:56:47 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]:35806) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mOZWm-0002Vg-Lf for qemu-devel@nongnu.org; Fri, 10 Sep 2021 01:56:45 -0400 Received: by mail-pf1-x430.google.com with SMTP id j16so942914pfc.2 for ; Thu, 09 Sep 2021 22:56:44 -0700 (PDT) Received: from localhost.localdomain (123-193-74-252.dynamic.kbronet.com.tw. [123.193.74.252]) by smtp.gmail.com with ESMTPSA id v17sm3739101pff.6.2021.09.09.22.56.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Sep 2021 22:56:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mgUzr2DG36yd+UgA/DpY4Gf1qGjCBL2FzKoD7fd8uA0=; b=iIc9sxUji/Pz0jHXLXLrJo0d5KWVyYJlEm2jDimLvNPmdMANVgztrsxfClWMDlKaNn 4QS7V+Ca+Z3rh8wYua6VY6o7Tj9als8Ol5qu2R2W/Ms8sfIj2M/HXjJdFcO81dqowxV+ mQAFIWhm9ek8iymxWt+33jtcxczMk7hIhnZACfL6qgt3x3CbTk25YSiAH26YooJ2nbbv KybcPNAnLf7ujO09NFh/tNZbm0yce9pL473DuXv7T3eOYLMziKrElfWkQimJkz42GS8b Z3AUJPWQI+iJxYPZSFSdayf5KleQERl3XBkcqw2XjYFlY7fiAt76T8f0N+LG/VzZ8tyQ drCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mgUzr2DG36yd+UgA/DpY4Gf1qGjCBL2FzKoD7fd8uA0=; b=YOgh3FeRQ9vTT1RjDmsFPN4alBkkDre3nt5VDJ282EOmzeOPr8b2PTMLKZYbqylq4v ZD6ID8d9HzhdVApe2ir5wasK8F6oHvRl2KbaYICmXydzSVgOjugCIvrsMuc+tfW0YE7c bdVdjZN0bCivSnmvK6X673m/pqcG39CxGVI6bzmSxCNAIu5qbTnVCTW8dmkIW9mowYHs AfEQfloq/t5CG1aJd3JTXc1D8ITbvYMEfWHmdIbOgyNSHkMrnSTivSkpeNCVHIIHVmMA XEPDaRxA7T0YDTeDkriJ1l9UiecLH3i2uLBvaT6/D0KSbzFrfWWaM1+NtshWpELDoqVg MG+w== X-Gm-Message-State: AOAM533f1eADJno90TYLGf7MsBjgscnyZtnAOHXAM3dvltkBAfx5SanE o5eYcECKmqydw+utSFTA7373gmADZp8vEsnZ X-Google-Smtp-Source: ABdhPJxhPm/TyWXkN9N9EhOfSaqEC26i0vEl/xj1t2GlKTG1VOW6cj/UqiNO11AFCiqxF75tYYJBsQ== X-Received: by 2002:a65:51c8:: with SMTP id i8mr5781305pgq.451.1631253403160; Thu, 09 Sep 2021 22:56:43 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [PATCH 4/4] hw/dma: sifive_pdma: don't set Control.error if 0 bytes to transfer Date: Fri, 10 Sep 2021 13:56:16 +0800 Message-Id: <20210910055620.946625-5-frank.chang@sifive.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210910055620.946625-1-frank.chang@sifive.com> References: <20210910055620.946625-1-frank.chang@sifive.com> MIME-Version: 1.0 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=2607:f8b0:4864:20::430; envelope-from=frank.chang@sifive.com; helo=mail-pf1-x430.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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Frank Chang , Palmer Dabbelt , Bin Meng , Alistair Francis , Max Hsu Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631253665795100001 Content-Type: text/plain; charset="utf-8" From: Frank Chang Real PDMA doesn't set Control.error if there are 0 bytes to be transferred. The DMA transfer is still success. The following result is PDMA tested in U-boot on Unmatched board: =3D> mw.l 0x3000000 0x0 <=3D Disclaim channel 0 =3D> mw.l 0x3000000 0x1 <=3D Claim channel 0 =3D> mw.l 0x3000004 0x55000000 <=3D wsize =3D rsize =3D 5 (2^= 5 =3D 32 bytes) =3D> mw.q 0x3000008 0x0 <=3D NextBytes =3D 0 =3D> mw.q 0x3000010 0x84000000 <=3D NextDestination =3D 0x840= 00000 =3D> mw.q 0x3000018 0x84001000 <=3D NextSource =3D 0x84001000 =3D> mw.l 0x84000000 0x87654321 <=3D Fill test data to dst =3D> mw.l 0x84001000 0x12345678 <=3D Fill test data to src =3D> md.l 0x84000000 1; md.l 0x84001000 1 <=3D Dump src/dst memory conte= nts 84000000: 87654321 !Ce. 84001000: 12345678 xV4. =3D> md.l 0x3000000 8 <=3D Dump PDMA status 03000000: 00000001 55000000 00000000 00000000 .......U........ 03000010: 84000000 00000000 84001000 00000000 ................ =3D> mw.l 0x3000000 0x3 <=3D Set channel 0 run and cla= im bits =3D> md.l 0x3000000 8 <=3D Dump PDMA status 03000000: 40000001 55000000 00000000 00000000 ...@...U........ 03000010: 84000000 00000000 84001000 00000000 ................ =3D> md.l 0x84000000 1; md.l 0x84001000 1 <=3D Dump src/dst memory conte= nts 84000000: 87654321 !Ce. 84001000: 12345678 xV4. Signed-off-by: Frank Chang Tested-by: Max Hsu Reviewed-by: Bin Meng Tested-by: Bin Meng --- hw/dma/sifive_pdma.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/hw/dma/sifive_pdma.c b/hw/dma/sifive_pdma.c index d6980fbbd62..133db817dc7 100644 --- a/hw/dma/sifive_pdma.c +++ b/hw/dma/sifive_pdma.c @@ -76,7 +76,7 @@ static void sifive_pdma_run(SiFivePDMAState *s, int ch) =20 /* do nothing if bytes to transfer is zero */ if (!bytes) { - goto error; + goto done; } =20 /* @@ -131,11 +131,6 @@ static void sifive_pdma_run(SiFivePDMAState *s, int ch) s->chan[ch].exec_bytes -=3D remainder; } =20 - /* indicate a DMA transfer is done */ - s->chan[ch].state =3D DMA_CHAN_STATE_DONE; - s->chan[ch].control &=3D ~CONTROL_RUN; - s->chan[ch].control |=3D CONTROL_DONE; - /* reload exec_ registers if repeat is required */ if (s->chan[ch].next_config & CONFIG_REPEAT) { s->chan[ch].exec_bytes =3D bytes; @@ -143,6 +138,11 @@ static void sifive_pdma_run(SiFivePDMAState *s, int ch) s->chan[ch].exec_src =3D src; } =20 +done: + /* indicate a DMA transfer is done */ + s->chan[ch].state =3D DMA_CHAN_STATE_DONE; + s->chan[ch].control &=3D ~CONTROL_RUN; + s->chan[ch].control |=3D CONTROL_DONE; return; =20 error: --=20 2.25.1