xen-devel.lists.xenproject.org archive mirror
 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 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).