The following is a list of all that is required from a 32 bit ARM platform port so that it can be enabled in multi-platform kernels.

  • Convert to use ARM_PATCH_PHYS_VIRT so the physical to virtual address translation is done at runtime instead of compiletime.
  • Convert to use AUTO_ZRELADDR to remove more low-level compile-time dependencies
  • Convert all hardware IRQ controllers to use MULTI_IRQ_HANDLER so that several interrupt controller handlers can be compiled into the same image.
  • Convert to SPARSE_IRQ, storing IRQ descriptors in a rbtree rather than an array of fixed length.
  • Convert all IRQ chips to dynamically allocate descriptors, either by explicit allocation or by using linear IRQ domains.
  • Preferably also convert all drivers to use IRQdomains, since this will fit nicely with dynamic allocation of IRQ descriptors and adding these to the sparse IRQ handler tree.
  • Make system bootable from device tree, DT is required for single zImage
  • Convert to COMMON_CLK since we need to be able to compile in several clock drivers and clock trees.
  • Get rid of all files in the <mach/*.h> and <plat/*,h> hierarchies as these are not be used in a multiplatform compilation, as they collide and create trouble. Many can be moved to <linux/platform_data/*.h>

  • Patch platform to select ARCH_MULTIPLATFORM and move the Kconfig fragment from arch/arm/Kconfig down to the platform/machines mach-foo/Kconfig file.
  • Convert to GENERIC_CLOCKEVENTS, since otherwise we will be blocked from enabling desired features in a single zImage like NO_HZ or HRTIMERS.
  • Convert to ARCH_REQUIRE_GPIOLIB and handle all GPIO pins using the gpiolib. Older approaches can only be compiled-in one driver at a time.

Background

WorkingGroups/Kernel/Consolidation/SingleKernel (last modified 2013-02-17 20:25:38)