[coreboot] southbridge/intel/i82801gx/i82801gx.h

Nico Huber nico.h at gmx.de
Sat Oct 15 12:10:32 CEST 2016


Hi Rick,

from your messages on IRC, I guess you almost got it. You have to select
SOUTHBRIDGE_INTEL_I82801GX in your mainboard's Kconfig. Just do a `git
grep select\ SOUTHBRIDGE_INTEL_I82801GX` and you'll find where it's set
for other boards. The correct files should then be added by Makefiles.

More answers inline below...

On 15.10.2016 10:24, Antonius Riko wrote:
> Everyone,
> 
> I tried to port I946GZ and following from 945 example on intel mainboard,
> 
> and I got error when compiling :
> 
> build/romstage/mainboard/intel/i946gz/romstage.o: In function
> `mainboard_romstage_entry':
> /home/bianchi/coreboot/src/mainboard/intel/i946gz/romstage.c:214: undefined
> reference to `southbridge_detect_s3_resume'
> /home/bianchi/coreboot/src/mainboard/intel/i946gz/romstage.c:217: undefined
> reference to `enable_smbus'
> build/romstage/northbridge/intel/i945/raminit.o: In function
> `spd_read_byte':
> /home/bianchi/coreboot/src/northbridge/intel/i945/raminit.c:62: undefined
> reference to `smbus_read_byte'
> /home/bianchi/coreboot/src/northbridge/intel/i945/raminit.c:62: undefined
> reference to `smbus_read_byte'
> /home/bianchi/coreboot/src/northbridge/intel/i945/raminit.c:62: undefined
> reference to `smbus_read_byte'
> /home/bianchi/coreboot/src/northbridge/intel/i945/raminit.c:62: undefined
> reference to `smbus_read_byte'
> /home/bianchi/coreboot/src/northbridge/intel/i945/raminit.c:62: undefined
> reference to `smbus_read_byte'
> build/romstage/northbridge/intel/i945/raminit.o:/home/bianchi/coreboot/src/northbridge/intel/i945/raminit.c:62:
> more undefined references to `smbus_read_byte' follow
> src/arch/x86/Makefile.inc:264: recipe for target
> 'build/cbfs/fallback/romstage.debug' failed
> make: *** [build/cbfs/fallback/romstage.debug] Error 1
> 
> When I patch it with :
> 
> #include <southbridge/intel/i82801gx/early_lpc.c>
> #include <southbridge/intel/i82801gx/early_smbus.c>
> #include <southbridge/intel/i82801gx/lpc.c>

Including .c files is a bad idea. We did that before and still do in
some places, but will get rid of it in the future hopefully. Also you
are mixing romstage (early_*.c) and ramstage (lpc.c) code here.

I guess the remaining errors are caused by the mixing.

Hope that helps,
Nico

> 
> the errors are gone but I got :
>    GEN        generated/bootblock.ld
>     CP         bootblock/arch/x86/bootblock.ld
>     LINK       cbfs/fallback/bootblock.debug
>     OBJCOPY    cbfs/fallback/bootblock.elf
>     OBJCOPY    bootblock.raw.bin
>     CC         romstage/mainboard/intel/i946gz/romstage.o
> In file included from src/mainboard/intel/i946gz/romstage.c:44:0:
> src/southbridge/intel/i82801gx/lpc.c: In function 'i82801gx_enable_ioapic':
> src/southbridge/intel/i82801gx/lpc.c:52:20: error: passing argument 1 of
> 'pcie_write_config8' makes integer from pointer without a cast
> [-Werror=int-conversion]
>   pci_write_config8(dev, ACPI_CNTL, ACPI_EN);
>                     ^
> In file included from src/arch/x86/include/arch/io.h:247:0,
>                  from src/mainboard/intel/i946gz/romstage.c:20:
> src/arch/x86/include/arch/pci_mmio_cfg.h:49:6: note: expected 'pci_devfn_t
> {aka unsigned int}' but argument is of type 'struct device *'
>  void pcie_write_config8(pci_devfn_t dev, unsigned int where, u8 value)
>       ^
> In file included from src/mainboard/intel/i946gz/romstage.c:44:0:
> src/southbridge/intel/i82801gx/lpc.c: In function
> 'i82801gx_enable_serial_irqs':
> src/southbridge/intel/i82801gx/lpc.c:66:20: error: passing argument 1 of
> 'pcie_write_config8' makes integer from pointer without a cast
> [-Werror=int-conversion]
>   pci_write_config8(dev, SERIRQ_CNTL,
>                     ^
> In file included from src/arch/x86/include/arch/io.h:247:0,
>                  from src/mainboard/intel/i946gz/romstage.c:20:
> src/arch/x86/include/arch/pci_mmio_cfg.h:49:6: note: expected 'pci_devfn_t
> {aka unsigned int}' but argument is of type 'struct device *'
>  void pcie_write_config8(pci_devfn_t dev, unsigned int where, u8 value)
>       ^
> In file included from src/mainboard/intel/i946gz/romstage.c:44:0:
> src/southbridge/intel/i82801gx/lpc.c: In function 'i82801gx_pirq_init':
> src/southbridge/intel/i82801gx/lpc.c:95:24: error: invalid type argument of
> '->' (have 'device_t {aka unsigned int}')
>   config_t *config = dev->chip_info;
>                         ^
> src/southbridge/intel/i82801gx/lpc.c:97:43: error: dereferencing pointer to
> incomplete type 'config_t {aka struct southbridge_intel_i82801gx_config}'
>   pci_write_config8(dev, PIRQA_ROUT, config->pirqa_routing);
>                                            ^
> src/southbridge/intel/i82801gx/lpc.c:111:17: error: 'all_devices'
> undeclared (first use in this function)
>   for (irq_dev = all_devices; irq_dev; irq_dev = irq_dev->next) {
>                  ^
> src/southbridge/intel/i82801gx/lpc.c:111:17: note: each undeclared
> identifier is reported only once for each function it appears in
> src/southbridge/intel/i82801gx/lpc.c:111:56: error: invalid type argument
> of '->' (have 'device_t {aka unsigned int}')
>   for (irq_dev = all_devices; irq_dev; irq_dev = irq_dev->next) {
>                                                         ^
> src/southbridge/intel/i82801gx/lpc.c:114:15: error: invalid type argument
> of '->' (have 'device_t {aka unsigned int}')
>    if (!irq_dev->enabled || irq_dev->path.type != DEVICE_PATH_PCI)
>                ^
> src/southbridge/intel/i82801gx/lpc.c:114:35: error: invalid type argument
> of '->' (have 'device_t {aka unsigned int}')
>    if (!irq_dev->enabled || irq_dev->path.type != DEVICE_PATH_PCI)
>                                    ^
> src/southbridge/intel/i82801gx/lpc.c: In function 'i82801gx_gpi_routing':
> src/southbridge/intel/i82801gx/lpc.c:136:24: error: invalid type argument
> of '->' (have 'device_t {aka unsigned int}')
>   config_t *config = dev->chip_info;
>                         ^
> src/southbridge/intel/i82801gx/lpc.c: In function 'i82801gx_power_options':
> src/southbridge/intel/i82801gx/lpc.c:169:24: error: invalid type argument
> of '->' (have 'device_t {aka unsigned int}')
>   config_t *config = dev->chip_info;
>                         ^
> src/southbridge/intel/i82801gx/lpc.c: In function 'i82801gx_rtc_init':
> src/southbridge/intel/i82801gx/lpc.c:287:26: error: passing argument 1 of
> 'pcie_read_config8' makes integer from pointer without a cast
> [-Werror=int-conversion]
>   reg8 = pci_read_config8(dev, GEN_PMCON_3);
>                           ^
> In file included from src/arch/x86/include/arch/io.h:247:0,
>                  from src/mainboard/intel/i946gz/romstage.c:20:
> src/arch/x86/include/arch/pci_mmio_cfg.h:25:4: note: expected 'pci_devfn_t
> {aka unsigned int}' but argument is of type 'struct device *'
>  u8 pcie_read_config8(pci_devfn_t dev, unsigned int where)
>     ^
> In file included from src/mainboard/intel/i946gz/romstage.c:44:0:
> src/southbridge/intel/i82801gx/lpc.c:291:21: error: passing argument 1 of
> 'pcie_write_config8' makes integer from pointer without a cast
> [-Werror=int-conversion]
>    pci_write_config8(dev, GEN_PMCON_3, reg8);
>                      ^
> In file included from src/arch/x86/include/arch/io.h:247:0,
>                  from src/mainboard/intel/i946gz/romstage.c:20:
> src/arch/x86/include/arch/pci_mmio_cfg.h:49:6: note: expected 'pci_devfn_t
> {aka unsigned int}' but argument is of type 'struct device *'
>  void pcie_write_config8(pci_devfn_t dev, unsigned int where, u8 value)
>       ^
> In file included from src/mainboard/intel/i946gz/romstage.c:44:0:
> src/southbridge/intel/i82801gx/lpc.c: In function 'i82801gx_fixups':
> src/southbridge/intel/i82801gx/lpc.c:402:20: error: passing argument 1 of
> 'pcie_write_config8' makes integer from pointer without a cast
> [-Werror=int-conversion]
>   pci_write_config8(dev, 0xad, 0x3);
>                     ^
> In file included from src/arch/x86/include/arch/io.h:247:0,
>                  from src/mainboard/intel/i946gz/romstage.c:20:
> src/arch/x86/include/arch/pci_mmio_cfg.h:49:6: note: expected 'pci_devfn_t
> {aka unsigned int}' but argument is of type 'struct device *'
>  void pcie_write_config8(pci_devfn_t dev, unsigned int where, u8 value)
>       ^
> In file included from src/mainboard/intel/i946gz/romstage.c:44:0:
> src/southbridge/intel/i82801gx/lpc.c: In function 'lpc_init':
> src/southbridge/intel/i82801gx/lpc.c:410:21: error: passing argument 1 of
> 'pcie_write_config16' makes integer from pointer without a cast
> [-Werror=int-conversion]
>   pci_write_config16(dev, PCI_COMMAND, 0x000f);
>                      ^
> In file included from src/arch/x86/include/arch/io.h:247:0,
>                  from src/mainboard/intel/i946gz/romstage.c:20:
> src/arch/x86/include/arch/pci_mmio_cfg.h:57:6: note: expected 'pci_devfn_t
> {aka unsigned int}' but argument is of type 'struct device *'
>  void pcie_write_config16(pci_devfn_t dev, unsigned int where, u16 value)
>       ^
> In file included from src/mainboard/intel/i946gz/romstage.c:44:0:
> src/southbridge/intel/i82801gx/lpc.c:418:21: error: passing argument 1 of
> 'i82801gx_pirq_init' makes integer from pointer without a cast
> [-Werror=int-conversion]
>   i82801gx_pirq_init(dev);
>                      ^
> src/southbridge/intel/i82801gx/lpc.c:91:13: note: expected 'device_t {aka
> unsigned int}' but argument is of type 'struct device *'
>  static void i82801gx_pirq_init(device_t dev)
>              ^
> src/southbridge/intel/i82801gx/lpc.c:421:25: error: passing argument 1 of
> 'i82801gx_power_options' makes integer from pointer without a cast
> [-Werror=int-conversion]
>   i82801gx_power_options(dev);
>                          ^
> src/southbridge/intel/i82801gx/lpc.c:162:13: note: expected 'device_t {aka
> unsigned int}' but argument is of type 'struct device *'
>  static void i82801gx_power_options(device_t dev)
>              ^
> src/southbridge/intel/i82801gx/lpc.c:424:29: error: passing argument 1 of
> 'i82801gx_configure_cstates' makes integer from pointer without a cast
> [-Werror=int-conversion]
>   i82801gx_configure_cstates(dev);
>                              ^
> src/southbridge/intel/i82801gx/lpc.c:266:13: note: expected 'device_t {aka
> unsigned int}' but argument is of type 'struct device *'
>  static void i82801gx_configure_cstates(device_t dev)
>              ^
> src/southbridge/intel/i82801gx/lpc.c: At top level:
> src/southbridge/intel/i82801gx/lpc.c:484:6: error: no previous prototype
> for 'acpi_fill_fadt' [-Werror=missing-prototypes]
>  void acpi_fill_fadt(acpi_fadt_t * fadt)
>       ^
> src/southbridge/intel/i82801gx/lpc.c: In function 'acpi_fill_fadt':
> src/southbridge/intel/i82801gx/lpc.c:486:17: error: initialization makes
> integer from pointer without a cast [-Werror=int-conversion]
>   device_t dev = dev_find_slot(0, PCI_DEVFN(0x1f,0));
>                  ^
> src/southbridge/intel/i82801gx/lpc.c:487:22: error: invalid type argument
> of '->' (have 'device_t {aka unsigned int}')
>   config_t *chip = dev->chip_info;
>                       ^
> src/southbridge/intel/i82801gx/lpc.c: In function
> 'i82801gx_lpc_read_resources':
> src/southbridge/intel/i82801gx/lpc.c:611:2: error: implicit declaration of
> function 'pci_dev_read_resources' [-Werror=implicit-function-declaration]
>   pci_dev_read_resources(dev);
>   ^
> src/southbridge/intel/i82801gx/lpc.c:614:21: error: passing argument 1 of
> 'new_resource' makes pointer from integer without a cast
> [-Werror=int-conversion]
>   res = new_resource(dev, IOINDEX_SUBTRACTIVE(io_index++, 0));
>                      ^
> In file included from src/include/device/device.h:14:0,
>                  from src/arch/x86/include/arch/acpi.h:54,
>                  from src/mainboard/intel/i946gz/romstage.c:25:
> src/include/device/resource.h:61:25: note: expected 'struct device *' but
> argument is of type 'device_t {aka unsigned int}'
>  extern struct resource *new_resource(struct device * dev, unsigned index);
>                          ^
> In file included from src/mainboard/intel/i946gz/romstage.c:44:0:
> src/southbridge/intel/i82801gx/lpc.c:620:21: error: passing argument 1 of
> 'new_resource' makes pointer from integer without a cast
> [-Werror=int-conversion]
>   res = new_resource(dev, IOINDEX_SUBTRACTIVE(io_index++, 0));
>                      ^
> In file included from src/include/device/device.h:14:0,
>                  from src/arch/x86/include/arch/acpi.h:54,
>                  from src/mainboard/intel/i946gz/romstage.c:25:
> src/include/device/resource.h:61:25: note: expected 'struct device *' but
> argument is of type 'device_t {aka unsigned int}'
>  extern struct resource *new_resource(struct device * dev, unsigned index);
>                          ^
> In file included from src/mainboard/intel/i946gz/romstage.c:44:0:
> src/southbridge/intel/i82801gx/lpc.c:626:21: error: passing argument 1 of
> 'new_resource' makes pointer from integer without a cast
> [-Werror=int-conversion]
>   res = new_resource(dev, 3); /* IOAPIC */
>                      ^
> In file included from src/include/device/device.h:14:0,
>                  from src/arch/x86/include/arch/acpi.h:54,
>                  from src/mainboard/intel/i946gz/romstage.c:25:
> src/include/device/resource.h:61:25: note: expected 'struct device *' but
> argument is of type 'device_t {aka unsigned int}'
>  extern struct resource *new_resource(struct device * dev, unsigned index);
>                          ^
> In file included from src/mainboard/intel/i946gz/romstage.c:44:0:
> src/southbridge/intel/i82801gx/lpc.c:637:23: error: passing argument 1 of
> 'new_resource' makes pointer from integer without a cast
> [-Werror=int-conversion]
>     res = new_resource(dev, IOINDEX_SUBTRACTIVE(io_index++, 0));
>                        ^
> In file included from src/include/device/device.h:14:0,
>                  from src/arch/x86/include/arch/acpi.h:54,
>                  from src/mainboard/intel/i946gz/romstage.c:25:
> src/include/device/resource.h:61:25: note: expected 'struct device *' but
> argument is of type 'device_t {aka unsigned int}'
>  extern struct resource *new_resource(struct device * dev, unsigned index);
>                          ^
> In file included from src/mainboard/intel/i946gz/romstage.c:44:0:
> src/southbridge/intel/i82801gx/lpc.c: At top level:
> src/southbridge/intel/i82801gx/lpc.c:684:15: error: variable 'pci_ops' has
> initializer but incomplete type
>  static struct pci_operations pci_ops = {
>                ^
> src/southbridge/intel/i82801gx/lpc.c:685:2: error: unknown field
> 'set_subsystem' specified in initializer
>   .set_subsystem = set_subsystem,
>   ^
> src/southbridge/intel/i82801gx/lpc.c:685:19: error: excess elements in
> struct initializer [-Werror]
>   .set_subsystem = set_subsystem,
>                    ^
> src/southbridge/intel/i82801gx/lpc.c:685:19: note: (near initialization for
> 'pci_ops')
> src/southbridge/intel/i82801gx/lpc.c:688:15: error: variable 'device_ops'
> has initializer but incomplete type
>  static struct device_operations device_ops = {
>                ^
> src/southbridge/intel/i82801gx/lpc.c:689:2: error: unknown field
> 'read_resources' specified in initializer
>   .read_resources  = i82801gx_lpc_read_resources,
>   ^
> src/southbridge/intel/i82801gx/lpc.c:689:21: error: excess elements in
> struct initializer [-Werror]
>   .read_resources  = i82801gx_lpc_read_resources,
>                      ^
> src/southbridge/intel/i82801gx/lpc.c:689:21: note: (near initialization for
> 'device_ops')
> src/southbridge/intel/i82801gx/lpc.c:690:2: error: unknown field
> 'set_resources' specified in initializer
>   .set_resources  = pci_dev_set_resources,
>   ^
> src/southbridge/intel/i82801gx/lpc.c:690:20: error: 'pci_dev_set_resources'
> undeclared here (not in a function)
>   .set_resources  = pci_dev_set_resources,
>                     ^
> src/southbridge/intel/i82801gx/lpc.c:690:20: error: excess elements in
> struct initializer [-Werror]
> src/southbridge/intel/i82801gx/lpc.c:690:20: note: (near initialization for
> 'device_ops')
> src/southbridge/intel/i82801gx/lpc.c:691:2: error: unknown field
> 'enable_resources' specified in initializer
>   .enable_resources = pci_dev_enable_resources,
>   ^
> src/southbridge/intel/i82801gx/lpc.c:691:22: error:
> 'pci_dev_enable_resources' undeclared here (not in a function)
>   .enable_resources = pci_dev_enable_resources,
>                       ^
> src/southbridge/intel/i82801gx/lpc.c:691:22: error: excess elements in
> struct initializer [-Werror]
> src/southbridge/intel/i82801gx/lpc.c:691:22: note: (near initialization for
> 'device_ops')
> src/southbridge/intel/i82801gx/lpc.c:692:2: error: unknown field
> 'acpi_inject_dsdt_generator' specified in initializer
>   .acpi_inject_dsdt_generator = southbridge_inject_dsdt,
>   ^
> src/southbridge/intel/i82801gx/lpc.c:692:32: error: excess elements in
> struct initializer [-Werror]
>   .acpi_inject_dsdt_generator = southbridge_inject_dsdt,
>                                 ^
> src/southbridge/intel/i82801gx/lpc.c:692:32: note: (near initialization for
> 'device_ops')
> src/southbridge/intel/i82801gx/lpc.c:693:2: error: unknown field
> 'write_acpi_tables' specified in initializer
>   .write_acpi_tables      = acpi_write_hpet,
>   ^
> src/southbridge/intel/i82801gx/lpc.c:693:28: error: 'acpi_write_hpet'
> undeclared here (not in a function)
>   .write_acpi_tables      = acpi_write_hpet,
>                             ^
> src/southbridge/intel/i82801gx/lpc.c:693:28: error: excess elements in
> struct initializer [-Werror]
> src/southbridge/intel/i82801gx/lpc.c:693:28: note: (near initialization for
> 'device_ops')
> src/southbridge/intel/i82801gx/lpc.c:694:2: error: unknown field 'init'
> specified in initializer
>   .init   = lpc_init,
>   ^
> src/southbridge/intel/i82801gx/lpc.c:694:12: error: excess elements in
> struct initializer [-Werror]
>   .init   = lpc_init,
>             ^
> src/southbridge/intel/i82801gx/lpc.c:694:12: note: (near initialization for
> 'device_ops')
> src/southbridge/intel/i82801gx/lpc.c:695:2: error: unknown field 'scan_bus'
> specified in initializer
>   .scan_bus  = scan_lpc_bus,
>   ^
> src/southbridge/intel/i82801gx/lpc.c:695:15: error: 'scan_lpc_bus'
> undeclared here (not in a function)
>   .scan_bus  = scan_lpc_bus,
>                ^
> src/southbridge/intel/i82801gx/lpc.c:695:15: error: excess elements in
> struct initializer [-Werror]
> src/southbridge/intel/i82801gx/lpc.c:695:15: note: (near initialization for
> 'device_ops')
> src/southbridge/intel/i82801gx/lpc.c:696:2: error: unknown field 'enable'
> specified in initializer
>   .enable   = i82801gx_enable,
>   ^
> src/southbridge/intel/i82801gx/lpc.c:696:14: error: 'i82801gx_enable'
> undeclared here (not in a function)
>   .enable   = i82801gx_enable,
>               ^
> src/southbridge/intel/i82801gx/lpc.c:696:14: error: excess elements in
> struct initializer [-Werror]
> src/southbridge/intel/i82801gx/lpc.c:696:14: note: (near initialization for
> 'device_ops')
> src/southbridge/intel/i82801gx/lpc.c:697:2: error: unknown field 'ops_pci'
> specified in initializer
>   .ops_pci  = &pci_ops,
>   ^
> src/southbridge/intel/i82801gx/lpc.c:697:14: error: excess elements in
> struct initializer [-Werror]
>   .ops_pci  = &pci_ops,
>               ^
> src/southbridge/intel/i82801gx/lpc.c:697:14: note: (near initialization for
> 'device_ops')
> 
> Is there any way fixing it ?
> 
> Thanks
> Rick
> 
> 
> 




More information about the coreboot mailing list