From patchwork Tue Jan 23 03:21:35 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: 864565 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; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="mi4H+hx2"; 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 3zQYfd6NcSz9s72 for ; Tue, 23 Jan 2018 14:28:25 +1100 (AEDT) Received: from localhost ([::1]:59054 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1edpG4-000094-0E for incoming@patchwork.ozlabs.org; Mon, 22 Jan 2018 22:28:24 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35559) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1edpAF-0003u7-BY for qemu-devel@nongnu.org; Mon, 22 Jan 2018 22:22:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1edpAC-00014z-5x for qemu-devel@nongnu.org; Mon, 22 Jan 2018 22:22:23 -0500 Received: from mail-qt0-x243.google.com ([2607:f8b0:400d:c0d::243]:33454) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1edpAC-00014E-0m for qemu-devel@nongnu.org; Mon, 22 Jan 2018 22:22:20 -0500 Received: by mail-qt0-x243.google.com with SMTP id d8so17830108qtm.0 for ; Mon, 22 Jan 2018 19:22:19 -0800 (PST) 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=VovFNSJ4fSrtjAl2tUtOv8IbRQA3j5SZVp5+SwufQkU=; b=mi4H+hx2iMv3h3edrGaOOQW3jQv1BDugbGPJ/EQb/5YvlVzkmJd7eACwDcQf7cAylr IEuJ4lb9S+GoottDbuW76O+LIABDZhmbgOJIIZKJWxxBjWKAk4XLc2BiQlTsCMi7YT2N grbbqpTRWWPJ/ZTkNj/j1LsdyxXyXG8+AbJJazl0OImF/DRuUabi1OiALhZxDtAuBjVe cLyhC3tmXXAxkbnWAXjP8eo3pFRVTXJgZSbD+Cyrt5vLLD2c+I+fvXRYNLpUd4GpBepU rnA7nSHRYhavyvy9LZ9DhL3B9MLS3/jmZ/npq/0NDdDstV1viMnapKmL+TChX6M5WwLT crdA== 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=VovFNSJ4fSrtjAl2tUtOv8IbRQA3j5SZVp5+SwufQkU=; b=I3wPdiOjwe5gLcnZmfdIGtTtC6clG/wqAqyxbMNikTLcbcnQU+DfH0cBN1hwHyGX3w uHJHKZPtgU4dhf6pTa9tq/biYhNALF2QSSZ3Q0QB5OlvW2/4UtQVdpAcdBF3BqYDasyT /tlrWBbW7tM4GsGU7OhmoquMDO9FcUj5F6w1doxk7S7LJSM3etfPU++HBJgVdOrsXaME Q9I2me9jACtzJmpD6bNmMjO7g9pHq4urxuxhyftxlHsnxS9E7uAIo5wDoRJ1LPXSZjTb xdIyTU5/acL2UiHuL44UMQy3bNLn/6EZ+gXQX3ST0X2p8935u4Gqb3CCHmOIiq5FrWRD EAaQ== X-Gm-Message-State: AKwxytekLuKFjvJCnFW7IoR/D5GCj9IG3wwF5rKS0Df4B0vSbXc1i6jU Ld/migKqiHtOjeyEM3tXYkU= X-Google-Smtp-Source: AH8x226d4ahDVyPO38OBisBb+7uQg5xSH0mzZnPTendKs9YDXObSOjPtN7i9RnKgEVAoJS1igUHMVw== X-Received: by 10.55.21.2 with SMTP id f2mr1529996qkh.320.1516677739577; Mon, 22 Jan 2018 19:22:19 -0800 (PST) Received: from x1.lan ([138.117.48.219]) by smtp.gmail.com with ESMTPSA id x207sm5545567qka.91.2018.01.22.19.22.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 22 Jan 2018 19:22:18 -0800 (PST) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: Alistair Francis , Peter Maydell , Igor Mitsyanko Date: Tue, 23 Jan 2018 00:21:35 -0300 Message-Id: <20180123032135.28863-13-f4bug@amsat.org> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180123032135.28863-1-f4bug@amsat.org> References: <20180123032135.28863-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:c0d::243 Subject: [Qemu-devel] [PATCH v3 12/12] sdcard: use the registerfields API to access the OCR register 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: "Edgar E . Iglesias" , Prasad J Pandit , Peter Crosthwaite , =?utf-8?q?Philippe_M?= =?utf-8?q?athieu-Daud=C3=A9?= , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Alistair Francis --- include/hw/sd/sd.h | 1 - hw/sd/sd.c | 21 +++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index bf1eb0713c..9bdb3c9285 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -53,7 +53,6 @@ #define READY_FOR_DATA (1 << 8) #define APP_CMD (1 << 5) #define AKE_SEQ_ERROR (1 << 3) -#define OCR_CCS_BITN 30 typedef enum { SD_VOLTAGE_0_4V = 400, /* currently not supported */ diff --git a/hw/sd/sd.c b/hw/sd/sd.c index f87e543f8f..437ce25f79 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -32,6 +32,7 @@ #include "qemu/osdep.h" #include "hw/qdev.h" #include "hw/hw.h" +#include "hw/registerfields.h" #include "sysemu/block-backend.h" #include "hw/sd/sd.h" #include "qapi/error.h" @@ -47,8 +48,6 @@ //#define DEBUG_SD 1 #define ACMD41_ENQUIRY_MASK 0x00ffffff -#define OCR_POWER_UP 0x80000000 -#define OCR_POWER_DELAY_NS 500000 /* 0.5ms */ typedef enum { sd_r0 = 0, /* no response */ @@ -270,6 +269,11 @@ static uint16_t sd_crc16(void *message, size_t width) return shift_reg; } +#define OCR_POWER_DELAY_NS 500000 /* 0.5ms */ + +FIELD(OCR, CARD_CAPACITY, 30, 1) /* 0:SDSC, 1:SDHC/SDXC */ +FIELD(OCR, CARD_POWER_UP, 31, 1) + static void sd_reset_ocr(SDState *sd) { /* All voltages OK, Standard Capacity SD Memory Card, not yet powered up */ @@ -281,9 +285,10 @@ static void sd_ocr_powerup(void *opaque) SDState *sd = opaque; trace_sdcard_powerup(); - /* Set powered up bit in OCR */ - assert(!(sd->ocr & OCR_POWER_UP)); - sd->ocr |= OCR_POWER_UP; + assert(!FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP)); + + /* card power-up OK */ + sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_POWER_UP, 1); } static void sd_reset_scr(SDState *sd) @@ -574,7 +579,7 @@ static bool sd_ocr_vmstate_needed(void *opaque) SDState *sd = opaque; /* Include the OCR state (and timer) if it is not yet powered up */ - return !(sd->ocr & OCR_POWER_UP); + return !FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP); } static const VMStateDescription sd_ocr_vmstate = { @@ -684,7 +689,7 @@ static void sd_erase(SDState *sd) return; } - if (extract32(sd->ocr, OCR_CCS_BITN, 1)) { + if (FIELD_EX32(sd->ocr, OCR, CARD_CAPACITY)) { /* High capacity memory card: erase units are 512 byte blocks */ erase_start *= 512; erase_end *= 512; @@ -1476,7 +1481,7 @@ static sd_rsp_type_t sd_app_command(SDState *sd, * UEFI, which sends an initial enquiry ACMD41, but * assumes that the card is in ready state as soon as it * sees the power up bit set. */ - if (!(sd->ocr & OCR_POWER_UP)) { + if (!FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP)) { if ((req.arg & ACMD41_ENQUIRY_MASK) != 0) { timer_del(sd->ocr_power_timer); sd_ocr_powerup(sd);