From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 44FAC2F8EBB for ; Mon, 18 May 2026 22:45:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779144331; cv=none; b=qn+K1lwqFPdbuOr9mirfUsvSdd5xOE4zXGukDG2rXahMVrYrOm2Tg1ccNXZb6lF2HX2amacIuNVdv61Uj5IG+uM5CUbmnWpo507mVrU0L2Qun44tJUcT6g7Sx3wodFWc+hZqO4UEgXdRuRIldpl3NblNpSVDd/LQtJOO+6Jc624= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779144331; c=relaxed/simple; bh=pifblWiQ1TLHefG1Q0nop1imYuvqSMxnWw1DlyKUUPw=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=dJqeqa8ogNu3ECXQBNBMARiPGkXXBiJ2H+stz6Y6LEWFPeVBta+hUVWdB16IVTsy4mCeyvmGqwjHeBkvghCwjcC0PPOLsJDT6zFNQXBMgCVzDdGxoFcA60fQ2tAky8kEGxyJh3BkR8Qf6/vd/uDFICHjAL2vl9uGAhWZArknc3c= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Z7L7sLFt; arc=none smtp.client-ip=209.85.160.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Z7L7sLFt" Received: by mail-qt1-f170.google.com with SMTP id d75a77b69052e-50d6ab4476eso33647921cf.2 for ; Mon, 18 May 2026 15:45:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779144329; x=1779749129; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=YY12qmAw/YvXItWxKFuE6zrhQE3wG3PQZuik94qWjms=; b=Z7L7sLFtp5kF702DQsJawmyR6vr9g2yOhaju5S+IQepqIjECreeKoPdMo6AVSK+XH/ CfZoneznLEx65QEAzXSNGnhXXQcjqGFunERKEgU93qXARGW2uGQ69nF3RXKMlzL2rEJ7 N4TzUOIbRMt1nDTelCBZGFvQUu/iyIkGqnYfT706/Pr8PWrdU0vU072KZZTslZz4zgt5 Rs0Q1pv7abcP/dowDctud8hHK2CDvSGlP0pbyoqDHFOebldQay+g1mub4cJYDIYMLlpM QBPSsBGG6lzK+g5KBEwQdZY320Axf09oFcmfan5uEX2VNkfV93nc7Vq8Wxf0ZMICHwj8 RxeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779144329; x=1779749129; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YY12qmAw/YvXItWxKFuE6zrhQE3wG3PQZuik94qWjms=; b=mCAw50OUZylcavB5K9GO8vWqSjw3iUX9sRJU5fQof3F6iBrTc2IykIMaO+GgK9YukE 4qKL5rJJqZQOAfhnJtZu06ssvG7sak0eOM9657d9CzQQm5QdFOm5f55g+5t2OQqgI8y6 KAj5NqQnTnKZCuMxWS7ooTcP6wcl0BzePdMuT9TpYA5a/MP3y75koOr9Lpbkfg0W90+W P4PQNHXWRBvpTz1neDlJcVF9cjAXAmTbXNBlV4TnNqhKCqW6vxg3Iys7SzrUs/vgAKxA DBykeD2/9uHcFFsc/2THiaSu3VVpwel6zXsPApiTZYA0TECUM8x2TRUt5HhWC/Lwf5X5 fBug== X-Forwarded-Encrypted: i=1; AFNElJ8IXZk6SfTL547SNq4mph6ihx/mBPdMjT9RRic/psubIqaSTkBSrjW8PpQXrCOKQp5Imc7HOT4OiKOwspQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/VPTSPuNwrX/QSv3yraIW7XI+wTgZN1u7CiQr5lskzKlQXue+ 6z2h03p4obI5Ghs60Lh44O+aL/2tDJXj0I2399GstOT2Vb94zg+VBUD5 X-Gm-Gg: Acq92OGfNBheC06mNs+NRZz7lkShK0D12irBYO4xnmC3G2ems1JDft1JYZEBYhuVRdr mt94yOVS4RL5sgzBbCmRB4OGyjF08kOlrqwGf/fBLucw5jpA7XeOzw5j/X2YHhZU+IW6U7Qn4MN iqgaUmp7Xe95A1+caU5QmRD41y2hqz08DHCFRPniunFejKJoRSYUDK9RhMbOwC45XhlI01wHAd9 hUri2W044R4GGiTF6lrxHJbtg3j2Zc+xmHp3Y6E8R2YgNUu42KboOItbQX5CCMLwZ0lgBZwFA1D wl+wghTuOh1qI6NLSca2gf0eRGZb9Eb7Zp2qXIVq+lZhMoAkFLm1bIl0opKowaaQFfHMImd7Hhk S+JEt0IpVubwTudMviEFMjnOLywDzRNLEhBwT6ihXyMJgUX21tBdVPqpIWdjWOAxuXAb/R5BK2Y H6BRkZXICjKFfxfRlmrZfS1ZnIWTi3aYttw8R9eYa71NH23zcVveiUbYUzv0CaBRtz8BKiNrNlZ Qwv4hHQxp+o X-Received: by 2002:a05:622a:6201:b0:50f:ade2:2d3 with SMTP id d75a77b69052e-5165a1ec441mr227885641cf.42.1779144329153; Mon, 18 May 2026 15:45:29 -0700 (PDT) Received: from errol.ini.cmu.edu (pool-108-17-68-229.pitbpa.fios.verizon.net. [108.17.68.229]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-516460cda02sm149069961cf.18.2026.05.18.15.45.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 15:45:28 -0700 (PDT) Date: Mon, 18 May 2026 18:45:26 -0400 From: "Gabriel L. Somlo" To: Inochi Amaoto Cc: Ulf Hansson , Karol Gugala , Mateusz Holenko , Joel Stanley , Kamil Rakoczy , Andy Shevchenko , linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Yixun Lan , Longbin Li Subject: Re: [PATCH v4] mmc: litex_mmc: Set mandatory idle clocks before CMD0 Message-ID: References: <20260517015323.264179-1-inochiama@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Clacks-Overhead: GNU Terry Pratchett On Tue, May 19, 2026 at 06:24:19AM +0800, Inochi Amaoto wrote: > On Mon, May 18, 2026 at 06:20:49PM -0400, Gabriel L. Somlo wrote: > > with this patch on top of today's latest (4d3a2a466b8d), I get > > (on 64-bit rocketchip with Litex): > > > > [ 6.475114] mmc0: invalid bus width > > [ 6.477870] mmc0: error -22 whilst initialising SD card > > > > Thanks, > > --Gabriel > > > > Hi, Gabriel, > > Could you share the board link and build commands? I think I need to > take a look for why this occurs. > > Regards, > Inochi Hi Inochi, it's the digilent nexys-video board; the command line to build the bitstream is: litex-boards/litex_boards/targets/digilent_nexys_video.py --build \ --cpu-type rocket --cpu-variant linux --cpu-num-cores 4 --cpu-mem-width 2 \ --sys-clk-freq 50e6 --with-ethernet --with-sdcard --with-sata --sata-gen 1 (for more details see https://github.com/litex-hub/linux-on-litex-rocket) I've added your patch on top of the LiteX kernel tree at https://github.com/litex-hub/linux/tree/litex-rebase and compiled it with: make clean make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- litex_rocket_defconfig make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- FWIW, your previous versions of the patch did work, and did fix the issue you were trying to address (which I did notice being a problem on my configuration :) Thanks, --Gabriel > > On Sun, May 17, 2026 at 09:53:23AM +0800, Inochi Amaoto wrote: > > > The litex_mmc driver assumes the card is already probed in the BIOS > > > and skip the phy initialization. This will cause the command fail > > > like the following when the old card is unplugged and then insert > > > a new card: > > > > > > [ 62.923593] litex-mmc f0004000.mmc: Command (cmd 8) error, status -110 > > > [ 62.949717] litex-mmc f0004000.mmc: Command (cmd 55) error, status -110 > > > [ 62.976606] litex-mmc f0004000.mmc: Command (cmd 55) error, status -110 > > > [ 63.002516] litex-mmc f0004000.mmc: Command (cmd 55) error, status -110 > > > [ 63.028442] litex-mmc f0004000.mmc: Command (cmd 55) error, status -110 > > > > > > Add required clock settings and initialization for the CMD 0, so it can > > > probe the new card. > > > > > > Fixes: 92e099104729 ("mmc: Add driver for LiteX's LiteSDCard interface") > > > Signed-off-by: Inochi Amaoto > > > --- > > > Changed from v3: > > > - https://lore.kernel.org/linux-mmc/20260426112016.1370929-1-inochiama@gmail.com/ > > > 1. Remove patch 1: mmc: litex_mmc: Move litex_mmc_setclk() to bottom for reuse > > > 2. Use set_ios() callback to apply the clock change. > > > > > > Changed from v2: > > > - https://lore.kernel.org/linux-mmc/20260424013615.470325-1-inochiama@gmail.com/ > > > 1. Remove the added function forward reference and add a new patch > > > for moving litex_mmc_setclk() function > > > > > > Change from v1: > > > - https://lore.kernel.org/linux-mmc/20260421025052.755471-1-inochiama@gmail.com/ > > > 1. use fsleep to replace udelay > > > > > > Inochi Amaoto (2): > > > mmc: litex_mmc: Move litex_mmc_setclk() to bottom for reuse > > > mmc: litex_mmc: Set mandatory idle clocks before CMD0 > > > > > > drivers/mmc/host/litex_mmc.c | 37 ++++++++++++++++++++++-------------- > > > 1 file changed, 23 insertions(+), 14 deletions(-) > > > --- > > > drivers/mmc/host/litex_mmc.c | 11 +++++++++++ > > > 1 file changed, 11 insertions(+) > > > > > > diff --git a/drivers/mmc/host/litex_mmc.c b/drivers/mmc/host/litex_mmc.c > > > index d2f19c2dc673..65d5c728f536 100644 > > > --- a/drivers/mmc/host/litex_mmc.c > > > +++ b/drivers/mmc/host/litex_mmc.c > > > @@ -68,6 +68,9 @@ > > > #define SD_SLEEP_US 5 > > > #define SD_TIMEOUT_US 20000 > > > > > > +#define SD_INIT_DELAY_US 1000 > > > +#define SD_INIT_CLK_HZ 400000 > > > + > > > #define SDIRQ_CARD_DETECT 1 > > > #define SDIRQ_SD_TO_MEM_DONE 2 > > > #define SDIRQ_MEM_TO_SD_DONE 4 > > > @@ -449,6 +452,9 @@ static void litex_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) > > > { > > > struct litex_mmc_host *host = mmc_priv(mmc); > > > > > > + if (ios->chip_select == MMC_CS_HIGH) > > > + ios->clock = SD_INIT_CLK_HZ; > > > + > > > /* > > > * NOTE: Ignore any ios->bus_width updates; they occur right after > > > * the mmc core sends its own acmd6 bus-width change notification, > > > @@ -459,6 +465,11 @@ static void litex_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) > > > /* Update sd_clk */ > > > if (ios->clock != host->sd_clk) > > > litex_mmc_setclk(host, ios->clock); > > > + > > > + if (ios->chip_select == MMC_CS_HIGH) { > > > + litex_write8(host->sdphy + LITEX_PHY_INITIALIZE, 1); > > > + fsleep(SD_INIT_DELAY_US); > > > + } > > > } > > > > > > static const struct mmc_host_ops litex_mmc_ops = { > > > -- > > > 2.54.0 > > >