On Wed, 20 May 2020 at 04:00, Dmitry Osipenko <digetx@xxxxxxxxx> wrote:
19.05.2020 23:44, Sowjanya Komatineni ÐÐÑÐÑ:
On 5/19/20 12:07 PM, Sowjanya Komatineni wrote:The SDIO PINCTRL drive-strengths are usually a part of the board's
On 5/19/20 11:41 AM, Sowjanya Komatineni wrote:[Correction] T30 has same drive strengths to use irrespective of signal
On 5/19/20 11:34 AM, Sowjanya Komatineni wrote:Warning on missing drive strengths when auto cal is enabled should be
On 5/19/20 9:33 AM, Dmitry Osipenko wrote:Auto calibration is present from Tegra30 onward and looking into
19.05.2020 19:24, Thierry Reding ÐÐÑÐÑ:dt binding doc we have is common for MMC, SD and SDIO of all Tegras.
On Tue, May 19, 2020 at 05:05:27PM +0300, Dmitry Osipenko wrote:
19.05.2020 10:28, Ulf Hansson ÐÐÑÐÑ:Optional only means that drivers must not fail if these properties
On Sat, 16 May 2020 at 17:44, Dmitry Osipenko <digetx@xxxxxxxxx>That's what the DT binding doc says [1].
wrote:
Several people asked me about the MMC warnings in the KMSG log andWhy are the warnings irrelevant?
I had to tell to ignore them because these warning are
irrelevant to
pre-Tegra210 SoCs.
[1]
https://www.kernel.org/doc/Documentation/devicetree/bindings/mmc/nvidia%2Ctegra20-sdhci.txt
Although, looking at the driver's code and TRM docs, it seems
that all
those properties are really irrelevant only to the older Terga20
SoC. So
the binding doc is a bit misleading.
Nevertheless, the binding explicitly says that the properties are
optional, which is correct.
aren't found, it doesn't mean that the driver can't warn that they
are missing.
Quite possibly the only reason why they were made optional is because
they weren't part of the bindings since the beginning. Anything added
to a binding after the first public release has to be optional by
definition, otherwise DT ABI wouldn't be stable.
I think these warnings were added on purpose, though I also see that
there are only values for these in device tree for Tegra186 and
Tegra194
but not Tegra210 where these should also be necessary.
Its not mandatory to have both 3v3 and 1v8 in device tree as based
on signal mode.
As these driver strengths are SoC specific, they are part of Tegra
SoC specific device tree where same values will be applicable to all
Tegra SoC specific platforms.
Based on interface usage on platform, we use one or both of them
like sdcard supports dual voltage and we use both 3V3 and 1V8 but if
same interface is used for WIFI SD we use 1V8 only.
So made these dt properties as optional.
Other reason they are optional is, Tegra210 and prior has drive
strength settings part of apb_misc and Tegra186 and later has driver
strengths part of SDMMC controller. So,
- Pinctrls "sdmmc-3v3-drv" and "sdmmc-1v8-drv" for driver strengths
are applicable for Tegra210 and prior.
- dt properties pad-autocal-pull-up/down-offset-1v8/3v3-timeout are
for T186 onwards for driver strengths
Looks like dt binding doc need fix to clearly document these based
on SoC or agree with Yaml we can conditionally specify pinctrl or dt
properties based on SoC dependent.
As drive strengths are through dt properties for T186 and later andAdding Sowjanya who wrote this code. Perhaps she can clarify why the
warnings were added. If these values /should/ be there on a subset of
Tegra, then I think we should keep them, or add them again, but
perhaps
add a better way of identifying when they are necessary and when
it is
safe to work without them.
That said, looking at those checks I wonder if they are perhaps just
wrong. Or at the very least they seem redundant. It looks to me like
they can just be:
if (tegra_host->pinctrl_state_XYZ == NULL) {
...
}
That !IS_ERR(...) doesn't seem to do anything. But in that case, it's
also obvious why we're warning about them on platforms where these
properties don't exist in DT.
thru pinctrl for T210 and prior, driver first checks for dt autocal
timeout pull-up/down properties and if they are not found, it then
checks for presence of pinctrl_state_xyx_drv only when valid
pinctrl_state_xyz is present.
Driver expects either pinctrl or dt properties and shows warning
when neither of them are present as its mandatory to use fixed
driver strengths when auto calibration fails.
err = device_property_read_u32(host->mmc->parent,
"nvidia,pad-autocal-pull-down-offset-3v3-timeout",
&autocal->pull_down_3v3_timeout);
if (err) {
if (!IS_ERR(tegra_host->pinctrl_state_3v3) &&
(tegra_host->pinctrl_state_3v3_drv == NULL))
pr_warn("%s: Missing autocal timeout 3v3-pad drvs\n",
mmc_hostname(host->mmc));
autocal->pull_down_3v3_timeout = 0;
}
So I think we either need to add those values where appropriate soEither way will be cleaner to convert the DT binding to YAML rather
that
the warning doesn't show, or we need to narrow down where they are
really needed and add a corresponding condition.
But again, perhaps Sowjanya can help clarify if these really are only
needed on Tegra210 and later or if these also apply to older chips.
than
clutter the driver, IMO.
change where autocalibration was added to sdhci driver somehow it was
enabled only for T30/T210/T186/T194.
tegra_sdhci_parse_pad_autocal_dt() was added when auto-calibration
was added to driver and I see this dt parse is being done
irrespective of NVQUIRK_HAS_PADCALIB quirk so even on platforms
without auto cal enabled in driver, these messages shows up.
This should be fixed in driver to allow
tegra_sdhci_parse_pad_autocal_dt() only when NVQUIRK_HAS_PADCALIB is
set to avoid dt parsing to happen on platforms that don't have auto
cal enabled.
present as we should switch to fixed recommended drive strengths when
auto cal fails.
So probably proper fix should be
- allow tegra_sdhci_parse_pad_autocal_dt() only when
NVQUIRK_HAS_PADCALIB is set
- current driver sets NVQUIRK_HAS_PADCALIB for T30 as well so need to
add pinctrls "sdmmc-3v3-drv" and "sdmmc-1v8-drv" to Tegra30 device tree.
voltage and it doesn't have pad control. So for T3- we can update device
tree to specify "default" pinctrl with drvup/dn settings.
- Keep warning message of missing auto cal timeouts as its mandatoryRegarding warnings, I guess simpler and easy fix is to remove warning
to use fixed recommended driver strengths when auto cal fails.
message on missing 3v3/1v8 drive strengths as pinctrl/dt properties were
already added for T210/186/194 where we need and old device tree don't
have them but the case where auto cal can fail is very rare.
Otherwise should update driver to allow
tegra_sdhci_parse_pad_autocal_dt() only when NVQUIRK_HAS_PADCALIB is set
and also within tegra_sdhci_parse_pad_autocal_dt() show warning of
missing 3v3/1v8 settings only when NVQUIRK_NEEDS_PAD_CONTROL is set.
Thierry, please suggest if you prefer to removing warnings or fix driver
to show warning based on PADCALIB and PAD_CONTROL quirks.
default PINCTRL state, which is either preset by bootloader or by
PINCTRL driver early at a boot time.
The SDIO drive-strengths values should be board-specific and not
SoC-specific because they should depend on the electrical properties of
the board, IIUC.
If the SDIO PINCTRL states are mandatory for the SDHCI nodes in theFor now I will keep $subject patch applied, but please tell me if I
device-trees, then the DT binding is wrong since it says that all
properties are optional. But I think that the current binding is okay,
since today SDHCI PINCTRL drive-strengths are specified implicitly in
the device-trees, and thus, there is no real need to emit the noisy
warnings in this case.
should drop it so we can start over.
In any case, I would appreciate it if someone could have a stab at
converting sdhci and tegra DT bindings to yaml.
Kind regards
Uffe