All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@arm.com>
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: artem_mygaiev@epam.com, lars.kurth@citrix.com,
	xen-devel@lists.xen.org, andrii_anisov@epam.com,
	dfaggioli@suse.com, nd@arm.com, volodymyr_babchuk@epam.com
Subject: Re: [PATCH v3 09/10] arm: add QEMU, Rcar3 and MPSoC configs
Date: Mon, 4 Jun 2018 16:58:58 +0100	[thread overview]
Message-ID: <68f9958e-bc21-06f8-e1cf-6022a64d6dc3@arm.com> (raw)
In-Reply-To: <alpine.DEB.2.10.1805311417540.23991@sstabellini-ThinkPad-X260>



On 05/31/2018 10:38 PM, Stefano Stabellini wrote:
> On Wed, 30 May 2018, Julien Grall wrote:
>> On 30/05/2018 22:39, Stefano Stabellini wrote:
>>> On Tue, 29 May 2018, Julien Grall wrote:
>>>> Hi Stefano,
>>>>
>>>> On 23/05/18 01:25, Stefano Stabellini wrote:
>>>>> Add a "Platform Support" menu with three umbrella kconfig options: QEMU,
>>>>> RCAR3 and MPSOC. They enable the required options for their hardware
>>>>> platform.
>>>>>
>>>>> They are introduced for convience: the user will be able to simply open
>>>>> the menu and enable the right config for her platform.
>>>>>
>>>>> Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
>>>>> CC: artem_mygaiev@epam.com
>>>>> CC: volodymyr_babchuk@epam.com
>>>>>
>>>>> ---
>>>>> Note that this approach has a limitation: it is not possible to "select
>>>>> a range". In other words, using tiny.config NR_CPUS is set to 4. It is
>>>>> not possible to increase it to 8 from config RCAR3.
>>>>
>>>> What you can do is:
>>>>
>>>> config NR_CPUS
>>>> 	range ...
>>>> 	default "8" if (RCAR3)
>>>>           default "x" if (QEMU)
>>>>    	default 64
>>>>
>>>> This would imply to move NR_CPUS in arch/{arm,x86}/Kconfig.
>>>>
>>>> This solution is not very nice, but at least would provide a better
>>>> experience
>>>> to the user.
>>>
>>> Unfortunately, make olddefconfig is executed automatically when make is
>>> called, adding CONFIG_NR_CPUS=128. Thus, unless tiny.config has already
>>> CONFIG_RCAR3 in it, the correct default won't be applied.
>>>
>>> This suggestions only make sense if we introduce per-platform configs,
>>> such as xen/arch/arm/configs/tiny-rcar3.config.
>>
>> The other solution is to introduce a new command (or script) that will select
>> the platform at the same time as olddefconfig.
>>
>> This would avoid to create a config per board and still keeping only one tiny
>> config.
>   
> I am not looking forward to making changes to the kconfig commands, but
> fortunately I was wrong on my previous reply: the issue was the order of
> the defaults in the range! To fix the problem I just had to:
> 
>      default "8" if ARM && RCAR3
> 	default "4" if ARM && QEMU
> 	default "4" if ARM && MPSOC
> 	default "256" if X86
> 	default "128" if ARM
> 
> 
>>>>> Suggestions are welcome.
>>>>> ---
>>>>>     xen/arch/arm/Kconfig           |  2 ++
>>>>>     xen/arch/arm/platforms/Kconfig | 30 ++++++++++++++++++++++++++++++
>>>>>     2 files changed, 32 insertions(+)
>>>>>     create mode 100644 xen/arch/arm/platforms/Kconfig
>>>>>
>>>>> diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
>>>>> index a5a6943..b5ddd12 100644
>>>>> --- a/xen/arch/arm/Kconfig
>>>>> +++ b/xen/arch/arm/Kconfig
>>>>> @@ -245,6 +245,8 @@ config ARM64_HARDEN_BRANCH_PREDICTOR
>>>>>     config ARM32_HARDEN_BRANCH_PREDICTOR
>>>>>         def_bool y if ARM_32 && HARDEN_BRANCH_PREDICTOR
>>>>>     +source "arch/arm/platforms/Kconfig"
>>>>> +
>>>>>     source "common/Kconfig"
>>>>>       source "drivers/Kconfig"
>>>>> diff --git a/xen/arch/arm/platforms/Kconfig
>>>>> b/xen/arch/arm/platforms/Kconfig
>>>>> new file mode 100644
>>>>> index 0000000..0eafbef
>>>>> --- /dev/null
>>>>> +++ b/xen/arch/arm/platforms/Kconfig
>>>>> @@ -0,0 +1,30 @@
>>>>> +menu "Platform Support"
>>>>> +
>>>>> +config QEMU
>>>>> +	bool "QEMU aarch virt machine support"
>>>>> +	default n
>>>> The default value is confusing here. The default .config will support QEMU
>>>> but
>>>> not select that.
>>>>
>>>> While I don't yet buy the argument, some users will also want to remove
>>>> platform specific code (Andrii suggest that). This would means by default
>>>> support for a specific platform will not be in Xen.
>>>>
>>>> Furthermore, very likely, the end user will select either one board (e.g
>>>> automotive) or all of them (e.g distribution).
>>>>
>>>> So I think it would be better to do a choice list:
>>>> 	- All -> Board support for all board added. Drivers selected by the
>>>> user
>>>> 	- MPSOC -> Select board support for Xilinx + appropriate drivers
>>>> 	- RCAR3 -> Select board support for RCAR3 + appropriate drivers
>>>>
>>>> The tiny.config would select ALL. This could then be refined by selecting
>>>> a
>>>> specific platform.
>>>
>>> The idea of an "ALL" configuration is interesting, however, all the
>>> options we would select under "ALL" already default to "Y". Effectively,
>>> if we remove the following lines from tiny.config:
>>>
>>> # CONFIG_GICV3 is not set
>>> # CONFIG_MEM_ACCESS is not set
>>> # CONFIG_SBSA_VUART_CONSOLE is not set
>>> # CONFIG_HAS_NS16550 is not set
>>> # CONFIG_HAS_CADENCE_UART is not set
>>> # CONFIG_HAS_MVEBU is not set
>>> # CONFIG_HAS_PL011 is not set
>>> # CONFIG_HAS_SCIF is not set
>>> # CONFIG_ARM_SMMU is not set
>>>
>>> then, it would be as if tiny.config had CONFIG_ALL=y, because after
>>> running `make olddefconfig' it would get all these options set to "Y".
>>>
>>> Given that make olddefconfig is always executed automatically by make, I
>>> cannot even remove the "is not set" options above from tiny.config
>>> because otherwise they will all be automatically enabled always unless I
>>> change all the defaults from Y to N.
>>>
>>> In fact, the main issue is that it is not possible to deselect Kconfig
>>> options using the Kconfig infrastructure. So, if a user has a
>>> config with CONFIG_ALL in it, then she executes `make menuconfig'
>>> to select RCAR3 and reduce the config size, the menu won't actually be
>>> able to deselect any other option automatically. This is very
>>> unfortunate. For instance, if the config has CADENCE_UART, and the user
>>> selects CONFIG_RCAR3 from the menu, the resulting config will still have
>>> CADENCE_UART, unless she goes to remove it by hand.
>>>
>>> Given all this, I don't know if it is worth introducing CONFIG_ALL. I
>>> could add something like:
>>>
>>> +config ALL
>>> +	bool "Support for all platforms"
>>> +	default y
>>> +	select GICv3
>>> +	select HAS_NS16550
>>> +	select HAS_CADENCE_UART
>>> +	select HAS_PL011
>>> +	select HAS_EXYNOS4210
>>> +	select HAS_MVEBU
>>> +	select HAS_OMAP
>>> +	select HAS_SCIF
>>> +	select ARM_SMMU
>>> +	---help---
>>> +	Enable support for all platforms. Triggers the build of a larger Xen
>>> +	binary but with more drivers.
>>> +
>>> +	If unsure, say Y.
>>>
>>> but my preference would be to avoid it because it just duplicates the
>>> default Y/N settings elsewhere.
>>
>> This is not what I suggested for all. What I suggested is the option All will
>> select all platforms/*.c file to build and does not select any drivers. The
>> user will have to chose the drivers. You can see it as a "custom" option.
>>
>> Also, by a list I meant:
>>
>> config PLATFORM_RCAR3
>>      ...
>>
>> choice
>>     prompt "Machine"
>>     default ....
>>
>> config ALL
>>     select PLATFORM_RCAR3
>>     select PLATFORM_XILINX
>>
>> config RCAR3
>>     prompt "RCAR 3 support"
>>     select PLATFORM_RCAR3
>>     select HAS_PL011
>>     select ...
>>
>> endchoice.
>>
>> The config PLATFORM_* would then be used in the Makefile
>>     xen-$(CONFIG_PLATFORM_XILINX) += xilinx.o
>>     ...
>>
>> I can also understand that there might be issue with the "All" option hence
>> why I suggested the "NONE" platform. This would select none of the PLATFORM_*.
> 
> Unfortunately it doesn't seem possible to have an option under a choice
> menu in kconfig that enables the other options. I get this error:
> 
>    arch/arm/platforms/Kconfig:1:error: recursive dependency detected!
>    arch/arm/platforms/Kconfig:1:   choice <choice> contains symbol ALL
>    arch/arm/platforms/Kconfig:9:   symbol ALL depends on QEMU
>    arch/arm/platforms/Kconfig:18:  symbol QEMU is part of choice <choice>
> 
> Given the lack of better alternatives, I'll stick with what I had
> before: all platforms can be enabled manually by ticking all the three
> boxes, however, I changed the default to y, so that they will all be
> selected in the menu by default. If you have a better suggestion please
> reply to the new patch series I'll send shortly.

Well, what you've implemented is not my suggestion. I never suggested 
that all select RCAR3. Instead it selects PLATFORM_RCAR3.

RCAR3 would select all the drivers + enable PLATFORM_RCAR3.
PLATFORM_RCAR3 would only be used to gate any potential code in platforms.

I would appreciate if you have a look again at my suggestion and explain 
why it would not work for you.

Cheers,

> 

-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  reply	other threads:[~2018-06-04 15:58 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-23  0:24 [PATCH v3 0/10] arm: more kconfig configurability and small default configs Stefano Stabellini
2018-05-23  0:24 ` [PATCH v3 01/10] arm: remove the ARM HDLCD driver Stefano Stabellini
2018-05-29 13:37   ` Julien Grall
2018-05-23  0:25 ` [PATCH v3 02/10] arm: make it possible to disable HAS_GICV3 Stefano Stabellini
2018-05-29 13:38   ` Julien Grall
2018-05-23  0:25 ` [PATCH v3 03/10] arm: rename HAS_GICV3 to GICV3 Stefano Stabellini
2018-05-29 13:39   ` Julien Grall
2018-05-23  0:25 ` [PATCH v3 04/10] Make MEM_ACCESS configurable Stefano Stabellini
2018-05-29 11:50   ` Jan Beulich
2018-05-30 20:24     ` Stefano Stabellini
2018-05-30 22:19       ` Tamas K Lengyel
2018-06-01  7:30       ` Jan Beulich
2018-05-23  0:25 ` [PATCH v3 05/10] make it possible to enable/disable UART drivers Stefano Stabellini
2018-05-29 12:02   ` Jan Beulich
2018-05-23  0:25 ` [PATCH v3 06/10] xen: remove HAS_ prefix from UART Kconfig options Stefano Stabellini
2018-05-29 12:06   ` Jan Beulich
2018-05-30 20:33     ` Stefano Stabellini
2018-05-23  0:25 ` [PATCH v3 07/10] arm: make it possible to disable the SMMU driver Stefano Stabellini
2018-05-23 17:54   ` Andrii Anisov
2018-05-23 19:16     ` Stefano Stabellini
2018-05-24  8:01       ` Andrii Anisov
2018-05-29 12:07   ` Jan Beulich
2018-05-29 13:40   ` Julien Grall
2018-05-23  0:25 ` [PATCH v3 08/10] arm: add a tiny kconfig configuration Stefano Stabellini
2018-05-23  0:25 ` [PATCH v3 09/10] arm: add QEMU, Rcar3 and MPSoC configs Stefano Stabellini
2018-05-29 14:07   ` Julien Grall
2018-05-30 21:39     ` Stefano Stabellini
2018-05-30 22:38       ` Julien Grall
2018-05-31 21:38         ` Stefano Stabellini
2018-06-04 15:58           ` Julien Grall [this message]
2018-05-23  0:25 ` [PATCH v3 10/10] xen: add cloc target Stefano Stabellini
2018-05-29 12:15   ` Jan Beulich
2018-05-30  0:50     ` Stefano Stabellini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=68f9958e-bc21-06f8-e1cf-6022a64d6dc3@arm.com \
    --to=julien.grall@arm.com \
    --cc=andrii_anisov@epam.com \
    --cc=artem_mygaiev@epam.com \
    --cc=dfaggioli@suse.com \
    --cc=lars.kurth@citrix.com \
    --cc=nd@arm.com \
    --cc=sstabellini@kernel.org \
    --cc=volodymyr_babchuk@epam.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.