Re: [PATCH] MIPS: Add R16000 detection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 01/19/2015 14:34, Matt Turner wrote:
> On Sun, Jan 18, 2015 at 5:30 PM, Joshua Kinard <kumba@xxxxxxxxxx> wrote:
>> From: Joshua Kinard <kumba@xxxxxxxxxx>
>>
>> This allows the kernel to correctly detect an R16000 MIPS CPU on systems that
>> have those.  Otherwise, such systems will detect the CPU as an R14000, due to
>> similarities in the CPU PRId value.
>>
>> Signed-off-by: Joshua Kinard <kumba@xxxxxxxxxx>
>> ---
>>  arch/mips/include/asm/cpu-type.h     |    1 +
>>  arch/mips/include/asm/cpu.h          |    6 +++---
>>  arch/mips/kernel/cpu-probe.c         |    9 +++++++--
>>  arch/mips/kernel/perf_event_mipsxx.c |    1 +
>>  arch/mips/mm/c-r4k.c                 |    4 ++++
>>  arch/mips/mm/page.c                  |    1 +
>>  arch/mips/mm/tlb-r4k.c               |    3 ++-
>>  arch/mips/mm/tlbex.c                 |    1 +
>>  arch/mips/oprofile/common.c          |    1 +
>>  arch/mips/oprofile/op_model_mipsxx.c |    1 +
>>  10 files changed, 22 insertions(+), 6 deletions(-)
>>
>> linux-mips-add-r16000-detection.patch
>> diff --git a/arch/mips/include/asm/cpu-type.h b/arch/mips/include/asm/cpu-type.h
>> index b4e2bd8..d85fc26 100644
>> --- a/arch/mips/include/asm/cpu-type.h
>> +++ b/arch/mips/include/asm/cpu-type.h
>> @@ -150,6 +150,7 @@ static inline int __pure __get_cpu_type(const int cpu_type)
>>         case CPU_R10000:
>>         case CPU_R12000:
>>         case CPU_R14000:
>> +       case CPU_R16000:
>>  #endif
>>  #ifdef CONFIG_SYS_HAS_CPU_RM7000
>>         case CPU_RM7000:
>> diff --git a/arch/mips/include/asm/cpu.h b/arch/mips/include/asm/cpu.h
>> index 33866fc..53acfce 100644
>> --- a/arch/mips/include/asm/cpu.h
>> +++ b/arch/mips/include/asm/cpu.h
>> @@ -67,7 +67,7 @@
>>  #define PRID_IMP_R4300         0x0b00
>>  #define PRID_IMP_VR41XX                0x0c00
>>  #define PRID_IMP_R12000                0x0e00
>> -#define PRID_IMP_R14000                0x0f00
>> +#define PRID_IMP_R14000                0x0f00          /* R14K && R16K */
>>  #define PRID_IMP_R8000         0x1000
>>  #define PRID_IMP_PR4450                0x1200
>>  #define PRID_IMP_R4600         0x2000
>> @@ -283,8 +283,8 @@ enum cpu_type_enum {
>>         CPU_R4000PC, CPU_R4000SC, CPU_R4000MC, CPU_R4200, CPU_R4300, CPU_R4310,
>>         CPU_R4400PC, CPU_R4400SC, CPU_R4400MC, CPU_R4600, CPU_R4640, CPU_R4650,
>>         CPU_R4700, CPU_R5000, CPU_R5500, CPU_NEVADA, CPU_R5432, CPU_R10000,
>> -       CPU_R12000, CPU_R14000, CPU_VR41XX, CPU_VR4111, CPU_VR4121, CPU_VR4122,
>> -       CPU_VR4131, CPU_VR4133, CPU_VR4181, CPU_VR4181A, CPU_RM7000,
>> +       CPU_R12000, CPU_R14000, CPU_R16000, CPU_VR41XX, CPU_VR4111, CPU_VR4121,
>> +       CPU_VR4122, CPU_VR4131, CPU_VR4133, CPU_VR4181, CPU_VR4181A, CPU_RM7000,
>>         CPU_SR71000, CPU_TX49XX,
>>
>>         /*
>> diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
>> index 5342674..3f334a8 100644
>> --- a/arch/mips/kernel/cpu-probe.c
>> +++ b/arch/mips/kernel/cpu-probe.c
>> @@ -833,8 +833,13 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
>>                 c->tlbsize = 64;
>>                 break;
>>         case PRID_IMP_R14000:
>> -               c->cputype = CPU_R14000;
>> -               __cpu_name[cpu] = "R14000";
>> +               if (((c->processor_id >> 4) & 0x0f) > 2) {
>> +                       c->cputype = CPU_R16000;
>> +                       __cpu_name[cpu] = "R16000";
>> +               } else {
>> +                       c->cputype = CPU_R14000;
>> +                       __cpu_name[cpu] = "R14000";
>> +               }
> 
> It looks like this is the only hunk that has a functional change, and
> that is simply setting __cpu_name[cpu] to "R16000"
> 
> You can do that without adding CPU_R16000 to the enumeration. I don't
> see that adding it accomplishes anything.
> 

It mirrors what CPU_R14000 and CPU_R12000 do.  I won't rule out that, down the
road, something about the R16K might be different enough from the R14K to
require one of these other spots later on, so adding it now isn't going to
adversely affect things.  Only IP35 has R16K's anyways, which doesn't support
Linux just yet.  It's a "for the future" patch.  Last of the R-series anyways,
since the R18000 died before it ever became silicon.

--J




[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux