后面数字是为了了测试vfp段代码做的打印。vfp段代码正常执行完成 pr_info("VFP support v0.3: ");
// printk("printktest674!!!!!!!!!!!!!!!\n");
if (VFP_arch)
pr_cont("not present\n");
else if (vfpsid & FPSID_NODOUBLE) {
//printk("printktest678!!!!!!!!!!!!!!!\n");
pr_cont("no double precision support\n");
} else {
hotcpu_notifier(vfp_hotplug, 0);
// printk("ifelsetest!!!!681!!!!!!!!!!!!!!!\n");
VFP_arch = (vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT; /* Extract the architecture version */
//printk("683!!!!!!!!!!!!!!!\n");
pr_cont("implementor %02x architecture %d part %02x variant %x rev %x\n",
(vfpsid & FPSID_IMPLEMENTER_MASK) >> FPSID_IMPLEMENTER_BIT,
(vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT,
(vfpsid & FPSID_PART_MASK) >> FPSID_PART_BIT,
(vfpsid & FPSID_VARIANT_MASK) >> FPSID_VARIANT_BIT,
(vfpsid & FPSID_REV_MASK) >> FPSID_REV_BIT);
// printk("689!!!!!!!!!!!!!!!\n");
vfp_vector = vfp_support_entry;
//printk("692!!!!!!!!!!!!!!!\n");
thread_register_notifier(&vfp_notifier_block);
vfp_pm_init();
pr_info("695!!!!!!!!!!!!!!!!\n");
/*
* We detected VFP, and the support code is
* in place; report VFP support to userspace.
*/
elf_hwcap |= HWCAP_VFP;
#ifdef CONFIG_VFPv3
pr_info("703!!!!!!!!!!!!!!!!\n");
if (VFP_arch >= 2) {
//pr_info("703!!!!!!!!!!!!!!!\n");
elf_hwcap |= HWCAP_VFPv3;
//printk("705!!!!!!!!!!!!!!!\n");
/*
* Check for VFPv3 D16 and VFPv4 D16. CPUs in
* this configuration only have 16 x 64bit
* registers.
*/
if (((fmrx(MVFR0) & MVFR0_A_SIMD_MASK)) == 1)
//pr_info("712!!!!!!!!!!!!!!!!!!!!!\n");
elf_hwcap |= HWCAP_VFPv3D16; /* also v4-D16 */
else
//pr_info("715!!!!!!!!!!!!!!!!\n");
elf_hwcap |= HWCAP_VFPD32;
else
//pr_info("715!!!!!!!!!!!!!!!!\n");
elf_hwcap |= HWCAP_VFPD32;
}
#endif
/*
* Check for the presence of the Advanced SIMD
* load/store instructions, integer and single
* precision floating point operations. Only check
* for NEON if the hardware has the MVFR registers.
*/
if ((read_cpuid_id() & 0x000f0000) == 0x000f0000) {
//printk("726!!!!1!!!!!!!!!!!!!!!\n");
#ifdef CONFIG_NEON
pr_info("731!!!!!!!!!!!!!!!!\n");
if ((fmrx(MVFR1) & 0x000fff00) == 0x00011100)
//printk("729!!!!!!1!!!!!!!!!!!!!!!\n");
elf_hwcap |= HWCAP_NEON;
#endif
#ifdef CONFIG_VFPv3
pr_info("738!!!!!!!!!!!!!!!!\n");
if ((fmrx(MVFR1) & 0xf0000000) == 0x10000000)
//printk("vfp end!!!!!!!!!!!!!!!\n");
elf_hwcap |= HWCAP_VFPv4;
pr_info("739!!!!!!!!!!!!!!!!\n");
#endif
}
}
pr_info("740!!!!!!!!!!!!!!!\n");// printk("vfp end!!!!!!!!!!!!!!!\n");
return 0;
}
late_initcall(vfp_init);
|