Re: [PATCH u-boot-marvell v2 8/9] arm: mvebu: spl: Use IS_ENABLED() instead of #ifdef where possible

Marek Behún
2021-12-14T13:01:19Z

On Tue, 14 Dec 2021 13:48:31 +0100
Stefan Roese <sr@denx.de> wrote:

> On 12/14/21 13:45, Marek Behún wrote:
> > On Tue, 14 Dec 2021 12:12:34 +0100
> > Pali Rohár <pali@kernel.org> wrote:
> >
> >> On Tuesday 14 December 2021 10:45:15 Marek Behún wrote:
> >>> On Tue, 14 Dec 2021 10:36:00 +0100
> >>> Pali Rohár <pali@kernel.org> wrote:
> >>>
> >>>> On Friday 26 November 2021 15:37:37 Marek Behún wrote:
> >>>>> @@ -340,17 +333,17 @@ void board_init_f(ulong dummy)
> >>>>> timer_init();
> >>>>>
> >>>>> /* Armada 375 does not support SerDes and DDR3 init yet */
> >>>>> -#if !defined(CONFIG_ARMADA_375)
> >>>>> - /* First init the serdes PHY's */
> >>>>> - serdes_phy_config();
> >>>>> -
> >>>>> - /* Setup DDR */
> >>>>> - ret = ddr3_init();
> >>>>> - if (ret) {
> >>>>> - debug("ddr3_init() failed: %d\n", ret);
> >>>>> - hang();
> >>>>> + if (!IS_ENABLED(CONFIG_ARMADA_375)) {
> >>>>> + /* First init the serdes PHY's */
> >>>>> + serdes_phy_config();
> >>>>> +
> >>>>> + /* Setup DDR */
> >>>>> + ret = ddr3_init();
> >>>>> + if (ret) {
> >>>>> + debug("ddr3_init() failed: %d\n", ret);
> >>>>> + hang();
> >>>>> + }
> >>>>> }
> >>>>> -#endif
> >>>>
> >>>> As written in comment above there is no SerDes and DDR3 support for
> >>>> Armada 375 and therefore there is no serdes_phy_config() or ddr3_init()
> >>>> function. So this code needs not to be compiled at all and usage of
> >>>> #ifdef is correct here.
> >>>
> >>> #ifdefs are almost never correct in C-files, for the parts of the code
> >>> they guard isn't put through syntactic analysis, and can therefore
> >>> contain bugs which we are not warned about.
> >>>
> >>> Using if (IS_ENABLED()) almost never producess a different binary,
> >>> because the code is optimized away.
> >>>
> >>> Marek
> >>
> >> There is no function serdes_phy_config() for Armada 375, so if you put
> >> it outside of #ifdef you will get compile error.
> >
> > The function is always declared in
> > arch/arm/mach-mvebu/include/mach/cpu.h
> > regardless of architecture.
> >
> > Thus an error will be raised only when linking, and the compliation was
> > done with -O0, which I don't think anyone does.
> >
> > Anyway, if we want to support -O0, this can and should be solved via
> > defining serdes_phy_config() as empty static inline function in the
> > cpu.h header, guarded by #ifdef. In header files #ifdefs are allowed,
> > in this manner:
> > #if X
> > declare function
> > #else
> > define that function as empty static inline
> > #endif
> >
> > So if you think we should support -O0, I can do this.
> >
> > But the #ifdefs should really go away from real C code, that is the way
> > both Linux and U-Boot are trying to go for the last couple of years, if
> > I understand it correctly.
>
> Yes, the #ifdef's really should be avoided if possible. So *if* your
> patch above does not generate any build issues, then I don't see any
> problems to include it. I personally don't think that we need to support
> -O0 builds.

db-88f6720_defconfig builds without issue (armada 375). And it builds the
relevant file, spl/arch/arm/mach-mvebu/spl.o.

Marek