In Linux 2.4, the kernel entry point is @init_arch@ in @arch/mips/kernel/setup.c@. The call stack that is currently most interesting is: init_arch -> start_kernel -> setup_arch -> brcm_setup brcm_setup is where GPIO stuff is done. In Linux 2.6, the kernel entry point is @start_kernel@ in @init/main.c@. Not sure what the corresponding position is to brcm_setup. There is still a setup_arch, called from start_kernel, but it doesn't call a machine-specific startup function as far as I can tell. Maybe it can if we want it to?