This is a guide for when submitting code for a new platform from [[/AndrewTurner|AndrewTurner]]. It is in no way official, and other committers may disagree with these. :!: this page is probably OBE as of 20190728. These are to help work towards an armv6 GENERIC kernel. ===== Use FDT ===== All new armv6 platforms must use FDT. Where possible follow the Linux device tree bindings, or even better, use the Linux device tree source files. You will need a good reason to use FDT_DTB_STATIC as it leads to an increase in the number of kernel configs we need to support for little gain, i.e. there are many boards we could support, but having a config file for each would be too much. ===== Use the loader ===== In general you should use the loader where possible, there is a version that works with U-Boot (ubldr), and UEFI (loader.efi). It should load the device tree and pass it to the kernel. ===== Don't use kernel.tramp ===== You will need a good reason to need to use this as it needs to know about physical memory. It is built when KERNPHYSADDR is defined, this can be safely removed from kernel configs. ===== Build common files from sys/conf/files.arm ===== Any new files not specific to any %%SoC%% should be placed in sys/conf/files.arm with an option to enable them. If it's truly common then other configs may use it, and having an option simplifies finding which kernel configs use a given device. ===== Have a single kernel config for a family of SoCs ===== The code should be generic across multiple %%SoCs%% where possible. There are a few places where this isn't possible, but the %%SoC%% specific code shouldn't preclude this when these places are fixed. When it's not possible to have a single kernel config, try to limit the number of kernel configs needed. One place where having multiple configs is allowed is when one needs to build as arm, and another as armv6. ===== Use INTRNG ===== The old pre-INTRNG interrupt code is now deprecated. All new %%SoCs%% should use INTRNG fo rinterrupt handling. ---- {{tag>Stale}}