Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1E887C433EF for ; Wed, 10 Nov 2021 17:03:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0830661241 for ; Wed, 10 Nov 2021 17:03:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232311AbhKJRGb (ORCPT ); Wed, 10 Nov 2021 12:06:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49380 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232316AbhKJRG2 (ORCPT ); Wed, 10 Nov 2021 12:06:28 -0500 Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [IPv6:2a00:1450:4864:20::134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D2D33C061766 for ; Wed, 10 Nov 2021 09:03:39 -0800 (PST) Received: by mail-lf1-x134.google.com with SMTP id u11so7648894lfs.1 for ; Wed, 10 Nov 2021 09:03:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=hzD/DAYGhboNaykVpK/opnEQiLFNUkCeLqCnw7cZh98=; b=YWVQ2ftmMy7bjpmmm4spkd+jJC+ZUgbRAMXDyKTjfDBN9p9K12lFZlNRXURPf7H43+ g0i7hz8WmBjTyfF4++qw+RPiPDWOVMW1v14FEcFT0FSkfmA3bM2piJu7FHAAd9wYOcp5 03HAoNvYCeXjYSN8VhZFTFW7I708+R/vTyICX/Rn+DbFnWeIOpk73LrndCzJi5t08DWA /CXalJqnYiS6pxDpYwKJsbmQXjr3ZOTqFS0ihgIXGsz4iS5RlDSc5/HaZCgJ13Bv78zk Jpf61BKf28+YFxRNur79qvk4257uLFNN3Gdwwa/9WiwfOiwnqMS4T4OOfPcixheyyegh F8Yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=hzD/DAYGhboNaykVpK/opnEQiLFNUkCeLqCnw7cZh98=; b=XVj1gVeMXVRMIpu/X/21FWXtgfzkH0tmXEOLFdG7bICpdqSbioZ1ykqiJpjYV9HKA9 giEx7baWQOvDyADhlmFHTWEwG4Pd8vq8qv6kewbjIQUQxKjz+QfolnMcPZsPRZJ9ZfG7 x2jIQV60sbWDCQAc0mOLdy1g/FtOfB6mis/fmk/Ts2NKzRe1sQVMkeSbq88BetBLR5v8 BhTuQuzMJtxj4npRfFv5SLPTHx/bUaT9vDf9ht0/7bJ88ESmrenx8hINhA80PT3ENaDq keDuyLhAMqUCQAT3ZRlx80WUB3E5zWnL75usGD0bnSQxmy96BUBkRdPrRj1Y/BN3nTp9 QLqQ== X-Gm-Message-State: AOAM531aXxqoywygIql6bTNyZKyCD1rUZynbeSuzMa+tVEXyo7egWMqj dGF1V22W/TxRyy2EmrKUC5TB2BhPqKYB4JnLpdOB+w== X-Google-Smtp-Source: ABdhPJxb/dmh5YsoAw5FZOPj2BogW3tCtpsorxgzVNBF2IvsZNngY/zr07OqnbbCsvv8QyY4VYbJqlQC5AsqeT1V+FY= X-Received: by 2002:a19:ad4d:: with SMTP id s13mr535246lfd.373.1636563817872; Wed, 10 Nov 2021 09:03:37 -0800 (PST) MIME-Version: 1.0 References: <3ca9a3099d86d631235b6c03ae260bc581cc8d60.1636103151.git.hns@goldelico.com> In-Reply-To: From: Ulf Hansson Date: Wed, 10 Nov 2021 18:03:01 +0100 Message-ID: Subject: Re: [RFC v4 5/6] mmc: core: transplant ti,wl1251 quirks from to be retired omap_hsmmc To: "H. Nikolaus Schaller" Cc: =?UTF-8?B?SsOpcsO0bWUgUG91aWxsZXI=?= , Avri Altman , Shawn Lin , Linus Walleij , Tony Lindgren , Bean Huo , =?UTF-8?Q?Gra=C5=BEvydas_Ignotas?= , linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, letux-kernel@openphoenux.org, kernel@pyra-handheld.com Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 10 Nov 2021 at 17:36, H. Nikolaus Schaller wrote: > > Hi Ulf, > > > Am 09.11.2021 um 21:01 schrieb Ulf Hansson : > > > > On Tue, 9 Nov 2021 at 11:58, H. Nikolaus Schaller wrote: > >> > >> Hi Ulf, > >> > >>> Am 08.11.2021 um 16:33 schrieb Ulf Hansson : > >>> > >>> On Fri, 5 Nov 2021 at 10:06, H. Nikolaus Schaller wrote: > >>>> > >>>> + card->quirks |= MMC_QUIRK_NONSTD_SDIO; > >>>> + card->cccr.wide_bus = 1; > >>>> + card->cis.vendor = 0x104c; > >>>> + card->cis.device = 0x9066; > >>>> + card->cis.blksize = 512; > >>>> + card->cis.max_dtr = 24000000; > >>>> + card->ocr = 0x80; > >>> > >>> In the past, we discussed a bit around why card->ocr needs to be set here. > >>> > >>> The reason could very well be that the DTS file is specifying the > >>> vmmc-supply with 1.8V fixed regulator, which seems wrong to me. > >> > >> I have checked with the schematics but the wlan_en regulator-fixed is just a GPIO > >> controlling some pin of the wifi chip. > >> > >> I guess it enables some regulator or power switch inside the wifi module which > >> has unknown voltage. > >> > >> We can interpret this as two sequential power-switches. The first one controlled > >> by the gpio-register bit and switches gpio power to the gpio pad of the SoC. The second > >> one switches the battery voltage to the internal circuits of the wifi module. > >> > >> The GPIO itself is on 1.8V VIO level which seems to be the reason for the min/max. > >> > >> Now it is a little arbitrary what the DTS describes: the gpio voltage or the unknown > >> internal voltage of the second switch. > >> > >> So from hardware perspective the min/max values are irrelevant. > > > > I completely agree with you! That's also why I earlier suggested > > moving to use an mmc-pwrseq node > > (Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.yaml), that > > would allow a better description of the HW. > > Basically yes. > > > Nevertheless, the important point is that the mmc core gets a valid > > host->ocr_avail to work with during card initialization. And in this > > case, it's probably good enough to model this via changing the > > regulator-min|max-microvolt to get a proper value from the > > "regulator". > > > >> > >>> > >>> I would be very interested to know if we would change > >>> "regulator-min|max-microvolt" of the regulator in the DTS, into > >>> somewhere in between 2700000-3600000 (2.7-3.6V) > >> > >> Ok, if the mmc driver does something with these values it may have indeed an influence. > >> > >>> - and see if that > >>> allows us to drop the assignment of "card->ocr = 0x80;" above. Would > >>> you mind doing some tests for this? > >> > >> Well, with min/max=3.3V and no ocr I get: > >> > >> [ 2.765136] omap_hsmmc 480ad000.mmc: card claims to support voltages below defined range > >> [ 2.776367] omap_hsmmc 480ad000.mmc: found wl1251 > >> [ 2.782287] mmc2: new SDIO card at address 0001 > > > > That's really great information! During the first initialization > > attempt, things are working fine and the SDIO card gets properly > > detected. > > > >> [ 10.874237] omap_hsmmc 480ad000.mmc: could not set regulator OCR (-22) > >> [ 10.945373] wl1251_sdio: probe of mmc2:0001:1 failed with error -16 > > > > It looks like the card is being re-initialized when it's time to probe > > with the SDIO func driver. This makes sense, assuming it's been > > powered off via runtime PM (the "cap-power-off-card" DT property > > should be set in the DTS for this card's slot). > > > > I looked a bit closer to understand the problem above and then I > > realized why the card->ocr is being set from omap_hsmmc ->init_card() > > callback. It's most likely because the mmc core in > > mmc_sdio_init_card() doesn't save the card->ocr when > > MMC_QUIRK_NONSTD_SDIO is set. Instead it becomes the responsibility > > for the ->init_card() callback to do it, which seems wrong to me. > > > > Note that the card->ocr is being used when re-initializing the SDIO card. > > > > I have just sent a patch [1], would you mind trying it, in combination > > with not assigning card->ocr in $subject patch? > > Yes, it works! I have not even played with the wlan_en regulator voltage. That's great! Thanks for testing, again! > > > > >> > >> Adding back card->ocr = 0x80 (and keeping 3.3V for min/max) shows exactly the same. > >> > >> Only min/max 1.8V + OCR works: > >> > >> [ 2.824188] mmc2: new SDIO card at address 0001 > >> [ 2.806518] omap_hsmmc 480ad000.mmc: card claims to support voltages below defined range > >> [ 2.815979] omap_hsmmc 480ad000.mmc: found wl1251 > >> [ 10.981018] omap_hsmmc 480ad000.mmc: found wl1251 > >> [ 11.018280] wl1251: using dedicated interrupt line > >> [ 11.321136] wl1251: loaded > >> [ 11.378601] wl1251: initialized > >> [ 14.521759] omap_hsmmc 480ad000.mmc: found wl1251 > >> [ 38.680725] omap_hsmmc 480ad000.mmc: found wl1251 > >> [ 39.646942] wl1251: 151 tx blocks at 0x3b788, 35 rx blocks at 0x3a780 > >> [ 39.654785] wl1251: firmware booted (Rev 4.0.4.3.7) > >> > >> Therefore I also tried the 4th combination: min/max 1.8V and no ocr quirk and it fails again. > >> > >> Finally I tried setting min to 2.7V and max to 3.6V. This ends up in > >> > >> [ 0.402648] reg-fixed-voltage fixed-regulator-wg7210_en: Fixed regulator specified with variable voltages > >> > >> So it seems that we need both: min/max = 1.8V and OCR. A little unexpected since I had expected > >> that min/max is completely irrelevant. > >> > >>> If that works, we should add some comments about it above, I think. > >> > >> So at the moment no change for [PATCH v1] which I can now send out. > >> > >> BR and thanks, > >> Nikolaus > >> > > > > Thanks a lot for doing these tests! If I am right, it looks like we > > should be able to skip assigning card->ocr for this quirk, but let's > > see. > > Indeed we can. That is great. > > Now the question is how to handle the dependency on your patch. > Somehow we must ensure that it is merged before my $subject patch. > Even if someone decides to backport this to stable. Yes, I can pick up my patch first. As it's not really fixing a problem, but rather preparing for your series to work better, I don't think we need to care about stable backports, at least for now. If you re-submit before rc1, then just include my patch early in your series. > > BR and thanks, > Nikolaus Kind regards Uffe