From nobody Sat Nov 15 07:39:25 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1754320177; cv=none; d=zohomail.com; s=zohoarc; b=Fn40NxEkIsMN5akhqGoL/352v1iBKN1exoik9a28FsqhewhJt088QVlRTAKsSNaiU7X1jprQsAJt+KnzfpJey9BGWzv0kWw6u/4sT1Gml1RcNllxefkSxZzEC+0lsrzUrB4Tn4DliJzcL5Nl7qqZXRa1eccwL30ANpb2PeTgPLg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754320177; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vZbjtSmF6ZWjfUQZTrYLzt0ZYaYEB6I6pvnD2hn9dPM=; b=crvlgGw3gBlBjYtBTZ88SOGDseKi5nyEdEbD2kIEJ2PizgPSCOM6WSP0iW4YnDwLp2+60jqG/R6C5Gvb0sbgDeWxF4NWB7FrPYWzx5cRwGCtCgJpmA+9T12pMYOfZ8SoBdFJ9Lb8jvRf9+41jSHz8LI86xo3I3uRbbE62EGciBg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1754320177344139.31245215629212; Mon, 4 Aug 2025 08:09:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uiwoC-000862-KL; Mon, 04 Aug 2025 11:09:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uivKU-0008L5-5C for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:21 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uivKR-0008SP-Gl for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:17 -0400 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-4561607166aso31199465e9.2 for ; Mon, 04 Aug 2025 06:34:15 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-458b866392csm61858595e9.2.2025.08.04.06.34.12 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 04 Aug 2025 06:34:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754314454; x=1754919254; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vZbjtSmF6ZWjfUQZTrYLzt0ZYaYEB6I6pvnD2hn9dPM=; b=MRPskb8LicaE6cL0lIv0UNrfFQYLmsFJCDiGGg0YXo1iL+RpVbODEvbQ7TuJiCFOmh CqujHMyxEtoaM+DcHeiHTrfSdQbjW9BoufZjlyTutGpZa5bEXnCaAvybpeTRhisyS5mA SmgapqVe0+d3H0Nmusr9OiaAGlu4Zt481lkkvWT3+PTyPhM4IW2/QLk77AUvGTydtfyi 4EtZ/mJNFlXeFssY/mdXE+1kVawMSn9u8DSgo0c7kuP7aIXiVxDo08mnbrP/yaQNVJK3 3hI2BwDrVf6xrMl0xruqrUmw6uqVLTxW3Pul2vR3VeLDwcMPlG7a4L2mC8IhpYxf1FfO M/ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754314454; x=1754919254; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vZbjtSmF6ZWjfUQZTrYLzt0ZYaYEB6I6pvnD2hn9dPM=; b=K0U/PEmsK4RlzmZ0oNUnlms3h5CHFMLSb6Rp3cA0Hllv6XPHopp3aGMSlkdlT5Usv7 L8bHUDy4+UsXdpo3BRZvqjQ3j9ItbrtU5yBeiHf4YbaCrtRlWbwAMRdN4c7WCXLjFzCL 03pL+f8v1pmtKTPvIaHCF7T84itmrYb/YIhh1OPycKwvxElhQ4QwcXcb0QIGCJNvoJ9S xADjzQDWq/Fxc+8HTCSTxxMEPDRK7IpnMokHBDX7M//ywNhDluNYIruBqABKJsapyv2a mLQiwAavxj2YNh4/lZeTCdQyhPeJi7HxsmzshmQ2OBdvUi6hp6sZcEg3DizLwkboH+eV 6mXw== X-Forwarded-Encrypted: i=1; AJvYcCW/dyiRNK88/jb1j44aCWLk3JeJ5hwyy3wrfANad12d+3ohFONThksfMR6gS32F31bnHrH38GoxZAu4@nongnu.org X-Gm-Message-State: AOJu0YyhJPNsHYGvK9EB1FPYHBJIJsufhF52MelhLUWxWBAdTlS6nBCM aTv3byXCOIVlTohfH3NM8DYFssTd0o7Pmnr6tauyhuvESGA/ycMDVMhr02tCccp1PvE= X-Gm-Gg: ASbGncvFCOLBvsCe6eE1gTdV/vV+e0zz4sA5Fq0My0aKtfycrSP/hempqBhZcsA75/W qljJiFISQnXNW9k0Lu6IQFPVbcDKjX3Vc7VN1UK434ZZ/J/B1zXhSpltRnEcWzgWg9U2s7lNsOR 1YUXZlcd+ZzsBiSSgT4VuuOfp0wHVD5tTtEW1vXg2j+V0aZ6OI6KjlcnngU4IlQ2sU6d905pWFB N2XKqAaEy5RsfXi/wjZhnKVrhwSMyqTHXejZKgvRHGiR3J33fVelJSthN9nnZfQbuej41BeQEhc t5g7sSHh4mN8AMB1pnVznU47XZ40wUqKWDgGy0ScXBoDQm7hG8kmTxHzn+gq/MqeH6e8BJVXOgE Pw2F8l5mjFv2G29wGiOcrb8Gjoj2ItAter4IpLhlpoCQc2vl7QGy3DNYUUqJ7SDuyCl0nif4E X-Google-Smtp-Source: AGHT+IF+XPF0EQE1z5obvK+ihX+21dvbso16ncrGbbEJzbYnMubDcip1F8zCBGsJO05x1208PyG4tA== X-Received: by 2002:a05:600c:4997:b0:456:fc1:c26d with SMTP id 5b1f17b1804b1-458b7d12c2amr55818465e9.2.1754314453701; Mon, 04 Aug 2025 06:34:13 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ben Dooks , qemu-riscv@nongnu.org, qemu-block@nongnu.org, qemu-arm@nongnu.org, Guenter Roeck , Bin Meng , Richard Henderson Subject: [PATCH-for-10.1 v2 01/11] hw/sd/sdcard: Do not ignore errors in sd_cmd_to_sendingdata() Date: Mon, 4 Aug 2025 15:33:55 +0200 Message-ID: <20250804133406.17456-2-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250804133406.17456-1-philmd@linaro.org> References: <20250804133406.17456-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32a; envelope-from=philmd@linaro.org; helo=mail-wm1-x32a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1754320178625116600 Unfortunately when adding sd_cmd_to_sendingdata() in commit f486bf7d109 we neglected to return any possible error. Fix. Fixes: f486bf7d109 ("hw/sd/sdcard: Introduce sd_cmd_to_sendingdata and sd_g= eneric_read_byte") Reviewed-by: Richard Henderson Signed-off-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Richard Henderson --- hw/sd/sd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index c275fdda2d0..0bb385268ed 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -1305,7 +1305,7 @@ static sd_rsp_type_t sd_cmd_to_sendingdata(SDState *s= d, SDRequest req, const void *data, size_t size) { if (sd->state !=3D sd_transfer_state) { - sd_invalid_state_for_cmd(sd, req); + return sd_invalid_state_for_cmd(sd, req); } =20 sd->state =3D sd_sendingdata_state; --=20 2.49.0 From nobody Sat Nov 15 07:39:25 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1754319576; cv=none; d=zohomail.com; s=zohoarc; b=ctddvC4+C9hp5llkS8gmakAtSW9GKXtZnyjjnw8jv/9oaDislXZWltPokoJ7Ds0PDdt12xtdl6aKyE+BXGg+mcDlwYibpMD7sr/y2LV/0l4qarz3AXSpn7JBKTINDvyvSF3VGstjGnnyIv4pYQwUMpa7ESZhyDfIfZnDBA5HScM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754319576; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2dyOWVcvS3LHGs+IU0J1k6trHAqIIeSYFGpWKRpV7ZE=; b=ZDdoZfzdSmj5pssqzCC+itnwXLjJn9qrXg0X9Y+F1GOBTzWPvVA+kifgeEb2xxWxLVygVo2aNIJD1dz/BTe8Ndk3YT1FocwHnNKfvlvxxeeA4Ksk+eXMEhROj7CP5s9KIT7el2NSwq8zSFNOgZcVhH5hR/vO51btEHQMnMb/9XE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1754319575995532.3622905445981; Mon, 4 Aug 2025 07:59:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uiweT-0002NY-Lp; Mon, 04 Aug 2025 10:59:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uivKZ-00009M-KH for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:24 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uivKX-0008Tl-IZ for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:23 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-459d40d16bdso8989595e9.0 for ; Mon, 04 Aug 2025 06:34:19 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b79c3abedesm15737999f8f.3.2025.08.04.06.34.17 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 04 Aug 2025 06:34:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754314459; x=1754919259; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2dyOWVcvS3LHGs+IU0J1k6trHAqIIeSYFGpWKRpV7ZE=; b=ssdNjGLcVL8I5cXX/AV3QQm7oQAQzlhepEoeEhjogOboqVA/xIZQBdwoAoC/nWnU8o bGVsqbchzS4sx1649mBY4PnNaFkRvKb5i/IyxsCqhirhZQdG7L3qFVYLH5eodP0W9ZVO FOnwegRVQdJXKXkVhhBqETeqLU+wwe6rSiibnVILqTc5XoI/2JmaIKu8ZiyzIRKwS+mM K1DwCCpG37R+jzvbA5Gwm2euWZi7pZ6Ppv7G03aItCKYvR1Ms7c0S3xMWOT8BFSB0/hg Pa3hwe2McUxdqhd8SF2dkV1DZK3Hou3DqQ4GWkzIwR8qU/+OlIahpMsayngUCXeMNig+ +oEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754314459; x=1754919259; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2dyOWVcvS3LHGs+IU0J1k6trHAqIIeSYFGpWKRpV7ZE=; b=Pg5tskoAhWwaf9KBKrQi8WpDuTZSvYBqr6ISx5Padcdg6lu/t5ZCaAaf6QuEr7hP8E rZl9VyMxz4iR3nrOubz4DQ1kZvmCHQd8A+s272/h19jNRaum4kqxZQaQz0LRtsc+2GE/ liKkDCOee76m0vqY/u0jqAyV5AfD9l5oodtNwQW2hCK5VtpdeJ5SPZrhOhLcT0lNC6ki HUpVjy1OJvuzevNNt7gen38JyV6qBcuuoS49yARbQ4NmoPzI+/Gk1CAmAZ9zmw3hRdch jaW/cAWPnTgOFcJWdyt/p/PPcrC1Cfgxt2gfaMNAFe7hzUNjTV1gh2hJQFcH45PDxjvH tb1A== X-Forwarded-Encrypted: i=1; AJvYcCUwl0Crl2YiRvVJfdpBwDMsu/pWpnVDHDIA+mH/5ZjdF3wGgA3jwf8Dkc9OX9mmNvyGuKJXVVPpSuzF@nongnu.org X-Gm-Message-State: AOJu0YwddSZ1ET4XSQ4tiR7m2/YB9S7X0/b5h737yxgM2PyPwDYlpKbp JR39pXZH4SqB7JvlzqPgiZktCJ33Xu/jf5dbGztXTaZIThnaRLKjFr3Yj/R4yH601yw= X-Gm-Gg: ASbGncuWlvLQPwGlREDgRkqlO912WG/VTpNF9LVFe6trPwQqFtLXoytMXzPP6Tnbk81 M//a593qqw7xQ60m3GEfO9UZHdVrzPDHzZfIx+N8VVANXOlhsFlavx6NqKsDb0LTceqHabxzskj hwiUWadsPU2GDdtf4r4CGkfZ3ygkqV9ktwiCpLbu7C+w69nuukUYRdRl/2sCI4dhJ3Ad2MOxu2z eVo3Z5tYHe1oldVzhWuqxPgKFybTvBZNd1vexqkA528O4VzHi9MpyTqxNvf3LH4mlhwWlsHQ6T5 g5gvA/dm3OU897JYG8oMXAl8+wt2W/hvZIXyvR8inlwbrl9AQ6DKTypbAOFh6Nkw4vsMcdaR+t2 II1xlr3YaF4y7zLIxVuwLXKAs2muxw60NEUllg/t4gB10htjKBUPhl3tzsJ+4zEwkLqFeolOh X-Google-Smtp-Source: AGHT+IF2KSgYGdZZejzrzoBG1FoE1yKJ/f3fzqhvBSqheXfFyuhXczZxBAmPLG53oyZtIFsfjZfoBw== X-Received: by 2002:a05:600c:181d:b0:458:bbed:a827 with SMTP id 5b1f17b1804b1-458bbedaab7mr44599235e9.1.1754314458838; Mon, 04 Aug 2025 06:34:18 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ben Dooks , qemu-riscv@nongnu.org, qemu-block@nongnu.org, qemu-arm@nongnu.org, Guenter Roeck , Bin Meng Subject: [PATCH-for-10.1 v2 02/11] hw/sd/sdcard: Factor sd_response_size() out Date: Mon, 4 Aug 2025 15:33:56 +0200 Message-ID: <20250804133406.17456-3-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250804133406.17456-1-philmd@linaro.org> References: <20250804133406.17456-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::329; envelope-from=philmd@linaro.org; helo=mail-wm1-x329.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1754319578061116600 Set @rsplen once before switching to fill the response buffer. This will allow to assert in a single place that the buffer is big enough to be filled with the response. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Richard Henderson Reviewed-by: Richard Henderson --- hw/sd/sd.c | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 0bb385268ed..76ce54664f2 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -729,6 +729,33 @@ static int sd_req_crc_validate(SDRequest *req) return sd_crc7(buffer, 5) !=3D req->crc; /* TODO */ } =20 +static size_t sd_response_size(SDState *sd, sd_rsp_type_t rtype) +{ + switch (rtype) { + case sd_r1: + case sd_r1b: + return 4; + + case sd_r2_i: + case sd_r2_s: + return 16; + + case sd_r3: + case sd_r7: + return 4; + + case sd_r6: + return 4; + + case sd_r0: + case sd_illegal: + return 0; + + default: + g_assert_not_reached(); + } +} + static void sd_response_r1_make(SDState *sd, uint8_t *response) { stl_be_p(response, sd->card_status); @@ -2203,36 +2230,32 @@ static int sd_do_command(SDState *sd, SDRequest *re= q, } =20 send_response: + rsplen =3D sd_response_size(sd, rtype); + switch (rtype) { case sd_r1: case sd_r1b: sd_response_r1_make(sd, response); - rsplen =3D 4; break; =20 case sd_r2_i: memcpy(response, sd->cid, sizeof(sd->cid)); - rsplen =3D 16; break; =20 case sd_r2_s: memcpy(response, sd->csd, sizeof(sd->csd)); - rsplen =3D 16; break; =20 case sd_r3: sd_response_r3_make(sd, response); - rsplen =3D 4; break; =20 case sd_r6: sd_response_r6_make(sd, response); - rsplen =3D 4; break; =20 case sd_r7: sd_response_r7_make(sd, response); - rsplen =3D 4; break; =20 case sd_r0: @@ -2244,7 +2267,6 @@ send_response: sd->data_offset =3D 0; /* fall-through */ case sd_illegal: - rsplen =3D 0; break; default: g_assert_not_reached(); --=20 2.49.0 From nobody Sat Nov 15 07:39:25 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1754319575; cv=none; d=zohomail.com; s=zohoarc; b=kxHUNIg8+0EMm8xsvm7wUbPFQf7MzK1n9LUFhqW8+g9Uuj/AEy2gdrcdCTX8uR7Ubs0+U2XlxkwyFeHQKDtZK8ogyqfob/x/Dq0eGo+iojgXywZQBN0X8jCun02+9jj5NQ/R00eM5B1hMy+pORUErjOzm7RfEhPBmtsx8orqxeI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754319575; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=kIX6saFhmdcY+275rDEvJemGrGuUHsUvNMttjrghYZE=; b=FEL3ZpTNwuS8mRpasFS3cKaduVYH2oNqabN5wRRQdYin97Ezx77H5HJExntGS7MnXmYfjprbkt7M6x1JObJZJCsi+e3V5+d+gaNyLEvo4PDD3pXSMfsRM/YDfsKtHqbLELKDM8IBRs60X1cqQFcRGab6YTFhNH+ve/9WijpyKeg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1754319575062965.1603157926608; Mon, 4 Aug 2025 07:59:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uiweX-0002s0-8r; Mon, 04 Aug 2025 10:59:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uivKe-0000Om-Cg for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:35 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uivKb-0008Uw-JM for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:27 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-458b2d9dba5so16522585e9.1 for ; Mon, 04 Aug 2025 06:34:25 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b79c4a2187sm16064223f8f.70.2025.08.04.06.34.22 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 04 Aug 2025 06:34:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754314464; x=1754919264; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kIX6saFhmdcY+275rDEvJemGrGuUHsUvNMttjrghYZE=; b=zyLsat2Xnmkltvj49uhLhuNEgFjyKzK7vXM53Uo/2emk5gA2OrqijTm0pibnfJgiwd gbjZzf81hPXg2Qt1PLE/3zDj/LFbqNb+TU/CPqX4MA/Kf1p5uPtEUdv63B5O/llo18zQ /myVH8QoRZA5DCkwFv9zCcz9ShglBFPBb+ZBRk/LOAaUvEiyopEszDjditHzOpG5eCqm xqBPcI3cveLUbmXfmDn++cyEr9nnhKrqCapzGSLveHyruxKLmwDou9vCKSVlDpF64sjp +sKPgy1cBoNikdUmisFB+vGW8MNVqzo8CJURqgfDejWSdDgRoaJ4qs9oMNlFhYJyFAGY ByXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754314464; x=1754919264; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kIX6saFhmdcY+275rDEvJemGrGuUHsUvNMttjrghYZE=; b=p/kIS9ZR02epiuuCTCflduDtus3MCYgSUT0OK7jWVoaP8KjY9ov3AI/ZoyDVQDtNQT /4FobuA4AJgYu7eGmWuXgm/fwTiYCZARsnL55p1byw0slk7RXEpnHHbk9rJ1XD3ZitQl /WPRBKUQdUZ8OFgm1xmGCNf6Pj/OMXT2i4TkRYeXc8o8x8UKiz+kepqlKiNAkD9zddHw 3LCEg1ZEsL4PwrrIO3ek1mSfxKufPCuykF3W1C7vqZ/Gwz+uGyrY0K/frXFN/yc6hrby InCz4VPkYtNRCQV0KK2XuIvqL3F3MXJC0mv5k56Nd4ROV8jQs8m4cAU7x12xa7Gf/3Zz 8Gag== X-Forwarded-Encrypted: i=1; AJvYcCWc5dnciFPFphSbeX0qJjq/v3v/HvEA/npLrAD7dANH2MBsz0NY8IDAjEYNi/b3ZttStV3Jk4SoIxr2@nongnu.org X-Gm-Message-State: AOJu0YyKjtYIAbtS6xpro2IKN108mKV7i0BSybCPTF/3q+rraJv7q7ZV h0NxWSqA6Mq7RorPggQ4M4iH/Vb1dDdA989toNarSnghdorXw8K6y9f2WbHtrRqm9lQ= X-Gm-Gg: ASbGncuaEnDjuLnvTFa11fHOSAtL/Ebicp9hOmQ+WPcJxqpE+cun/7YDi+o0deu59Qb DRMXd7vfXBAGOSCfd7ttDl6R9iSIxUuAGA735PXuGbO2e2gURBSoW83+gP8lp16IZmfOLAycRlV omZApXQgcm1KaAYjXjiMkTS29iOaoG1uLudUnvNWDQ1UdIn6EorVCQw/OOQGwbB0Njr1546PQvQ +yvmG4roO7z8taCgqL9gc4i6zutrkl2li9YfqL6PbpWbBqg895iSHdHtXbPeBy0f1akIqA4otpf 85z0dI2IRCPBK9W4TMEwnsfR74JcnbHHRHVzYjLztjTI0oDrFOgex6js9eALmkXq02wbgRF0W12 90pS6jhYi98QCHJaO5oqznBDwIfytEGLi481ECXMJEa71UKvEpv2OFDkm61DnAJfFP20/dtH55S l+LKT2BGE= X-Google-Smtp-Source: AGHT+IGpbx6zCreyD/cEF+gL6Ij5+C9xu7+kmqFNLlYXvLeA/gmc+nZnPSjneN143gbG01f4JHtBzQ== X-Received: by 2002:a05:600c:4fc6:b0:458:bfe1:4a8a with SMTP id 5b1f17b1804b1-458bfe14efcmr58655705e9.14.1754314463948; Mon, 04 Aug 2025 06:34:23 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ben Dooks , qemu-riscv@nongnu.org, qemu-block@nongnu.org, qemu-arm@nongnu.org, Guenter Roeck , Bin Meng , Beniamino Galvani , Strahinja Jankovic Subject: [PATCH-for-10.1 v2 03/11] hw/sd/sdbus: Provide buffer size to sdbus_do_command() Date: Mon, 4 Aug 2025 15:33:57 +0200 Message-ID: <20250804133406.17456-4-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250804133406.17456-1-philmd@linaro.org> References: <20250804133406.17456-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=philmd@linaro.org; helo=mail-wm1-x336.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1754319576210116600 We provide to sdbus_do_command() a pointer to a buffer to be filled with a varying number of bytes. By not providing the buffer size, the callee can not check the buffer is big enough. Pass the buffer size as argument to follow good practices. sdbus_do_command() doesn't return any error, only the size filled in the buffer. Convert the returned type to unsigned and remove the few unreachable lines in callers. This allow to check for possible overflow in sd_do_command(). Signed-off-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Richard Henderson Reviewed-by: Richard Henderson --- include/hw/sd/sd.h | 23 +++++++++++++++++++++-- hw/sd/allwinner-sdhost.c | 7 ++----- hw/sd/bcm2835_sdhost.c | 7 ++----- hw/sd/core.c | 5 +++-- hw/sd/omap_mmc.c | 5 +++-- hw/sd/pl181.c | 6 ++---- hw/sd/sd.c | 6 ++++-- hw/sd/sdhci.c | 6 +++--- hw/sd/ssi-sd.c | 12 +++++++----- 9 files changed, 47 insertions(+), 30 deletions(-) diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index d6bad175131..55d363f58fb 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -96,7 +96,17 @@ struct SDCardClass { DeviceClass parent_class; /*< public >*/ =20 - int (*do_command)(SDState *sd, SDRequest *req, uint8_t *response); + /** + * Process a SD command request. + * @sd: card + * @req: command request + * @resp: buffer to receive the command response + * @respsz: size of @resp buffer + * + * Return: size of the response + */ + size_t (*do_command)(SDState *sd, SDRequest *req, + uint8_t *resp, size_t respsz); /** * Write a byte to a SD card. * @sd: card @@ -153,7 +163,16 @@ struct SDBusClass { 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); +/** + * sdbus_do_command: Process a SD command request + * @sd: card + * @req: command request + * @resp: buffer to receive the command response + * @respsz: size of @resp buffer + * + * Return: size of the response + */ +size_t sdbus_do_command(SDBus *sd, SDRequest *req, uint8_t *resp, size_t r= espsz); /** * Write a byte to a SD bus. * @sd: bus diff --git a/hw/sd/allwinner-sdhost.c b/hw/sd/allwinner-sdhost.c index b31da5c399c..9d61b372e70 100644 --- a/hw/sd/allwinner-sdhost.c +++ b/hw/sd/allwinner-sdhost.c @@ -233,7 +233,7 @@ static void allwinner_sdhost_send_command(AwSdHostState= *s) { SDRequest request; uint8_t resp[16]; - int rlen; + size_t rlen; =20 /* Auto clear load flag */ s->command &=3D ~SD_CMDR_LOAD; @@ -246,10 +246,7 @@ static void allwinner_sdhost_send_command(AwSdHostStat= e *s) request.arg =3D s->command_arg; =20 /* Send request to SD bus */ - rlen =3D sdbus_do_command(&s->sdbus, &request, resp); - if (rlen < 0) { - goto error; - } + rlen =3D sdbus_do_command(&s->sdbus, &request, resp, sizeof(resp)); =20 /* If the command has a response, store it in the response registe= rs */ if ((s->command & SD_CMDR_RESPONSE)) { diff --git a/hw/sd/bcm2835_sdhost.c b/hw/sd/bcm2835_sdhost.c index 29debdf59e4..f7cef7bb1cd 100644 --- a/hw/sd/bcm2835_sdhost.c +++ b/hw/sd/bcm2835_sdhost.c @@ -113,15 +113,12 @@ static void bcm2835_sdhost_send_command(BCM2835SDHost= State *s) { SDRequest request; uint8_t rsp[16]; - int rlen; + size_t rlen; =20 request.cmd =3D s->cmd & SDCMD_CMD_MASK; request.arg =3D s->cmdarg; =20 - rlen =3D sdbus_do_command(&s->sdbus, &request, rsp); - if (rlen < 0) { - goto error; - } + rlen =3D sdbus_do_command(&s->sdbus, &request, rsp, sizeof(rsp)); if (!(s->cmd & SDCMD_NO_RESPONSE)) { if (rlen =3D=3D 0 || (rlen =3D=3D 4 && (s->cmd & SDCMD_LONG_RESPON= SE))) { goto error; diff --git a/hw/sd/core.c b/hw/sd/core.c index 4b30218b520..d3c9017445e 100644 --- a/hw/sd/core.c +++ b/hw/sd/core.c @@ -90,7 +90,8 @@ void sdbus_set_voltage(SDBus *sdbus, uint16_t millivolts) } } =20 -int sdbus_do_command(SDBus *sdbus, SDRequest *req, uint8_t *response) +size_t sdbus_do_command(SDBus *sdbus, SDRequest *req, + uint8_t *resp, size_t respsz) { SDState *card =3D get_card(sdbus); =20 @@ -98,7 +99,7 @@ int sdbus_do_command(SDBus *sdbus, SDRequest *req, uint8_= t *response) if (card) { SDCardClass *sc =3D SDMMC_COMMON_GET_CLASS(card); =20 - return sc->do_command(card, req, response); + return sc->do_command(card, req, resp, respsz); } =20 return 0; diff --git a/hw/sd/omap_mmc.c b/hw/sd/omap_mmc.c index b7648d41cc5..5a1d25defaa 100644 --- a/hw/sd/omap_mmc.c +++ b/hw/sd/omap_mmc.c @@ -130,7 +130,8 @@ static void omap_mmc_command(OMAPMMCState *host, int cm= d, int dir, sd_rsp_type_t resptype, int init) { uint32_t rspstatus, mask; - int rsplen, timeout; + size_t rsplen; + int timeout; SDRequest request; uint8_t response[16]; =20 @@ -157,7 +158,7 @@ static void omap_mmc_command(OMAPMMCState *host, int cm= d, int dir, request.arg =3D host->arg; request.crc =3D 0; /* FIXME */ =20 - rsplen =3D sdbus_do_command(&host->sdbus, &request, response); + rsplen =3D sdbus_do_command(&host->sdbus, &request, response, sizeof(r= esponse)); =20 /* TODO: validate CRCs */ switch (resptype) { diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c index b8fc9f86f13..5d56ead4d91 100644 --- a/hw/sd/pl181.c +++ b/hw/sd/pl181.c @@ -173,14 +173,12 @@ static void pl181_do_command(PL181State *s) { SDRequest request; uint8_t response[16]; - int rlen; + size_t rlen; =20 request.cmd =3D s->cmd & PL181_CMD_INDEX; request.arg =3D s->cmdarg; trace_pl181_command_send(request.cmd, request.arg); - rlen =3D sdbus_do_command(&s->sdbus, &request, response); - if (rlen < 0) - goto error; + rlen =3D sdbus_do_command(&s->sdbus, &request, response, sizeof(respon= se)); if (s->cmd & PL181_CMD_RESPONSE) { if (rlen =3D=3D 0 || (rlen =3D=3D 4 && (s->cmd & PL181_CMD_LONGRES= P))) goto error; diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 76ce54664f2..069107a2e70 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -2166,8 +2166,9 @@ static bool cmd_valid_while_locked(SDState *sd, unsig= ned cmd) return cmd_class =3D=3D 0 || cmd_class =3D=3D 7; } =20 -static int sd_do_command(SDState *sd, SDRequest *req, - uint8_t *response) { +static size_t sd_do_command(SDState *sd, SDRequest *req, + uint8_t *response, size_t respsz) +{ int last_state; sd_rsp_type_t rtype; int rsplen; @@ -2231,6 +2232,7 @@ static int sd_do_command(SDState *sd, SDRequest *req, =20 send_response: rsplen =3D sd_response_size(sd, rtype); + assert(rsplen <=3D respsz); =20 switch (rtype) { case sd_r1: diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index 226ff133ff9..3c897e54b72 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -337,7 +337,7 @@ static void sdhci_send_command(SDHCIState *s) { SDRequest request; uint8_t response[16]; - int rlen; + size_t rlen; bool timeout =3D false; =20 s->errintsts =3D 0; @@ -346,7 +346,7 @@ static void sdhci_send_command(SDHCIState *s) request.arg =3D s->argument; =20 trace_sdhci_send_command(request.cmd, request.arg); - rlen =3D sdbus_do_command(&s->sdbus, &request, response); + rlen =3D sdbus_do_command(&s->sdbus, &request, response, sizeof(respon= se)); =20 if (s->cmdreg & SDHC_CMD_RESPONSE) { if (rlen =3D=3D 4) { @@ -400,7 +400,7 @@ static void sdhci_end_transfer(SDHCIState *s) request.cmd =3D 0x0C; request.arg =3D 0; trace_sdhci_end_transfer(request.cmd, request.arg); - sdbus_do_command(&s->sdbus, &request, response); + sdbus_do_command(&s->sdbus, &request, response, sizeof(response)); /* Auto CMD12 response goes to the upper Response register */ s->rspreg[3] =3D ldl_be_p(response); } diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 6c90a86ab41..3025f8f15f4 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -146,8 +146,9 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uin= t32_t val) /* manually issue cmd12 to stop the transfer */ request.cmd =3D 12; request.arg =3D 0; - s->arglen =3D sdbus_do_command(&s->sdbus, &request, longresp); - if (s->arglen <=3D 0) { + s->arglen =3D sdbus_do_command(&s->sdbus, &request, + longresp, sizeof(longresp)); + if (s->arglen =3D=3D 0) { s->arglen =3D 1; /* a zero value indicates the card is busy */ s->response[0] =3D 0; @@ -171,8 +172,9 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uin= t32_t val) 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); - if (s->arglen <=3D 0) { + s->arglen =3D sdbus_do_command(&s->sdbus, &request, + longresp, sizeof(longresp)); + if (s->arglen =3D=3D 0) { s->arglen =3D 1; s->response[0] =3D 4; DPRINTF("SD command failed\n"); @@ -333,7 +335,7 @@ static int ssi_sd_post_load(void *opaque, int version_i= d) return -EINVAL; } if (s->mode =3D=3D SSI_SD_CMDARG && - (s->arglen < 0 || s->arglen >=3D ARRAY_SIZE(s->cmdarg))) { + (s->arglen >=3D ARRAY_SIZE(s->cmdarg))) { return -EINVAL; } if (s->mode =3D=3D SSI_SD_RESPONSE && --=20 2.49.0 From nobody Sat Nov 15 07:39:25 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1754319798; cv=none; d=zohomail.com; s=zohoarc; b=MFSH+Wi+c6vfpt1DzpUsBOIr6mT3sfkVXNnk2e1R1Z0nJBuJkBHtydyApVvvjlrL3TTIRQGG16eXCA+RfLOm5je0uYPgY4TEs2ttISj3mB9Ru2zIYUoKjFKlcKkLbn+ceYQbCilsRNe7JUf8UIvV3qsAZv0BOZYU4d2ZJjjZ9K8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754319798; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6JfNbJBRiGns9nQxb/dXlOb6j3h09lwYC9hOfonr8Uc=; b=W4HucrlmxtbiV3barbKxp5JEjMdQTSgow3C8PTnzOoetgK1RBLwZ19SCMsU5EP5I7tJe2SrtJHXJHs1elMZm1QvcdDc92Es+K6UqgAJUaGGZvQkU0gWgkBXwA5tisXfyaL6tmgRFprFFOOPbA8C7UTHpozUObRmNvKXhptaWNcI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1754319798542658.4323868439805; Mon, 4 Aug 2025 08:03:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uiwfF-0007sy-48; Mon, 04 Aug 2025 10:59:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uivKj-0000RB-DP for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:35 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uivKg-0008WP-Vn for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:32 -0400 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3b7834f2e72so2844018f8f.2 for ; Mon, 04 Aug 2025 06:34:30 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b8e0b2d2fasm5471447f8f.50.2025.08.04.06.34.27 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 04 Aug 2025 06:34:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754314469; x=1754919269; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6JfNbJBRiGns9nQxb/dXlOb6j3h09lwYC9hOfonr8Uc=; b=lrn89bwey3Tu+WDBBZDjxzLPXz1GlH/G1ToMAbyS0+vtG+pjbG333UGHilbcNza9S6 C9Psg+OIPQmdOsjO06SmTD6W2i22z85EVLVIJrxLBrVstvlNri/8qLYqBLf7LiJEhJcj xphrIs7DG8LySW7Qqm0VJ7/PoPIrksHDggnqwUXyRLZyyMn22mSy07LBxa9U6wQ9smPT /L8hKQ4/Z422tQWdDGKtFRuv0K+0yn/Piv0b60asD1vD6cAyDgrMjkL0tG+JyxgJNbYf wFZSJ5Ajt5zv62yQOUvqi69v/LAZlQh5ax8Y+KtNsqK/jVDZR0k7jgA8VYxUK5FRA4KF Kl9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754314469; x=1754919269; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6JfNbJBRiGns9nQxb/dXlOb6j3h09lwYC9hOfonr8Uc=; b=ntfk7c0vuq4+xqSSCNY+2CtpzVD9VS6n2motKcaSGQjKXMQB8ccRYI3xClr1sFnRbJ mcZdqA5guwVfVxoIOwGzyE0r0pHbT4c/IBB3uIwmRUGfuFDWJVZON35ftSIrsTDiiPg0 TtlphhpegIfXwAlYs4xvJhknd9q9SyHyJYghvv9eepvFRriNmreJfgPvhJ+06P41lCXR 7tEZvZQqG85xsp1KEig1Dc2rxrUA8ijQnrFXaYL/F92h1zpkHjz3Maw5vMWU2OdvjSuO aAHQfJUnupK87fLM8FBlZZ4//nhmHEmdgQeBHBkyrs+KxJQ9K2XJdCj7wSROc/4K6JGJ YPEA== X-Forwarded-Encrypted: i=1; AJvYcCU1Ycq1nol5StEJ7LvCWYwmZ5WWPbefShXWptY2KVLlZ0Ayct++Os+C8q6DxU7Z7n1zTm+isW1dGxJ9@nongnu.org X-Gm-Message-State: AOJu0Yz2jfcBVnmSrtD2DUq+6lJ39yHeb/3t8TpETUzDhyGWYJukzcz3 VEDXok3vLEuLYj6IHGLuNYxq1DpCdBCFTpVhb1SeGpaMtqVJywmmFgbLqgHdtZyxe1A= X-Gm-Gg: ASbGnct4nJd3D1pVhcOf+cXi+q/X/lgZ9w/x7FAw0xnyLspSzTCqOl7lm29iDkPMb1d OqX2wCIOnoBZ4j0J5CbdGE1dFtSnJhnDUW48tQ5frelvKb5V3cYXm4Y7RmjWJ3vQ7W8/UMbtsqY Ej76xPPOaG9fl4yuUqUtetR5nP/1UfjvKluiYvnffhwT3RU9hjE26UDS2ArDGBgXbbSglzFs2VH gmc6ObUwtPnO/Y7B6t+snjoeT77Duy95YL+bZ3AJCBoyBSYOG8MAKetNzM1lTcx04W9BthIya0L YrMruEG+bmo11gchfR5vh/6X7+bo+30zRw6UCu508qMkoAXnKEEWckOLuSlXP2JD+dfLwDnkfh1 /S+yF35J6tvUfYI2AHmyfcW6d+GimYsjUzh/Mw/FzS9v/IwLs3aYL9wjWLBC3Z5T3M3OodxrC X-Google-Smtp-Source: AGHT+IHKcZhP/j9SnSEtfOajWnPlIlr64RHOLptHsEDaDEJAOrncDTl/jUfYf1X+CnOq515ebaRJmg== X-Received: by 2002:a05:6000:25c7:b0:3b8:d7c7:62d7 with SMTP id ffacd0b85a97d-3b8d94749abmr6554494f8f.16.1754314469249; Mon, 04 Aug 2025 06:34:29 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ben Dooks , qemu-riscv@nongnu.org, qemu-block@nongnu.org, qemu-arm@nongnu.org, Guenter Roeck , Bin Meng Subject: [PATCH-for-10.1 v2 04/11] hw/sd/sdcard: Fill SPI response bits in card code Date: Mon, 4 Aug 2025 15:33:58 +0200 Message-ID: <20250804133406.17456-5-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250804133406.17456-1-philmd@linaro.org> References: <20250804133406.17456-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=philmd@linaro.org; helo=mail-wr1-x429.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1754319801683124100 ssi-sd.c contains the SPI link layer adaptation, while sd.c contains all the SD card internal details. We already handle the response values in sd.c, but missed the SPI case. Complete them (fill R1, prepend R1 in R3/R7 and always return something in SPI mode). Remove all the duplication in ssi-sd.c. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Richard Henderson --- hw/sd/sd.c | 32 ++++++++++++++++--- hw/sd/ssi-sd.c | 87 ++++---------------------------------------------- 2 files changed, 35 insertions(+), 84 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 069107a2e70..cbcc180f6a4 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -734,22 +734,24 @@ static size_t sd_response_size(SDState *sd, sd_rsp_ty= pe_t rtype) switch (rtype) { case sd_r1: case sd_r1b: - return 4; + return sd_is_spi(sd) ? 1 : 4; =20 case sd_r2_i: case sd_r2_s: + assert(!sd_is_spi(sd)); return 16; =20 case sd_r3: case sd_r7: - return 4; + return sd_is_spi(sd) ? 5 : 4; =20 case sd_r6: + assert(!sd_is_spi(sd)); return 4; =20 case sd_r0: case sd_illegal: - return 0; + return sd_is_spi(sd) ? 1 : 0; =20 default: g_assert_not_reached(); @@ -758,7 +760,19 @@ static size_t sd_response_size(SDState *sd, sd_rsp_typ= e_t rtype) =20 static void sd_response_r1_make(SDState *sd, uint8_t *response) { - stl_be_p(response, sd->card_status); + if (sd_is_spi(sd)) { + response[0] =3D sd->state =3D=3D sd_idle_state + && !FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP); + response[0] |=3D FIELD_EX32(sd->card_status, CSR, ERASE_RESET) << = 1; + response[0] |=3D FIELD_EX32(sd->card_status, CSR, ILLEGAL_COMMAND)= << 2; + response[0] |=3D FIELD_EX32(sd->card_status, CSR, COM_CRC_ERROR) <= < 3; + response[0] |=3D FIELD_EX32(sd->card_status, CSR, ERASE_SEQ_ERROR)= << 4; + response[0] |=3D FIELD_EX32(sd->card_status, CSR, ADDRESS_ERROR) <= < 5; + response[0] |=3D FIELD_EX32(sd->card_status, CSR, BLOCK_LEN_ERROR)= << 6; + response[0] |=3D 0 << 7; + } else { + stl_be_p(response, sd->card_status); + } =20 /* Clear the "clear on read" status bits */ sd->card_status &=3D ~CARD_STATUS_C; @@ -766,6 +780,11 @@ static void sd_response_r1_make(SDState *sd, uint8_t *= response) =20 static void sd_response_r3_make(SDState *sd, uint8_t *response) { + if (sd_is_spi(sd)) { + /* Prepend R1 */ + sd_response_r1_make(sd, response); + response++; + } stl_be_p(response, sd->ocr & ACMD41_R3_MASK); } =20 @@ -783,6 +802,11 @@ static void sd_response_r6_make(SDState *sd, uint8_t *= response) =20 static void sd_response_r7_make(SDState *sd, uint8_t *response) { + if (sd_is_spi(sd)) { + /* Prepend R1 */ + sd_response_r1_make(sd, response); + response++; + } stl_be_p(response, sd->vhs); } =20 diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 3025f8f15f4..2d5c0ad5016 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -70,23 +70,6 @@ struct ssi_sd_state { #define TYPE_SSI_SD "ssi-sd" OBJECT_DECLARE_SIMPLE_TYPE(ssi_sd_state, SSI_SD) =20 -/* State word bits. */ -#define SSI_SDR_LOCKED 0x0001 -#define SSI_SDR_WP_ERASE 0x0002 -#define SSI_SDR_ERROR 0x0004 -#define SSI_SDR_CC_ERROR 0x0008 -#define SSI_SDR_ECC_FAILED 0x0010 -#define SSI_SDR_WP_VIOLATION 0x0020 -#define SSI_SDR_ERASE_PARAM 0x0040 -#define SSI_SDR_OUT_OF_RANGE 0x0080 -#define SSI_SDR_IDLE 0x0100 -#define SSI_SDR_ERASE_RESET 0x0200 -#define SSI_SDR_ILLEGAL_COMMAND 0x0400 -#define SSI_SDR_COM_CRC_ERROR 0x0800 -#define SSI_SDR_ERASE_SEQ_ERROR 0x1000 -#define SSI_SDR_ADDRESS_ERROR 0x2000 -#define SSI_SDR_PARAMETER_ERROR 0x4000 - /* multiple block write */ #define SSI_TOKEN_MULTI_WRITE 0xfc /* terminate multiple block write */ @@ -104,7 +87,7 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uint= 32_t val) { ssi_sd_state *s =3D SSI_SD(dev); SDRequest request; - uint8_t longresp[16]; + uint8_t longresp[5]; =20 /* * Special case: allow CMD12 (STOP TRANSMISSION) while reading data. @@ -171,74 +154,18 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, u= int32_t val) /* 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, sizeof(longresp)); - if (s->arglen =3D=3D 0) { - s->arglen =3D 1; - s->response[0] =3D 4; - DPRINTF("SD command failed\n"); - } else if (s->cmd =3D=3D 8 || s->cmd =3D=3D 58) { - /* CMD8/CMD58 returns R3/R7 response */ - DPRINTF("Returned R3/R7\n"); - s->arglen =3D 5; - s->response[0] =3D 1; - memcpy(&s->response[1], longresp, 4); - } else if (s->arglen !=3D 4) { - BADF("Unexpected response to cmd %d\n", s->cmd); - /* Illegal command is about as near as we can get. */ - s->arglen =3D 1; - s->response[0] =3D 4; - } else { - /* All other commands return status. */ - uint32_t cardstatus; - uint16_t status; + DPRINTF("CMD%d arg 0x%08x =3D %d\n", s->cmd, request.arg, s->a= rglen); + assert(s->arglen > 0); /* CMD13 returns a 2-byte statuse work. Other commands only return the first byte. */ s->arglen =3D (s->cmd =3D=3D 13) ? 2 : 1; + memcpy(s->response, longresp, s->arglen); =20 - /* handle R1b */ - if (s->cmd =3D=3D 28 || s->cmd =3D=3D 29 || s->cmd =3D=3D = 38) { - s->stopping =3D 1; - } - - cardstatus =3D ldl_be_p(longresp); - status =3D 0; - if (((cardstatus >> 9) & 0xf) < 4) - status |=3D SSI_SDR_IDLE; - if (cardstatus & ERASE_RESET) - status |=3D SSI_SDR_ERASE_RESET; - if (cardstatus & ILLEGAL_COMMAND) - status |=3D SSI_SDR_ILLEGAL_COMMAND; - if (cardstatus & COM_CRC_ERROR) - status |=3D SSI_SDR_COM_CRC_ERROR; - if (cardstatus & ERASE_SEQ_ERROR) - status |=3D SSI_SDR_ERASE_SEQ_ERROR; - if (cardstatus & ADDRESS_ERROR) - status |=3D SSI_SDR_ADDRESS_ERROR; - if (cardstatus & CARD_IS_LOCKED) - status |=3D SSI_SDR_LOCKED; - if (cardstatus & (LOCK_UNLOCK_FAILED | WP_ERASE_SKIP)) - status |=3D SSI_SDR_WP_ERASE; - if (cardstatus & SD_ERROR) - status |=3D SSI_SDR_ERROR; - if (cardstatus & CC_ERROR) - status |=3D SSI_SDR_CC_ERROR; - if (cardstatus & CARD_ECC_FAILED) - status |=3D SSI_SDR_ECC_FAILED; - if (cardstatus & WP_VIOLATION) - status |=3D SSI_SDR_WP_VIOLATION; - if (cardstatus & ERASE_PARAM) - status |=3D SSI_SDR_ERASE_PARAM; - if (cardstatus & (OUT_OF_RANGE | CID_CSD_OVERWRITE)) - status |=3D SSI_SDR_OUT_OF_RANGE; - /* ??? Don't know what Parameter Error really means, so - assume it's set if the second byte is nonzero. */ - if (status & 0xff) - status |=3D SSI_SDR_PARAMETER_ERROR; - s->response[0] =3D status >> 8; - s->response[1] =3D status; - DPRINTF("Card status 0x%02x\n", status); + /* handle R1b (busy signal) */ + if (s->cmd =3D=3D 28 || s->cmd =3D=3D 29 || s->cmd =3D=3D 38) { + s->stopping =3D 1; } s->mode =3D SSI_SD_PREP_RESP; s->response_pos =3D 0; --=20 2.49.0 From nobody Sat Nov 15 07:39:25 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1754319582; cv=none; d=zohomail.com; s=zohoarc; b=AVFGA3ME/8thb8g6Xae8NzJ83syQC7xlNHvDHGAo4/LpVcr198RAc3p0j1F0aECcX36eHqBwjIOmWlg/1fjlBKkFeCgsdOLs9qbnVaOQ4kTg7LbTLbTiCyClBlp9E4+DjO+DxUSV/s/cl5WsfPVWTwlmxspsqLgNcKC5JOsN22s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754319582; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1FuF7hehb7w0/1XQAyoYKQHd5iUS7qur1XCWnAxr71Q=; b=DccCeiwOwCznDdNN3E+xf6muNjMwL6ZiAonFzjEyCBjSXtNKMHpxaOwZcf3u5GsCC4iSbSzZP3Pc4lubKMzDPEtK+XYW/lkuw3O5xkftsNoPeuB6LxHBogHTVKTNIm8zUZV4xBwINC8vZ+9Dn5ucm9Idw35aldZSapJH8ffw8eg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1754319582532817.2872452471247; Mon, 4 Aug 2025 07:59:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uiweb-0003Iz-Ma; Mon, 04 Aug 2025 10:59:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uivKp-0000ai-9B for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:44 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uivKl-000060-R3 for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:38 -0400 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-459ddada9b1so5973665e9.0 for ; Mon, 04 Aug 2025 06:34:35 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b79c338c7dsm15702306f8f.0.2025.08.04.06.34.33 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 04 Aug 2025 06:34:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754314474; x=1754919274; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1FuF7hehb7w0/1XQAyoYKQHd5iUS7qur1XCWnAxr71Q=; b=cykoYVwlvGTANHkWz9TDQbUNBTUlmefFUkDIcV1HaLw/nzWeIzNaVrEM4n1Dp9OIHf CEVCV8QnJZJTlFSmaBvJ0sW6TK1LKvlBGWi0bhAimMLaZb8MeubVY2p9fKUMvw31iZ15 m26BUPF6snt0huX8plVLnHyBe0pz9NS/nAqPvWWSDt0QYllI6Rnq3RrIeKsWaWbvjcrR Wlq10hlCdbH1615wFztSQEc3NhZX3CoAav6NoAgS/gOUarhzdjY3+DdyhIh28mtdBXX2 95BWZomc16yMWkcaJ8p3KPINfkUbpdlvdj+TXKsivD3ssM0m8HtlqP0gdvjZjEWp/LcK UVRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754314474; x=1754919274; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1FuF7hehb7w0/1XQAyoYKQHd5iUS7qur1XCWnAxr71Q=; b=OHoXPSjDLHDyqL4oZSthu+s4pDAwOEZ4t+i3ZlOeW2RHXVczzY5piOfLlLevtZgg6y GeueqzF5axpB8AN7A6wee//DJSOOXRFcR3JEWIiAcniZdmFrsDhAkt9W1M62g2MKfSA3 UBfMtmvWoUHvQLBkW9jdEYG0Huh7frVNpCj7HAUFX0gUCI47wbNNtLaMXRITlIIZQzpl tnbA+rZ9eho+TJrOdP3HQfDvHAT1/4HDlBxkBhOYeppD1aVES/2nHjfDv8dGuPUgzH88 s4t0o1l8wc2fS3Ho5nIMYzt4v/cTt8VC7K9E22sXPPcbtCs2S7PfJCfREahHy8+1GF0h v7og== X-Forwarded-Encrypted: i=1; AJvYcCXcrayXY4/cT2oGO9YaOpFCOoR9Q2Me3uuoOznW0hUPqjrKXLk5+6EJaKIyfNTPSm31U6bYKEqwJqQg@nongnu.org X-Gm-Message-State: AOJu0Ywe+tEoWXMHdfqCztsLYvsus1EnO5k8pyAgyh8hbyZraAryEW6c hqByRHBb1LS4xRcnCbYhMAzha4AFqf8zTL2WxFUHPKktGiMXj27XrPMnbcCVdUPKFBogoynHO7/ cpJ4n X-Gm-Gg: ASbGncsVZ11KfuDhs3x7MHKXnmkHtafAnjj5Up/DJxLOIwoQ6GY7ZD7/ingWDpunyws Ra4/+ow8rfC/ju5BqyRxY2zU7ssT73HoZ94MdbBCq0I1bkHCN3X7aaG3dmiTDRkB9TsYFgDffP9 9TgS6zw5uK9a4zsSTt3CRWwfNgzng3q115Un3CftW5HZjVt6JlhvkA/hnaBDExAOkN8qbQVSRGW pUq3WyJbACFm070gkjxB3D3XuMbUSEAWjUN3cUU8wNukpYG5d/qRK5ocyQBWn43uCVb40+p0Py7 eDuhX6gfXI3N2VjePmUT7g0l1tOPnwhsoC+wA1+xKQY4t8e3e1jkRUjppKpSnJ5OYtK4f73RJNV 1nQnZsjBY1JUTv4RiO9VF42J0ro1o58zNtNUzTJ4r0HoDP7lyEl6oN0Ua647qTjuWzF1zX1jq X-Google-Smtp-Source: AGHT+IFYOu7nkG9F0StsOdErlwB5/2xT9FL21rdulKc4Wh711KsDc2fRPP3zVgs9vlBrMxgKqMoHYg== X-Received: by 2002:a05:600c:1e8c:b0:456:11cc:360d with SMTP id 5b1f17b1804b1-458b69de114mr73189625e9.9.1754314474211; Mon, 04 Aug 2025 06:34:34 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ben Dooks , qemu-riscv@nongnu.org, qemu-block@nongnu.org, qemu-arm@nongnu.org, Guenter Roeck , Bin Meng Subject: [PATCH-for-10.1 v2 05/11] hw/sd/sdcard: Implement SPI R2 return value Date: Mon, 4 Aug 2025 15:33:59 +0200 Message-ID: <20250804133406.17456-6-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250804133406.17456-1-philmd@linaro.org> References: <20250804133406.17456-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32a; envelope-from=philmd@linaro.org; helo=mail-wm1-x32a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1754319585641124100 In SPI mode, R2 is a 2-byte value. Implement in spi_response_r2_make() and return SPI R2 in the SEND_STATUS commands. Reported-by: Guenter Roeck Fixes: 775616c3ae8 ("Partial SD card SPI mode support") Signed-off-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Richard Henderson --- hw/sd/sd.c | 38 +++++++++++++++++++++++++++++++++++--- hw/sd/ssi-sd.c | 3 --- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index cbcc180f6a4..01ec6d951c8 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -61,6 +61,7 @@ typedef enum { sd_r0 =3D 0, /* no response */ sd_r1, /* normal response command */ + spi_r2, /* STATUS */ sd_r2_i, /* CID register */ sd_r2_s, /* CSD register */ sd_r3, /* OCR register */ @@ -247,6 +248,7 @@ static const char *sd_response_name(sd_rsp_type_t rsp) static const char *response_name[] =3D { [sd_r0] =3D "RESP#0 (no response)", [sd_r1] =3D "RESP#1 (normal cmd)", + [spi_r2] =3D "RESP#2 (STATUS reg)", [sd_r2_i] =3D "RESP#2 (CID reg)", [sd_r2_s] =3D "RESP#2 (CSD reg)", [sd_r3] =3D "RESP#3 (OCR reg)", @@ -736,6 +738,10 @@ static size_t sd_response_size(SDState *sd, sd_rsp_typ= e_t rtype) case sd_r1b: return sd_is_spi(sd) ? 1 : 4; =20 + case spi_r2: + assert(sd_is_spi(sd)); + return 2; + case sd_r2_i: case sd_r2_s: assert(!sd_is_spi(sd)); @@ -778,6 +784,22 @@ static void sd_response_r1_make(SDState *sd, uint8_t *= response) sd->card_status &=3D ~CARD_STATUS_C; } =20 +static void spi_response_r2_make(SDState *sd, uint8_t *resp) +{ + /* Prepend R1 */ + sd_response_r1_make(sd, resp); + + resp[1] =3D FIELD_EX32(sd->card_status, CSR, CARD_IS_LOCKED) << 0; + resp[1] |=3D (FIELD_EX32(sd->card_status, CSR, LOCK_UNLOCK_FAILED) + || FIELD_EX32(sd->card_status, CSR, WP_ERASE_SKIP)) << 1; + resp[1] |=3D FIELD_EX32(sd->card_status, CSR, ERROR) << 2; + resp[1] |=3D FIELD_EX32(sd->card_status, CSR, CC_ERROR) << 3; + resp[1] |=3D FIELD_EX32(sd->card_status, CSR, CARD_ECC_FAILED) << 4; + resp[1] |=3D FIELD_EX32(sd->card_status, CSR, WP_VIOLATION) << 5; + resp[1] |=3D FIELD_EX32(sd->card_status, CSR, ERASE_PARAM) << 6; + resp[1] |=3D FIELD_EX32(sd->card_status, CSR, OUT_OF_RANGE) << 7; +} + static void sd_response_r3_make(SDState *sd, uint8_t *response) { if (sd_is_spi(sd)) { @@ -1643,7 +1665,7 @@ static sd_rsp_type_t sd_cmd_SEND_STATUS(SDState *sd, = SDRequest req) } =20 if (sd_is_spi(sd)) { - return sd_r2_s; + return spi_r2; } =20 return sd_req_rca_same(sd, req) ? sd_r1 : sd_r0; @@ -1957,8 +1979,14 @@ static sd_rsp_type_t sd_acmd_SET_BUS_WIDTH(SDState *= sd, SDRequest req) /* ACMD13 */ static sd_rsp_type_t sd_acmd_SD_STATUS(SDState *sd, SDRequest req) { - return sd_cmd_to_sendingdata(sd, req, 0, - sd->sd_status, sizeof(sd->sd_status)); + sd_rsp_type_t rsp; + + rsp =3D sd_cmd_to_sendingdata(sd, req, 0, + sd->sd_status, sizeof(sd->sd_status)); + if (sd_is_spi(sd) && rsp !=3D sd_illegal) { + return spi_r2; + } + return rsp; } =20 /* ACMD22 */ @@ -2264,6 +2292,10 @@ send_response: sd_response_r1_make(sd, response); break; =20 + case spi_r2: + spi_response_r2_make(sd, response); + break; + case sd_r2_i: memcpy(response, sd->cid, sizeof(sd->cid)); break; diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 2d5c0ad5016..594dead19ee 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -158,9 +158,6 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uin= t32_t val) longresp, sizeof(longresp)); DPRINTF("CMD%d arg 0x%08x =3D %d\n", s->cmd, request.arg, s->a= rglen); assert(s->arglen > 0); - /* CMD13 returns a 2-byte statuse work. Other commands - only return the first byte. */ - s->arglen =3D (s->cmd =3D=3D 13) ? 2 : 1; memcpy(s->response, longresp, s->arglen); =20 /* handle R1b (busy signal) */ --=20 2.49.0 From nobody Sat Nov 15 07:39:25 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1754319583; cv=none; d=zohomail.com; s=zohoarc; b=KUtzs/NDr02Ib3rqhiBUCuqe6o06luvLYhWO/TO49UR9QQujnhxCLv5h/DJ191fx0d1BFke1xrMdAzxwQUlwnhMdK4scsuEeIX/2/fAZ/e8qHpjSzYHGFzmwyHpgstiS/OfPDyHZV40BJJjX6fFGJ9+xy4qZyeIhbo3F9kY+keM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754319583; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3Uzbc/9L5Pzkd4K6o0zmm99krPdgkAOBzf5hBdRfajU=; b=PnFWhwQRzFUYMGMM+FBRQRsFO5GWZdBZx/Ixzz9V5e5SW1UK9KNSrWdH5iFycb9MFHPmSR+xlbNPMXOtgqzfjLSiopm3bfjKhp1+3wr6JfzFOaQ3NMYk+YWXtF6IrqrhmGnm3iVCV5FvXcSPM9duDrDx6ZMt8FYz5d53fJywtSo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1754319583738910.9848846637636; Mon, 4 Aug 2025 07:59:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uiwed-0003R8-14; Mon, 04 Aug 2025 10:59:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uivKv-0000jY-0K for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:47 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uivKq-00007U-LV for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:43 -0400 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-458bdde7dedso13562625e9.0 for ; Mon, 04 Aug 2025 06:34:40 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-458f713eb44sm69385015e9.14.2025.08.04.06.34.38 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 04 Aug 2025 06:34:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754314479; x=1754919279; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3Uzbc/9L5Pzkd4K6o0zmm99krPdgkAOBzf5hBdRfajU=; b=UbqGDXIcpJluEzFdOg505sxM49p0GdbFz6afW+XE25/GFxW1dAZY+Bni+f8POrZ0dK lppaCeJcQRL+Zph2/iNPw+z9k8QvpiLsRw3ZSSuE8oIHaxd80VBh4Pm+/SRnb7yc+RUy G7GebPGjiSJYYPvlia8RShDgALPdAv68ffQwNGJHLy7R9WZ/s3hvzWow3gT3Bzm//I40 5ZxCWruZxOtAViiCMoZV/SkJ/ckR6p8x8CLWyZAl/39g1uSl9VSWXgO4ZWNPR+4Df9gd gdM/RA6l+VvYfzdShvoMJ3k48wPAaIFyzDp+AtE1AC2T6YQFQ+woZbNHwwaKaHG7MSZq vgDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754314479; x=1754919279; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3Uzbc/9L5Pzkd4K6o0zmm99krPdgkAOBzf5hBdRfajU=; b=sRsb98VLe3KehfLvjIWwG8oGLBPnafLEsfesDIF++I4kp7bJ4DKa7NBtU7zzPftHT0 Hm5oCSe4iAuZk50yhV+0pehz4rzku+N51msd0+aSNKMnbHXPtkN6eWo+QJ0uQVCPGW3X uT+aLBDxMNP1ehRBwVyOFFNJDLiFPNZFT9UBMWjlds31g1Y1wkSdVW/haQb/xgn1MVQY /frRh6zvlTp06L9GyPbHCBajnS/FV0MOZPwPcvh0lSz9kxPkrRbM2Xl28KVoHlDoguj5 vQMJcloP4bqQYkv8IrsIJerIwqHTGwKJkeUnYIwpRfPRcpzFDSY6WE7bBBuz9aNo/NgA 4J3A== X-Forwarded-Encrypted: i=1; AJvYcCUNb2bryjJFniydypzKt6vZLofEC9RtEmhVoagmI4OiMNB59GAveK9mA5wl6kxB9pCXa57VvF8UsRFz@nongnu.org X-Gm-Message-State: AOJu0YyV44iWH9ceRQMJfI9FtdI26LU3YZiVuQwSk/veE486RlgLepHE UKN7AYwX6p8PwYo2OeJCcxQ2JIMGpJBqGGiTC/y+2EGNznihhAbSEyjDZ92KyzaMumc= X-Gm-Gg: ASbGncsaR5lvLUcGjZaDVe/o0VdsyMgKkB2C9x3FcEyumTx1mfOJyRlSgZR1X5VlnfX qLo+zALDB1VR+GyVrqmrwGrjvZ6KBCjrERcd8B83Hc3frQEwLLOElbB0tRSP8Ny8V2ulOSGdEEg BH5uP9og+by7C6mTuEi8MWX1mU6k6k1pTlAoGV1M5CqnFo1cXumeJNZV/wGd1xffdoVdxqhC88Z tD1ENUDw3OMk9VC8h1s3brhtAHpyzwVXMunxbP/Ej1Dw0TIQsdU/GHQNv0ewzWgg0E2VnGzZVPQ oCpUTPELTo5t2izi6WM3K3ju2KcmPIMz9uHqVYKgEQ7ew18Uj6Yc8u7IKjam3KhLTC8E8NVWHh+ Xro3NQh3MPYW5gtXY4W4vP4PTnbn51QlWmpU60rm/BYXBTO4XqAYiQtoD56t23QzLEvY/ZTsvqF +EuZFlD1M= X-Google-Smtp-Source: AGHT+IHdQV3ZZ7y0hcsW5s0sE6REmong0zZ6FpRzcsHdqr0+Z8yx2mEad8dQ6KedYSuApn3+hceRpw== X-Received: by 2002:a05:600c:1554:b0:456:1514:5b04 with SMTP id 5b1f17b1804b1-458b6b316a2mr72524415e9.21.1754314478960; Mon, 04 Aug 2025 06:34:38 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ben Dooks , qemu-riscv@nongnu.org, qemu-block@nongnu.org, qemu-arm@nongnu.org, Guenter Roeck , Bin Meng Subject: [PATCH-for-10.1 v2 06/11] hw/sd/sdcard: Use complete SEND_OP_COND implementation in SPI mode Date: Mon, 4 Aug 2025 15:34:00 +0200 Message-ID: <20250804133406.17456-7-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250804133406.17456-1-philmd@linaro.org> References: <20250804133406.17456-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32b; envelope-from=philmd@linaro.org; helo=mail-wm1-x32b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1754319585986116600 While spi_cmd_SEND_OP_COND() is incomplete, sd_cmd_SEND_OP_COND() is, except it doesn't return the correct value in SPI mode. Correct and use, removing the need for spi_cmd_SEND_OP_COND(). Fixes: 775616c3ae8 ("Partial SD card SPI mode support") Signed-off-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Richard Henderson --- hw/sd/sd.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 01ec6d951c8..df2a272c6a2 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -1414,14 +1414,6 @@ static sd_rsp_type_t sd_cmd_GO_IDLE_STATE(SDState *s= d, SDRequest req) return sd_is_spi(sd) ? sd_r1 : sd_r0; } =20 -/* CMD1 */ -static sd_rsp_type_t spi_cmd_SEND_OP_COND(SDState *sd, SDRequest req) -{ - sd->state =3D sd_transfer_state; - - return sd_r1; -} - /* CMD2 */ static sd_rsp_type_t sd_cmd_ALL_SEND_CID(SDState *sd, SDRequest req) { @@ -2046,6 +2038,9 @@ static sd_rsp_type_t sd_cmd_SEND_OP_COND(SDState *sd,= SDRequest req) sd->state =3D sd_ready_state; } =20 + if (sd_is_spi(sd)) { + return sd_r1; + } return sd_r3; } =20 @@ -2590,7 +2585,7 @@ static const SDProto sd_proto_spi =3D { .name =3D "SPI", .cmd =3D { [0] =3D {0, sd_spi, "GO_IDLE_STATE", sd_cmd_GO_IDLE_STATE}, - [1] =3D {0, sd_spi, "SEND_OP_COND", spi_cmd_SEND_OP_COND}, + [1] =3D {0, sd_spi, "SEND_OP_COND", sd_cmd_SEND_OP_COND}, [5] =3D {9, sd_spi, "IO_SEND_OP_COND", sd_cmd_optional}, [6] =3D {10, sd_spi, "SWITCH_FUNCTION", sd_cmd_SWITCH_FUNCTION}, [8] =3D {0, sd_spi, "SEND_IF_COND", sd_cmd_SEND_IF_COND}, @@ -2626,7 +2621,7 @@ static const SDProto sd_proto_spi =3D { [13] =3D {8, sd_spi, "SD_STATUS", sd_acmd_SD_STATUS}, [22] =3D {8, sd_spi, "SEND_NUM_WR_BLOCKS", sd_acmd_SEND_NUM_WR_BL= OCKS}, [23] =3D {8, sd_spi, "SET_WR_BLK_ERASE_COUNT", sd_acmd_SET_WR_BLK= _ERASE_COUNT}, - [41] =3D {8, sd_spi, "SEND_OP_COND", spi_cmd_SEND_OP_COND}, + [41] =3D {8, sd_spi, "SEND_OP_COND", sd_cmd_SEND_OP_COND}, [42] =3D {8, sd_spi, "SET_CLR_CARD_DETECT", sd_acmd_SET_CLR_CARD_= DETECT}, [51] =3D {8, sd_spi, "SEND_SCR", sd_acmd_SEND_SCR}, }, --=20 2.49.0 From nobody Sat Nov 15 07:39:25 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1754319799; cv=none; d=zohomail.com; s=zohoarc; b=CcnzMs8s5LBlnLFMoJnmK37ish1G+J7d6arvhcvVlIPfo+vHXtD/mY54veSDmDt5t1jNxd86Si6r2NkZBS6DPW0tw6oUcXrNp2PmcMr4GOdH+wRYwL6NjkiUTezplEsARbz/uQxLje6rbHHiIvc8yrRr1/vTznZzPzYueuGqaOA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754319799; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0WtdHwUd8/n4K5YgHaAzZsrPouzhCc7s7XT6kmarPt8=; b=Rf4gA5jYLiVG0dUImVgqNUUV8C/3hlUkfcPYIBh6GbFPxFqhkbQu0ZUkpZyDdXbHdR9vZgfQEZCI22pB85KjfbLEATYF4KgjGs6FUyYpXcdauvucL4+P16RhLVy06V+bcl3DEW+WRIG2uragM19AO4rMOkP5OXLPeWKqT4Bk7w8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175431979925045.76332141052842; Mon, 4 Aug 2025 08:03:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uiwgs-00028V-Sp; Mon, 04 Aug 2025 11:01:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uivKz-0000rM-Km for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:50 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uivKw-00008Q-N2 for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:49 -0400 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-3b782cca9a0so2470736f8f.1 for ; Mon, 04 Aug 2025 06:34:45 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b79c47ca5fsm15355970f8f.63.2025.08.04.06.34.42 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 04 Aug 2025 06:34:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754314484; x=1754919284; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0WtdHwUd8/n4K5YgHaAzZsrPouzhCc7s7XT6kmarPt8=; b=mfa2tYz90uVCw3a72qmD8y0oWIMnQPUwJKCT2SyTdF50nhESunjucdnnMaG0+EJf6W R+KNGGKy+IrBBNOdgpEsy0vNiTbKuFZ9F1bv9EqL3mtE+j1p2oxmE/oYaFIgHQFULzi7 ck+pW9rPDI8EHGMckhaXnwPnKJs2l1zzerdiu0Us+4hLeGt9UAMm66PCtftqRbyu7HAf DZRJ937LhSuJ7PcqhWOAQBrahwIz9KJgCqUC5YH+idcycvx2M7KPICeP+cGjUacQ1+3R y9nYpDLcSE2swMZaL6vcy4c4t6iygbD+n8nsdmk9qHeY0AbmdHf01/pU4x1Ndvf5jwvb rRVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754314484; x=1754919284; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0WtdHwUd8/n4K5YgHaAzZsrPouzhCc7s7XT6kmarPt8=; b=X5t7QdRuPcmIfGOMXxw4l5V4SKXbZZHS5PB72wxkt1SjgcIYhVkCFMExXjlONx7spr DJxEXc0JK9igC8Mo7cRZ5YMTHBOM7W0g4yrw/1xZ/P8E14zzPFHvjQwrEnlv73uam+GB 4TsYuH3aVMFWVO37w9kqHgQIW4fMOnh8XogOpA2bV99TWrlRmwXsc6t69Fk36T0aAAmF wsyOoaJ3M26pQaczxBKg1JX8Qo7Zjc/uzPQdnUPWxWQJd5HhJ+Neb1TkHOD6Yh/Q+4Aq 2enQO9nAQfc1ND2ikxOhex79O3oBVmwqpGK9JGfpdJV3LP23WgMJ9CTzDOpWyofL8Fi7 Achw== X-Forwarded-Encrypted: i=1; AJvYcCXCWVg8LQZpttI8Z2Hqs7f+GilQ/ioiruEiVc5OpAmh8/Y9/E1ZrpaenS0EDm0FY/VA7X6DRG6Vnm2s@nongnu.org X-Gm-Message-State: AOJu0Yz7cIWg1zf+GJlOenVrJvhYLVCLGbku5wlAYHjEX02nHAhuoC76 XDzBaiWIt9cl55/oXuuPAwlP2bWLVWQO8Esra6dcpGwEK8mnEeiXTHi+BB34vwSlBOA= X-Gm-Gg: ASbGnctR5L5dx5nxDauz14dNN8sL40FZX9ZTMvhDQoT/in3CpGLKibPyuo6AkAU80ax OgasvCs6dEBQu3uRLavjI+tdIEIoyOnUFt34ZvAAsc5QlBhc3sb6jWfo0DiUX6jFR9ajiUskJzY KIs6Tkh1Mm5vhIavUUiyWrY9GaLPxGfpjWcIr22sYL9g3HE8DBp5uQE6OsNSjsPiojoUjKEBgV7 LLgHZzUgOVL6Cptg+aRWhdRrT5oqrYjJnsRkdaJDXzIbYPYkcXxGMOHu5yJ+/WFl0v7t11EVIuI zqi93s99SmkQm6lymY2rjhl727agG0NBR5asyVcY/KnQdRKoebpDfZ28E85oYMLtFrSAI1QLiJP UCRuEgAh4R8Ju0Bh2iG7iQgHoXvAqIJvuPZFhbebaN/uppLu18pyJWCNi0uvPAS1pkv69Og+Bgs 9jrAXzBmw= X-Google-Smtp-Source: AGHT+IE7qGoOMREcolZT+b5z8oOJEXZ+ULPFeJUzvhUlbvrwHIlImWuNOVp/7/tR+H+SHpXvM4Bs1w== X-Received: by 2002:a05:6000:2902:b0:3b7:895c:1562 with SMTP id ffacd0b85a97d-3b8d94649f4mr8060629f8f.11.1754314483968; Mon, 04 Aug 2025 06:34:43 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ben Dooks , qemu-riscv@nongnu.org, qemu-block@nongnu.org, qemu-arm@nongnu.org, Guenter Roeck , Bin Meng Subject: [PATCH-for-10.1 v2 07/11] hw/sd/sdcard: Allow using SWITCH_FUNCTION in more SPI states Date: Mon, 4 Aug 2025 15:34:01 +0200 Message-ID: <20250804133406.17456-8-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250804133406.17456-1-philmd@linaro.org> References: <20250804133406.17456-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::431; envelope-from=philmd@linaro.org; helo=mail-wr1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1754319800682116600 In SPI mode, SWITCH_FUNCTION is valid in all mode (except the IDLE one). Fixes: 775616c3ae8 ("Partial SD card SPI mode support") Signed-off-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Richard Henderson --- hw/sd/sd.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index df2a272c6a2..a9efa158594 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -1488,8 +1488,14 @@ static sd_rsp_type_t sd_cmd_SWITCH_FUNCTION(SDState = *sd, SDRequest req) if (sd->mode !=3D sd_data_transfer_mode) { return sd_invalid_mode_for_cmd(sd, req); } - if (sd->state !=3D sd_transfer_state) { - return sd_invalid_state_for_cmd(sd, req); + if (sd_is_spi(sd)) { + if (sd->state =3D=3D sd_idle_state) { + return sd_invalid_state_for_cmd(sd, req); + } + } else { + if (sd->state !=3D sd_transfer_state) { + return sd_invalid_state_for_cmd(sd, req); + } } =20 sd_function_switch(sd, req.arg); --=20 2.49.0 From nobody Sat Nov 15 07:39:25 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1754319807; cv=none; d=zohomail.com; s=zohoarc; b=NxEU/kUcQOSFsQyE1WuVQizDX5RmZYt7ap6vbGwZhkQCjCGW6whVPGja+NRQGBYSAVHPIHomVcf5ikURVc0bBO4UTXi+E42FYZZdM0AkqNQK4Zem1MXKX1f986CTlV8QyyMdPtk+tjzjHhEyM4f1hzFR2K8tfyL0OeH6BrsW3mI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754319807; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=C+eXSqcToyjbRu8c3pGsVVTbIh0f2MkxTWiqZgdInT8=; b=MtC10M0slKOhXD+TX4DpXMgTOTVf4r0II4ntNNuY6w++Wj8avYbupX+wfDxCkxgUtRURNueH2VPZjtCddGsWfV0UkojsGQZfbtZWfBbXTBYUEC24TWAfuiAaVy2EGiqxxDzVr82xjGNqH37+gxLdzBumLUGqUGfnQcqgqTVcCq0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1754319807677703.8555402351958; Mon, 4 Aug 2025 08:03:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uiwek-0004OX-Ak; Mon, 04 Aug 2025 10:59:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uivL2-0000zm-5Y for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:52 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uivL0-0000A2-BR for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:51 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-458baf449cbso19579335e9.0 for ; Mon, 04 Aug 2025 06:34:49 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b8e054036bsm5772143f8f.31.2025.08.04.06.34.47 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 04 Aug 2025 06:34:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754314489; x=1754919289; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=C+eXSqcToyjbRu8c3pGsVVTbIh0f2MkxTWiqZgdInT8=; b=EDTGv0n0F3U85c3ay5fIGJvUO8g067VwJYSV/+kIqz+2JMUzFwqr/LOBKeAAolV5ZX 0Xo47+/VSlsnhcXEFPU34hfy4I37OPJgKLdXEXH5+0chUCPjGTp/hLf9wk/RsPsFF4D1 WV18/oB9TPUSbGkwoTIGb4halTmEs3v4Z7BC8VWzaRZ/4SyVklgx3e18x9VVkFv1pras vR6c/ug62whyfVgfgR+enTdXF1+Z8qprMSLeWastxlvZw+zixSXhyv6+Pl09fQmkcBY4 JHobm08fQDFF5r8/Dx3lHXgmPkiF7gUqQ/jTvmMS2DSqHSYZLC8KuhOpPX9MBVS0oAWi J2Eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754314489; x=1754919289; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=C+eXSqcToyjbRu8c3pGsVVTbIh0f2MkxTWiqZgdInT8=; b=LsthKRxmZoo8B7xAOhlxOzwR5K7QbFKAE4SfgWuJ2Usw3UawN73FKY/cphz3Kn1WBv Hz32crUjJOOnaX0Kxgqlobyf+oue1IrmDZJRmJNmnZUv7K9vY6AhbBy5TDYf118Z5rJj wqIagRNpKk9xnUpHie8rknLPetPoLcV3yA04bRHLl+S43XYdiXIWMq0KowZz/i47WhA+ fnvMqjkaD+fqOw+ZfUik5shMAuTOfQdk5qPq/x37S5aTTkIAinRCkpHRwE3L7bkVvjOW QKk3HgkiOGzKZrNjn9X1CnnFa/sTVMeBOMpU7XedX+hd6JXqrLXQo4ouGgfDLuBZlbfV ryhg== X-Forwarded-Encrypted: i=1; AJvYcCUy0kD0w+0whgP+N9e4UD8V9+fv3f/x7GDJBeGYZoGZ05hagvHBz1kf7iPozrkTowAkMZtahrGFJU7R@nongnu.org X-Gm-Message-State: AOJu0Yzus/deVSzsvbh3lvxBYj5QYlL2rJaLIWZebvrtBDS58aOefvmz zmay75En9ehpZTP7S0VoDuvdyKm36MTS7Jdsb4ergqXt8aSdA3uUJfo3I6hS9oSrJQ0M8jXK2vO FFYop X-Gm-Gg: ASbGncvelzDBrDrmfa6v+aYFzNfPVljL/pbrOvcz1MJroi8ji4xpRQU7lC9Hils3Rf6 lF/ny6ZoNtrop4w/zK609rW1XuJpvFt7Lkn2wlvdxplbtl1ZGGaoNYtTPqoZqhjWnsL9UiQnoeB t5yduI+v1uUIHYNM9/l7FJwRZmIGlrNGZEPqV7rwQrh2Ybsz/aiQIFtAcHtDYK5ctfVTwDboP2Q 65oUJA83k3JvXoRKL/SkKhDL+dygIBNKGeqgexYZMKZ8mljmSkSOtZSiySdzuYP6FTVZj6QgvUd HHhmg/GvOZpgpUBrSOZ5LkS9PdIjcT8n3NbEHrzY56cYU0BQvXF19S+VEIrZxDvR/EUIJTHfQAw X2XCyySA7EqAKe+cUgQfGh2j1eOcIXCxClPGi9XE3tNyVps4QBWh8+anLFdvnBMGHUlVJ7bwoiM b7AJvWMHI= X-Google-Smtp-Source: AGHT+IHWhJVh3YosT/BNnjaLA2PiepJGIr8E+/mGbbS+2KCgnbEAkEQTJFYZs0qZFPN45qeiSqCk6A== X-Received: by 2002:a05:600c:8b37:b0:456:25e7:bed with SMTP id 5b1f17b1804b1-458b69dec87mr82266395e9.14.1754314488794; Mon, 04 Aug 2025 06:34:48 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ben Dooks , qemu-riscv@nongnu.org, qemu-block@nongnu.org, qemu-arm@nongnu.org, Guenter Roeck , Bin Meng Subject: [PATCH-for-10.1 v2 08/11] hw/sd/sdcard: Factor spi_cmd_SEND_CxD() out Date: Mon, 4 Aug 2025 15:34:02 +0200 Message-ID: <20250804133406.17456-9-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250804133406.17456-1-philmd@linaro.org> References: <20250804133406.17456-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::334; envelope-from=philmd@linaro.org; helo=mail-wm1-x334.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1754319809610124100 spi_cmd_SEND_CSD() and spi_cmd_SEND_CID() are very similar. Factor the common code as spi_cmd_SEND_CxD(). Signed-off-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Richard Henderson --- hw/sd/sd.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index a9efa158594..ee81dc09991 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -1588,14 +1588,19 @@ static sd_rsp_type_t emmc_cmd_SEND_EXT_CSD(SDState = *sd, SDRequest req) sd->ext_csd, sizeof(sd->ext_csd)); } =20 -/* CMD9 */ -static sd_rsp_type_t spi_cmd_SEND_CSD(SDState *sd, SDRequest req) +static sd_rsp_type_t spi_cmd_SEND_CxD(SDState *sd, SDRequest req, + const void *data, size_t size) { if (sd->state !=3D sd_standby_state) { return sd_invalid_state_for_cmd(sd, req); } - return sd_cmd_to_sendingdata(sd, req, sd_req_get_address(sd, req), - sd->csd, 16); + return sd_cmd_to_sendingdata(sd, req, 0, data, size); +} + +/* CMD9 */ +static sd_rsp_type_t spi_cmd_SEND_CSD(SDState *sd, SDRequest req) +{ + return spi_cmd_SEND_CxD(sd, req, sd->csd, sizeof(sd->csd)); } =20 static sd_rsp_type_t sd_cmd_SEND_CSD(SDState *sd, SDRequest req) @@ -1610,11 +1615,7 @@ static sd_rsp_type_t sd_cmd_SEND_CSD(SDState *sd, SD= Request req) /* CMD10 */ static sd_rsp_type_t spi_cmd_SEND_CID(SDState *sd, SDRequest req) { - if (sd->state !=3D sd_standby_state) { - return sd_invalid_state_for_cmd(sd, req); - } - return sd_cmd_to_sendingdata(sd, req, sd_req_get_address(sd, req), - sd->cid, 16); + return spi_cmd_SEND_CxD(sd, req, sd->cid, sizeof(sd->cid)); } =20 static sd_rsp_type_t sd_cmd_SEND_CID(SDState *sd, SDRequest req) --=20 2.49.0 From nobody Sat Nov 15 07:39:25 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1754319968; cv=none; d=zohomail.com; s=zohoarc; b=dqCtjiV0eLg5bZA6SLX+FB2obGE4jq+iJCqam31d4w1hUs4mUNuURdxLcGGave9W7WUaHmiChe4UBnXsU5jU9MztvLmSxht7rAsBETpagcvhWz7vRfIM20xJcslxBH/ATS+hW2C47bGM2uZ1uKS+zn+60H6Z/m6fOC5hBsEMn/E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754319968; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pZpl0YFbqRebR1Q333Nb/UlL0rGZ2P62yuzFRdhk9bs=; b=Oy9y/srbOndAvYPyRPQvrtYINc3hs7VPhEHrayr1AT48G9Gk/+zmmfJ5zLiQmfjWt+o7yfSgZBod/WWe3K/LN7zOR1Bhv2H6Tz742DiTqf2qayxqCrcJ/pGO7zY0w0ImCtQWuEeyhu9ypVZVtb+s8wtYTVT3sfU8wtO3lkCDiBE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1754319968905932.8545002152765; Mon, 4 Aug 2025 08:06:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uiwiS-00048W-Tl; Mon, 04 Aug 2025 11:03:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uivL8-00016D-7v for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:35:01 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uivL5-0000BX-Ly for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:34:57 -0400 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-4563cfac2d2so31006395e9.3 for ; Mon, 04 Aug 2025 06:34:54 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b79c3bf956sm15883300f8f.24.2025.08.04.06.34.52 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 04 Aug 2025 06:34:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754314494; x=1754919294; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pZpl0YFbqRebR1Q333Nb/UlL0rGZ2P62yuzFRdhk9bs=; b=QCHLhQtEaOoAvhuajT6ZkKRv0tHORT7jF+0faFdyTEVnR2aF1dBiloPFTAVvEabosG sZ28s+eAM+kfbBz9lZs1HL/oepv/4LhAStR4hWgqOm2vD9xrKKd7CfUs7ezQ0hxbgH8Y o7dil+ZcDRMKJUFp5lCLk0fQR3HeddE4AikyubTisf7VCqmUDEsPt625Z2leJ6yRsTy+ kvNDB1PAf9yO/erQ3CjeZNqSdShINHog8zd1i6KlkuwyjvJNoCks0/lq9ErcFBEnzc7O mmo+dxriTnbPDCX7kfmpjwj+oBMMqT08yozMmQmNBoChqRPGzwjFQnU/rG9qAQLKsy/I bTRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754314494; x=1754919294; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pZpl0YFbqRebR1Q333Nb/UlL0rGZ2P62yuzFRdhk9bs=; b=LiPhxCv6BKz2BaD02lqC9hxHW7mWQJOzFRwBPyjHv8EUv025HEmxbk6F/ypbFRvjsb OVJODz+uqPwUNmVL8ZqeGqU3i/jfKlpRwqgo4pZYNNV8NjQvVNiQkVXPux+SPKDq4rK0 bjkDH2QUmGDvfSDzKy87VNmGW2i6x3kQuq6VP4CQhI0M5djDxprD8GzDt3HzWhWdCL8r 5FPqEyh/lX/KkWsxsAipuWDqzst37OsXCs8paUS9D9T4Aro5Icx/EPT0MbVaNKCuW/3v Ife0RBmG72lfUmzSIrS+m/IvbydFzap2xPSs45nxSeW9WrMiapXUC8QkEnv6oR3ggk/P Tugw== X-Forwarded-Encrypted: i=1; AJvYcCXkySxh6tP03YeP49dbR7I0h/6Z7FH+OgRsUgE68jFZmFw6XhF7OZVgMHphKwEOsI7X9lmi+InnRErH@nongnu.org X-Gm-Message-State: AOJu0YzLuguSdX7YBeCoNyOTipwW08Z2LRvXqjyL3Fi4FvtktH63u81N LkOfGOFwIE6LxND98UZxK1dCp0KwQTKLG/TeOTIOVYCsjAZm9Pf3rMdG+9NAfOhbFf8= X-Gm-Gg: ASbGnctdNNiDfWknkQYHZNt6Mi+BqBpq2DmhsXRDKhGwlL2Wjpd3CFoFUmDRVVJ2fC6 f7Qss77bwtLMj8QsHV913hGxFVVbP4TYti5dwl3rfcGfhqvIQDDS59BeHfZMS0Fh41fnBet5eSz NJa2KrkFZmktkQ93zKbfaftfuZzuhwP7pjZbRM2zZF5kNYahun8n6Kmji00eDxeJOGizXfj18hP ExZ6FsIDPlvBslmmCAe9B6pXPcO4tMM/16c7Svk7D7xKcirEBaCX0NlXvtohvhKm50QrwWkLnBc OYL/dJZzEAvwzqBcKhL8mLsSZfZOBMplsh+qusawyYn6o1lmfK/9y7zuP9Oq7BiFW0eDXmUXgxj YHCCYw9SDhgzX/DY1C35MZsYUuOdHV0V2HRKaj8H/5oa8voiwYgYu0DU3wauyYxNpajgDR6OI X-Google-Smtp-Source: AGHT+IFv7o0lQT6SIORbgD9ltcwVY0pnayL3M7/0hwkveU54IP/k7OHeWCpQOq/yGxHXhGn1M1socw== X-Received: by 2002:a05:600c:4b2a:b0:458:bf0a:6061 with SMTP id 5b1f17b1804b1-458bf0a6326mr35663155e9.24.1754314493543; Mon, 04 Aug 2025 06:34:53 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ben Dooks , qemu-riscv@nongnu.org, qemu-block@nongnu.org, qemu-arm@nongnu.org, Guenter Roeck , Bin Meng Subject: [PATCH-for-10.1 v2 09/11] hw/sd/sdcard: Disable checking STBY mode in SPI SEND_CSD/CID Date: Mon, 4 Aug 2025 15:34:03 +0200 Message-ID: <20250804133406.17456-10-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250804133406.17456-1-philmd@linaro.org> References: <20250804133406.17456-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32a; envelope-from=philmd@linaro.org; helo=mail-wm1-x32a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1754319970696116600 The card should be in STANDBY mode to process SEND_CSD or SEND_CID, but is still in IDLE mode. Unfortunately I don't have enough time to keep debugging this issue, so disable the check for the time being and the next release, as it blocks Linux. I'll keep looking. Reported-by: Guenter Roeck Reported-by: Ben Dooks Signed-off-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Richard Henderson --- hw/sd/sd.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index ee81dc09991..22f30997713 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -1591,9 +1591,20 @@ static sd_rsp_type_t emmc_cmd_SEND_EXT_CSD(SDState *= sd, SDRequest req) static sd_rsp_type_t spi_cmd_SEND_CxD(SDState *sd, SDRequest req, const void *data, size_t size) { + /* + * XXX as of v10.1.0-rc1 command is reached in sd_idle_state, + * so disable this check. if (sd->state !=3D sd_standby_state) { return sd_invalid_state_for_cmd(sd, req); } + */ + + /* + * Since SPI returns CSD and CID on the DAT lines, + * switch to sd_transfer_state. + */ + sd->state =3D sd_transfer_state; + return sd_cmd_to_sendingdata(sd, req, 0, data, size); } =20 --=20 2.49.0 From nobody Sat Nov 15 07:39:25 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1754320022; cv=none; d=zohomail.com; s=zohoarc; b=PYwMhZHmVYKJFu6Qc3eE3IUStc2lmT+qKafzzdcB2PIIM2/SotnId39g9qiBPbwIcigJlhE30lCmWdDJAki2RoKXroeDcs5T7MGeHnqT8VB4T3oqlx1nkwVDRO84fquPWYbMF+7qSd9xWBRl6xc+XdOCjIN1DZFRL4BUDlmVuRs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754320022; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=MJW4OSIhB86Z3E7sE7FAciHI/FDvbdGcS4/yRYjL4Pw=; b=fq0PQzwPrPAomkl3rLZD/qNv4IhSpNRlq18oQkr/g5scqwn9rfNbTkJXjtUsKK9/Pr7Hj6EZY63qsJkKkN5sWSURQWgMv0b2YbO//d01G0ECdzuvk26NjTrbN6yY0ibJYYsrrXezK4QSdVkDwWjRkF7M4Cbz4+r/Z/1O1itdUXQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1754320022667116.32277257521594; Mon, 4 Aug 2025 08:07:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uiwen-0004dx-KV; Mon, 04 Aug 2025 10:59:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uivLD-0001Au-9Y for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:35:10 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uivLA-0000DA-3D for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:35:01 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-458a84e2917so37079375e9.1 for ; Mon, 04 Aug 2025 06:34:59 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-458af917d20sm78852095e9.2.2025.08.04.06.34.57 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 04 Aug 2025 06:34:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754314499; x=1754919299; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MJW4OSIhB86Z3E7sE7FAciHI/FDvbdGcS4/yRYjL4Pw=; b=WgBGisQ2ujYiONe9MgWwfBz63jvd38kq1mINO/BJkV1mVkvX5+KcfBAczMHmiHg7Q9 NuAIrDvCDVm51GkYXkHsf4NsSTFZZa6qKQOBas6LwAW7fnFfMBcMdD5GIkLTecXZbiT+ /iz89xOIkTmFbsNku8lnLCAuxb9xhSmvyeW1AoryWXfJQHX3nU5cbpMbaqo5YhJmg+B2 Ouc7jwcn4J3JvYufcJsFUuHtt4xadVQtU64fOuhmHdPKA2KT4RR96X79dcN2qVBXIIXy L3E3/dtbQs2FTuTgs7ZWOgAoMks2CUZ/jEOXRLLH8kchhQK+GXQWny4gnzK4Njs/V1Ow oztg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754314499; x=1754919299; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MJW4OSIhB86Z3E7sE7FAciHI/FDvbdGcS4/yRYjL4Pw=; b=aXJOAOBH9zoqS1YDozCaqfdeCQ2MwekT1Eynfgi8W4O8Yqnn5exG4MDgHqoWTo+YCn bRaOSHwWAFgil95gegvv1R3QoEEClmejSeZcwCd1wNIpVqjtMGUlKI0UfwV/n5gs+y3O P8yuHJpB+DFYmFgs2CbXEpvKDiELITAeEoo93a4RmlNWH16na46lpWL57L6uia4h7okV 41ZC2GWebuRQosViE5eVMt9TrmREAPRkxc/X1ua49y7JVEW3u4jaMcHxnlzVbi53c0cP x9+7EH1CgYzXFJoB3Pod48Aaa2x1BUodYGFIFghvE57HxgXdZgoH5tP136DTXohwd73u E8oQ== X-Forwarded-Encrypted: i=1; AJvYcCXi70IhrE8+MQh4ZtFhS5PEnXnOeovyGq8OiKJ5ttugzgg7nNeOM14hZe9uSJ7LBtGqqD+noe0jO8qO@nongnu.org X-Gm-Message-State: AOJu0Yz8heiqb+nGnutUK2VEeLzBEybEU1tfZyz5Wc+qqNOIV6xsldV0 aDzlgn00tPYtmaBu0MJStiCf5ScdFwpJei5PGVZFGkPGrCCq2H62oaA5DzGQ9mUD2dQ= X-Gm-Gg: ASbGncu6feJqoaB7bArfzeKCrg0NOa5dXUDegFCQEN7K+d4THlptN7i7VS/d4YAsMcy EF0Sf+bmckKU5gbhRHIaO+HSkyto6meMcEr45hhxp6XoXPTwUbFWkYzAZzeHKJYVtnJlUGQSjgK KZTWbnwb05r1FWlfk3UmzH2G8LL3bkirC8AuEUKNcMBzKHc9IiO1CEATsBPz/rBS4/p9oGp6ZDJ meQhU8CdGuZSYk4HOwOhQjaPA9RB56DChBANzi975RPlS3nqsNxQCr4B8t1l8NdVmU37si4qoNy 1pCIRCxMExpz2BRpvYozcjrD+qb+rbGFlwOr+PM9bju6i5xAuTaK6gSfmRkVPcHZHl6GS3xrRWZ EU8qUbclZigVs2M0ypB2eo2e82OTcMJcADZkdEUgzZqaVhrNwIVnmcS27oPl1GZkZfyLcyp3S X-Google-Smtp-Source: AGHT+IHKJUBmR307X/q9ya205/rCJmw7SH8sTjBp6J99IXlayrKpnRflC5pX8VPm6dw5CzpSprPYhA== X-Received: by 2002:a05:600c:5248:b0:459:d4b5:623a with SMTP id 5b1f17b1804b1-459d4b56388mr42037755e9.9.1754314498528; Mon, 04 Aug 2025 06:34:58 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ben Dooks , qemu-riscv@nongnu.org, qemu-block@nongnu.org, qemu-arm@nongnu.org, Guenter Roeck , Bin Meng Subject: [PATCH-for-10.1 v2 10/11] hw/sd/sdcard: Remove SDState::mode field Date: Mon, 4 Aug 2025 15:34:04 +0200 Message-ID: <20250804133406.17456-11-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250804133406.17456-1-philmd@linaro.org> References: <20250804133406.17456-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::334; envelope-from=philmd@linaro.org; helo=mail-wm1-x334.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1754320024362124100 SD card mode is a superset of its state (SDState::state), no need to migrate it. Use sd_mode() to get the SDCardModes from the SDCardStates. Fixes: 50a5be6c3d5 ("hw/sd.c: add SD card save/load support") Signed-off-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Richard Henderson --- hw/sd/sd.c | 35 +++++++++++++++++------------------ hw/sd/trace-events | 4 ++-- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 22f30997713..8c290595f01 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -147,7 +147,6 @@ struct SDState { =20 /* Runtime changeables */ =20 - uint32_t mode; /* current card mode, one of SDCardModes */ int32_t state; /* current card state, one of SDCardStates */ uint32_t vhs; bool wp_switch; @@ -315,27 +314,24 @@ static void sd_set_voltage(SDState *sd, uint16_t mill= ivolts) } } =20 -static void sd_set_mode(SDState *sd) +static enum SDCardModes sd_mode(SDState *sd) { switch (sd->state) { case sd_inactive_state: - sd->mode =3D sd_inactive; - break; - + return sd_inactive; case sd_idle_state: case sd_ready_state: case sd_identification_state: - sd->mode =3D sd_card_identification_mode; - break; - + return sd_card_identification_mode; case sd_standby_state: case sd_transfer_state: case sd_sendingdata_state: case sd_receivingdata_state: case sd_programming_state: case sd_disconnect_state: - sd->mode =3D sd_data_transfer_mode; - break; + return sd_data_transfer_mode; + default: + g_assert_not_reached(); } } =20 @@ -1025,7 +1021,7 @@ static const VMStateDescription sd_vmstate =3D { .minimum_version_id =3D 2, .pre_load =3D sd_vmstate_pre_load, .fields =3D (const VMStateField[]) { - VMSTATE_UINT32(mode, SDState), + VMSTATE_UNUSED(4), VMSTATE_INT32(state, SDState), VMSTATE_UINT8_ARRAY(cid, SDState, 16), VMSTATE_UINT8_ARRAY(csd, SDState, 16), @@ -1325,7 +1321,7 @@ static sd_rsp_type_t sd_invalid_state_for_cmd(SDState= *sd, SDRequest req) static sd_rsp_type_t sd_invalid_mode_for_cmd(SDState *sd, SDRequest req) { qemu_log_mask(LOG_GUEST_ERROR, "%s: CMD%i in a wrong mode: %s (spec %s= )\n", - sd->proto->name, req.cmd, sd_mode_name(sd->mode), + sd->proto->name, req.cmd, sd_mode_name(sd_mode(sd)), sd_version_str(sd->spec_version)); =20 return sd_illegal; @@ -1485,7 +1481,7 @@ static sd_rsp_type_t emmc_cmd_sleep_awake(SDState *sd= , SDRequest req) /* CMD6 */ static sd_rsp_type_t sd_cmd_SWITCH_FUNCTION(SDState *sd, SDRequest req) { - if (sd->mode !=3D sd_data_transfer_mode) { + if (sd_mode(sd) !=3D sd_data_transfer_mode) { return sd_invalid_mode_for_cmd(sd, req); } if (sd_is_spi(sd)) { @@ -1658,7 +1654,7 @@ static sd_rsp_type_t sd_cmd_STOP_TRANSMISSION(SDState= *sd, SDRequest req) /* CMD13 */ static sd_rsp_type_t sd_cmd_SEND_STATUS(SDState *sd, SDRequest req) { - if (sd->mode !=3D sd_data_transfer_mode) { + if (sd_mode(sd) !=3D sd_data_transfer_mode) { return sd_invalid_mode_for_cmd(sd, req); } =20 @@ -1684,7 +1680,7 @@ static sd_rsp_type_t sd_cmd_SEND_STATUS(SDState *sd, = SDRequest req) /* CMD15 */ static sd_rsp_type_t sd_cmd_GO_INACTIVE_STATE(SDState *sd, SDRequest req) { - if (sd->mode !=3D sd_data_transfer_mode) { + if (sd_mode(sd) !=3D sd_data_transfer_mode) { return sd_invalid_mode_for_cmd(sd, req); } switch (sd->state) { @@ -2090,7 +2086,9 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) if (req.cmd !=3D 55 || sd->expecting_acmd) { trace_sdcard_normal_command(sd->proto->name, sd->last_cmd_name, req.cmd, - req.arg, sd_state_name(sd->state)); + req.arg, + sd_mode_name(sd_mode(sd)), + sd_state_name(sd->state)); } =20 /* Not interpreting this as an app command */ @@ -2176,7 +2174,9 @@ static sd_rsp_type_t sd_app_command(SDState *sd, { sd->last_cmd_name =3D sd_acmd_name(sd, req.cmd); trace_sdcard_app_command(sd->proto->name, sd->last_cmd_name, - req.cmd, req.arg, sd_state_name(sd->state)); + req.cmd, req.arg, + sd_mode_name(sd_mode(sd)), + sd_state_name(sd->state)); sd->card_status |=3D APP_CMD; =20 if (sd->proto->acmd[req.cmd].handler) { @@ -2276,7 +2276,6 @@ static size_t sd_do_command(SDState *sd, SDRequest *r= eq, } =20 last_state =3D sd->state; - sd_set_mode(sd); =20 if (sd->expecting_acmd) { sd->expecting_acmd =3D false; diff --git a/hw/sd/trace-events b/hw/sd/trace-events index db0644256d9..8d49840917e 100644 --- a/hw/sd/trace-events +++ b/hw/sd/trace-events @@ -37,8 +37,8 @@ sdhci_write_dataport(uint16_t data_count) "write buffer f= illed with %u bytes of sdhci_capareg(const char *desc, uint16_t val) "%s: %u" =20 # sd.c -sdcard_normal_command(const char *proto, const char *cmd_desc, uint8_t cmd= , uint32_t arg, const char *state) "%s %20s/ CMD%02d arg 0x%08x (state %s)" -sdcard_app_command(const char *proto, const char *acmd_desc, uint8_t acmd,= uint32_t arg, const char *state) "%s %23s/ACMD%02d arg 0x%08x (state %s)" +sdcard_normal_command(const char *proto, const char *cmd_desc, uint8_t cmd= , uint32_t arg, const char *mode, const char *state) "%s %20s/ CMD%02d arg = 0x%08x (mode %s, state %s)" +sdcard_app_command(const char *proto, const char *acmd_desc, uint8_t acmd,= uint32_t arg, const char *mode, const char *state) "%s %23s/ACMD%02d arg 0= x%08x (mode %s, state %s)" sdcard_response(const char *rspdesc, int rsplen) "%s (sz:%d)" sdcard_powerup(void) "" sdcard_inquiry_cmd41(void) "" --=20 2.49.0 From nobody Sat Nov 15 07:39:25 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1754320214; cv=none; d=zohomail.com; s=zohoarc; b=TJoR9CjwnM8xWtm7ZgZ+fwbRzclWNH6WxnodTV+zOovaddvqjXSIm304kLe0d8tZjJB9xwlsMDjlcQrZtVHQcZWWqUoVH4mllflr/UXDR2RDQSDCDf9Tm2Vwilh9eXqSRDtpLgQ8YFwnZleOLIAzPDV/vcuICo9RSMC38zbZtDQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754320214; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=AmAgMWToY4+su5olx/EK5AlpIDPmCEY+1rTl/kaiArI=; b=DS7EabEVxyuEK1YB/NxgMN8tvVslY3W/llwas4oXNE4c75Ocq0jllaZA9gO/xDFN06hA/TxsvdD/F2oMZV2RuLweEHHTvivIfY1QG9nAnWeMkwE1eft4kshxXKtt4bhcizFtFFA80iWwvT0YCi0scTpeaHzpDf6Y/vPNfVlIpUw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175432021493128.97871212292125; Mon, 4 Aug 2025 08:10:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uiwoz-0002ep-Uh; Mon, 04 Aug 2025 11:09:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uivLN-0001HO-4b for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:35:15 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uivLG-0000K9-UJ for qemu-devel@nongnu.org; Mon, 04 Aug 2025 09:35:11 -0400 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-3b78310b296so2666711f8f.2 for ; Mon, 04 Aug 2025 06:35:05 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4589edfcdd0sm167480675e9.10.2025.08.04.06.35.02 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 04 Aug 2025 06:35:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754314504; x=1754919304; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AmAgMWToY4+su5olx/EK5AlpIDPmCEY+1rTl/kaiArI=; b=cZzTcnC3sMbU2sziZI6uRFBCvesf4CoCwSnKDOo7l/fJqDyu2rGClx+4YH6ex4pZs1 sXMenYEAwfQrL2LvS2ozEc7l7pmRpOdkVJvBVOjR4M/kaiwN0eISGEo7cqJ2oUS5SXpx QU8GCqqX/pteNrEtswAnOFO/EsTR0SNxUmuu2QyhXOTx8GIscXmijn/QvJ7wbFMIE+62 HdjYeMOA3G0E/wy5z9PR1C6iKbqdpjxVTQQ5GpTfq+2RIRL5ZGhz8i8a+3yDFAnrriIi wJL6Ee4tZ/4lfn/na36PejloQ8XUfYeU9Kcdtt1HgDRceMiLhYTRNbC5dxt2T9cCmDJe sLMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754314504; x=1754919304; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AmAgMWToY4+su5olx/EK5AlpIDPmCEY+1rTl/kaiArI=; b=vU6Jmehcu+g/HKA0In5HbaAJMZiTivkVGPO1O6q9s7pf/dUrF+Xq5s6PMLnfswkz5a s822yHViJefKWHDlCiKT87L1qwvLa3Oc5vxB3xq9RoK6kd93rGIp/mQ1CRaUjbadH044 9ODh2+3vtort2xBCBGqQ8bHGtHs6R9qCeTbiaGXzDxj0fOZCPFyWtyg7eg8e/crywxRt vT6iTUabRBPi+RvXMiPgTRlWq9su2o5vZWMZwnQrbIOmMUrGQLxMaoDiLKpZ4P+IBUyf IML8vkfaWj4pUCwngCh8X7WCsz4iaKu6aCRLZR8O3WuSvYx42O6qYgGy0pIKsRZwkPvE a8Aw== X-Forwarded-Encrypted: i=1; AJvYcCUvmmDlXwElr7IH0Xy8fq1vFL0DEV3royb+DTXFKFIHeN/AK4/ZvGvTvlf7ya63jiQ1K15OTsMgugnb@nongnu.org X-Gm-Message-State: AOJu0YxK7bIykNMvCep5QmwDuFBAV5vsEPqIW44egVXqVWakwUfEK8o9 RQqGNLwWAoshTo0yN2KzPECyzhIUS1wanqV/l1KczRtbkxhnMQWcbibA5VY5QIJPc1Q= X-Gm-Gg: ASbGncuYsmp0Ynde69y9QtVYNnd9rzNs6X8AJu9wW2Km76UmtCvvLMs4nzKSeur1GFp WtAkj830pO+yimjBPbyjHm8QI8UneHdvWB0+wPL4fjQ3pKspTnwUDWipnKSC7ttzgfFzHH/TTDH pk9cYILt26kJqKPK0kPWcFvBx05W3VvmgRykDNhFSPgGQOuubgmtk8iENe6bxzCZsNrTSin/l7l xalDR5OY6da+On1SUzKoStaimlZepeMU8Vx0svlP6ZLH2cVgFCdO2XNJwZU+naCBzDyUWQOspkp EhvbnvQxOyJk9bSnujDcT9+/BAkfs9BtDHPlSwNgrzBds4eC/XqBA2E0r4DPWYz71g14E0DMfq3 k5t7kHivFrkiSr6fqITs4v07udP1/v60eENa5//xQXFcUwjQ1kIgSlHsp7BORzPERINd0qfYp X-Google-Smtp-Source: AGHT+IGxNG5Ow1nr5+sFQch0aLzlqqprX0lPY7GoGdyWTrgDl0zWy2hE3QfFq5v9SQuq2n7nGQJ+dw== X-Received: by 2002:a5d:5f87:0:b0:3b8:d360:3383 with SMTP id ffacd0b85a97d-3b8d94c9ff5mr7236289f8f.46.1754314503580; Mon, 04 Aug 2025 06:35:03 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ben Dooks , qemu-riscv@nongnu.org, qemu-block@nongnu.org, qemu-arm@nongnu.org, Guenter Roeck , Bin Meng , Alistair Francis , Palmer Dabbelt , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei Subject: [PATCH-for-10.1 v2 11/11] tests/functional: Test SD cards in SPI mode (using sifive_u machine) Date: Mon, 4 Aug 2025 15:34:05 +0200 Message-ID: <20250804133406.17456-12-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250804133406.17456-1-philmd@linaro.org> References: <20250804133406.17456-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::430; envelope-from=philmd@linaro.org; helo=mail-wr1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1754320217307124100 Add a test which uses the sifive_u machine to boot a Linux kernel from a SD card connected via a SPI interface. Inspired from the command provided in: - https://lore.kernel.org/qemu-devel/94b2c5bf-53d0-4c74-8264-f3021916f38c@r= oeck-us.net/ - https://lore.kernel.org/qemu-devel/840016d0-0d49-4ef4-8372-b62b3bcd0ac6@c= odethink.co.uk/ Inspired-by: Guenter Roeck Inspired-by: Ben Dooks Signed-off-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Richard Henderson --- MAINTAINERS | 1 + tests/functional/meson.build | 1 + tests/functional/test_riscv64_sifive_u.py | 51 +++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100755 tests/functional/test_riscv64_sifive_u.py diff --git a/MAINTAINERS b/MAINTAINERS index 28cea342718..a07086ed762 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1695,6 +1695,7 @@ S: Supported F: docs/system/riscv/sifive_u.rst F: hw/*/*sifive*.c F: include/hw/*/*sifive*.h +F: tests/functional/test_riscv64_sifive_u.py =20 AMD Microblaze-V Generic Board M: Sai Pavan Boddu diff --git a/tests/functional/meson.build b/tests/functional/meson.build index ecf965adc6c..311c6f18065 100644 --- a/tests/functional/meson.build +++ b/tests/functional/meson.build @@ -274,6 +274,7 @@ tests_riscv64_system_quick =3D [ ] =20 tests_riscv64_system_thorough =3D [ + 'riscv64_sifive_u', 'riscv64_tuxrun', ] =20 diff --git a/tests/functional/test_riscv64_sifive_u.py b/tests/functional/t= est_riscv64_sifive_u.py new file mode 100755 index 00000000000..dc4cb8a4a96 --- /dev/null +++ b/tests/functional/test_riscv64_sifive_u.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +# +# Functional test that boots a Linux kernel on a Sifive U machine +# and checks the console +# +# Copyright (c) Linaro Ltd. +# +# Author: +# Philippe Mathieu-Daud=C3=A9 +# +# SPDX-License-Identifier: GPL-2.0-or-later + +import os + +from qemu_test import Asset, LinuxKernelTest +from qemu_test import skipIfMissingCommands + + +class SifiveU(LinuxKernelTest): + + ASSET_KERNEL =3D Asset( + 'https://storage.tuxboot.com/buildroot/20241119/riscv64/Image', + '2bd8132a3bf21570290042324fff48c987f42f2a00c08de979f43f0662ebadba') + ASSET_ROOTFS =3D Asset( + ('https://github.com/groeck/linux-build-test/raw/' + '9819da19e6eef291686fdd7b029ea00e764dc62f/rootfs/riscv64/' + 'rootfs.ext2.gz'), + 'b6ed95610310b7956f9bf20c4c9c0c05fea647900df441da9dfe767d24e8b28b') + + def test_riscv64_sifive_u_mmc_spi(self): + self.set_machine('sifive_u') + kernel_path =3D self.ASSET_KERNEL.fetch() + rootfs_path =3D self.uncompress(self.ASSET_ROOTFS) + + self.vm.set_console() + kernel_command_line =3D (self.KERNEL_COMMON_COMMAND_LINE + + 'root=3D/dev/mmcblk0 rootwait ' + 'earlycon=3Dsbi console=3DttySIF0 ' + 'panic=3D-1 noreboot') + self.vm.add_args('-kernel', kernel_path, + '-drive', f'file=3D{rootfs_path},if=3Dsd,format= =3Draw', + '-append', kernel_command_line, + '-no-reboot') + self.vm.launch() + self.wait_for_console_pattern('Boot successful.') + + os.remove(rootfs_path) + + +if __name__ =3D=3D '__main__': + LinuxKernelTest.main() --=20 2.49.0