From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525837770699269.1351222886859; Tue, 8 May 2018 20:49:30 -0700 (PDT) Received: from localhost ([::1]:54270 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG6Y-0005WZ-4m for importer@patchew.org; Tue, 08 May 2018 23:49:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58386) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG4O-0004Kx-5G for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4M-0002H2-Mv for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:12 -0400 Received: from mail-qk0-x242.google.com ([2607:f8b0:400d:c09::242]:39641) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4M-0002GD-Gq; Tue, 08 May 2018 23:47:10 -0400 Received: by mail-qk0-x242.google.com with SMTP id z75so26495290qkb.6; Tue, 08 May 2018 20:47:10 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0K8P6/Wt4w4nkhyYxnOWUyEc0T+chC9SWQ0QEmY8s8w=; b=k55+H9eAdrxXHpf4H7IY6z3kQAz88fNvtw/XtoBmbtXunPZOQaZCZaX74hOLwkM7Ng bDQ5HvAZ06y+Cgfatyu/lTi4Z0UZrbwDBO/7u/DT1fdrBm/UVLFbMPsO0D3k+xWBrdbR d6pw+y1FUcIFCiBA5EFQEiSiGGJ82XWgsThyNpu4Qb0fVT5Q9Nmd13wupr/ibd/bOkaL ZCA3YZ3KZOKNyXFRTXLBLlLWxDrbAfXlyi2wNKHY8XSRcFnr5Im8VOWWUMyyPYSJCAug Mxj7cBB1jYrQUzc5dXNDsz2pw1UmtIj5wE9IA/LQGTWWz0BxAt0XXjNjp/yFeQENPv4Q GlnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=0K8P6/Wt4w4nkhyYxnOWUyEc0T+chC9SWQ0QEmY8s8w=; b=Gt5YI/9LHwWao6Q6A7n4hoG8X2QdzzhhngsBSpQdu1dV3WbsrWIKk4mpe4r+jR6Vqc ITR9lS58sW4aHqCl5Z7OYGK5fYz3etTWXaY98OjL5YSy/ihZrokFxaQtlszEA+KGo7nW dTbNZo8OuBtY1J5uR0eo3vxBpGisDANDWWjve+sR3Xn+ZOifdduQxMW+t4vSLDgY+vHv f48Qz8kqjAlMy/R+hz5cmtR3hOc2H1jDJwVrRsAzaQnuTQXJQXIajxXsXkzEiwFs+kqd +aXK6ezwccFTnRntKhnKn+MxAOzJGyeQ/No42K/5ltLUilUU/eCyrtOvxGblyM7FoI1O 6LVg== X-Gm-Message-State: ALQs6tC5ztM6g9WTHJ2TEbWve+7QvVWGprPK1G+LDOvHkuQyY7oCFluP 5BIndi6QFpBbtpoTngbwpCgYAPby X-Google-Smtp-Source: AB8JxZouruAnHsC5C3LDGFOG+IvcvI2JEITyInBMdRRUC2Gxsdx8STwr8/WNMh2yaU6Ax9clRft1PQ== X-Received: by 10.233.244.13 with SMTP id y13mr36313259qkl.53.1525837629562; Tue, 08 May 2018 20:47:09 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:45 -0300 Message-Id: <20180509034658.26455-2-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::242 Subject: [Qemu-devel] [PATCH v2 01/14] sdcard: Use the ldst API X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-devel@nongnu.org, Michael Walle , "open list:ARM PrimeCell and..." , Stefan Hajnoczi , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 The load/store API will ease further code movement. Per the Physical Layer Simplified Spec. "3.6 Bus Protocol": "In the CMD line the Most Significant Bit (MSB) is transmitted first, the Least Significant Bit (LSB) is the last." Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/bcm2835_sdhost.c | 13 +++++-------- hw/sd/milkymist-memcard.c | 3 +-- hw/sd/omap_mmc.c | 6 ++---- hw/sd/pl181.c | 11 ++++------- hw/sd/sdhci.c | 15 +++++---------- hw/sd/ssi-sd.c | 6 ++---- 6 files changed, 19 insertions(+), 35 deletions(-) diff --git a/hw/sd/bcm2835_sdhost.c b/hw/sd/bcm2835_sdhost.c index ebf3b926c2..4df4de7d67 100644 --- a/hw/sd/bcm2835_sdhost.c +++ b/hw/sd/bcm2835_sdhost.c @@ -118,8 +118,6 @@ static void bcm2835_sdhost_send_command(BCM2835SDHostSt= ate *s) goto error; } if (!(s->cmd & SDCMD_NO_RESPONSE)) { -#define RWORD(n) (((uint32_t)rsp[n] << 24) | (rsp[n + 1] << 16) \ - | (rsp[n + 2] << 8) | rsp[n + 3]) if (rlen =3D=3D 0 || (rlen =3D=3D 4 && (s->cmd & SDCMD_LONG_RESPON= SE))) { goto error; } @@ -127,15 +125,14 @@ static void bcm2835_sdhost_send_command(BCM2835SDHost= State *s) goto error; } if (rlen =3D=3D 4) { - s->rsp[0] =3D RWORD(0); + s->rsp[0] =3D ldl_be_p(&rsp[0]); s->rsp[1] =3D s->rsp[2] =3D s->rsp[3] =3D 0; } else { - s->rsp[0] =3D RWORD(12); - s->rsp[1] =3D RWORD(8); - s->rsp[2] =3D RWORD(4); - s->rsp[3] =3D RWORD(0); + s->rsp[0] =3D ldl_be_p(&rsp[12]); + s->rsp[1] =3D ldl_be_p(&rsp[8]); + s->rsp[2] =3D ldl_be_p(&rsp[4]); + s->rsp[3] =3D ldl_be_p(&rsp[0]); } -#undef RWORD } /* We never really delay commands, so if this was a 'busywait' command * then we've completed it now and can raise the interrupt. diff --git a/hw/sd/milkymist-memcard.c b/hw/sd/milkymist-memcard.c index 5570c1e9a0..ff2b92dc64 100644 --- a/hw/sd/milkymist-memcard.c +++ b/hw/sd/milkymist-memcard.c @@ -100,8 +100,7 @@ static void memcard_sd_command(MilkymistMemcardState *s) SDRequest req; =20 req.cmd =3D s->command[0] & 0x3f; - req.arg =3D (s->command[1] << 24) | (s->command[2] << 16) - | (s->command[3] << 8) | s->command[4]; + req.arg =3D ldl_be_p(s->command + 1); req.crc =3D s->command[5]; =20 s->response[0] =3D req.cmd; diff --git a/hw/sd/omap_mmc.c b/hw/sd/omap_mmc.c index 5b47cadf11..51c6c124b2 100644 --- a/hw/sd/omap_mmc.c +++ b/hw/sd/omap_mmc.c @@ -162,8 +162,7 @@ static void omap_mmc_command(struct omap_mmc_s *host, i= nt cmd, int dir, CID_CSD_OVERWRITE; if (host->sdio & (1 << 13)) mask |=3D AKE_SEQ_ERROR; - rspstatus =3D (response[0] << 24) | (response[1] << 16) | - (response[2] << 8) | (response[3] << 0); + rspstatus =3D ldl_be_p(response); break; =20 case sd_r2: @@ -181,8 +180,7 @@ static void omap_mmc_command(struct omap_mmc_s *host, i= nt cmd, int dir, } rsplen =3D 4; =20 - rspstatus =3D (response[0] << 24) | (response[1] << 16) | - (response[2] << 8) | (response[3] << 0); + rspstatus =3D ldl_be_p(response); if (rspstatus & 0x80000000) host->status &=3D 0xe000; else diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c index 3ba1f7dd23..c9b1a6cb23 100644 --- a/hw/sd/pl181.c +++ b/hw/sd/pl181.c @@ -183,23 +183,20 @@ static void pl181_send_command(PL181State *s) if (rlen < 0) goto error; if (s->cmd & PL181_CMD_RESPONSE) { -#define RWORD(n) (((uint32_t)response[n] << 24) | (response[n + 1] << 16) \ - | (response[n + 2] << 8) | response[n + 3]) if (rlen =3D=3D 0 || (rlen =3D=3D 4 && (s->cmd & PL181_CMD_LONGRES= P))) goto error; if (rlen !=3D 4 && rlen !=3D 16) goto error; - s->response[0] =3D RWORD(0); + s->response[0] =3D ldl_be_p(&response[0]); if (rlen =3D=3D 4) { s->response[1] =3D s->response[2] =3D s->response[3] =3D 0; } else { - s->response[1] =3D RWORD(4); - s->response[2] =3D RWORD(8); - s->response[3] =3D RWORD(12) & ~1; + s->response[1] =3D ldl_be_p(&response[4]); + s->response[2] =3D ldl_be_p(&response[8]); + s->response[3] =3D ldl_be_p(&response[12]) & ~1; } DPRINTF("Response received\n"); s->status |=3D PL181_STATUS_CMDRESPEND; -#undef RWORD } else { DPRINTF("Command sent\n"); s->status |=3D PL181_STATUS_CMDSENT; diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index 63c44a4ee8..f6fe93f033 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -344,17 +344,13 @@ static void sdhci_send_command(SDHCIState *s) =20 if (s->cmdreg & SDHC_CMD_RESPONSE) { if (rlen =3D=3D 4) { - s->rspreg[0] =3D (response[0] << 24) | (response[1] << 16) | - (response[2] << 8) | response[3]; + s->rspreg[0] =3D ldl_be_p(response); s->rspreg[1] =3D s->rspreg[2] =3D s->rspreg[3] =3D 0; trace_sdhci_response4(s->rspreg[0]); } else if (rlen =3D=3D 16) { - s->rspreg[0] =3D (response[11] << 24) | (response[12] << 16) | - (response[13] << 8) | response[14]; - s->rspreg[1] =3D (response[7] << 24) | (response[8] << 16) | - (response[9] << 8) | response[10]; - s->rspreg[2] =3D (response[3] << 24) | (response[4] << 16) | - (response[5] << 8) | response[6]; + s->rspreg[0] =3D ldl_be_p(&response[11]); + s->rspreg[1] =3D ldl_be_p(&response[7]); + s->rspreg[2] =3D ldl_be_p(&response[3]); s->rspreg[3] =3D (response[0] << 16) | (response[1] << 8) | response[2]; trace_sdhci_response16(s->rspreg[3], s->rspreg[2], @@ -398,8 +394,7 @@ static void sdhci_end_transfer(SDHCIState *s) trace_sdhci_end_transfer(request.cmd, request.arg); sdbus_do_command(&s->sdbus, &request, response); /* Auto CMD12 response goes to the upper Response register */ - s->rspreg[3] =3D (response[0] << 24) | (response[1] << 16) | - (response[2] << 8) | response[3]; + s->rspreg[3] =3D ldl_be_p(response); } =20 s->prnsts &=3D ~(SDHC_DOING_READ | SDHC_DOING_WRITE | diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index ae04b6641b..dbcff4013d 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -97,8 +97,7 @@ static uint32_t ssi_sd_transfer(SSISlave *dev, uint32_t v= al) uint8_t longresp[16]; /* FIXME: Check CRC. */ request.cmd =3D s->cmd; - request.arg =3D (s->cmdarg[0] << 24) | (s->cmdarg[1] << 16) - | (s->cmdarg[2] << 8) | s->cmdarg[3]; + request.arg =3D ldl_be_p(s->cmdarg); DPRINTF("CMD%d arg 0x%08x\n", s->cmd, request.arg); s->arglen =3D sdbus_do_command(&s->sdbus, &request, longresp); if (s->arglen <=3D 0) { @@ -123,8 +122,7 @@ static uint32_t ssi_sd_transfer(SSISlave *dev, uint32_t= val) /* CMD13 returns a 2-byte statuse work. Other commands only return the first byte. */ s->arglen =3D (s->cmd =3D=3D 13) ? 2 : 1; - cardstatus =3D (longresp[0] << 24) | (longresp[1] << 16) - | (longresp[2] << 8) | longresp[3]; + cardstatus =3D ldl_be_p(longresp); status =3D 0; if (((cardstatus >> 9) & 0xf) < 4) status |=3D SSI_SDR_IDLE; --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525837940194736.6676498280834; Tue, 8 May 2018 20:52:20 -0700 (PDT) Received: from localhost ([::1]:54287 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG9L-00009C-E4 for importer@patchew.org; Tue, 08 May 2018 23:52:19 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58404) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG4Q-0004MQ-Dq for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4P-0002O6-Ks for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:14 -0400 Received: from mail-qk0-x243.google.com ([2607:f8b0:400d:c09::243]:33187) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4P-0002NJ-Fv for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:13 -0400 Received: by mail-qk0-x243.google.com with SMTP id c11so2817309qkm.0 for ; Tue, 08 May 2018 20:47:13 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xfkx7s98qf7ZqTnV8v9m+EO/DbAXRe2L+n848eVVwOY=; b=N9veqwpLC+r4pKkXWYwoU4CnCepzcPJEK5FE4vwNuT7QY7MPr7rfoI8zDwDKYs0NZ5 48n/yeKnMoeAqxut/+NPJ6sUfaah03xTBmYxzdcMsPnYb5N8W7zKcwUldt1Jzkk+wtvH nnO6QYXA7G6wD7lyNbLWcj3/fA9sa8bLAKsqB7ymPfVXpcllQJsBr2IXCu5ZbMYe1pQB gCaR5DUSA578NW9hgjtOoYEOQJ+QnLbHwQjYeMCCfuT1QyBkMJywk92PY7eSsxF1KAhI 7SYbyp5S+Lgi7pFknvI/NRNMjaPvl+ViwQly8f6KuInnr5yrYWqgBOVP4Q/7vQZkzcqk t79g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=xfkx7s98qf7ZqTnV8v9m+EO/DbAXRe2L+n848eVVwOY=; b=eizzwMby0xugLzif58kkZo4IiJJX4aE06Y9w07rBu4YhWjbI9nDiGD7OsTVXLXwh2q cOzz3B50+IMGkXExB9iLiKO64R8jiU7sTGAOzWfm3/irQeQsX09YB3dHmX/WdepEJAdx pRPUdClMewkjxrQZkqOFzvJD9XOsOLXfIcyYIowptBwRrGckXfveM8hiAIZnLetOiNc/ ZxTzpNslqwLGkFumjVFGM4xBY5CsVlr1Ncz/1502elm9A4rYusk8/jxwqNB+Ard+8qqh yihZIELb4XgXlA+r5xA83v4nBAly+EJkio0v2d/O1Z6MRd/W1Ldbw2awYlPALylEXVkC 2fyw== X-Gm-Message-State: ALKqPwc6Sig9Jz8yjt1S4PYdY+usncDYHfcTnTeYjBENmR8Po7Uz87IW 94k0zduwDYgabNmTBAxz214= X-Google-Smtp-Source: AB8JxZrkOnc1f7I/E8v+k9rUhZSYq4JPtnYESBuoikBHn3lL8uDFFkl6dvbh0zWU+GLMyDF5IV85fg== X-Received: by 10.55.125.131 with SMTP id y125mr9804689qkc.60.1525837632798; Tue, 08 May 2018 20:47:12 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:46 -0300 Message-Id: <20180509034658.26455-3-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::243 Subject: [Qemu-devel] [PATCH v2 02/14] sdcard: Constify sd_crc*()'s message argument X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Alistair Francis --- hw/sd/sd.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 235e0518d6..eb6dd5482e 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -236,11 +236,11 @@ static const int sd_cmd_class[SDMMC_CMD_MAX] =3D { 7, 7, 10, 7, 9, 9, 9, 8, 8, 10, 8, 8, 8, 8, 8, 8, }; =20 -static uint8_t sd_crc7(void *message, size_t width) +static uint8_t sd_crc7(const void *message, size_t width) { int i, bit; uint8_t shift_reg =3D 0x00; - uint8_t *msg =3D (uint8_t *) message; + const uint8_t *msg =3D (const uint8_t *)message; =20 for (i =3D 0; i < width; i ++, msg ++) for (bit =3D 7; bit >=3D 0; bit --) { @@ -252,11 +252,11 @@ static uint8_t sd_crc7(void *message, size_t width) return shift_reg; } =20 -static uint16_t sd_crc16(void *message, size_t width) +static uint16_t sd_crc16(const void *message, size_t width) { int i, bit; uint16_t shift_reg =3D 0x0000; - uint16_t *msg =3D (uint16_t *) message; + const uint16_t *msg =3D (const uint16_t *)message; width <<=3D 1; =20 for (i =3D 0; i < width; i ++, msg ++) --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525837937249375.90658364346484; Tue, 8 May 2018 20:52:17 -0700 (PDT) Received: from localhost ([::1]:54286 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG9I-00006g-Cz for importer@patchew.org; Tue, 08 May 2018 23:52:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58450) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG4V-0004P0-Ic for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4S-0002Tw-GZ for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:19 -0400 Received: from mail-qk0-x241.google.com ([2607:f8b0:400d:c09::241]:33926) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4S-0002T0-CL for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:16 -0400 Received: by mail-qk0-x241.google.com with SMTP id p186so26492486qkd.1 for ; Tue, 08 May 2018 20:47:16 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Vu1TXEsK3+H4qpumdJHo53uHjItrLRu/KlLqEeGbpNo=; b=Py0OsWbMU1IsjVgNJjYobgITjFEEpLsMheaGQ/bpBPasr0Xa+2TPxhAoBvBvk9mABw BOC0r0mYLCfLrzRaYMPDuy2T+ulPfrECbBnfg1mhzvS0+qPTt77UjnMU4382OVLbPYJo ZS1EmKYUBqtCnSXqCK3pp5NLgjQx7MAogVsP/rLy6PryaL7/n2J9U3RvkqYAAOgePUHH YrsLkzw5fb3qr7utKa6D240T03CYaOgbCtcnI6xm2CodebW8H+xUZ7h/nMQDzdq4gu5j Nue8eQMCxsbJ5kk08JQoM0VQyjQN6s2jvpXxWNZE/EUGECmwtL3aLACBiT81C5RvbcIQ SlnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=Vu1TXEsK3+H4qpumdJHo53uHjItrLRu/KlLqEeGbpNo=; b=DRE4ptmaUg3BwhYZMlMNgRp8pHsZJvD8eypfpJ8NzysElUDtfpv4URIxvBCSBPHduZ jJ2j41lk0zMO59rxE4KJ1FoiMscgpcvIPQrcv6dm9F5qfNt5WlOphNe0Le4DcRbXw/4L iyUwjqZoAGtPT7nUjU+Tto3Uw9QHodf7RuBAVCRUxxlZQETNedzPNg+omkYXyaWE7aTO iC1Y0p0UQirKx54J/YrLy0508udOnKTGgRt7whQ4bEWm0r/MwXYKQ0SfO3zsR7630bhf 4nsyhFzFiNhGXWYybBuvN361sp6//OyUOA4/GkAIBQxIPi5rT0AVG1QjGUYvmk6OzdEY hb0A== X-Gm-Message-State: ALQs6tBKOOLoWzODVfVRS5Rh4LKo2U8AKe9D93DGloqsyIsb/FCbXcMo +cQwrjglBiiIkt2R3oQYJGU= X-Google-Smtp-Source: AB8JxZp42GJTO4tjknYQMM8zK8Fm5axLW5GCCRBZSn6w4vyEQ7mEm0JnIJ1xqefxtjGRA+Ic4TC1/A== X-Received: by 10.55.111.196 with SMTP id k187mr23887708qkc.143.1525837635669; Tue, 08 May 2018 20:47:15 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:47 -0300 Message-Id: <20180509034658.26455-4-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::241 Subject: [Qemu-devel] [PATCH v2 03/14] sdcard: Fix sd_crc*() style X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Fix style to keep patchew/checkpatch happy when moving this code in the next patch. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Alistair Francis --- hw/sd/sd.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index eb6dd5482e..27a70896cd 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -242,12 +242,14 @@ static uint8_t sd_crc7(const void *message, size_t wi= dth) uint8_t shift_reg =3D 0x00; const uint8_t *msg =3D (const uint8_t *)message; =20 - for (i =3D 0; i < width; i ++, msg ++) - for (bit =3D 7; bit >=3D 0; bit --) { + for (i =3D 0; i < width; i++, msg++) { + for (bit =3D 7; bit >=3D 0; bit--) { shift_reg <<=3D 1; - if ((shift_reg >> 7) ^ ((*msg >> bit) & 1)) + if ((shift_reg >> 7) ^ ((*msg >> bit) & 1)) { shift_reg ^=3D 0x89; + } } + } =20 return shift_reg; } @@ -259,12 +261,14 @@ static uint16_t sd_crc16(const void *message, size_t = width) const uint16_t *msg =3D (const uint16_t *)message; width <<=3D 1; =20 - for (i =3D 0; i < width; i ++, msg ++) - for (bit =3D 15; bit >=3D 0; bit --) { + for (i =3D 0; i < width; i++, msg++) { + for (bit =3D 15; bit >=3D 0; bit--) { shift_reg <<=3D 1; - if ((shift_reg >> 15) ^ ((*msg >> bit) & 1)) + if ((shift_reg >> 15) ^ ((*msg >> bit) & 1)) { shift_reg ^=3D 0x1011; + } } + } =20 return shift_reg; } --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15258379020971020.2179501187335; Tue, 8 May 2018 20:51:42 -0700 (PDT) Received: from localhost ([::1]:54285 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG8j-00083w-AH for importer@patchew.org; Tue, 08 May 2018 23:51:41 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58464) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG4W-0004Ph-CE for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4V-0002YP-Bo for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:20 -0400 Received: from mail-qk0-x243.google.com ([2607:f8b0:400d:c09::243]:37782) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4V-0002Xh-7K for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:19 -0400 Received: by mail-qk0-x243.google.com with SMTP id d74so26465645qkg.4 for ; Tue, 08 May 2018 20:47:19 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZyPoDSAfaMuOvbVhgz9SMeG+Xb8aw2npbzngXTVH2AA=; b=ZjD2UbvNhjSNBUe7RyiRDKB8R6z5e5/5ypX9S6FtbKL0B6OZM6TpuXz6HdY7Ar7gub sldR6GpO82dSqEv+5MRE9DBiGq5KTHZXG3r9kjdZ57EwFIPuQMIeyqdTrB04CuKak4q9 sR1jUYZtqy0LU3fnzfdQt1fkyEvRhtSfXbCDwUwXKgdX+UVk23XQjD0LoQd2UoQQZvay 2KIEC671ldC1HjoZmpBzktPP0eLR75hjeBldDI4YJwvInwknvQ9Zbj6yfgXDF9AcWeHx qWnRaZtVZBrRRlFjBP9rXEvCxE5mmVc9SI5c6whIZ4vLe+avgAy1/Re44cgscx+gFr4U gvHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=ZyPoDSAfaMuOvbVhgz9SMeG+Xb8aw2npbzngXTVH2AA=; b=ujfqAysCuGyF32owoW2F68IlTxEXWyGR3WU1yqi57XoYaZmpvZrswkS8nTB7lWJiMx H6K6iZKzYAFF8b2RzrJwB5O8dVSxJgfIcGBb9qBjWhMF5QLBwWRAi/KSO3h5nqRn/YUV UcPwS7yrxUJzyag4uNl4/0S2v1QVx1ZYm41o9QO5iTPtQ+tksk9+GWn64tUuxEWR5yiq js/FlEyCVEqAP2dY8Y1oaFRYJ5OYYa4tP6JzQRzhPrxueu7e7Ke8FjLOyGqOksqJuJz+ bYyHg5Xpo1rGUTBRDY2c5NBVHuPTjroz/S0STLaK3R75fetfuRpR1RwfCvEglpS6+9Kh de2A== X-Gm-Message-State: ALQs6tD08rlvZNEMsaYr5tGRPQ82lZbB7jB8tjTgZbLC5l/GB2ORZ3Jv jt6JSdkrnie6nbQD9q3b8T8= X-Google-Smtp-Source: AB8JxZppi9eGjegiD2s5GLnSXdMNUlFY2nrGJo6WSeyiQhcMNGG3jN4fZP8nf+aV4RfsnI959vCyXg== X-Received: by 10.55.95.196 with SMTP id t187mr37451893qkb.62.1525837638553; Tue, 08 May 2018 20:47:18 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:48 -0300 Message-Id: <20180509034658.26455-5-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::243 Subject: [Qemu-devel] [PATCH v2 04/14] sdcard: Extract sd_frame48/136_calc_checksum() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 It will help when moving this around for qtesting in the next commit. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Alistair Francis --- hw/sd/sd.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 27a70896cd..06607115a7 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -273,6 +273,21 @@ static uint16_t sd_crc16(const void *message, size_t w= idth) return shift_reg; } =20 +enum { + F48_CONTENT_LENGTH =3D 1 /* command */ + 4 /* argument */, + F136_CONTENT_LENGTH =3D 15, +}; + +static uint8_t sd_frame48_calc_checksum(const void *content) +{ + return sd_crc7(content, F48_CONTENT_LENGTH); +} + +static uint8_t sd_frame136_calc_checksum(const void *content) +{ + return (sd_crc7(content, F136_CONTENT_LENGTH) << 1) | 1; +} + #define OCR_POWER_DELAY_NS 500000 /* 0.5ms */ =20 FIELD(OCR, VDD_VOLTAGE_WINDOW, 0, 24) @@ -352,7 +367,7 @@ static void sd_set_cid(SDState *sd) sd->cid[13] =3D 0x00 | /* Manufacture date (MDT) */ ((MDT_YR - 2000) / 10); sd->cid[14] =3D ((MDT_YR % 10) << 4) | MDT_MON; - sd->cid[15] =3D (sd_crc7(sd->cid, 15) << 1) | 1; + sd->cid[15] =3D sd_frame136_calc_checksum(sd->cid); } =20 #define HWBLOCK_SHIFT 9 /* 512 bytes */ @@ -416,7 +431,7 @@ static void sd_set_csd(SDState *sd, uint64_t size) sd->csd[13] =3D 0x40; sd->csd[14] =3D 0x00; } - sd->csd[15] =3D (sd_crc7(sd->csd, 15) << 1) | 1; + sd->csd[15] =3D sd_frame136_calc_checksum(sd->csd); } =20 static void sd_set_rca(SDState *sd) @@ -491,7 +506,7 @@ static int sd_req_crc_validate(SDRequest *req) buffer[0] =3D 0x40 | req->cmd; stl_be_p(&buffer[1], req->arg); return 0; - return sd_crc7(buffer, 5) !=3D req->crc; /* TODO */ + return sd_frame48_calc_checksum(buffer) !=3D req->crc; /* TODO */ } =20 static void sd_response_r1_make(SDState *sd, uint8_t *response) --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525838065102899.67236301504; Tue, 8 May 2018 20:54:25 -0700 (PDT) Received: from localhost ([::1]:54300 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGGBM-0001u2-1A for importer@patchew.org; Tue, 08 May 2018 23:54:24 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58481) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG4Z-0004SU-NB for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4Y-0002fr-LE for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:23 -0400 Received: from mail-qt0-x242.google.com ([2607:f8b0:400d:c0d::242]:45682) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4Y-0002eo-Fl for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:22 -0400 Received: by mail-qt0-x242.google.com with SMTP id j42-v6so43940189qtj.12 for ; Tue, 08 May 2018 20:47:22 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XQVkZhXQT7LoEiMqOvwIc2YKRhTidGNAJtT9g0xgaV4=; b=vAMglr0eX/8mStXf1JYdOqLCtoV8rPZ6Wd/n1JdfvO4uyBHE88eMJ0sZg5FmxIZxJ9 7+sXutcCEtAvHy69wP/JiG1hPffOxnP/XwKEuifyNiBb+D6YzWnAJgAF2vAIBnsD+U/R DD04gv0sbiqZ5OCkCL15ES9vHkqhcX0TIJs+YXrYkE/xZNRJFOvSWEPfWbD0jd2PnKYb ZYB8eMDDG0uJp/GPnnpPK8li8QeVC3aNlCdrXz0urKpUAB3vKEP/20Oj0Xwgrwb62Hl/ oy4Kb0XQjMHgVFqnMV9v8KjI1PbkyQm4M9biHOBpIfN4j3b5fGLlJJoKBCxUN1PXNIVz grcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=XQVkZhXQT7LoEiMqOvwIc2YKRhTidGNAJtT9g0xgaV4=; b=lbCht65BS+F39+74KK/sriwpIlYsk2FclYxRIlBo6kgMOFIDThnur9kwgkkDtRRgAI ofluVuTSYGfq93KhrIjKjFChluIBn6mBfUJYESHX2zJ/G2Ruslewkty04cQlNnBVGdHJ dFhHMWjyUdLfXlW3nW5xFgCG6K07IgqjxU8hQ2Gf70xL+p7Em/7bf9GMkeyvqwPTJ3Vq Ntvt9Y4Zb4x78p3Z2CQMJCbfhjx09hi9qc9FJuV19nTsFOhE5/QVEdXw12Y1Spq+BEC5 1zDCIuSnjJ9aJHt3LMd/jeq2aID7erwNFsaueSqHy715GMtMebHUXA7GT2RKKZOp9X4g mQyw== X-Gm-Message-State: ALQs6tCepeKEXxg6z9Q4otkM89+Ks/l/6uqKY++sr48mrKzgrOirFsEq jpwEeiIuYSlz9Py+ntJ1sq4= X-Google-Smtp-Source: AB8JxZqkNn7IviA7aVOA1xsvIbQlTTdSCMp2yjdlYeFWsVARnYfkY26saFrswKuM66Fy1n1tRU6YwQ== X-Received: by 2002:a0c:aa5c:: with SMTP id e28-v6mr39868794qvb.42.1525837641756; Tue, 08 May 2018 20:47:21 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:49 -0300 Message-Id: <20180509034658.26455-6-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::242 Subject: [Qemu-devel] [PATCH v2 05/14] sdcard: Move sd_crc7() and calc_checksum() out for qtesting X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Move the calc_checksum() functions out so we will able to write qtests for them. Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- include/hw/sd/sd.h | 20 ++++++++++++++++++++ hw/sd/sd.c | 33 --------------------------------- hw/sd/sdmmc-internal.c | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 33 deletions(-) diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index 9bdb3c9285..c854ed6a14 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -130,6 +130,26 @@ typedef struct { void (*set_readonly)(DeviceState *dev, bool readonly); } SDBusClass; =20 +/** + * sd_frame48_calc_checksum: + * @content: pointer to the frame content + * + * Calculate the 7-bit CRC of a 48-bit SD frame. + * + * Returns: The frame CRC. + */ +uint8_t sd_frame48_calc_checksum(const void *content); + +/** + * sd_frame136_calc_checksum: + * @content: pointer to the frame content + * + * Calculate the 7-bit CRC of a 136-bit SD frame. + * + * Returns: The frame CRC. + */ +uint8_t sd_frame136_calc_checksum(const void *content); + /* Legacy functions to be used only by non-qdevified callers */ SDState *sd_init(BlockBackend *bs, bool is_spi); int sd_do_command(SDState *sd, SDRequest *req, diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 06607115a7..d8dad94fc4 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -236,24 +236,6 @@ static const int sd_cmd_class[SDMMC_CMD_MAX] =3D { 7, 7, 10, 7, 9, 9, 9, 8, 8, 10, 8, 8, 8, 8, 8, 8, }; =20 -static uint8_t sd_crc7(const void *message, size_t width) -{ - int i, bit; - uint8_t shift_reg =3D 0x00; - const uint8_t *msg =3D (const uint8_t *)message; - - for (i =3D 0; i < width; i++, msg++) { - for (bit =3D 7; bit >=3D 0; bit--) { - shift_reg <<=3D 1; - if ((shift_reg >> 7) ^ ((*msg >> bit) & 1)) { - shift_reg ^=3D 0x89; - } - } - } - - return shift_reg; -} - static uint16_t sd_crc16(const void *message, size_t width) { int i, bit; @@ -273,21 +255,6 @@ static uint16_t sd_crc16(const void *message, size_t w= idth) return shift_reg; } =20 -enum { - F48_CONTENT_LENGTH =3D 1 /* command */ + 4 /* argument */, - F136_CONTENT_LENGTH =3D 15, -}; - -static uint8_t sd_frame48_calc_checksum(const void *content) -{ - return sd_crc7(content, F48_CONTENT_LENGTH); -} - -static uint8_t sd_frame136_calc_checksum(const void *content) -{ - return (sd_crc7(content, F136_CONTENT_LENGTH) << 1) | 1; -} - #define OCR_POWER_DELAY_NS 500000 /* 0.5ms */ =20 FIELD(OCR, VDD_VOLTAGE_WINDOW, 0, 24) diff --git a/hw/sd/sdmmc-internal.c b/hw/sd/sdmmc-internal.c index 2053def3f1..a94d65b756 100644 --- a/hw/sd/sdmmc-internal.c +++ b/hw/sd/sdmmc-internal.c @@ -9,6 +9,7 @@ */ =20 #include "qemu/osdep.h" +#include "hw/sd/sd.h" #include "sdmmc-internal.h" =20 const char *sd_cmd_name(uint8_t cmd) @@ -70,3 +71,37 @@ const char *sd_acmd_name(uint8_t cmd) =20 return acmd_abbrev[cmd] ? acmd_abbrev[cmd] : "UNKNOWN_ACMD"; } + +/* 7 bit CRC with polynomial x^7 + x^3 + 1 */ +static uint8_t sd_crc7(const void *message, size_t width) +{ + int i, bit; + uint8_t shift_reg =3D 0x00; + const uint8_t *msg =3D (const uint8_t *)message; + + for (i =3D 0; i < width; i++, msg++) { + for (bit =3D 7; bit >=3D 0; bit--) { + shift_reg <<=3D 1; + if ((shift_reg >> 7) ^ ((*msg >> bit) & 1)) { + shift_reg ^=3D 0x89; + } + } + } + + return shift_reg; +} + +enum { + F48_CONTENT_LENGTH =3D 1 /* command */ + 4 /* argument */, + F136_CONTENT_LENGTH =3D 15, +}; + +uint8_t sd_frame48_calc_checksum(const void *content) +{ + return sd_crc7(content, F48_CONTENT_LENGTH); +} + +uint8_t sd_frame136_calc_checksum(const void *content) +{ + return (sd_crc7(content, F136_CONTENT_LENGTH) << 1) | 1; +} --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525838101843872.9163504025125; Tue, 8 May 2018 20:55:01 -0700 (PDT) Received: from localhost ([::1]:54304 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGGBr-0002p7-Rl for importer@patchew.org; Tue, 08 May 2018 23:54:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58502) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG4e-0004Ws-Vb for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4b-0002o6-U1 for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:29 -0400 Received: from mail-qt0-x242.google.com ([2607:f8b0:400d:c0d::242]:36921) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4b-0002nA-OI for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:25 -0400 Received: by mail-qt0-x242.google.com with SMTP id q13-v6so43174505qtp.4 for ; Tue, 08 May 2018 20:47:25 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ptblSVSLZSN149j2r/rN1eYutb0i07T08aMWR08Lue0=; b=TFSLrte1g/77MFEUjqoy3crKlSKIO1MGz03ab3GzdEakh52QheKAzYQCLubrrblLza 6/EupBuGAvG3pCOxpkcVSHBIcd3e6qYFJu+Jx8zbb5EQEwKyQ5dKy8ZeVd1L9omVZl1w GWVU2wvyarQkqQ/3TwDoPoYH8sDSIm2Ie35CSR4LQyedERBofVIBZDExlDu3dtyydO3u fy4l9BQ5bd2xiFcPx8Ya8/sueUqhL7gqM4s+NfjZrAWOhIDOonPTH0gqBP2SoZJ5NOHp nyeixseaIT2GJy0tDqE97rOUIkOdQnowML44YZ3Ex2t2tmfMUQf5EY93TksVpQPN0hkr 6JDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=ptblSVSLZSN149j2r/rN1eYutb0i07T08aMWR08Lue0=; b=lOm9bvo76tZo8zsuAn5KSOUJDJhNn3T4CSnXrIxpAxuy+gMzaxE+aqUeWiUjWNQGAW 9AouUWBZxD8Jz91Vhf9YpPMNkNbUrfBlpGjMNfyhHkWhM/gDD1DoNG3aOex460bVu9iN 8z90ydEUo6NvhpfoZB2nxhPCsX51g/ZdaKf8aHsIalK9vf+CuispEgicILdGksTIcuMg vR4hrDVlXfP9W15JPBFIY3k56y7g9nPJtfqSaSvLdLJQ6ERdHNCjWnjAPknrQEofQFS9 fy5yeQ1OJa4q1aQUUYq79jxo8NUfbm7diVe+hO3K17OSOxpmoNjgLvEY88zmuNtR3/0t mSEA== X-Gm-Message-State: ALQs6tBdXsXrU32Poe4/MdsMn8dKr0AeGSTg4Ucn/leGEnKCgzgVYeC/ Am6a4HO8WzP0ihol06hFebI= X-Google-Smtp-Source: AB8JxZqugoFWc6Ksm9cCsIYuwyBs69/b8l58Q58gSbzaY0lZoKC9wJxXP8u3D3MtZO5TU8zyvtyevA== X-Received: by 2002:ac8:35b0:: with SMTP id k45-v6mr37742534qtb.81.1525837645084; Tue, 08 May 2018 20:47:25 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:50 -0300 Message-Id: <20180509034658.26455-7-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::242 Subject: [Qemu-devel] [PATCH v2 06/14] sdcard: Add test_sd_verify_cksum_frame136() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Per the Physical Layer Simplified Spec. "3.6 Bus Protocol": There are two types of Data packet format for the SD card. (1) Usual data (8-bit width): The usual data (8-bit width) are sent in LSB (Least Significant Byte) first, MSB (Most Significant Byte) last sequence. But in the individual byte, it is MSB (Most Significant Bit) first, LSB (Least Significant Bit) last. (2) Wide width data (SD Memory Register): The wide width data is shifted from the MSB bit. Since the SD frames use different byte order, we use the lm32 target for big-endian qtesting, and aarch64 for the little-endian qtesting. Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- tests/sdcard-test.c | 35 +++++++++++++++++++++++++++++++++++ tests/Makefile.include | 4 ++++ 2 files changed, 39 insertions(+) create mode 100644 tests/sdcard-test.c diff --git a/tests/sdcard-test.c b/tests/sdcard-test.c new file mode 100644 index 0000000000..c59af28382 --- /dev/null +++ b/tests/sdcard-test.c @@ -0,0 +1,35 @@ +/* + * QTest testcase for SD protocol and cards + * + * Examples taken from: + * + * - Physical Layer Simplified Specification (chap. 4.5: Cyclic Redundancy= Code) + * - http://wiki.seabright.co.nz/wiki/SdCardProtocol.html + * + * Tests written by Philippe Mathieu-Daud=C3=A9 + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include "qemu/osdep.h" +#include "libqtest.h" +#include "hw/sd/sd.h" + +static void test_sd_response_frame136_crc7(void) +{ + uint8_t buf[16]; + + /* response to CMD2 ALL_SEND_CID */ + memcpy(&buf, "\x1d\x41\x44\x53\x44\x20\x20\x20\x10\xa0\x40\x0b\xc1\x00= \x88", + sizeof(buf)); + buf[15] =3D sd_frame136_calc_checksum(buf); + g_assert_cmphex(buf[15], =3D=3D, 0xad); +} + +int main(int argc, char *argv[]) +{ + g_test_init(&argc, &argv, NULL); + + qtest_add_func("sd/prepare_resp136_crc7", test_sd_response_frame136_cr= c7); + + return g_test_run(); +} diff --git a/tests/Makefile.include b/tests/Makefile.include index 3b9a5e31a2..34230b150e 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -384,6 +384,9 @@ check-qtest-arm-y +=3D tests/sdhci-test$(EXESUF) check-qtest-aarch64-y =3D tests/numa-test$(EXESUF) check-qtest-aarch64-y +=3D tests/sdhci-test$(EXESUF) check-qtest-aarch64-y +=3D tests/boot-serial-test$(EXESUF) +check-qtest-aarch64-y +=3D tests/sdcard-test$(EXESUF) + +check-qtest-lm32-y +=3D tests/sdcard-test$(EXESUF) =20 check-qtest-microblazeel-y =3D $(check-qtest-microblaze-y) =20 @@ -835,6 +838,7 @@ tests/test-qapi-util$(EXESUF): tests/test-qapi-util.o $= (test-util-obj-y) tests/numa-test$(EXESUF): tests/numa-test.o tests/vmgenid-test$(EXESUF): tests/vmgenid-test.o tests/boot-sector.o test= s/acpi-utils.o tests/sdhci-test$(EXESUF): tests/sdhci-test.o $(libqos-pc-obj-y) +tests/sdcard-test$(EXESUF): tests/sdcard-test.o hw/sd/sdmmc-internal.o =20 tests/migration/stress$(EXESUF): tests/migration/stress.o $(call quiet-command, $(LINKPROG) -static -O3 $(PTHREAD_LIB) -o $@ $< ,"L= INK","$(TARGET_DIR)$@") --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525838161600625.9401401236908; Tue, 8 May 2018 20:56:01 -0700 (PDT) Received: from localhost ([::1]:54313 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGGCu-00045z-N9 for importer@patchew.org; Tue, 08 May 2018 23:56:00 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58511) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG4f-0004X9-K7 for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4e-0002s3-TO for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:29 -0400 Received: from mail-qt0-x241.google.com ([2607:f8b0:400d:c0d::241]:46597) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4e-0002rb-OW for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:28 -0400 Received: by mail-qt0-x241.google.com with SMTP id m16-v6so43923535qtg.13 for ; Tue, 08 May 2018 20:47:28 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7AwOIfizm689LrWy4uTeuWZjlBlaGqrjj9Vj9vU6nIg=; b=cKCYVYZ3wFHdq5HpBigTUiej7j6aKbtfMqXivtTKF4wIecxtX15cfXKfWnawem1+rM 9Skq/Z/R8OsCX4rL/sMNbgkAWlHHh2FMGijBALxbJG0xmceYLctifp/Y4ol8pU9Mj7pr 0h9RVrFkZV+zjCZVRDbVXDizELze3T9ANQYGKCj2T3dAMJ03YGN90O5XrEcWW9orhzHz snbLf80gOT5BlhxUf8VCDHJVQdNFGs+D2dtF8zXlpFA5/+7rWgSppBp0fSFDjdtGQkdT DBM+CsvRA+BYjYEmeNUYC+cEg3AcHlLMN+PYErfRK1894fwt9kJfwTNaWG1j/qxj5pDx 3I/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=7AwOIfizm689LrWy4uTeuWZjlBlaGqrjj9Vj9vU6nIg=; b=V/lEXATBzIwCaflm7PYD5gWO7hnqqkavYCab2byggAC44nm7Q/BDrLs2jahw2/wk53 7FHSwk67cei0SmEw6um0CbqEg3+MKedPxrhyklc25WbaD4FJJp+YQs1/sp6R6VqIFIKm IDS5mPWVVS8bZlJHIzBVgzG8R5VtrOSGiWtoaRC7oDjkQ3SaWucXVMMMic55mDUQK8T+ a36ngTB2IVVHalZ7aZIgeI/lpV/YPuvijzvEWYYaAfPzrgVTXWto0lIWz+VHoB/OcPlI nOFGGmohBeKt6P9Fn7QSJFS6AvvVcePraNp216UMnS8BgM7Dcm+dNnWCHawvjfM1oHEh UHTg== X-Gm-Message-State: ALKqPwfEkSMTVOfjExdIFukVTMnhz+/e3eY8p5IrKi0/1+ZN4bvtBl/B nllriDEpYaN85b/fTStFYGc= X-Google-Smtp-Source: AB8JxZokuEGfJevB64bOHJOrwBLpoQ8L0D6L04LDWtqMA0KhP5ac4nALnIRYnkyrsuM/SQLMMzEl8g== X-Received: by 2002:ac8:2f22:: with SMTP id j31-v6mr661840qta.366.1525837648100; Tue, 08 May 2018 20:47:28 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:51 -0300 Message-Id: <20180509034658.26455-8-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::241 Subject: [Qemu-devel] [PATCH v2 07/14] sdcard: Invert the sd_req_crc_is_valid() logic X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Let's return TRUE when the CRC is valid. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Alistair Francis --- hw/sd/sd.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index d8dad94fc4..6fc8daa5b8 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -467,13 +467,13 @@ static void sd_set_sdstatus(SDState *sd) memset(sd->sd_status, 0, 64); } =20 -static int sd_req_crc_validate(SDRequest *req) +static bool sd_req_crc_is_valid(SDRequest *req) { uint8_t buffer[5]; buffer[0] =3D 0x40 | req->cmd; stl_be_p(&buffer[1], req->arg); - return 0; - return sd_frame48_calc_checksum(buffer) !=3D req->crc; /* TODO */ + return true; + return sd_frame48_calc_checksum(buffer) =3D=3D req->crc; /* TODO */ } =20 static void sd_response_r1_make(SDState *sd, uint8_t *response) @@ -1631,7 +1631,7 @@ int sd_do_command(SDState *sd, SDRequest *req, return 0; } =20 - if (sd_req_crc_validate(req)) { + if (!sd_req_crc_is_valid(req)) { sd->card_status |=3D COM_CRC_ERROR; rtype =3D sd_illegal; goto send_response; --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525838316574461.4036202329612; Tue, 8 May 2018 20:58:36 -0700 (PDT) Received: from localhost ([::1]:54328 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGGFP-0006KB-N6 for importer@patchew.org; Tue, 08 May 2018 23:58:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58528) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG4i-0004aX-S6 for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4h-0002yc-UN for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:32 -0400 Received: from mail-qk0-x244.google.com ([2607:f8b0:400d:c09::244]:43754) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4h-0002xp-PM for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:31 -0400 Received: by mail-qk0-x244.google.com with SMTP id h19so26472026qkj.10 for ; Tue, 08 May 2018 20:47:31 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DMhpp6rq6No+/6fLypVjyxqmO3Y0EnRPg4J2HBnaWnU=; b=nrYRHyptIheTUo9iQUPIwlQ+LtWDcHsWh1krHiVmePYROxwSt8tsTK4W5424U+nda6 aEmg33G3JKlklXuLWpEb3WjKQNgh+9IS7VMY1Q7RyI+5H8RIYVPJeJ97xvochNA42eva yI62I79eDnbwKEwJf9GCmJ+HeFsxehEkqI189xiR1yVdESy5RvsFzcQrvnmd5xx2e74J qGhoME6APfOGztPhyT3SO/VK2SAK/ZUxsHZBqmAC0OJSNijNzLUlYw6/kvIZdvWpez5K VkqMKVcRLyl3QY/s5UFq4TEgFAIoxvpK1ZU7Eij9IbTO+yVm9XPEZiX7chhKOz+uPrt7 YQAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=DMhpp6rq6No+/6fLypVjyxqmO3Y0EnRPg4J2HBnaWnU=; b=CGgKW+s0uibDXBDmk51sbuYSDpym0DGxOutgP5f4/S4zqZytaB2+rO68LA6isT0+mB S1Ge3/y+w5ZHlxBzjg6VuPN0N8xjtUBX8WFGu5MLwGJ9uOHftLKWHz1KJUKqfQ9Ov1m/ 1QtBjg0FQbKP7l2xE+dJRo6+lxJ8CBUYk6nAf96HR2dtIwt4mtK//271KQJSl8tZ0+Zl viNVWRat0tdRPuEKwW/ZuM6/sD8b4V6H61wUQ7PbQKfGKx4NvMdOW0AJaUGg40S2ZevM zQjs8DWC/HWx4SEJsOirhN2j2SVBwdKoi5kUuziI6P5wfk8YsLJil09VHR7abZK0tTrd yUhA== X-Gm-Message-State: ALQs6tCBR+t91qZPGCr8PuBdaQ3965hiO4uAw4OYv8kSfQ3zTXRu0Gl9 VvmorGTImtCfVuSXxLhabgU= X-Google-Smtp-Source: AB8JxZo5RQOk1Mg13ksUua9HfqjXgE2zu1PQpuGKA4RtjVQPIMUyBDYOokiBKdo6qlq3xcuQjfjnqA== X-Received: by 10.55.239.2 with SMTP id j2mr36533666qkk.279.1525837651047; Tue, 08 May 2018 20:47:31 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:52 -0300 Message-Id: <20180509034658.26455-9-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::244 Subject: [Qemu-devel] [PATCH v2 08/14] sdcard: Extract sd_frame48_verify_checksum() out for qtesting X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Alistair Francis --- include/hw/sd/sd.h | 10 ++++++++++ hw/sd/sd.c | 2 +- hw/sd/sdmmc-internal.c | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index c854ed6a14..752d8edd6c 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -150,6 +150,16 @@ uint8_t sd_frame48_calc_checksum(const void *content); */ uint8_t sd_frame136_calc_checksum(const void *content); =20 +/** + * sd_frame48_verify_checksum: + * @content: pointer to the frame content + * + * Verify the 7-bit CRC checksum of a 48-bit SD frame. + * + * Returns: A boolean indicating whether the frame 7-bit CRC is correct. + */ +bool sd_frame48_verify_checksum(const void *content); + /* Legacy functions to be used only by non-qdevified callers */ SDState *sd_init(BlockBackend *bs, bool is_spi); int sd_do_command(SDState *sd, SDRequest *req, diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 6fc8daa5b8..125707a65c 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -473,7 +473,7 @@ static bool sd_req_crc_is_valid(SDRequest *req) buffer[0] =3D 0x40 | req->cmd; stl_be_p(&buffer[1], req->arg); return true; - return sd_frame48_calc_checksum(buffer) =3D=3D req->crc; /* TODO */ + return sd_frame48_verify_checksum(buffer); /* TODO */ } =20 static void sd_response_r1_make(SDState *sd, uint8_t *response) diff --git a/hw/sd/sdmmc-internal.c b/hw/sd/sdmmc-internal.c index a94d65b756..a9d19ce3eb 100644 --- a/hw/sd/sdmmc-internal.c +++ b/hw/sd/sdmmc-internal.c @@ -105,3 +105,9 @@ uint8_t sd_frame136_calc_checksum(const void *content) { return (sd_crc7(content, F136_CONTENT_LENGTH) << 1) | 1; } + +bool sd_frame48_verify_checksum(const void *content) +{ + return sd_frame48_calc_checksum(content) + =3D=3D ((const uint8_t *)content)[F48_CONTENT_LENGTH]; +} --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525838255365818.9814152711502; Tue, 8 May 2018 20:57:35 -0700 (PDT) Received: from localhost ([::1]:54322 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGGEQ-0005QO-JV for importer@patchew.org; Tue, 08 May 2018 23:57:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58546) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG4l-0004cu-SF for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4k-00033k-TL for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:35 -0400 Received: from mail-qk0-x242.google.com ([2607:f8b0:400d:c09::242]:37782) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4k-00032c-Nl for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:34 -0400 Received: by mail-qk0-x242.google.com with SMTP id d74so26465926qkg.4 for ; Tue, 08 May 2018 20:47:34 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qJ3HzvrBAYqwSGhk5jUEba6GuYhU3LI0Gs4Dy/G0drI=; b=RZngEBDrRARzTG//H3hfsmfVPal0Ww/KjpmmQ6zMKohOpeC1S2wjYAYdY5WO+sLf8R qIj1yI93fk4N76SMuurnlafbco80MD0IVCniG3Vn4BntEAfHp75UG6TZQlmD6drYF9I4 amnSjMjUiKEEIvv6g2eMj3XQuQgDkvI8FGma1LLIZmG+MVGm4OIqoY6WrNzPTKCu6kyM b8WslLkET/Xxd2t8TDF3JlLs8EJYbbNFZk2Aeyql3Vj6BXc7B3fjDFoHMaxGNbnWoBas YGx+XDCNdZB2NINr+S8NvfAVN+FzggATj0Prixhk+T50ZQWAtYMNHD7G4n6YU4qgL4dv OQRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=qJ3HzvrBAYqwSGhk5jUEba6GuYhU3LI0Gs4Dy/G0drI=; b=jUWocxqzEhS80mEA8Hp/gSkNqnAhHPq/CEaitTkQFXkgVk1PNKghlSYzb1y08ThpXr 5TOjYnyS0jvUzcMJAhebaxLWER7CCCdOtLXlj+Otg+MnMyjbBkMtCtgxYo4l0/rOSE3Q +B9cfrJhh2bglNhqWoPN8itDrZW6mdHeADdjN+jgrxotWuWoG5koqVb8IIiPaGzQGXRt oTYcpy2p7Xgr06vfdwUf8Ucz205rg8jZVuYA1Hr7lZCBbvX9fdbHfR0GztixQkRg82mC 6wJ3ryOTSAD2o/i1ogpYhxC6fl8YAX1QttOcThk3zSpcdCfIIOu62yQT2rF1oRS1Ctcp hchA== X-Gm-Message-State: ALQs6tBaV1Hc3cdABeWuZKFXqqa602F6gsKmQgMMPrqI/WgUo7K+ukOF PTc6KUXraQsCuYPbYMwssEQ= X-Google-Smtp-Source: AB8JxZoiWOzbYmdIkHy50aPM4gKtSJ6zkDDh7vm7OaY18AiNQv6NQsiPsy1ga1AECaY8fHf8rBNCFQ== X-Received: by 10.55.144.7 with SMTP id s7mr36932433qkd.354.1525837654070; Tue, 08 May 2018 20:47:34 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:53 -0300 Message-Id: <20180509034658.26455-10-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::242 Subject: [Qemu-devel] [PATCH v2 09/14] sdcard: Add sd_frame136_verify_checksum() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- include/hw/sd/sd.h | 10 ++++++++++ hw/sd/sdmmc-internal.c | 6 ++++++ tests/sdcard-test.c | 12 ++++++++++++ 3 files changed, 28 insertions(+) diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index 752d8edd6c..83399cd42d 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -160,6 +160,16 @@ uint8_t sd_frame136_calc_checksum(const void *content); */ bool sd_frame48_verify_checksum(const void *content); =20 +/** + * sd_frame136_verify_checksum: + * @content: pointer to the frame content + * + * Verify the 7-bit CRC checksum of a 136-bit SD frame. + * + * Returns: A boolean indicating whether the frame 7-bit CRC is correct. + */ +bool sd_frame136_verify_checksum(const void *content); + /* Legacy functions to be used only by non-qdevified callers */ SDState *sd_init(BlockBackend *bs, bool is_spi); int sd_do_command(SDState *sd, SDRequest *req, diff --git a/hw/sd/sdmmc-internal.c b/hw/sd/sdmmc-internal.c index a9d19ce3eb..f709211401 100644 --- a/hw/sd/sdmmc-internal.c +++ b/hw/sd/sdmmc-internal.c @@ -111,3 +111,9 @@ bool sd_frame48_verify_checksum(const void *content) return sd_frame48_calc_checksum(content) =3D=3D ((const uint8_t *)content)[F48_CONTENT_LENGTH]; } + +bool sd_frame136_verify_checksum(const void *content) +{ + return sd_frame136_calc_checksum(content) + =3D=3D ((const uint8_t *)content)[F136_CONTENT_LENGTH]; +} diff --git a/tests/sdcard-test.c b/tests/sdcard-test.c index c59af28382..81789d1f88 100644 --- a/tests/sdcard-test.c +++ b/tests/sdcard-test.c @@ -23,6 +23,17 @@ static void test_sd_response_frame136_crc7(void) sizeof(buf)); buf[15] =3D sd_frame136_calc_checksum(buf); g_assert_cmphex(buf[15], =3D=3D, 0xad); + + g_assert_true(sd_frame136_verify_checksum(buf)); +} + +static void test_sd_verify_cksum_frame136(void) +{ + uint8_t buf[16]; + + memset(buf, 69, sizeof(buf)); + buf[15] =3D sd_frame136_calc_checksum(buf); + g_assert_true(sd_frame136_verify_checksum(buf)); } =20 int main(int argc, char *argv[]) @@ -30,6 +41,7 @@ int main(int argc, char *argv[]) g_test_init(&argc, &argv, NULL); =20 qtest_add_func("sd/prepare_resp136_crc7", test_sd_response_frame136_cr= c7); + qtest_add_func("sd/verify_cksum_frame136", test_sd_verify_cksum_frame1= 36); =20 return g_test_run(); } --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15258382248501022.9210174793322; Tue, 8 May 2018 20:57:04 -0700 (PDT) Received: from localhost ([::1]:54317 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGGDw-0004zm-1q for importer@patchew.org; Tue, 08 May 2018 23:57:04 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58564) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG4q-0004h6-CD for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4o-00038b-EA for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:40 -0400 Received: from mail-qt0-x242.google.com ([2607:f8b0:400d:c0d::242]:45685) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4o-00038C-8D for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:38 -0400 Received: by mail-qt0-x242.google.com with SMTP id j42-v6so43940710qtj.12 for ; Tue, 08 May 2018 20:47:38 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PE0jvDqc7ydGppO075eNYIhSUAFJ2u8znNr3J3z9Njs=; b=nP1lgvtrCpR7F9zvuNJrtJ7E94zhgHUQsv3SFtp7PLSEKNXYW+Jq2IkExFg/8tB6OU Lwj4Qokx2vdeGbH8DEk64ytx+OmDJjeFZ4ILk0mVo6wC5nXS9mX8OFiHQFpwAVnEKoUK CwnukIFgh3YO6yOvxYofgXOEU07loShUCIcg3wZTv7wgXDaYALLYHED5XTuqvFUwSiYE /RNSHzz11uORYRCCnY44wGCCYoQOrUP3LWtDMam6BJqrdocApq/2YzzTzrCmKyVtpYkN YQUBf23ThG1MclcflaZJhBlg1xVd+C/M+XFPON7l2QHUnW1391205PiEl27PBVhpAvom pmiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=PE0jvDqc7ydGppO075eNYIhSUAFJ2u8znNr3J3z9Njs=; b=Hzm15ICpqcbjDvBt0l3Ka+hh5DJDJhVtDNHLlrRVqqpAYqN/wghPOH7DSuV/vTbl9F ovb3piy8uCPYCrbm5FHoO79dcf0RDgt/xOK9KQIqk57ooDjfhmhcjsBXyuv10M4Eq9Bd POAN5W2o/vowAzAluAOXMP0fJMpk0i/U9+lb0NH9n1q3aOTyuykzsJEesSVlID38E4tE lm5JxsnJyPxxHuCvFdoNxo9dnJzPELkFEfW6yl878TYSqBIBIejWxMMsdkUV2r4OMEVk mCcEnoqKwZ5B+gRU1xdGZjnJUwIqmSgAdOTiy6zOfKrRbX5PM5viayTfHOn95Q64WWM5 FAxg== X-Gm-Message-State: ALQs6tAvUwvKGJbA9AumLjo8Fk0ruo0HIRUQCmk7v5ICvhHvbBKbiSqc lZOTDMofAAS/LdHcHe7/4sU= X-Google-Smtp-Source: AB8JxZpJ0X7FzdUgdTnLDM94fXOwMaN2M22K2kkEquToUx+9+UZ3K2GjA8dXwE0SQPjXMQjxPpCvIQ== X-Received: by 2002:ac8:31ca:: with SMTP id i10-v6mr37906385qte.166.1525837657333; Tue, 08 May 2018 20:47:37 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:54 -0300 Message-Id: <20180509034658.26455-11-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::242 Subject: [Qemu-devel] [PATCH v2 10/14] sdcard: Remove the SDRequest argument from internal functions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Replace the SDRequest argument using directly {uint8_t cmd, uint32_t arg}, it will be easier to remove the SDRequest struct in the next commit. Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/sd.c | 104 +++++++++++++++++++++++++++-------------------------- 1 file changed, 53 insertions(+), 51 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 125707a65c..0dfcaf480c 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -853,35 +853,34 @@ static void sd_lock_command(SDState *sd) sd->card_status &=3D ~CARD_IS_LOCKED; } =20 -static sd_rsp_type_t sd_normal_command(SDState *sd, SDRequest req) +static sd_rsp_type_t sd_normal_command(SDState *sd, uint8_t cmd, uint32_t = arg) { uint32_t rca =3D 0x0000; - uint64_t addr =3D (sd->ocr & (1 << 30)) ? (uint64_t) req.arg << 9 : re= q.arg; + uint64_t addr =3D (sd->ocr & (1 << 30)) ? (uint64_t) arg << 9 : arg; =20 /* CMD55 precedes an ACMD, so we are not interested in tracing it. * However there is no ACMD55, so we want to trace this particular cas= e. */ - if (req.cmd !=3D 55 || sd->expecting_acmd) { + if (cmd !=3D 55 || sd->expecting_acmd) { trace_sdcard_normal_command(sd->proto_name, - sd_cmd_name(req.cmd), req.cmd, - req.arg, sd_state_name(sd->state)); + sd_cmd_name(cmd), cmd, + arg, sd_state_name(sd->state)); } =20 /* Not interpreting this as an app command */ sd->card_status &=3D ~APP_CMD; =20 - if (sd_cmd_type[req.cmd] =3D=3D sd_ac - || sd_cmd_type[req.cmd] =3D=3D sd_adtc) { - rca =3D req.arg >> 16; + if (sd_cmd_type[cmd] =3D=3D sd_ac || sd_cmd_type[cmd] =3D=3D sd_adtc) { + rca =3D arg >> 16; } =20 /* CMD23 (set block count) must be immediately followed by CMD18 or CM= D25 * if not, its effects are cancelled */ - if (sd->multi_blk_cnt !=3D 0 && !(req.cmd =3D=3D 18 || req.cmd =3D=3D = 25)) { + if (sd->multi_blk_cnt !=3D 0 && !(cmd =3D=3D 18 || cmd =3D=3D 25)) { sd->multi_blk_cnt =3D 0; } =20 - switch (req.cmd) { + switch (cmd) { /* Basic commands (Class 0 and Class 1) */ case 0: /* CMD0: GO_IDLE_STATE */ switch (sd->state) { @@ -950,7 +949,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, SDR= equest req) goto bad_cmd; switch (sd->mode) { case sd_data_transfer_mode: - sd_function_switch(sd, req.arg); + sd_function_switch(sd, arg); sd->state =3D sd_sendingdata_state; sd->data_start =3D 0; sd->data_offset =3D 0; @@ -1007,12 +1006,12 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,= SDRequest req) sd->vhs =3D 0; =20 /* No response if not exactly one VHS bit is set. */ - if (!(req.arg >> 8) || (req.arg >> (ctz32(req.arg & ~0xff) + 1))) { + if (!(arg >> 8) || (arg >> (ctz32(arg & ~0xff) + 1))) { return sd->spi ? sd_r7 : sd_r0; } =20 /* Accept. */ - sd->vhs =3D req.arg; + sd->vhs =3D arg; return sd_r7; =20 case 9: /* CMD9: SEND_CSD */ @@ -1109,11 +1108,11 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,= SDRequest req) case 16: /* CMD16: SET_BLOCKLEN */ switch (sd->state) { case sd_transfer_state: - if (req.arg > (1 << HWBLOCK_SHIFT)) { + if (arg > (1 << HWBLOCK_SHIFT)) { sd->card_status |=3D BLOCK_LEN_ERROR; } else { - trace_sdcard_set_blocklen(req.arg); - sd->blk_len =3D req.arg; + trace_sdcard_set_blocklen(arg); + sd->blk_len =3D arg; } =20 return sd_r1; @@ -1166,7 +1165,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) case 23: /* CMD23: SET_BLOCK_COUNT */ switch (sd->state) { case sd_transfer_state: - sd->multi_blk_cnt =3D req.arg; + sd->multi_blk_cnt =3D arg; return sd_r1; =20 default: @@ -1303,7 +1302,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) switch (sd->state) { case sd_transfer_state: sd->state =3D sd_sendingdata_state; - *(uint32_t *) sd->data =3D sd_wpbits(sd, req.arg); + *(uint32_t *) sd->data =3D sd_wpbits(sd, arg); sd->data_start =3D addr; sd->data_offset =3D 0; return sd_r1b; @@ -1317,7 +1316,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) case 32: /* CMD32: ERASE_WR_BLK_START */ switch (sd->state) { case sd_transfer_state: - sd->erase_start =3D req.arg; + sd->erase_start =3D arg; return sd_r1; =20 default: @@ -1328,7 +1327,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) case 33: /* CMD33: ERASE_WR_BLK_END */ switch (sd->state) { case sd_transfer_state: - sd->erase_end =3D req.arg; + sd->erase_end =3D arg; return sd_r1; =20 default: @@ -1391,7 +1390,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) case sd_idle_state: if (rca) { qemu_log_mask(LOG_GUEST_ERROR, - "SD: illegal RCA 0x%04x for APP_CMD\n", req.= cmd); + "SD: illegal RCA 0x%04x for APP_CMD\n", cmd); } default: break; @@ -1409,10 +1408,11 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,= SDRequest req) switch (sd->state) { case sd_transfer_state: sd->data_offset =3D 0; - if (req.arg & 1) + if (arg & 1) { sd->state =3D sd_sendingdata_state; - else + } else { sd->state =3D sd_receivingdata_state; + } return sd_r1; =20 default: @@ -1434,27 +1434,26 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,= SDRequest req) =20 default: bad_cmd: - qemu_log_mask(LOG_GUEST_ERROR, "SD: Unknown CMD%i\n", req.cmd); + qemu_log_mask(LOG_GUEST_ERROR, "SD: Unknown CMD%i\n", cmd); return sd_illegal; =20 unimplemented_spi_cmd: /* Commands that are recognised but not yet implemented in SPI mod= e. */ qemu_log_mask(LOG_UNIMP, "SD: CMD%i not implemented in SPI mode\n", - req.cmd); + cmd); return sd_illegal; } =20 - qemu_log_mask(LOG_GUEST_ERROR, "SD: CMD%i in a wrong state\n", req.cmd= ); + qemu_log_mask(LOG_GUEST_ERROR, "SD: CMD%i in a wrong state\n", cmd); return sd_illegal; } =20 -static sd_rsp_type_t sd_app_command(SDState *sd, - SDRequest req) +static sd_rsp_type_t sd_app_command(SDState *sd, uint8_t cmd, uint32_t arg) { - trace_sdcard_app_command(sd->proto_name, sd_acmd_name(req.cmd), - req.cmd, req.arg, sd_state_name(sd->state)); + trace_sdcard_app_command(sd->proto_name, sd_acmd_name(cmd), + cmd, arg, sd_state_name(sd->state)); sd->card_status |=3D APP_CMD; - switch (req.cmd) { + switch (cmd) { case 6: /* ACMD6: SET_BUS_WIDTH */ if (sd->spi) { goto unimplemented_spi_cmd; @@ -1462,7 +1461,7 @@ static sd_rsp_type_t sd_app_command(SDState *sd, switch (sd->state) { case sd_transfer_state: sd->sd_status[0] &=3D 0x3f; - sd->sd_status[0] |=3D (req.arg & 0x03) << 6; + sd->sd_status[0] |=3D (arg & 0x03) << 6; return sd_r1; =20 default: @@ -1526,7 +1525,7 @@ static sd_rsp_type_t sd_app_command(SDState *sd, * assumes that the card is in ready state as soon as it * sees the power up bit set. */ if (!FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP)) { - if ((req.arg & ACMD41_ENQUIRY_MASK) !=3D 0) { + if ((arg & ACMD41_ENQUIRY_MASK) !=3D 0) { timer_del(sd->ocr_power_timer); sd_ocr_powerup(sd); } else { @@ -1539,7 +1538,7 @@ static sd_rsp_type_t sd_app_command(SDState *sd, } } =20 - if (FIELD_EX32(sd->ocr & req.arg, OCR, VDD_VOLTAGE_WINDOW)) { + if (FIELD_EX32(sd->ocr & arg, OCR, VDD_VOLTAGE_WINDOW)) { /* We accept any voltage. 10000 V is nothing. * * Once we're powered up, we advance straight to ready state @@ -1583,25 +1582,25 @@ static sd_rsp_type_t sd_app_command(SDState *sd, * information about the SD Security Features. */ qemu_log_mask(LOG_UNIMP, "SD: CMD%i Security not implemented\n", - req.cmd); + cmd); return sd_illegal; =20 default: /* Fall back to standard commands. */ - return sd_normal_command(sd, req); + return sd_normal_command(sd, cmd, arg); =20 unimplemented_spi_cmd: /* Commands that are recognised but not yet implemented in SPI mod= e. */ qemu_log_mask(LOG_UNIMP, "SD: CMD%i not implemented in SPI mode\n", - req.cmd); + cmd); return sd_illegal; } =20 - qemu_log_mask(LOG_GUEST_ERROR, "SD: ACMD%i in a wrong state\n", req.cm= d); + qemu_log_mask(LOG_GUEST_ERROR, "SD: ACMD%i in a wrong state\n", cmd); return sd_illegal; } =20 -static int cmd_valid_while_locked(SDState *sd, SDRequest *req) +static int cmd_valid_while_locked(SDState *sd, uint8_t cmd) { /* Valid commands in locked state: * basic class (0) @@ -1612,13 +1611,12 @@ static int cmd_valid_while_locked(SDState *sd, SDRe= quest *req) * Anything else provokes an "illegal command" response. */ if (sd->expecting_acmd) { - return req->cmd =3D=3D 41 || req->cmd =3D=3D 42; + return cmd =3D=3D 41 || cmd =3D=3D 42; } - if (req->cmd =3D=3D 16 || req->cmd =3D=3D 55) { + if (cmd =3D=3D 16 || cmd =3D=3D 55) { return 1; } - return sd_cmd_class[req->cmd] =3D=3D 0 - || sd_cmd_class[req->cmd] =3D=3D 7; + return sd_cmd_class[cmd] =3D=3D 0 || sd_cmd_class[cmd] =3D=3D 7; } =20 int sd_do_command(SDState *sd, SDRequest *req, @@ -1626,25 +1624,29 @@ int sd_do_command(SDState *sd, SDRequest *req, int last_state; sd_rsp_type_t rtype; int rsplen; + uint8_t cmd; + uint32_t arg; =20 if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable) { return 0; } =20 + cmd =3D req->cmd; + arg =3D req->arg; + if (!sd_req_crc_is_valid(req)) { sd->card_status |=3D COM_CRC_ERROR; rtype =3D sd_illegal; goto send_response; } =20 - if (req->cmd >=3D SDMMC_CMD_MAX) { - qemu_log_mask(LOG_GUEST_ERROR, "SD: incorrect command 0x%02x\n", - req->cmd); - req->cmd &=3D 0x3f; + if (cmd >=3D SDMMC_CMD_MAX) { + qemu_log_mask(LOG_GUEST_ERROR, "SD: incorrect command 0x%02x\n", c= md); + cmd &=3D 0x3f; } =20 if (sd->card_status & CARD_IS_LOCKED) { - if (!cmd_valid_while_locked(sd, req)) { + if (!cmd_valid_while_locked(sd, cmd)) { sd->card_status |=3D ILLEGAL_COMMAND; sd->expecting_acmd =3D false; qemu_log_mask(LOG_GUEST_ERROR, "SD: Card is locked\n"); @@ -1658,9 +1660,9 @@ int sd_do_command(SDState *sd, SDRequest *req, =20 if (sd->expecting_acmd) { sd->expecting_acmd =3D false; - rtype =3D sd_app_command(sd, *req); + rtype =3D sd_app_command(sd, cmd, arg); } else { - rtype =3D sd_normal_command(sd, *req); + rtype =3D sd_normal_command(sd, cmd, arg); } =20 if (rtype =3D=3D sd_illegal) { @@ -1669,7 +1671,7 @@ int sd_do_command(SDState *sd, SDRequest *req, /* Valid command, we can update the 'state before command' bits. * (Do this now so they appear in r1 responses.) */ - sd->current_cmd =3D req->cmd; + sd->current_cmd =3D cmd; sd->card_status &=3D ~CURRENT_STATE; sd->card_status |=3D (last_state << 9); } --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525837800825515.4726877391955; Tue, 8 May 2018 20:50:00 -0700 (PDT) Received: from localhost ([::1]:54271 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG75-0006FC-PE for importer@patchew.org; Tue, 08 May 2018 23:49:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58582) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG4u-0004kt-M4 for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4s-0003GY-RA for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:44 -0400 Received: from mail-qt0-x243.google.com ([2607:f8b0:400d:c0d::243]:33764) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4s-0003Fe-KM; Tue, 08 May 2018 23:47:42 -0400 Received: by mail-qt0-x243.google.com with SMTP id e8-v6so39086428qth.0; Tue, 08 May 2018 20:47:42 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=b2jj6JHF/26Ub6RrKEBQYGsJ5Q9cVnckVWeI0V2ZSGY=; b=hDtLuN5e2mQgR18WxH/kiLQvas4QTcDSkJ1ZRepGiEcNjgZJUsm3KpW+yOXpDlylaH uD7uH7rhRfiLJPHTS3wMK35WLxMIGuTfLfelqaQqcEooZGIO0WebtwKPyaIo2bUFfdvz vWx3DUy9qiPyB8dGuwvhqxeVT3PkjV7layCtDdgx46pukjAW9i2F7eF0qj/ibaE1IOco 2zIxffn+Q7OqmUjtAkM9F52vb2DL+oJakcnvuL+PcswvJUPXlYBWikhAPdaJNg7cH86Z eN6/gaKPnlww+7/OnuJVUSFDwgwhGPI8JRmYFRwSnLo68QmlTRR4GUBoPuf42VOJGs/J ixDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=b2jj6JHF/26Ub6RrKEBQYGsJ5Q9cVnckVWeI0V2ZSGY=; b=Ybp4jDk+LWjcEV2oL48WRFnE0RGVai5QIMt+Hb//MB9IoqAvD4Jc0S98d8i25yztKR j9HmlbzQ9L+mZy3ZS9i8Z76hUJB0qVFYue0PkM3hCMOIISgKDfyD8srzZ8CmXmZXDOrM YUQIBnNEfPE1TjjpYzzWuFvSdH62lWa5BV7mLz1Bp+MvZuJ2bG0SiJ5VuNu9eNE6Bp7U aKmFNIuqgFjm/5B7RbUA5PccaGOo0QgdxOIq41YODhOJdUWKHBCvHVripRWkxvXY6Dj5 EsfqChPQtT49890uM7H7AqIw+adJCbOT/P8AhvHRKasPIMmkXa4/KwHUDf4ZUnVKcfwj 6wBw== X-Gm-Message-State: ALQs6tD+gsfcUYDTBPJ9oxPxzOfHMZwK3JxC8ZahL4WauMUAAdNTzsAq tTYuEPSy96XPxi42zGFnIMg= X-Google-Smtp-Source: AB8JxZpD1NHZsDdimc3RIU7B6DEwpzTS69r3Tz0Jz5w3jOHytP+2rxro/BcvBbOXGhYNKqGZwD4jcg== X-Received: by 2002:ac8:5254:: with SMTP id y20-v6mr22779491qtn.310.1525837661649; Tue, 08 May 2018 20:47:41 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:55 -0300 Message-Id: <20180509034658.26455-12-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::243 Subject: [Qemu-devel] [PATCH v2 11/14] sdcard: Add sd_frame48_init(), replace SDRequest by a raw buffer X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-devel@nongnu.org, Michael Walle , "open list:ARM PrimeCell and..." , Stefan Hajnoczi , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Using sd_frame48_init() we silent the Coverity warning: "Use of an uninitialized variable (CWE-457)" and fixes the following issues (all "Uninitialized scalar variable"): - CID1386072 (hw/sd/sdhci.c::sdhci_end_transfer) - CID1386074 (hw/sd/bcm2835_sdhost.c::bcm2835_sdhost_send_command) - CID1386076 (hw/sd/sdhci.c::sdhci_send_command) - CID1390571 (hw/sd/ssi-sd.c::ssi_sd_transfer) Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- include/hw/sd/sd.h | 24 +++++++++++++++--------- hw/sd/bcm2835_sdhost.c | 8 ++++---- hw/sd/core.c | 7 ++++--- hw/sd/milkymist-memcard.c | 12 +++--------- hw/sd/omap_mmc.c | 8 +++----- hw/sd/pl181.c | 10 +++++----- hw/sd/pxa2xx_mmci.c | 8 +++----- hw/sd/sd.c | 13 +++++-------- hw/sd/sdhci.c | 20 ++++++++++---------- hw/sd/sdmmc-internal.c | 12 ++++++++++++ hw/sd/ssi-sd.c | 12 +++++++----- 11 files changed, 71 insertions(+), 63 deletions(-) diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index 83399cd42d..85b66a27a3 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -76,12 +76,6 @@ typedef enum { sd_adtc, /* addressed with data transfer */ } sd_cmd_type_t; =20 -typedef struct { - uint8_t cmd; - uint32_t arg; - uint8_t crc; -} SDRequest; - typedef struct SDState SDState; typedef struct SDBus SDBus; =20 @@ -97,7 +91,7 @@ typedef struct { DeviceClass parent_class; /*< public >*/ =20 - int (*do_command)(SDState *sd, SDRequest *req, uint8_t *response); + int (*do_command)(SDState *sd, const uint8_t *request, uint8_t *respon= se); void (*write_data)(SDState *sd, uint8_t value); uint8_t (*read_data)(SDState *sd); bool (*data_ready)(SDState *sd); @@ -130,6 +124,18 @@ typedef struct { void (*set_readonly)(DeviceState *dev, bool readonly); } SDBusClass; =20 +/** + * sd_frame48_init: Initialize a 48-bit SD frame + * + * @buf: the buffer to be filled + * @bufsize: the size of the @buffer + * @cmd: the SD command + * @arg: the SD command argument + * @is_response: whether the frame is a command request or response + */ +void sd_frame48_init(uint8_t *buf, size_t bufsize, uint8_t cmd, uint32_t a= rg, + bool is_response); + /** * sd_frame48_calc_checksum: * @content: pointer to the frame content @@ -172,7 +178,7 @@ bool sd_frame136_verify_checksum(const void *content); =20 /* Legacy functions to be used only by non-qdevified callers */ SDState *sd_init(BlockBackend *bs, bool is_spi); -int sd_do_command(SDState *sd, SDRequest *req, +int sd_do_command(SDState *sd, const uint8_t *request, uint8_t *response); void sd_write_data(SDState *sd, uint8_t value); uint8_t sd_read_data(SDState *sd); @@ -193,7 +199,7 @@ void sd_enable(SDState *sd, bool enable); void sdbus_set_voltage(SDBus *sdbus, uint16_t millivolts); uint8_t sdbus_get_dat_lines(SDBus *sdbus); bool sdbus_get_cmd_line(SDBus *sdbus); -int sdbus_do_command(SDBus *sd, SDRequest *req, uint8_t *response); +int sdbus_do_command(SDBus *sd, const uint8_t *request, uint8_t *response); void sdbus_write_data(SDBus *sd, uint8_t value); uint8_t sdbus_read_data(SDBus *sd); bool sdbus_data_ready(SDBus *sd); diff --git a/hw/sd/bcm2835_sdhost.c b/hw/sd/bcm2835_sdhost.c index 4df4de7d67..b637a392b6 100644 --- a/hw/sd/bcm2835_sdhost.c +++ b/hw/sd/bcm2835_sdhost.c @@ -106,14 +106,14 @@ static void bcm2835_sdhost_update_irq(BCM2835SDHostSt= ate *s) =20 static void bcm2835_sdhost_send_command(BCM2835SDHostState *s) { - SDRequest request; + uint8_t req[6]; uint8_t rsp[16]; int rlen; =20 - request.cmd =3D s->cmd & SDCMD_CMD_MASK; - request.arg =3D s->cmdarg; + sd_frame48_init(req, sizeof(req), s->cmd & SDCMD_CMD_MASK, + s->cmdarg, false); =20 - rlen =3D sdbus_do_command(&s->sdbus, &request, rsp); + rlen =3D sdbus_do_command(&s->sdbus, req, rsp); if (rlen < 0) { goto error; } diff --git a/hw/sd/core.c b/hw/sd/core.c index 820345f704..15cae5053c 100644 --- a/hw/sd/core.c +++ b/hw/sd/core.c @@ -87,15 +87,16 @@ void sdbus_set_voltage(SDBus *sdbus, uint16_t millivolt= s) } } =20 -int sdbus_do_command(SDBus *sdbus, SDRequest *req, uint8_t *response) +int sdbus_do_command(SDBus *sdbus, const uint8_t *request, uint8_t *respon= se) { SDState *card =3D get_card(sdbus); =20 - trace_sdbus_command(sdbus_name(sdbus), req->cmd, req->arg, req->crc); + trace_sdbus_command(sdbus_name(sdbus), + request[0] & 0x3f, ldl_be_p(&request[1]), request[= 5]); if (card) { SDCardClass *sc =3D SD_CARD_GET_CLASS(card); =20 - return sc->do_command(card, req, response); + return sc->do_command(card, request, response); } =20 return 0; diff --git a/hw/sd/milkymist-memcard.c b/hw/sd/milkymist-memcard.c index ff2b92dc64..94bb1ffc6f 100644 --- a/hw/sd/milkymist-memcard.c +++ b/hw/sd/milkymist-memcard.c @@ -97,14 +97,8 @@ static void update_pending_bits(MilkymistMemcardState *s) =20 static void memcard_sd_command(MilkymistMemcardState *s) { - SDRequest req; - - req.cmd =3D s->command[0] & 0x3f; - req.arg =3D ldl_be_p(s->command + 1); - req.crc =3D s->command[5]; - - s->response[0] =3D req.cmd; - s->response_len =3D sdbus_do_command(&s->sdbus, &req, s->response + 1); + s->response[0] =3D s->command[0]; + s->response_len =3D sdbus_do_command(&s->sdbus, s->command, s->respons= e + 1); s->response_read_ptr =3D 0; =20 if (s->response_len =3D=3D 16) { @@ -117,7 +111,7 @@ static void memcard_sd_command(MilkymistMemcardState *s) s->response_len +=3D 2; } =20 - if (req.cmd =3D=3D 0) { + if ((s->command[0] & 0x3f) =3D=3D 0) { /* next write is a dummy byte to clock the initialization of the sd * card */ s->ignore_next_cmd =3D 1; diff --git a/hw/sd/omap_mmc.c b/hw/sd/omap_mmc.c index 51c6c124b2..ca6a2ab2aa 100644 --- a/hw/sd/omap_mmc.c +++ b/hw/sd/omap_mmc.c @@ -113,7 +113,7 @@ static void omap_mmc_command(struct omap_mmc_s *host, i= nt cmd, int dir, { uint32_t rspstatus, mask; int rsplen, timeout; - SDRequest request; + uint8_t request[6]; uint8_t response[16]; =20 if (init && cmd =3D=3D 0) { @@ -135,11 +135,9 @@ static void omap_mmc_command(struct omap_mmc_s *host, = int cmd, int dir, mask =3D 0; rspstatus =3D 0; =20 - request.cmd =3D cmd; - request.arg =3D host->arg; - request.crc =3D 0; /* FIXME */ + sd_frame48_init(request, sizeof(request), cmd, host->arg, false); =20 - rsplen =3D sd_do_command(host->card, &request, response); + rsplen =3D sd_do_command(host->card, request, response); =20 /* TODO: validate CRCs */ switch (resptype) { diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c index c9b1a6cb23..d8f6df8726 100644 --- a/hw/sd/pl181.c +++ b/hw/sd/pl181.c @@ -172,14 +172,14 @@ static uint32_t pl181_fifo_pop(PL181State *s) =20 static void pl181_send_command(PL181State *s) { - SDRequest request; + uint8_t request[6]; uint8_t response[16]; int rlen; =20 - request.cmd =3D s->cmd & PL181_CMD_INDEX; - request.arg =3D s->cmdarg; - DPRINTF("Command %d %08x\n", request.cmd, request.arg); - rlen =3D sd_do_command(s->card, &request, response); + sd_frame48_init(request, sizeof(request), s->cmd & PL181_CMD_INDEX, + s->cmdarg, false); + + rlen =3D sd_do_command(s->card, request, response); if (rlen < 0) goto error; if (s->cmd & PL181_CMD_RESPONSE) { diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c index 82f8ec0d50..055d140f83 100644 --- a/hw/sd/pxa2xx_mmci.c +++ b/hw/sd/pxa2xx_mmci.c @@ -216,7 +216,7 @@ static void pxa2xx_mmci_fifo_update(PXA2xxMMCIState *s) static void pxa2xx_mmci_wakequeues(PXA2xxMMCIState *s) { int rsplen, i; - SDRequest request; + uint8_t request[6]; uint8_t response[16]; =20 s->active =3D 1; @@ -224,11 +224,9 @@ static void pxa2xx_mmci_wakequeues(PXA2xxMMCIState *s) s->tx_len =3D 0; s->cmdreq =3D 0; =20 - request.cmd =3D s->cmd; - request.arg =3D s->arg; - request.crc =3D 0; /* FIXME */ + sd_frame48_init(request, sizeof(request), s->cmd, s->arg, false); =20 - rsplen =3D sdbus_do_command(&s->sdbus, &request, response); + rsplen =3D sdbus_do_command(&s->sdbus, request, response); s->intreq |=3D INT_END_CMD; =20 memset(s->resp_fifo, 0, sizeof(s->resp_fifo)); diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 0dfcaf480c..aaf3a6806a 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -467,11 +467,8 @@ static void sd_set_sdstatus(SDState *sd) memset(sd->sd_status, 0, 64); } =20 -static bool sd_req_crc_is_valid(SDRequest *req) +static bool sd_req_crc_is_valid(const void *buffer) { - uint8_t buffer[5]; - buffer[0] =3D 0x40 | req->cmd; - stl_be_p(&buffer[1], req->arg); return true; return sd_frame48_verify_checksum(buffer); /* TODO */ } @@ -1619,7 +1616,7 @@ static int cmd_valid_while_locked(SDState *sd, uint8_= t cmd) return sd_cmd_class[cmd] =3D=3D 0 || sd_cmd_class[cmd] =3D=3D 7; } =20 -int sd_do_command(SDState *sd, SDRequest *req, +int sd_do_command(SDState *sd, const uint8_t *request, uint8_t *response) { int last_state; sd_rsp_type_t rtype; @@ -1631,10 +1628,10 @@ int sd_do_command(SDState *sd, SDRequest *req, return 0; } =20 - cmd =3D req->cmd; - arg =3D req->arg; + cmd =3D request[0]; + arg =3D ldl_be_p(&request[1]); =20 - if (!sd_req_crc_is_valid(req)) { + if (!sd_req_crc_is_valid(request)) { sd->card_status |=3D COM_CRC_ERROR; rtype =3D sd_illegal; goto send_response; diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index f6fe93f033..554bb059ec 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -330,17 +330,18 @@ static void sdhci_data_transfer(void *opaque); =20 static void sdhci_send_command(SDHCIState *s) { - SDRequest request; + uint8_t request[6]; uint8_t response[16]; int rlen; =20 s->errintsts =3D 0; s->acmd12errsts =3D 0; - request.cmd =3D s->cmdreg >> 8; - request.arg =3D s->argument; =20 - trace_sdhci_send_command(request.cmd, request.arg); - rlen =3D sdbus_do_command(&s->sdbus, &request, response); + trace_sdhci_send_command(s->cmdreg >> 8, s->argument); + sd_frame48_init(request, sizeof(request), s->cmdreg >> 8, + s->argument, false); + + rlen =3D sdbus_do_command(&s->sdbus, request, response); =20 if (s->cmdreg & SDHC_CMD_RESPONSE) { if (rlen =3D=3D 4) { @@ -386,13 +387,12 @@ static void sdhci_end_transfer(SDHCIState *s) { /* Automatically send CMD12 to stop transfer if AutoCMD12 enabled */ if ((s->trnmod & SDHC_TRNS_ACMD12) !=3D 0) { - SDRequest request; + uint8_t request[6]; uint8_t response[16]; =20 - request.cmd =3D 0x0C; - request.arg =3D 0; - trace_sdhci_end_transfer(request.cmd, request.arg); - sdbus_do_command(&s->sdbus, &request, response); + trace_sdhci_end_transfer(12, 0); + sd_frame48_init(request, sizeof(request), 12, 0, false); + sdbus_do_command(&s->sdbus, request, response); /* Auto CMD12 response goes to the upper Response register */ s->rspreg[3] =3D ldl_be_p(response); } diff --git a/hw/sd/sdmmc-internal.c b/hw/sd/sdmmc-internal.c index f709211401..c8475a6e8e 100644 --- a/hw/sd/sdmmc-internal.c +++ b/hw/sd/sdmmc-internal.c @@ -92,7 +92,9 @@ static uint8_t sd_crc7(const void *message, size_t width) } =20 enum { + CRC7_LENGTH =3D 1, F48_CONTENT_LENGTH =3D 1 /* command */ + 4 /* argument */, + F48_SIZE_MAX =3D F48_CONTENT_LENGTH + CRC7_LENGTH, F136_CONTENT_LENGTH =3D 15, }; =20 @@ -117,3 +119,13 @@ bool sd_frame136_verify_checksum(const void *content) return sd_frame136_calc_checksum(content) =3D=3D ((const uint8_t *)content)[F136_CONTENT_LENGTH]; } + +void sd_frame48_init(uint8_t *buf, size_t bufsize, uint8_t cmd, uint32_t a= rg, + bool is_response) +{ + assert(bufsize >=3D F48_SIZE_MAX); + buf[0] =3D (!is_response << 6) | cmd; + stl_be_p(&buf[1], arg); + /* Zero-initialize the CRC byte to avoid leaking host memory to the gu= est */ + buf[F48_CONTENT_LENGTH] =3D 0x00; +} diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index dbcff4013d..77e446bb94 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -93,13 +93,15 @@ static uint32_t ssi_sd_transfer(SSISlave *dev, uint32_t= val) return 0xff; case SSI_SD_CMDARG: if (s->arglen =3D=3D 4) { - SDRequest request; + uint8_t request[6]; uint8_t longresp[16]; /* FIXME: Check CRC. */ - request.cmd =3D s->cmd; - request.arg =3D ldl_be_p(s->cmdarg); - DPRINTF("CMD%d arg 0x%08x\n", s->cmd, request.arg); - s->arglen =3D sdbus_do_command(&s->sdbus, &request, longresp); + + DPRINTF("CMD%d arg 0x%08x\n", s->cmd, ldl_be_p(s->cmdarg)); + sd_frame48_init(request, sizeof(request), s->cmd, + ldl_be_p(s->cmdarg), false); + + s->arglen =3D sdbus_do_command(&s->sdbus, request, longresp); if (s->arglen <=3D 0) { s->arglen =3D 1; s->response[0] =3D 4; --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525837977311370.4624636697439; Tue, 8 May 2018 20:52:57 -0700 (PDT) Received: from localhost ([::1]:54288 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG9t-0000b1-A2 for importer@patchew.org; Tue, 08 May 2018 23:52:53 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58605) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG4y-0004nl-Uv for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4v-0003Lo-RX for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:49 -0400 Received: from mail-qt0-x243.google.com ([2607:f8b0:400d:c0d::243]:38215) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4v-0003LA-Mk for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:45 -0400 Received: by mail-qt0-x243.google.com with SMTP id m9-v6so23222198qtb.5 for ; Tue, 08 May 2018 20:47:45 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=u1zCEGvuZ/Sf/oh4Wpn3Cb39XlfQ5FDh9GWXfpQE1sA=; b=kv5ddOPwU8abh2aegjR8Ab0Q8rhQNzxesRpex1zIPQAkHLmtyjWLnZANDfoTgjjOL/ QuF+qpaoEuHU7aAXiK631pVAWug/6iF+/EGmaCVJ0/YLJDum9OJPALPtVPRQ6bOZcHgw 33FxfRQkGbZP9RKXJxNkp5FeaM3r/JUvmGaeq0bDBUXCdty/MiO4Qx27zanieWlyaFrh mi6ycz6LQ+mX8odSSUs0Y/HylbuRddI2v5qKyqfZ6EXdLk32OQ/SQlYO1T3ggx24KXMr iJEMK0pj54cE+/XW6qYJRrkLofa6Z4NVxZOEQHvb205u1fUPqWzQNfNAqBBgjYafjmwL I17A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=u1zCEGvuZ/Sf/oh4Wpn3Cb39XlfQ5FDh9GWXfpQE1sA=; b=FZUQl99j7TgR9oFXNIFrMdtTgFAzTAAahkqtabf3x/Gj258F0mvUhJ9SXu5OdMemDx pg6LMUcd1pbd81xLNIwnS9GkI56gQbTfbqqQTXMJtGCNJe4rpqyG3+DFmNzzb6/T6yuR voYlQj9EoEjzEQxiYOiSQC3Y0Kr+qo344bKKEiB9Euok0hioka/It5bP/ayfEgqkWrOG zQjDKu8BNSUBYAWt1RHqHP8P6f1a+Ry6evER3GxHwna7UHAEqmVA/NQ7tUMK5RB/AwzG S/yeeyJy1jQwfA+44NxwqOGeALyaKqyfM5pLT0A6PV4DHdW3FAojLdeSDwBsC399IzhD 8zeA== X-Gm-Message-State: ALQs6tAV/ROfIx5fQ7OCQJKPp4co9Jg4awtg8KPkZhDajQAWx+w2BY7a n5ArNxkdZsCPipr1R69RAnQ= X-Google-Smtp-Source: AB8JxZpliNYGuvthwMxzWc7TdGDJN/qd63AXpJLYSuTQxhjDx+NvrP7lMzPwiAmNaY5F09t8CFyLSQ== X-Received: by 2002:ac8:41cc:: with SMTP id o12-v6mr39234570qtm.227.1525837665071; Tue, 08 May 2018 20:47:45 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:56 -0300 Message-Id: <20180509034658.26455-13-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::243 Subject: [Qemu-devel] [PATCH v2 12/14] sdcard: Add tests to validate the 7-bit CRC checksum of 48-bit SD frame X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- tests/sdcard-test.c | 74 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/tests/sdcard-test.c b/tests/sdcard-test.c index 81789d1f88..2288a05cdf 100644 --- a/tests/sdcard-test.c +++ b/tests/sdcard-test.c @@ -14,6 +14,66 @@ #include "libqtest.h" #include "hw/sd/sd.h" =20 +static void sd_prepare_request48(uint8_t *buf, size_t bufsize, + uint8_t cmd, uint32_t arg) +{ + sd_frame48_init(buf, bufsize, cmd, arg, /* is_resp */ false); + buf[5] =3D sd_frame48_calc_checksum(buf); +} + +static void sd_prepare_response48(uint8_t *buf, size_t bufsize, + uint8_t cmd, uint32_t arg) +{ + sd_frame48_init(buf, bufsize, cmd, arg, /* is_resp */ true); + buf[5] =3D sd_frame48_calc_checksum(buf); +} + +static void test_sd_request_frame_crc7(void) +{ + uint8_t req[6]; + + /* CMD0 */ + sd_prepare_request48(req, sizeof(req), 0, 0); + g_assert_cmphex(req[5], =3D=3D, 0b1001010); + + /* CMD17 */ + sd_prepare_request48(req, sizeof(req), 17, 0); + g_assert_cmphex(req[5], =3D=3D, 0b0101010); + + /* APP_CMD */ + sd_prepare_request48(req, sizeof(req), 55, 0); + g_assert_cmphex(req[5], =3D=3D, 0x32); + + /* ACMD41 SEND_OP_COND */ + sd_prepare_request48(req, sizeof(req), 41, 0x00100000); + g_assert_cmphex(req[5], =3D=3D, 0x5f >> 1); + + /* CMD2 ALL_SEND_CID */ + sd_prepare_request48(req, sizeof(req), 2, 0); + g_assert_cmphex(req[5], =3D=3D, 0x4d >> 1); + + g_assert_true(sd_frame48_verify_checksum(req)); +} + +static void test_sd_response_frame48_crc7(void) +{ + uint8_t resp[6]; + + /* response to CMD17 */ + sd_prepare_response48(resp, sizeof(resp), 17, 0x00000900); + g_assert_cmphex(resp[5], =3D=3D, 0b0110011); + + /* response to the APP_CMD */ + sd_prepare_response48(resp, sizeof(resp), 55, 0x00000120); + g_assert_cmphex(resp[5], =3D=3D, 0x41); + + /* response to CMD3 SEND_RELATIVE_ADDR (Relative Card Address is 0xb36= 8) */ + sd_prepare_response48(resp, sizeof(resp), 3, 0xb3680500); + g_assert_cmphex(resp[5], =3D=3D, 0x0c); + + g_assert_true(sd_frame48_verify_checksum(resp)); +} + static void test_sd_response_frame136_crc7(void) { uint8_t buf[16]; @@ -27,6 +87,17 @@ static void test_sd_response_frame136_crc7(void) g_assert_true(sd_frame136_verify_checksum(buf)); } =20 +static void test_sd_verify_cksum_frame48(void) +{ + uint8_t buf[6]; + + sd_prepare_request48(buf, sizeof(buf), 42, 0x12345678); + g_assert_true(sd_frame48_verify_checksum(buf)); + + sd_prepare_response48(buf, sizeof(buf), 69, 0x98765432); + g_assert_true(sd_frame48_verify_checksum(buf)); +} + static void test_sd_verify_cksum_frame136(void) { uint8_t buf[16]; @@ -40,7 +111,10 @@ int main(int argc, char *argv[]) { g_test_init(&argc, &argv, NULL); =20 + qtest_add_func("sd/prepare_req_crc7", test_sd_request_frame_crc7); + qtest_add_func("sd/prepare_resp48_crc7", test_sd_response_frame48_crc7= ); qtest_add_func("sd/prepare_resp136_crc7", test_sd_response_frame136_cr= c7); + qtest_add_func("sd/verify_cksum_frame48", test_sd_verify_cksum_frame48= ); qtest_add_func("sd/verify_cksum_frame136", test_sd_verify_cksum_frame1= 36); =20 return g_test_run(); --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525838474286226.35325054862562; Tue, 8 May 2018 21:01:14 -0700 (PDT) Received: from localhost ([::1]:54347 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGGHx-0000wj-JR for importer@patchew.org; Wed, 09 May 2018 00:01:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58617) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG50-0004nn-0o for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG4z-0003T6-23 for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:50 -0400 Received: from mail-qt0-x243.google.com ([2607:f8b0:400d:c0d::243]:39794) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG4y-0003SY-TG for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:48 -0400 Received: by mail-qt0-x243.google.com with SMTP id f1-v6so43975283qtj.6 for ; Tue, 08 May 2018 20:47:48 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jQ1k9e3GzZnNGYAuzgZd3miVz6tH90Mw04lttRBtRdY=; b=FLSmFHTG+jFqjW6yKzHV5R5e46LyStOprJ4y56tFxYu3aYU7fyI+jeAMJ9gxTUmnHv X3xW5YuMGM37C0H+Ik63z0h4CKBA1XqbQnZ/U3wVhUKpmD43JC7bh89HSinPeYtp9Md6 NijZKuENNAKnYPs+1fo9He6N/iux4KPuWKh+jlehA+YSK4EIB0AeZ4UBe9H14mVbENXP tVp0EUCL9sEesZ+D59cMy/wF2pGsRycWi/FlPbBgwHvgG3rWdmZd9Q2D3RzhA6DN84Aa H+ifhgQGpr9Qpqro1dhY+ZUynPQiBbUVbjyVpvHKsnfksAhhG7Z23dq3jXQvPWAy+Gle afQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=jQ1k9e3GzZnNGYAuzgZd3miVz6tH90Mw04lttRBtRdY=; b=omSbU6GMOjl1Duwz1rHIquo/2WlCOADBiBSBsb73+e+y2m074clt9sOSbH0E6W2E/X VxA6v9HgYW3M+tjC5GDsJxiAcX0oxqhGmRh6D2SdUvkct0zZMFFZnQU4kK+DfjNDAHAB z5aff6Uth6iBDerubtDo/NU4ef4Rm4cvTc7XSuOaueKliM3Xa/8PHT0bwqYqZiCBSRGJ nkwZ+Y6qltKeEjSt0FSl3zC5N+i/YLbKqWP4C1jbouXHc43OiKARCAM62oshU5vSKtV+ f/kBY8b0eGPS4db40QvalCDpTo6d/dpLW3AibblZk21q7hs+AoM3vkvAeDg5ggpPK/gl OfFw== X-Gm-Message-State: ALQs6tBgpvFGEr39XORohGj7G8QRUCh8ZN8LKpDjuGE+FIixZtlEqSwB kcrf4ddw+aMZyIf9UHMrvQI= X-Google-Smtp-Source: AB8JxZoSphgqxOQLhw33kbw3WpZvsuW+HOBCsoVg/fBY4+ni/5wFGgFv5FYxq3FzRSJIAx66CWvTEA== X-Received: by 2002:ac8:376b:: with SMTP id p40-v6mr41583506qtb.282.1525837668250; Tue, 08 May 2018 20:47:48 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:57 -0300 Message-Id: <20180509034658.26455-14-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::243 Subject: [Qemu-devel] [PATCH v2 13/14] sdcard: Add a "validate-crc" property X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-devel@nongnu.org, Michael Walle , Stefan Hajnoczi , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Since not all modelled controllers use the CRC verification (which is somehow expensive), let the controller have a configurable property to enable verification. So far only the Milkymist controller uses it. This silent the Coverity warning: "Code block is unreachable because of the syntactic structure of the code= (CWE-561)" and fixes the following issue: - CID1005332 (hw/sd/sd.c::sd_req_crc_validate) Structurally dead code Signed-off-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Michael Walle --- hw/sd/milkymist-memcard.c | 1 + hw/sd/sd.c | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/hw/sd/milkymist-memcard.c b/hw/sd/milkymist-memcard.c index 94bb1ffc6f..f7b6d3b140 100644 --- a/hw/sd/milkymist-memcard.c +++ b/hw/sd/milkymist-memcard.c @@ -273,6 +273,7 @@ static void milkymist_memcard_realize(DeviceState *dev,= Error **errp) blk =3D dinfo ? blk_by_legacy_dinfo(dinfo) : NULL; carddev =3D qdev_create(&s->sdbus.qbus, TYPE_SD_CARD); qdev_prop_set_drive(carddev, "drive", blk, &err); + object_property_set_bool(OBJECT(carddev), true, "validate-crc", &err); object_property_set_bool(OBJECT(carddev), true, "realized", &err); if (err) { error_setg(errp, "failed to init SD card: %s", error_get_pretty(er= r)); diff --git a/hw/sd/sd.c b/hw/sd/sd.c index aaf3a6806a..0170eb832b 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -93,6 +93,7 @@ struct SDState { /* Configurable properties */ BlockBackend *blk; bool spi; + bool validate_crc; =20 uint32_t mode; /* current card mode, one of SDCardModes */ int32_t state; /* current card state, one of SDCardStates */ @@ -467,10 +468,12 @@ static void sd_set_sdstatus(SDState *sd) memset(sd->sd_status, 0, 64); } =20 -static bool sd_req_crc_is_valid(const void *buffer) +static bool sd_req_crc_is_valid(SDState *sd, const void *request) { + if (sd->validate_crc) { + return sd_frame48_verify_checksum(request); + } return true; - return sd_frame48_verify_checksum(buffer); /* TODO */ } =20 static void sd_response_r1_make(SDState *sd, uint8_t *response) @@ -1631,7 +1634,7 @@ int sd_do_command(SDState *sd, const uint8_t *request, cmd =3D request[0]; arg =3D ldl_be_p(&request[1]); =20 - if (!sd_req_crc_is_valid(request)) { + if (!sd_req_crc_is_valid(sd, request)) { sd->card_status |=3D COM_CRC_ERROR; rtype =3D sd_illegal; goto send_response; @@ -2079,6 +2082,7 @@ static Property sd_properties[] =3D { * board to ensure that ssi transfers only occur when the chip select * is asserted. */ DEFINE_PROP_BOOL("spi", SDState, spi, false), + DEFINE_PROP_BOOL("validate-crc", SDState, validate_crc, false), DEFINE_PROP_END_OF_LIST() }; =20 --=20 2.17.0 From nobody Wed Oct 29 11:33:40 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525838147658794.9375574098643; Tue, 8 May 2018 20:55:47 -0700 (PDT) Received: from localhost ([::1]:54309 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGGCg-0003o8-PN for importer@patchew.org; Tue, 08 May 2018 23:55:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58632) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG52-0004qD-Vi for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGG52-0003YM-5Y for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:53 -0400 Received: from mail-qt0-x241.google.com ([2607:f8b0:400d:c0d::241]:46600) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGG52-0003Xj-0F for qemu-devel@nongnu.org; Tue, 08 May 2018 23:47:52 -0400 Received: by mail-qt0-x241.google.com with SMTP id m16-v6so43924257qtg.13 for ; Tue, 08 May 2018 20:47:51 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id w12-v6sm14497002qtb.80.2018.05.08.20.47.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 20:47:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gfHCMg63bu7IfvVcBc7uLjFY3OafX1WdCVRJb6CT4Ag=; b=WMLwuduoY0PoAS50x+t9z7EK/K66OgOCW4g+JWmy27nKLkNWIhJwdTH/1IaVKA/e53 O+mDTOBvzUsOwSlSDLA7DizE+a1GYxbluLV3x8X1LmkEr2zV6GpOjdrabkmgdmBcq8LG ymGS7Jt6JL4o9WRqBKDhdMDMCDtenSKZIZdIpey+PdyWOKl/AmSMw7OE0GjfUtZxwv9S l/4fKbipJ9odfTqqM+3UpqQVN6TmXwiz0lC/ef9IbrBjtTzzouIzNsoCRAh+tLc+GQk5 agTmtt58kAKDrBqBrS/rl2c9g5vmKS9eJ924O++L7IMyAlZKvrIpff+NZFQS++Fbsl0z Je/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=gfHCMg63bu7IfvVcBc7uLjFY3OafX1WdCVRJb6CT4Ag=; b=PI0nU9LUMOh28Im/H9JziDzyEwGvxcFJvKiOSBx2/BejsCyWBDwyz9Y1zzqSTm+YXO n8STUH1ozknfO/ghUkxIKH3Mi5GvS1cxvGlPcddD6XFPYLE6nuI2pRa46m5+b7HleDXH vhP3UMV1fUnM4UFKmfMAt9rUR4g3a6UxVTC4MeVTutgM7z2hGtK9XBpXYwgm75tkEIVT QuFWimwkle28/HP3sKIi1FvJtA2eZEjTpORHHVRz2oMV7uKpXl29gtgReRrdY0H5e5wl hrJfnmtTIV8ZBtrxB0AMAMpk+L6Y4enQiSb1zLGMzQZHCMd2RQyt4bCjdgefexBTwTQj sbjQ== X-Gm-Message-State: ALQs6tDAuyBXIpR6Ha7Lwp2RyG7mW5ufvbvtTjhtw8MVt61H10mh/DwN qyPDP5XdlmRMoxbINUi6eXQ= X-Google-Smtp-Source: AB8JxZrL913aR0aaH2rmY9HQ6kj3k6ekcVKGkh9Yoqt0WUkoa1nP9sWrn1iQ/BbqVjpsJHbK8JMINA== X-Received: by 2002:ac8:482:: with SMTP id s2-v6mr39634439qtg.144.1525837671354; Tue, 08 May 2018 20:47:51 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Wed, 9 May 2018 00:46:58 -0300 Message-Id: <20180509034658.26455-15-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180509034658.26455-1-f4bug@amsat.org> References: <20180509034658.26455-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::241 Subject: [Qemu-devel] [RFC PATCH v2 14/14] hw/sd/ssi-sd: Enable CRC validation X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Alistair Francis --- hw/sd/ssi-sd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 77e446bb94..0375f0b959 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -95,11 +95,11 @@ static uint32_t ssi_sd_transfer(SSISlave *dev, uint32_t= val) if (s->arglen =3D=3D 4) { uint8_t request[6]; uint8_t longresp[16]; - /* FIXME: Check CRC. */ =20 DPRINTF("CMD%d arg 0x%08x\n", s->cmd, ldl_be_p(s->cmdarg)); sd_frame48_init(request, sizeof(request), s->cmd, ldl_be_p(s->cmdarg), false); + request[5] =3D sd_frame48_calc_checksum(request); =20 s->arglen =3D sdbus_do_command(&s->sdbus, request, longresp); if (s->arglen <=3D 0) { @@ -257,6 +257,7 @@ static void ssi_sd_realize(SSISlave *d, Error **errp) qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), = &err); } object_property_set_bool(OBJECT(carddev), true, "spi", &err); + object_property_set_bool(OBJECT(carddev), true, "validate-crc", &err); object_property_set_bool(OBJECT(carddev), true, "realized", &err); if (err) { error_setg(errp, "failed to init SD card: %s", error_get_pretty(er= r)); --=20 2.17.0