From nobody Tue Oct 28 12:37:21 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 1515015695306426.1285691131902; Wed, 3 Jan 2018 13:41:35 -0800 (PST) Received: from localhost ([::1]:37826 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWqn0-0007Zj-F1 for importer@patchew.org; Wed, 03 Jan 2018 16:41:34 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52701) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWqYB-0003AV-N3 for qemu-devel@nongnu.org; Wed, 03 Jan 2018 16:26:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWqY6-00007r-7u for qemu-devel@nongnu.org; Wed, 03 Jan 2018 16:26:15 -0500 Received: from mail-qt0-x231.google.com ([2607:f8b0:400d:c0d::231]:34498) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWqY6-00006w-0e for qemu-devel@nongnu.org; Wed, 03 Jan 2018 16:26:10 -0500 Received: by mail-qt0-x231.google.com with SMTP id 33so3816570qtv.1 for ; Wed, 03 Jan 2018 13:26:09 -0800 (PST) Received: from x1.lan ([138.117.48.219]) by smtp.gmail.com with ESMTPSA id a19sm1104402qtj.74.2018.01.03.13.26.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Jan 2018 13:26:08 -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=v+h+bgoFviUeNmNNscvbgG3RpYY8zLmbuzAAVdGTKYI=; b=Ymm7MXPKxjpfYsE8dlCN95GTXkDuHS8Vhj/akA4oe+Mnte26tSGUTteT6y44102DxI 7o7/OZ0VcjrayGUm6hEwxzlgf/R6bSO3INmseKyswuHZF6mL70rQEiRlt+jreLhX0yDK ZPJIFd94AbAeDg6XcmDtoljb8RxCk03gIcI7WEXLvTe3SxbU9M2gC899IkOTDSjhzQ56 87RaxtIOMLkfl5EnlEHaTsB21ZH1jP3uu4pY36X1D2lJbTORfTBnUPcBQWhc7X0m8T/L AJ/YIdtKs+p56z24a6QsmLRnxTKL3kE1QywkrM5zXoSoGehqGagUFDHowM2pT22sXRek sgKQ== 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=v+h+bgoFviUeNmNNscvbgG3RpYY8zLmbuzAAVdGTKYI=; b=CvvOOkswI65eXAPBsooMoi+B0JHxF199MIXHYRPmVwk3UfdwH4SvznWq7TGDRFGzre jISAO36+Ulgu5baL62OJJ6/dRnU7IP8mI0dYdrtZigZum3lWhSqJ7NLEcGxBFMKLzEn0 2C7qD5uKxBLYfr3a+wHwR+IymNY87NTlHcpmNteeRRIn6+TNJUMj07O4djcDeU5BGRnH eO6eJKs3jqX9NjEOMgECISuYzK13NFB3QcXYUH4PmsGUcS/iGAjtqeepmXmoQ2KkfQyj LlLYRDmJFQbJ+VdOaTkw45b850Zpr1hXTviahSLbatSRJMwOdN347AYeNXkBe0sHAmRa W0Lw== X-Gm-Message-State: AKGB3mIM1QvK6gVFH8y8UzTbIzSwWJMCbiysX0r41M2JdnJRX5BdeLol qhPrmzHTAE4L0ih5iYmXkh1PZJyO X-Google-Smtp-Source: ACJfBouYgRtRWec0rIRbGMSYBPGaA44fXgsDMCm29QTq2wkkAsjyqutXwaeMNpMHjUzqulf5MtLORA== X-Received: by 10.200.51.46 with SMTP id t43mr3681458qta.75.1515014769489; Wed, 03 Jan 2018 13:26:09 -0800 (PST) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Alistair Francis , Peter Maydell , Igor Mitsyanko , Andrew Baumann , Olbrich , Andrzej Zaborowski Date: Wed, 3 Jan 2018 18:24:30 -0300 Message-Id: <20180103212436.15762-20-f4bug@amsat.org> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180103212436.15762-1-f4bug@amsat.org> References: <20180103212436.15762-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::231 Subject: [Qemu-devel] [PATCH v2 19/25] sdcard: check if the card capacity is supported 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=20Mathieu-Daud=C3=A9?= , qemu-devel@nongnu.org, Paul Brook , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= 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 current Spec (v2.00) does not support SDXC cards (> 32GB). Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/sd.c | 41 +++++++++++++++++++++++++++++++++++++++++ hw/sd/trace-events | 1 + 2 files changed, 42 insertions(+) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index ed5874e4d6..a7cede8da6 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -63,6 +63,13 @@ typedef enum { SD_PHY_SPEC_VER_3_01 =3D 301, /* not yet supported */ } sd_phy_spec_ver_t; =20 +typedef enum { + sd_capacity_unknown, + sd_capacity_sdsc, /* not well supported */ + sd_capacity_sdhc, + sd_capacity_sdxc, /* not yet supported */ +} sd_card_capacity_t; + typedef enum { sd_r0 =3D 0, /* no response */ sd_r1, /* normal response command */ @@ -121,6 +128,7 @@ struct SDState { =20 int spec_version; bool spi; + sd_card_capacity_t capacity; =20 uint32_t mode; /* current card mode, one of SDCardModes */ int32_t state; /* current card state, one of SDCardStates */ @@ -161,6 +169,17 @@ static const char *sd_state_name(enum SDCardStates sta= te) return state_name[state]; } =20 +static const char *sd_capacity(sd_card_capacity_t capacity) +{ + static const char *capacity_name[] =3D { + [sd_capacity_unknown] =3D "UNKN", + [sd_capacity_sdsc] =3D "SDSC", + [sd_capacity_sdhc] =3D "SDHC", + [sd_capacity_sdxc] =3D "SDXC", + }; + return capacity_name[capacity]; +} + static const char *sd_cmd_abbreviation(uint8_t cmd) { static const char *cmd_abbrev[SDCARD_CMD_MAX] =3D { @@ -1991,11 +2010,33 @@ static void sd_realize(DeviceState *dev, Error **er= rp) } =20 if (sd->blk) { + int64_t size; + ret =3D blk_set_perm(sd->blk, BLK_PERM_CONSISTENT_READ | BLK_PERM_= WRITE, BLK_PERM_ALL, errp); if (ret < 0) { return; } + + size =3D blk_getlength(sd->blk); + if (size < 0 || size <=3D 2 * G_BYTE) { + sd->capacity =3D sd_capacity_sdsc; + } else if (size <=3D 32 * G_BYTE) { + sd->capacity =3D sd_capacity_sdhc; + } else if (size <=3D 2 * T_BYTE) { + sd->capacity =3D sd_capacity_sdxc; + } else { + error_setg(errp, "block size unsupported: %lld TB", size / T_B= YTE); + return; + } + trace_sdcard_capacity(sd_capacity(sd->capacity), size); + + if (sd->capacity =3D=3D sd_capacity_sdxc + && sd->spec_version < SD_PHY_SPEC_VER_3_01) { + error_setg(errp, "capacity SDHC requires at least Spec v3.01"); + return; + } + blk_set_dev_ops(sd->blk, &sd_block_ops, sd); } } diff --git a/hw/sd/trace-events b/hw/sd/trace-events index 25ab339f97..215e0eec3a 100644 --- a/hw/sd/trace-events +++ b/hw/sd/trace-events @@ -28,6 +28,7 @@ sdcard_read_block(uint64_t addr, uint32_t len) "addr 0x%"= PRIx64 " size 0x%x" sdcard_write_block(uint64_t addr, uint32_t len) "addr 0x%" PRIx64 " size 0= x%x" sdcard_write_data(uint8_t value) "value 0x%02x" sdcard_read_data(int length) "len %d" +sdcard_capacity(const char *capacity, int64_t size) "%s card (%ld B)" =20 # hw/sd/milkymist-memcard.c milkymist_memcard_memory_read(uint32_t addr, uint32_t value) "addr 0x%08x = value 0x%08x" --=20 2.15.1