* [PATCH] mmc: sdhci-cadence: Fix -Wuninitialized in sdhci_cdns_tune_blkgap() @ 2025-08-19 17:28 Nathan Chancellor 2025-08-20 8:07 ` Benoît Monin 2025-08-20 16:43 ` Ulf Hansson 0 siblings, 2 replies; 5+ messages in thread From: Nathan Chancellor @ 2025-08-19 17:28 UTC (permalink / raw) To: Adrian Hunter, Ulf Hansson Cc: Benoît Monin, linux-mmc, llvm, patches, Nathan Chancellor Clang warns (or errors with CONFIG_WERROR=y): drivers/mmc/host/sdhci-cadence.c:297:9: error: variable 'hrs37_mode' is uninitialized when used here [-Werror,-Wuninitialized] 297 | writel(hrs37_mode, hrs37_reg); | ^~~~~~~~~~ drivers/mmc/host/sdhci-cadence.c:291:16: note: initialize the variable 'hrs37_mode' to silence this warning 291 | u32 hrs37_mode; | ^ | = 0 A previous revision assigned SDHCI_CDNS_HRS37_MODE_MMC_HS200 to hrs37_mode in a switch statement but the final revision moved to a simple if statement. Pass that as the value to writel() and remove hrs37_mode, clearing up the warning. Fixes: 60613a8b9b81 ("mmc: sdhci-cadence: implement multi-block read gap tuning") Signed-off-by: Nathan Chancellor <nathan@kernel.org> --- drivers/mmc/host/sdhci-cadence.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/mmc/host/sdhci-cadence.c b/drivers/mmc/host/sdhci-cadence.c index a2a4a5b0ab96..eaa88897a256 100644 --- a/drivers/mmc/host/sdhci-cadence.c +++ b/drivers/mmc/host/sdhci-cadence.c @@ -288,13 +288,12 @@ static int sdhci_cdns_tune_blkgap(struct mmc_host *mmc) void __iomem *hrs38_reg = priv->hrs_addr + SDHCI_CDNS_HRS38; int ret; u32 gap; - u32 hrs37_mode; /* Currently only needed in HS200 mode */ if (host->timing != MMC_TIMING_MMC_HS200) return 0; - writel(hrs37_mode, hrs37_reg); + writel(SDHCI_CDNS_HRS37_MODE_MMC_HS200, hrs37_reg); for (gap = 0; gap <= SDHCI_CDNS_HRS38_BLKGAP_MAX; gap++) { writel(gap, hrs38_reg); --- base-commit: 7138017038c42feb682445407974ed736e1ff308 change-id: 20250819-mmc-sdhci-cadence-fix-uninit-hrs37_mode-cc1246cb39d8 Best regards, -- Nathan Chancellor <nathan@kernel.org> ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] mmc: sdhci-cadence: Fix -Wuninitialized in sdhci_cdns_tune_blkgap() 2025-08-19 17:28 [PATCH] mmc: sdhci-cadence: Fix -Wuninitialized in sdhci_cdns_tune_blkgap() Nathan Chancellor @ 2025-08-20 8:07 ` Benoît Monin 2025-08-20 10:43 ` Dan Carpenter 2025-08-20 16:43 ` Ulf Hansson 1 sibling, 1 reply; 5+ messages in thread From: Benoît Monin @ 2025-08-20 8:07 UTC (permalink / raw) To: Nathan Chancellor; +Cc: Adrian Hunter, Ulf Hansson, linux-mmc, llvm, patches Hi Nathan, On Tuesday, 19 August 2025 at 19:28:49 CEST, Nathan Chancellor wrote: > Clang warns (or errors with CONFIG_WERROR=y): > > drivers/mmc/host/sdhci-cadence.c:297:9: error: variable 'hrs37_mode' is uninitialized when used here [-Werror,-Wuninitialized] > 297 | writel(hrs37_mode, hrs37_reg); > | ^~~~~~~~~~ > drivers/mmc/host/sdhci-cadence.c:291:16: note: initialize the variable 'hrs37_mode' to silence this warning > 291 | u32 hrs37_mode; > | ^ > | = 0 > > A previous revision assigned SDHCI_CDNS_HRS37_MODE_MMC_HS200 to > hrs37_mode in a switch statement but the final revision moved to a > simple if statement. Pass that as the value to writel() and > remove hrs37_mode, clearing up the warning. > > Fixes: 60613a8b9b81 ("mmc: sdhci-cadence: implement multi-block read gap tuning") > Signed-off-by: Nathan Chancellor <nathan@kernel.org> > --- > drivers/mmc/host/sdhci-cadence.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-cadence.c b/drivers/mmc/host/sdhci-cadence.c > index a2a4a5b0ab96..eaa88897a256 100644 > --- a/drivers/mmc/host/sdhci-cadence.c > +++ b/drivers/mmc/host/sdhci-cadence.c > @@ -288,13 +288,12 @@ static int sdhci_cdns_tune_blkgap(struct mmc_host *mmc) > void __iomem *hrs38_reg = priv->hrs_addr + SDHCI_CDNS_HRS38; > int ret; > u32 gap; > - u32 hrs37_mode; > > /* Currently only needed in HS200 mode */ > if (host->timing != MMC_TIMING_MMC_HS200) > return 0; > > - writel(hrs37_mode, hrs37_reg); > + writel(SDHCI_CDNS_HRS37_MODE_MMC_HS200, hrs37_reg); > > for (gap = 0; gap <= SDHCI_CDNS_HRS38_BLKGAP_MAX; gap++) { > writel(gap, hrs38_reg); > Thanks for the catch! I don't get how gcc does not raise a warning here, only clang does. I did build with gcc-11 and gcc-15 and they don't complain about this uninitialized variable. Tested-by: Benoît Monin <benoit.monin@bootlin.com> > --- > base-commit: 7138017038c42feb682445407974ed736e1ff308 > change-id: 20250819-mmc-sdhci-cadence-fix-uninit-hrs37_mode-cc1246cb39d8 > > Best regards, > -- > Nathan Chancellor <nathan@kernel.org> > > Best regards, -- Benoît Monin, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] mmc: sdhci-cadence: Fix -Wuninitialized in sdhci_cdns_tune_blkgap() 2025-08-20 8:07 ` Benoît Monin @ 2025-08-20 10:43 ` Dan Carpenter 2025-08-20 16:20 ` Nathan Chancellor 0 siblings, 1 reply; 5+ messages in thread From: Dan Carpenter @ 2025-08-20 10:43 UTC (permalink / raw) To: Benoît Monin Cc: Nathan Chancellor, Adrian Hunter, Ulf Hansson, linux-mmc, llvm, patches On Wed, Aug 20, 2025 at 10:07:35AM +0200, Benoît Monin wrote: > > --- a/drivers/mmc/host/sdhci-cadence.c > > +++ b/drivers/mmc/host/sdhci-cadence.c > > @@ -288,13 +288,12 @@ static int sdhci_cdns_tune_blkgap(struct mmc_host *mmc) > > void __iomem *hrs38_reg = priv->hrs_addr + SDHCI_CDNS_HRS38; > > int ret; > > u32 gap; > > - u32 hrs37_mode; > > > > /* Currently only needed in HS200 mode */ > > if (host->timing != MMC_TIMING_MMC_HS200) > > return 0; > > > > - writel(hrs37_mode, hrs37_reg); > > + writel(SDHCI_CDNS_HRS37_MODE_MMC_HS200, hrs37_reg); > > > > for (gap = 0; gap <= SDHCI_CDNS_HRS38_BLKGAP_MAX; gap++) { > > writel(gap, hrs38_reg); > > > Thanks for the catch! > > I don't get how gcc does not raise a warning here, only clang does. I > did build with gcc-11 and gcc-15 and they don't complain about this > uninitialized variable. > We disabled uninitialized variable checking on GCC. It was too crazy and especially if we want to use -Werror. Smatch also detects this bug. regards, dan carpenter ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] mmc: sdhci-cadence: Fix -Wuninitialized in sdhci_cdns_tune_blkgap() 2025-08-20 10:43 ` Dan Carpenter @ 2025-08-20 16:20 ` Nathan Chancellor 0 siblings, 0 replies; 5+ messages in thread From: Nathan Chancellor @ 2025-08-20 16:20 UTC (permalink / raw) To: Dan Carpenter Cc: Benoît Monin, Adrian Hunter, Ulf Hansson, linux-mmc, llvm, patches On Wed, Aug 20, 2025 at 01:43:09PM +0300, Dan Carpenter wrote: > On Wed, Aug 20, 2025 at 10:07:35AM +0200, Benoît Monin wrote: > > > --- a/drivers/mmc/host/sdhci-cadence.c > > > +++ b/drivers/mmc/host/sdhci-cadence.c > > > @@ -288,13 +288,12 @@ static int sdhci_cdns_tune_blkgap(struct mmc_host *mmc) > > > void __iomem *hrs38_reg = priv->hrs_addr + SDHCI_CDNS_HRS38; > > > int ret; > > > u32 gap; > > > - u32 hrs37_mode; > > > > > > /* Currently only needed in HS200 mode */ > > > if (host->timing != MMC_TIMING_MMC_HS200) > > > return 0; > > > > > > - writel(hrs37_mode, hrs37_reg); > > > + writel(SDHCI_CDNS_HRS37_MODE_MMC_HS200, hrs37_reg); > > > > > > for (gap = 0; gap <= SDHCI_CDNS_HRS38_BLKGAP_MAX; gap++) { > > > writel(gap, hrs38_reg); > > > > > Thanks for the catch! > > > > I don't get how gcc does not raise a warning here, only clang does. I > > did build with gcc-11 and gcc-15 and they don't complain about this > > uninitialized variable. > > > > We disabled uninitialized variable checking on GCC. It was too crazy > and especially if we want to use -Werror. > > Smatch also detects this bug. Technically, -Wuninitialized is on for GCC as well but as soon as there is control flow between the declaration of the variable and its usage, it gets changed into -Wmaybe-uninitialized :/ In file included from arch/arm64/include/asm/io.h:288, from include/linux/io.h:12, from include/linux/iopoll.h:14, from drivers/mmc/host/sdhci-cadence.c:9: In function 'writel', inlined from 'sdhci_cdns_tune_blkgap' at drivers/mmc/host/sdhci-cadence.c:297:2, inlined from 'sdhci_cdns_execute_tuning' at drivers/mmc/host/sdhci-cadence.c:352:9: include/asm-generic/io.h:276:9: error: 'hrs37_mode' may be used uninitialized [-Werror=maybe-uninitialized] 276 | log_write_mmio(value, 32, addr, _THIS_IP_, _RET_IP_); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/mmc/host/sdhci-cadence.c: In function 'sdhci_cdns_execute_tuning': drivers/mmc/host/sdhci-cadence.c:291:13: note: 'hrs37_mode' was declared here 291 | u32 hrs37_mode; | ^~~~~~~~~~ vs diff --git a/drivers/mmc/host/sdhci-cadence.c b/drivers/mmc/host/sdhci-cadence.c index a2a4a5b0ab96..b968c0fb925d 100644 --- a/drivers/mmc/host/sdhci-cadence.c +++ b/drivers/mmc/host/sdhci-cadence.c @@ -290,12 +290,12 @@ static int sdhci_cdns_tune_blkgap(struct mmc_host *mmc) u32 gap; u32 hrs37_mode; + writel(hrs37_mode, hrs37_reg); + /* Currently only needed in HS200 mode */ if (host->timing != MMC_TIMING_MMC_HS200) return 0; - writel(hrs37_mode, hrs37_reg); - for (gap = 0; gap <= SDHCI_CDNS_HRS38_BLKGAP_MAX; gap++) { writel(gap, hrs38_reg); ret = mmc_read_tuning(mmc, 512, 32); In file included from arch/arm64/include/asm/io.h:288, from include/linux/io.h:12, from include/linux/iopoll.h:14, from drivers/mmc/host/sdhci-cadence.c:9: drivers/mmc/host/sdhci-cadence.c: In function 'sdhci_cdns_tune_blkgap': include/asm-generic/io.h:273:16: error: 'hrs37_mode' is used uninitialized [-Werror=uninitialized] 273 | #define writel writel drivers/mmc/host/sdhci-cadence.c:293:9: note: in expansion of macro 'writel' 293 | writel(hrs37_mode, hrs37_reg); | ^~~~~~ drivers/mmc/host/sdhci-cadence.c:291:13: note: 'hrs37_mode' was declared here 291 | u32 hrs37_mode; | ^~~~~~~~~~ It would be nice if GCC could adopt clang's semantics of "uninitialized when used _here_" for -Wuninitalized versus the current scheme of converting it to a "may be used uninitialized" warning. Cheers, Nathan ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] mmc: sdhci-cadence: Fix -Wuninitialized in sdhci_cdns_tune_blkgap() 2025-08-19 17:28 [PATCH] mmc: sdhci-cadence: Fix -Wuninitialized in sdhci_cdns_tune_blkgap() Nathan Chancellor 2025-08-20 8:07 ` Benoît Monin @ 2025-08-20 16:43 ` Ulf Hansson 1 sibling, 0 replies; 5+ messages in thread From: Ulf Hansson @ 2025-08-20 16:43 UTC (permalink / raw) To: Nathan Chancellor Cc: Adrian Hunter, Benoît Monin, linux-mmc, llvm, patches On Tue, 19 Aug 2025 at 19:29, Nathan Chancellor <nathan@kernel.org> wrote: > > Clang warns (or errors with CONFIG_WERROR=y): > > drivers/mmc/host/sdhci-cadence.c:297:9: error: variable 'hrs37_mode' is uninitialized when used here [-Werror,-Wuninitialized] > 297 | writel(hrs37_mode, hrs37_reg); > | ^~~~~~~~~~ > drivers/mmc/host/sdhci-cadence.c:291:16: note: initialize the variable 'hrs37_mode' to silence this warning > 291 | u32 hrs37_mode; > | ^ > | = 0 > > A previous revision assigned SDHCI_CDNS_HRS37_MODE_MMC_HS200 to > hrs37_mode in a switch statement but the final revision moved to a > simple if statement. Pass that as the value to writel() and > remove hrs37_mode, clearing up the warning. > > Fixes: 60613a8b9b81 ("mmc: sdhci-cadence: implement multi-block read gap tuning") > Signed-off-by: Nathan Chancellor <nathan@kernel.org> Applied for next, thanks! Kind regards Uffe > --- > drivers/mmc/host/sdhci-cadence.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-cadence.c b/drivers/mmc/host/sdhci-cadence.c > index a2a4a5b0ab96..eaa88897a256 100644 > --- a/drivers/mmc/host/sdhci-cadence.c > +++ b/drivers/mmc/host/sdhci-cadence.c > @@ -288,13 +288,12 @@ static int sdhci_cdns_tune_blkgap(struct mmc_host *mmc) > void __iomem *hrs38_reg = priv->hrs_addr + SDHCI_CDNS_HRS38; > int ret; > u32 gap; > - u32 hrs37_mode; > > /* Currently only needed in HS200 mode */ > if (host->timing != MMC_TIMING_MMC_HS200) > return 0; > > - writel(hrs37_mode, hrs37_reg); > + writel(SDHCI_CDNS_HRS37_MODE_MMC_HS200, hrs37_reg); > > for (gap = 0; gap <= SDHCI_CDNS_HRS38_BLKGAP_MAX; gap++) { > writel(gap, hrs38_reg); > > --- > base-commit: 7138017038c42feb682445407974ed736e1ff308 > change-id: 20250819-mmc-sdhci-cadence-fix-uninit-hrs37_mode-cc1246cb39d8 > > Best regards, > -- > Nathan Chancellor <nathan@kernel.org> > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-08-20 16:44 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-08-19 17:28 [PATCH] mmc: sdhci-cadence: Fix -Wuninitialized in sdhci_cdns_tune_blkgap() Nathan Chancellor 2025-08-20 8:07 ` Benoît Monin 2025-08-20 10:43 ` Dan Carpenter 2025-08-20 16:20 ` Nathan Chancellor 2025-08-20 16:43 ` Ulf Hansson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).