RE: [PATCH v7 2/4] mmc: sdhci-tegra: Add support to program MC stream ID

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ulf

The initial patches were without the #ifdef. #ifdef is being added as per review comments and kernel robot errors.
Following error was detected by kernel robot
>>
All errors (new ones prefixed by >>):

   drivers/mmc/host/sdhci-tegra.c: In function 'sdhci_tegra_probe':
>> drivers/mmc/host/sdhci-tegra.c:1794:54: error: 'struct iommu_fwspec' has no member named 'ids'
    1794 |                         tegra_host->streamid = fwspec->ids[0] & 0xffff;
         |                                                      ^~


vim +1794 drivers/mmc/host/sdhci-tegra.c
>>
Adrian also pointed out this issue so to address these issues #ifdef was added

Thanks
Prathamesh

> -----Original Message-----
> From: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
> Sent: Tuesday, October 11, 2022 3:29 PM
> To: Prathamesh Shete <pshete@xxxxxxxxxx>
> Cc: adrian.hunter@xxxxxxxxx; thierry.reding@xxxxxxxxx; Jonathan Hunter
> <jonathanh@xxxxxxxxxx>; p.zabel@xxxxxxxxxxxxxx; linux-
> mmc@xxxxxxxxxxxxxxx; linux-tegra@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx; Aniruddha Tvs Rao <anrao@xxxxxxxxxx>; Suresh
> Mangipudi <smangipudi@xxxxxxxxxx>; Krishna Yarlagadda
> <kyarlagadda@xxxxxxxxxx>
> Subject: Re: [PATCH v7 2/4] mmc: sdhci-tegra: Add support to program MC
> stream ID
> 
> External email: Use caution opening links or attachments
> 
> 
> On Thu, 6 Oct 2022 at 15:07, Prathamesh Shete <pshete@xxxxxxxxxx> wrote:
> >
> > SMMU clients are supposed to program stream ID from their respective
> > address spaces instead of MC override.
> > Define NVQUIRK_PROGRAM_STREAMID and use it to program SMMU stream
> ID
> > from the SDMMC client address space.
> >
> > Signed-off-by: Aniruddha TVS Rao <anrao@xxxxxxxxxx>
> > Signed-off-by: Prathamesh Shete <pshete@xxxxxxxxxx>
> > Acked-by: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> > Acked-by: Thierry Reding <treding@xxxxxxxxxx>
> > ---
> >  drivers/mmc/host/sdhci-tegra.c | 53
> > ++++++++++++++++++++++++++++++++++
> >  1 file changed, 53 insertions(+)
> >
> > diff --git a/drivers/mmc/host/sdhci-tegra.c
> > b/drivers/mmc/host/sdhci-tegra.c index a6c5bbae77b4..e88294a6912d
> > 100644
> > --- a/drivers/mmc/host/sdhci-tegra.c
> > +++ b/drivers/mmc/host/sdhci-tegra.c
> > @@ -25,6 +25,10 @@
> >  #include <linux/mmc/slot-gpio.h>
> >  #include <linux/gpio/consumer.h>
> >  #include <linux/ktime.h>
> > +#ifdef CONFIG_IOMMU_API
> > +#include <linux/iommu.h>
> > +#include <linux/bitops.h>
> > +#endif
> >
> >  #include <soc/tegra/common.h>
> >
> > @@ -94,6 +98,8 @@
> >  #define SDHCI_TEGRA_AUTO_CAL_STATUS                    0x1ec
> >  #define SDHCI_TEGRA_AUTO_CAL_ACTIVE                    BIT(31)
> >
> > +#define SDHCI_TEGRA_CIF2AXI_CTRL_0                     0x1fc
> > +
> >  #define NVQUIRK_FORCE_SDHCI_SPEC_200                   BIT(0)
> >  #define NVQUIRK_ENABLE_BLOCK_GAP_DET                   BIT(1)
> >  #define NVQUIRK_ENABLE_SDHCI_SPEC_300                  BIT(2)
> > @@ -121,6 +127,7 @@
> >  #define NVQUIRK_HAS_TMCLK                              BIT(10)
> >
> >  #define NVQUIRK_HAS_ANDROID_GPT_SECTOR                 BIT(11)
> > +#define NVQUIRK_PROGRAM_STREAMID                       BIT(12)
> >
> >  /* SDMMC CQE Base Address for Tegra Host Ver 4.1 and Higher */
> >  #define SDHCI_TEGRA_CQE_BASE_ADDR                      0xF000
> > @@ -177,6 +184,9 @@ struct sdhci_tegra {
> >         bool enable_hwcq;
> >         unsigned long curr_clk_rate;
> >         u8 tuned_tap_delay;
> > +#ifdef CONFIG_IOMMU_API
> 
> I would rather avoid these kinds of "#ifdef" micro optimizations.
> Please just add the streamid without the #ifdef.
> 
> > +       u32 streamid;
> > +#endif
> >  };
> >
> >  static u16 tegra_sdhci_readw(struct sdhci_host *host, int reg) @@
> > -1564,6 +1574,7 @@ static const struct sdhci_tegra_soc_data
> soc_data_tegra234 = {
> >                     NVQUIRK_DIS_CARD_CLK_CONFIG_TAP |
> >                     NVQUIRK_ENABLE_SDR50 |
> >                     NVQUIRK_ENABLE_SDR104 |
> > +                   NVQUIRK_PROGRAM_STREAMID |
> >                     NVQUIRK_HAS_TMCLK,
> >         .min_tap_delay = 95,
> >         .max_tap_delay = 111,
> > @@ -1775,6 +1786,25 @@ static int sdhci_tegra_probe(struct
> platform_device *pdev)
> >         if (rc)
> >                 goto err_add_host;
> >
> > +       /* Program MC streamID for DMA transfers */ #ifdef
> > +CONFIG_IOMMU_API
> 
> Again, please drop the #ifdefs here.
> 
> We already have stub functions for dev_iommu_fwspec_get() in case
> CONFIG_IOMMU_API is unset.
> 
> > +       if (soc_data->nvquirks & NVQUIRK_PROGRAM_STREAMID) {
> > +               struct iommu_fwspec *fwspec;
> > +
> > +               fwspec = dev_iommu_fwspec_get(&pdev->dev);
> > +               if (fwspec == NULL) {
> > +                       dev_warn(mmc_dev(host->mmc),
> > +                               "iommu fwspec is NULL, continue without stream ID\n");
> > +               } else {
> > +                       tegra_host->streamid = fwspec->ids[0] & 0xff;
> > +                       tegra_sdhci_writel(host, tegra_host->streamid |
> > +                                               FIELD_PREP(GENMASK(15, 8),
> > +                                               tegra_host->streamid),
> > +                                               SDHCI_TEGRA_CIF2AXI_CTRL_0);
> > +               }
> > +       }
> > +#endif
> > +
> >         return 0;
> >
> >  err_add_host:
> > @@ -1861,6 +1891,10 @@ static int sdhci_tegra_suspend(struct device
> > *dev)  static int sdhci_tegra_resume(struct device *dev)  {
> >         struct sdhci_host *host = dev_get_drvdata(dev);
> > +#ifdef CONFIG_IOMMU_API
> 
> Ditto.
> 
> > +       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
> > +       struct sdhci_tegra *tegra_host = sdhci_pltfm_priv(pltfm_host);
> > +#endif
> >         int ret;
> >
> >         ret = mmc_gpio_set_cd_wake(host->mmc, false);
> > @@ -1871,6 +1905,25 @@ static int sdhci_tegra_resume(struct device *dev)
> >         if (ret)
> >                 return ret;
> >
> > +       /* Re-program MC streamID for DMA transfers */
> > +#ifdef CONFIG_IOMMU_API
> 
> Ditto.
> 
> > +       if (tegra_host->soc_data->nvquirks & NVQUIRK_PROGRAM_STREAMID) {
> > +               struct iommu_fwspec *fwspec;
> > +
> > +               fwspec = dev_iommu_fwspec_get(dev);
> > +               if (fwspec == NULL) {
> > +                       dev_warn(mmc_dev(host->mmc),
> > +                               "iommu fwspec is NULL, continue without stream ID\n");
> > +               } else {
> > +                       tegra_host->streamid = fwspec->ids[0] & 0xff;
> > +                       tegra_sdhci_writel(host, tegra_host->streamid |
> > +                                               FIELD_PREP(GENMASK(15, 8),
> > +                                               tegra_host->streamid),
> > +                                               SDHCI_TEGRA_CIF2AXI_CTRL_0);
> > +               }
> > +       }
> > +#endif
> > +
> >         ret = sdhci_resume_host(host);
> >         if (ret)
> >                 goto disable_clk;
> > --
> > 2.17.1
> >
> 
> Kind regards
> Uffe




[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux