~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to arch/mips/kernel/cpu-probe.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
291
291
#endif
292
292
}
293
293
 
 
294
static inline void set_elf_platform(int cpu, const char *plat)
 
295
{
 
296
        if (cpu == 0)
 
297
                __elf_platform = plat;
 
298
}
 
299
 
294
300
/*
295
301
 * Get the FPU Implementation/Revision.
296
302
 */
614
620
        case PRID_IMP_LOONGSON2:
615
621
                c->cputype = CPU_LOONGSON2;
616
622
                __cpu_name[cpu] = "ICT Loongson-2";
 
623
 
 
624
                switch (c->processor_id & PRID_REV_MASK) {
 
625
                case PRID_REV_LOONGSON2E:
 
626
                        set_elf_platform(cpu, "loongson2e");
 
627
                        break;
 
628
                case PRID_REV_LOONGSON2F:
 
629
                        set_elf_platform(cpu, "loongson2f");
 
630
                        break;
 
631
                }
 
632
 
617
633
                c->isa_level = MIPS_CPU_ISA_III;
618
634
                c->options = R4K_OPTS |
619
635
                             MIPS_CPU_FPU | MIPS_CPU_LLSC |
911
927
        case PRID_IMP_BMIPS32_REV8:
912
928
                c->cputype = CPU_BMIPS32;
913
929
                __cpu_name[cpu] = "Broadcom BMIPS32";
 
930
                set_elf_platform(cpu, "bmips32");
914
931
                break;
915
932
        case PRID_IMP_BMIPS3300:
916
933
        case PRID_IMP_BMIPS3300_ALT:
917
934
        case PRID_IMP_BMIPS3300_BUG:
918
935
                c->cputype = CPU_BMIPS3300;
919
936
                __cpu_name[cpu] = "Broadcom BMIPS3300";
 
937
                set_elf_platform(cpu, "bmips3300");
920
938
                break;
921
939
        case PRID_IMP_BMIPS43XX: {
922
940
                int rev = c->processor_id & 0xff;
925
943
                                rev <= PRID_REV_BMIPS4380_HI) {
926
944
                        c->cputype = CPU_BMIPS4380;
927
945
                        __cpu_name[cpu] = "Broadcom BMIPS4380";
 
946
                        set_elf_platform(cpu, "bmips4380");
928
947
                } else {
929
948
                        c->cputype = CPU_BMIPS4350;
930
949
                        __cpu_name[cpu] = "Broadcom BMIPS4350";
 
950
                        set_elf_platform(cpu, "bmips4350");
931
951
                }
932
952
                break;
933
953
        }
934
954
        case PRID_IMP_BMIPS5000:
935
955
                c->cputype = CPU_BMIPS5000;
936
956
                __cpu_name[cpu] = "Broadcom BMIPS5000";
 
957
                set_elf_platform(cpu, "bmips5000");
937
958
                c->options |= MIPS_CPU_ULRI;
938
959
                break;
939
960
        }
956
977
                c->cputype = CPU_CAVIUM_OCTEON_PLUS;
957
978
                __cpu_name[cpu] = "Cavium Octeon+";
958
979
platform:
959
 
                if (cpu == 0)
960
 
                        __elf_platform = "octeon";
 
980
                set_elf_platform(cpu, "octeon");
961
981
                break;
962
982
        case PRID_IMP_CAVIUM_CN63XX:
963
983
                c->cputype = CPU_CAVIUM_OCTEON2;
964
984
                __cpu_name[cpu] = "Cavium Octeon II";
965
 
                if (cpu == 0)
966
 
                        __elf_platform = "octeon2";
 
985
                set_elf_platform(cpu, "octeon2");
967
986
                break;
968
987
        default:
969
988
                printk(KERN_INFO "Unknown Octeon chip!\n");
988
1007
        }
989
1008
}
990
1009
 
 
1010
static inline void cpu_probe_netlogic(struct cpuinfo_mips *c, int cpu)
 
1011
{
 
1012
        decode_configs(c);
 
1013
 
 
1014
        c->options = (MIPS_CPU_TLB       |
 
1015
                        MIPS_CPU_4KEX    |
 
1016
                        MIPS_CPU_COUNTER |
 
1017
                        MIPS_CPU_DIVEC   |
 
1018
                        MIPS_CPU_WATCH   |
 
1019
                        MIPS_CPU_EJTAG   |
 
1020
                        MIPS_CPU_LLSC);
 
1021
 
 
1022
        switch (c->processor_id & 0xff00) {
 
1023
        case PRID_IMP_NETLOGIC_XLR732:
 
1024
        case PRID_IMP_NETLOGIC_XLR716:
 
1025
        case PRID_IMP_NETLOGIC_XLR532:
 
1026
        case PRID_IMP_NETLOGIC_XLR308:
 
1027
        case PRID_IMP_NETLOGIC_XLR532C:
 
1028
        case PRID_IMP_NETLOGIC_XLR516C:
 
1029
        case PRID_IMP_NETLOGIC_XLR508C:
 
1030
        case PRID_IMP_NETLOGIC_XLR308C:
 
1031
                c->cputype = CPU_XLR;
 
1032
                __cpu_name[cpu] = "Netlogic XLR";
 
1033
                break;
 
1034
 
 
1035
        case PRID_IMP_NETLOGIC_XLS608:
 
1036
        case PRID_IMP_NETLOGIC_XLS408:
 
1037
        case PRID_IMP_NETLOGIC_XLS404:
 
1038
        case PRID_IMP_NETLOGIC_XLS208:
 
1039
        case PRID_IMP_NETLOGIC_XLS204:
 
1040
        case PRID_IMP_NETLOGIC_XLS108:
 
1041
        case PRID_IMP_NETLOGIC_XLS104:
 
1042
        case PRID_IMP_NETLOGIC_XLS616B:
 
1043
        case PRID_IMP_NETLOGIC_XLS608B:
 
1044
        case PRID_IMP_NETLOGIC_XLS416B:
 
1045
        case PRID_IMP_NETLOGIC_XLS412B:
 
1046
        case PRID_IMP_NETLOGIC_XLS408B:
 
1047
        case PRID_IMP_NETLOGIC_XLS404B:
 
1048
                c->cputype = CPU_XLR;
 
1049
                __cpu_name[cpu] = "Netlogic XLS";
 
1050
                break;
 
1051
 
 
1052
        default:
 
1053
                printk(KERN_INFO "Unknown Netlogic chip id [%02x]!\n",
 
1054
                       c->processor_id);
 
1055
                c->cputype = CPU_XLR;
 
1056
                break;
 
1057
        }
 
1058
 
 
1059
        c->isa_level = MIPS_CPU_ISA_M64R1;
 
1060
        c->tlbsize = ((read_c0_config1() >> 25) & 0x3f) + 1;
 
1061
}
 
1062
 
991
1063
#ifdef CONFIG_64BIT
992
1064
/* For use by uaccess.h */
993
1065
u64 __ua_limit;
1035
1107
        case PRID_COMP_INGENIC:
1036
1108
                cpu_probe_ingenic(c, cpu);
1037
1109
                break;
 
1110
        case PRID_COMP_NETLOGIC:
 
1111
                cpu_probe_netlogic(c, cpu);
 
1112
                break;
1038
1113
        }
1039
1114
 
1040
1115
        BUG_ON(!__cpu_name[cpu]);