> #define APIC_ICR_high 0xfee00310
You mangled apic_icr here, APIC_ICR_high should be an offset. Look at
> apic_icr = tmpaddress;
> apic_icr |= APIC_ICR_high;
> apic_phy_addr = (unsigned long *) apic_icr;
> *apic_phy_addr = cpu << 24;
the definitions in arch/x86/include/asm/apicdef.h.