[PATCH v3] powerpc/defconfig: new way of writing defconfig

Lijun Pan Lijun.Pan at freescale.com
Mon Jun 1 15:04:17 AEST 2015



> -----Original Message-----
> From: Wood Scott-B07421
> Sent: Wednesday, May 13, 2015 5:18 PM
> To: Pan Lijun-B44306
> Cc: linuxppc-dev at ozlabs.org
> Subject: Re: [PATCH v3] powerpc/defconfig: new way of writing defconfig
> 
> On Mon, 2015-05-11 at 23:39 -0500, Lijun Pan wrote:
> > It is always a headache dealing with different defconfigs though they
> > only differ in a few places. Hence we are proposing a new way of
> > writing the defconfig:
> > 1. Define a basic defconfig say mpc85xx_basic_defconfig 2. Spin off as
> > much features as possible from the current mpc85xx_defconfig
> > 	and create a separate config file, say, smp.config, kvm_500.config
> > Every time we add a new feature, we don't need to change several
> > defconfigs, we just add a new *.config And you could merge any
> > fragments you want into .config with the current kconfig in Kernel.
> >
> > Say you want to build mpc85xx_smp_defconfig, you do 7 steps:
> > make mpc85xx_basic_defconfig
> > make 32bit.config
> > make smp.config
> > make cpu8.config
> > make kvm_e500.config
> > make uart2.config
> > make i2c.config
> >
> > With the new rules added into arch/powerpc/Makefile, you can do it in
> > one step:
> > make mpc85xx_smp_defconfig
> 
> We currently do it in one step.  The 7 step version exists only in previous
> versions of this patch, and won't be in the git history, so such comments should
> go beneath the --- line.

Sure, I will put them beneath --- line in the next patch.

> 
> > directory "scottwood" has my patch,
> > directory "scottwood" does not have my patch
> 
> You shouldn't be working off of my repository unless it has patches (that you
> need or that would conflict) that haven't yet been merged upstream.

I am working off an old commit. See the result from $"git log"
17a0f33 powerpc/defconfig: new way of writing defconfig
d41444d powerpc/corenet: enable CONFIG_I2C_MUX and CONFIG_I2C_MUX_PCA954x
7f9af0a powerpc/t2080qds: fix rtc interrupt
56302c5 powerpc/mpic: Remove WHOAMI readback after EOI
 

> > [b44306 at b44306-12 scottwood]$ ./scripts/diffconfig
> > ../scottwood2/.config .config  EPAPR_PARAVIRT n -> y  KVM_GUEST n -> y
> >  PPC_QEMU_E500 n -> y
> > // these changes are expected since mpc85xx_smp_defconfig has enabled
> kvm_e500.config in freescale's internal git repo.	>
> 
> What does our internal git repo have to do with anything?

I will take off kvm_e500.config if upstream defconfig does have these.
I will add kvm_e500.config later.

> 
> > diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index
> > fc502e0..7c80298 100644
> > --- a/arch/powerpc/Makefile
> > +++ b/arch/powerpc/Makefile
> > @@ -269,6 +269,52 @@ bootwrapper_install:
> >  %.dtb: scripts
> >  	$(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot)
> $(patsubst %,$(boot)/%,$@)
> >
> > +configfiles=$(wildcard $(srctree)/kernel/configs/$(1).config
> > +$(srctree)/arch/$(SRCARCH)/configs/$(1).config)
> > +
> > +define mergeconfig
> > +$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m -O
> > +$(objtree)/arch/$(SRCARCH)/configs
> > +$(objtree)/arch/$(SRCARCH)/configs/.config $(call configfiles,$(1))
> > +endef
> 
> Why not invoke make with the <whatever>.config target instead?

I first merge (no any make) all the config fragments into one, then make it.
This is a way to make sure the .config after this patch the same as .config before this patch.

> 
> > +
> > +mpc85xx_defconfig:
> > +	$(Q)cp $(srctree)/arch/$(SRCARCH)/configs/mpc85xx_basic_defconfig
> > +$(srctree)/arch/$(SRCARCH)/configs/.config
> 
> Don't modify $(srctree), ever.  Why not just depend on the
> mpc85xx_basic_defconfig target?
> 
> > +	$(call mergeconfig,32-bit)
> > +	$(call mergeconfig,uart6)
> > +	$(call mergeconfig,mpc85xx_misc)
> > +	$(Q)mv $(objtree)/arch/$(SRCARCH)/configs/.config
> $(objtree)/arch/$(SRCARCH)/configs/mpc85xx_tmp_defconfig
> > +	$(Q)$(MAKE) -f $(srctree)/Makefile mpc85xx_tmp_defconfig
> > +
> > +mpc85xx_smp_defconfig:
> > +	$(Q)cp $(srctree)/arch/$(SRCARCH)/configs/mpc85xx_basic_defconfig
> $(srctree)/arch/$(SRCARCH)/configs/.config
> > +	$(call mergeconfig,32-bit)
> > +	$(call mergeconfig,smp)
> > +	$(call mergeconfig,cpu8)
> > +	$(call mergeconfig,kvm_e500)
> > +	$(call mergeconfig,uart2)
> > +	$(call mergeconfig,i2c)
> > +	$(Q)mv $(objtree)/arch/$(SRCARCH)/configs/.config
> $(objtree)/arch/$(SRCARCH)/configs/mpc85xx_smp_tmp_defconfig
> > +	$(Q)$(MAKE) -f $(srctree)/Makefile mpc85xx_smp_tmp_defconfig
> 
> There shouldn't be any difference besides "SMP" for mpc85xx_defconfig
> versus mpc85xx_smp_defconfig.  I know someone previously asked you to
> ensure this didn't change the results, but I think this is a good opportunity to
> get rid of gratuitous differences, as long as you show what the diff is between
> old and new so we can verify that the changes are beneficial.
> 

There are quite a lot difference between mcp85xx_defconfig and mpc85xx_smp_config.
Can you tell me which configs could be removed or neglected?

> > +corenet32_smp_defconfig:
> > +	$(Q)cp $(srctree)/arch/$(SRCARCH)/configs/corenet_defconfig
> $(srctree)/arch/$(SRCARCH)/configs/.config
> > +	$(call mergeconfig,32-bit)
> 
> Isn't the basic config already 32-bit?

Basic does not contain bit info.
Mpc85xx_ is 32-bit.
Mpc85xx_smp_ is 64-bit.

> 
> > +	$(call mergeconfig,smp)
> > +	$(call mergeconfig,cpu8)
> > +	$(call mergeconfig,corenet32_misc)
> > +	$(Q)mv $(objtree)/arch/$(SRCARCH)/configs/.config
> $(objtree)/arch/$(SRCARCH)/configs/corenet32_smp_tmp_defconfig
> > +	$(Q)$(MAKE) -f $(srctree)/Makefile corenet32_smp_tmp_defconfig
> > +
> > +corenet64_smp_defconfig:
> > +	$(Q)cp $(srctree)/arch/$(SRCARCH)/configs/corenet_defconfig
> $(srctree)/arch/$(SRCARCH)/configs/.config
> > +	$(call mergeconfig,64-bit)
> > +	$(call mergeconfig,smp)
> > +	$(call mergeconfig,cpu24)
> > +	$(call mergeconfig,dma)
> > +	$(call mergeconfig,math_emulation)
> > +	$(call mergeconfig,cgroup)
> > +	$(call mergeconfig,corenet64_misc)
> > +	$(Q)mv $(objtree)/arch/$(SRCARCH)/configs/.config
> $(objtree)/arch/$(SRCARCH)/configs/corenet64_smp_tmp_defconfig
> > +	$(Q)$(MAKE) -f $(srctree)/Makefile corenet64_smp_tmp_defconfig
> 
> math emulation?

Only mpc85xx_smp_ has these configs.
Hence I extracted them and name them math_emulation.
Any suggestion on where I put these configs?

> 
> >  define archhelp
> >    @echo '* zImage          - Build default images selected by kernel config'
> >    @echo '  zImage.*        - Compressed kernel image
> (arch/$(ARCH)/boot/zImage.*)'
> > diff --git a/arch/powerpc/configs/32-bit.config
> > b/arch/powerpc/configs/32-bit.config
> > new file mode 100644
> > index 0000000..3b8b43b
> > --- /dev/null
> > +++ b/arch/powerpc/configs/32-bit.config
> > @@ -0,0 +1 @@
> > +CONFIG_PPC_85xx=y
> 
> Not all 32-bit platforms are 85xx.

How about name it ppc_85.config

> 
> > diff --git a/arch/powerpc/configs/64-bit.config
> > b/arch/powerpc/configs/64-bit.config
> > new file mode 100644
> > index 0000000..b53af55
> > --- /dev/null
> > +++ b/arch/powerpc/configs/64-bit.config
> > @@ -0,0 +1,3 @@
> > +CONFIG_PPC64=y
> > +CONFIG_PPC_BOOK3E_64=y
> > +CONFIG_ALTIVEC=y
> 
> Not all 64-bit platforms are book3e, and Altivec should probably be separate,
> especially given the impact it has on -mcpu.

How about have three configs:
ppc64.config (CONFIG_PPC64=Y)
booke3e.config (CONFIG_PPC_BOOK3E_64=y)
altivec.config (CONFIG_ALTIVEC=y)

> 
> > diff --git a/arch/powerpc/configs/cgroup.config
> > b/arch/powerpc/configs/cgroup.config
> > new file mode 100644
> > index 0000000..a6012a3
> > --- /dev/null
> > +++ b/arch/powerpc/configs/cgroup.config
> > @@ -0,0 +1,4 @@
> > +CONFIG_CGROUPS=y
> > +CONFIG_CPUSETS=y
> > +CONFIG_CGROUP_CPUACCT=y
> > +CONFIG_CGROUP_SCHED=y
> 
> Is there any significant downside to enabling this?  As I think I said before, I was
> hoping for one largeish fragment for all non-hardware-specific stuff that we
> want to enable by default on all of our configs.

I extracted these cgroups stuff out of mpc85xx_smp_.
What config fragment do you suggest putting these CONFIG_CGROUPS stuff to?

> 
> I don't want it to be super-fine-grained, and I especially don't want some
> eclectic mix of fine-grained and course-grained.
> 
> > diff --git a/arch/powerpc/configs/corenet32_misc.config
> > b/arch/powerpc/configs/corenet32_misc.config
> > new file mode 100644
> > index 0000000..4ad0ea1
> > --- /dev/null
> > +++ b/arch/powerpc/configs/corenet32_misc.config
> > @@ -0,0 +1,36 @@
> > +CONFIG_AT803X_PHY=y
> > +CONFIG_AUDIT=y
> > +CONFIG_CHR_DEV_ST=y
> > +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=n
> > +CONFIG_CRAMFS=y
> > +CONFIG_E1000=y
> > +CONFIG_EDAC_MPC85XX=y
> > +CONFIG_EMBEDDED=y
> > +CONFIG_EXT3_DEFAULTS_TO_ORDERED=n
> > +CONFIG_FORCE_MAX_ZONEORDER=13
> > +CONFIG_HIGHMEM=y
> > +CONFIG_INET_AH=y
> > +CONFIG_INET_IPCOMP=y
> > +CONFIG_KEXEC=y
> > +CONFIG_LEGACY_PTYS=n
> > +CONFIG_NET_KEY_MIGRATE=y
> > +CONFIG_NVRAM=y
> > +CONFIG_PATA_SIL680=y
> > +CONFIG_PCI=y
> > +CONFIG_PCIEASPM=n
> > +CONFIG_PERF_EVENTS=y
> > +CONFIG_POSIX_MQUEUE=y
> > +CONFIG_PPC_85xx=y
> > +CONFIG_RCU_TRACE=y
> > +CONFIG_SATA_AHCI=y
> > +CONFIG_SATA_SIL=y
> > +CONFIG_SCSI_LOGGING=y
> > +CONFIG_SCSI_SYM53C8XX_2=y
> > +CONFIG_SLAB=y
> > +CONFIG_STAGING=y
> > +CONFIG_UIO=y
> > +CONFIG_USB_OHCI_HCD=y
> > +CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
> > +CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
> > +CONFIG_XFRM_STATISTICS=y
> > +CONFIG_XFRM_SUB_POLICY=y
> 
> None of this is 32-bit specific.

Above are the stuff mpc85xx_ has but mpc85xx_smp_ does not.
How do we handle these CONFIGs? Any idea?

> 
> > diff --git a/arch/powerpc/configs/corenet64_misc.config
> > b/arch/powerpc/configs/corenet64_misc.config
> > new file mode 100644
> > index 0000000..c079055
> > --- /dev/null
> > +++ b/arch/powerpc/configs/corenet64_misc.config
> > @@ -0,0 +1,16 @@
> > +CONFIG_BLK_DEV_SR_VENDOR=y
> > +CONFIG_CRC_T10DIF=y
> > +CONFIG_DEBUG_FS=y
> > +CONFIG_DUMMY=y
> > +CONFIG_EEPROM_LEGACY=y
> > +CONFIG_EXPERT=y
> > +CONFIG_FHANDLE=y
> > +CONFIG_FRAME_WARN=1024
> > +CONFIG_FTL=y
> > +CONFIG_INET_XFRM_MODE_BEET=n
> > +CONFIG_INPUT_FF_MEMLESS=m
> > +CONFIG_IRQ_DOMAIN_DEBUG=y
> > +CONFIG_JFFS2_FS_DEBUG=1
> > +CONFIG_MTD_UBI=y
> > +CONFIG_PPC_OF_BOOT_TRAMPOLINE=n
> > +CONFIG_UBIFS_FS=y
> 
> None of this is 64-bit specific.

Above are the stuff mpc85xx_smp_ has but mpc85xx_ does not.
How do we handle these CONFIGs? Any idea?

> 
> > diff --git a/arch/powerpc/configs/corenet64_smp_defconfig
> > b/arch/powerpc/configs/corenet_defconfig
> > similarity index 83%
> > rename from arch/powerpc/configs/corenet64_smp_defconfig
> > rename to arch/powerpc/configs/corenet_defconfig
> > index 33cd1df..89c43ee 100644
> > --- a/arch/powerpc/configs/corenet64_smp_defconfig
> > +++ b/arch/powerpc/configs/corenet_defconfig
> 
> Why is "corenet_defconfig" not "basic" like "mpc85xx_basic_defconfig"?

I will rename it to corenet_basic_defconfig

> 
> > diff --git a/arch/powerpc/configs/cpu24.config
> > b/arch/powerpc/configs/cpu24.config
> > new file mode 100644
> > index 0000000..08d2f61
> > --- /dev/null
> > +++ b/arch/powerpc/configs/cpu24.config
> > @@ -0,0 +1 @@
> > +CONFIG_NR_CPUS=24
> > diff --git a/arch/powerpc/configs/cpu8.config
> > b/arch/powerpc/configs/cpu8.config
> > new file mode 100644
> > index 0000000..8832f89
> > --- /dev/null
> > +++ b/arch/powerpc/configs/cpu8.config
> > @@ -0,0 +1 @@
> > +CONFIG_NR_CPUS=8
> 
> Move this to the basic config file for the CPU family.
 
But corenet32_smp_ has 8 cores while corenet64_smp_ has 24 cores.
What do we do?

> > diff --git a/arch/powerpc/configs/dma.config
> > b/arch/powerpc/configs/dma.config new file mode 100644 index
> > 0000000..f0e66b5
> > --- /dev/null
> > +++ b/arch/powerpc/configs/dma.config
> > @@ -0,0 +1,2 @@
> > +CONFIG_DMADEVICES=y
> > +CONFIG_FSL_DMA=y
> 
> Why does this need to be separate?

Only corenet64_smp_ has dma while corenet32_smp_ does not.

> 
> > diff --git a/arch/powerpc/configs/i2c.config
> > b/arch/powerpc/configs/i2c.config new file mode 100644 index
> > 0000000..aafb657
> > --- /dev/null
> > +++ b/arch/powerpc/configs/i2c.config
> > @@ -0,0 +1 @@
> > +CONFIG_I2C=y
> > diff --git a/arch/powerpc/configs/kvm_e500.config
> > b/arch/powerpc/configs/kvm_e500.config
> > new file mode 100644
> > index 0000000..615b0a0
> > --- /dev/null
> > +++ b/arch/powerpc/configs/kvm_e500.config
> > @@ -0,0 +1,2 @@
> > +CONFIG_KVM_GUEST=y
> > +CONFIG_PPC_QEMU_E500=y
> 
> CONFIG_PPC_QEMU_E500 should be always enabled like any other target.
> 
> As for KVM guest support, the standard name for this is kvm_guest.config
> based on the rule in scripts/kconfig/Makefile, and it should also include
> common virtio drivers.

How about kvm_guest.config (
CONFIG_KVM_GUEST=y
CONFIG_PPC_QEMU_E500=y
CONFIG_VIRT_DRIVERS=y)?
Anything else need to be added into kvm_guest.config?

> 
> > diff --git a/arch/powerpc/configs/math_emulation.config
> > b/arch/powerpc/configs/math_emulation.config
> > new file mode 100644
> > index 0000000..fa2fb66
> > --- /dev/null
> > +++ b/arch/powerpc/configs/math_emulation.config
> > @@ -0,0 +1,2 @@
> > +CONFIG_MATH_EMULATION=y
> > +CONFIG_MATH_EMULATION_HW_UNIMPLEMENTED=y
> > diff --git a/arch/powerpc/configs/mpc85xx_smp_defconfig
> > b/arch/powerpc/configs/mpc85xx_basic_defconfig
> > similarity index 97%
> > rename from arch/powerpc/configs/mpc85xx_smp_defconfig
> > rename to arch/powerpc/configs/mpc85xx_basic_defconfig
> 
> mpc85xx_smp_defconfig contains a lot of things that I wouldn't consider
> "basic" (obscure filesystems, HID drivers, etc), though I suppose that could be a
> later cleanup.

I could do some cleanup later after this patch. 
Do you have any suggestion what part of configurations need to be removed?

> 
> > index b6c7111..8cb47f4 100644
> > --- a/arch/powerpc/configs/mpc85xx_smp_defconfig
> > +++ b/arch/powerpc/configs/mpc85xx_basic_defconfig
> > @@ -1,7 +1,4 @@
> > -CONFIG_PPC_85xx=y
> >  CONFIG_PHYS_64BIT=y
> > -CONFIG_SMP=y
> > -CONFIG_NR_CPUS=8
> >  CONFIG_SYSVIPC=y
> >  CONFIG_POSIX_MQUEUE=y
> >  CONFIG_AUDIT=y
> > @@ -128,14 +125,11 @@ CONFIG_INPUT_FF_MEMLESS=m
> CONFIG_SERIO_LIBPS2=y
> > CONFIG_SERIAL_8250=y  CONFIG_SERIAL_8250_CONSOLE=y
> > -CONFIG_SERIAL_8250_NR_UARTS=2
> > -CONFIG_SERIAL_8250_RUNTIME_UARTS=2
> >  CONFIG_SERIAL_8250_MANY_PORTS=y
> >  CONFIG_SERIAL_8250_DETECT_IRQ=y
> >  CONFIG_SERIAL_8250_RSA=y
> >  CONFIG_SERIAL_QE=m
> >  CONFIG_NVRAM=y
> > -CONFIG_I2C=y
> >  CONFIG_I2C_CHARDEV=y
> >  CONFIG_I2C_CPM=m
> >  CONFIG_I2C_MPC=y
> 
> Why no i2c?

Mpc85xx_smp_ has i2c while mpc85xx_ does not.
Shall I add i2c to mpc85xx_basic_defconfig such that both mpc85xx and mpc85xx_smp_ have i2c? 

> 
> > --- /dev/null
> > +++ b/arch/powerpc/configs/uart2.config
> > @@ -0,0 +1,2 @@
> > +CONFIG_SERIAL_8250_NR_UARTS=2
> > +CONFIG_SERIAL_8250_RUNTIME_UARTS=2
> > diff --git a/arch/powerpc/configs/uart6.config
> > b/arch/powerpc/configs/uart6.config
> > new file mode 100644
> > index 0000000..c7150c9
> > --- /dev/null
> > +++ b/arch/powerpc/configs/uart6.config
> > @@ -0,0 +1,2 @@
> > +CONFIG_SERIAL_8250_NR_UARTS=6
> > +CONFIG_SERIAL_8250_RUNTIME_UARTS=6
> 
> What's the harm in always setting it to 6?

I will set CONFIG_SERIAL_8250_NR_UARTS=6 for both mpc85xx_ and mpc85xx_smp_.

> 
> -Scott
> 



More information about the Linuxppc-dev mailing list