The intel startup code and start_kernel() is partly used for SMP startup as the intel MP design starts the secondary CPU's in real mode. In addition to make it more fun you can only pass one piece of information - the address (page boundary) that the processor is made to boot at. The SMP kernel writes a trampoline routine at the base of a page it allocates for the stack of each CPU. The secondary processors (or AP's as Intel calls them for Application Processors) load their SS:SP based on the code segment enter protected mode and jump into the 32bit kernel startup.
The kernel startup for the SMP kernel in start_kernel() calls a few startup routines for the architecture and then waits for the boot processor to complete initialisation. At this point it starts running an idle thread and is schedulable.