diff options
Diffstat (limited to 'arch/mips/kernel/cpu-probe.c')
-rw-r--r-- | arch/mips/kernel/cpu-probe.c | 129 |
1 files changed, 119 insertions, 10 deletions
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 3e004161ebd5..c8c47a2d1972 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
@@ -159,6 +159,7 @@ static inline void check_wait(void) | |||
159 | case CPU_5KC: | 159 | case CPU_5KC: |
160 | case CPU_25KF: | 160 | case CPU_25KF: |
161 | case CPU_PR4450: | 161 | case CPU_PR4450: |
162 | case CPU_BCM3302: | ||
162 | cpu_wait = r4k_wait; | 163 | cpu_wait = r4k_wait; |
163 | break; | 164 | break; |
164 | 165 | ||
@@ -745,14 +746,6 @@ static inline void cpu_probe_sibyte(struct cpuinfo_mips *c) | |||
745 | { | 746 | { |
746 | decode_configs(c); | 747 | decode_configs(c); |
747 | 748 | ||
748 | /* | ||
749 | * For historical reasons the SB1 comes with it's own variant of | ||
750 | * cache code which eventually will be folded into c-r4k.c. Until | ||
751 | * then we pretend it's got it's own cache architecture. | ||
752 | */ | ||
753 | c->options &= ~MIPS_CPU_4K_CACHE; | ||
754 | c->options |= MIPS_CPU_SB1_CACHE; | ||
755 | |||
756 | switch (c->processor_id & 0xff00) { | 749 | switch (c->processor_id & 0xff00) { |
757 | case PRID_IMP_SB1: | 750 | case PRID_IMP_SB1: |
758 | c->cputype = CPU_SB1; | 751 | c->cputype = CPU_SB1; |
@@ -793,9 +786,111 @@ static inline void cpu_probe_philips(struct cpuinfo_mips *c) | |||
793 | } | 786 | } |
794 | 787 | ||
795 | 788 | ||
789 | static inline void cpu_probe_broadcom(struct cpuinfo_mips *c) | ||
790 | { | ||
791 | decode_configs(c); | ||
792 | switch (c->processor_id & 0xff00) { | ||
793 | case PRID_IMP_BCM3302: | ||
794 | c->cputype = CPU_BCM3302; | ||
795 | break; | ||
796 | case PRID_IMP_BCM4710: | ||
797 | c->cputype = CPU_BCM4710; | ||
798 | break; | ||
799 | default: | ||
800 | c->cputype = CPU_UNKNOWN; | ||
801 | break; | ||
802 | } | ||
803 | } | ||
804 | |||
805 | const char *__cpu_name[NR_CPUS]; | ||
806 | |||
807 | /* | ||
808 | * Name a CPU | ||
809 | */ | ||
810 | static __init const char *cpu_to_name(struct cpuinfo_mips *c) | ||
811 | { | ||
812 | const char *name = NULL; | ||
813 | |||
814 | switch (c->cputype) { | ||
815 | case CPU_UNKNOWN: name = "unknown"; break; | ||
816 | case CPU_R2000: name = "R2000"; break; | ||
817 | case CPU_R3000: name = "R3000"; break; | ||
818 | case CPU_R3000A: name = "R3000A"; break; | ||
819 | case CPU_R3041: name = "R3041"; break; | ||
820 | case CPU_R3051: name = "R3051"; break; | ||
821 | case CPU_R3052: name = "R3052"; break; | ||
822 | case CPU_R3081: name = "R3081"; break; | ||
823 | case CPU_R3081E: name = "R3081E"; break; | ||
824 | case CPU_R4000PC: name = "R4000PC"; break; | ||
825 | case CPU_R4000SC: name = "R4000SC"; break; | ||
826 | case CPU_R4000MC: name = "R4000MC"; break; | ||
827 | case CPU_R4200: name = "R4200"; break; | ||
828 | case CPU_R4400PC: name = "R4400PC"; break; | ||
829 | case CPU_R4400SC: name = "R4400SC"; break; | ||
830 | case CPU_R4400MC: name = "R4400MC"; break; | ||
831 | case CPU_R4600: name = "R4600"; break; | ||
832 | case CPU_R6000: name = "R6000"; break; | ||
833 | case CPU_R6000A: name = "R6000A"; break; | ||
834 | case CPU_R8000: name = "R8000"; break; | ||
835 | case CPU_R10000: name = "R10000"; break; | ||
836 | case CPU_R12000: name = "R12000"; break; | ||
837 | case CPU_R14000: name = "R14000"; break; | ||
838 | case CPU_R4300: name = "R4300"; break; | ||
839 | case CPU_R4650: name = "R4650"; break; | ||
840 | case CPU_R4700: name = "R4700"; break; | ||
841 | case CPU_R5000: name = "R5000"; break; | ||
842 | case CPU_R5000A: name = "R5000A"; break; | ||
843 | case CPU_R4640: name = "R4640"; break; | ||
844 | case CPU_NEVADA: name = "Nevada"; break; | ||
845 | case CPU_RM7000: name = "RM7000"; break; | ||
846 | case CPU_RM9000: name = "RM9000"; break; | ||
847 | case CPU_R5432: name = "R5432"; break; | ||
848 | case CPU_4KC: name = "MIPS 4Kc"; break; | ||
849 | case CPU_5KC: name = "MIPS 5Kc"; break; | ||
850 | case CPU_R4310: name = "R4310"; break; | ||
851 | case CPU_SB1: name = "SiByte SB1"; break; | ||
852 | case CPU_SB1A: name = "SiByte SB1A"; break; | ||
853 | case CPU_TX3912: name = "TX3912"; break; | ||
854 | case CPU_TX3922: name = "TX3922"; break; | ||
855 | case CPU_TX3927: name = "TX3927"; break; | ||
856 | case CPU_AU1000: name = "Au1000"; break; | ||
857 | case CPU_AU1500: name = "Au1500"; break; | ||
858 | case CPU_AU1100: name = "Au1100"; break; | ||
859 | case CPU_AU1550: name = "Au1550"; break; | ||
860 | case CPU_AU1200: name = "Au1200"; break; | ||
861 | case CPU_4KEC: name = "MIPS 4KEc"; break; | ||
862 | case CPU_4KSC: name = "MIPS 4KSc"; break; | ||
863 | case CPU_VR41XX: name = "NEC Vr41xx"; break; | ||
864 | case CPU_R5500: name = "R5500"; break; | ||
865 | case CPU_TX49XX: name = "TX49xx"; break; | ||
866 | case CPU_20KC: name = "MIPS 20Kc"; break; | ||
867 | case CPU_24K: name = "MIPS 24K"; break; | ||
868 | case CPU_25KF: name = "MIPS 25Kf"; break; | ||
869 | case CPU_34K: name = "MIPS 34K"; break; | ||
870 | case CPU_74K: name = "MIPS 74K"; break; | ||
871 | case CPU_VR4111: name = "NEC VR4111"; break; | ||
872 | case CPU_VR4121: name = "NEC VR4121"; break; | ||
873 | case CPU_VR4122: name = "NEC VR4122"; break; | ||
874 | case CPU_VR4131: name = "NEC VR4131"; break; | ||
875 | case CPU_VR4133: name = "NEC VR4133"; break; | ||
876 | case CPU_VR4181: name = "NEC VR4181"; break; | ||
877 | case CPU_VR4181A: name = "NEC VR4181A"; break; | ||
878 | case CPU_SR71000: name = "Sandcraft SR71000"; break; | ||
879 | case CPU_BCM3302: name = "Broadcom BCM3302"; break; | ||
880 | case CPU_BCM4710: name = "Broadcom BCM4710"; break; | ||
881 | case CPU_PR4450: name = "Philips PR4450"; break; | ||
882 | case CPU_LOONGSON2: name = "ICT Loongson-2"; break; | ||
883 | default: | ||
884 | BUG(); | ||
885 | } | ||
886 | |||
887 | return name; | ||
888 | } | ||
889 | |||
796 | __init void cpu_probe(void) | 890 | __init void cpu_probe(void) |
797 | { | 891 | { |
798 | struct cpuinfo_mips *c = ¤t_cpu_data; | 892 | struct cpuinfo_mips *c = ¤t_cpu_data; |
893 | unsigned int cpu = smp_processor_id(); | ||
799 | 894 | ||
800 | c->processor_id = PRID_IMP_UNKNOWN; | 895 | c->processor_id = PRID_IMP_UNKNOWN; |
801 | c->fpu_id = FPIR_IMP_NONE; | 896 | c->fpu_id = FPIR_IMP_NONE; |
@@ -815,6 +910,9 @@ __init void cpu_probe(void) | |||
815 | case PRID_COMP_SIBYTE: | 910 | case PRID_COMP_SIBYTE: |
816 | cpu_probe_sibyte(c); | 911 | cpu_probe_sibyte(c); |
817 | break; | 912 | break; |
913 | case PRID_COMP_BROADCOM: | ||
914 | cpu_probe_broadcom(c); | ||
915 | break; | ||
818 | case PRID_COMP_SANDCRAFT: | 916 | case PRID_COMP_SANDCRAFT: |
819 | cpu_probe_sandcraft(c); | 917 | cpu_probe_sandcraft(c); |
820 | break; | 918 | break; |
@@ -824,6 +922,14 @@ __init void cpu_probe(void) | |||
824 | default: | 922 | default: |
825 | c->cputype = CPU_UNKNOWN; | 923 | c->cputype = CPU_UNKNOWN; |
826 | } | 924 | } |
925 | |||
926 | /* | ||
927 | * Platform code can force the cpu type to optimize code | ||
928 | * generation. In that case be sure the cpu type is correctly | ||
929 | * manually setup otherwise it could trigger some nasty bugs. | ||
930 | */ | ||
931 | BUG_ON(current_cpu_type() != c->cputype); | ||
932 | |||
827 | if (c->options & MIPS_CPU_FPU) { | 933 | if (c->options & MIPS_CPU_FPU) { |
828 | c->fpu_id = cpu_get_fpu_id(); | 934 | c->fpu_id = cpu_get_fpu_id(); |
829 | 935 | ||
@@ -835,13 +941,16 @@ __init void cpu_probe(void) | |||
835 | c->ases |= MIPS_ASE_MIPS3D; | 941 | c->ases |= MIPS_ASE_MIPS3D; |
836 | } | 942 | } |
837 | } | 943 | } |
944 | |||
945 | __cpu_name[cpu] = cpu_to_name(c); | ||
838 | } | 946 | } |
839 | 947 | ||
840 | __init void cpu_report(void) | 948 | __init void cpu_report(void) |
841 | { | 949 | { |
842 | struct cpuinfo_mips *c = ¤t_cpu_data; | 950 | struct cpuinfo_mips *c = ¤t_cpu_data; |
843 | 951 | ||
844 | printk("CPU revision is: %08x\n", c->processor_id); | 952 | printk(KERN_INFO "CPU revision is: %08x (%s)\n", |
953 | c->processor_id, cpu_name_string()); | ||
845 | if (c->options & MIPS_CPU_FPU) | 954 | if (c->options & MIPS_CPU_FPU) |
846 | printk("FPU revision is: %08x\n", c->fpu_id); | 955 | printk(KERN_INFO "FPU revision is: %08x\n", c->fpu_id); |
847 | } | 956 | } |