From patchwork Wed May 9 03:46:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 910622 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=amsat.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ZjD2UbvN"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40gj794fNRz9s3Z for ; Wed, 9 May 2018 13:50:29 +1000 (AEST) Received: from localhost ([::1]:54273 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGG7X-0006sS-9M for incoming@patchwork.ozlabs.org; Tue, 08 May 2018 23:50:27 -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) 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) 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) From: =?utf-8?q?Philippe_Mathieu-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 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_Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" It will help when moving this around for qtesting in the next commit. Signed-off-by: Philippe Mathieu-Daudé 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 width) return shift_reg; } +enum { + F48_CONTENT_LENGTH = 1 /* command */ + 4 /* argument */, + F136_CONTENT_LENGTH = 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 */ FIELD(OCR, VDD_VOLTAGE_WINDOW, 0, 24) @@ -352,7 +367,7 @@ static void sd_set_cid(SDState *sd) sd->cid[13] = 0x00 | /* Manufacture date (MDT) */ ((MDT_YR - 2000) / 10); sd->cid[14] = ((MDT_YR % 10) << 4) | MDT_MON; - sd->cid[15] = (sd_crc7(sd->cid, 15) << 1) | 1; + sd->cid[15] = sd_frame136_calc_checksum(sd->cid); } #define HWBLOCK_SHIFT 9 /* 512 bytes */ @@ -416,7 +431,7 @@ static void sd_set_csd(SDState *sd, uint64_t size) sd->csd[13] = 0x40; sd->csd[14] = 0x00; } - sd->csd[15] = (sd_crc7(sd->csd, 15) << 1) | 1; + sd->csd[15] = sd_frame136_calc_checksum(sd->csd); } static void sd_set_rca(SDState *sd) @@ -491,7 +506,7 @@ static int sd_req_crc_validate(SDRequest *req) buffer[0] = 0x40 | req->cmd; stl_be_p(&buffer[1], req->arg); return 0; - return sd_crc7(buffer, 5) != req->crc; /* TODO */ + return sd_frame48_calc_checksum(buffer) != req->crc; /* TODO */ } static void sd_response_r1_make(SDState *sd, uint8_t *response)