diff mbox series

[17/51] i386: express dependencies with Kconfig

Message ID 1549562254-41157-18-git-send-email-pbonzini@redhat.com
State New
Headers show
Series Support Kconfig in QEMU | expand

Commit Message

Paolo Bonzini Feb. 7, 2019, 5:57 p.m. UTC
This way, the default-configs file only need to specify the boards
and any optional devices.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Yang Zhong <yang.zhong@intel.com>
Message-Id: <20190123065618.3520-37-yang.zhong@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 default-configs/i386-softmmu.mak | 45 ++++++++----------------------------
 hw/acpi/Kconfig                  |  3 +++
 hw/i2c/Makefile.objs             |  2 +-
 hw/i386/Kconfig                  | 50 ++++++++++++++++++++++++++++++++++++++++
 hw/i386/Makefile.objs            |  5 ++--
 hw/isa/Kconfig                   |  1 +
 hw/pci-host/Kconfig              |  4 ++++
 hw/tpm/Kconfig                   |  2 ++
 8 files changed, 73 insertions(+), 39 deletions(-)

Comments

Stefano Garzarella Feb. 25, 2019, 8:44 a.m. UTC | #1
On Thu, Feb 07, 2019 at 06:57:00PM +0100, Paolo Bonzini wrote:
> This way, the default-configs file only need to specify the boards
> and any optional devices.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Yang Zhong <yang.zhong@intel.com>
> Message-Id: <20190123065618.3520-37-yang.zhong@intel.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  default-configs/i386-softmmu.mak | 45 ++++++++----------------------------
>  hw/acpi/Kconfig                  |  3 +++
>  hw/i2c/Makefile.objs             |  2 +-
>  hw/i386/Kconfig                  | 50 ++++++++++++++++++++++++++++++++++++++++
>  hw/i386/Makefile.objs            |  5 ++--
>  hw/isa/Kconfig                   |  1 +
>  hw/pci-host/Kconfig              |  4 ++++
>  hw/tpm/Kconfig                   |  2 ++
>  8 files changed, 73 insertions(+), 39 deletions(-)
> 
> diff --git a/default-configs/i386-softmmu.mak b/default-configs/i386-softmmu.mak
> index 54b571f..ed234c1 100644
> --- a/default-configs/i386-softmmu.mak
> +++ b/default-configs/i386-softmmu.mak
> @@ -1,12 +1,6 @@
>  # Default configuration for i386-softmmu
>  
> -CONFIG_PCI=y
> -CONFIG_PCI_DEVICES=y
> -CONFIG_ISA_BUS=y
>  include hyperv.mak
> -CONFIG_TEST_DEVICES=y
> -CONFIG_VGA_ISA=y
> -CONFIG_VMWARE_VGA=y
>  CONFIG_VMXNET3_PCI=y
>  CONFIG_VIRTIO_VGA=y
>  CONFIG_IPMI=y
> @@ -14,49 +8,28 @@ CONFIG_IPMI_LOCAL=y
>  CONFIG_IPMI_EXTERN=y
>  CONFIG_ISA_IPMI_KCS=y
>  CONFIG_ISA_IPMI_BT=y
> -CONFIG_I8254=y
> -CONFIG_ACPI=y
> -CONFIG_ACPI_X86=y
> -CONFIG_ACPI_X86_ICH=y
> -CONFIG_ACPI_MEMORY_HOTPLUG=y
> -CONFIG_ACPI_CPU_HOTPLUG=y
> -CONFIG_APM=y
> -CONFIG_I8257=y
> -CONFIG_IDE_ISA=y
> -CONFIG_IDE_PIIX=y
> +
> +# Optional devices:
> +#
>  CONFIG_HPET=y
>  CONFIG_APPLESMC=y
> -CONFIG_I8259=y
>  CONFIG_PFLASH_CFI01=y
> -CONFIG_MC146818RTC=y
> -CONFIG_PCI_PIIX=y
>  CONFIG_ISA_DEBUG=y
>  CONFIG_ISA_TESTDEV=y
> -CONFIG_VMPORT=y
> +CONFIG_TEST_DEVICES=y
>  CONFIG_SGA=y
> -CONFIG_LPC_ICH9=y
> -CONFIG_PCI_EXPRESS=y
> -CONFIG_PCI_EXPRESS_Q35=y
> -CONFIG_APIC=y
> -CONFIG_IOAPIC=y
>  CONFIG_PVPANIC=y
>  CONFIG_MEM_DEVICE=y
> -CONFIG_DIMM=y
>  CONFIG_NVDIMM=y
>  CONFIG_ACPI_NVDIMM=y
> -CONFIG_XIO3130=y
> -CONFIG_IOH3420=y
> -CONFIG_I82801B11=y
> -CONFIG_SMBIOS=y
>  CONFIG_PXB=y
>  CONFIG_ACPI_VMGENID=y
> -CONFIG_ACPI_SMBUS=y
>  CONFIG_SMBUS_EEPROM=y
> -CONFIG_FW_CFG_DMA=y
>  CONFIG_I2C=y
> -CONFIG_VTD=y
> -CONFIG_AMD_IOMMU=y
> -CONFIG_PAM=y
> -CONFIG_PC=y
> +CONFIG_PCI_DEVICES=y
> +
> +# Boards:
> +#
> +CONFIG_ISAPC=y
>  CONFIG_I440FX=y
>  CONFIG_Q35=y
> diff --git a/hw/acpi/Kconfig b/hw/acpi/Kconfig
> index c485a34..035a28f 100644
> --- a/hw/acpi/Kconfig
> +++ b/hw/acpi/Kconfig
> @@ -3,15 +3,18 @@ config ACPI
>  
>  config ACPI_X86
>      bool
> +    select ACPI
>  
>  config ACPI_X86_ICH
>      bool
> +    select ACPI_X86
>  
>  config ACPI_CPU_HOTPLUG
>      bool
>  
>  config ACPI_MEMORY_HOTPLUG
>      bool
> +    select MEM_DEVICE
>  
>  config ACPI_NVDIMM
>      bool
> diff --git a/hw/i2c/Makefile.objs b/hw/i2c/Makefile.objs
> index cecee48..aaa3997 100644
> --- a/hw/i2c/Makefile.objs
> +++ b/hw/i2c/Makefile.objs
> @@ -2,7 +2,7 @@ common-obj-$(CONFIG_I2C) += core.o smbus.o
>  common-obj-$(CONFIG_SMBUS_EEPROM) += smbus_eeprom.o
>  common-obj-$(CONFIG_DDC) += i2c-ddc.o
>  common-obj-$(CONFIG_VERSATILE_I2C) += versatile_i2c.o
> -common-obj-$(CONFIG_ACPI_X86) += smbus_ich9.o
> +common-obj-$(CONFIG_ACPI_X86_ICH) += smbus_ich9.o
>  common-obj-$(CONFIG_ACPI_SMBUS) += pm_smbus.o
>  common-obj-$(CONFIG_BITBANG_I2C) += bitbang_i2c.o
>  common-obj-$(CONFIG_EXYNOS4) += exynos4210_i2c.o
> diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig
> index 0f94ae1..daf2015 100644
> --- a/hw/i386/Kconfig
> +++ b/hw/i386/Kconfig
> @@ -7,16 +7,65 @@ config PC
>      imply QXL
>      imply SEV
>      imply TPM_TIS
> +    select I8259
> +    select I8254
> +    select PCSPK
> +    select I82374
> +    select I8257
> +    select MC146818RTC
> +
> +config PC_PCI
> +    bool
> +    select APIC
> +    select IOAPIC
> +    select APM
> +    select PC
> +
> +config PC_ACPI
> +    bool
> +    select ACPI_X86
> +    select ACPI_CPU_HOTPLUG
> +    select ACPI_MEMORY_HOTPLUG
> +    depends on ACPI_SMBUS
>  
>  config I440FX
>      bool
> +    select PC_PCI
> +    select PC_ACPI
> +    select ACPI_SMBUS
> +    select PCI_PIIX
> +    select FDC

Should we move "select FDC" under "config PC"?

I'm not able to build the Q35 machine without enable FDC, since some fdc
functions are used in hw/i386/pc.c (eg. isa_fdc_get_drive_type())

Thanks,
Stefano
Paolo Bonzini Feb. 26, 2019, 1:23 p.m. UTC | #2
On 25/02/19 09:44, Stefano Garzarella wrote:
>>  config I440FX
>>      bool
>> +    select PC_PCI
>> +    select PC_ACPI
>> +    select ACPI_SMBUS
>> +    select PCI_PIIX
>> +    select FDC
> Should we move "select FDC" under "config PC"?
> 
> I'm not able to build the Q35 machine without enable FDC, since some fdc
> functions are used in hw/i386/pc.c (eg. isa_fdc_get_drive_type())

Yes, that's a good idea.  I mistakenly thought that Q35 could be built
without FDC.

Paolo
Markus Armbruster Feb. 26, 2019, 1:44 p.m. UTC | #3
Paolo Bonzini <pbonzini@redhat.com> writes:

> On 25/02/19 09:44, Stefano Garzarella wrote:
>>>  config I440FX
>>>      bool
>>> +    select PC_PCI
>>> +    select PC_ACPI
>>> +    select ACPI_SMBUS
>>> +    select PCI_PIIX
>>> +    select FDC
>> Should we move "select FDC" under "config PC"?
>> 
>> I'm not able to build the Q35 machine without enable FDC, since some fdc
>> functions are used in hw/i386/pc.c (eg. isa_fdc_get_drive_type())
>
> Yes, that's a good idea.  I mistakenly thought that Q35 could be built
> without FDC.

Could we add stubs to make it buildable that way?
Paolo Bonzini Feb. 26, 2019, 3:25 p.m. UTC | #4
On 26/02/19 14:44, Markus Armbruster wrote:
> Paolo Bonzini <pbonzini@redhat.com> writes:
> 
>> On 25/02/19 09:44, Stefano Garzarella wrote:
>>>>  config I440FX
>>>>      bool
>>>> +    select PC_PCI
>>>> +    select PC_ACPI
>>>> +    select ACPI_SMBUS
>>>> +    select PCI_PIIX
>>>> +    select FDC
>>> Should we move "select FDC" under "config PC"?
>>>
>>> I'm not able to build the Q35 machine without enable FDC, since some fdc
>>> functions are used in hw/i386/pc.c (eg. isa_fdc_get_drive_type())
>>
>> Yes, that's a good idea.  I mistakenly thought that Q35 could be built
>> without FDC.
> 
> Could we add stubs to make it buildable that way?

Of course I'm ecstatic that one benefit of Kconfig (finding suboptimal
dependencies) is already being realized _before_ it lands, but not now.
 However, those kind of cleanups can wait for 4.1. :)

Note that we're doing the most important cleanups (e.g. not having to
bring PCI into boards that don't need it), but overall this series will
be about 120 patches and it's already a half miracle that everything was
done in <2 months and it will be already in 4.0.

Paolo
Thomas Huth Feb. 26, 2019, 3:42 p.m. UTC | #5
On 07/02/2019 18.57, Paolo Bonzini wrote:
> This way, the default-configs file only need to specify the boards
> and any optional devices.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Yang Zhong <yang.zhong@intel.com>
> Message-Id: <20190123065618.3520-37-yang.zhong@intel.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
[...]
> ---
> diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig
> index 0f94ae1..daf2015 100644
> --- a/hw/i386/Kconfig
> +++ b/hw/i386/Kconfig
> @@ -7,16 +7,65 @@ config PC
>      imply QXL
>      imply SEV
>      imply TPM_TIS
> +    select I8259
> +    select I8254
> +    select PCSPK
> +    select I82374
> +    select I8257
> +    select MC146818RTC
> +
> +config PC_PCI
> +    bool
> +    select APIC
> +    select IOAPIC
> +    select APM
> +    select PC
> +
> +config PC_ACPI
> +    bool
> +    select ACPI_X86
> +    select ACPI_CPU_HOTPLUG
> +    select ACPI_MEMORY_HOTPLUG
> +    depends on ACPI_SMBUS
>  
>  config I440FX
>      bool
> +    select PC_PCI
> +    select PC_ACPI
> +    select ACPI_SMBUS
> +    select PCI_PIIX
> +    select FDC
> +    select IDE_PIIX
> +    select DIMM
> +    select SMBIOS
> +    select VMPORT
> +    select VMMOUSE
> +    select FW_CFG_DMA

Just a thought: Should we also "imply E1000_PCI" here to indicate the
default NIC?

>  config ISAPC
>      bool
>      select ISA_BUS
> +    select PC
> +    select IDE_ISA
> +    select VGA_ISA

ISAPC seems also to work without a vga card when you specify
-nodefaults, so I think this should be "imply VGA_ISA" instead.

Maybe also "imply NE2000_ISA" for the default NIC?

> +    # FIXME: it is in the same file as i440fx, and does not compile
> +    # if separated
> +    depends on I440FX
>  
>  config Q35
>      bool
> +    imply VTD
> +    imply AMD_IOMMU
> +    select PC_PCI
> +    select PC_ACPI
> +    select PCI_EXPRESS_Q35
> +    select LPC_ICH9
> +    select AHCI
> +    select DIMM
> +    select SMBIOS
> +    select VMPORT
> +    select VMMOUSE
> +    select FW_CFG_DMA

Maybe add "imply E1000E_PCI_EXPRESS" for the default NIC?

 Thomas
Markus Armbruster Feb. 26, 2019, 5:24 p.m. UTC | #6
Paolo Bonzini <pbonzini@redhat.com> writes:

> On 26/02/19 14:44, Markus Armbruster wrote:
>> Paolo Bonzini <pbonzini@redhat.com> writes:
>> 
>>> On 25/02/19 09:44, Stefano Garzarella wrote:
>>>>>  config I440FX
>>>>>      bool
>>>>> +    select PC_PCI
>>>>> +    select PC_ACPI
>>>>> +    select ACPI_SMBUS
>>>>> +    select PCI_PIIX
>>>>> +    select FDC
>>>> Should we move "select FDC" under "config PC"?
>>>>
>>>> I'm not able to build the Q35 machine without enable FDC, since some fdc
>>>> functions are used in hw/i386/pc.c (eg. isa_fdc_get_drive_type())
>>>
>>> Yes, that's a good idea.  I mistakenly thought that Q35 could be built
>>> without FDC.
>> 
>> Could we add stubs to make it buildable that way?
>
> Of course I'm ecstatic that one benefit of Kconfig (finding suboptimal
> dependencies) is already being realized _before_ it lands, but not now.
>  However, those kind of cleanups can wait for 4.1. :)

Absolutely.

> Note that we're doing the most important cleanups (e.g. not having to
> bring PCI into boards that don't need it), but overall this series will
> be about 120 patches and it's already a half miracle that everything was
> done in <2 months and it will be already in 4.0.

Congrats!
diff mbox series

Patch

diff --git a/default-configs/i386-softmmu.mak b/default-configs/i386-softmmu.mak
index 54b571f..ed234c1 100644
--- a/default-configs/i386-softmmu.mak
+++ b/default-configs/i386-softmmu.mak
@@ -1,12 +1,6 @@ 
 # Default configuration for i386-softmmu
 
-CONFIG_PCI=y
-CONFIG_PCI_DEVICES=y
-CONFIG_ISA_BUS=y
 include hyperv.mak
-CONFIG_TEST_DEVICES=y
-CONFIG_VGA_ISA=y
-CONFIG_VMWARE_VGA=y
 CONFIG_VMXNET3_PCI=y
 CONFIG_VIRTIO_VGA=y
 CONFIG_IPMI=y
@@ -14,49 +8,28 @@  CONFIG_IPMI_LOCAL=y
 CONFIG_IPMI_EXTERN=y
 CONFIG_ISA_IPMI_KCS=y
 CONFIG_ISA_IPMI_BT=y
-CONFIG_I8254=y
-CONFIG_ACPI=y
-CONFIG_ACPI_X86=y
-CONFIG_ACPI_X86_ICH=y
-CONFIG_ACPI_MEMORY_HOTPLUG=y
-CONFIG_ACPI_CPU_HOTPLUG=y
-CONFIG_APM=y
-CONFIG_I8257=y
-CONFIG_IDE_ISA=y
-CONFIG_IDE_PIIX=y
+
+# Optional devices:
+#
 CONFIG_HPET=y
 CONFIG_APPLESMC=y
-CONFIG_I8259=y
 CONFIG_PFLASH_CFI01=y
-CONFIG_MC146818RTC=y
-CONFIG_PCI_PIIX=y
 CONFIG_ISA_DEBUG=y
 CONFIG_ISA_TESTDEV=y
-CONFIG_VMPORT=y
+CONFIG_TEST_DEVICES=y
 CONFIG_SGA=y
-CONFIG_LPC_ICH9=y
-CONFIG_PCI_EXPRESS=y
-CONFIG_PCI_EXPRESS_Q35=y
-CONFIG_APIC=y
-CONFIG_IOAPIC=y
 CONFIG_PVPANIC=y
 CONFIG_MEM_DEVICE=y
-CONFIG_DIMM=y
 CONFIG_NVDIMM=y
 CONFIG_ACPI_NVDIMM=y
-CONFIG_XIO3130=y
-CONFIG_IOH3420=y
-CONFIG_I82801B11=y
-CONFIG_SMBIOS=y
 CONFIG_PXB=y
 CONFIG_ACPI_VMGENID=y
-CONFIG_ACPI_SMBUS=y
 CONFIG_SMBUS_EEPROM=y
-CONFIG_FW_CFG_DMA=y
 CONFIG_I2C=y
-CONFIG_VTD=y
-CONFIG_AMD_IOMMU=y
-CONFIG_PAM=y
-CONFIG_PC=y
+CONFIG_PCI_DEVICES=y
+
+# Boards:
+#
+CONFIG_ISAPC=y
 CONFIG_I440FX=y
 CONFIG_Q35=y
diff --git a/hw/acpi/Kconfig b/hw/acpi/Kconfig
index c485a34..035a28f 100644
--- a/hw/acpi/Kconfig
+++ b/hw/acpi/Kconfig
@@ -3,15 +3,18 @@  config ACPI
 
 config ACPI_X86
     bool
+    select ACPI
 
 config ACPI_X86_ICH
     bool
+    select ACPI_X86
 
 config ACPI_CPU_HOTPLUG
     bool
 
 config ACPI_MEMORY_HOTPLUG
     bool
+    select MEM_DEVICE
 
 config ACPI_NVDIMM
     bool
diff --git a/hw/i2c/Makefile.objs b/hw/i2c/Makefile.objs
index cecee48..aaa3997 100644
--- a/hw/i2c/Makefile.objs
+++ b/hw/i2c/Makefile.objs
@@ -2,7 +2,7 @@  common-obj-$(CONFIG_I2C) += core.o smbus.o
 common-obj-$(CONFIG_SMBUS_EEPROM) += smbus_eeprom.o
 common-obj-$(CONFIG_DDC) += i2c-ddc.o
 common-obj-$(CONFIG_VERSATILE_I2C) += versatile_i2c.o
-common-obj-$(CONFIG_ACPI_X86) += smbus_ich9.o
+common-obj-$(CONFIG_ACPI_X86_ICH) += smbus_ich9.o
 common-obj-$(CONFIG_ACPI_SMBUS) += pm_smbus.o
 common-obj-$(CONFIG_BITBANG_I2C) += bitbang_i2c.o
 common-obj-$(CONFIG_EXYNOS4) += exynos4210_i2c.o
diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig
index 0f94ae1..daf2015 100644
--- a/hw/i386/Kconfig
+++ b/hw/i386/Kconfig
@@ -7,16 +7,65 @@  config PC
     imply QXL
     imply SEV
     imply TPM_TIS
+    select I8259
+    select I8254
+    select PCSPK
+    select I82374
+    select I8257
+    select MC146818RTC
+
+config PC_PCI
+    bool
+    select APIC
+    select IOAPIC
+    select APM
+    select PC
+
+config PC_ACPI
+    bool
+    select ACPI_X86
+    select ACPI_CPU_HOTPLUG
+    select ACPI_MEMORY_HOTPLUG
+    depends on ACPI_SMBUS
 
 config I440FX
     bool
+    select PC_PCI
+    select PC_ACPI
+    select ACPI_SMBUS
+    select PCI_PIIX
+    select FDC
+    select IDE_PIIX
+    select DIMM
+    select SMBIOS
+    select VMPORT
+    select VMMOUSE
+    select FW_CFG_DMA
 
 config ISAPC
     bool
     select ISA_BUS
+    select PC
+    select IDE_ISA
+    select VGA_ISA
+    # FIXME: it is in the same file as i440fx, and does not compile
+    # if separated
+    depends on I440FX
 
 config Q35
     bool
+    imply VTD
+    imply AMD_IOMMU
+    select PC_PCI
+    select PC_ACPI
+    select PCI_EXPRESS_Q35
+    select LPC_ICH9
+    select AHCI
+    select DIMM
+    select SMBIOS
+    select VMPORT
+    select VMMOUSE
+    select FW_CFG_DMA
 
 config VTD
     bool
@@ -29,3 +78,4 @@  config VMPORT
 
 config VMMOUSE
     bool
+    depends on VMPORT
diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
index 3de7ca2..27248a0 100644
--- a/hw/i386/Makefile.objs
+++ b/hw/i386/Makefile.objs
@@ -4,8 +4,9 @@  obj-y += pc.o
 obj-$(CONFIG_I440FX) += pc_piix.o
 obj-$(CONFIG_Q35) += pc_q35.o
 obj-y += pc_sysfw.o
-obj-$(CONFIG_VTD) += x86-iommu.o intel_iommu.o
-obj-$(CONFIG_AMD_IOMMU) += x86-iommu.o amd_iommu.o
+obj-y += x86-iommu.o
+obj-$(CONFIG_VTD) += intel_iommu.o
+obj-$(CONFIG_AMD_IOMMU) += amd_iommu.o
 obj-$(CONFIG_XEN) += ../xenpv/ xen/
 obj-$(CONFIG_VMPORT) += vmport.o
 obj-$(CONFIG_VMMOUSE) += vmmouse.o
diff --git a/hw/isa/Kconfig b/hw/isa/Kconfig
index af68af9..6f0812d 100644
--- a/hw/isa/Kconfig
+++ b/hw/isa/Kconfig
@@ -27,4 +27,5 @@  config SMC37C669
 config LPC_ICH9
     bool
     select ISA_BUS
+    select ACPI_SMBUS
     select ACPI_X86_ICH
diff --git a/hw/pci-host/Kconfig b/hw/pci-host/Kconfig
index c01812a..ff4080c 100644
--- a/hw/pci-host/Kconfig
+++ b/hw/pci-host/Kconfig
@@ -27,10 +27,14 @@  config PCI_SABRE
 
 config PCI_PIIX
     bool
+    select PCI
+    select PAM
+    select ISA_BUS
 
 config PCI_EXPRESS_Q35
     bool
     select PCI_EXPRESS
+    select PAM
 
 config PCI_EXPRESS_GENERIC_BRIDGE
     bool
diff --git a/hw/tpm/Kconfig b/hw/tpm/Kconfig
index f3eb570..b0c2c05 100644
--- a/hw/tpm/Kconfig
+++ b/hw/tpm/Kconfig
@@ -7,6 +7,8 @@  config TPM_TIS
 
 config TPM_CRB
     bool
+    default y
+    depends on TPM && PC
 
 config TPM_PASSTHROUGH
     bool