Patchwork Fix select-induced Kconfig warning for ZBOOT_ROM

login
register
mail settings
Submitter Arnd Bergmann
Date Jan. 8, 2014, 8:20 a.m.
Message ID <3792319.Wf518ByjFs@wuerfel>
Download mbox | patch
Permalink /patch/308087/
State New
Headers show

Comments

Arnd Bergmann - Jan. 8, 2014, 8:20 a.m.
On Wednesday 08 January 2014 13:32:35 Viresh Kumar wrote:
> On Thu, Jan 2, 2014 at 9:53 PM, Russell King
> <rmk+kernel@arm.linux.org.uk> wrote:
> > warning: (ARCH_MULTIPLATFORM && ARCH_CLPS711X && ARCH_PXA &&
> >  SOC_EXYNOS5440 && ARCH_EMEV2) selects AUTO_ZRELADDR which
> >  has unmet direct dependencies (!ZBOOT_ROM)
> >
> > This is because it's possible to have ZBOOT_ROM enabled, but at the
> > same time have another option enabled which selects AUTO_ZRELADDR
> > overriding the !ZBOOT_ROM dependency.  Fix this by reversing the
> > dependencies between ZBOOT_ROM and the options which depend on
> > !ZBOOT_ROM.
> >
> > Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
> > ---
> 
> After this patch I see these warnings with exynos_defconfig
> 
> arch/arm/Kconfig:1963:error: recursive dependency detected!
> arch/arm/Kconfig:1963: symbol ZBOOT_ROM depends on AUTO_ZRELADDR
> arch/arm/Kconfig:2151: symbol AUTO_ZRELADDR is selected by ZBOOT_ROM
> 
> I am not really sure why this happened as I don't see AUTO_ZRELADDR
> selected by ZBOOT_ROM in Kconfig :)

It's a weird dependency. You need this hunk:
viresh kumar - Jan. 8, 2014, 8:26 a.m.
On 8 January 2014 13:50, Arnd Bergmann <arnd@arndb.de> wrote:
> It's a weird dependency. You need this hunk:
>
> --- a/arch/arm/mach-imx/Kconfig
> +++ b/arch/arm/mach-imx/Kconfig
> @@ -3,7 +3,7 @@ config ARCH_MXC
>         select ARCH_REQUIRE_GPIOLIB
>         select ARM_CPU_SUSPEND if PM
>         select ARM_PATCH_PHYS_VIRT
> -       select AUTO_ZRELADDR if !ZBOOT_ROM
> +       select AUTO_ZRELADDR
>         select CLKSRC_MMIO
>         select COMMON_CLK
>         select GENERIC_ALLOCATOR

Exynos already has this:

arch/arm/mach-exynos/Kconfig
config SOC_EXYNOS5440
    ...
    select AUTO_ZRELADDR
Arnd Bergmann - Jan. 8, 2014, 9:07 a.m.
On Wednesday 08 January 2014 13:56:38 Viresh Kumar wrote:
> On 8 January 2014 13:50, Arnd Bergmann <arnd@arndb.de> wrote:
> > It's a weird dependency. You need this hunk:
> >
> > --- a/arch/arm/mach-imx/Kconfig
> > +++ b/arch/arm/mach-imx/Kconfig
> > @@ -3,7 +3,7 @@ config ARCH_MXC
> >         select ARCH_REQUIRE_GPIOLIB
> >         select ARM_CPU_SUSPEND if PM
> >         select ARM_PATCH_PHYS_VIRT
> > -       select AUTO_ZRELADDR if !ZBOOT_ROM
> > +       select AUTO_ZRELADDR
> >         select CLKSRC_MMIO
> >         select COMMON_CLK
> >         select GENERIC_ALLOCATOR
> 
> Exynos already has this:
> 
> arch/arm/mach-exynos/Kconfig
> config SOC_EXYNOS5440
>     ...
>     select AUTO_ZRELADDR

Yes, that is ok. The problem with the imx dependency is that the kconfig
parser needs to know the state of the ZBOOT_ROM symbol in order to decide
whether to select AUTO_ZRELADDR or not, but ZBOOT_ROM in turn depends on
AUTO_ZRELADDR.

On second thought, we should just remove the 'select AUTO_ZRELADDR' from
ARCH_MXC and everything that is multiplatform enabled, since it's already
selected by ARCH_MULTIPLATFORM. An interesting question is what to do
about the case where you actually want ZBOOT_ROM with a multiplatform
enabled machine. We should probably allow that, but it's not possible
to express that in Kconfig as long as ZBOOT_ROM depends on !AUTO_ZRELADDR.
Obviously such a kernel won't be true multiplatform (it will only
work on systems with the right rom address), but I think that's ok as
long as it's documented well and not enabled by default. This is similar
to what we need to allow non-MMU builds for multiplatform machines.

	Arnd
viresh kumar - Jan. 8, 2014, 9:12 a.m.
On 8 January 2014 14:37, Arnd Bergmann <arnd@arndb.de> wrote:
>> > --- a/arch/arm/mach-imx/Kconfig
>> > +++ b/arch/arm/mach-imx/Kconfig
>> > @@ -3,7 +3,7 @@ config ARCH_MXC
>> >         select ARCH_REQUIRE_GPIOLIB
>> >         select ARM_CPU_SUSPEND if PM
>> >         select ARM_PATCH_PHYS_VIRT
>> > -       select AUTO_ZRELADDR if !ZBOOT_ROM
>> > +       select AUTO_ZRELADDR
>> >         select CLKSRC_MMIO
>> >         select COMMON_CLK
>> >         select GENERIC_ALLOCATOR
>>
>> Exynos already has this:
>>
>> arch/arm/mach-exynos/Kconfig
>> config SOC_EXYNOS5440
>>     ...
>>     select AUTO_ZRELADDR
>
> Yes, that is ok. The problem with the imx dependency is that the kconfig
> parser needs to know the state of the ZBOOT_ROM symbol in order to decide
> whether to select AUTO_ZRELADDR or not, but ZBOOT_ROM in turn depends on
> AUTO_ZRELADDR.
>
> On second thought, we should just remove the 'select AUTO_ZRELADDR' from
> ARCH_MXC and everything that is multiplatform enabled, since it's already
> selected by ARCH_MULTIPLATFORM. An interesting question is what to do
> about the case where you actually want ZBOOT_ROM with a multiplatform
> enabled machine. We should probably allow that, but it's not possible
> to express that in Kconfig as long as ZBOOT_ROM depends on !AUTO_ZRELADDR.
> Obviously such a kernel won't be true multiplatform (it will only
> work on systems with the right rom address), but I think that's ok as
> long as it's documented well and not enabled by default. This is similar
> to what we need to allow non-MMU builds for multiplatform machines.

I see.. So, I confirm that above diff fixes my issue.
Thierry Reding - Jan. 13, 2014, 11:52 a.m.
On Wed, Jan 08, 2014 at 09:20:10AM +0100, Arnd Bergmann wrote:
> On Wednesday 08 January 2014 13:32:35 Viresh Kumar wrote:
> > On Thu, Jan 2, 2014 at 9:53 PM, Russell King
> > <rmk+kernel@arm.linux.org.uk> wrote:
> > > warning: (ARCH_MULTIPLATFORM && ARCH_CLPS711X && ARCH_PXA &&
> > >  SOC_EXYNOS5440 && ARCH_EMEV2) selects AUTO_ZRELADDR which
> > >  has unmet direct dependencies (!ZBOOT_ROM)
> > >
> > > This is because it's possible to have ZBOOT_ROM enabled, but at the
> > > same time have another option enabled which selects AUTO_ZRELADDR
> > > overriding the !ZBOOT_ROM dependency.  Fix this by reversing the
> > > dependencies between ZBOOT_ROM and the options which depend on
> > > !ZBOOT_ROM.
> > >
> > > Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
> > > ---
> > 
> > After this patch I see these warnings with exynos_defconfig
> > 
> > arch/arm/Kconfig:1963:error: recursive dependency detected!
> > arch/arm/Kconfig:1963: symbol ZBOOT_ROM depends on AUTO_ZRELADDR
> > arch/arm/Kconfig:2151: symbol AUTO_ZRELADDR is selected by ZBOOT_ROM
> > 
> > I am not really sure why this happened as I don't see AUTO_ZRELADDR
> > selected by ZBOOT_ROM in Kconfig :)
> 
> It's a weird dependency. You need this hunk:
> 
> --- a/arch/arm/mach-imx/Kconfig
> +++ b/arch/arm/mach-imx/Kconfig
> @@ -3,7 +3,7 @@ config ARCH_MXC
>         select ARCH_REQUIRE_GPIOLIB
>         select ARM_CPU_SUSPEND if PM
>         select ARM_PATCH_PHYS_VIRT
> -       select AUTO_ZRELADDR if !ZBOOT_ROM
> +       select AUTO_ZRELADDR
>         select CLKSRC_MMIO
>         select COMMON_CLK
>         select GENERIC_ALLOCATOR

Hi Arnd,

I haven't seen this go into linux-next yet. Do you plan on sending a
patch for this?

Thierry
Russell King - ARM Linux - Jan. 13, 2014, 1:48 p.m.
On Mon, Jan 13, 2014 at 12:52:10PM +0100, Thierry Reding wrote:
> On Wed, Jan 08, 2014 at 09:20:10AM +0100, Arnd Bergmann wrote:
> > --- a/arch/arm/mach-imx/Kconfig
> > +++ b/arch/arm/mach-imx/Kconfig
> > @@ -3,7 +3,7 @@ config ARCH_MXC
> >         select ARCH_REQUIRE_GPIOLIB
> >         select ARM_CPU_SUSPEND if PM
> >         select ARM_PATCH_PHYS_VIRT
> > -       select AUTO_ZRELADDR if !ZBOOT_ROM
> > +       select AUTO_ZRELADDR
> >         select CLKSRC_MMIO
> >         select COMMON_CLK
> >         select GENERIC_ALLOCATOR
> 
> Hi Arnd,
> 
> I haven't seen this go into linux-next yet. Do you plan on sending a
> patch for this?

Maybe someone should respond to this comment from Arnd:

| On second thought, we should just remove the 'select AUTO_ZRELADDR' from
| ARCH_MXC and everything that is multiplatform enabled, since it's already
| selected by ARCH_MULTIPLATFORM.

which I think is the right way to go here.  The ARCH_MXC option is
hidden when multiplatform is not enabled.  When it is enabled,
AUTO_ZRELADDR is selected by the multiplatform option.  So having a
"select AUTO_ZRELADDR" of any kind under ARCH_MXC is entirely
redundant.

Patch

--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -3,7 +3,7 @@  config ARCH_MXC
        select ARCH_REQUIRE_GPIOLIB
        select ARM_CPU_SUSPEND if PM
        select ARM_PATCH_PHYS_VIRT
-       select AUTO_ZRELADDR if !ZBOOT_ROM
+       select AUTO_ZRELADDR
        select CLKSRC_MMIO
        select COMMON_CLK
        select GENERIC_ALLOCATOR