From nobody Thu Oct 30 15:35:20 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 1525450380514682.3575064953976; Fri, 4 May 2018 09:13:00 -0700 (PDT) Received: from localhost ([::1]:35137 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fEdKN-0005Bt-IT for importer@patchew.org; Fri, 04 May 2018 12:12:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55137) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fEd7x-00034O-PZ for qemu-devel@nongnu.org; Fri, 04 May 2018 12:00:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fEd7r-0001g9-S5 for qemu-devel@nongnu.org; Fri, 04 May 2018 12:00:09 -0400 Received: from mail-qt0-x242.google.com ([2607:f8b0:400d:c0d::242]:34138) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fEd7r-0001fW-Nx for qemu-devel@nongnu.org; Fri, 04 May 2018 12:00:03 -0400 Received: by mail-qt0-x242.google.com with SMTP id m5-v6so27963671qti.1 for ; Fri, 04 May 2018 09:00:03 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id a83sm8587066qkb.22.2018.05.04.09.00.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 04 May 2018 09:00:02 -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=YHKluygF6i+h+fEQ6NjjK9vW14dhmRS0VenbQVBMaF8=; b=gtXdyIA198roHr2ivwE6OGZWh07FO+94c5WEg6WwRCMeUQw82n51YDYGSmcgFWwN7i gQwGy9/R97tytP8gCg/8yj5a9dhdSr0eDe+bFUKVf50X8n7U/Ta7cSTo+Ktz/I1Ts8qg GrowPqXl56rrM3qODqB5vLKReGnizHROV8FIDepDzSgaAy2G32RBV86cItqk21S/HAuK Q2/TfLG5poOBKa5T2VniD2sIb9+pyGq0MIALTeH1OA2U2HkPyKfH6nbvBTzyz49NFbK1 DnmJ0lT6R0Lv1jE6vn5boFcHeSwWp3QsvCAfA1Y4v7Tq6ziIYraWpV64xaM1WPuWcYo0 Rxzw== 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=YHKluygF6i+h+fEQ6NjjK9vW14dhmRS0VenbQVBMaF8=; b=o/4Qj2cZDc3qqyDxWmVSVxohM2zrCWN6M629px8I6gIrmaSIxYjnQ8UIO81+z++OKV +Et3z2DYLv3DJC9VULN2D3gahwQXCvsQvcTouJJCYc8j59jZAkukmN5CHfYpi7cCyuYY JZgMoGNz3/Go7q2PhsQZ0gOJjiZ19VieIctp8Pa9TIdKBEoKX27OMwbxGZ3nmGZv+5zN mzVdhlmQG7jRq81C6AJAVysP7OpnImoUSxmEqi2ixGsCuCqLvG34CrTMyMNTZGA26ZMQ UB6BsReQKZwPAH9qzg3I6pmLLBAauh92/ihV8+ct4sq7zb4mf6vlAfLn1casoPPtglZd qJiw== X-Gm-Message-State: ALQs6tAf0doE0PEN/bwisnknmURzT0wtkGm6okBaDGwhPM0xXRZT4r/8 MbwSeRauC7AkjvYt3Cp3aUg= X-Google-Smtp-Source: AB8JxZooqy4koe7WS37+yyvx5uniNBZjrwLepD8phSgZblyPZ7VlQE/yQVF9rNh029ZulTugv7Qc2g== X-Received: by 2002:ac8:7259:: with SMTP id l25-v6mr24088684qtp.325.1525449603166; Fri, 04 May 2018 09:00:03 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Fri, 4 May 2018 12:59:10 -0300 Message-Id: <20180504155918.21287-13-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180504155918.21287-1-f4bug@amsat.org> References: <20180504155918.21287-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 12/20] sdcard: Let sd_frame48_crc7_calc() work on response frames 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 Currently sd_calc_frame48_crc7() only works for request frames, having the bit 6 hardwire to 1. Extend it to handle response frames, adding a 'is_response' boolean argumen= t. Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- include/hw/sd/sd.h | 6 ++++-- hw/sd/sd.c | 2 +- hw/sd/sdmmc-internal.c | 20 ++++++++++---------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index b65107ffe1..b1f865fe20 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -171,20 +171,22 @@ void sd_prepare_request_with_crc(SDRequest *req, uint= 8_t cmd, uint32_t arg, /** * sd_update_frame48_checksum: * @frame: the #SDFrame48 to verify + * @is_response: whether the frame is a command request or response * * Update the 7-bit CRC checksum of a SD 48-bit frame. */ -void sd_update_frame48_checksum(SDFrame48 *frame); +void sd_update_frame48_checksum(SDFrame48 *frame, bool is_response); =20 /** * sd_verify_frame48_checksum: * @frame: the #SDFrame48 to verify + * @is_response: whether the frame is a command request or response * * Verify the 7-bit CRC checksum of a SD 48-bit frame. * * Returns: A boolean indicating whether the frame 7-bit CRC is correct. */ -bool sd_verify_frame48_checksum(SDFrame48 *frame); +bool sd_verify_frame48_checksum(SDFrame48 *frame, bool is_response); =20 /* Legacy functions to be used only by non-qdevified callers */ SDState *sd_init(BlockBackend *bs, bool is_spi); diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 2d2c31d308..5e0b5c2b87 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -452,7 +452,7 @@ static void sd_set_sdstatus(SDState *sd) static bool sd_req_crc_validate(SDState *sd, SDRequest *req) { if (sd->validate_crc) { - return sd_verify_frame48_checksum(req); + return sd_verify_frame48_checksum(req, false); } return true; } diff --git a/hw/sd/sdmmc-internal.c b/hw/sd/sdmmc-internal.c index 97f5f71569..04da81e665 100644 --- a/hw/sd/sdmmc-internal.c +++ b/hw/sd/sdmmc-internal.c @@ -109,45 +109,45 @@ uint16_t sd_crc16(const void *message, size_t width) return shift_reg; } =20 -static uint8_t sd_calc_frame48_crc7(uint8_t cmd, uint32_t arg) +static uint8_t sd_calc_frame48_crc7(uint8_t cmd, uint32_t arg, bool is_res= ponse) { uint8_t buffer[5]; - buffer[0] =3D 0x40 | cmd; + buffer[0] =3D (!is_response << 6) | cmd; stl_be_p(&buffer[1], arg); return sd_crc7(buffer, sizeof(buffer)); } =20 -bool sd_verify_frame48_checksum(SDFrame48 *frame) +bool sd_verify_frame48_checksum(SDFrame48 *frame, bool is_response) { - uint8_t crc =3D sd_calc_frame48_crc7(frame->cmd, frame->arg); + uint8_t crc =3D sd_calc_frame48_crc7(frame->cmd, frame->arg, is_respon= se); =20 return crc =3D=3D frame->crc; } =20 -void sd_update_frame48_checksum(SDFrame48 *frame) +void sd_update_frame48_checksum(SDFrame48 *frame, bool is_response) { - frame->crc =3D sd_calc_frame48_crc7(frame->cmd, frame->arg); + frame->crc =3D sd_calc_frame48_crc7(frame->cmd, frame->arg, is_respons= e); } =20 static void sd_prepare_frame48(SDFrame48 *frame, uint8_t cmd, uint32_t arg, - bool gen_crc) + bool is_response, bool gen_crc) { frame->cmd =3D cmd; frame->arg =3D arg; frame->crc =3D 0x00; if (gen_crc) { - sd_update_frame48_checksum(frame); + sd_update_frame48_checksum(frame, is_response); } } =20 void sd_prepare_request(SDFrame48 *req, uint8_t cmd, uint32_t arg, bool ge= n_crc) { - sd_prepare_frame48(req, cmd, arg, gen_crc); + sd_prepare_frame48(req, cmd, arg, /* is_response */ false, gen_crc); } =20 void sd_prepare_request_with_crc(SDRequest *req, uint8_t cmd, uint32_t arg, uint8_t crc) { - sd_prepare_frame48(req, cmd, arg, /* gen_crc */ false); + sd_prepare_request(req, cmd, arg, /* gen_crc */ false); req->crc =3D crc; } --=20 2.17.0