Difference between revisions of "Flag Days"

From coreboot
Jump to: navigation, search
Line 283: Line 283:
 
Remove the call to <code>add_northbridge_resources()</code> in <code>add_mainboard_resources()</code>.
 
Remove the call to <code>add_northbridge_resources()</code> in <code>add_mainboard_resources()</code>.
 
If this was the only action in <code>add_mainboard_resources()</code>, you can remove the function altogether '''and''' remove HAVE_MAINBOARD_RESOURCES in your board's Kconfig.
 
If this was the only action in <code>add_mainboard_resources()</code>, you can remove the function altogether '''and''' remove HAVE_MAINBOARD_RESOURCES in your board's Kconfig.
 +
 +
== r5825: New method for specifying SATA phys values on AMD SB700 ==
 +
 +
Applicable if: new local SB700 based board
 +
 +
r5825 introduces a new API on SB700 to specify SATA phys values. The SB700 code defines some default values in <code>src/southbridge/amd/sb700/sb700_sata.c:sb700_setup_sata_phys()</code>. As this function is declared "weak", you can define your own function of the same name in your board's <code>mainboard.c</code> that writes the correct values for your board. See <code>src/mainboard/asrock/939a785gmh/mainboard.c</code> as an example.
 +
 +
== r5841: HEADSUP: Building romstage with global variables will fail ==
 +
 +
Applicable if: local changes
 +
 +
Starting r5841 we let the build break if global variables are found in the romstage. As they're assigned addresses in ROM space, writing them would fail. To prevent such unobvious errors, we detect that condition and the build fails with the error message "'''Do not use global variables in romstage'''". It doesn't look if those are written to, so it might fail on code that would work (and it did).
 +
 +
To find the global variable, use <code>objdump -x</code> on your object files (for romstage, they're usually suffixed with .initobj.o) to find which has a .bss or .data section with content (more than 0 bytes). The symbol table printed by <code>objdump -x</code> also tells you what the variable is called.
  
 
== r5886: Change buildsystem to require source file names instead of object files ==
 
== r5886: Change buildsystem to require source file names instead of object files ==

Revision as of 20:26, 30 September 2010

This page collects sweeping changes on the tree that might have an impact on boards that weren't tested by the developer, or on uncommitted development. It's sorted by revision (and thus date) and provides a Changelog to anyone who needs to update older trees.

To prevent inaccuracies, changes prior to the creation of this page aren't logged. The head revision at the time of creation of this page was r5151.

Contents

r5152: Change in PS/2 keyboard API

Applicable if: local changes/additions to Super I/Os.

The name and function prototype of the PS/2 keyboard initialization function changed:

-void init_pc_keyboard(unsigned port0, unsigned port1, struct pc_keyboard *kbd);
+void pc_keyboard_init(struct pc_keyboard *keyboard);

This dismisses the first two arguments (which had to be the constant values 0x60, 0x64 before). This should only have an impact on locally developed Super I/O code that might require to follow this change. The changes required for porting old code are usually of the form:

-init_pc_keyboard(0x60, 0x64, 0);
+pc_keyboard_init(0);

or

-init_pc_keyboard(res0->base, res1->base, &conf->keyboard);
+pc_keyboard_init(&conf->keyboard);

r5162: Move crt0s away from user servicable parts in the build system

Applicable if: local changes/additions to mainboards

The crt0s variable in the buildsystem, which collects the various parts that are combined to crt0.o, is setup generically now.

This change must be replicated with local mainboard changes/additions. It should be enough to simply remove all crt0s entries from src/mainboard/$(MAINBOARDDIR)/Makefile.inc.

If you want to check the behaviour:

  • apply the Makefile patch (which adds the printcrt0s rule) to your tree
  • run "make printcrt0s", note the result
  • apply the entire patch
  • run "make printcrt0s", and compare the results

r5164: Move ldscripts away from user servicable parts in the build system

Applicable if: local changes/additions to mainboards

The ldscripts variable in the buildsystem, which collects the various parts of the linker script used to link coreboot, is setup generically now.

This change must be replicated with local mainboard changes/additions. It should be enough to simply remove all ldscripts entries from src/mainboard/$(MAINBOARDDIR)/Makefile.inc.

r5167: Reorganize i82801 southbridge drivers

Applicable if: your mainboard uses the i82801xx, i82801dbm, i82801ca or i82801er driver (Intel ICH).

The drivers have been unified and split up.

  • If your mainboard has an ICH0 or ICH (ie. i810 based boards) use the i82801ax driver
  • If your mainboard has an ICH2 driver (ie. i815 based boards) use the i82801bx driver
  • If your mainboard used the i82801ca driver before use the i82801cx driver
  • If your mainboard used the i82801dbm driver before use the i82801dx driver
  • If your mainboard used the i82801er driver before use the i82801ex driver

r5168: Move generic build rules away from user servicable parts in the build system

Applicable if: local changes/additions to mainboards

Various rules of object files that exist for every board, or that exist for every board with a given configuration option, are moved to src/arch/i386/Makefile.inc.

If your mainboard uses a custom reset.c file, which provides a hard_reset() function, you must add select BOARD_HAS_HARD_RESET to your board's Kconfig.

The following change only needs to be replicated with newly created local mainboards. It should be enough to remove the following lines from src/mainboard/$(MAINBOARDDIR)/Makefile.inc:

  • initobj-y += crt0.o
  • obj-y += mainboard.o
  • obj-$(CONFIG_GENERATE_MP_TABLE) += mptable.o
  • obj-$(CONFIG_GENERATE_PIRQ_TABLE) += irq_tables.o
  • obj-$(CONFIG_BOARD_HAS_HARD_RESET) += reset.o

Also, include some_path/Makefile.romccboard.inc must be dropped, as this file was removed. A statement to set ROMCCFLAGS must be kept.

If your mainboard's Makefile is empty after these changes, or only contains comments, you can remove it completely.

r5171: Move generic build rules away from user servicable parts in the build system

Applicable if: local changes/additions to mainboards

Various rules of object files that exist for every board, or that exist for every board with a given configuration option, are moved to src/arch/i386/Makefile.inc.

If your mainboard uses a custom fadt.c file, you must add select BOARD_HAS_FADT to your board's Kconfig. Better yet, the FADTs related to that chipset should be consolidated (probably in the southbridge)

If your mainboard uses a custom get_bus_conf.c file, you must add select HAVE_BUS_CONFIG to your board's Kconfig.

The following change only needs to be replicated with newly created local mainboards. It should be enough to remove the following lines from src/mainboard/$(MAINBOARDDIR)/Makefile.inc:

  • obj-y += get_bus_conf.o
  • obj-$(CONFIG_GENERATE_ACPI_TABLES) += dsdt.o
  • obj-$(CONFIG_GENERATE_ACPI_TABLES) += acpi_tables.o
  • obj-$(CONFIG_GENERATE_ACPI_TABLES) += fadt.o

Also, include some_path/Makefile.k8_CAR.inc or include some_path/Makefile.k8_ck804.inc must be dropped, as these files were removed.

If your mainboard's Makefile is empty after these changes, or only contains comments, you can remove it completely.

r5176: Automate SSDT pull-in

Applicable if: using ssdtX.asl files and ACPI_SSDTX_NUM config variable

ACPI_SSDTX_NUM must be 4 or 5 (the only values found in the tree so far, but this could be extended), and means the highest number in ssdtX.asl in the mainboard tree (numbering starts at 2). ssdt[2..X].asl are automatically pulled in by the build system then.

To adapt, please check that ACPI_SSDTX_NUM is 4 or 5, then remove the ssdt related rules in the mainboard's Makefile.

If ACPI_SSDTX_NUM should be some other value, please report to the list, so we can adapt the build system for your case.

r5259: Remove config variables related to newconfig

Applicable if: local additions to mainboards (and CPUs in some cases)

Uses of HAVE_FAILOVER_BOOT, HAVE_FALLBACK_BOOT, USE_FAILOVER_IMAGE, USE_FALLBACK_IMAGE must be removed as they were dropped from the build system and might lead to wrong behaviour.

To do this, keep the code wrapped in #if statements which evaluate to true, and remove code that the preprocessor would have left out.

r5266: Replace printk_*(...) by printk(BIOS_*, ...)

Applicable if: local additions

printk_* calls are replaced by printk(BIOS_*, ...).

To adapt, you can use something like

sed -i 's/printk_\([a-z]*\)(/printk(BIOS_\U\1\E, /g' *.c

Thanks go to Zheng Bao for this command.

r5311: unify quadcore.h and dualcore.h to multicore.h

Applicable if: local additions to mainboards

#include <cpu/amd/dualcore.h>

and

#include <cpu/amd/quadcore.h>

have been replaced by

#include <cpu/amd/multicore.h>

The files were often included in get_bus_conf.c and mptable.c

r5313: drop LB_CKS_* from Kconfig

Applicable if: local additions to mainboards

CMOS option handling does no longer keep information on where the coreboot checksums are stored twice.

LB_CKS_RANGE_START, LB_CKS_RANGE_END and LB_CKS_LOC should no longer be defined in Kconfig anymore. build_opt_tbl will do the job automatically.

In C code, all variants of CONFIG_LB_CKS_* are now called LB_CKS_* again as they're no longer config variables.

In addition, there is a new requirement for cmos.layout files now: There has to be a checksum description:

# -----------------------------------------------------------------
checksums

checksum 392 983 984

r5341: arch/i386/lib/console.c dropped

Applicable if: local additions

If your (romstage.c) code included arch/i386/lib/console.c until now, it should include console/console.c instead.

r5511: asm.h dropped.

The define ASSEMBLY is now passed by the Makefile for assembler files. The asm.h construct is no longer needed. Just drop asm.h includes from your code. If you use the post_code() macro, you can now include <cpu/x86/post_code.h>

r5525: devicetree.cb: APIC rename

Applicable if: local additions to mainboards

In devicetree.cb rename "apic" to "lapic" and "apic_cluster" to "lapic_cluster".

r5528: Remove C-includes from romstages

Applicable if: local additions to mainboards

Replace any console/console.c #include in romstage.c with console/console.h. For CAR-boards, also remove pc80/serial.c #include

r5538: Remove C-includes from romstage

Applicable if: local additions to mainboards

Remove pc80/serial.c #include in romstage.c on ROMCC-boards, too.

r5548: Remove C-includes from romstages

Applicable if: local additions to mainboards based on Fam10h

Remove northbridge/amd/amdht/ht_wrapper.c, northbridge/amd/amdfam10/raminit_amdmct.c, cpu/amd/model_10xxx/fidvid.c, pc80/mc146818rtc_early.c from your mainboard's romstage.c

r5647: Build mptable entries for buses from device tree

Applicable if: Board not adapted yet.

r5647 adds a new function mptable_write_buses, which acts as a replacement for all smp_write_bus calls in boards' mptable.c. So far, only kontron/986lcd-m uses it, but all boards should do so in future.

Most boards do the following for the bus entries in mptable:

  • Determine the highest pci bus id (either hardcoded or by reading out some known device)
  • Register PCI buses numbered 0 to highest
  • Register ISA bus numbered highest+1

Alternatively, some boards simply hardcode a number of calls to register each bus.

Identify that code and replace it with something like: mptable_write_buses(mc, &max_pci_bus, &isa_bus); where mc is the struct mp_config_table * used in your mptable.c. max_pci_bus and isa_bus (sometimes called bus_isa) are set to the respective values by mptable_write_buses. If you don't need those variables in your board's smp_write_config_table function pass NULL instead.

r5682: Drop USE_PRINTK_IN_CAR, USE_INIT

Applicable if: local additions to mainboards

Drop USE_PRINTK_IN_CAR in your board's Kconfig, if it exists. Its functionality is automatically enabled if CAR is enabled. Drop USE_INIT. This wasn't used, so dropping it doesn't change any behavior.

r5745: Drop HAVE_HIGH_TABLES, HAVE_LOW_TABLES, FALLBACK_SIZE

Applicable if: local additions to mainboards

These config options have no effect anymore, so simply drop them.

r5754: Rework mainboard handling in Kconfig

Applicable if: local additions to mainboards

src/mainboard/*/*/Kconfig got seriously reworked. Basically, list your board in the applicable src/mainboard/*/Kconfig file, rename the BOARD_vendor_boardname option to BOARD_SPECIFIC_OPTIONS (or somesuch, it's a dummy), and mark its type as "def_bool y". Then guard the entire Kconfig file of your mainboard with "if BOARD_vendor_boardname" .... "endif".

See other mainboards for examples.

r5756: Rename USE_DCACHE_RAM to CACHE_AS_RAM

Applicable if: local additions to mainboards

Rename USE_DCACHE_RAM to CACHE_AS_RAM in your board's Kconfig (if applicable)

r5779: Use standard RAMBASE on Geode LX

Applicable if: new Geode LX based boards in tree

Drop the RAMBASE config setting it to 0x4000, so coreboot uses the default of 1MB. Eventually, RAMBASE will be dropped completely

r5781: Drop SB600/SB700 configuration flags

Applicable if: new SB600/SB700 boards in tree

Drop ide0_enable, sata0_enable, and hda_viddid from your board's devicetree.cb.

r5787: HEADS UP: TSC based timer might fail

Applicable if: board uses TSC based timer, and PIT2 is unusable.

r5787 changes the default time source for calibrating the TSC based routines from I/O port accesses to PIT2, to increase boot speed. Should r5787 fail on your system, and UDELAY_TSC is enabled, you can try to add "select TSC_CALIBRATE_WITH_IO" to your board's Kconfig. If that fixes your board, please report to coreboot@coreboot.org

r5791+r5792: HEADS UP: Fix slow decompression on AMD Fam10 based boards

Applicable if: board uses Fam10

Many users of Fam10 based boards disabled compression of the ramstage to massively improve boot time. Following r5792, this should not be necessary anymore.

r5800: Move DIMM_SUPPORT out of the sockets

Applicable if: new local K8/Fam10 based board

r5800 moves the memory type determination out of the sockets as it has been shown that a single CPU socket can be used for multiple memory types. Now, boards have to define the RAM they accept in Kconfig.

To get the older behaviour back, here's a list of sockets and what must be selected in the boards to get the same configuration:

  • socket_AM2: DIMM_DDR2
  • socket_AM3: DIMM_DDR3, DIMM_REGISTERED
  • socket_AM2r2: DIMM_DDR2, DIMM_REGISTERED
  • socket_F: DIMM_DDR2, DIMM_REGISTERED
  • socket_ASB2: DIMM_DDR3, DIMM_REGISTERED
  • socket_F_1207: DIMM_DDR2, DIMM_REGISTERED

r5803: Remove kludge for reserved resources on i945

Applicable if: new local i945 based board

Before r5803, some northbridge specific resources had to be added with a board specific handler. This is not necessary in r5803+. Remove the call to add_northbridge_resources() in add_mainboard_resources(). If this was the only action in add_mainboard_resources(), you can remove the function altogether and remove HAVE_MAINBOARD_RESOURCES in your board's Kconfig.

r5825: New method for specifying SATA phys values on AMD SB700

Applicable if: new local SB700 based board

r5825 introduces a new API on SB700 to specify SATA phys values. The SB700 code defines some default values in src/southbridge/amd/sb700/sb700_sata.c:sb700_setup_sata_phys(). As this function is declared "weak", you can define your own function of the same name in your board's mainboard.c that writes the correct values for your board. See src/mainboard/asrock/939a785gmh/mainboard.c as an example.

r5841: HEADSUP: Building romstage with global variables will fail

Applicable if: local changes

Starting r5841 we let the build break if global variables are found in the romstage. As they're assigned addresses in ROM space, writing them would fail. To prevent such unobvious errors, we detect that condition and the build fails with the error message "Do not use global variables in romstage". It doesn't look if those are written to, so it might fail on code that would work (and it did).

To find the global variable, use objdump -x on your object files (for romstage, they're usually suffixed with .initobj.o) to find which has a .bss or .data section with content (more than 0 bytes). The symbol table printed by objdump -x also tells you what the variable is called.

r5886: Change buildsystem to require source file names instead of object files

Applicable if: local changes or additions to the build system (particularily Makefile.inc)

Various build system variables are renamed, and their use has changed too:

  • initobjs-y is now romstage-y
  • objs-y is now ramstage-y
  • driver-y keeps the name but changes meaning
  • smmobj-y is now smm-y

All of these variables must be filled with source filenames, not object filenames as it used to be. For most scenarios, it will be sufficient to change (for example) initobjs-y += foo.o in romstage-y += foo.c.