diff options
Diffstat (limited to 'arch/mips/include')
49 files changed, 1466 insertions, 1567 deletions
diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 05439187891d..335e5290ec75 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild | |||
| @@ -15,4 +15,5 @@ generic-y += segment.h | |||
| 15 | generic-y += serial.h | 15 | generic-y += serial.h |
| 16 | generic-y += trace_clock.h | 16 | generic-y += trace_clock.h |
| 17 | generic-y += ucontext.h | 17 | generic-y += ucontext.h |
| 18 | generic-y += user.h | ||
| 18 | generic-y += xor.h | 19 | generic-y += xor.h |
diff --git a/arch/mips/include/asm/abi.h b/arch/mips/include/asm/abi.h index 909bb6984866..7186bb51b89b 100644 --- a/arch/mips/include/asm/abi.h +++ b/arch/mips/include/asm/abi.h | |||
| @@ -13,13 +13,11 @@ | |||
| 13 | #include <asm/siginfo.h> | 13 | #include <asm/siginfo.h> |
| 14 | 14 | ||
| 15 | struct mips_abi { | 15 | struct mips_abi { |
| 16 | int (* const setup_frame)(void *sig_return, struct k_sigaction *ka, | 16 | int (* const setup_frame)(void *sig_return, struct ksignal *ksig, |
| 17 | struct pt_regs *regs, int signr, | 17 | struct pt_regs *regs, sigset_t *set); |
| 18 | sigset_t *set); | ||
| 19 | const unsigned long signal_return_offset; | 18 | const unsigned long signal_return_offset; |
| 20 | int (* const setup_rt_frame)(void *sig_return, struct k_sigaction *ka, | 19 | int (* const setup_rt_frame)(void *sig_return, struct ksignal *ksig, |
| 21 | struct pt_regs *regs, int signr, | 20 | struct pt_regs *regs, sigset_t *set); |
| 22 | sigset_t *set, siginfo_t *info); | ||
| 23 | const unsigned long rt_signal_return_offset; | 21 | const unsigned long rt_signal_return_offset; |
| 24 | const unsigned long restart; | 22 | const unsigned long restart; |
| 25 | }; | 23 | }; |
diff --git a/arch/mips/include/asm/addrspace.h b/arch/mips/include/asm/addrspace.h index 3f745459fdb5..3b0e51d5a613 100644 --- a/arch/mips/include/asm/addrspace.h +++ b/arch/mips/include/asm/addrspace.h | |||
| @@ -52,7 +52,7 @@ | |||
| 52 | */ | 52 | */ |
| 53 | #define CPHYSADDR(a) ((_ACAST32_(a)) & 0x1fffffff) | 53 | #define CPHYSADDR(a) ((_ACAST32_(a)) & 0x1fffffff) |
| 54 | #define XPHYSADDR(a) ((_ACAST64_(a)) & \ | 54 | #define XPHYSADDR(a) ((_ACAST64_(a)) & \ |
| 55 | _CONST64_(0x000000ffffffffff)) | 55 | _CONST64_(0x0000ffffffffffff)) |
| 56 | 56 | ||
| 57 | #ifdef CONFIG_64BIT | 57 | #ifdef CONFIG_64BIT |
| 58 | 58 | ||
diff --git a/arch/mips/include/asm/asmmacro.h b/arch/mips/include/asm/asmmacro.h index 935543f14538..cd9a98bc8f60 100644 --- a/arch/mips/include/asm/asmmacro.h +++ b/arch/mips/include/asm/asmmacro.h | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | #include <asm/hazards.h> | 11 | #include <asm/hazards.h> |
| 12 | #include <asm/asm-offsets.h> | 12 | #include <asm/asm-offsets.h> |
| 13 | #include <asm/msa.h> | ||
| 13 | 14 | ||
| 14 | #ifdef CONFIG_32BIT | 15 | #ifdef CONFIG_32BIT |
| 15 | #include <asm/asmmacro-32.h> | 16 | #include <asm/asmmacro-32.h> |
| @@ -378,9 +379,19 @@ | |||
| 378 | st_d 29, THREAD_FPR29, \thread | 379 | st_d 29, THREAD_FPR29, \thread |
| 379 | st_d 30, THREAD_FPR30, \thread | 380 | st_d 30, THREAD_FPR30, \thread |
| 380 | st_d 31, THREAD_FPR31, \thread | 381 | st_d 31, THREAD_FPR31, \thread |
| 382 | .set push | ||
| 383 | .set noat | ||
| 384 | cfcmsa $1, MSA_CSR | ||
| 385 | sw $1, THREAD_MSA_CSR(\thread) | ||
| 386 | .set pop | ||
| 381 | .endm | 387 | .endm |
| 382 | 388 | ||
| 383 | .macro msa_restore_all thread | 389 | .macro msa_restore_all thread |
| 390 | .set push | ||
| 391 | .set noat | ||
| 392 | lw $1, THREAD_MSA_CSR(\thread) | ||
| 393 | ctcmsa MSA_CSR, $1 | ||
| 394 | .set pop | ||
| 384 | ld_d 0, THREAD_FPR0, \thread | 395 | ld_d 0, THREAD_FPR0, \thread |
| 385 | ld_d 1, THREAD_FPR1, \thread | 396 | ld_d 1, THREAD_FPR1, \thread |
| 386 | ld_d 2, THREAD_FPR2, \thread | 397 | ld_d 2, THREAD_FPR2, \thread |
| @@ -415,4 +426,24 @@ | |||
| 415 | ld_d 31, THREAD_FPR31, \thread | 426 | ld_d 31, THREAD_FPR31, \thread |
| 416 | .endm | 427 | .endm |
| 417 | 428 | ||
| 429 | .macro msa_init_upper wd | ||
| 430 | #ifdef CONFIG_64BIT | ||
| 431 | insert_d \wd, 1 | ||
| 432 | #else | ||
| 433 | insert_w \wd, 2 | ||
| 434 | insert_w \wd, 3 | ||
| 435 | #endif | ||
| 436 | .if 31-\wd | ||
| 437 | msa_init_upper (\wd+1) | ||
| 438 | .endif | ||
| 439 | .endm | ||
| 440 | |||
| 441 | .macro msa_init_all_upper | ||
| 442 | .set push | ||
| 443 | .set noat | ||
| 444 | not $1, zero | ||
| 445 | msa_init_upper 0 | ||
| 446 | .set pop | ||
| 447 | .endm | ||
| 448 | |||
| 418 | #endif /* _ASM_ASMMACRO_H */ | 449 | #endif /* _ASM_ASMMACRO_H */ |
diff --git a/arch/mips/include/asm/bitops.h b/arch/mips/include/asm/bitops.h index 7c8816f7b7c4..bae6b0fa8ab5 100644 --- a/arch/mips/include/asm/bitops.h +++ b/arch/mips/include/asm/bitops.h | |||
| @@ -559,7 +559,13 @@ static inline int fls(int x) | |||
| 559 | int r; | 559 | int r; |
| 560 | 560 | ||
| 561 | if (__builtin_constant_p(cpu_has_clo_clz) && cpu_has_clo_clz) { | 561 | if (__builtin_constant_p(cpu_has_clo_clz) && cpu_has_clo_clz) { |
| 562 | __asm__("clz %0, %1" : "=r" (x) : "r" (x)); | 562 | __asm__( |
| 563 | " .set push \n" | ||
| 564 | " .set mips32 \n" | ||
| 565 | " clz %0, %1 \n" | ||
| 566 | " .set pop \n" | ||
| 567 | : "=r" (x) | ||
| 568 | : "r" (x)); | ||
| 563 | 569 | ||
| 564 | return 32 - x; | 570 | return 32 - x; |
| 565 | } | 571 | } |
diff --git a/arch/mips/include/asm/cop2.h b/arch/mips/include/asm/cop2.h index c1516cc0285f..d0352983b94d 100644 --- a/arch/mips/include/asm/cop2.h +++ b/arch/mips/include/asm/cop2.h | |||
| @@ -32,6 +32,14 @@ extern void nlm_cop2_restore(struct nlm_cop2_state *); | |||
| 32 | #define cop2_present 1 | 32 | #define cop2_present 1 |
| 33 | #define cop2_lazy_restore 0 | 33 | #define cop2_lazy_restore 0 |
| 34 | 34 | ||
| 35 | #elif defined(CONFIG_CPU_LOONGSON3) | ||
| 36 | |||
| 37 | #define cop2_save(r) | ||
| 38 | #define cop2_restore(r) | ||
| 39 | |||
| 40 | #define cop2_present 1 | ||
| 41 | #define cop2_lazy_restore 1 | ||
| 42 | |||
| 35 | #else | 43 | #else |
| 36 | 44 | ||
| 37 | #define cop2_present 0 | 45 | #define cop2_present 0 |
diff --git a/arch/mips/include/asm/cpu-features.h b/arch/mips/include/asm/cpu-features.h index c7d8c997d93e..e079598ae051 100644 --- a/arch/mips/include/asm/cpu-features.h +++ b/arch/mips/include/asm/cpu-features.h | |||
| @@ -29,6 +29,15 @@ | |||
| 29 | #ifndef cpu_has_eva | 29 | #ifndef cpu_has_eva |
| 30 | #define cpu_has_eva (cpu_data[0].options & MIPS_CPU_EVA) | 30 | #define cpu_has_eva (cpu_data[0].options & MIPS_CPU_EVA) |
| 31 | #endif | 31 | #endif |
| 32 | #ifndef cpu_has_htw | ||
| 33 | #define cpu_has_htw (cpu_data[0].options & MIPS_CPU_HTW) | ||
| 34 | #endif | ||
| 35 | #ifndef cpu_has_rixiex | ||
| 36 | #define cpu_has_rixiex (cpu_data[0].options & MIPS_CPU_RIXIEX) | ||
| 37 | #endif | ||
| 38 | #ifndef cpu_has_maar | ||
| 39 | #define cpu_has_maar (cpu_data[0].options & MIPS_CPU_MAAR) | ||
| 40 | #endif | ||
| 32 | 41 | ||
| 33 | /* | 42 | /* |
| 34 | * For the moment we don't consider R6000 and R8000 so we can assume that | 43 | * For the moment we don't consider R6000 and R8000 so we can assume that |
diff --git a/arch/mips/include/asm/cpu-info.h b/arch/mips/include/asm/cpu-info.h index 47d5967ce7ef..d5f42c168001 100644 --- a/arch/mips/include/asm/cpu-info.h +++ b/arch/mips/include/asm/cpu-info.h | |||
| @@ -44,8 +44,8 @@ struct cpuinfo_mips { | |||
| 44 | /* | 44 | /* |
| 45 | * Capability and feature descriptor structure for MIPS CPU | 45 | * Capability and feature descriptor structure for MIPS CPU |
| 46 | */ | 46 | */ |
| 47 | unsigned long options; | ||
| 48 | unsigned long ases; | 47 | unsigned long ases; |
| 48 | unsigned long long options; | ||
| 49 | unsigned int udelay_val; | 49 | unsigned int udelay_val; |
| 50 | unsigned int processor_id; | 50 | unsigned int processor_id; |
| 51 | unsigned int fpu_id; | 51 | unsigned int fpu_id; |
| @@ -61,6 +61,7 @@ struct cpuinfo_mips { | |||
| 61 | struct cache_desc scache; /* Secondary cache */ | 61 | struct cache_desc scache; /* Secondary cache */ |
| 62 | struct cache_desc tcache; /* Tertiary/split secondary cache */ | 62 | struct cache_desc tcache; /* Tertiary/split secondary cache */ |
| 63 | int srsets; /* Shadow register sets */ | 63 | int srsets; /* Shadow register sets */ |
| 64 | int package;/* physical package number */ | ||
| 64 | int core; /* physical core number */ | 65 | int core; /* physical core number */ |
| 65 | #ifdef CONFIG_64BIT | 66 | #ifdef CONFIG_64BIT |
| 66 | int vmbits; /* Virtual memory size in bits */ | 67 | int vmbits; /* Virtual memory size in bits */ |
| @@ -115,7 +116,7 @@ struct proc_cpuinfo_notifier_args { | |||
| 115 | #ifdef CONFIG_MIPS_MT_SMP | 116 | #ifdef CONFIG_MIPS_MT_SMP |
| 116 | # define cpu_vpe_id(cpuinfo) ((cpuinfo)->vpe_id) | 117 | # define cpu_vpe_id(cpuinfo) ((cpuinfo)->vpe_id) |
| 117 | #else | 118 | #else |
| 118 | # define cpu_vpe_id(cpuinfo) 0 | 119 | # define cpu_vpe_id(cpuinfo) ({ (void)cpuinfo; 0; }) |
| 119 | #endif | 120 | #endif |
| 120 | 121 | ||
| 121 | #endif /* __ASM_CPU_INFO_H */ | 122 | #endif /* __ASM_CPU_INFO_H */ |
diff --git a/arch/mips/include/asm/cpu.h b/arch/mips/include/asm/cpu.h index 129d08701e91..dfdc77ed1839 100644 --- a/arch/mips/include/asm/cpu.h +++ b/arch/mips/include/asm/cpu.h | |||
| @@ -233,6 +233,8 @@ | |||
| 233 | #define PRID_REV_LOONGSON2E 0x0002 | 233 | #define PRID_REV_LOONGSON2E 0x0002 |
| 234 | #define PRID_REV_LOONGSON2F 0x0003 | 234 | #define PRID_REV_LOONGSON2F 0x0003 |
| 235 | #define PRID_REV_LOONGSON3A 0x0005 | 235 | #define PRID_REV_LOONGSON3A 0x0005 |
| 236 | #define PRID_REV_LOONGSON3B_R1 0x0006 | ||
| 237 | #define PRID_REV_LOONGSON3B_R2 0x0007 | ||
| 236 | 238 | ||
| 237 | /* | 239 | /* |
| 238 | * Older processors used to encode processor version and revision in two | 240 | * Older processors used to encode processor version and revision in two |
| @@ -335,34 +337,37 @@ enum cpu_type_enum { | |||
| 335 | /* | 337 | /* |
| 336 | * CPU Option encodings | 338 | * CPU Option encodings |
| 337 | */ | 339 | */ |
| 338 | #define MIPS_CPU_TLB 0x00000001 /* CPU has TLB */ | 340 | #define MIPS_CPU_TLB 0x00000001ull /* CPU has TLB */ |
| 339 | #define MIPS_CPU_4KEX 0x00000002 /* "R4K" exception model */ | 341 | #define MIPS_CPU_4KEX 0x00000002ull /* "R4K" exception model */ |
| 340 | #define MIPS_CPU_3K_CACHE 0x00000004 /* R3000-style caches */ | 342 | #define MIPS_CPU_3K_CACHE 0x00000004ull /* R3000-style caches */ |
| 341 | #define MIPS_CPU_4K_CACHE 0x00000008 /* R4000-style caches */ | 343 | #define MIPS_CPU_4K_CACHE 0x00000008ull /* R4000-style caches */ |
| 342 | #define MIPS_CPU_TX39_CACHE 0x00000010 /* TX3900-style caches */ | 344 | #define MIPS_CPU_TX39_CACHE 0x00000010ull /* TX3900-style caches */ |
| 343 | #define MIPS_CPU_FPU 0x00000020 /* CPU has FPU */ | 345 | #define MIPS_CPU_FPU 0x00000020ull /* CPU has FPU */ |
| 344 | #define MIPS_CPU_32FPR 0x00000040 /* 32 dbl. prec. FP registers */ | 346 | #define MIPS_CPU_32FPR 0x00000040ull /* 32 dbl. prec. FP registers */ |
| 345 | #define MIPS_CPU_COUNTER 0x00000080 /* Cycle count/compare */ | 347 | #define MIPS_CPU_COUNTER 0x00000080ull /* Cycle count/compare */ |
| 346 | #define MIPS_CPU_WATCH 0x00000100 /* watchpoint registers */ | 348 | #define MIPS_CPU_WATCH 0x00000100ull /* watchpoint registers */ |
| 347 | #define MIPS_CPU_DIVEC 0x00000200 /* dedicated interrupt vector */ | 349 | #define MIPS_CPU_DIVEC 0x00000200ull /* dedicated interrupt vector */ |
| 348 | #define MIPS_CPU_VCE 0x00000400 /* virt. coherence conflict possible */ | 350 | #define MIPS_CPU_VCE 0x00000400ull /* virt. coherence conflict possible */ |
| 349 | #define MIPS_CPU_CACHE_CDEX_P 0x00000800 /* Create_Dirty_Exclusive CACHE op */ | 351 | #define MIPS_CPU_CACHE_CDEX_P 0x00000800ull /* Create_Dirty_Exclusive CACHE op */ |
| 350 | #define MIPS_CPU_CACHE_CDEX_S 0x00001000 /* ... same for seconary cache ... */ | 352 | #define MIPS_CPU_CACHE_CDEX_S 0x00001000ull /* ... same for seconary cache ... */ |
| 351 | #define MIPS_CPU_MCHECK 0x00002000 /* Machine check exception */ | 353 | #define MIPS_CPU_MCHECK 0x00002000ull /* Machine check exception */ |
| 352 | #define MIPS_CPU_EJTAG 0x00004000 /* EJTAG exception */ | 354 | #define MIPS_CPU_EJTAG 0x00004000ull /* EJTAG exception */ |
| 353 | #define MIPS_CPU_NOFPUEX 0x00008000 /* no FPU exception */ | 355 | #define MIPS_CPU_NOFPUEX 0x00008000ull /* no FPU exception */ |
| 354 | #define MIPS_CPU_LLSC 0x00010000 /* CPU has ll/sc instructions */ | 356 | #define MIPS_CPU_LLSC 0x00010000ull /* CPU has ll/sc instructions */ |
| 355 | #define MIPS_CPU_INCLUSIVE_CACHES 0x00020000 /* P-cache subset enforced */ | 357 | #define MIPS_CPU_INCLUSIVE_CACHES 0x00020000ull /* P-cache subset enforced */ |
| 356 | #define MIPS_CPU_PREFETCH 0x00040000 /* CPU has usable prefetch */ | 358 | #define MIPS_CPU_PREFETCH 0x00040000ull /* CPU has usable prefetch */ |
| 357 | #define MIPS_CPU_VINT 0x00080000 /* CPU supports MIPSR2 vectored interrupts */ | 359 | #define MIPS_CPU_VINT 0x00080000ull /* CPU supports MIPSR2 vectored interrupts */ |
| 358 | #define MIPS_CPU_VEIC 0x00100000 /* CPU supports MIPSR2 external interrupt controller mode */ | 360 | #define MIPS_CPU_VEIC 0x00100000ull /* CPU supports MIPSR2 external interrupt controller mode */ |
| 359 | #define MIPS_CPU_ULRI 0x00200000 /* CPU has ULRI feature */ | 361 | #define MIPS_CPU_ULRI 0x00200000ull /* CPU has ULRI feature */ |
| 360 | #define MIPS_CPU_PCI 0x00400000 /* CPU has Perf Ctr Int indicator */ | 362 | #define MIPS_CPU_PCI 0x00400000ull /* CPU has Perf Ctr Int indicator */ |
| 361 | #define MIPS_CPU_RIXI 0x00800000 /* CPU has TLB Read/eXec Inhibit */ | 363 | #define MIPS_CPU_RIXI 0x00800000ull /* CPU has TLB Read/eXec Inhibit */ |
| 362 | #define MIPS_CPU_MICROMIPS 0x01000000 /* CPU has microMIPS capability */ | 364 | #define MIPS_CPU_MICROMIPS 0x01000000ull /* CPU has microMIPS capability */ |
| 363 | #define MIPS_CPU_TLBINV 0x02000000 /* CPU supports TLBINV/F */ | 365 | #define MIPS_CPU_TLBINV 0x02000000ull /* CPU supports TLBINV/F */ |
| 364 | #define MIPS_CPU_SEGMENTS 0x04000000 /* CPU supports Segmentation Control registers */ | 366 | #define MIPS_CPU_SEGMENTS 0x04000000ull /* CPU supports Segmentation Control registers */ |
| 365 | #define MIPS_CPU_EVA 0x80000000 /* CPU supports Enhanced Virtual Addressing */ | 367 | #define MIPS_CPU_EVA 0x80000000ull /* CPU supports Enhanced Virtual Addressing */ |
| 368 | #define MIPS_CPU_HTW 0x100000000ull /* CPU support Hardware Page Table Walker */ | ||
| 369 | #define MIPS_CPU_RIXIEX 0x200000000ull /* CPU has unique exception codes for {Read, Execute}-Inhibit exceptions */ | ||
| 370 | #define MIPS_CPU_MAAR 0x400000000ull /* MAAR(I) registers are present */ | ||
| 366 | 371 | ||
| 367 | /* | 372 | /* |
| 368 | * CPU ASE encodings | 373 | * CPU ASE encodings |
diff --git a/arch/mips/include/asm/elf.h b/arch/mips/include/asm/elf.h index d4144056e928..1d38fe0edd2d 100644 --- a/arch/mips/include/asm/elf.h +++ b/arch/mips/include/asm/elf.h | |||
| @@ -339,23 +339,6 @@ do { \ | |||
| 339 | 339 | ||
| 340 | #endif /* CONFIG_64BIT */ | 340 | #endif /* CONFIG_64BIT */ |
| 341 | 341 | ||
| 342 | struct pt_regs; | ||
| 343 | struct task_struct; | ||
| 344 | |||
| 345 | extern void elf_dump_regs(elf_greg_t *, struct pt_regs *regs); | ||
| 346 | extern int dump_task_regs(struct task_struct *, elf_gregset_t *); | ||
| 347 | extern int dump_task_fpu(struct task_struct *, elf_fpregset_t *); | ||
| 348 | |||
| 349 | #ifndef ELF_CORE_COPY_REGS | ||
| 350 | #define ELF_CORE_COPY_REGS(elf_regs, regs) \ | ||
| 351 | elf_dump_regs((elf_greg_t *)&(elf_regs), regs); | ||
| 352 | #endif | ||
| 353 | #ifndef ELF_CORE_COPY_TASK_REGS | ||
| 354 | #define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs) | ||
| 355 | #endif | ||
| 356 | #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) \ | ||
| 357 | dump_task_fpu(tsk, elf_fpregs) | ||
| 358 | |||
| 359 | #define CORE_DUMP_USE_REGSET | 342 | #define CORE_DUMP_USE_REGSET |
| 360 | #define ELF_EXEC_PAGESIZE PAGE_SIZE | 343 | #define ELF_EXEC_PAGESIZE PAGE_SIZE |
| 361 | 344 | ||
diff --git a/arch/mips/include/asm/fpu.h b/arch/mips/include/asm/fpu.h index a939574f8293..4d0aeda68397 100644 --- a/arch/mips/include/asm/fpu.h +++ b/arch/mips/include/asm/fpu.h | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <asm/hazards.h> | 21 | #include <asm/hazards.h> |
| 22 | #include <asm/processor.h> | 22 | #include <asm/processor.h> |
| 23 | #include <asm/current.h> | 23 | #include <asm/current.h> |
| 24 | #include <asm/msa.h> | ||
| 24 | 25 | ||
| 25 | #ifdef CONFIG_MIPS_MT_FPAFF | 26 | #ifdef CONFIG_MIPS_MT_FPAFF |
| 26 | #include <asm/mips_mt.h> | 27 | #include <asm/mips_mt.h> |
| @@ -141,13 +142,21 @@ static inline int own_fpu(int restore) | |||
| 141 | static inline void lose_fpu(int save) | 142 | static inline void lose_fpu(int save) |
| 142 | { | 143 | { |
| 143 | preempt_disable(); | 144 | preempt_disable(); |
| 144 | if (is_fpu_owner()) { | 145 | if (is_msa_enabled()) { |
| 146 | if (save) { | ||
| 147 | save_msa(current); | ||
| 148 | asm volatile("cfc1 %0, $31" | ||
| 149 | : "=r"(current->thread.fpu.fcr31)); | ||
| 150 | } | ||
| 151 | disable_msa(); | ||
| 152 | clear_thread_flag(TIF_USEDMSA); | ||
| 153 | } else if (is_fpu_owner()) { | ||
| 145 | if (save) | 154 | if (save) |
| 146 | _save_fp(current); | 155 | _save_fp(current); |
| 147 | KSTK_STATUS(current) &= ~ST0_CU1; | ||
| 148 | clear_thread_flag(TIF_USEDFPU); | ||
| 149 | __disable_fpu(); | 156 | __disable_fpu(); |
| 150 | } | 157 | } |
| 158 | KSTK_STATUS(current) &= ~ST0_CU1; | ||
| 159 | clear_thread_flag(TIF_USEDFPU); | ||
| 151 | preempt_enable(); | 160 | preempt_enable(); |
| 152 | } | 161 | } |
| 153 | 162 | ||
| @@ -155,8 +164,6 @@ static inline int init_fpu(void) | |||
| 155 | { | 164 | { |
| 156 | int ret = 0; | 165 | int ret = 0; |
| 157 | 166 | ||
| 158 | preempt_disable(); | ||
| 159 | |||
| 160 | if (cpu_has_fpu) { | 167 | if (cpu_has_fpu) { |
| 161 | ret = __own_fpu(); | 168 | ret = __own_fpu(); |
| 162 | if (!ret) | 169 | if (!ret) |
| @@ -164,8 +171,6 @@ static inline int init_fpu(void) | |||
| 164 | } else | 171 | } else |
| 165 | fpu_emulator_init_fpu(); | 172 | fpu_emulator_init_fpu(); |
| 166 | 173 | ||
| 167 | preempt_enable(); | ||
| 168 | |||
| 169 | return ret; | 174 | return ret; |
| 170 | } | 175 | } |
| 171 | 176 | ||
diff --git a/arch/mips/include/asm/gic.h b/arch/mips/include/asm/gic.h index 10f6a99f92c2..3f20b2111d56 100644 --- a/arch/mips/include/asm/gic.h +++ b/arch/mips/include/asm/gic.h | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | #include <linux/bitmap.h> | 14 | #include <linux/bitmap.h> |
| 15 | #include <linux/threads.h> | 15 | #include <linux/threads.h> |
| 16 | 16 | ||
| 17 | #include <irq.h> | ||
| 18 | |||
| 17 | #undef GICISBYTELITTLEENDIAN | 19 | #undef GICISBYTELITTLEENDIAN |
| 18 | 20 | ||
| 19 | /* Constants */ | 21 | /* Constants */ |
| @@ -22,8 +24,6 @@ | |||
| 22 | #define GIC_TRIG_EDGE 1 | 24 | #define GIC_TRIG_EDGE 1 |
| 23 | #define GIC_TRIG_LEVEL 0 | 25 | #define GIC_TRIG_LEVEL 0 |
| 24 | 26 | ||
| 25 | #define GIC_NUM_INTRS (24 + NR_CPUS * 2) | ||
| 26 | |||
| 27 | #define MSK(n) ((1 << (n)) - 1) | 27 | #define MSK(n) ((1 << (n)) - 1) |
| 28 | #define REG32(addr) (*(volatile unsigned int *) (addr)) | 28 | #define REG32(addr) (*(volatile unsigned int *) (addr)) |
| 29 | #define REG(base, offs) REG32((unsigned long)(base) + offs##_##OFS) | 29 | #define REG(base, offs) REG32((unsigned long)(base) + offs##_##OFS) |
| @@ -43,18 +43,17 @@ | |||
| 43 | #ifdef GICISBYTELITTLEENDIAN | 43 | #ifdef GICISBYTELITTLEENDIAN |
| 44 | #define GICREAD(reg, data) ((data) = (reg), (data) = le32_to_cpu(data)) | 44 | #define GICREAD(reg, data) ((data) = (reg), (data) = le32_to_cpu(data)) |
| 45 | #define GICWRITE(reg, data) ((reg) = cpu_to_le32(data)) | 45 | #define GICWRITE(reg, data) ((reg) = cpu_to_le32(data)) |
| 46 | #define GICBIS(reg, bits) \ | ||
| 47 | ({unsigned int data; \ | ||
| 48 | GICREAD(reg, data); \ | ||
| 49 | data |= bits; \ | ||
| 50 | GICWRITE(reg, data); \ | ||
| 51 | }) | ||
| 52 | |||
| 53 | #else | 46 | #else |
| 54 | #define GICREAD(reg, data) ((data) = (reg)) | 47 | #define GICREAD(reg, data) ((data) = (reg)) |
| 55 | #define GICWRITE(reg, data) ((reg) = (data)) | 48 | #define GICWRITE(reg, data) ((reg) = (data)) |
| 56 | #define GICBIS(reg, bits) ((reg) |= (bits)) | ||
| 57 | #endif | 49 | #endif |
| 50 | #define GICBIS(reg, mask, bits) \ | ||
| 51 | do { u32 data; \ | ||
| 52 | GICREAD((reg), data); \ | ||
| 53 | data &= ~(mask); \ | ||
| 54 | data |= ((bits) & (mask)); \ | ||
| 55 | GICWRITE((reg), data); \ | ||
| 56 | } while (0) | ||
| 58 | 57 | ||
| 59 | 58 | ||
| 60 | /* GIC Address Space */ | 59 | /* GIC Address Space */ |
| @@ -170,13 +169,15 @@ | |||
| 170 | #define GIC_SH_SET_POLARITY_OFS 0x0100 | 169 | #define GIC_SH_SET_POLARITY_OFS 0x0100 |
| 171 | #define GIC_SET_POLARITY(intr, pol) \ | 170 | #define GIC_SET_POLARITY(intr, pol) \ |
| 172 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_POLARITY_OFS + \ | 171 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_POLARITY_OFS + \ |
| 173 | GIC_INTR_OFS(intr)), (pol) << GIC_INTR_BIT(intr)) | 172 | GIC_INTR_OFS(intr)), (1 << GIC_INTR_BIT(intr)), \ |
| 173 | (pol) << GIC_INTR_BIT(intr)) | ||
| 174 | 174 | ||
| 175 | /* Triggering : Reset Value is always 0 */ | 175 | /* Triggering : Reset Value is always 0 */ |
| 176 | #define GIC_SH_SET_TRIGGER_OFS 0x0180 | 176 | #define GIC_SH_SET_TRIGGER_OFS 0x0180 |
| 177 | #define GIC_SET_TRIGGER(intr, trig) \ | 177 | #define GIC_SET_TRIGGER(intr, trig) \ |
| 178 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_TRIGGER_OFS + \ | 178 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_TRIGGER_OFS + \ |
| 179 | GIC_INTR_OFS(intr)), (trig) << GIC_INTR_BIT(intr)) | 179 | GIC_INTR_OFS(intr)), (1 << GIC_INTR_BIT(intr)), \ |
| 180 | (trig) << GIC_INTR_BIT(intr)) | ||
| 180 | 181 | ||
| 181 | /* Mask manipulation */ | 182 | /* Mask manipulation */ |
| 182 | #define GIC_SH_SMASK_OFS 0x0380 | 183 | #define GIC_SH_SMASK_OFS 0x0380 |
| @@ -306,18 +307,6 @@ | |||
| 306 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_MAP_TO_VPE_REG_OFF(intr, vpe)), \ | 307 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_MAP_TO_VPE_REG_OFF(intr, vpe)), \ |
| 307 | GIC_SH_MAP_TO_VPE_REG_BIT(vpe)) | 308 | GIC_SH_MAP_TO_VPE_REG_BIT(vpe)) |
| 308 | 309 | ||
| 309 | struct gic_pcpu_mask { | ||
| 310 | DECLARE_BITMAP(pcpu_mask, GIC_NUM_INTRS); | ||
| 311 | }; | ||
| 312 | |||
| 313 | struct gic_pending_regs { | ||
| 314 | DECLARE_BITMAP(pending, GIC_NUM_INTRS); | ||
| 315 | }; | ||
| 316 | |||
| 317 | struct gic_intrmask_regs { | ||
| 318 | DECLARE_BITMAP(intrmask, GIC_NUM_INTRS); | ||
| 319 | }; | ||
| 320 | |||
| 321 | /* | 310 | /* |
| 322 | * Interrupt Meta-data specification. The ipiflag helps | 311 | * Interrupt Meta-data specification. The ipiflag helps |
| 323 | * in building ipi_map. | 312 | * in building ipi_map. |
| @@ -329,8 +318,7 @@ struct gic_intr_map { | |||
| 329 | unsigned int polarity; /* Polarity : +/- */ | 318 | unsigned int polarity; /* Polarity : +/- */ |
| 330 | unsigned int trigtype; /* Trigger : Edge/Levl */ | 319 | unsigned int trigtype; /* Trigger : Edge/Levl */ |
| 331 | unsigned int flags; /* Misc flags */ | 320 | unsigned int flags; /* Misc flags */ |
| 332 | #define GIC_FLAG_IPI 0x01 | 321 | #define GIC_FLAG_TRANSPARENT 0x01 |
| 333 | #define GIC_FLAG_TRANSPARENT 0x02 | ||
| 334 | }; | 322 | }; |
| 335 | 323 | ||
| 336 | /* | 324 | /* |
| @@ -386,6 +374,7 @@ extern unsigned int plat_ipi_call_int_xlate(unsigned int); | |||
| 386 | extern unsigned int plat_ipi_resched_int_xlate(unsigned int); | 374 | extern unsigned int plat_ipi_resched_int_xlate(unsigned int); |
| 387 | extern void gic_bind_eic_interrupt(int irq, int set); | 375 | extern void gic_bind_eic_interrupt(int irq, int set); |
| 388 | extern unsigned int gic_get_timer_pending(void); | 376 | extern unsigned int gic_get_timer_pending(void); |
| 377 | extern void gic_get_int_mask(unsigned long *dst, const unsigned long *src); | ||
| 389 | extern unsigned int gic_get_int(void); | 378 | extern unsigned int gic_get_int(void); |
| 390 | extern void gic_enable_interrupt(int irq_vec); | 379 | extern void gic_enable_interrupt(int irq_vec); |
| 391 | extern void gic_disable_interrupt(int irq_vec); | 380 | extern void gic_disable_interrupt(int irq_vec); |
diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_host.h index b0aa95565752..7a3fc67bd7f9 100644 --- a/arch/mips/include/asm/kvm_host.h +++ b/arch/mips/include/asm/kvm_host.h | |||
| @@ -359,13 +359,17 @@ enum emulation_result { | |||
| 359 | #define MIPS3_PG_FRAME 0x3fffffc0 | 359 | #define MIPS3_PG_FRAME 0x3fffffc0 |
| 360 | 360 | ||
| 361 | #define VPN2_MASK 0xffffe000 | 361 | #define VPN2_MASK 0xffffe000 |
| 362 | #define TLB_IS_GLOBAL(x) (((x).tlb_lo0 & MIPS3_PG_G) && \ | 362 | #define TLB_IS_GLOBAL(x) (((x).tlb_lo0 & MIPS3_PG_G) && \ |
| 363 | ((x).tlb_lo1 & MIPS3_PG_G)) | 363 | ((x).tlb_lo1 & MIPS3_PG_G)) |
| 364 | #define TLB_VPN2(x) ((x).tlb_hi & VPN2_MASK) | 364 | #define TLB_VPN2(x) ((x).tlb_hi & VPN2_MASK) |
| 365 | #define TLB_ASID(x) ((x).tlb_hi & ASID_MASK) | 365 | #define TLB_ASID(x) ((x).tlb_hi & ASID_MASK) |
| 366 | #define TLB_IS_VALID(x, va) (((va) & (1 << PAGE_SHIFT)) \ | 366 | #define TLB_IS_VALID(x, va) (((va) & (1 << PAGE_SHIFT)) \ |
| 367 | ? ((x).tlb_lo1 & MIPS3_PG_V) \ | 367 | ? ((x).tlb_lo1 & MIPS3_PG_V) \ |
| 368 | : ((x).tlb_lo0 & MIPS3_PG_V)) | 368 | : ((x).tlb_lo0 & MIPS3_PG_V)) |
| 369 | #define TLB_HI_VPN2_HIT(x, y) ((TLB_VPN2(x) & ~(x).tlb_mask) == \ | ||
| 370 | ((y) & VPN2_MASK & ~(x).tlb_mask)) | ||
| 371 | #define TLB_HI_ASID_HIT(x, y) (TLB_IS_GLOBAL(x) || \ | ||
| 372 | TLB_ASID(x) == ((y) & ASID_MASK)) | ||
| 369 | 373 | ||
| 370 | struct kvm_mips_tlb { | 374 | struct kvm_mips_tlb { |
| 371 | long tlb_mask; | 375 | long tlb_mask; |
| @@ -760,7 +764,7 @@ extern int kvm_mips_trans_mtc0(uint32_t inst, uint32_t *opc, | |||
| 760 | struct kvm_vcpu *vcpu); | 764 | struct kvm_vcpu *vcpu); |
| 761 | 765 | ||
| 762 | /* Misc */ | 766 | /* Misc */ |
| 763 | extern int kvm_mips_dump_stats(struct kvm_vcpu *vcpu); | 767 | extern void kvm_mips_dump_stats(struct kvm_vcpu *vcpu); |
| 764 | extern unsigned long kvm_mips_get_ramsize(struct kvm *kvm); | 768 | extern unsigned long kvm_mips_get_ramsize(struct kvm *kvm); |
| 765 | 769 | ||
| 766 | 770 | ||
diff --git a/arch/mips/include/asm/maar.h b/arch/mips/include/asm/maar.h new file mode 100644 index 000000000000..6c62b0f899c0 --- /dev/null +++ b/arch/mips/include/asm/maar.h | |||
| @@ -0,0 +1,109 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2014 Imagination Technologies | ||
| 3 | * Author: Paul Burton <paul.burton@imgtec.com> | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License as published by the | ||
| 7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 8 | * option) any later version. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #ifndef __MIPS_ASM_MIPS_MAAR_H__ | ||
| 12 | #define __MIPS_ASM_MIPS_MAAR_H__ | ||
| 13 | |||
| 14 | #include <asm/hazards.h> | ||
| 15 | #include <asm/mipsregs.h> | ||
| 16 | |||
| 17 | /** | ||
| 18 | * platform_maar_init() - perform platform-level MAAR configuration | ||
| 19 | * @num_pairs: The number of MAAR pairs present in the system. | ||
| 20 | * | ||
| 21 | * Platforms should implement this function such that it configures as many | ||
| 22 | * MAAR pairs as required, from 0 up to the maximum of num_pairs-1, and returns | ||
| 23 | * the number that were used. Any further MAARs will be configured to be | ||
| 24 | * invalid. The default implementation of this function will simply indicate | ||
| 25 | * that it has configured 0 MAAR pairs. | ||
| 26 | * | ||
| 27 | * Return: The number of MAAR pairs configured. | ||
| 28 | */ | ||
| 29 | unsigned __weak platform_maar_init(unsigned num_pairs); | ||
| 30 | |||
| 31 | /** | ||
| 32 | * write_maar_pair() - write to a pair of MAARs | ||
| 33 | * @idx: The index of the pair (ie. use MAARs idx*2 & (idx*2)+1). | ||
| 34 | * @lower: The lowest address that the MAAR pair will affect. Must be | ||
| 35 | * aligned to a 2^16 byte boundary. | ||
| 36 | * @upper: The highest address that the MAAR pair will affect. Must be | ||
| 37 | * aligned to one byte before a 2^16 byte boundary. | ||
| 38 | * @attrs: The accessibility attributes to program, eg. MIPS_MAAR_S. The | ||
| 39 | * MIPS_MAAR_V attribute will automatically be set. | ||
| 40 | * | ||
| 41 | * Program the pair of MAAR registers specified by idx to apply the attributes | ||
| 42 | * specified by attrs to the range of addresses from lower to higher. | ||
| 43 | */ | ||
| 44 | static inline void write_maar_pair(unsigned idx, phys_addr_t lower, | ||
| 45 | phys_addr_t upper, unsigned attrs) | ||
| 46 | { | ||
| 47 | /* Addresses begin at bit 16, but are shifted right 4 bits */ | ||
| 48 | BUG_ON(lower & (0xffff | ~(MIPS_MAAR_ADDR << 4))); | ||
| 49 | BUG_ON(((upper & 0xffff) != 0xffff) | ||
| 50 | || ((upper & ~0xffffull) & ~(MIPS_MAAR_ADDR << 4))); | ||
| 51 | |||
| 52 | /* Automatically set MIPS_MAAR_V */ | ||
| 53 | attrs |= MIPS_MAAR_V; | ||
| 54 | |||
| 55 | /* Write the upper address & attributes (only MIPS_MAAR_V matters) */ | ||
| 56 | write_c0_maari(idx << 1); | ||
| 57 | back_to_back_c0_hazard(); | ||
| 58 | write_c0_maar(((upper >> 4) & MIPS_MAAR_ADDR) | attrs); | ||
| 59 | back_to_back_c0_hazard(); | ||
| 60 | |||
| 61 | /* Write the lower address & attributes */ | ||
| 62 | write_c0_maari((idx << 1) | 0x1); | ||
| 63 | back_to_back_c0_hazard(); | ||
| 64 | write_c0_maar((lower >> 4) | attrs); | ||
| 65 | back_to_back_c0_hazard(); | ||
| 66 | } | ||
| 67 | |||
| 68 | /** | ||
| 69 | * struct maar_config - MAAR configuration data | ||
| 70 | * @lower: The lowest address that the MAAR pair will affect. Must be | ||
| 71 | * aligned to a 2^16 byte boundary. | ||
| 72 | * @upper: The highest address that the MAAR pair will affect. Must be | ||
| 73 | * aligned to one byte before a 2^16 byte boundary. | ||
| 74 | * @attrs: The accessibility attributes to program, eg. MIPS_MAAR_S. The | ||
| 75 | * MIPS_MAAR_V attribute will automatically be set. | ||
| 76 | * | ||
| 77 | * Describes the configuration of a pair of Memory Accessibility Attribute | ||
| 78 | * Registers - applying attributes from attrs to the range of physical | ||
| 79 | * addresses from lower to upper inclusive. | ||
| 80 | */ | ||
| 81 | struct maar_config { | ||
| 82 | phys_addr_t lower; | ||
| 83 | phys_addr_t upper; | ||
| 84 | unsigned attrs; | ||
| 85 | }; | ||
| 86 | |||
| 87 | /** | ||
| 88 | * maar_config() - configure MAARs according to provided data | ||
| 89 | * @cfg: Pointer to an array of struct maar_config. | ||
| 90 | * @num_cfg: The number of structs in the cfg array. | ||
| 91 | * @num_pairs: The number of MAAR pairs present in the system. | ||
| 92 | * | ||
| 93 | * Configures as many MAARs as are present and specified in the cfg | ||
| 94 | * array with the values taken from the cfg array. | ||
| 95 | * | ||
| 96 | * Return: The number of MAAR pairs configured. | ||
| 97 | */ | ||
| 98 | static inline unsigned maar_config(const struct maar_config *cfg, | ||
| 99 | unsigned num_cfg, unsigned num_pairs) | ||
| 100 | { | ||
| 101 | unsigned i; | ||
| 102 | |||
| 103 | for (i = 0; i < min(num_cfg, num_pairs); i++) | ||
| 104 | write_maar_pair(i, cfg[i].lower, cfg[i].upper, cfg[i].attrs); | ||
| 105 | |||
| 106 | return i; | ||
| 107 | } | ||
| 108 | |||
| 109 | #endif /* __MIPS_ASM_MIPS_MAAR_H__ */ | ||
diff --git a/arch/mips/include/asm/mach-au1x00/au1000.h b/arch/mips/include/asm/mach-au1x00/au1000.h index b4c3ecb17d48..a7eec3364a64 100644 --- a/arch/mips/include/asm/mach-au1x00/au1000.h +++ b/arch/mips/include/asm/mach-au1x00/au1000.h | |||
| @@ -34,6 +34,558 @@ | |||
| 34 | #ifndef _AU1000_H_ | 34 | #ifndef _AU1000_H_ |
| 35 | #define _AU1000_H_ | 35 | #define _AU1000_H_ |
| 36 | 36 | ||
| 37 | /* SOC Interrupt numbers */ | ||
| 38 | /* Au1000-style (IC0/1): 2 controllers with 32 sources each */ | ||
| 39 | #define AU1000_INTC0_INT_BASE (MIPS_CPU_IRQ_BASE + 8) | ||
| 40 | #define AU1000_INTC0_INT_LAST (AU1000_INTC0_INT_BASE + 31) | ||
| 41 | #define AU1000_INTC1_INT_BASE (AU1000_INTC0_INT_LAST + 1) | ||
| 42 | #define AU1000_INTC1_INT_LAST (AU1000_INTC1_INT_BASE + 31) | ||
| 43 | #define AU1000_MAX_INTR AU1000_INTC1_INT_LAST | ||
| 44 | |||
| 45 | /* Au1300-style (GPIC): 1 controller with up to 128 sources */ | ||
| 46 | #define ALCHEMY_GPIC_INT_BASE (MIPS_CPU_IRQ_BASE + 8) | ||
| 47 | #define ALCHEMY_GPIC_INT_NUM 128 | ||
| 48 | #define ALCHEMY_GPIC_INT_LAST (ALCHEMY_GPIC_INT_BASE + ALCHEMY_GPIC_INT_NUM - 1) | ||
| 49 | |||
| 50 | /* common clock names, shared among all variants. AUXPLL2 is Au1300 */ | ||
| 51 | #define ALCHEMY_ROOT_CLK "root_clk" | ||
| 52 | #define ALCHEMY_CPU_CLK "cpu_clk" | ||
| 53 | #define ALCHEMY_AUXPLL_CLK "auxpll_clk" | ||
| 54 | #define ALCHEMY_AUXPLL2_CLK "auxpll2_clk" | ||
| 55 | #define ALCHEMY_SYSBUS_CLK "sysbus_clk" | ||
| 56 | #define ALCHEMY_PERIPH_CLK "periph_clk" | ||
| 57 | #define ALCHEMY_MEM_CLK "mem_clk" | ||
| 58 | #define ALCHEMY_LR_CLK "lr_clk" | ||
| 59 | #define ALCHEMY_FG0_CLK "fg0_clk" | ||
| 60 | #define ALCHEMY_FG1_CLK "fg1_clk" | ||
| 61 | #define ALCHEMY_FG2_CLK "fg2_clk" | ||
| 62 | #define ALCHEMY_FG3_CLK "fg3_clk" | ||
| 63 | #define ALCHEMY_FG4_CLK "fg4_clk" | ||
| 64 | #define ALCHEMY_FG5_CLK "fg5_clk" | ||
| 65 | |||
| 66 | /* Au1300 peripheral interrupt numbers */ | ||
| 67 | #define AU1300_FIRST_INT (ALCHEMY_GPIC_INT_BASE) | ||
| 68 | #define AU1300_UART1_INT (AU1300_FIRST_INT + 17) | ||
| 69 | #define AU1300_UART2_INT (AU1300_FIRST_INT + 25) | ||
| 70 | #define AU1300_UART3_INT (AU1300_FIRST_INT + 27) | ||
| 71 | #define AU1300_SD1_INT (AU1300_FIRST_INT + 32) | ||
| 72 | #define AU1300_SD2_INT (AU1300_FIRST_INT + 38) | ||
| 73 | #define AU1300_PSC0_INT (AU1300_FIRST_INT + 48) | ||
| 74 | #define AU1300_PSC1_INT (AU1300_FIRST_INT + 52) | ||
| 75 | #define AU1300_PSC2_INT (AU1300_FIRST_INT + 56) | ||
| 76 | #define AU1300_PSC3_INT (AU1300_FIRST_INT + 60) | ||
| 77 | #define AU1300_NAND_INT (AU1300_FIRST_INT + 62) | ||
| 78 | #define AU1300_DDMA_INT (AU1300_FIRST_INT + 75) | ||
| 79 | #define AU1300_MMU_INT (AU1300_FIRST_INT + 76) | ||
| 80 | #define AU1300_MPU_INT (AU1300_FIRST_INT + 77) | ||
| 81 | #define AU1300_GPU_INT (AU1300_FIRST_INT + 78) | ||
| 82 | #define AU1300_UDMA_INT (AU1300_FIRST_INT + 79) | ||
| 83 | #define AU1300_TOY_INT (AU1300_FIRST_INT + 80) | ||
| 84 | #define AU1300_TOY_MATCH0_INT (AU1300_FIRST_INT + 81) | ||
| 85 | #define AU1300_TOY_MATCH1_INT (AU1300_FIRST_INT + 82) | ||
| 86 | #define AU1300_TOY_MATCH2_INT (AU1300_FIRST_INT + 83) | ||
| 87 | #define AU1300_RTC_INT (AU1300_FIRST_INT + 84) | ||
| 88 | #define AU1300_RTC_MATCH0_INT (AU1300_FIRST_INT + 85) | ||
| 89 | #define AU1300_RTC_MATCH1_INT (AU1300_FIRST_INT + 86) | ||
| 90 | #define AU1300_RTC_MATCH2_INT (AU1300_FIRST_INT + 87) | ||
| 91 | #define AU1300_UART0_INT (AU1300_FIRST_INT + 88) | ||
| 92 | #define AU1300_SD0_INT (AU1300_FIRST_INT + 89) | ||
| 93 | #define AU1300_USB_INT (AU1300_FIRST_INT + 90) | ||
| 94 | #define AU1300_LCD_INT (AU1300_FIRST_INT + 91) | ||
| 95 | #define AU1300_BSA_INT (AU1300_FIRST_INT + 92) | ||
| 96 | #define AU1300_MPE_INT (AU1300_FIRST_INT + 93) | ||
| 97 | #define AU1300_ITE_INT (AU1300_FIRST_INT + 94) | ||
| 98 | #define AU1300_AES_INT (AU1300_FIRST_INT + 95) | ||
| 99 | #define AU1300_CIM_INT (AU1300_FIRST_INT + 96) | ||
| 100 | |||
| 101 | /**********************************************************************/ | ||
| 102 | |||
| 103 | /* | ||
| 104 | * Physical base addresses for integrated peripherals | ||
| 105 | * 0..au1000 1..au1500 2..au1100 3..au1550 4..au1200 5..au1300 | ||
| 106 | */ | ||
| 107 | |||
| 108 | #define AU1000_AC97_PHYS_ADDR 0x10000000 /* 012 */ | ||
| 109 | #define AU1300_ROM_PHYS_ADDR 0x10000000 /* 5 */ | ||
| 110 | #define AU1300_OTP_PHYS_ADDR 0x10002000 /* 5 */ | ||
| 111 | #define AU1300_VSS_PHYS_ADDR 0x10003000 /* 5 */ | ||
| 112 | #define AU1300_UART0_PHYS_ADDR 0x10100000 /* 5 */ | ||
| 113 | #define AU1300_UART1_PHYS_ADDR 0x10101000 /* 5 */ | ||
| 114 | #define AU1300_UART2_PHYS_ADDR 0x10102000 /* 5 */ | ||
| 115 | #define AU1300_UART3_PHYS_ADDR 0x10103000 /* 5 */ | ||
| 116 | #define AU1000_USB_OHCI_PHYS_ADDR 0x10100000 /* 012 */ | ||
| 117 | #define AU1000_USB_UDC_PHYS_ADDR 0x10200000 /* 0123 */ | ||
| 118 | #define AU1300_GPIC_PHYS_ADDR 0x10200000 /* 5 */ | ||
| 119 | #define AU1000_IRDA_PHYS_ADDR 0x10300000 /* 02 */ | ||
| 120 | #define AU1200_AES_PHYS_ADDR 0x10300000 /* 45 */ | ||
| 121 | #define AU1000_IC0_PHYS_ADDR 0x10400000 /* 01234 */ | ||
| 122 | #define AU1300_GPU_PHYS_ADDR 0x10500000 /* 5 */ | ||
| 123 | #define AU1000_MAC0_PHYS_ADDR 0x10500000 /* 023 */ | ||
| 124 | #define AU1000_MAC1_PHYS_ADDR 0x10510000 /* 023 */ | ||
| 125 | #define AU1000_MACEN_PHYS_ADDR 0x10520000 /* 023 */ | ||
| 126 | #define AU1100_SD0_PHYS_ADDR 0x10600000 /* 245 */ | ||
| 127 | #define AU1300_SD1_PHYS_ADDR 0x10601000 /* 5 */ | ||
| 128 | #define AU1300_SD2_PHYS_ADDR 0x10602000 /* 5 */ | ||
| 129 | #define AU1100_SD1_PHYS_ADDR 0x10680000 /* 24 */ | ||
| 130 | #define AU1300_SYS_PHYS_ADDR 0x10900000 /* 5 */ | ||
| 131 | #define AU1550_PSC2_PHYS_ADDR 0x10A00000 /* 3 */ | ||
| 132 | #define AU1550_PSC3_PHYS_ADDR 0x10B00000 /* 3 */ | ||
| 133 | #define AU1300_PSC0_PHYS_ADDR 0x10A00000 /* 5 */ | ||
| 134 | #define AU1300_PSC1_PHYS_ADDR 0x10A01000 /* 5 */ | ||
| 135 | #define AU1300_PSC2_PHYS_ADDR 0x10A02000 /* 5 */ | ||
| 136 | #define AU1300_PSC3_PHYS_ADDR 0x10A03000 /* 5 */ | ||
| 137 | #define AU1000_I2S_PHYS_ADDR 0x11000000 /* 02 */ | ||
| 138 | #define AU1500_MAC0_PHYS_ADDR 0x11500000 /* 1 */ | ||
| 139 | #define AU1500_MAC1_PHYS_ADDR 0x11510000 /* 1 */ | ||
| 140 | #define AU1500_MACEN_PHYS_ADDR 0x11520000 /* 1 */ | ||
| 141 | #define AU1000_UART0_PHYS_ADDR 0x11100000 /* 01234 */ | ||
| 142 | #define AU1200_SWCNT_PHYS_ADDR 0x1110010C /* 4 */ | ||
| 143 | #define AU1000_UART1_PHYS_ADDR 0x11200000 /* 0234 */ | ||
| 144 | #define AU1000_UART2_PHYS_ADDR 0x11300000 /* 0 */ | ||
| 145 | #define AU1000_UART3_PHYS_ADDR 0x11400000 /* 0123 */ | ||
| 146 | #define AU1000_SSI0_PHYS_ADDR 0x11600000 /* 02 */ | ||
| 147 | #define AU1000_SSI1_PHYS_ADDR 0x11680000 /* 02 */ | ||
| 148 | #define AU1500_GPIO2_PHYS_ADDR 0x11700000 /* 1234 */ | ||
| 149 | #define AU1000_IC1_PHYS_ADDR 0x11800000 /* 01234 */ | ||
| 150 | #define AU1000_SYS_PHYS_ADDR 0x11900000 /* 012345 */ | ||
| 151 | #define AU1550_PSC0_PHYS_ADDR 0x11A00000 /* 34 */ | ||
| 152 | #define AU1550_PSC1_PHYS_ADDR 0x11B00000 /* 34 */ | ||
| 153 | #define AU1000_MEM_PHYS_ADDR 0x14000000 /* 01234 */ | ||
| 154 | #define AU1000_STATIC_MEM_PHYS_ADDR 0x14001000 /* 01234 */ | ||
| 155 | #define AU1300_UDMA_PHYS_ADDR 0x14001800 /* 5 */ | ||
| 156 | #define AU1000_DMA_PHYS_ADDR 0x14002000 /* 012 */ | ||
| 157 | #define AU1550_DBDMA_PHYS_ADDR 0x14002000 /* 345 */ | ||
| 158 | #define AU1550_DBDMA_CONF_PHYS_ADDR 0x14003000 /* 345 */ | ||
| 159 | #define AU1000_MACDMA0_PHYS_ADDR 0x14004000 /* 0123 */ | ||
| 160 | #define AU1000_MACDMA1_PHYS_ADDR 0x14004200 /* 0123 */ | ||
| 161 | #define AU1200_CIM_PHYS_ADDR 0x14004000 /* 45 */ | ||
| 162 | #define AU1500_PCI_PHYS_ADDR 0x14005000 /* 13 */ | ||
| 163 | #define AU1550_PE_PHYS_ADDR 0x14008000 /* 3 */ | ||
| 164 | #define AU1200_MAEBE_PHYS_ADDR 0x14010000 /* 4 */ | ||
| 165 | #define AU1200_MAEFE_PHYS_ADDR 0x14012000 /* 4 */ | ||
| 166 | #define AU1300_MAEITE_PHYS_ADDR 0x14010000 /* 5 */ | ||
| 167 | #define AU1300_MAEMPE_PHYS_ADDR 0x14014000 /* 5 */ | ||
| 168 | #define AU1550_USB_OHCI_PHYS_ADDR 0x14020000 /* 3 */ | ||
| 169 | #define AU1200_USB_CTL_PHYS_ADDR 0x14020000 /* 4 */ | ||
| 170 | #define AU1200_USB_OTG_PHYS_ADDR 0x14020020 /* 4 */ | ||
| 171 | #define AU1200_USB_OHCI_PHYS_ADDR 0x14020100 /* 4 */ | ||
| 172 | #define AU1200_USB_EHCI_PHYS_ADDR 0x14020200 /* 4 */ | ||
| 173 | #define AU1200_USB_UDC_PHYS_ADDR 0x14022000 /* 4 */ | ||
| 174 | #define AU1300_USB_EHCI_PHYS_ADDR 0x14020000 /* 5 */ | ||
| 175 | #define AU1300_USB_OHCI0_PHYS_ADDR 0x14020400 /* 5 */ | ||
| 176 | #define AU1300_USB_OHCI1_PHYS_ADDR 0x14020800 /* 5 */ | ||
| 177 | #define AU1300_USB_CTL_PHYS_ADDR 0x14021000 /* 5 */ | ||
| 178 | #define AU1300_USB_OTG_PHYS_ADDR 0x14022000 /* 5 */ | ||
| 179 | #define AU1300_MAEBSA_PHYS_ADDR 0x14030000 /* 5 */ | ||
| 180 | #define AU1100_LCD_PHYS_ADDR 0x15000000 /* 2 */ | ||
| 181 | #define AU1200_LCD_PHYS_ADDR 0x15000000 /* 45 */ | ||
| 182 | #define AU1500_PCI_MEM_PHYS_ADDR 0x400000000ULL /* 13 */ | ||
| 183 | #define AU1500_PCI_IO_PHYS_ADDR 0x500000000ULL /* 13 */ | ||
| 184 | #define AU1500_PCI_CONFIG0_PHYS_ADDR 0x600000000ULL /* 13 */ | ||
| 185 | #define AU1500_PCI_CONFIG1_PHYS_ADDR 0x680000000ULL /* 13 */ | ||
| 186 | #define AU1000_PCMCIA_IO_PHYS_ADDR 0xF00000000ULL /* 012345 */ | ||
| 187 | #define AU1000_PCMCIA_ATTR_PHYS_ADDR 0xF40000000ULL /* 012345 */ | ||
| 188 | #define AU1000_PCMCIA_MEM_PHYS_ADDR 0xF80000000ULL /* 012345 */ | ||
| 189 | |||
| 190 | /**********************************************************************/ | ||
| 191 | |||
| 192 | |||
| 193 | /* | ||
| 194 | * Au1300 GPIO+INT controller (GPIC) register offsets and bits | ||
| 195 | * Registers are 128bits (0x10 bytes), divided into 4 "banks". | ||
| 196 | */ | ||
| 197 | #define AU1300_GPIC_PINVAL 0x0000 | ||
| 198 | #define AU1300_GPIC_PINVALCLR 0x0010 | ||
| 199 | #define AU1300_GPIC_IPEND 0x0020 | ||
| 200 | #define AU1300_GPIC_PRIENC 0x0030 | ||
| 201 | #define AU1300_GPIC_IEN 0x0040 /* int_mask in manual */ | ||
| 202 | #define AU1300_GPIC_IDIS 0x0050 /* int_maskclr in manual */ | ||
| 203 | #define AU1300_GPIC_DMASEL 0x0060 | ||
| 204 | #define AU1300_GPIC_DEVSEL 0x0080 | ||
| 205 | #define AU1300_GPIC_DEVCLR 0x0090 | ||
| 206 | #define AU1300_GPIC_RSTVAL 0x00a0 | ||
| 207 | /* pin configuration space. one 32bit register for up to 128 IRQs */ | ||
| 208 | #define AU1300_GPIC_PINCFG 0x1000 | ||
| 209 | |||
| 210 | #define GPIC_GPIO_TO_BIT(gpio) \ | ||
| 211 | (1 << ((gpio) & 0x1f)) | ||
| 212 | |||
| 213 | #define GPIC_GPIO_BANKOFF(gpio) \ | ||
| 214 | (((gpio) >> 5) * 4) | ||
| 215 | |||
| 216 | /* Pin Control bits: who owns the pin, what does it do */ | ||
| 217 | #define GPIC_CFG_PC_GPIN 0 | ||
| 218 | #define GPIC_CFG_PC_DEV 1 | ||
| 219 | #define GPIC_CFG_PC_GPOLOW 2 | ||
| 220 | #define GPIC_CFG_PC_GPOHIGH 3 | ||
| 221 | #define GPIC_CFG_PC_MASK 3 | ||
| 222 | |||
| 223 | /* assign pin to MIPS IRQ line */ | ||
| 224 | #define GPIC_CFG_IL_SET(x) (((x) & 3) << 2) | ||
| 225 | #define GPIC_CFG_IL_MASK (3 << 2) | ||
| 226 | |||
| 227 | /* pin interrupt type setup */ | ||
| 228 | #define GPIC_CFG_IC_OFF (0 << 4) | ||
| 229 | #define GPIC_CFG_IC_LEVEL_LOW (1 << 4) | ||
| 230 | #define GPIC_CFG_IC_LEVEL_HIGH (2 << 4) | ||
| 231 | #define GPIC_CFG_IC_EDGE_FALL (5 << 4) | ||
| 232 | #define GPIC_CFG_IC_EDGE_RISE (6 << 4) | ||
| 233 | #define GPIC_CFG_IC_EDGE_BOTH (7 << 4) | ||
| 234 | #define GPIC_CFG_IC_MASK (7 << 4) | ||
| 235 | |||
| 236 | /* allow interrupt to wake cpu from 'wait' */ | ||
| 237 | #define GPIC_CFG_IDLEWAKE (1 << 7) | ||
| 238 | |||
| 239 | /***********************************************************************/ | ||
| 240 | |||
| 241 | /* Au1000 SDRAM memory controller register offsets */ | ||
| 242 | #define AU1000_MEM_SDMODE0 0x0000 | ||
| 243 | #define AU1000_MEM_SDMODE1 0x0004 | ||
| 244 | #define AU1000_MEM_SDMODE2 0x0008 | ||
| 245 | #define AU1000_MEM_SDADDR0 0x000C | ||
| 246 | #define AU1000_MEM_SDADDR1 0x0010 | ||
| 247 | #define AU1000_MEM_SDADDR2 0x0014 | ||
| 248 | #define AU1000_MEM_SDREFCFG 0x0018 | ||
| 249 | #define AU1000_MEM_SDPRECMD 0x001C | ||
| 250 | #define AU1000_MEM_SDAUTOREF 0x0020 | ||
| 251 | #define AU1000_MEM_SDWRMD0 0x0024 | ||
| 252 | #define AU1000_MEM_SDWRMD1 0x0028 | ||
| 253 | #define AU1000_MEM_SDWRMD2 0x002C | ||
| 254 | #define AU1000_MEM_SDSLEEP 0x0030 | ||
| 255 | #define AU1000_MEM_SDSMCKE 0x0034 | ||
| 256 | |||
| 257 | /* MEM_SDMODE register content definitions */ | ||
| 258 | #define MEM_SDMODE_F (1 << 22) | ||
| 259 | #define MEM_SDMODE_SR (1 << 21) | ||
| 260 | #define MEM_SDMODE_BS (1 << 20) | ||
| 261 | #define MEM_SDMODE_RS (3 << 18) | ||
| 262 | #define MEM_SDMODE_CS (7 << 15) | ||
| 263 | #define MEM_SDMODE_TRAS (15 << 11) | ||
| 264 | #define MEM_SDMODE_TMRD (3 << 9) | ||
| 265 | #define MEM_SDMODE_TWR (3 << 7) | ||
| 266 | #define MEM_SDMODE_TRP (3 << 5) | ||
| 267 | #define MEM_SDMODE_TRCD (3 << 3) | ||
| 268 | #define MEM_SDMODE_TCL (7 << 0) | ||
| 269 | |||
| 270 | #define MEM_SDMODE_BS_2Bank (0 << 20) | ||
| 271 | #define MEM_SDMODE_BS_4Bank (1 << 20) | ||
| 272 | #define MEM_SDMODE_RS_11Row (0 << 18) | ||
| 273 | #define MEM_SDMODE_RS_12Row (1 << 18) | ||
| 274 | #define MEM_SDMODE_RS_13Row (2 << 18) | ||
| 275 | #define MEM_SDMODE_RS_N(N) ((N) << 18) | ||
| 276 | #define MEM_SDMODE_CS_7Col (0 << 15) | ||
| 277 | #define MEM_SDMODE_CS_8Col (1 << 15) | ||
| 278 | #define MEM_SDMODE_CS_9Col (2 << 15) | ||
| 279 | #define MEM_SDMODE_CS_10Col (3 << 15) | ||
| 280 | #define MEM_SDMODE_CS_11Col (4 << 15) | ||
| 281 | #define MEM_SDMODE_CS_N(N) ((N) << 15) | ||
| 282 | #define MEM_SDMODE_TRAS_N(N) ((N) << 11) | ||
| 283 | #define MEM_SDMODE_TMRD_N(N) ((N) << 9) | ||
| 284 | #define MEM_SDMODE_TWR_N(N) ((N) << 7) | ||
| 285 | #define MEM_SDMODE_TRP_N(N) ((N) << 5) | ||
| 286 | #define MEM_SDMODE_TRCD_N(N) ((N) << 3) | ||
| 287 | #define MEM_SDMODE_TCL_N(N) ((N) << 0) | ||
| 288 | |||
| 289 | /* MEM_SDADDR register contents definitions */ | ||
| 290 | #define MEM_SDADDR_E (1 << 20) | ||
| 291 | #define MEM_SDADDR_CSBA (0x03FF << 10) | ||
| 292 | #define MEM_SDADDR_CSMASK (0x03FF << 0) | ||
| 293 | #define MEM_SDADDR_CSBA_N(N) ((N) & (0x03FF << 22) >> 12) | ||
| 294 | #define MEM_SDADDR_CSMASK_N(N) ((N)&(0x03FF << 22) >> 22) | ||
| 295 | |||
| 296 | /* MEM_SDREFCFG register content definitions */ | ||
| 297 | #define MEM_SDREFCFG_TRC (15 << 28) | ||
| 298 | #define MEM_SDREFCFG_TRPM (3 << 26) | ||
| 299 | #define MEM_SDREFCFG_E (1 << 25) | ||
| 300 | #define MEM_SDREFCFG_RE (0x1ffffff << 0) | ||
| 301 | #define MEM_SDREFCFG_TRC_N(N) ((N) << MEM_SDREFCFG_TRC) | ||
| 302 | #define MEM_SDREFCFG_TRPM_N(N) ((N) << MEM_SDREFCFG_TRPM) | ||
| 303 | #define MEM_SDREFCFG_REF_N(N) (N) | ||
| 304 | |||
| 305 | /* Au1550 SDRAM Register Offsets */ | ||
| 306 | #define AU1550_MEM_SDMODE0 0x0800 | ||
| 307 | #define AU1550_MEM_SDMODE1 0x0808 | ||
| 308 | #define AU1550_MEM_SDMODE2 0x0810 | ||
| 309 | #define AU1550_MEM_SDADDR0 0x0820 | ||
| 310 | #define AU1550_MEM_SDADDR1 0x0828 | ||
| 311 | #define AU1550_MEM_SDADDR2 0x0830 | ||
| 312 | #define AU1550_MEM_SDCONFIGA 0x0840 | ||
| 313 | #define AU1550_MEM_SDCONFIGB 0x0848 | ||
| 314 | #define AU1550_MEM_SDSTAT 0x0850 | ||
| 315 | #define AU1550_MEM_SDERRADDR 0x0858 | ||
| 316 | #define AU1550_MEM_SDSTRIDE0 0x0860 | ||
| 317 | #define AU1550_MEM_SDSTRIDE1 0x0868 | ||
| 318 | #define AU1550_MEM_SDSTRIDE2 0x0870 | ||
| 319 | #define AU1550_MEM_SDWRMD0 0x0880 | ||
| 320 | #define AU1550_MEM_SDWRMD1 0x0888 | ||
| 321 | #define AU1550_MEM_SDWRMD2 0x0890 | ||
| 322 | #define AU1550_MEM_SDPRECMD 0x08C0 | ||
| 323 | #define AU1550_MEM_SDAUTOREF 0x08C8 | ||
| 324 | #define AU1550_MEM_SDSREF 0x08D0 | ||
| 325 | #define AU1550_MEM_SDSLEEP MEM_SDSREF | ||
| 326 | |||
| 327 | /* Static Bus Controller register offsets */ | ||
| 328 | #define AU1000_MEM_STCFG0 0x000 | ||
| 329 | #define AU1000_MEM_STTIME0 0x004 | ||
| 330 | #define AU1000_MEM_STADDR0 0x008 | ||
| 331 | #define AU1000_MEM_STCFG1 0x010 | ||
| 332 | #define AU1000_MEM_STTIME1 0x014 | ||
| 333 | #define AU1000_MEM_STADDR1 0x018 | ||
| 334 | #define AU1000_MEM_STCFG2 0x020 | ||
| 335 | #define AU1000_MEM_STTIME2 0x024 | ||
| 336 | #define AU1000_MEM_STADDR2 0x028 | ||
| 337 | #define AU1000_MEM_STCFG3 0x030 | ||
| 338 | #define AU1000_MEM_STTIME3 0x034 | ||
| 339 | #define AU1000_MEM_STADDR3 0x038 | ||
| 340 | #define AU1000_MEM_STNDCTL 0x100 | ||
| 341 | #define AU1000_MEM_STSTAT 0x104 | ||
| 342 | |||
| 343 | #define MEM_STNAND_CMD 0x0 | ||
| 344 | #define MEM_STNAND_ADDR 0x4 | ||
| 345 | #define MEM_STNAND_DATA 0x20 | ||
| 346 | |||
| 347 | |||
| 348 | /* Programmable Counters 0 and 1 */ | ||
| 349 | #define AU1000_SYS_CNTRCTRL 0x14 | ||
| 350 | # define SYS_CNTRL_E1S (1 << 23) | ||
| 351 | # define SYS_CNTRL_T1S (1 << 20) | ||
| 352 | # define SYS_CNTRL_M21 (1 << 19) | ||
| 353 | # define SYS_CNTRL_M11 (1 << 18) | ||
| 354 | # define SYS_CNTRL_M01 (1 << 17) | ||
| 355 | # define SYS_CNTRL_C1S (1 << 16) | ||
| 356 | # define SYS_CNTRL_BP (1 << 14) | ||
| 357 | # define SYS_CNTRL_EN1 (1 << 13) | ||
| 358 | # define SYS_CNTRL_BT1 (1 << 12) | ||
| 359 | # define SYS_CNTRL_EN0 (1 << 11) | ||
| 360 | # define SYS_CNTRL_BT0 (1 << 10) | ||
| 361 | # define SYS_CNTRL_E0 (1 << 8) | ||
| 362 | # define SYS_CNTRL_E0S (1 << 7) | ||
| 363 | # define SYS_CNTRL_32S (1 << 5) | ||
| 364 | # define SYS_CNTRL_T0S (1 << 4) | ||
| 365 | # define SYS_CNTRL_M20 (1 << 3) | ||
| 366 | # define SYS_CNTRL_M10 (1 << 2) | ||
| 367 | # define SYS_CNTRL_M00 (1 << 1) | ||
| 368 | # define SYS_CNTRL_C0S (1 << 0) | ||
| 369 | |||
| 370 | /* Programmable Counter 0 Registers */ | ||
| 371 | #define AU1000_SYS_TOYTRIM 0x00 | ||
| 372 | #define AU1000_SYS_TOYWRITE 0x04 | ||
| 373 | #define AU1000_SYS_TOYMATCH0 0x08 | ||
| 374 | #define AU1000_SYS_TOYMATCH1 0x0c | ||
| 375 | #define AU1000_SYS_TOYMATCH2 0x10 | ||
| 376 | #define AU1000_SYS_TOYREAD 0x40 | ||
| 377 | |||
| 378 | /* Programmable Counter 1 Registers */ | ||
| 379 | #define AU1000_SYS_RTCTRIM 0x44 | ||
| 380 | #define AU1000_SYS_RTCWRITE 0x48 | ||
| 381 | #define AU1000_SYS_RTCMATCH0 0x4c | ||
| 382 | #define AU1000_SYS_RTCMATCH1 0x50 | ||
| 383 | #define AU1000_SYS_RTCMATCH2 0x54 | ||
| 384 | #define AU1000_SYS_RTCREAD 0x58 | ||
| 385 | |||
| 386 | |||
| 387 | /* GPIO */ | ||
| 388 | #define AU1000_SYS_PINFUNC 0x2C | ||
| 389 | # define SYS_PF_USB (1 << 15) /* 2nd USB device/host */ | ||
| 390 | # define SYS_PF_U3 (1 << 14) /* GPIO23/U3TXD */ | ||
| 391 | # define SYS_PF_U2 (1 << 13) /* GPIO22/U2TXD */ | ||
| 392 | # define SYS_PF_U1 (1 << 12) /* GPIO21/U1TXD */ | ||
| 393 | # define SYS_PF_SRC (1 << 11) /* GPIO6/SROMCKE */ | ||
| 394 | # define SYS_PF_CK5 (1 << 10) /* GPIO3/CLK5 */ | ||
| 395 | # define SYS_PF_CK4 (1 << 9) /* GPIO2/CLK4 */ | ||
| 396 | # define SYS_PF_IRF (1 << 8) /* GPIO15/IRFIRSEL */ | ||
| 397 | # define SYS_PF_UR3 (1 << 7) /* GPIO[14:9]/UART3 */ | ||
| 398 | # define SYS_PF_I2D (1 << 6) /* GPIO8/I2SDI */ | ||
| 399 | # define SYS_PF_I2S (1 << 5) /* I2S/GPIO[29:31] */ | ||
| 400 | # define SYS_PF_NI2 (1 << 4) /* NI2/GPIO[24:28] */ | ||
| 401 | # define SYS_PF_U0 (1 << 3) /* U0TXD/GPIO20 */ | ||
| 402 | # define SYS_PF_RD (1 << 2) /* IRTXD/GPIO19 */ | ||
| 403 | # define SYS_PF_A97 (1 << 1) /* AC97/SSL1 */ | ||
| 404 | # define SYS_PF_S0 (1 << 0) /* SSI_0/GPIO[16:18] */ | ||
| 405 | |||
| 406 | /* Au1100 only */ | ||
| 407 | # define SYS_PF_PC (1 << 18) /* PCMCIA/GPIO[207:204] */ | ||
| 408 | # define SYS_PF_LCD (1 << 17) /* extern lcd/GPIO[203:200] */ | ||
| 409 | # define SYS_PF_CS (1 << 16) /* EXTCLK0/32KHz to gpio2 */ | ||
| 410 | # define SYS_PF_EX0 (1 << 9) /* GPIO2/clock */ | ||
| 411 | |||
| 412 | /* Au1550 only. Redefines lots of pins */ | ||
| 413 | # define SYS_PF_PSC2_MASK (7 << 17) | ||
| 414 | # define SYS_PF_PSC2_AC97 0 | ||
| 415 | # define SYS_PF_PSC2_SPI 0 | ||
| 416 | # define SYS_PF_PSC2_I2S (1 << 17) | ||
| 417 | # define SYS_PF_PSC2_SMBUS (3 << 17) | ||
| 418 | # define SYS_PF_PSC2_GPIO (7 << 17) | ||
| 419 | # define SYS_PF_PSC3_MASK (7 << 20) | ||
| 420 | # define SYS_PF_PSC3_AC97 0 | ||
| 421 | # define SYS_PF_PSC3_SPI 0 | ||
| 422 | # define SYS_PF_PSC3_I2S (1 << 20) | ||
| 423 | # define SYS_PF_PSC3_SMBUS (3 << 20) | ||
| 424 | # define SYS_PF_PSC3_GPIO (7 << 20) | ||
| 425 | # define SYS_PF_PSC1_S1 (1 << 1) | ||
| 426 | # define SYS_PF_MUST_BE_SET ((1 << 5) | (1 << 2)) | ||
| 427 | |||
| 428 | /* Au1200 only */ | ||
| 429 | #define SYS_PINFUNC_DMA (1 << 31) | ||
| 430 | #define SYS_PINFUNC_S0A (1 << 30) | ||
| 431 | #define SYS_PINFUNC_S1A (1 << 29) | ||
| 432 | #define SYS_PINFUNC_LP0 (1 << 28) | ||
| 433 | #define SYS_PINFUNC_LP1 (1 << 27) | ||
| 434 | #define SYS_PINFUNC_LD16 (1 << 26) | ||
| 435 | #define SYS_PINFUNC_LD8 (1 << 25) | ||
| 436 | #define SYS_PINFUNC_LD1 (1 << 24) | ||
| 437 | #define SYS_PINFUNC_LD0 (1 << 23) | ||
| 438 | #define SYS_PINFUNC_P1A (3 << 21) | ||
| 439 | #define SYS_PINFUNC_P1B (1 << 20) | ||
| 440 | #define SYS_PINFUNC_FS3 (1 << 19) | ||
| 441 | #define SYS_PINFUNC_P0A (3 << 17) | ||
| 442 | #define SYS_PINFUNC_CS (1 << 16) | ||
| 443 | #define SYS_PINFUNC_CIM (1 << 15) | ||
| 444 | #define SYS_PINFUNC_P1C (1 << 14) | ||
| 445 | #define SYS_PINFUNC_U1T (1 << 12) | ||
| 446 | #define SYS_PINFUNC_U1R (1 << 11) | ||
| 447 | #define SYS_PINFUNC_EX1 (1 << 10) | ||
| 448 | #define SYS_PINFUNC_EX0 (1 << 9) | ||
| 449 | #define SYS_PINFUNC_U0R (1 << 8) | ||
| 450 | #define SYS_PINFUNC_MC (1 << 7) | ||
| 451 | #define SYS_PINFUNC_S0B (1 << 6) | ||
| 452 | #define SYS_PINFUNC_S0C (1 << 5) | ||
| 453 | #define SYS_PINFUNC_P0B (1 << 4) | ||
| 454 | #define SYS_PINFUNC_U0T (1 << 3) | ||
| 455 | #define SYS_PINFUNC_S1B (1 << 2) | ||
| 456 | |||
| 457 | /* Power Management */ | ||
| 458 | #define AU1000_SYS_SCRATCH0 0x18 | ||
| 459 | #define AU1000_SYS_SCRATCH1 0x1c | ||
| 460 | #define AU1000_SYS_WAKEMSK 0x34 | ||
| 461 | #define AU1000_SYS_ENDIAN 0x38 | ||
| 462 | #define AU1000_SYS_POWERCTRL 0x3c | ||
| 463 | #define AU1000_SYS_WAKESRC 0x5c | ||
| 464 | #define AU1000_SYS_SLPPWR 0x78 | ||
| 465 | #define AU1000_SYS_SLEEP 0x7c | ||
| 466 | |||
| 467 | #define SYS_WAKEMSK_D2 (1 << 9) | ||
| 468 | #define SYS_WAKEMSK_M2 (1 << 8) | ||
| 469 | #define SYS_WAKEMSK_GPIO(x) (1 << (x)) | ||
| 470 | |||
| 471 | /* Clock Controller */ | ||
| 472 | #define AU1000_SYS_FREQCTRL0 0x20 | ||
| 473 | #define AU1000_SYS_FREQCTRL1 0x24 | ||
| 474 | #define AU1000_SYS_CLKSRC 0x28 | ||
| 475 | #define AU1000_SYS_CPUPLL 0x60 | ||
| 476 | #define AU1000_SYS_AUXPLL 0x64 | ||
| 477 | #define AU1300_SYS_AUXPLL2 0x68 | ||
| 478 | |||
| 479 | |||
| 480 | /**********************************************************************/ | ||
| 481 | |||
| 482 | |||
| 483 | /* The PCI chip selects are outside the 32bit space, and since we can't | ||
| 484 | * just program the 36bit addresses into BARs, we have to take a chunk | ||
| 485 | * out of the 32bit space and reserve it for PCI. When these addresses | ||
| 486 | * are ioremap()ed, they'll be fixed up to the real 36bit address before | ||
| 487 | * being passed to the real ioremap function. | ||
| 488 | */ | ||
| 489 | #define ALCHEMY_PCI_MEMWIN_START (AU1500_PCI_MEM_PHYS_ADDR >> 4) | ||
| 490 | #define ALCHEMY_PCI_MEMWIN_END (ALCHEMY_PCI_MEMWIN_START + 0x0FFFFFFF) | ||
| 491 | |||
| 492 | /* for PCI IO it's simpler because we get to do the ioremap ourselves and then | ||
| 493 | * adjust the device's resources. | ||
| 494 | */ | ||
| 495 | #define ALCHEMY_PCI_IOWIN_START 0x00001000 | ||
| 496 | #define ALCHEMY_PCI_IOWIN_END 0x0000FFFF | ||
| 497 | |||
| 498 | #ifdef CONFIG_PCI | ||
| 499 | |||
| 500 | #define IOPORT_RESOURCE_START 0x00001000 /* skip legacy probing */ | ||
| 501 | #define IOPORT_RESOURCE_END 0xffffffff | ||
| 502 | #define IOMEM_RESOURCE_START 0x10000000 | ||
| 503 | #define IOMEM_RESOURCE_END 0xfffffffffULL | ||
| 504 | |||
| 505 | #else | ||
| 506 | |||
| 507 | /* Don't allow any legacy ports probing */ | ||
| 508 | #define IOPORT_RESOURCE_START 0x10000000 | ||
| 509 | #define IOPORT_RESOURCE_END 0xffffffff | ||
| 510 | #define IOMEM_RESOURCE_START 0x10000000 | ||
| 511 | #define IOMEM_RESOURCE_END 0xfffffffffULL | ||
| 512 | |||
| 513 | #endif | ||
| 514 | |||
| 515 | /* PCI controller block register offsets */ | ||
| 516 | #define PCI_REG_CMEM 0x0000 | ||
| 517 | #define PCI_REG_CONFIG 0x0004 | ||
| 518 | #define PCI_REG_B2BMASK_CCH 0x0008 | ||
| 519 | #define PCI_REG_B2BBASE0_VID 0x000C | ||
| 520 | #define PCI_REG_B2BBASE1_SID 0x0010 | ||
| 521 | #define PCI_REG_MWMASK_DEV 0x0014 | ||
| 522 | #define PCI_REG_MWBASE_REV_CCL 0x0018 | ||
| 523 | #define PCI_REG_ERR_ADDR 0x001C | ||
| 524 | #define PCI_REG_SPEC_INTACK 0x0020 | ||
| 525 | #define PCI_REG_ID 0x0100 | ||
| 526 | #define PCI_REG_STATCMD 0x0104 | ||
| 527 | #define PCI_REG_CLASSREV 0x0108 | ||
| 528 | #define PCI_REG_PARAM 0x010C | ||
| 529 | #define PCI_REG_MBAR 0x0110 | ||
| 530 | #define PCI_REG_TIMEOUT 0x0140 | ||
| 531 | |||
| 532 | /* PCI controller block register bits */ | ||
| 533 | #define PCI_CMEM_E (1 << 28) /* enable cacheable memory */ | ||
| 534 | #define PCI_CMEM_CMBASE(x) (((x) & 0x3fff) << 14) | ||
| 535 | #define PCI_CMEM_CMMASK(x) ((x) & 0x3fff) | ||
| 536 | #define PCI_CONFIG_ERD (1 << 27) /* pci error during R/W */ | ||
| 537 | #define PCI_CONFIG_ET (1 << 26) /* error in target mode */ | ||
| 538 | #define PCI_CONFIG_EF (1 << 25) /* fatal error */ | ||
| 539 | #define PCI_CONFIG_EP (1 << 24) /* parity error */ | ||
| 540 | #define PCI_CONFIG_EM (1 << 23) /* multiple errors */ | ||
| 541 | #define PCI_CONFIG_BM (1 << 22) /* bad master error */ | ||
| 542 | #define PCI_CONFIG_PD (1 << 20) /* PCI Disable */ | ||
| 543 | #define PCI_CONFIG_BME (1 << 19) /* Byte Mask Enable for reads */ | ||
| 544 | #define PCI_CONFIG_NC (1 << 16) /* mark mem access non-coherent */ | ||
| 545 | #define PCI_CONFIG_IA (1 << 15) /* INTA# enabled (target mode) */ | ||
| 546 | #define PCI_CONFIG_IP (1 << 13) /* int on PCI_PERR# */ | ||
| 547 | #define PCI_CONFIG_IS (1 << 12) /* int on PCI_SERR# */ | ||
| 548 | #define PCI_CONFIG_IMM (1 << 11) /* int on master abort */ | ||
| 549 | #define PCI_CONFIG_ITM (1 << 10) /* int on target abort (as master) */ | ||
| 550 | #define PCI_CONFIG_ITT (1 << 9) /* int on target abort (as target) */ | ||
| 551 | #define PCI_CONFIG_IPB (1 << 8) /* int on PERR# in bus master acc */ | ||
| 552 | #define PCI_CONFIG_SIC_NO (0 << 6) /* no byte mask changes */ | ||
| 553 | #define PCI_CONFIG_SIC_BA_ADR (1 << 6) /* on byte/hw acc, invert adr bits */ | ||
| 554 | #define PCI_CONFIG_SIC_HWA_DAT (2 << 6) /* on halfword acc, swap data */ | ||
| 555 | #define PCI_CONFIG_SIC_ALL (3 << 6) /* swap data bytes on all accesses */ | ||
| 556 | #define PCI_CONFIG_ST (1 << 5) /* swap data by target transactions */ | ||
| 557 | #define PCI_CONFIG_SM (1 << 4) /* swap data from PCI ctl */ | ||
| 558 | #define PCI_CONFIG_AEN (1 << 3) /* enable internal arbiter */ | ||
| 559 | #define PCI_CONFIG_R2H (1 << 2) /* REQ2# to hi-prio arbiter */ | ||
| 560 | #define PCI_CONFIG_R1H (1 << 1) /* REQ1# to hi-prio arbiter */ | ||
| 561 | #define PCI_CONFIG_CH (1 << 0) /* PCI ctl to hi-prio arbiter */ | ||
| 562 | #define PCI_B2BMASK_B2BMASK(x) (((x) & 0xffff) << 16) | ||
| 563 | #define PCI_B2BMASK_CCH(x) ((x) & 0xffff) /* 16 upper bits of class code */ | ||
| 564 | #define PCI_B2BBASE0_VID_B0(x) (((x) & 0xffff) << 16) | ||
| 565 | #define PCI_B2BBASE0_VID_SV(x) ((x) & 0xffff) | ||
| 566 | #define PCI_B2BBASE1_SID_B1(x) (((x) & 0xffff) << 16) | ||
| 567 | #define PCI_B2BBASE1_SID_SI(x) ((x) & 0xffff) | ||
| 568 | #define PCI_MWMASKDEV_MWMASK(x) (((x) & 0xffff) << 16) | ||
| 569 | #define PCI_MWMASKDEV_DEVID(x) ((x) & 0xffff) | ||
| 570 | #define PCI_MWBASEREVCCL_BASE(x) (((x) & 0xffff) << 16) | ||
| 571 | #define PCI_MWBASEREVCCL_REV(x) (((x) & 0xff) << 8) | ||
| 572 | #define PCI_MWBASEREVCCL_CCL(x) ((x) & 0xff) | ||
| 573 | #define PCI_ID_DID(x) (((x) & 0xffff) << 16) | ||
| 574 | #define PCI_ID_VID(x) ((x) & 0xffff) | ||
| 575 | #define PCI_STATCMD_STATUS(x) (((x) & 0xffff) << 16) | ||
| 576 | #define PCI_STATCMD_CMD(x) ((x) & 0xffff) | ||
| 577 | #define PCI_CLASSREV_CLASS(x) (((x) & 0x00ffffff) << 8) | ||
| 578 | #define PCI_CLASSREV_REV(x) ((x) & 0xff) | ||
| 579 | #define PCI_PARAM_BIST(x) (((x) & 0xff) << 24) | ||
| 580 | #define PCI_PARAM_HT(x) (((x) & 0xff) << 16) | ||
| 581 | #define PCI_PARAM_LT(x) (((x) & 0xff) << 8) | ||
| 582 | #define PCI_PARAM_CLS(x) ((x) & 0xff) | ||
| 583 | #define PCI_TIMEOUT_RETRIES(x) (((x) & 0xff) << 8) /* max retries */ | ||
| 584 | #define PCI_TIMEOUT_TO(x) ((x) & 0xff) /* target ready timeout */ | ||
| 585 | |||
| 586 | |||
| 587 | /**********************************************************************/ | ||
| 588 | |||
| 37 | 589 | ||
| 38 | #ifndef _LANGUAGE_ASSEMBLY | 590 | #ifndef _LANGUAGE_ASSEMBLY |
| 39 | 591 | ||
| @@ -45,52 +597,36 @@ | |||
| 45 | 597 | ||
| 46 | #include <asm/cpu.h> | 598 | #include <asm/cpu.h> |
| 47 | 599 | ||
| 48 | /* cpu pipeline flush */ | 600 | /* helpers to access the SYS_* registers */ |
| 49 | void static inline au_sync(void) | 601 | static inline unsigned long alchemy_rdsys(int regofs) |
| 50 | { | 602 | { |
| 51 | __asm__ volatile ("sync"); | 603 | void __iomem *b = (void __iomem *)KSEG1ADDR(AU1000_SYS_PHYS_ADDR); |
| 52 | } | ||
| 53 | 604 | ||
| 54 | void static inline au_sync_udelay(int us) | 605 | return __raw_readl(b + regofs); |
| 55 | { | ||
| 56 | __asm__ volatile ("sync"); | ||
| 57 | udelay(us); | ||
| 58 | } | 606 | } |
| 59 | 607 | ||
| 60 | void static inline au_sync_delay(int ms) | 608 | static inline void alchemy_wrsys(unsigned long v, int regofs) |
| 61 | { | 609 | { |
| 62 | __asm__ volatile ("sync"); | 610 | void __iomem *b = (void __iomem *)KSEG1ADDR(AU1000_SYS_PHYS_ADDR); |
| 63 | mdelay(ms); | ||
| 64 | } | ||
| 65 | 611 | ||
| 66 | void static inline au_writeb(u8 val, unsigned long reg) | 612 | __raw_writel(v, b + regofs); |
| 67 | { | 613 | wmb(); /* drain writebuffer */ |
| 68 | *(volatile u8 *)reg = val; | ||
| 69 | } | 614 | } |
| 70 | 615 | ||
| 71 | void static inline au_writew(u16 val, unsigned long reg) | 616 | /* helpers to access static memctrl registers */ |
| 617 | static inline unsigned long alchemy_rdsmem(int regofs) | ||
| 72 | { | 618 | { |
| 73 | *(volatile u16 *)reg = val; | 619 | void __iomem *b = (void __iomem *)KSEG1ADDR(AU1000_STATIC_MEM_PHYS_ADDR); |
| 74 | } | ||
| 75 | 620 | ||
| 76 | void static inline au_writel(u32 val, unsigned long reg) | 621 | return __raw_readl(b + regofs); |
| 77 | { | ||
| 78 | *(volatile u32 *)reg = val; | ||
| 79 | } | 622 | } |
| 80 | 623 | ||
| 81 | static inline u8 au_readb(unsigned long reg) | 624 | static inline void alchemy_wrsmem(unsigned long v, int regofs) |
| 82 | { | 625 | { |
| 83 | return *(volatile u8 *)reg; | 626 | void __iomem *b = (void __iomem *)KSEG1ADDR(AU1000_STATIC_MEM_PHYS_ADDR); |
| 84 | } | ||
| 85 | 627 | ||
| 86 | static inline u16 au_readw(unsigned long reg) | 628 | __raw_writel(v, b + regofs); |
| 87 | { | 629 | wmb(); /* drain writebuffer */ |
| 88 | return *(volatile u16 *)reg; | ||
| 89 | } | ||
| 90 | |||
| 91 | static inline u32 au_readl(unsigned long reg) | ||
| 92 | { | ||
| 93 | return *(volatile u32 *)reg; | ||
| 94 | } | 630 | } |
| 95 | 631 | ||
| 96 | /* Early Au1000 have a write-only SYS_CPUPLL register. */ | 632 | /* Early Au1000 have a write-only SYS_CPUPLL register. */ |
| @@ -192,19 +728,20 @@ static inline void alchemy_uart_enable(u32 uart_phys) | |||
| 192 | /* reset, enable clock, deassert reset */ | 728 | /* reset, enable clock, deassert reset */ |
| 193 | if ((__raw_readl(addr + 0x100) & 3) != 3) { | 729 | if ((__raw_readl(addr + 0x100) & 3) != 3) { |
| 194 | __raw_writel(0, addr + 0x100); | 730 | __raw_writel(0, addr + 0x100); |
| 195 | wmb(); | 731 | wmb(); /* drain writebuffer */ |
| 196 | __raw_writel(1, addr + 0x100); | 732 | __raw_writel(1, addr + 0x100); |
| 197 | wmb(); | 733 | wmb(); /* drain writebuffer */ |
| 198 | } | 734 | } |
| 199 | __raw_writel(3, addr + 0x100); | 735 | __raw_writel(3, addr + 0x100); |
| 200 | wmb(); | 736 | wmb(); /* drain writebuffer */ |
| 201 | } | 737 | } |
| 202 | 738 | ||
| 203 | static inline void alchemy_uart_disable(u32 uart_phys) | 739 | static inline void alchemy_uart_disable(u32 uart_phys) |
| 204 | { | 740 | { |
| 205 | void __iomem *addr = (void __iomem *)KSEG1ADDR(uart_phys); | 741 | void __iomem *addr = (void __iomem *)KSEG1ADDR(uart_phys); |
| 742 | |||
| 206 | __raw_writel(0, addr + 0x100); /* UART_MOD_CNTRL */ | 743 | __raw_writel(0, addr + 0x100); /* UART_MOD_CNTRL */ |
| 207 | wmb(); | 744 | wmb(); /* drain writebuffer */ |
| 208 | } | 745 | } |
| 209 | 746 | ||
| 210 | static inline void alchemy_uart_putchar(u32 uart_phys, u8 c) | 747 | static inline void alchemy_uart_putchar(u32 uart_phys, u8 c) |
| @@ -223,7 +760,7 @@ static inline void alchemy_uart_putchar(u32 uart_phys, u8 c) | |||
| 223 | } while (--timeout); | 760 | } while (--timeout); |
| 224 | 761 | ||
| 225 | __raw_writel(c, base + 0x04); /* tx */ | 762 | __raw_writel(c, base + 0x04); /* tx */ |
| 226 | wmb(); | 763 | wmb(); /* drain writebuffer */ |
| 227 | } | 764 | } |
| 228 | 765 | ||
| 229 | /* return number of ethernet MACs on a given cputype */ | 766 | /* return number of ethernet MACs on a given cputype */ |
| @@ -240,20 +777,13 @@ static inline int alchemy_get_macs(int type) | |||
| 240 | return 0; | 777 | return 0; |
| 241 | } | 778 | } |
| 242 | 779 | ||
| 243 | /* arch/mips/au1000/common/clocks.c */ | ||
| 244 | extern void set_au1x00_speed(unsigned int new_freq); | ||
| 245 | extern unsigned int get_au1x00_speed(void); | ||
| 246 | extern void set_au1x00_uart_baud_base(unsigned long new_baud_base); | ||
| 247 | extern unsigned long get_au1x00_uart_baud_base(void); | ||
| 248 | extern unsigned long au1xxx_calc_clock(void); | ||
| 249 | |||
| 250 | /* PM: arch/mips/alchemy/common/sleeper.S, power.c, irq.c */ | 780 | /* PM: arch/mips/alchemy/common/sleeper.S, power.c, irq.c */ |
| 251 | void alchemy_sleep_au1000(void); | 781 | void alchemy_sleep_au1000(void); |
| 252 | void alchemy_sleep_au1550(void); | 782 | void alchemy_sleep_au1550(void); |
| 253 | void alchemy_sleep_au1300(void); | 783 | void alchemy_sleep_au1300(void); |
| 254 | void au_sleep(void); | 784 | void au_sleep(void); |
| 255 | 785 | ||
| 256 | /* USB: drivers/usb/host/alchemy-common.c */ | 786 | /* USB: arch/mips/alchemy/common/usb.c */ |
| 257 | enum alchemy_usb_block { | 787 | enum alchemy_usb_block { |
| 258 | ALCHEMY_USB_OHCI0, | 788 | ALCHEMY_USB_OHCI0, |
| 259 | ALCHEMY_USB_UDC0, | 789 | ALCHEMY_USB_UDC0, |
| @@ -272,6 +802,20 @@ struct alchemy_pci_platdata { | |||
| 272 | unsigned long pci_cfg_clr; | 802 | unsigned long pci_cfg_clr; |
| 273 | }; | 803 | }; |
| 274 | 804 | ||
| 805 | /* The IrDA peripheral has an IRFIRSEL pin, but on the DB/PB boards it's | ||
| 806 | * not used to select FIR/SIR mode on the transceiver but as a GPIO. | ||
| 807 | * Instead a CPLD has to be told about the mode. The driver calls the | ||
| 808 | * set_phy_mode() function in addition to driving the IRFIRSEL pin. | ||
| 809 | */ | ||
| 810 | #define AU1000_IRDA_PHY_MODE_OFF 0 | ||
| 811 | #define AU1000_IRDA_PHY_MODE_SIR 1 | ||
| 812 | #define AU1000_IRDA_PHY_MODE_FIR 2 | ||
| 813 | |||
| 814 | struct au1k_irda_platform_data { | ||
| 815 | void (*set_phy_mode)(int mode); | ||
| 816 | }; | ||
| 817 | |||
| 818 | |||
| 275 | /* Multifunction pins: Each of these pins can either be assigned to the | 819 | /* Multifunction pins: Each of these pins can either be assigned to the |
| 276 | * GPIO controller or a on-chip peripheral. | 820 | * GPIO controller or a on-chip peripheral. |
| 277 | * Call "au1300_pinfunc_to_dev()" or "au1300_pinfunc_to_gpio()" to | 821 | * Call "au1300_pinfunc_to_dev()" or "au1300_pinfunc_to_gpio()" to |
| @@ -344,20 +888,6 @@ enum au1300_vss_block { | |||
| 344 | 888 | ||
| 345 | extern void au1300_vss_block_control(int block, int enable); | 889 | extern void au1300_vss_block_control(int block, int enable); |
| 346 | 890 | ||
| 347 | |||
| 348 | /* SOC Interrupt numbers */ | ||
| 349 | /* Au1000-style (IC0/1): 2 controllers with 32 sources each */ | ||
| 350 | #define AU1000_INTC0_INT_BASE (MIPS_CPU_IRQ_BASE + 8) | ||
| 351 | #define AU1000_INTC0_INT_LAST (AU1000_INTC0_INT_BASE + 31) | ||
| 352 | #define AU1000_INTC1_INT_BASE (AU1000_INTC0_INT_LAST + 1) | ||
| 353 | #define AU1000_INTC1_INT_LAST (AU1000_INTC1_INT_BASE + 31) | ||
| 354 | #define AU1000_MAX_INTR AU1000_INTC1_INT_LAST | ||
| 355 | |||
| 356 | /* Au1300-style (GPIC): 1 controller with up to 128 sources */ | ||
| 357 | #define ALCHEMY_GPIC_INT_BASE (MIPS_CPU_IRQ_BASE + 8) | ||
| 358 | #define ALCHEMY_GPIC_INT_NUM 128 | ||
| 359 | #define ALCHEMY_GPIC_INT_LAST (ALCHEMY_GPIC_INT_BASE + ALCHEMY_GPIC_INT_NUM - 1) | ||
| 360 | |||
| 361 | enum soc_au1000_ints { | 891 | enum soc_au1000_ints { |
| 362 | AU1000_FIRST_INT = AU1000_INTC0_INT_BASE, | 892 | AU1000_FIRST_INT = AU1000_INTC0_INT_BASE, |
| 363 | AU1000_UART0_INT = AU1000_FIRST_INT, | 893 | AU1000_UART0_INT = AU1000_FIRST_INT, |
| @@ -678,885 +1208,4 @@ enum soc_au1200_ints { | |||
| 678 | 1208 | ||
| 679 | #endif /* !defined (_LANGUAGE_ASSEMBLY) */ | 1209 | #endif /* !defined (_LANGUAGE_ASSEMBLY) */ |
| 680 | 1210 | ||
| 681 | /* Au1300 peripheral interrupt numbers */ | ||
| 682 | #define AU1300_FIRST_INT (ALCHEMY_GPIC_INT_BASE) | ||
| 683 | #define AU1300_UART1_INT (AU1300_FIRST_INT + 17) | ||
| 684 | #define AU1300_UART2_INT (AU1300_FIRST_INT + 25) | ||
| 685 | #define AU1300_UART3_INT (AU1300_FIRST_INT + 27) | ||
| 686 | #define AU1300_SD1_INT (AU1300_FIRST_INT + 32) | ||
| 687 | #define AU1300_SD2_INT (AU1300_FIRST_INT + 38) | ||
| 688 | #define AU1300_PSC0_INT (AU1300_FIRST_INT + 48) | ||
| 689 | #define AU1300_PSC1_INT (AU1300_FIRST_INT + 52) | ||
| 690 | #define AU1300_PSC2_INT (AU1300_FIRST_INT + 56) | ||
| 691 | #define AU1300_PSC3_INT (AU1300_FIRST_INT + 60) | ||
| 692 | #define AU1300_NAND_INT (AU1300_FIRST_INT + 62) | ||
| 693 | #define AU1300_DDMA_INT (AU1300_FIRST_INT + 75) | ||
| 694 | #define AU1300_MMU_INT (AU1300_FIRST_INT + 76) | ||
| 695 | #define AU1300_MPU_INT (AU1300_FIRST_INT + 77) | ||
| 696 | #define AU1300_GPU_INT (AU1300_FIRST_INT + 78) | ||
| 697 | #define AU1300_UDMA_INT (AU1300_FIRST_INT + 79) | ||
| 698 | #define AU1300_TOY_INT (AU1300_FIRST_INT + 80) | ||
| 699 | #define AU1300_TOY_MATCH0_INT (AU1300_FIRST_INT + 81) | ||
| 700 | #define AU1300_TOY_MATCH1_INT (AU1300_FIRST_INT + 82) | ||
| 701 | #define AU1300_TOY_MATCH2_INT (AU1300_FIRST_INT + 83) | ||
| 702 | #define AU1300_RTC_INT (AU1300_FIRST_INT + 84) | ||
| 703 | #define AU1300_RTC_MATCH0_INT (AU1300_FIRST_INT + 85) | ||
| 704 | #define AU1300_RTC_MATCH1_INT (AU1300_FIRST_INT + 86) | ||
| 705 | #define AU1300_RTC_MATCH2_INT (AU1300_FIRST_INT + 87) | ||
| 706 | #define AU1300_UART0_INT (AU1300_FIRST_INT + 88) | ||
| 707 | #define AU1300_SD0_INT (AU1300_FIRST_INT + 89) | ||
| 708 | #define AU1300_USB_INT (AU1300_FIRST_INT + 90) | ||
| 709 | #define AU1300_LCD_INT (AU1300_FIRST_INT + 91) | ||
| 710 | #define AU1300_BSA_INT (AU1300_FIRST_INT + 92) | ||
| 711 | #define AU1300_MPE_INT (AU1300_FIRST_INT + 93) | ||
| 712 | #define AU1300_ITE_INT (AU1300_FIRST_INT + 94) | ||
| 713 | #define AU1300_AES_INT (AU1300_FIRST_INT + 95) | ||
| 714 | #define AU1300_CIM_INT (AU1300_FIRST_INT + 96) | ||
| 715 | |||
| 716 | /**********************************************************************/ | ||
| 717 | |||
| 718 | /* | ||
| 719 | * Physical base addresses for integrated peripherals | ||
| 720 | * 0..au1000 1..au1500 2..au1100 3..au1550 4..au1200 5..au1300 | ||
| 721 | */ | ||
| 722 | |||
| 723 | #define AU1000_AC97_PHYS_ADDR 0x10000000 /* 012 */ | ||
| 724 | #define AU1300_ROM_PHYS_ADDR 0x10000000 /* 5 */ | ||
| 725 | #define AU1300_OTP_PHYS_ADDR 0x10002000 /* 5 */ | ||
| 726 | #define AU1300_VSS_PHYS_ADDR 0x10003000 /* 5 */ | ||
| 727 | #define AU1300_UART0_PHYS_ADDR 0x10100000 /* 5 */ | ||
| 728 | #define AU1300_UART1_PHYS_ADDR 0x10101000 /* 5 */ | ||
| 729 | #define AU1300_UART2_PHYS_ADDR 0x10102000 /* 5 */ | ||
| 730 | #define AU1300_UART3_PHYS_ADDR 0x10103000 /* 5 */ | ||
| 731 | #define AU1000_USB_OHCI_PHYS_ADDR 0x10100000 /* 012 */ | ||
| 732 | #define AU1000_USB_UDC_PHYS_ADDR 0x10200000 /* 0123 */ | ||
| 733 | #define AU1300_GPIC_PHYS_ADDR 0x10200000 /* 5 */ | ||
| 734 | #define AU1000_IRDA_PHYS_ADDR 0x10300000 /* 02 */ | ||
| 735 | #define AU1200_AES_PHYS_ADDR 0x10300000 /* 45 */ | ||
| 736 | #define AU1000_IC0_PHYS_ADDR 0x10400000 /* 01234 */ | ||
| 737 | #define AU1300_GPU_PHYS_ADDR 0x10500000 /* 5 */ | ||
| 738 | #define AU1000_MAC0_PHYS_ADDR 0x10500000 /* 023 */ | ||
| 739 | #define AU1000_MAC1_PHYS_ADDR 0x10510000 /* 023 */ | ||
| 740 | #define AU1000_MACEN_PHYS_ADDR 0x10520000 /* 023 */ | ||
| 741 | #define AU1100_SD0_PHYS_ADDR 0x10600000 /* 245 */ | ||
| 742 | #define AU1300_SD1_PHYS_ADDR 0x10601000 /* 5 */ | ||
| 743 | #define AU1300_SD2_PHYS_ADDR 0x10602000 /* 5 */ | ||
| 744 | #define AU1100_SD1_PHYS_ADDR 0x10680000 /* 24 */ | ||
| 745 | #define AU1300_SYS_PHYS_ADDR 0x10900000 /* 5 */ | ||
| 746 | #define AU1550_PSC2_PHYS_ADDR 0x10A00000 /* 3 */ | ||
| 747 | #define AU1550_PSC3_PHYS_ADDR 0x10B00000 /* 3 */ | ||
| 748 | #define AU1300_PSC0_PHYS_ADDR 0x10A00000 /* 5 */ | ||
| 749 | #define AU1300_PSC1_PHYS_ADDR 0x10A01000 /* 5 */ | ||
| 750 | #define AU1300_PSC2_PHYS_ADDR 0x10A02000 /* 5 */ | ||
| 751 | #define AU1300_PSC3_PHYS_ADDR 0x10A03000 /* 5 */ | ||
| 752 | #define AU1000_I2S_PHYS_ADDR 0x11000000 /* 02 */ | ||
| 753 | #define AU1500_MAC0_PHYS_ADDR 0x11500000 /* 1 */ | ||
| 754 | #define AU1500_MAC1_PHYS_ADDR 0x11510000 /* 1 */ | ||
| 755 | #define AU1500_MACEN_PHYS_ADDR 0x11520000 /* 1 */ | ||
| 756 | #define AU1000_UART0_PHYS_ADDR 0x11100000 /* 01234 */ | ||
| 757 | #define AU1200_SWCNT_PHYS_ADDR 0x1110010C /* 4 */ | ||
| 758 | #define AU1000_UART1_PHYS_ADDR 0x11200000 /* 0234 */ | ||
| 759 | #define AU1000_UART2_PHYS_ADDR 0x11300000 /* 0 */ | ||
| 760 | #define AU1000_UART3_PHYS_ADDR 0x11400000 /* 0123 */ | ||
| 761 | #define AU1000_SSI0_PHYS_ADDR 0x11600000 /* 02 */ | ||
| 762 | #define AU1000_SSI1_PHYS_ADDR 0x11680000 /* 02 */ | ||
| 763 | #define AU1500_GPIO2_PHYS_ADDR 0x11700000 /* 1234 */ | ||
| 764 | #define AU1000_IC1_PHYS_ADDR 0x11800000 /* 01234 */ | ||
| 765 | #define AU1000_SYS_PHYS_ADDR 0x11900000 /* 012345 */ | ||
| 766 | #define AU1550_PSC0_PHYS_ADDR 0x11A00000 /* 34 */ | ||
| 767 | #define AU1550_PSC1_PHYS_ADDR 0x11B00000 /* 34 */ | ||
| 768 | #define AU1000_MEM_PHYS_ADDR 0x14000000 /* 01234 */ | ||
| 769 | #define AU1000_STATIC_MEM_PHYS_ADDR 0x14001000 /* 01234 */ | ||
| 770 | #define AU1300_UDMA_PHYS_ADDR 0x14001800 /* 5 */ | ||
| 771 | #define AU1000_DMA_PHYS_ADDR 0x14002000 /* 012 */ | ||
| 772 | #define AU1550_DBDMA_PHYS_ADDR 0x14002000 /* 345 */ | ||
| 773 | #define AU1550_DBDMA_CONF_PHYS_ADDR 0x14003000 /* 345 */ | ||
| 774 | #define AU1000_MACDMA0_PHYS_ADDR 0x14004000 /* 0123 */ | ||
| 775 | #define AU1000_MACDMA1_PHYS_ADDR 0x14004200 /* 0123 */ | ||
| 776 | #define AU1200_CIM_PHYS_ADDR 0x14004000 /* 45 */ | ||
| 777 | #define AU1500_PCI_PHYS_ADDR 0x14005000 /* 13 */ | ||
| 778 | #define AU1550_PE_PHYS_ADDR 0x14008000 /* 3 */ | ||
| 779 | #define AU1200_MAEBE_PHYS_ADDR 0x14010000 /* 4 */ | ||
| 780 | #define AU1200_MAEFE_PHYS_ADDR 0x14012000 /* 4 */ | ||
| 781 | #define AU1300_MAEITE_PHYS_ADDR 0x14010000 /* 5 */ | ||
| 782 | #define AU1300_MAEMPE_PHYS_ADDR 0x14014000 /* 5 */ | ||
| 783 | #define AU1550_USB_OHCI_PHYS_ADDR 0x14020000 /* 3 */ | ||
| 784 | #define AU1200_USB_CTL_PHYS_ADDR 0x14020000 /* 4 */ | ||
| 785 | #define AU1200_USB_OTG_PHYS_ADDR 0x14020020 /* 4 */ | ||
| 786 | #define AU1200_USB_OHCI_PHYS_ADDR 0x14020100 /* 4 */ | ||
| 787 | #define AU1200_USB_EHCI_PHYS_ADDR 0x14020200 /* 4 */ | ||
| 788 | #define AU1200_USB_UDC_PHYS_ADDR 0x14022000 /* 4 */ | ||
| 789 | #define AU1300_USB_EHCI_PHYS_ADDR 0x14020000 /* 5 */ | ||
| 790 | #define AU1300_USB_OHCI0_PHYS_ADDR 0x14020400 /* 5 */ | ||
| 791 | #define AU1300_USB_OHCI1_PHYS_ADDR 0x14020800 /* 5 */ | ||
| 792 | #define AU1300_USB_CTL_PHYS_ADDR 0x14021000 /* 5 */ | ||
| 793 | #define AU1300_USB_OTG_PHYS_ADDR 0x14022000 /* 5 */ | ||
| 794 | #define AU1300_MAEBSA_PHYS_ADDR 0x14030000 /* 5 */ | ||
| 795 | #define AU1100_LCD_PHYS_ADDR 0x15000000 /* 2 */ | ||
| 796 | #define AU1200_LCD_PHYS_ADDR 0x15000000 /* 45 */ | ||
| 797 | #define AU1500_PCI_MEM_PHYS_ADDR 0x400000000ULL /* 13 */ | ||
| 798 | #define AU1500_PCI_IO_PHYS_ADDR 0x500000000ULL /* 13 */ | ||
| 799 | #define AU1500_PCI_CONFIG0_PHYS_ADDR 0x600000000ULL /* 13 */ | ||
| 800 | #define AU1500_PCI_CONFIG1_PHYS_ADDR 0x680000000ULL /* 13 */ | ||
| 801 | #define AU1000_PCMCIA_IO_PHYS_ADDR 0xF00000000ULL /* 012345 */ | ||
| 802 | #define AU1000_PCMCIA_ATTR_PHYS_ADDR 0xF40000000ULL /* 012345 */ | ||
| 803 | #define AU1000_PCMCIA_MEM_PHYS_ADDR 0xF80000000ULL /* 012345 */ | ||
| 804 | |||
| 805 | /**********************************************************************/ | ||
| 806 | |||
| 807 | |||
| 808 | /* | ||
| 809 | * Au1300 GPIO+INT controller (GPIC) register offsets and bits | ||
| 810 | * Registers are 128bits (0x10 bytes), divided into 4 "banks". | ||
| 811 | */ | ||
| 812 | #define AU1300_GPIC_PINVAL 0x0000 | ||
| 813 | #define AU1300_GPIC_PINVALCLR 0x0010 | ||
| 814 | #define AU1300_GPIC_IPEND 0x0020 | ||
| 815 | #define AU1300_GPIC_PRIENC 0x0030 | ||
| 816 | #define AU1300_GPIC_IEN 0x0040 /* int_mask in manual */ | ||
| 817 | #define AU1300_GPIC_IDIS 0x0050 /* int_maskclr in manual */ | ||
| 818 | #define AU1300_GPIC_DMASEL 0x0060 | ||
| 819 | #define AU1300_GPIC_DEVSEL 0x0080 | ||
| 820 | #define AU1300_GPIC_DEVCLR 0x0090 | ||
| 821 | #define AU1300_GPIC_RSTVAL 0x00a0 | ||
| 822 | /* pin configuration space. one 32bit register for up to 128 IRQs */ | ||
| 823 | #define AU1300_GPIC_PINCFG 0x1000 | ||
| 824 | |||
| 825 | #define GPIC_GPIO_TO_BIT(gpio) \ | ||
| 826 | (1 << ((gpio) & 0x1f)) | ||
| 827 | |||
| 828 | #define GPIC_GPIO_BANKOFF(gpio) \ | ||
| 829 | (((gpio) >> 5) * 4) | ||
| 830 | |||
| 831 | /* Pin Control bits: who owns the pin, what does it do */ | ||
| 832 | #define GPIC_CFG_PC_GPIN 0 | ||
| 833 | #define GPIC_CFG_PC_DEV 1 | ||
| 834 | #define GPIC_CFG_PC_GPOLOW 2 | ||
| 835 | #define GPIC_CFG_PC_GPOHIGH 3 | ||
| 836 | #define GPIC_CFG_PC_MASK 3 | ||
| 837 | |||
| 838 | /* assign pin to MIPS IRQ line */ | ||
| 839 | #define GPIC_CFG_IL_SET(x) (((x) & 3) << 2) | ||
| 840 | #define GPIC_CFG_IL_MASK (3 << 2) | ||
| 841 | |||
| 842 | /* pin interrupt type setup */ | ||
| 843 | #define GPIC_CFG_IC_OFF (0 << 4) | ||
| 844 | #define GPIC_CFG_IC_LEVEL_LOW (1 << 4) | ||
| 845 | #define GPIC_CFG_IC_LEVEL_HIGH (2 << 4) | ||
| 846 | #define GPIC_CFG_IC_EDGE_FALL (5 << 4) | ||
| 847 | #define GPIC_CFG_IC_EDGE_RISE (6 << 4) | ||
| 848 | #define GPIC_CFG_IC_EDGE_BOTH (7 << 4) | ||
| 849 | #define GPIC_CFG_IC_MASK (7 << 4) | ||
| 850 | |||
| 851 | /* allow interrupt to wake cpu from 'wait' */ | ||
| 852 | #define GPIC_CFG_IDLEWAKE (1 << 7) | ||
| 853 | |||
| 854 | /***********************************************************************/ | ||
| 855 | |||
| 856 | /* Au1000 SDRAM memory controller register offsets */ | ||
| 857 | #define AU1000_MEM_SDMODE0 0x0000 | ||
| 858 | #define AU1000_MEM_SDMODE1 0x0004 | ||
| 859 | #define AU1000_MEM_SDMODE2 0x0008 | ||
| 860 | #define AU1000_MEM_SDADDR0 0x000C | ||
| 861 | #define AU1000_MEM_SDADDR1 0x0010 | ||
| 862 | #define AU1000_MEM_SDADDR2 0x0014 | ||
| 863 | #define AU1000_MEM_SDREFCFG 0x0018 | ||
| 864 | #define AU1000_MEM_SDPRECMD 0x001C | ||
| 865 | #define AU1000_MEM_SDAUTOREF 0x0020 | ||
| 866 | #define AU1000_MEM_SDWRMD0 0x0024 | ||
| 867 | #define AU1000_MEM_SDWRMD1 0x0028 | ||
| 868 | #define AU1000_MEM_SDWRMD2 0x002C | ||
| 869 | #define AU1000_MEM_SDSLEEP 0x0030 | ||
| 870 | #define AU1000_MEM_SDSMCKE 0x0034 | ||
| 871 | |||
| 872 | /* MEM_SDMODE register content definitions */ | ||
| 873 | #define MEM_SDMODE_F (1 << 22) | ||
| 874 | #define MEM_SDMODE_SR (1 << 21) | ||
| 875 | #define MEM_SDMODE_BS (1 << 20) | ||
| 876 | #define MEM_SDMODE_RS (3 << 18) | ||
| 877 | #define MEM_SDMODE_CS (7 << 15) | ||
| 878 | #define MEM_SDMODE_TRAS (15 << 11) | ||
| 879 | #define MEM_SDMODE_TMRD (3 << 9) | ||
| 880 | #define MEM_SDMODE_TWR (3 << 7) | ||
| 881 | #define MEM_SDMODE_TRP (3 << 5) | ||
| 882 | #define MEM_SDMODE_TRCD (3 << 3) | ||
| 883 | #define MEM_SDMODE_TCL (7 << 0) | ||
| 884 | |||
| 885 | #define MEM_SDMODE_BS_2Bank (0 << 20) | ||
| 886 | #define MEM_SDMODE_BS_4Bank (1 << 20) | ||
| 887 | #define MEM_SDMODE_RS_11Row (0 << 18) | ||
| 888 | #define MEM_SDMODE_RS_12Row (1 << 18) | ||
| 889 | #define MEM_SDMODE_RS_13Row (2 << 18) | ||
| 890 | #define MEM_SDMODE_RS_N(N) ((N) << 18) | ||
| 891 | #define MEM_SDMODE_CS_7Col (0 << 15) | ||
| 892 | #define MEM_SDMODE_CS_8Col (1 << 15) | ||
| 893 | #define MEM_SDMODE_CS_9Col (2 << 15) | ||
| 894 | #define MEM_SDMODE_CS_10Col (3 << 15) | ||
| 895 | #define MEM_SDMODE_CS_11Col (4 << 15) | ||
| 896 | #define MEM_SDMODE_CS_N(N) ((N) << 15) | ||
| 897 | #define MEM_SDMODE_TRAS_N(N) ((N) << 11) | ||
| 898 | #define MEM_SDMODE_TMRD_N(N) ((N) << 9) | ||
| 899 | #define MEM_SDMODE_TWR_N(N) ((N) << 7) | ||
| 900 | #define MEM_SDMODE_TRP_N(N) ((N) << 5) | ||
| 901 | #define MEM_SDMODE_TRCD_N(N) ((N) << 3) | ||
| 902 | #define MEM_SDMODE_TCL_N(N) ((N) << 0) | ||
| 903 | |||
| 904 | /* MEM_SDADDR register contents definitions */ | ||
| 905 | #define MEM_SDADDR_E (1 << 20) | ||
| 906 | #define MEM_SDADDR_CSBA (0x03FF << 10) | ||
| 907 | #define MEM_SDADDR_CSMASK (0x03FF << 0) | ||
| 908 | #define MEM_SDADDR_CSBA_N(N) ((N) & (0x03FF << 22) >> 12) | ||
| 909 | #define MEM_SDADDR_CSMASK_N(N) ((N)&(0x03FF << 22) >> 22) | ||
| 910 | |||
| 911 | /* MEM_SDREFCFG register content definitions */ | ||
| 912 | #define MEM_SDREFCFG_TRC (15 << 28) | ||
| 913 | #define MEM_SDREFCFG_TRPM (3 << 26) | ||
| 914 | #define MEM_SDREFCFG_E (1 << 25) | ||
| 915 | #define MEM_SDREFCFG_RE (0x1ffffff << 0) | ||
| 916 | #define MEM_SDREFCFG_TRC_N(N) ((N) << MEM_SDREFCFG_TRC) | ||
| 917 | #define MEM_SDREFCFG_TRPM_N(N) ((N) << MEM_SDREFCFG_TRPM) | ||
| 918 | #define MEM_SDREFCFG_REF_N(N) (N) | ||
| 919 | |||
| 920 | /* Au1550 SDRAM Register Offsets */ | ||
| 921 | #define AU1550_MEM_SDMODE0 0x0800 | ||
| 922 | #define AU1550_MEM_SDMODE1 0x0808 | ||
| 923 | #define AU1550_MEM_SDMODE2 0x0810 | ||
| 924 | #define AU1550_MEM_SDADDR0 0x0820 | ||
| 925 | #define AU1550_MEM_SDADDR1 0x0828 | ||
| 926 | #define AU1550_MEM_SDADDR2 0x0830 | ||
| 927 | #define AU1550_MEM_SDCONFIGA 0x0840 | ||
| 928 | #define AU1550_MEM_SDCONFIGB 0x0848 | ||
| 929 | #define AU1550_MEM_SDSTAT 0x0850 | ||
| 930 | #define AU1550_MEM_SDERRADDR 0x0858 | ||
| 931 | #define AU1550_MEM_SDSTRIDE0 0x0860 | ||
| 932 | #define AU1550_MEM_SDSTRIDE1 0x0868 | ||
| 933 | #define AU1550_MEM_SDSTRIDE2 0x0870 | ||
| 934 | #define AU1550_MEM_SDWRMD0 0x0880 | ||
| 935 | #define AU1550_MEM_SDWRMD1 0x0888 | ||
| 936 | #define AU1550_MEM_SDWRMD2 0x0890 | ||
| 937 | #define AU1550_MEM_SDPRECMD 0x08C0 | ||
| 938 | #define AU1550_MEM_SDAUTOREF 0x08C8 | ||
| 939 | #define AU1550_MEM_SDSREF 0x08D0 | ||
| 940 | #define AU1550_MEM_SDSLEEP MEM_SDSREF | ||
| 941 | |||
| 942 | /* Static Bus Controller */ | ||
| 943 | #define MEM_STCFG0 0xB4001000 | ||
| 944 | #define MEM_STTIME0 0xB4001004 | ||
| 945 | #define MEM_STADDR0 0xB4001008 | ||
| 946 | |||
| 947 | #define MEM_STCFG1 0xB4001010 | ||
| 948 | #define MEM_STTIME1 0xB4001014 | ||
| 949 | #define MEM_STADDR1 0xB4001018 | ||
| 950 | |||
| 951 | #define MEM_STCFG2 0xB4001020 | ||
| 952 | #define MEM_STTIME2 0xB4001024 | ||
| 953 | #define MEM_STADDR2 0xB4001028 | ||
| 954 | |||
| 955 | #define MEM_STCFG3 0xB4001030 | ||
| 956 | #define MEM_STTIME3 0xB4001034 | ||
| 957 | #define MEM_STADDR3 0xB4001038 | ||
| 958 | |||
| 959 | #define MEM_STNDCTL 0xB4001100 | ||
| 960 | #define MEM_STSTAT 0xB4001104 | ||
| 961 | |||
| 962 | #define MEM_STNAND_CMD 0x0 | ||
| 963 | #define MEM_STNAND_ADDR 0x4 | ||
| 964 | #define MEM_STNAND_DATA 0x20 | ||
| 965 | |||
| 966 | |||
| 967 | /* Programmable Counters 0 and 1 */ | ||
| 968 | #define SYS_BASE 0xB1900000 | ||
| 969 | #define SYS_COUNTER_CNTRL (SYS_BASE + 0x14) | ||
| 970 | # define SYS_CNTRL_E1S (1 << 23) | ||
| 971 | # define SYS_CNTRL_T1S (1 << 20) | ||
| 972 | # define SYS_CNTRL_M21 (1 << 19) | ||
| 973 | # define SYS_CNTRL_M11 (1 << 18) | ||
| 974 | # define SYS_CNTRL_M01 (1 << 17) | ||
| 975 | # define SYS_CNTRL_C1S (1 << 16) | ||
| 976 | # define SYS_CNTRL_BP (1 << 14) | ||
| 977 | # define SYS_CNTRL_EN1 (1 << 13) | ||
| 978 | # define SYS_CNTRL_BT1 (1 << 12) | ||
| 979 | # define SYS_CNTRL_EN0 (1 << 11) | ||
| 980 | # define SYS_CNTRL_BT0 (1 << 10) | ||
| 981 | # define SYS_CNTRL_E0 (1 << 8) | ||
| 982 | # define SYS_CNTRL_E0S (1 << 7) | ||
| 983 | # define SYS_CNTRL_32S (1 << 5) | ||
| 984 | # define SYS_CNTRL_T0S (1 << 4) | ||
| 985 | # define SYS_CNTRL_M20 (1 << 3) | ||
| 986 | # define SYS_CNTRL_M10 (1 << 2) | ||
| 987 | # define SYS_CNTRL_M00 (1 << 1) | ||
| 988 | # define SYS_CNTRL_C0S (1 << 0) | ||
| 989 | |||
| 990 | /* Programmable Counter 0 Registers */ | ||
| 991 | #define SYS_TOYTRIM (SYS_BASE + 0) | ||
| 992 | #define SYS_TOYWRITE (SYS_BASE + 4) | ||
| 993 | #define SYS_TOYMATCH0 (SYS_BASE + 8) | ||
| 994 | #define SYS_TOYMATCH1 (SYS_BASE + 0xC) | ||
| 995 | #define SYS_TOYMATCH2 (SYS_BASE + 0x10) | ||
| 996 | #define SYS_TOYREAD (SYS_BASE + 0x40) | ||
| 997 | |||
| 998 | /* Programmable Counter 1 Registers */ | ||
| 999 | #define SYS_RTCTRIM (SYS_BASE + 0x44) | ||
| 1000 | #define SYS_RTCWRITE (SYS_BASE + 0x48) | ||
| 1001 | #define SYS_RTCMATCH0 (SYS_BASE + 0x4C) | ||
| 1002 | #define SYS_RTCMATCH1 (SYS_BASE + 0x50) | ||
| 1003 | #define SYS_RTCMATCH2 (SYS_BASE + 0x54) | ||
| 1004 | #define SYS_RTCREAD (SYS_BASE + 0x58) | ||
| 1005 | |||
| 1006 | /* I2S Controller */ | ||
| 1007 | #define I2S_DATA 0xB1000000 | ||
| 1008 | # define I2S_DATA_MASK 0xffffff | ||
| 1009 | #define I2S_CONFIG 0xB1000004 | ||
| 1010 | # define I2S_CONFIG_XU (1 << 25) | ||
| 1011 | # define I2S_CONFIG_XO (1 << 24) | ||
| 1012 | # define I2S_CONFIG_RU (1 << 23) | ||
| 1013 | # define I2S_CONFIG_RO (1 << 22) | ||
| 1014 | # define I2S_CONFIG_TR (1 << 21) | ||
| 1015 | # define I2S_CONFIG_TE (1 << 20) | ||
| 1016 | # define I2S_CONFIG_TF (1 << 19) | ||
| 1017 | # define I2S_CONFIG_RR (1 << 18) | ||
| 1018 | # define I2S_CONFIG_RE (1 << 17) | ||
| 1019 | # define I2S_CONFIG_RF (1 << 16) | ||
| 1020 | # define I2S_CONFIG_PD (1 << 11) | ||
| 1021 | # define I2S_CONFIG_LB (1 << 10) | ||
| 1022 | # define I2S_CONFIG_IC (1 << 9) | ||
| 1023 | # define I2S_CONFIG_FM_BIT 7 | ||
| 1024 | # define I2S_CONFIG_FM_MASK (0x3 << I2S_CONFIG_FM_BIT) | ||
| 1025 | # define I2S_CONFIG_FM_I2S (0x0 << I2S_CONFIG_FM_BIT) | ||
| 1026 | # define I2S_CONFIG_FM_LJ (0x1 << I2S_CONFIG_FM_BIT) | ||
| 1027 | # define I2S_CONFIG_FM_RJ (0x2 << I2S_CONFIG_FM_BIT) | ||
| 1028 | # define I2S_CONFIG_TN (1 << 6) | ||
| 1029 | # define I2S_CONFIG_RN (1 << 5) | ||
| 1030 | # define I2S_CONFIG_SZ_BIT 0 | ||
| 1031 | # define I2S_CONFIG_SZ_MASK (0x1F << I2S_CONFIG_SZ_BIT) | ||
| 1032 | |||
| 1033 | #define I2S_CONTROL 0xB1000008 | ||
| 1034 | # define I2S_CONTROL_D (1 << 1) | ||
| 1035 | # define I2S_CONTROL_CE (1 << 0) | ||
| 1036 | |||
| 1037 | |||
| 1038 | /* Ethernet Controllers */ | ||
| 1039 | |||
| 1040 | /* 4 byte offsets from AU1000_ETH_BASE */ | ||
| 1041 | #define MAC_CONTROL 0x0 | ||
| 1042 | # define MAC_RX_ENABLE (1 << 2) | ||
| 1043 | # define MAC_TX_ENABLE (1 << 3) | ||
| 1044 | # define MAC_DEF_CHECK (1 << 5) | ||
| 1045 | # define MAC_SET_BL(X) (((X) & 0x3) << 6) | ||
| 1046 | # define MAC_AUTO_PAD (1 << 8) | ||
| 1047 | # define MAC_DISABLE_RETRY (1 << 10) | ||
| 1048 | # define MAC_DISABLE_BCAST (1 << 11) | ||
| 1049 | # define MAC_LATE_COL (1 << 12) | ||
| 1050 | # define MAC_HASH_MODE (1 << 13) | ||
| 1051 | # define MAC_HASH_ONLY (1 << 15) | ||
| 1052 | # define MAC_PASS_ALL (1 << 16) | ||
| 1053 | # define MAC_INVERSE_FILTER (1 << 17) | ||
| 1054 | # define MAC_PROMISCUOUS (1 << 18) | ||
| 1055 | # define MAC_PASS_ALL_MULTI (1 << 19) | ||
| 1056 | # define MAC_FULL_DUPLEX (1 << 20) | ||
| 1057 | # define MAC_NORMAL_MODE 0 | ||
| 1058 | # define MAC_INT_LOOPBACK (1 << 21) | ||
| 1059 | # define MAC_EXT_LOOPBACK (1 << 22) | ||
| 1060 | # define MAC_DISABLE_RX_OWN (1 << 23) | ||
| 1061 | # define MAC_BIG_ENDIAN (1 << 30) | ||
| 1062 | # define MAC_RX_ALL (1 << 31) | ||
| 1063 | #define MAC_ADDRESS_HIGH 0x4 | ||
| 1064 | #define MAC_ADDRESS_LOW 0x8 | ||
| 1065 | #define MAC_MCAST_HIGH 0xC | ||
| 1066 | #define MAC_MCAST_LOW 0x10 | ||
| 1067 | #define MAC_MII_CNTRL 0x14 | ||
| 1068 | # define MAC_MII_BUSY (1 << 0) | ||
| 1069 | # define MAC_MII_READ 0 | ||
| 1070 | # define MAC_MII_WRITE (1 << 1) | ||
| 1071 | # define MAC_SET_MII_SELECT_REG(X) (((X) & 0x1f) << 6) | ||
| 1072 | # define MAC_SET_MII_SELECT_PHY(X) (((X) & 0x1f) << 11) | ||
| 1073 | #define MAC_MII_DATA 0x18 | ||
| 1074 | #define MAC_FLOW_CNTRL 0x1C | ||
| 1075 | # define MAC_FLOW_CNTRL_BUSY (1 << 0) | ||
| 1076 | # define MAC_FLOW_CNTRL_ENABLE (1 << 1) | ||
| 1077 | # define MAC_PASS_CONTROL (1 << 2) | ||
| 1078 | # define MAC_SET_PAUSE(X) (((X) & 0xffff) << 16) | ||
| 1079 | #define MAC_VLAN1_TAG 0x20 | ||
| 1080 | #define MAC_VLAN2_TAG 0x24 | ||
| 1081 | |||
| 1082 | /* Ethernet Controller Enable */ | ||
| 1083 | |||
| 1084 | # define MAC_EN_CLOCK_ENABLE (1 << 0) | ||
| 1085 | # define MAC_EN_RESET0 (1 << 1) | ||
| 1086 | # define MAC_EN_TOSS (0 << 2) | ||
| 1087 | # define MAC_EN_CACHEABLE (1 << 3) | ||
| 1088 | # define MAC_EN_RESET1 (1 << 4) | ||
| 1089 | # define MAC_EN_RESET2 (1 << 5) | ||
| 1090 | # define MAC_DMA_RESET (1 << 6) | ||
| 1091 | |||
| 1092 | /* Ethernet Controller DMA Channels */ | ||
| 1093 | |||
| 1094 | #define MAC0_TX_DMA_ADDR 0xB4004000 | ||
| 1095 | #define MAC1_TX_DMA_ADDR 0xB4004200 | ||
| 1096 | /* offsets from MAC_TX_RING_ADDR address */ | ||
| 1097 | #define MAC_TX_BUFF0_STATUS 0x0 | ||
| 1098 | # define TX_FRAME_ABORTED (1 << 0) | ||
| 1099 | # define TX_JAB_TIMEOUT (1 << 1) | ||
| 1100 | # define TX_NO_CARRIER (1 << 2) | ||
| 1101 | # define TX_LOSS_CARRIER (1 << 3) | ||
| 1102 | # define TX_EXC_DEF (1 << 4) | ||
| 1103 | # define TX_LATE_COLL_ABORT (1 << 5) | ||
| 1104 | # define TX_EXC_COLL (1 << 6) | ||
| 1105 | # define TX_UNDERRUN (1 << 7) | ||
| 1106 | # define TX_DEFERRED (1 << 8) | ||
| 1107 | # define TX_LATE_COLL (1 << 9) | ||
| 1108 | # define TX_COLL_CNT_MASK (0xF << 10) | ||
| 1109 | # define TX_PKT_RETRY (1 << 31) | ||
| 1110 | #define MAC_TX_BUFF0_ADDR 0x4 | ||
| 1111 | # define TX_DMA_ENABLE (1 << 0) | ||
| 1112 | # define TX_T_DONE (1 << 1) | ||
| 1113 | # define TX_GET_DMA_BUFFER(X) (((X) >> 2) & 0x3) | ||
| 1114 | #define MAC_TX_BUFF0_LEN 0x8 | ||
| 1115 | #define MAC_TX_BUFF1_STATUS 0x10 | ||
| 1116 | #define MAC_TX_BUFF1_ADDR 0x14 | ||
| 1117 | #define MAC_TX_BUFF1_LEN 0x18 | ||
| 1118 | #define MAC_TX_BUFF2_STATUS 0x20 | ||
| 1119 | #define MAC_TX_BUFF2_ADDR 0x24 | ||
| 1120 | #define MAC_TX_BUFF2_LEN 0x28 | ||
| 1121 | #define MAC_TX_BUFF3_STATUS 0x30 | ||
| 1122 | #define MAC_TX_BUFF3_ADDR 0x34 | ||
| 1123 | #define MAC_TX_BUFF3_LEN 0x38 | ||
| 1124 | |||
| 1125 | #define MAC0_RX_DMA_ADDR 0xB4004100 | ||
| 1126 | #define MAC1_RX_DMA_ADDR 0xB4004300 | ||
| 1127 | /* offsets from MAC_RX_RING_ADDR */ | ||
| 1128 | #define MAC_RX_BUFF0_STATUS 0x0 | ||
| 1129 | # define RX_FRAME_LEN_MASK 0x3fff | ||
| 1130 | # define RX_WDOG_TIMER (1 << 14) | ||
| 1131 | # define RX_RUNT (1 << 15) | ||
| 1132 | # define RX_OVERLEN (1 << 16) | ||
| 1133 | # define RX_COLL (1 << 17) | ||
| 1134 | # define RX_ETHER (1 << 18) | ||
| 1135 | # define RX_MII_ERROR (1 << 19) | ||
| 1136 | # define RX_DRIBBLING (1 << 20) | ||
| 1137 | # define RX_CRC_ERROR (1 << 21) | ||
| 1138 | # define RX_VLAN1 (1 << 22) | ||
| 1139 | # define RX_VLAN2 (1 << 23) | ||
| 1140 | # define RX_LEN_ERROR (1 << 24) | ||
| 1141 | # define RX_CNTRL_FRAME (1 << 25) | ||
| 1142 | # define RX_U_CNTRL_FRAME (1 << 26) | ||
| 1143 | # define RX_MCAST_FRAME (1 << 27) | ||
| 1144 | # define RX_BCAST_FRAME (1 << 28) | ||
| 1145 | # define RX_FILTER_FAIL (1 << 29) | ||
| 1146 | # define RX_PACKET_FILTER (1 << 30) | ||
| 1147 | # define RX_MISSED_FRAME (1 << 31) | ||
| 1148 | |||
| 1149 | # define RX_ERROR (RX_WDOG_TIMER | RX_RUNT | RX_OVERLEN | \ | ||
| 1150 | RX_COLL | RX_MII_ERROR | RX_CRC_ERROR | \ | ||
| 1151 | RX_LEN_ERROR | RX_U_CNTRL_FRAME | RX_MISSED_FRAME) | ||
| 1152 | #define MAC_RX_BUFF0_ADDR 0x4 | ||
| 1153 | # define RX_DMA_ENABLE (1 << 0) | ||
| 1154 | # define RX_T_DONE (1 << 1) | ||
| 1155 | # define RX_GET_DMA_BUFFER(X) (((X) >> 2) & 0x3) | ||
| 1156 | # define RX_SET_BUFF_ADDR(X) ((X) & 0xffffffc0) | ||
| 1157 | #define MAC_RX_BUFF1_STATUS 0x10 | ||
| 1158 | #define MAC_RX_BUFF1_ADDR 0x14 | ||
| 1159 | #define MAC_RX_BUFF2_STATUS 0x20 | ||
| 1160 | #define MAC_RX_BUFF2_ADDR 0x24 | ||
| 1161 | #define MAC_RX_BUFF3_STATUS 0x30 | ||
| 1162 | #define MAC_RX_BUFF3_ADDR 0x34 | ||
| 1163 | |||
| 1164 | /* SSIO */ | ||
| 1165 | #define SSI0_STATUS 0xB1600000 | ||
| 1166 | # define SSI_STATUS_BF (1 << 4) | ||
| 1167 | # define SSI_STATUS_OF (1 << 3) | ||
| 1168 | # define SSI_STATUS_UF (1 << 2) | ||
| 1169 | # define SSI_STATUS_D (1 << 1) | ||
| 1170 | # define SSI_STATUS_B (1 << 0) | ||
| 1171 | #define SSI0_INT 0xB1600004 | ||
| 1172 | # define SSI_INT_OI (1 << 3) | ||
| 1173 | # define SSI_INT_UI (1 << 2) | ||
| 1174 | # define SSI_INT_DI (1 << 1) | ||
| 1175 | #define SSI0_INT_ENABLE 0xB1600008 | ||
| 1176 | # define SSI_INTE_OIE (1 << 3) | ||
| 1177 | # define SSI_INTE_UIE (1 << 2) | ||
| 1178 | # define SSI_INTE_DIE (1 << 1) | ||
| 1179 | #define SSI0_CONFIG 0xB1600020 | ||
| 1180 | # define SSI_CONFIG_AO (1 << 24) | ||
| 1181 | # define SSI_CONFIG_DO (1 << 23) | ||
| 1182 | # define SSI_CONFIG_ALEN_BIT 20 | ||
| 1183 | # define SSI_CONFIG_ALEN_MASK (0x7 << 20) | ||
| 1184 | # define SSI_CONFIG_DLEN_BIT 16 | ||
| 1185 | # define SSI_CONFIG_DLEN_MASK (0x7 << 16) | ||
| 1186 | # define SSI_CONFIG_DD (1 << 11) | ||
| 1187 | # define SSI_CONFIG_AD (1 << 10) | ||
| 1188 | # define SSI_CONFIG_BM_BIT 8 | ||
| 1189 | # define SSI_CONFIG_BM_MASK (0x3 << 8) | ||
| 1190 | # define SSI_CONFIG_CE (1 << 7) | ||
| 1191 | # define SSI_CONFIG_DP (1 << 6) | ||
| 1192 | # define SSI_CONFIG_DL (1 << 5) | ||
| 1193 | # define SSI_CONFIG_EP (1 << 4) | ||
| 1194 | #define SSI0_ADATA 0xB1600024 | ||
| 1195 | # define SSI_AD_D (1 << 24) | ||
| 1196 | # define SSI_AD_ADDR_BIT 16 | ||
| 1197 | # define SSI_AD_ADDR_MASK (0xff << 16) | ||
| 1198 | # define SSI_AD_DATA_BIT 0 | ||
| 1199 | # define SSI_AD_DATA_MASK (0xfff << 0) | ||
| 1200 | #define SSI0_CLKDIV 0xB1600028 | ||
| 1201 | #define SSI0_CONTROL 0xB1600100 | ||
| 1202 | # define SSI_CONTROL_CD (1 << 1) | ||
| 1203 | # define SSI_CONTROL_E (1 << 0) | ||
| 1204 | |||
| 1205 | /* SSI1 */ | ||
| 1206 | #define SSI1_STATUS 0xB1680000 | ||
| 1207 | #define SSI1_INT 0xB1680004 | ||
| 1208 | #define SSI1_INT_ENABLE 0xB1680008 | ||
| 1209 | #define SSI1_CONFIG 0xB1680020 | ||
| 1210 | #define SSI1_ADATA 0xB1680024 | ||
| 1211 | #define SSI1_CLKDIV 0xB1680028 | ||
| 1212 | #define SSI1_ENABLE 0xB1680100 | ||
| 1213 | |||
| 1214 | /* | ||
| 1215 | * Register content definitions | ||
| 1216 | */ | ||
| 1217 | #define SSI_STATUS_BF (1 << 4) | ||
| 1218 | #define SSI_STATUS_OF (1 << 3) | ||
| 1219 | #define SSI_STATUS_UF (1 << 2) | ||
| 1220 | #define SSI_STATUS_D (1 << 1) | ||
| 1221 | #define SSI_STATUS_B (1 << 0) | ||
| 1222 | |||
| 1223 | /* SSI_INT */ | ||
| 1224 | #define SSI_INT_OI (1 << 3) | ||
| 1225 | #define SSI_INT_UI (1 << 2) | ||
| 1226 | #define SSI_INT_DI (1 << 1) | ||
| 1227 | |||
| 1228 | /* SSI_INTEN */ | ||
| 1229 | #define SSI_INTEN_OIE (1 << 3) | ||
| 1230 | #define SSI_INTEN_UIE (1 << 2) | ||
| 1231 | #define SSI_INTEN_DIE (1 << 1) | ||
| 1232 | |||
| 1233 | #define SSI_CONFIG_AO (1 << 24) | ||
| 1234 | #define SSI_CONFIG_DO (1 << 23) | ||
| 1235 | #define SSI_CONFIG_ALEN (7 << 20) | ||
| 1236 | #define SSI_CONFIG_DLEN (15 << 16) | ||
| 1237 | #define SSI_CONFIG_DD (1 << 11) | ||
| 1238 | #define SSI_CONFIG_AD (1 << 10) | ||
| 1239 | #define SSI_CONFIG_BM (3 << 8) | ||
| 1240 | #define SSI_CONFIG_CE (1 << 7) | ||
| 1241 | #define SSI_CONFIG_DP (1 << 6) | ||
| 1242 | #define SSI_CONFIG_DL (1 << 5) | ||
| 1243 | #define SSI_CONFIG_EP (1 << 4) | ||
| 1244 | #define SSI_CONFIG_ALEN_N(N) ((N-1) << 20) | ||
| 1245 | #define SSI_CONFIG_DLEN_N(N) ((N-1) << 16) | ||
| 1246 | #define SSI_CONFIG_BM_HI (0 << 8) | ||
| 1247 | #define SSI_CONFIG_BM_LO (1 << 8) | ||
| 1248 | #define SSI_CONFIG_BM_CY (2 << 8) | ||
| 1249 | |||
| 1250 | #define SSI_ADATA_D (1 << 24) | ||
| 1251 | #define SSI_ADATA_ADDR (0xFF << 16) | ||
| 1252 | #define SSI_ADATA_DATA 0x0FFF | ||
| 1253 | #define SSI_ADATA_ADDR_N(N) (N << 16) | ||
| 1254 | |||
| 1255 | #define SSI_ENABLE_CD (1 << 1) | ||
| 1256 | #define SSI_ENABLE_E (1 << 0) | ||
| 1257 | |||
| 1258 | |||
| 1259 | /* | ||
| 1260 | * The IrDA peripheral has an IRFIRSEL pin, but on the DB/PB boards it's not | ||
| 1261 | * used to select FIR/SIR mode on the transceiver but as a GPIO. Instead a | ||
| 1262 | * CPLD has to be told about the mode. | ||
| 1263 | */ | ||
| 1264 | #define AU1000_IRDA_PHY_MODE_OFF 0 | ||
| 1265 | #define AU1000_IRDA_PHY_MODE_SIR 1 | ||
| 1266 | #define AU1000_IRDA_PHY_MODE_FIR 2 | ||
| 1267 | |||
| 1268 | struct au1k_irda_platform_data { | ||
| 1269 | void(*set_phy_mode)(int mode); | ||
| 1270 | }; | ||
| 1271 | |||
| 1272 | |||
| 1273 | /* GPIO */ | ||
| 1274 | #define SYS_PINFUNC 0xB190002C | ||
| 1275 | # define SYS_PF_USB (1 << 15) /* 2nd USB device/host */ | ||
| 1276 | # define SYS_PF_U3 (1 << 14) /* GPIO23/U3TXD */ | ||
| 1277 | # define SYS_PF_U2 (1 << 13) /* GPIO22/U2TXD */ | ||
| 1278 | # define SYS_PF_U1 (1 << 12) /* GPIO21/U1TXD */ | ||
| 1279 | # define SYS_PF_SRC (1 << 11) /* GPIO6/SROMCKE */ | ||
| 1280 | # define SYS_PF_CK5 (1 << 10) /* GPIO3/CLK5 */ | ||
| 1281 | # define SYS_PF_CK4 (1 << 9) /* GPIO2/CLK4 */ | ||
| 1282 | # define SYS_PF_IRF (1 << 8) /* GPIO15/IRFIRSEL */ | ||
| 1283 | # define SYS_PF_UR3 (1 << 7) /* GPIO[14:9]/UART3 */ | ||
| 1284 | # define SYS_PF_I2D (1 << 6) /* GPIO8/I2SDI */ | ||
| 1285 | # define SYS_PF_I2S (1 << 5) /* I2S/GPIO[29:31] */ | ||
| 1286 | # define SYS_PF_NI2 (1 << 4) /* NI2/GPIO[24:28] */ | ||
| 1287 | # define SYS_PF_U0 (1 << 3) /* U0TXD/GPIO20 */ | ||
| 1288 | # define SYS_PF_RD (1 << 2) /* IRTXD/GPIO19 */ | ||
| 1289 | # define SYS_PF_A97 (1 << 1) /* AC97/SSL1 */ | ||
| 1290 | # define SYS_PF_S0 (1 << 0) /* SSI_0/GPIO[16:18] */ | ||
| 1291 | |||
| 1292 | /* Au1100 only */ | ||
| 1293 | # define SYS_PF_PC (1 << 18) /* PCMCIA/GPIO[207:204] */ | ||
| 1294 | # define SYS_PF_LCD (1 << 17) /* extern lcd/GPIO[203:200] */ | ||
| 1295 | # define SYS_PF_CS (1 << 16) /* EXTCLK0/32KHz to gpio2 */ | ||
| 1296 | # define SYS_PF_EX0 (1 << 9) /* GPIO2/clock */ | ||
| 1297 | |||
| 1298 | /* Au1550 only. Redefines lots of pins */ | ||
| 1299 | # define SYS_PF_PSC2_MASK (7 << 17) | ||
| 1300 | # define SYS_PF_PSC2_AC97 0 | ||
| 1301 | # define SYS_PF_PSC2_SPI 0 | ||
| 1302 | # define SYS_PF_PSC2_I2S (1 << 17) | ||
| 1303 | # define SYS_PF_PSC2_SMBUS (3 << 17) | ||
| 1304 | # define SYS_PF_PSC2_GPIO (7 << 17) | ||
| 1305 | # define SYS_PF_PSC3_MASK (7 << 20) | ||
| 1306 | # define SYS_PF_PSC3_AC97 0 | ||
| 1307 | # define SYS_PF_PSC3_SPI 0 | ||
| 1308 | # define SYS_PF_PSC3_I2S (1 << 20) | ||
| 1309 | # define SYS_PF_PSC3_SMBUS (3 << 20) | ||
| 1310 | # define SYS_PF_PSC3_GPIO (7 << 20) | ||
| 1311 | # define SYS_PF_PSC1_S1 (1 << 1) | ||
| 1312 | # define SYS_PF_MUST_BE_SET ((1 << 5) | (1 << 2)) | ||
| 1313 | |||
| 1314 | /* Au1200 only */ | ||
| 1315 | #define SYS_PINFUNC_DMA (1 << 31) | ||
| 1316 | #define SYS_PINFUNC_S0A (1 << 30) | ||
| 1317 | #define SYS_PINFUNC_S1A (1 << 29) | ||
| 1318 | #define SYS_PINFUNC_LP0 (1 << 28) | ||
| 1319 | #define SYS_PINFUNC_LP1 (1 << 27) | ||
| 1320 | #define SYS_PINFUNC_LD16 (1 << 26) | ||
| 1321 | #define SYS_PINFUNC_LD8 (1 << 25) | ||
| 1322 | #define SYS_PINFUNC_LD1 (1 << 24) | ||
| 1323 | #define SYS_PINFUNC_LD0 (1 << 23) | ||
| 1324 | #define SYS_PINFUNC_P1A (3 << 21) | ||
| 1325 | #define SYS_PINFUNC_P1B (1 << 20) | ||
| 1326 | #define SYS_PINFUNC_FS3 (1 << 19) | ||
| 1327 | #define SYS_PINFUNC_P0A (3 << 17) | ||
| 1328 | #define SYS_PINFUNC_CS (1 << 16) | ||
| 1329 | #define SYS_PINFUNC_CIM (1 << 15) | ||
| 1330 | #define SYS_PINFUNC_P1C (1 << 14) | ||
| 1331 | #define SYS_PINFUNC_U1T (1 << 12) | ||
| 1332 | #define SYS_PINFUNC_U1R (1 << 11) | ||
| 1333 | #define SYS_PINFUNC_EX1 (1 << 10) | ||
| 1334 | #define SYS_PINFUNC_EX0 (1 << 9) | ||
| 1335 | #define SYS_PINFUNC_U0R (1 << 8) | ||
| 1336 | #define SYS_PINFUNC_MC (1 << 7) | ||
| 1337 | #define SYS_PINFUNC_S0B (1 << 6) | ||
| 1338 | #define SYS_PINFUNC_S0C (1 << 5) | ||
| 1339 | #define SYS_PINFUNC_P0B (1 << 4) | ||
| 1340 | #define SYS_PINFUNC_U0T (1 << 3) | ||
| 1341 | #define SYS_PINFUNC_S1B (1 << 2) | ||
| 1342 | |||
| 1343 | /* Power Management */ | ||
| 1344 | #define SYS_SCRATCH0 0xB1900018 | ||
| 1345 | #define SYS_SCRATCH1 0xB190001C | ||
| 1346 | #define SYS_WAKEMSK 0xB1900034 | ||
| 1347 | #define SYS_ENDIAN 0xB1900038 | ||
| 1348 | #define SYS_POWERCTRL 0xB190003C | ||
| 1349 | #define SYS_WAKESRC 0xB190005C | ||
| 1350 | #define SYS_SLPPWR 0xB1900078 | ||
| 1351 | #define SYS_SLEEP 0xB190007C | ||
| 1352 | |||
| 1353 | #define SYS_WAKEMSK_D2 (1 << 9) | ||
| 1354 | #define SYS_WAKEMSK_M2 (1 << 8) | ||
| 1355 | #define SYS_WAKEMSK_GPIO(x) (1 << (x)) | ||
| 1356 | |||
| 1357 | /* Clock Controller */ | ||
| 1358 | #define SYS_FREQCTRL0 0xB1900020 | ||
| 1359 | # define SYS_FC_FRDIV2_BIT 22 | ||
| 1360 | # define SYS_FC_FRDIV2_MASK (0xff << SYS_FC_FRDIV2_BIT) | ||
| 1361 | # define SYS_FC_FE2 (1 << 21) | ||
| 1362 | # define SYS_FC_FS2 (1 << 20) | ||
| 1363 | # define SYS_FC_FRDIV1_BIT 12 | ||
| 1364 | # define SYS_FC_FRDIV1_MASK (0xff << SYS_FC_FRDIV1_BIT) | ||
| 1365 | # define SYS_FC_FE1 (1 << 11) | ||
| 1366 | # define SYS_FC_FS1 (1 << 10) | ||
| 1367 | # define SYS_FC_FRDIV0_BIT 2 | ||
| 1368 | # define SYS_FC_FRDIV0_MASK (0xff << SYS_FC_FRDIV0_BIT) | ||
| 1369 | # define SYS_FC_FE0 (1 << 1) | ||
| 1370 | # define SYS_FC_FS0 (1 << 0) | ||
| 1371 | #define SYS_FREQCTRL1 0xB1900024 | ||
| 1372 | # define SYS_FC_FRDIV5_BIT 22 | ||
| 1373 | # define SYS_FC_FRDIV5_MASK (0xff << SYS_FC_FRDIV5_BIT) | ||
| 1374 | # define SYS_FC_FE5 (1 << 21) | ||
| 1375 | # define SYS_FC_FS5 (1 << 20) | ||
| 1376 | # define SYS_FC_FRDIV4_BIT 12 | ||
| 1377 | # define SYS_FC_FRDIV4_MASK (0xff << SYS_FC_FRDIV4_BIT) | ||
| 1378 | # define SYS_FC_FE4 (1 << 11) | ||
| 1379 | # define SYS_FC_FS4 (1 << 10) | ||
| 1380 | # define SYS_FC_FRDIV3_BIT 2 | ||
| 1381 | # define SYS_FC_FRDIV3_MASK (0xff << SYS_FC_FRDIV3_BIT) | ||
| 1382 | # define SYS_FC_FE3 (1 << 1) | ||
| 1383 | # define SYS_FC_FS3 (1 << 0) | ||
| 1384 | #define SYS_CLKSRC 0xB1900028 | ||
| 1385 | # define SYS_CS_ME1_BIT 27 | ||
| 1386 | # define SYS_CS_ME1_MASK (0x7 << SYS_CS_ME1_BIT) | ||
| 1387 | # define SYS_CS_DE1 (1 << 26) | ||
| 1388 | # define SYS_CS_CE1 (1 << 25) | ||
| 1389 | # define SYS_CS_ME0_BIT 22 | ||
| 1390 | # define SYS_CS_ME0_MASK (0x7 << SYS_CS_ME0_BIT) | ||
| 1391 | # define SYS_CS_DE0 (1 << 21) | ||
| 1392 | # define SYS_CS_CE0 (1 << 20) | ||
| 1393 | # define SYS_CS_MI2_BIT 17 | ||
| 1394 | # define SYS_CS_MI2_MASK (0x7 << SYS_CS_MI2_BIT) | ||
| 1395 | # define SYS_CS_DI2 (1 << 16) | ||
| 1396 | # define SYS_CS_CI2 (1 << 15) | ||
| 1397 | |||
| 1398 | # define SYS_CS_ML_BIT 7 | ||
| 1399 | # define SYS_CS_ML_MASK (0x7 << SYS_CS_ML_BIT) | ||
| 1400 | # define SYS_CS_DL (1 << 6) | ||
| 1401 | # define SYS_CS_CL (1 << 5) | ||
| 1402 | |||
| 1403 | # define SYS_CS_MUH_BIT 12 | ||
| 1404 | # define SYS_CS_MUH_MASK (0x7 << SYS_CS_MUH_BIT) | ||
| 1405 | # define SYS_CS_DUH (1 << 11) | ||
| 1406 | # define SYS_CS_CUH (1 << 10) | ||
| 1407 | # define SYS_CS_MUD_BIT 7 | ||
| 1408 | # define SYS_CS_MUD_MASK (0x7 << SYS_CS_MUD_BIT) | ||
| 1409 | # define SYS_CS_DUD (1 << 6) | ||
| 1410 | # define SYS_CS_CUD (1 << 5) | ||
| 1411 | |||
| 1412 | # define SYS_CS_MIR_BIT 2 | ||
| 1413 | # define SYS_CS_MIR_MASK (0x7 << SYS_CS_MIR_BIT) | ||
| 1414 | # define SYS_CS_DIR (1 << 1) | ||
| 1415 | # define SYS_CS_CIR (1 << 0) | ||
| 1416 | |||
| 1417 | # define SYS_CS_MUX_AUX 0x1 | ||
| 1418 | # define SYS_CS_MUX_FQ0 0x2 | ||
| 1419 | # define SYS_CS_MUX_FQ1 0x3 | ||
| 1420 | # define SYS_CS_MUX_FQ2 0x4 | ||
| 1421 | # define SYS_CS_MUX_FQ3 0x5 | ||
| 1422 | # define SYS_CS_MUX_FQ4 0x6 | ||
| 1423 | # define SYS_CS_MUX_FQ5 0x7 | ||
| 1424 | #define SYS_CPUPLL 0xB1900060 | ||
| 1425 | #define SYS_AUXPLL 0xB1900064 | ||
| 1426 | |||
| 1427 | /* AC97 Controller */ | ||
| 1428 | #define AC97C_CONFIG 0xB0000000 | ||
| 1429 | # define AC97C_RECV_SLOTS_BIT 13 | ||
| 1430 | # define AC97C_RECV_SLOTS_MASK (0x3ff << AC97C_RECV_SLOTS_BIT) | ||
| 1431 | # define AC97C_XMIT_SLOTS_BIT 3 | ||
| 1432 | # define AC97C_XMIT_SLOTS_MASK (0x3ff << AC97C_XMIT_SLOTS_BIT) | ||
| 1433 | # define AC97C_SG (1 << 2) | ||
| 1434 | # define AC97C_SYNC (1 << 1) | ||
| 1435 | # define AC97C_RESET (1 << 0) | ||
| 1436 | #define AC97C_STATUS 0xB0000004 | ||
| 1437 | # define AC97C_XU (1 << 11) | ||
| 1438 | # define AC97C_XO (1 << 10) | ||
| 1439 | # define AC97C_RU (1 << 9) | ||
| 1440 | # define AC97C_RO (1 << 8) | ||
| 1441 | # define AC97C_READY (1 << 7) | ||
| 1442 | # define AC97C_CP (1 << 6) | ||
| 1443 | # define AC97C_TR (1 << 5) | ||
| 1444 | # define AC97C_TE (1 << 4) | ||
| 1445 | # define AC97C_TF (1 << 3) | ||
| 1446 | # define AC97C_RR (1 << 2) | ||
| 1447 | # define AC97C_RE (1 << 1) | ||
| 1448 | # define AC97C_RF (1 << 0) | ||
| 1449 | #define AC97C_DATA 0xB0000008 | ||
| 1450 | #define AC97C_CMD 0xB000000C | ||
| 1451 | # define AC97C_WD_BIT 16 | ||
| 1452 | # define AC97C_READ (1 << 7) | ||
| 1453 | # define AC97C_INDEX_MASK 0x7f | ||
| 1454 | #define AC97C_CNTRL 0xB0000010 | ||
| 1455 | # define AC97C_RS (1 << 1) | ||
| 1456 | # define AC97C_CE (1 << 0) | ||
| 1457 | |||
| 1458 | |||
| 1459 | /* The PCI chip selects are outside the 32bit space, and since we can't | ||
| 1460 | * just program the 36bit addresses into BARs, we have to take a chunk | ||
| 1461 | * out of the 32bit space and reserve it for PCI. When these addresses | ||
| 1462 | * are ioremap()ed, they'll be fixed up to the real 36bit address before | ||
| 1463 | * being passed to the real ioremap function. | ||
| 1464 | */ | ||
| 1465 | #define ALCHEMY_PCI_MEMWIN_START (AU1500_PCI_MEM_PHYS_ADDR >> 4) | ||
| 1466 | #define ALCHEMY_PCI_MEMWIN_END (ALCHEMY_PCI_MEMWIN_START + 0x0FFFFFFF) | ||
| 1467 | |||
| 1468 | /* for PCI IO it's simpler because we get to do the ioremap ourselves and then | ||
| 1469 | * adjust the device's resources. | ||
| 1470 | */ | ||
| 1471 | #define ALCHEMY_PCI_IOWIN_START 0x00001000 | ||
| 1472 | #define ALCHEMY_PCI_IOWIN_END 0x0000FFFF | ||
| 1473 | |||
| 1474 | #ifdef CONFIG_PCI | ||
| 1475 | |||
| 1476 | #define IOPORT_RESOURCE_START 0x00001000 /* skip legacy probing */ | ||
| 1477 | #define IOPORT_RESOURCE_END 0xffffffff | ||
| 1478 | #define IOMEM_RESOURCE_START 0x10000000 | ||
| 1479 | #define IOMEM_RESOURCE_END 0xfffffffffULL | ||
| 1480 | |||
| 1481 | #else | ||
| 1482 | |||
| 1483 | /* Don't allow any legacy ports probing */ | ||
| 1484 | #define IOPORT_RESOURCE_START 0x10000000 | ||
| 1485 | #define IOPORT_RESOURCE_END 0xffffffff | ||
| 1486 | #define IOMEM_RESOURCE_START 0x10000000 | ||
| 1487 | #define IOMEM_RESOURCE_END 0xfffffffffULL | ||
| 1488 | |||
| 1489 | #endif | ||
| 1490 | |||
| 1491 | /* PCI controller block register offsets */ | ||
| 1492 | #define PCI_REG_CMEM 0x0000 | ||
| 1493 | #define PCI_REG_CONFIG 0x0004 | ||
| 1494 | #define PCI_REG_B2BMASK_CCH 0x0008 | ||
| 1495 | #define PCI_REG_B2BBASE0_VID 0x000C | ||
| 1496 | #define PCI_REG_B2BBASE1_SID 0x0010 | ||
| 1497 | #define PCI_REG_MWMASK_DEV 0x0014 | ||
| 1498 | #define PCI_REG_MWBASE_REV_CCL 0x0018 | ||
| 1499 | #define PCI_REG_ERR_ADDR 0x001C | ||
| 1500 | #define PCI_REG_SPEC_INTACK 0x0020 | ||
| 1501 | #define PCI_REG_ID 0x0100 | ||
| 1502 | #define PCI_REG_STATCMD 0x0104 | ||
| 1503 | #define PCI_REG_CLASSREV 0x0108 | ||
| 1504 | #define PCI_REG_PARAM 0x010C | ||
| 1505 | #define PCI_REG_MBAR 0x0110 | ||
| 1506 | #define PCI_REG_TIMEOUT 0x0140 | ||
| 1507 | |||
| 1508 | /* PCI controller block register bits */ | ||
| 1509 | #define PCI_CMEM_E (1 << 28) /* enable cacheable memory */ | ||
| 1510 | #define PCI_CMEM_CMBASE(x) (((x) & 0x3fff) << 14) | ||
| 1511 | #define PCI_CMEM_CMMASK(x) ((x) & 0x3fff) | ||
| 1512 | #define PCI_CONFIG_ERD (1 << 27) /* pci error during R/W */ | ||
| 1513 | #define PCI_CONFIG_ET (1 << 26) /* error in target mode */ | ||
| 1514 | #define PCI_CONFIG_EF (1 << 25) /* fatal error */ | ||
| 1515 | #define PCI_CONFIG_EP (1 << 24) /* parity error */ | ||
| 1516 | #define PCI_CONFIG_EM (1 << 23) /* multiple errors */ | ||
| 1517 | #define PCI_CONFIG_BM (1 << 22) /* bad master error */ | ||
| 1518 | #define PCI_CONFIG_PD (1 << 20) /* PCI Disable */ | ||
| 1519 | #define PCI_CONFIG_BME (1 << 19) /* Byte Mask Enable for reads */ | ||
| 1520 | #define PCI_CONFIG_NC (1 << 16) /* mark mem access non-coherent */ | ||
| 1521 | #define PCI_CONFIG_IA (1 << 15) /* INTA# enabled (target mode) */ | ||
| 1522 | #define PCI_CONFIG_IP (1 << 13) /* int on PCI_PERR# */ | ||
| 1523 | #define PCI_CONFIG_IS (1 << 12) /* int on PCI_SERR# */ | ||
| 1524 | #define PCI_CONFIG_IMM (1 << 11) /* int on master abort */ | ||
| 1525 | #define PCI_CONFIG_ITM (1 << 10) /* int on target abort (as master) */ | ||
| 1526 | #define PCI_CONFIG_ITT (1 << 9) /* int on target abort (as target) */ | ||
| 1527 | #define PCI_CONFIG_IPB (1 << 8) /* int on PERR# in bus master acc */ | ||
| 1528 | #define PCI_CONFIG_SIC_NO (0 << 6) /* no byte mask changes */ | ||
| 1529 | #define PCI_CONFIG_SIC_BA_ADR (1 << 6) /* on byte/hw acc, invert adr bits */ | ||
| 1530 | #define PCI_CONFIG_SIC_HWA_DAT (2 << 6) /* on halfword acc, swap data */ | ||
| 1531 | #define PCI_CONFIG_SIC_ALL (3 << 6) /* swap data bytes on all accesses */ | ||
| 1532 | #define PCI_CONFIG_ST (1 << 5) /* swap data by target transactions */ | ||
| 1533 | #define PCI_CONFIG_SM (1 << 4) /* swap data from PCI ctl */ | ||
| 1534 | #define PCI_CONFIG_AEN (1 << 3) /* enable internal arbiter */ | ||
| 1535 | #define PCI_CONFIG_R2H (1 << 2) /* REQ2# to hi-prio arbiter */ | ||
| 1536 | #define PCI_CONFIG_R1H (1 << 1) /* REQ1# to hi-prio arbiter */ | ||
| 1537 | #define PCI_CONFIG_CH (1 << 0) /* PCI ctl to hi-prio arbiter */ | ||
| 1538 | #define PCI_B2BMASK_B2BMASK(x) (((x) & 0xffff) << 16) | ||
| 1539 | #define PCI_B2BMASK_CCH(x) ((x) & 0xffff) /* 16 upper bits of class code */ | ||
| 1540 | #define PCI_B2BBASE0_VID_B0(x) (((x) & 0xffff) << 16) | ||
| 1541 | #define PCI_B2BBASE0_VID_SV(x) ((x) & 0xffff) | ||
| 1542 | #define PCI_B2BBASE1_SID_B1(x) (((x) & 0xffff) << 16) | ||
| 1543 | #define PCI_B2BBASE1_SID_SI(x) ((x) & 0xffff) | ||
| 1544 | #define PCI_MWMASKDEV_MWMASK(x) (((x) & 0xffff) << 16) | ||
| 1545 | #define PCI_MWMASKDEV_DEVID(x) ((x) & 0xffff) | ||
| 1546 | #define PCI_MWBASEREVCCL_BASE(x) (((x) & 0xffff) << 16) | ||
| 1547 | #define PCI_MWBASEREVCCL_REV(x) (((x) & 0xff) << 8) | ||
| 1548 | #define PCI_MWBASEREVCCL_CCL(x) ((x) & 0xff) | ||
| 1549 | #define PCI_ID_DID(x) (((x) & 0xffff) << 16) | ||
| 1550 | #define PCI_ID_VID(x) ((x) & 0xffff) | ||
| 1551 | #define PCI_STATCMD_STATUS(x) (((x) & 0xffff) << 16) | ||
| 1552 | #define PCI_STATCMD_CMD(x) ((x) & 0xffff) | ||
| 1553 | #define PCI_CLASSREV_CLASS(x) (((x) & 0x00ffffff) << 8) | ||
| 1554 | #define PCI_CLASSREV_REV(x) ((x) & 0xff) | ||
| 1555 | #define PCI_PARAM_BIST(x) (((x) & 0xff) << 24) | ||
| 1556 | #define PCI_PARAM_HT(x) (((x) & 0xff) << 16) | ||
| 1557 | #define PCI_PARAM_LT(x) (((x) & 0xff) << 8) | ||
| 1558 | #define PCI_PARAM_CLS(x) ((x) & 0xff) | ||
| 1559 | #define PCI_TIMEOUT_RETRIES(x) (((x) & 0xff) << 8) /* max retries */ | ||
| 1560 | #define PCI_TIMEOUT_TO(x) ((x) & 0xff) /* target ready timeout */ | ||
| 1561 | |||
| 1562 | #endif | 1211 | #endif |
diff --git a/arch/mips/include/asm/mach-au1x00/au1000_dma.h b/arch/mips/include/asm/mach-au1x00/au1000_dma.h index 7cedca5a305c..0a0cd4270c6f 100644 --- a/arch/mips/include/asm/mach-au1x00/au1000_dma.h +++ b/arch/mips/include/asm/mach-au1x00/au1000_dma.h | |||
| @@ -106,7 +106,7 @@ enum { | |||
| 106 | struct dma_chan { | 106 | struct dma_chan { |
| 107 | int dev_id; /* this channel is allocated if >= 0, */ | 107 | int dev_id; /* this channel is allocated if >= 0, */ |
| 108 | /* free otherwise */ | 108 | /* free otherwise */ |
| 109 | unsigned int io; | 109 | void __iomem *io; |
| 110 | const char *dev_str; | 110 | const char *dev_str; |
| 111 | int irq; | 111 | int irq; |
| 112 | void *irq_dev; | 112 | void *irq_dev; |
| @@ -157,7 +157,7 @@ static inline void enable_dma_buffer0(unsigned int dmanr) | |||
| 157 | 157 | ||
| 158 | if (!chan) | 158 | if (!chan) |
| 159 | return; | 159 | return; |
| 160 | au_writel(DMA_BE0, chan->io + DMA_MODE_SET); | 160 | __raw_writel(DMA_BE0, chan->io + DMA_MODE_SET); |
| 161 | } | 161 | } |
| 162 | 162 | ||
| 163 | static inline void enable_dma_buffer1(unsigned int dmanr) | 163 | static inline void enable_dma_buffer1(unsigned int dmanr) |
| @@ -166,7 +166,7 @@ static inline void enable_dma_buffer1(unsigned int dmanr) | |||
| 166 | 166 | ||
| 167 | if (!chan) | 167 | if (!chan) |
| 168 | return; | 168 | return; |
| 169 | au_writel(DMA_BE1, chan->io + DMA_MODE_SET); | 169 | __raw_writel(DMA_BE1, chan->io + DMA_MODE_SET); |
| 170 | } | 170 | } |
| 171 | static inline void enable_dma_buffers(unsigned int dmanr) | 171 | static inline void enable_dma_buffers(unsigned int dmanr) |
| 172 | { | 172 | { |
| @@ -174,7 +174,7 @@ static inline void enable_dma_buffers(unsigned int dmanr) | |||
| 174 | 174 | ||
| 175 | if (!chan) | 175 | if (!chan) |
| 176 | return; | 176 | return; |
| 177 | au_writel(DMA_BE0 | DMA_BE1, chan->io + DMA_MODE_SET); | 177 | __raw_writel(DMA_BE0 | DMA_BE1, chan->io + DMA_MODE_SET); |
| 178 | } | 178 | } |
| 179 | 179 | ||
| 180 | static inline void start_dma(unsigned int dmanr) | 180 | static inline void start_dma(unsigned int dmanr) |
| @@ -183,7 +183,7 @@ static inline void start_dma(unsigned int dmanr) | |||
| 183 | 183 | ||
| 184 | if (!chan) | 184 | if (!chan) |
| 185 | return; | 185 | return; |
| 186 | au_writel(DMA_GO, chan->io + DMA_MODE_SET); | 186 | __raw_writel(DMA_GO, chan->io + DMA_MODE_SET); |
| 187 | } | 187 | } |
| 188 | 188 | ||
| 189 | #define DMA_HALT_POLL 0x5000 | 189 | #define DMA_HALT_POLL 0x5000 |
| @@ -195,11 +195,11 @@ static inline void halt_dma(unsigned int dmanr) | |||
| 195 | 195 | ||
| 196 | if (!chan) | 196 | if (!chan) |
| 197 | return; | 197 | return; |
| 198 | au_writel(DMA_GO, chan->io + DMA_MODE_CLEAR); | 198 | __raw_writel(DMA_GO, chan->io + DMA_MODE_CLEAR); |
| 199 | 199 | ||
| 200 | /* Poll the halt bit */ | 200 | /* Poll the halt bit */ |
| 201 | for (i = 0; i < DMA_HALT_POLL; i++) | 201 | for (i = 0; i < DMA_HALT_POLL; i++) |
| 202 | if (au_readl(chan->io + DMA_MODE_READ) & DMA_HALT) | 202 | if (__raw_readl(chan->io + DMA_MODE_READ) & DMA_HALT) |
| 203 | break; | 203 | break; |
| 204 | if (i == DMA_HALT_POLL) | 204 | if (i == DMA_HALT_POLL) |
| 205 | printk(KERN_INFO "halt_dma: HALT poll expired!\n"); | 205 | printk(KERN_INFO "halt_dma: HALT poll expired!\n"); |
| @@ -215,7 +215,7 @@ static inline void disable_dma(unsigned int dmanr) | |||
| 215 | halt_dma(dmanr); | 215 | halt_dma(dmanr); |
| 216 | 216 | ||
| 217 | /* Now we can disable the buffers */ | 217 | /* Now we can disable the buffers */ |
| 218 | au_writel(~DMA_GO, chan->io + DMA_MODE_CLEAR); | 218 | __raw_writel(~DMA_GO, chan->io + DMA_MODE_CLEAR); |
| 219 | } | 219 | } |
| 220 | 220 | ||
| 221 | static inline int dma_halted(unsigned int dmanr) | 221 | static inline int dma_halted(unsigned int dmanr) |
| @@ -224,7 +224,7 @@ static inline int dma_halted(unsigned int dmanr) | |||
| 224 | 224 | ||
| 225 | if (!chan) | 225 | if (!chan) |
| 226 | return 1; | 226 | return 1; |
| 227 | return (au_readl(chan->io + DMA_MODE_READ) & DMA_HALT) ? 1 : 0; | 227 | return (__raw_readl(chan->io + DMA_MODE_READ) & DMA_HALT) ? 1 : 0; |
| 228 | } | 228 | } |
| 229 | 229 | ||
| 230 | /* Initialize a DMA channel. */ | 230 | /* Initialize a DMA channel. */ |
| @@ -239,14 +239,14 @@ static inline void init_dma(unsigned int dmanr) | |||
| 239 | disable_dma(dmanr); | 239 | disable_dma(dmanr); |
| 240 | 240 | ||
| 241 | /* Set device FIFO address */ | 241 | /* Set device FIFO address */ |
| 242 | au_writel(CPHYSADDR(chan->fifo_addr), chan->io + DMA_PERIPHERAL_ADDR); | 242 | __raw_writel(CPHYSADDR(chan->fifo_addr), chan->io + DMA_PERIPHERAL_ADDR); |
| 243 | 243 | ||
| 244 | mode = chan->mode | (chan->dev_id << DMA_DID_BIT); | 244 | mode = chan->mode | (chan->dev_id << DMA_DID_BIT); |
| 245 | if (chan->irq) | 245 | if (chan->irq) |
| 246 | mode |= DMA_IE; | 246 | mode |= DMA_IE; |
| 247 | 247 | ||
| 248 | au_writel(~mode, chan->io + DMA_MODE_CLEAR); | 248 | __raw_writel(~mode, chan->io + DMA_MODE_CLEAR); |
| 249 | au_writel(mode, chan->io + DMA_MODE_SET); | 249 | __raw_writel(mode, chan->io + DMA_MODE_SET); |
| 250 | } | 250 | } |
| 251 | 251 | ||
| 252 | /* | 252 | /* |
| @@ -283,7 +283,7 @@ static inline int get_dma_active_buffer(unsigned int dmanr) | |||
| 283 | 283 | ||
| 284 | if (!chan) | 284 | if (!chan) |
| 285 | return -1; | 285 | return -1; |
| 286 | return (au_readl(chan->io + DMA_MODE_READ) & DMA_AB) ? 1 : 0; | 286 | return (__raw_readl(chan->io + DMA_MODE_READ) & DMA_AB) ? 1 : 0; |
| 287 | } | 287 | } |
| 288 | 288 | ||
| 289 | /* | 289 | /* |
| @@ -304,7 +304,7 @@ static inline void set_dma_fifo_addr(unsigned int dmanr, unsigned int a) | |||
| 304 | if (chan->dev_id != DMA_ID_GP04 && chan->dev_id != DMA_ID_GP05) | 304 | if (chan->dev_id != DMA_ID_GP04 && chan->dev_id != DMA_ID_GP05) |
| 305 | return; | 305 | return; |
| 306 | 306 | ||
| 307 | au_writel(CPHYSADDR(a), chan->io + DMA_PERIPHERAL_ADDR); | 307 | __raw_writel(CPHYSADDR(a), chan->io + DMA_PERIPHERAL_ADDR); |
| 308 | } | 308 | } |
| 309 | 309 | ||
| 310 | /* | 310 | /* |
| @@ -316,7 +316,7 @@ static inline void clear_dma_done0(unsigned int dmanr) | |||
| 316 | 316 | ||
| 317 | if (!chan) | 317 | if (!chan) |
| 318 | return; | 318 | return; |
| 319 | au_writel(DMA_D0, chan->io + DMA_MODE_CLEAR); | 319 | __raw_writel(DMA_D0, chan->io + DMA_MODE_CLEAR); |
| 320 | } | 320 | } |
| 321 | 321 | ||
| 322 | static inline void clear_dma_done1(unsigned int dmanr) | 322 | static inline void clear_dma_done1(unsigned int dmanr) |
| @@ -325,7 +325,7 @@ static inline void clear_dma_done1(unsigned int dmanr) | |||
| 325 | 325 | ||
| 326 | if (!chan) | 326 | if (!chan) |
| 327 | return; | 327 | return; |
| 328 | au_writel(DMA_D1, chan->io + DMA_MODE_CLEAR); | 328 | __raw_writel(DMA_D1, chan->io + DMA_MODE_CLEAR); |
| 329 | } | 329 | } |
| 330 | 330 | ||
| 331 | /* | 331 | /* |
| @@ -344,7 +344,7 @@ static inline void set_dma_addr0(unsigned int dmanr, unsigned int a) | |||
| 344 | 344 | ||
| 345 | if (!chan) | 345 | if (!chan) |
| 346 | return; | 346 | return; |
| 347 | au_writel(a, chan->io + DMA_BUFFER0_START); | 347 | __raw_writel(a, chan->io + DMA_BUFFER0_START); |
| 348 | } | 348 | } |
| 349 | 349 | ||
| 350 | /* | 350 | /* |
| @@ -356,7 +356,7 @@ static inline void set_dma_addr1(unsigned int dmanr, unsigned int a) | |||
| 356 | 356 | ||
| 357 | if (!chan) | 357 | if (!chan) |
| 358 | return; | 358 | return; |
| 359 | au_writel(a, chan->io + DMA_BUFFER1_START); | 359 | __raw_writel(a, chan->io + DMA_BUFFER1_START); |
| 360 | } | 360 | } |
| 361 | 361 | ||
| 362 | 362 | ||
| @@ -370,7 +370,7 @@ static inline void set_dma_count0(unsigned int dmanr, unsigned int count) | |||
| 370 | if (!chan) | 370 | if (!chan) |
| 371 | return; | 371 | return; |
| 372 | count &= DMA_COUNT_MASK; | 372 | count &= DMA_COUNT_MASK; |
| 373 | au_writel(count, chan->io + DMA_BUFFER0_COUNT); | 373 | __raw_writel(count, chan->io + DMA_BUFFER0_COUNT); |
| 374 | } | 374 | } |
| 375 | 375 | ||
| 376 | /* | 376 | /* |
| @@ -383,7 +383,7 @@ static inline void set_dma_count1(unsigned int dmanr, unsigned int count) | |||
| 383 | if (!chan) | 383 | if (!chan) |
| 384 | return; | 384 | return; |
| 385 | count &= DMA_COUNT_MASK; | 385 | count &= DMA_COUNT_MASK; |
| 386 | au_writel(count, chan->io + DMA_BUFFER1_COUNT); | 386 | __raw_writel(count, chan->io + DMA_BUFFER1_COUNT); |
| 387 | } | 387 | } |
| 388 | 388 | ||
| 389 | /* | 389 | /* |
| @@ -396,8 +396,8 @@ static inline void set_dma_count(unsigned int dmanr, unsigned int count) | |||
| 396 | if (!chan) | 396 | if (!chan) |
| 397 | return; | 397 | return; |
| 398 | count &= DMA_COUNT_MASK; | 398 | count &= DMA_COUNT_MASK; |
| 399 | au_writel(count, chan->io + DMA_BUFFER0_COUNT); | 399 | __raw_writel(count, chan->io + DMA_BUFFER0_COUNT); |
| 400 | au_writel(count, chan->io + DMA_BUFFER1_COUNT); | 400 | __raw_writel(count, chan->io + DMA_BUFFER1_COUNT); |
| 401 | } | 401 | } |
| 402 | 402 | ||
| 403 | /* | 403 | /* |
| @@ -410,7 +410,7 @@ static inline unsigned int get_dma_buffer_done(unsigned int dmanr) | |||
| 410 | 410 | ||
| 411 | if (!chan) | 411 | if (!chan) |
| 412 | return 0; | 412 | return 0; |
| 413 | return au_readl(chan->io + DMA_MODE_READ) & (DMA_D0 | DMA_D1); | 413 | return __raw_readl(chan->io + DMA_MODE_READ) & (DMA_D0 | DMA_D1); |
| 414 | } | 414 | } |
| 415 | 415 | ||
| 416 | 416 | ||
| @@ -437,10 +437,10 @@ static inline int get_dma_residue(unsigned int dmanr) | |||
| 437 | if (!chan) | 437 | if (!chan) |
| 438 | return 0; | 438 | return 0; |
| 439 | 439 | ||
| 440 | curBufCntReg = (au_readl(chan->io + DMA_MODE_READ) & DMA_AB) ? | 440 | curBufCntReg = (__raw_readl(chan->io + DMA_MODE_READ) & DMA_AB) ? |
| 441 | DMA_BUFFER1_COUNT : DMA_BUFFER0_COUNT; | 441 | DMA_BUFFER1_COUNT : DMA_BUFFER0_COUNT; |
| 442 | 442 | ||
| 443 | count = au_readl(chan->io + curBufCntReg) & DMA_COUNT_MASK; | 443 | count = __raw_readl(chan->io + curBufCntReg) & DMA_COUNT_MASK; |
| 444 | 444 | ||
| 445 | if ((chan->mode & DMA_DW_MASK) == DMA_DW16) | 445 | if ((chan->mode & DMA_DW_MASK) == DMA_DW16) |
| 446 | count <<= 1; | 446 | count <<= 1; |
diff --git a/arch/mips/include/asm/mach-au1x00/gpio-au1000.h b/arch/mips/include/asm/mach-au1x00/gpio-au1000.h index 796afd051c35..9785e4ebb450 100644 --- a/arch/mips/include/asm/mach-au1x00/gpio-au1000.h +++ b/arch/mips/include/asm/mach-au1x00/gpio-au1000.h | |||
| @@ -25,20 +25,20 @@ | |||
| 25 | #define MAKE_IRQ(intc, off) (AU1000_INTC##intc##_INT_BASE + (off)) | 25 | #define MAKE_IRQ(intc, off) (AU1000_INTC##intc##_INT_BASE + (off)) |
| 26 | 26 | ||
| 27 | /* GPIO1 registers within SYS_ area */ | 27 | /* GPIO1 registers within SYS_ area */ |
| 28 | #define SYS_TRIOUTRD 0x100 | 28 | #define AU1000_SYS_TRIOUTRD 0x100 |
| 29 | #define SYS_TRIOUTCLR 0x100 | 29 | #define AU1000_SYS_TRIOUTCLR 0x100 |
| 30 | #define SYS_OUTPUTRD 0x108 | 30 | #define AU1000_SYS_OUTPUTRD 0x108 |
| 31 | #define SYS_OUTPUTSET 0x108 | 31 | #define AU1000_SYS_OUTPUTSET 0x108 |
| 32 | #define SYS_OUTPUTCLR 0x10C | 32 | #define AU1000_SYS_OUTPUTCLR 0x10C |
| 33 | #define SYS_PINSTATERD 0x110 | 33 | #define AU1000_SYS_PINSTATERD 0x110 |
| 34 | #define SYS_PININPUTEN 0x110 | 34 | #define AU1000_SYS_PININPUTEN 0x110 |
| 35 | 35 | ||
| 36 | /* register offsets within GPIO2 block */ | 36 | /* register offsets within GPIO2 block */ |
| 37 | #define GPIO2_DIR 0x00 | 37 | #define AU1000_GPIO2_DIR 0x00 |
| 38 | #define GPIO2_OUTPUT 0x08 | 38 | #define AU1000_GPIO2_OUTPUT 0x08 |
| 39 | #define GPIO2_PINSTATE 0x0C | 39 | #define AU1000_GPIO2_PINSTATE 0x0C |
| 40 | #define GPIO2_INTENABLE 0x10 | 40 | #define AU1000_GPIO2_INTENABLE 0x10 |
| 41 | #define GPIO2_ENABLE 0x14 | 41 | #define AU1000_GPIO2_ENABLE 0x14 |
| 42 | 42 | ||
| 43 | struct gpio; | 43 | struct gpio; |
| 44 | 44 | ||
| @@ -217,26 +217,21 @@ static inline int au1200_irq_to_gpio(int irq) | |||
| 217 | */ | 217 | */ |
| 218 | static inline void alchemy_gpio1_set_value(int gpio, int v) | 218 | static inline void alchemy_gpio1_set_value(int gpio, int v) |
| 219 | { | 219 | { |
| 220 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1000_SYS_PHYS_ADDR); | ||
| 221 | unsigned long mask = 1 << (gpio - ALCHEMY_GPIO1_BASE); | 220 | unsigned long mask = 1 << (gpio - ALCHEMY_GPIO1_BASE); |
| 222 | unsigned long r = v ? SYS_OUTPUTSET : SYS_OUTPUTCLR; | 221 | unsigned long r = v ? AU1000_SYS_OUTPUTSET : AU1000_SYS_OUTPUTCLR; |
| 223 | __raw_writel(mask, base + r); | 222 | alchemy_wrsys(mask, r); |
| 224 | wmb(); | ||
| 225 | } | 223 | } |
| 226 | 224 | ||
| 227 | static inline int alchemy_gpio1_get_value(int gpio) | 225 | static inline int alchemy_gpio1_get_value(int gpio) |
| 228 | { | 226 | { |
| 229 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1000_SYS_PHYS_ADDR); | ||
| 230 | unsigned long mask = 1 << (gpio - ALCHEMY_GPIO1_BASE); | 227 | unsigned long mask = 1 << (gpio - ALCHEMY_GPIO1_BASE); |
| 231 | return __raw_readl(base + SYS_PINSTATERD) & mask; | 228 | return alchemy_rdsys(AU1000_SYS_PINSTATERD) & mask; |
| 232 | } | 229 | } |
| 233 | 230 | ||
| 234 | static inline int alchemy_gpio1_direction_input(int gpio) | 231 | static inline int alchemy_gpio1_direction_input(int gpio) |
| 235 | { | 232 | { |
| 236 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1000_SYS_PHYS_ADDR); | ||
| 237 | unsigned long mask = 1 << (gpio - ALCHEMY_GPIO1_BASE); | 233 | unsigned long mask = 1 << (gpio - ALCHEMY_GPIO1_BASE); |
| 238 | __raw_writel(mask, base + SYS_TRIOUTCLR); | 234 | alchemy_wrsys(mask, AU1000_SYS_TRIOUTCLR); |
| 239 | wmb(); | ||
| 240 | return 0; | 235 | return 0; |
| 241 | } | 236 | } |
| 242 | 237 | ||
| @@ -279,13 +274,13 @@ static inline void __alchemy_gpio2_mod_dir(int gpio, int to_out) | |||
| 279 | { | 274 | { |
| 280 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); | 275 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); |
| 281 | unsigned long mask = 1 << (gpio - ALCHEMY_GPIO2_BASE); | 276 | unsigned long mask = 1 << (gpio - ALCHEMY_GPIO2_BASE); |
| 282 | unsigned long d = __raw_readl(base + GPIO2_DIR); | 277 | unsigned long d = __raw_readl(base + AU1000_GPIO2_DIR); |
| 283 | 278 | ||
| 284 | if (to_out) | 279 | if (to_out) |
| 285 | d |= mask; | 280 | d |= mask; |
| 286 | else | 281 | else |
| 287 | d &= ~mask; | 282 | d &= ~mask; |
| 288 | __raw_writel(d, base + GPIO2_DIR); | 283 | __raw_writel(d, base + AU1000_GPIO2_DIR); |
| 289 | wmb(); | 284 | wmb(); |
| 290 | } | 285 | } |
| 291 | 286 | ||
| @@ -294,14 +289,15 @@ static inline void alchemy_gpio2_set_value(int gpio, int v) | |||
| 294 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); | 289 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); |
| 295 | unsigned long mask; | 290 | unsigned long mask; |
| 296 | mask = ((v) ? 0x00010001 : 0x00010000) << (gpio - ALCHEMY_GPIO2_BASE); | 291 | mask = ((v) ? 0x00010001 : 0x00010000) << (gpio - ALCHEMY_GPIO2_BASE); |
| 297 | __raw_writel(mask, base + GPIO2_OUTPUT); | 292 | __raw_writel(mask, base + AU1000_GPIO2_OUTPUT); |
| 298 | wmb(); | 293 | wmb(); |
| 299 | } | 294 | } |
| 300 | 295 | ||
| 301 | static inline int alchemy_gpio2_get_value(int gpio) | 296 | static inline int alchemy_gpio2_get_value(int gpio) |
| 302 | { | 297 | { |
| 303 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); | 298 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); |
| 304 | return __raw_readl(base + GPIO2_PINSTATE) & (1 << (gpio - ALCHEMY_GPIO2_BASE)); | 299 | return __raw_readl(base + AU1000_GPIO2_PINSTATE) & |
| 300 | (1 << (gpio - ALCHEMY_GPIO2_BASE)); | ||
| 305 | } | 301 | } |
| 306 | 302 | ||
| 307 | static inline int alchemy_gpio2_direction_input(int gpio) | 303 | static inline int alchemy_gpio2_direction_input(int gpio) |
| @@ -352,12 +348,12 @@ static inline int alchemy_gpio2_to_irq(int gpio) | |||
| 352 | static inline void __alchemy_gpio2_mod_int(int gpio2, int en) | 348 | static inline void __alchemy_gpio2_mod_int(int gpio2, int en) |
| 353 | { | 349 | { |
| 354 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); | 350 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); |
| 355 | unsigned long r = __raw_readl(base + GPIO2_INTENABLE); | 351 | unsigned long r = __raw_readl(base + AU1000_GPIO2_INTENABLE); |
| 356 | if (en) | 352 | if (en) |
| 357 | r |= 1 << gpio2; | 353 | r |= 1 << gpio2; |
| 358 | else | 354 | else |
| 359 | r &= ~(1 << gpio2); | 355 | r &= ~(1 << gpio2); |
| 360 | __raw_writel(r, base + GPIO2_INTENABLE); | 356 | __raw_writel(r, base + AU1000_GPIO2_INTENABLE); |
| 361 | wmb(); | 357 | wmb(); |
| 362 | } | 358 | } |
| 363 | 359 | ||
| @@ -434,9 +430,9 @@ static inline void alchemy_gpio2_disable_int(int gpio2) | |||
| 434 | static inline void alchemy_gpio2_enable(void) | 430 | static inline void alchemy_gpio2_enable(void) |
| 435 | { | 431 | { |
| 436 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); | 432 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); |
| 437 | __raw_writel(3, base + GPIO2_ENABLE); /* reset, clock enabled */ | 433 | __raw_writel(3, base + AU1000_GPIO2_ENABLE); /* reset, clock enabled */ |
| 438 | wmb(); | 434 | wmb(); |
| 439 | __raw_writel(1, base + GPIO2_ENABLE); /* clock enabled */ | 435 | __raw_writel(1, base + AU1000_GPIO2_ENABLE); /* clock enabled */ |
| 440 | wmb(); | 436 | wmb(); |
| 441 | } | 437 | } |
| 442 | 438 | ||
| @@ -448,7 +444,7 @@ static inline void alchemy_gpio2_enable(void) | |||
| 448 | static inline void alchemy_gpio2_disable(void) | 444 | static inline void alchemy_gpio2_disable(void) |
| 449 | { | 445 | { |
| 450 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); | 446 | void __iomem *base = (void __iomem *)KSEG1ADDR(AU1500_GPIO2_PHYS_ADDR); |
| 451 | __raw_writel(2, base + GPIO2_ENABLE); /* reset, clock disabled */ | 447 | __raw_writel(2, base + AU1000_GPIO2_ENABLE); /* reset, clock disabled */ |
| 452 | wmb(); | 448 | wmb(); |
| 453 | } | 449 | } |
| 454 | 450 | ||
diff --git a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h index bba7399a49a3..1f5643b89a91 100644 --- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h +++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | |||
| @@ -18,6 +18,7 @@ enum bcm47xx_board { | |||
| 18 | BCM47XX_BOARD_ASUS_WL300G, | 18 | BCM47XX_BOARD_ASUS_WL300G, |
| 19 | BCM47XX_BOARD_ASUS_WL320GE, | 19 | BCM47XX_BOARD_ASUS_WL320GE, |
| 20 | BCM47XX_BOARD_ASUS_WL330GE, | 20 | BCM47XX_BOARD_ASUS_WL330GE, |
| 21 | BCM47XX_BOARD_ASUS_WL500G, | ||
| 21 | BCM47XX_BOARD_ASUS_WL500GD, | 22 | BCM47XX_BOARD_ASUS_WL500GD, |
| 22 | BCM47XX_BOARD_ASUS_WL500GPV1, | 23 | BCM47XX_BOARD_ASUS_WL500GPV1, |
| 23 | BCM47XX_BOARD_ASUS_WL500GPV2, | 24 | BCM47XX_BOARD_ASUS_WL500GPV2, |
| @@ -70,11 +71,15 @@ enum bcm47xx_board { | |||
| 70 | BCM47XX_BOARD_LINKSYS_WRT310NV1, | 71 | BCM47XX_BOARD_LINKSYS_WRT310NV1, |
| 71 | BCM47XX_BOARD_LINKSYS_WRT310NV2, | 72 | BCM47XX_BOARD_LINKSYS_WRT310NV2, |
| 72 | BCM47XX_BOARD_LINKSYS_WRT54G3GV2, | 73 | BCM47XX_BOARD_LINKSYS_WRT54G3GV2, |
| 73 | BCM47XX_BOARD_LINKSYS_WRT54G, | 74 | BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0101, |
| 75 | BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0467, | ||
| 76 | BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0708, | ||
| 74 | BCM47XX_BOARD_LINKSYS_WRT610NV1, | 77 | BCM47XX_BOARD_LINKSYS_WRT610NV1, |
| 75 | BCM47XX_BOARD_LINKSYS_WRT610NV2, | 78 | BCM47XX_BOARD_LINKSYS_WRT610NV2, |
| 76 | BCM47XX_BOARD_LINKSYS_WRTSL54GS, | 79 | BCM47XX_BOARD_LINKSYS_WRTSL54GS, |
| 77 | 80 | ||
| 81 | BCM47XX_BOARD_MICROSOFT_MN700, | ||
| 82 | |||
| 78 | BCM47XX_BOARD_MOTOROLA_WE800G, | 83 | BCM47XX_BOARD_MOTOROLA_WE800G, |
| 79 | BCM47XX_BOARD_MOTOROLA_WR850GP, | 84 | BCM47XX_BOARD_MOTOROLA_WR850GP, |
| 80 | BCM47XX_BOARD_MOTOROLA_WR850GV2V3, | 85 | BCM47XX_BOARD_MOTOROLA_WR850GV2V3, |
diff --git a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h index 3112f08f0c72..56bb19219d48 100644 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h | |||
| @@ -19,118 +19,68 @@ | |||
| 19 | #define BCM6368_CPU_ID 0x6368 | 19 | #define BCM6368_CPU_ID 0x6368 |
| 20 | 20 | ||
| 21 | void __init bcm63xx_cpu_init(void); | 21 | void __init bcm63xx_cpu_init(void); |
| 22 | u16 __bcm63xx_get_cpu_id(void); | ||
| 23 | u8 bcm63xx_get_cpu_rev(void); | 22 | u8 bcm63xx_get_cpu_rev(void); |
| 24 | unsigned int bcm63xx_get_cpu_freq(void); | 23 | unsigned int bcm63xx_get_cpu_freq(void); |
| 25 | 24 | ||
| 25 | static inline u16 __pure __bcm63xx_get_cpu_id(const u16 cpu_id) | ||
| 26 | { | ||
| 27 | switch (cpu_id) { | ||
| 26 | #ifdef CONFIG_BCM63XX_CPU_3368 | 28 | #ifdef CONFIG_BCM63XX_CPU_3368 |
| 27 | # ifdef bcm63xx_get_cpu_id | 29 | case BCM3368_CPU_ID: |
| 28 | # undef bcm63xx_get_cpu_id | ||
| 29 | # define bcm63xx_get_cpu_id() __bcm63xx_get_cpu_id() | ||
| 30 | # define BCMCPU_RUNTIME_DETECT | ||
| 31 | # else | ||
| 32 | # define bcm63xx_get_cpu_id() BCM3368_CPU_ID | ||
| 33 | # endif | ||
| 34 | # define BCMCPU_IS_3368() (bcm63xx_get_cpu_id() == BCM3368_CPU_ID) | ||
| 35 | #else | ||
| 36 | # define BCMCPU_IS_3368() (0) | ||
| 37 | #endif | 30 | #endif |
| 38 | 31 | ||
| 39 | #ifdef CONFIG_BCM63XX_CPU_6328 | 32 | #ifdef CONFIG_BCM63XX_CPU_6328 |
| 40 | # ifdef bcm63xx_get_cpu_id | 33 | case BCM6328_CPU_ID: |
| 41 | # undef bcm63xx_get_cpu_id | ||
| 42 | # define bcm63xx_get_cpu_id() __bcm63xx_get_cpu_id() | ||
| 43 | # define BCMCPU_RUNTIME_DETECT | ||
| 44 | # else | ||
| 45 | # define bcm63xx_get_cpu_id() BCM6328_CPU_ID | ||
| 46 | # endif | ||
| 47 | # define BCMCPU_IS_6328() (bcm63xx_get_cpu_id() == BCM6328_CPU_ID) | ||
| 48 | #else | ||
| 49 | # define BCMCPU_IS_6328() (0) | ||
| 50 | #endif | 34 | #endif |
| 51 | 35 | ||
| 52 | #ifdef CONFIG_BCM63XX_CPU_6338 | 36 | #ifdef CONFIG_BCM63XX_CPU_6338 |
| 53 | # ifdef bcm63xx_get_cpu_id | 37 | case BCM6338_CPU_ID: |
| 54 | # undef bcm63xx_get_cpu_id | ||
| 55 | # define bcm63xx_get_cpu_id() __bcm63xx_get_cpu_id() | ||
| 56 | # define BCMCPU_RUNTIME_DETECT | ||
| 57 | # else | ||
| 58 | # define bcm63xx_get_cpu_id() BCM6338_CPU_ID | ||
| 59 | # endif | ||
| 60 | # define BCMCPU_IS_6338() (bcm63xx_get_cpu_id() == BCM6338_CPU_ID) | ||
| 61 | #else | ||
| 62 | # define BCMCPU_IS_6338() (0) | ||
| 63 | #endif | 38 | #endif |
| 64 | 39 | ||
| 65 | #ifdef CONFIG_BCM63XX_CPU_6345 | 40 | #ifdef CONFIG_BCM63XX_CPU_6345 |
| 66 | # ifdef bcm63xx_get_cpu_id | 41 | case BCM6345_CPU_ID: |
| 67 | # undef bcm63xx_get_cpu_id | ||
| 68 | # define bcm63xx_get_cpu_id() __bcm63xx_get_cpu_id() | ||
| 69 | # define BCMCPU_RUNTIME_DETECT | ||
| 70 | # else | ||
| 71 | # define bcm63xx_get_cpu_id() BCM6345_CPU_ID | ||
| 72 | # endif | ||
| 73 | # define BCMCPU_IS_6345() (bcm63xx_get_cpu_id() == BCM6345_CPU_ID) | ||
| 74 | #else | ||
| 75 | # define BCMCPU_IS_6345() (0) | ||
| 76 | #endif | 42 | #endif |
| 77 | 43 | ||
| 78 | #ifdef CONFIG_BCM63XX_CPU_6348 | 44 | #ifdef CONFIG_BCM63XX_CPU_6348 |
| 79 | # ifdef bcm63xx_get_cpu_id | 45 | case BCM6348_CPU_ID: |
| 80 | # undef bcm63xx_get_cpu_id | ||
| 81 | # define bcm63xx_get_cpu_id() __bcm63xx_get_cpu_id() | ||
| 82 | # define BCMCPU_RUNTIME_DETECT | ||
| 83 | # else | ||
| 84 | # define bcm63xx_get_cpu_id() BCM6348_CPU_ID | ||
| 85 | # endif | ||
| 86 | # define BCMCPU_IS_6348() (bcm63xx_get_cpu_id() == BCM6348_CPU_ID) | ||
| 87 | #else | ||
| 88 | # define BCMCPU_IS_6348() (0) | ||
| 89 | #endif | 46 | #endif |
| 90 | 47 | ||
| 91 | #ifdef CONFIG_BCM63XX_CPU_6358 | 48 | #ifdef CONFIG_BCM63XX_CPU_6358 |
| 92 | # ifdef bcm63xx_get_cpu_id | 49 | case BCM6358_CPU_ID: |
| 93 | # undef bcm63xx_get_cpu_id | ||
| 94 | # define bcm63xx_get_cpu_id() __bcm63xx_get_cpu_id() | ||
| 95 | # define BCMCPU_RUNTIME_DETECT | ||
| 96 | # else | ||
| 97 | # define bcm63xx_get_cpu_id() BCM6358_CPU_ID | ||
| 98 | # endif | ||
| 99 | # define BCMCPU_IS_6358() (bcm63xx_get_cpu_id() == BCM6358_CPU_ID) | ||
| 100 | #else | ||
| 101 | # define BCMCPU_IS_6358() (0) | ||
| 102 | #endif | 50 | #endif |
| 103 | 51 | ||
| 104 | #ifdef CONFIG_BCM63XX_CPU_6362 | 52 | #ifdef CONFIG_BCM63XX_CPU_6362 |
| 105 | # ifdef bcm63xx_get_cpu_id | 53 | case BCM6362_CPU_ID: |
| 106 | # undef bcm63xx_get_cpu_id | ||
| 107 | # define bcm63xx_get_cpu_id() __bcm63xx_get_cpu_id() | ||
| 108 | # define BCMCPU_RUNTIME_DETECT | ||
| 109 | # else | ||
| 110 | # define bcm63xx_get_cpu_id() BCM6362_CPU_ID | ||
| 111 | # endif | ||
| 112 | # define BCMCPU_IS_6362() (bcm63xx_get_cpu_id() == BCM6362_CPU_ID) | ||
| 113 | #else | ||
| 114 | # define BCMCPU_IS_6362() (0) | ||
| 115 | #endif | 54 | #endif |
| 116 | 55 | ||
| 117 | |||
| 118 | #ifdef CONFIG_BCM63XX_CPU_6368 | 56 | #ifdef CONFIG_BCM63XX_CPU_6368 |
| 119 | # ifdef bcm63xx_get_cpu_id | 57 | case BCM6368_CPU_ID: |
| 120 | # undef bcm63xx_get_cpu_id | ||
| 121 | # define bcm63xx_get_cpu_id() __bcm63xx_get_cpu_id() | ||
| 122 | # define BCMCPU_RUNTIME_DETECT | ||
| 123 | # else | ||
| 124 | # define bcm63xx_get_cpu_id() BCM6368_CPU_ID | ||
| 125 | # endif | ||
| 126 | # define BCMCPU_IS_6368() (bcm63xx_get_cpu_id() == BCM6368_CPU_ID) | ||
| 127 | #else | ||
| 128 | # define BCMCPU_IS_6368() (0) | ||
| 129 | #endif | 58 | #endif |
| 59 | break; | ||
| 60 | default: | ||
| 61 | unreachable(); | ||
| 62 | } | ||
| 130 | 63 | ||
| 131 | #ifndef bcm63xx_get_cpu_id | 64 | return cpu_id; |
| 132 | #error "No CPU support configured" | 65 | } |
| 133 | #endif | 66 | |
| 67 | extern u16 bcm63xx_cpu_id; | ||
| 68 | |||
| 69 | static inline u16 __pure bcm63xx_get_cpu_id(void) | ||
| 70 | { | ||
| 71 | const u16 cpu_id = bcm63xx_cpu_id; | ||
| 72 | |||
| 73 | return __bcm63xx_get_cpu_id(cpu_id); | ||
| 74 | } | ||
| 75 | |||
| 76 | #define BCMCPU_IS_3368() (bcm63xx_get_cpu_id() == BCM3368_CPU_ID) | ||
| 77 | #define BCMCPU_IS_6328() (bcm63xx_get_cpu_id() == BCM6328_CPU_ID) | ||
| 78 | #define BCMCPU_IS_6338() (bcm63xx_get_cpu_id() == BCM6338_CPU_ID) | ||
| 79 | #define BCMCPU_IS_6345() (bcm63xx_get_cpu_id() == BCM6345_CPU_ID) | ||
| 80 | #define BCMCPU_IS_6348() (bcm63xx_get_cpu_id() == BCM6348_CPU_ID) | ||
| 81 | #define BCMCPU_IS_6358() (bcm63xx_get_cpu_id() == BCM6358_CPU_ID) | ||
| 82 | #define BCMCPU_IS_6362() (bcm63xx_get_cpu_id() == BCM6362_CPU_ID) | ||
| 83 | #define BCMCPU_IS_6368() (bcm63xx_get_cpu_id() == BCM6368_CPU_ID) | ||
| 134 | 84 | ||
| 135 | /* | 85 | /* |
| 136 | * While registers sets are (mostly) the same across 63xx CPU, base | 86 | * While registers sets are (mostly) the same across 63xx CPU, base |
| @@ -598,55 +548,6 @@ enum bcm63xx_regs_set { | |||
| 598 | 548 | ||
| 599 | extern const unsigned long *bcm63xx_regs_base; | 549 | extern const unsigned long *bcm63xx_regs_base; |
| 600 | 550 | ||
| 601 | #define __GEN_RSET_BASE(__cpu, __rset) \ | ||
| 602 | case RSET_## __rset : \ | ||
| 603 | return BCM_## __cpu ##_## __rset ##_BASE; | ||
| 604 | |||
| 605 | #define __GEN_RSET(__cpu) \ | ||
| 606 | switch (set) { \ | ||
| 607 | __GEN_RSET_BASE(__cpu, DSL_LMEM) \ | ||
| 608 | __GEN_RSET_BASE(__cpu, PERF) \ | ||
| 609 | __GEN_RSET_BASE(__cpu, TIMER) \ | ||
| 610 | __GEN_RSET_BASE(__cpu, WDT) \ | ||
| 611 | __GEN_RSET_BASE(__cpu, UART0) \ | ||
| 612 | __GEN_RSET_BASE(__cpu, UART1) \ | ||
| 613 | __GEN_RSET_BASE(__cpu, GPIO) \ | ||
| 614 | __GEN_RSET_BASE(__cpu, SPI) \ | ||
| 615 | __GEN_RSET_BASE(__cpu, HSSPI) \ | ||
| 616 | __GEN_RSET_BASE(__cpu, UDC0) \ | ||
| 617 | __GEN_RSET_BASE(__cpu, OHCI0) \ | ||
| 618 | __GEN_RSET_BASE(__cpu, OHCI_PRIV) \ | ||
| 619 | __GEN_RSET_BASE(__cpu, USBH_PRIV) \ | ||
| 620 | __GEN_RSET_BASE(__cpu, USBD) \ | ||
| 621 | __GEN_RSET_BASE(__cpu, USBDMA) \ | ||
| 622 | __GEN_RSET_BASE(__cpu, MPI) \ | ||
| 623 | __GEN_RSET_BASE(__cpu, PCMCIA) \ | ||
| 624 | __GEN_RSET_BASE(__cpu, PCIE) \ | ||
| 625 | __GEN_RSET_BASE(__cpu, DSL) \ | ||
| 626 | __GEN_RSET_BASE(__cpu, ENET0) \ | ||
| 627 | __GEN_RSET_BASE(__cpu, ENET1) \ | ||
| 628 | __GEN_RSET_BASE(__cpu, ENETDMA) \ | ||
| 629 | __GEN_RSET_BASE(__cpu, ENETDMAC) \ | ||
| 630 | __GEN_RSET_BASE(__cpu, ENETDMAS) \ | ||
| 631 | __GEN_RSET_BASE(__cpu, ENETSW) \ | ||
| 632 | __GEN_RSET_BASE(__cpu, EHCI0) \ | ||
| 633 | __GEN_RSET_BASE(__cpu, SDRAM) \ | ||
| 634 | __GEN_RSET_BASE(__cpu, MEMC) \ | ||
| 635 | __GEN_RSET_BASE(__cpu, DDR) \ | ||
| 636 | __GEN_RSET_BASE(__cpu, M2M) \ | ||
| 637 | __GEN_RSET_BASE(__cpu, ATM) \ | ||
| 638 | __GEN_RSET_BASE(__cpu, XTM) \ | ||
| 639 | __GEN_RSET_BASE(__cpu, XTMDMA) \ | ||
| 640 | __GEN_RSET_BASE(__cpu, XTMDMAC) \ | ||
| 641 | __GEN_RSET_BASE(__cpu, XTMDMAS) \ | ||
| 642 | __GEN_RSET_BASE(__cpu, PCM) \ | ||
| 643 | __GEN_RSET_BASE(__cpu, PCMDMA) \ | ||
| 644 | __GEN_RSET_BASE(__cpu, PCMDMAC) \ | ||
| 645 | __GEN_RSET_BASE(__cpu, PCMDMAS) \ | ||
| 646 | __GEN_RSET_BASE(__cpu, RNG) \ | ||
| 647 | __GEN_RSET_BASE(__cpu, MISC) \ | ||
| 648 | } | ||
| 649 | |||
| 650 | #define __GEN_CPU_REGS_TABLE(__cpu) \ | 551 | #define __GEN_CPU_REGS_TABLE(__cpu) \ |
| 651 | [RSET_DSL_LMEM] = BCM_## __cpu ##_DSL_LMEM_BASE, \ | 552 | [RSET_DSL_LMEM] = BCM_## __cpu ##_DSL_LMEM_BASE, \ |
| 652 | [RSET_PERF] = BCM_## __cpu ##_PERF_BASE, \ | 553 | [RSET_PERF] = BCM_## __cpu ##_PERF_BASE, \ |
| @@ -693,36 +594,7 @@ extern const unsigned long *bcm63xx_regs_base; | |||
| 693 | 594 | ||
| 694 | static inline unsigned long bcm63xx_regset_address(enum bcm63xx_regs_set set) | 595 | static inline unsigned long bcm63xx_regset_address(enum bcm63xx_regs_set set) |
| 695 | { | 596 | { |
| 696 | #ifdef BCMCPU_RUNTIME_DETECT | ||
| 697 | return bcm63xx_regs_base[set]; | 597 | return bcm63xx_regs_base[set]; |
| 698 | #else | ||
| 699 | #ifdef CONFIG_BCM63XX_CPU_3368 | ||
| 700 | __GEN_RSET(3368) | ||
| 701 | #endif | ||
| 702 | #ifdef CONFIG_BCM63XX_CPU_6328 | ||
| 703 | __GEN_RSET(6328) | ||
| 704 | #endif | ||
| 705 | #ifdef CONFIG_BCM63XX_CPU_6338 | ||
| 706 | __GEN_RSET(6338) | ||
| 707 | #endif | ||
| 708 | #ifdef CONFIG_BCM63XX_CPU_6345 | ||
| 709 | __GEN_RSET(6345) | ||
| 710 | #endif | ||
| 711 | #ifdef CONFIG_BCM63XX_CPU_6348 | ||
| 712 | __GEN_RSET(6348) | ||
| 713 | #endif | ||
| 714 | #ifdef CONFIG_BCM63XX_CPU_6358 | ||
| 715 | __GEN_RSET(6358) | ||
| 716 | #endif | ||
| 717 | #ifdef CONFIG_BCM63XX_CPU_6362 | ||
| 718 | __GEN_RSET(6362) | ||
| 719 | #endif | ||
| 720 | #ifdef CONFIG_BCM63XX_CPU_6368 | ||
| 721 | __GEN_RSET(6368) | ||
| 722 | #endif | ||
| 723 | #endif | ||
| 724 | /* unreached */ | ||
| 725 | return 0; | ||
| 726 | } | 598 | } |
| 727 | 599 | ||
| 728 | /* | 600 | /* |
diff --git a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_enet.h b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_enet.h index 753953e86242..466fc85899f4 100644 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_enet.h +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_enet.h | |||
| @@ -112,55 +112,9 @@ enum bcm63xx_regs_enetdmac { | |||
| 112 | 112 | ||
| 113 | static inline unsigned long bcm63xx_enetdmacreg(enum bcm63xx_regs_enetdmac reg) | 113 | static inline unsigned long bcm63xx_enetdmacreg(enum bcm63xx_regs_enetdmac reg) |
| 114 | { | 114 | { |
| 115 | #ifdef BCMCPU_RUNTIME_DETECT | ||
| 116 | extern const unsigned long *bcm63xx_regs_enetdmac; | 115 | extern const unsigned long *bcm63xx_regs_enetdmac; |
| 117 | 116 | ||
| 118 | return bcm63xx_regs_enetdmac[reg]; | 117 | return bcm63xx_regs_enetdmac[reg]; |
| 119 | #else | ||
| 120 | #ifdef CONFIG_BCM63XX_CPU_6345 | ||
| 121 | switch (reg) { | ||
| 122 | case ENETDMAC_CHANCFG: | ||
| 123 | return ENETDMA_6345_CHANCFG_REG; | ||
| 124 | case ENETDMAC_IR: | ||
| 125 | return ENETDMA_6345_IR_REG; | ||
| 126 | case ENETDMAC_IRMASK: | ||
| 127 | return ENETDMA_6345_IRMASK_REG; | ||
| 128 | case ENETDMAC_MAXBURST: | ||
| 129 | return ENETDMA_6345_MAXBURST_REG; | ||
| 130 | case ENETDMAC_BUFALLOC: | ||
| 131 | return ENETDMA_6345_BUFALLOC_REG; | ||
| 132 | case ENETDMAC_RSTART: | ||
| 133 | return ENETDMA_6345_RSTART_REG; | ||
| 134 | case ENETDMAC_FC: | ||
| 135 | return ENETDMA_6345_FC_REG; | ||
| 136 | case ENETDMAC_LEN: | ||
| 137 | return ENETDMA_6345_LEN_REG; | ||
| 138 | } | ||
| 139 | #endif | ||
| 140 | #if defined(CONFIG_BCM63XX_CPU_6328) || \ | ||
| 141 | defined(CONFIG_BCM63XX_CPU_6338) || \ | ||
| 142 | defined(CONFIG_BCM63XX_CPU_6348) || \ | ||
| 143 | defined(CONFIG_BCM63XX_CPU_6358) || \ | ||
| 144 | defined(CONFIG_BCM63XX_CPU_6362) || \ | ||
| 145 | defined(CONFIG_BCM63XX_CPU_6368) | ||
| 146 | switch (reg) { | ||
| 147 | case ENETDMAC_CHANCFG: | ||
| 148 | return ENETDMAC_CHANCFG_REG; | ||
| 149 | case ENETDMAC_IR: | ||
| 150 | return ENETDMAC_IR_REG; | ||
| 151 | case ENETDMAC_IRMASK: | ||
| 152 | return ENETDMAC_IRMASK_REG; | ||
| 153 | case ENETDMAC_MAXBURST: | ||
| 154 | return ENETDMAC_MAXBURST_REG; | ||
| 155 | case ENETDMAC_BUFALLOC: | ||
| 156 | case ENETDMAC_RSTART: | ||
| 157 | case ENETDMAC_FC: | ||
| 158 | case ENETDMAC_LEN: | ||
| 159 | return 0; | ||
| 160 | } | ||
| 161 | #endif | ||
| 162 | #endif | ||
| 163 | return 0; | ||
| 164 | } | 118 | } |
| 165 | 119 | ||
| 166 | 120 | ||
diff --git a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_spi.h b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_spi.h index c426cabc620a..25737655d141 100644 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_spi.h +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_spi.h | |||
| @@ -30,26 +30,6 @@ enum bcm63xx_regs_spi { | |||
| 30 | SPI_RX_DATA, | 30 | SPI_RX_DATA, |
| 31 | }; | 31 | }; |
| 32 | 32 | ||
| 33 | #define __GEN_SPI_RSET_BASE(__cpu, __rset) \ | ||
| 34 | case SPI_## __rset: \ | ||
| 35 | return SPI_## __cpu ##_## __rset; | ||
| 36 | |||
| 37 | #define __GEN_SPI_RSET(__cpu) \ | ||
| 38 | switch (reg) { \ | ||
| 39 | __GEN_SPI_RSET_BASE(__cpu, CMD) \ | ||
| 40 | __GEN_SPI_RSET_BASE(__cpu, INT_STATUS) \ | ||
| 41 | __GEN_SPI_RSET_BASE(__cpu, INT_MASK_ST) \ | ||
| 42 | __GEN_SPI_RSET_BASE(__cpu, INT_MASK) \ | ||
| 43 | __GEN_SPI_RSET_BASE(__cpu, ST) \ | ||
| 44 | __GEN_SPI_RSET_BASE(__cpu, CLK_CFG) \ | ||
| 45 | __GEN_SPI_RSET_BASE(__cpu, FILL_BYTE) \ | ||
| 46 | __GEN_SPI_RSET_BASE(__cpu, MSG_TAIL) \ | ||
| 47 | __GEN_SPI_RSET_BASE(__cpu, RX_TAIL) \ | ||
| 48 | __GEN_SPI_RSET_BASE(__cpu, MSG_CTL) \ | ||
| 49 | __GEN_SPI_RSET_BASE(__cpu, MSG_DATA) \ | ||
| 50 | __GEN_SPI_RSET_BASE(__cpu, RX_DATA) \ | ||
| 51 | } | ||
| 52 | |||
| 53 | #define __GEN_SPI_REGS_TABLE(__cpu) \ | 33 | #define __GEN_SPI_REGS_TABLE(__cpu) \ |
| 54 | [SPI_CMD] = SPI_## __cpu ##_CMD, \ | 34 | [SPI_CMD] = SPI_## __cpu ##_CMD, \ |
| 55 | [SPI_INT_STATUS] = SPI_## __cpu ##_INT_STATUS, \ | 35 | [SPI_INT_STATUS] = SPI_## __cpu ##_INT_STATUS, \ |
| @@ -66,20 +46,9 @@ enum bcm63xx_regs_spi { | |||
| 66 | 46 | ||
| 67 | static inline unsigned long bcm63xx_spireg(enum bcm63xx_regs_spi reg) | 47 | static inline unsigned long bcm63xx_spireg(enum bcm63xx_regs_spi reg) |
| 68 | { | 48 | { |
| 69 | #ifdef BCMCPU_RUNTIME_DETECT | ||
| 70 | extern const unsigned long *bcm63xx_regs_spi; | 49 | extern const unsigned long *bcm63xx_regs_spi; |
| 71 | 50 | ||
| 72 | return bcm63xx_regs_spi[reg]; | 51 | return bcm63xx_regs_spi[reg]; |
| 73 | #else | ||
| 74 | #if defined(CONFIG_BCM63XX_CPU_6338) || defined(CONFIG_BCM63XX_CPU_6348) | ||
| 75 | __GEN_SPI_RSET(6348) | ||
| 76 | #endif | ||
| 77 | #if defined(CONFIG_BCM63XX_CPU_6358) || defined(CONFIG_BCM63XX_CPU_6362) || \ | ||
| 78 | defined(CONFIG_BCM63XX_CPU_6368) | ||
| 79 | __GEN_SPI_RSET(6358) | ||
| 80 | #endif | ||
| 81 | #endif | ||
| 82 | return 0; | ||
| 83 | } | 52 | } |
| 84 | 53 | ||
| 85 | #endif /* BCM63XX_DEV_SPI_H */ | 54 | #endif /* BCM63XX_DEV_SPI_H */ |
diff --git a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h index ab427f8814e6..4794067cb5a7 100644 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h | |||
| @@ -215,23 +215,23 @@ | |||
| 215 | 215 | ||
| 216 | /* Interrupt Mask register */ | 216 | /* Interrupt Mask register */ |
| 217 | #define PERF_IRQMASK_3368_REG 0xc | 217 | #define PERF_IRQMASK_3368_REG 0xc |
| 218 | #define PERF_IRQMASK_6328_REG 0x20 | 218 | #define PERF_IRQMASK_6328_REG(x) (0x20 + (x) * 0x10) |
| 219 | #define PERF_IRQMASK_6338_REG 0xc | 219 | #define PERF_IRQMASK_6338_REG 0xc |
| 220 | #define PERF_IRQMASK_6345_REG 0xc | 220 | #define PERF_IRQMASK_6345_REG 0xc |
| 221 | #define PERF_IRQMASK_6348_REG 0xc | 221 | #define PERF_IRQMASK_6348_REG 0xc |
| 222 | #define PERF_IRQMASK_6358_REG 0xc | 222 | #define PERF_IRQMASK_6358_REG(x) (0xc + (x) * 0x2c) |
| 223 | #define PERF_IRQMASK_6362_REG 0x20 | 223 | #define PERF_IRQMASK_6362_REG(x) (0x20 + (x) * 0x10) |
| 224 | #define PERF_IRQMASK_6368_REG 0x20 | 224 | #define PERF_IRQMASK_6368_REG(x) (0x20 + (x) * 0x10) |
| 225 | 225 | ||
| 226 | /* Interrupt Status register */ | 226 | /* Interrupt Status register */ |
| 227 | #define PERF_IRQSTAT_3368_REG 0x10 | 227 | #define PERF_IRQSTAT_3368_REG 0x10 |
| 228 | #define PERF_IRQSTAT_6328_REG 0x28 | 228 | #define PERF_IRQSTAT_6328_REG(x) (0x28 + (x) * 0x10) |
| 229 | #define PERF_IRQSTAT_6338_REG 0x10 | 229 | #define PERF_IRQSTAT_6338_REG 0x10 |
| 230 | #define PERF_IRQSTAT_6345_REG 0x10 | 230 | #define PERF_IRQSTAT_6345_REG 0x10 |
| 231 | #define PERF_IRQSTAT_6348_REG 0x10 | 231 | #define PERF_IRQSTAT_6348_REG 0x10 |
| 232 | #define PERF_IRQSTAT_6358_REG 0x10 | 232 | #define PERF_IRQSTAT_6358_REG(x) (0x10 + (x) * 0x2c) |
| 233 | #define PERF_IRQSTAT_6362_REG 0x28 | 233 | #define PERF_IRQSTAT_6362_REG(x) (0x28 + (x) * 0x10) |
| 234 | #define PERF_IRQSTAT_6368_REG 0x28 | 234 | #define PERF_IRQSTAT_6368_REG(x) (0x28 + (x) * 0x10) |
| 235 | 235 | ||
| 236 | /* External Interrupt Configuration register */ | 236 | /* External Interrupt Configuration register */ |
| 237 | #define PERF_EXTIRQ_CFG_REG_3368 0x14 | 237 | #define PERF_EXTIRQ_CFG_REG_3368 0x14 |
diff --git a/arch/mips/include/asm/mach-bcm63xx/cpu-feature-overrides.h b/arch/mips/include/asm/mach-bcm63xx/cpu-feature-overrides.h index e9c408e8ff4c..bc1167dbd4e3 100644 --- a/arch/mips/include/asm/mach-bcm63xx/cpu-feature-overrides.h +++ b/arch/mips/include/asm/mach-bcm63xx/cpu-feature-overrides.h | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | #define cpu_has_smartmips 0 | 24 | #define cpu_has_smartmips 0 |
| 25 | #define cpu_has_vtag_icache 0 | 25 | #define cpu_has_vtag_icache 0 |
| 26 | 26 | ||
| 27 | #if !defined(BCMCPU_RUNTIME_DETECT) && (defined(CONFIG_BCM63XX_CPU_6348) || defined(CONFIG_BCM63XX_CPU_6345) || defined(CONFIG_BCM63XX_CPU_6338)) | 27 | #if !defined(CONFIG_SYS_HAS_CPU_BMIPS4350) |
| 28 | #define cpu_has_dc_aliases 0 | 28 | #define cpu_has_dc_aliases 0 |
| 29 | #endif | 29 | #endif |
| 30 | 30 | ||
diff --git a/arch/mips/include/asm/mach-loongson/boot_param.h b/arch/mips/include/asm/mach-loongson/boot_param.h index 829a7ec185fb..3388fc53599e 100644 --- a/arch/mips/include/asm/mach-loongson/boot_param.h +++ b/arch/mips/include/asm/mach-loongson/boot_param.h | |||
| @@ -146,6 +146,9 @@ struct boot_params { | |||
| 146 | 146 | ||
| 147 | struct loongson_system_configuration { | 147 | struct loongson_system_configuration { |
| 148 | u32 nr_cpus; | 148 | u32 nr_cpus; |
| 149 | u32 nr_nodes; | ||
| 150 | int cores_per_node; | ||
| 151 | int cores_per_package; | ||
| 149 | enum loongson_cpu_type cputype; | 152 | enum loongson_cpu_type cputype; |
| 150 | u64 ht_control_base; | 153 | u64 ht_control_base; |
| 151 | u64 pci_mem_start_addr; | 154 | u64 pci_mem_start_addr; |
| @@ -160,4 +163,5 @@ struct loongson_system_configuration { | |||
| 160 | 163 | ||
| 161 | extern struct efi_memory_map_loongson *loongson_memmap; | 164 | extern struct efi_memory_map_loongson *loongson_memmap; |
| 162 | extern struct loongson_system_configuration loongson_sysconf; | 165 | extern struct loongson_system_configuration loongson_sysconf; |
| 166 | extern int cpuhotplug_workaround; | ||
| 163 | #endif | 167 | #endif |
diff --git a/arch/mips/include/asm/mach-loongson/kernel-entry-init.h b/arch/mips/include/asm/mach-loongson/kernel-entry-init.h new file mode 100644 index 000000000000..df5fca8eeb80 --- /dev/null +++ b/arch/mips/include/asm/mach-loongson/kernel-entry-init.h | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | /* | ||
| 2 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 3 | * License. See the file "COPYING" in the main directory of this archive | ||
| 4 | * for more details. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2005 Embedded Alley Solutions, Inc | ||
| 7 | * Copyright (C) 2005 Ralf Baechle (ralf@linux-mips.org) | ||
| 8 | * Copyright (C) 2009 Jiajie Chen (chenjiajie@cse.buaa.edu.cn) | ||
| 9 | * Copyright (C) 2012 Huacai Chen (chenhc@lemote.com) | ||
| 10 | */ | ||
| 11 | #ifndef __ASM_MACH_LOONGSON_KERNEL_ENTRY_H | ||
| 12 | #define __ASM_MACH_LOONGSON_KERNEL_ENTRY_H | ||
| 13 | |||
| 14 | /* | ||
| 15 | * Override macros used in arch/mips/kernel/head.S. | ||
| 16 | */ | ||
| 17 | .macro kernel_entry_setup | ||
| 18 | #ifdef CONFIG_CPU_LOONGSON3 | ||
| 19 | .set push | ||
| 20 | .set mips64 | ||
| 21 | /* Set LPA on LOONGSON3 config3 */ | ||
| 22 | mfc0 t0, $16, 3 | ||
| 23 | or t0, (0x1 << 7) | ||
| 24 | mtc0 t0, $16, 3 | ||
| 25 | /* Set ELPA on LOONGSON3 pagegrain */ | ||
| 26 | li t0, (0x1 << 29) | ||
| 27 | mtc0 t0, $5, 1 | ||
| 28 | _ehb | ||
| 29 | .set pop | ||
| 30 | #endif | ||
| 31 | .endm | ||
| 32 | |||
| 33 | /* | ||
| 34 | * Do SMP slave processor setup. | ||
| 35 | */ | ||
| 36 | .macro smp_slave_setup | ||
| 37 | #ifdef CONFIG_CPU_LOONGSON3 | ||
| 38 | .set push | ||
| 39 | .set mips64 | ||
| 40 | /* Set LPA on LOONGSON3 config3 */ | ||
| 41 | mfc0 t0, $16, 3 | ||
| 42 | or t0, (0x1 << 7) | ||
| 43 | mtc0 t0, $16, 3 | ||
| 44 | /* Set ELPA on LOONGSON3 pagegrain */ | ||
| 45 | li t0, (0x1 << 29) | ||
| 46 | mtc0 t0, $5, 1 | ||
| 47 | _ehb | ||
| 48 | .set pop | ||
| 49 | #endif | ||
| 50 | .endm | ||
| 51 | |||
| 52 | #endif /* __ASM_MACH_LOONGSON_KERNEL_ENTRY_H */ | ||
diff --git a/arch/mips/include/asm/mach-loongson/loongson.h b/arch/mips/include/asm/mach-loongson/loongson.h index f3fd1eb8e3dd..92bf76c21441 100644 --- a/arch/mips/include/asm/mach-loongson/loongson.h +++ b/arch/mips/include/asm/mach-loongson/loongson.h | |||
| @@ -249,8 +249,15 @@ static inline void do_perfcnt_IRQ(void) | |||
| 249 | #define LOONGSON_PXARB_CFG LOONGSON_REG(LOONGSON_REGBASE + 0x68) | 249 | #define LOONGSON_PXARB_CFG LOONGSON_REG(LOONGSON_REGBASE + 0x68) |
| 250 | #define LOONGSON_PXARB_STATUS LOONGSON_REG(LOONGSON_REGBASE + 0x6c) | 250 | #define LOONGSON_PXARB_STATUS LOONGSON_REG(LOONGSON_REGBASE + 0x6c) |
| 251 | 251 | ||
| 252 | /* Chip Config */ | 252 | #define MAX_PACKAGES 4 |
| 253 | #define LOONGSON_CHIPCFG0 LOONGSON_REG(LOONGSON_REGBASE + 0x80) | 253 | |
| 254 | /* Chip Config registor of each physical cpu package, PRid >= Loongson-2F */ | ||
| 255 | extern u64 loongson_chipcfg[MAX_PACKAGES]; | ||
| 256 | #define LOONGSON_CHIPCFG(id) (*(volatile u32 *)(loongson_chipcfg[id])) | ||
| 257 | |||
| 258 | /* Freq Control register of each physical cpu package, PRid >= Loongson-3B */ | ||
| 259 | extern u64 loongson_freqctrl[MAX_PACKAGES]; | ||
| 260 | #define LOONGSON_FREQCTRL(id) (*(volatile u32 *)(loongson_freqctrl[id])) | ||
| 254 | 261 | ||
| 255 | /* pcimap */ | 262 | /* pcimap */ |
| 256 | 263 | ||
diff --git a/arch/mips/include/asm/mach-loongson/machine.h b/arch/mips/include/asm/mach-loongson/machine.h index 1b1f592fa2be..228e37847a36 100644 --- a/arch/mips/include/asm/mach-loongson/machine.h +++ b/arch/mips/include/asm/mach-loongson/machine.h | |||
| @@ -24,10 +24,10 @@ | |||
| 24 | 24 | ||
| 25 | #endif | 25 | #endif |
| 26 | 26 | ||
| 27 | #ifdef CONFIG_LEMOTE_MACH3A | 27 | #ifdef CONFIG_LOONGSON_MACH3X |
| 28 | 28 | ||
| 29 | #define LOONGSON_MACHTYPE MACH_LEMOTE_A1101 | 29 | #define LOONGSON_MACHTYPE MACH_LEMOTE_A1101 |
| 30 | 30 | ||
| 31 | #endif /* CONFIG_LEMOTE_MACH3A */ | 31 | #endif /* CONFIG_LOONGSON_MACH3X */ |
| 32 | 32 | ||
| 33 | #endif /* __ASM_MACH_LOONGSON_MACHINE_H */ | 33 | #endif /* __ASM_MACH_LOONGSON_MACHINE_H */ |
diff --git a/arch/mips/include/asm/mach-loongson/mmzone.h b/arch/mips/include/asm/mach-loongson/mmzone.h new file mode 100644 index 000000000000..37c08a27b4f0 --- /dev/null +++ b/arch/mips/include/asm/mach-loongson/mmzone.h | |||
| @@ -0,0 +1,53 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010 Loongson Inc. & Lemote Inc. & | ||
| 3 | * Insititute of Computing Technology | ||
| 4 | * Author: Xiang Gao, gaoxiang@ict.ac.cn | ||
| 5 | * Huacai Chen, chenhc@lemote.com | ||
| 6 | * Xiaofu Meng, Shuangshuang Zhang | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | */ | ||
| 13 | #ifndef _ASM_MACH_MMZONE_H | ||
| 14 | #define _ASM_MACH_MMZONE_H | ||
| 15 | |||
| 16 | #include <boot_param.h> | ||
| 17 | #define NODE_ADDRSPACE_SHIFT 44 | ||
| 18 | #define NODE0_ADDRSPACE_OFFSET 0x000000000000UL | ||
| 19 | #define NODE1_ADDRSPACE_OFFSET 0x100000000000UL | ||
| 20 | #define NODE2_ADDRSPACE_OFFSET 0x200000000000UL | ||
| 21 | #define NODE3_ADDRSPACE_OFFSET 0x300000000000UL | ||
| 22 | |||
| 23 | #define pa_to_nid(addr) (((addr) & 0xf00000000000) >> NODE_ADDRSPACE_SHIFT) | ||
| 24 | |||
| 25 | #define LEVELS_PER_SLICE 128 | ||
| 26 | |||
| 27 | struct slice_data { | ||
| 28 | unsigned long irq_enable_mask[2]; | ||
| 29 | int level_to_irq[LEVELS_PER_SLICE]; | ||
| 30 | }; | ||
| 31 | |||
| 32 | struct hub_data { | ||
| 33 | cpumask_t h_cpus; | ||
| 34 | unsigned long slice_map; | ||
| 35 | unsigned long irq_alloc_mask[2]; | ||
| 36 | struct slice_data slice[2]; | ||
| 37 | }; | ||
| 38 | |||
| 39 | struct node_data { | ||
| 40 | struct pglist_data pglist; | ||
| 41 | struct hub_data hub; | ||
| 42 | cpumask_t cpumask; | ||
| 43 | }; | ||
| 44 | |||
| 45 | extern struct node_data *__node_data[]; | ||
| 46 | |||
| 47 | #define NODE_DATA(n) (&__node_data[(n)]->pglist) | ||
| 48 | #define hub_data(n) (&__node_data[(n)]->hub) | ||
| 49 | |||
| 50 | extern void setup_zero_pages(void); | ||
| 51 | extern void __init prom_init_numa_memory(void); | ||
| 52 | |||
| 53 | #endif /* _ASM_MACH_MMZONE_H */ | ||
diff --git a/arch/mips/include/asm/mach-loongson/topology.h b/arch/mips/include/asm/mach-loongson/topology.h new file mode 100644 index 000000000000..5598ba77d2ef --- /dev/null +++ b/arch/mips/include/asm/mach-loongson/topology.h | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | #ifndef _ASM_MACH_TOPOLOGY_H | ||
| 2 | #define _ASM_MACH_TOPOLOGY_H | ||
| 3 | |||
| 4 | #ifdef CONFIG_NUMA | ||
| 5 | |||
| 6 | #define cpu_to_node(cpu) ((cpu) >> 2) | ||
| 7 | #define parent_node(node) (node) | ||
| 8 | #define cpumask_of_node(node) (&__node_data[(node)]->cpumask) | ||
| 9 | |||
| 10 | struct pci_bus; | ||
| 11 | extern int pcibus_to_node(struct pci_bus *); | ||
| 12 | |||
| 13 | #define cpumask_of_pcibus(bus) (cpu_online_mask) | ||
| 14 | |||
| 15 | extern unsigned char __node_distances[MAX_NUMNODES][MAX_NUMNODES]; | ||
| 16 | |||
| 17 | #define node_distance(from, to) (__node_distances[(from)][(to)]) | ||
| 18 | |||
| 19 | #endif | ||
| 20 | |||
| 21 | #include <asm-generic/topology.h> | ||
| 22 | |||
| 23 | #endif /* _ASM_MACH_TOPOLOGY_H */ | ||
diff --git a/arch/mips/include/asm/mach-malta/irq.h b/arch/mips/include/asm/mach-malta/irq.h index 47cfe64efbb0..f2c13d211abb 100644 --- a/arch/mips/include/asm/mach-malta/irq.h +++ b/arch/mips/include/asm/mach-malta/irq.h | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #define __ASM_MACH_MIPS_IRQ_H | 2 | #define __ASM_MACH_MIPS_IRQ_H |
| 3 | 3 | ||
| 4 | 4 | ||
| 5 | #define GIC_NUM_INTRS (24 + NR_CPUS * 2) | ||
| 5 | #define NR_IRQS 256 | 6 | #define NR_IRQS 256 |
| 6 | 7 | ||
| 7 | #include_next <irq.h> | 8 | #include_next <irq.h> |
diff --git a/arch/mips/include/asm/mach-sead3/irq.h b/arch/mips/include/asm/mach-sead3/irq.h index 5d154cfbcf4c..d8106f75b9af 100644 --- a/arch/mips/include/asm/mach-sead3/irq.h +++ b/arch/mips/include/asm/mach-sead3/irq.h | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | #ifndef __ASM_MACH_MIPS_IRQ_H | 1 | #ifndef __ASM_MACH_MIPS_IRQ_H |
| 2 | #define __ASM_MACH_MIPS_IRQ_H | 2 | #define __ASM_MACH_MIPS_IRQ_H |
| 3 | 3 | ||
| 4 | #define GIC_NUM_INTRS (24 + NR_CPUS * 2) | ||
| 4 | #define NR_IRQS 256 | 5 | #define NR_IRQS 256 |
| 5 | 6 | ||
| 6 | 7 | ||
diff --git a/arch/mips/include/asm/mips-boards/bonito64.h b/arch/mips/include/asm/mips-boards/bonito64.h index b2048d1bcc1c..5368891d424b 100644 --- a/arch/mips/include/asm/mips-boards/bonito64.h +++ b/arch/mips/include/asm/mips-boards/bonito64.h | |||
| @@ -414,7 +414,6 @@ extern unsigned long _pcictrl_bonito_pcicfg; | |||
| 414 | 414 | ||
| 415 | 415 | ||
| 416 | #define BONITO_PCIMEMBASECFG_ADDRMASK(WIN, CFG) ((((CFG) & BONITO_PCIMEMBASECFG_MEMBASE##WIN##_MASK) >> BONITO_PCIMEMBASECFG_MEMBASE##WIN##_MASK_SHIFT) << BONITO_PCIMEMBASECFG_ASHIFT) | 416 | #define BONITO_PCIMEMBASECFG_ADDRMASK(WIN, CFG) ((((CFG) & BONITO_PCIMEMBASECFG_MEMBASE##WIN##_MASK) >> BONITO_PCIMEMBASECFG_MEMBASE##WIN##_MASK_SHIFT) << BONITO_PCIMEMBASECFG_ASHIFT) |
| 417 | #define BONITO_PCIMEMBASECFG_ADDRMASK(WIN, CFG) ((((CFG) & BONITO_PCIMEMBASECFG_MEMBASE##WIN##_MASK) >> BONITO_PCIMEMBASECFG_MEMBASE##WIN##_MASK_SHIFT) << BONITO_PCIMEMBASECFG_ASHIFT) | ||
| 418 | #define BONITO_PCIMEMBASECFG_ADDRTRANS(WIN, CFG) ((((CFG) & BONITO_PCIMEMBASECFG_MEMBASE##WIN##_TRANS) >> BONITO_PCIMEMBASECFG_MEMBASE##WIN##_TRANS_SHIFT) << BONITO_PCIMEMBASECFG_ASHIFT) | 417 | #define BONITO_PCIMEMBASECFG_ADDRTRANS(WIN, CFG) ((((CFG) & BONITO_PCIMEMBASECFG_MEMBASE##WIN##_TRANS) >> BONITO_PCIMEMBASECFG_MEMBASE##WIN##_TRANS_SHIFT) << BONITO_PCIMEMBASECFG_ASHIFT) |
| 419 | 418 | ||
| 420 | #define BONITO_PCITOPHYS(WIN, ADDR, CFG) ( \ | 419 | #define BONITO_PCITOPHYS(WIN, ADDR, CFG) ( \ |
diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h index 98e9754a4b6b..cf3b580c3df6 100644 --- a/arch/mips/include/asm/mipsregs.h +++ b/arch/mips/include/asm/mipsregs.h | |||
| @@ -265,6 +265,7 @@ | |||
| 265 | #define PG_XIE (_ULCAST_(1) << 30) | 265 | #define PG_XIE (_ULCAST_(1) << 30) |
| 266 | #define PG_ELPA (_ULCAST_(1) << 29) | 266 | #define PG_ELPA (_ULCAST_(1) << 29) |
| 267 | #define PG_ESP (_ULCAST_(1) << 28) | 267 | #define PG_ESP (_ULCAST_(1) << 28) |
| 268 | #define PG_IEC (_ULCAST_(1) << 27) | ||
| 268 | 269 | ||
| 269 | /* | 270 | /* |
| 270 | * R4x00 interrupt enable / cause bits | 271 | * R4x00 interrupt enable / cause bits |
| @@ -630,7 +631,6 @@ | |||
| 630 | #define MIPS_CONF4_MMUSIZEEXT_SHIFT (0) | 631 | #define MIPS_CONF4_MMUSIZEEXT_SHIFT (0) |
| 631 | #define MIPS_CONF4_MMUSIZEEXT (_ULCAST_(255) << 0) | 632 | #define MIPS_CONF4_MMUSIZEEXT (_ULCAST_(255) << 0) |
| 632 | #define MIPS_CONF4_FTLBSETS_SHIFT (0) | 633 | #define MIPS_CONF4_FTLBSETS_SHIFT (0) |
| 633 | #define MIPS_CONF4_FTLBSETS_SHIFT (0) | ||
| 634 | #define MIPS_CONF4_FTLBSETS (_ULCAST_(15) << MIPS_CONF4_FTLBSETS_SHIFT) | 634 | #define MIPS_CONF4_FTLBSETS (_ULCAST_(15) << MIPS_CONF4_FTLBSETS_SHIFT) |
| 635 | #define MIPS_CONF4_FTLBWAYS_SHIFT (4) | 635 | #define MIPS_CONF4_FTLBWAYS_SHIFT (4) |
| 636 | #define MIPS_CONF4_FTLBWAYS (_ULCAST_(15) << MIPS_CONF4_FTLBWAYS_SHIFT) | 636 | #define MIPS_CONF4_FTLBWAYS (_ULCAST_(15) << MIPS_CONF4_FTLBWAYS_SHIFT) |
| @@ -652,6 +652,7 @@ | |||
| 652 | 652 | ||
| 653 | #define MIPS_CONF5_NF (_ULCAST_(1) << 0) | 653 | #define MIPS_CONF5_NF (_ULCAST_(1) << 0) |
| 654 | #define MIPS_CONF5_UFR (_ULCAST_(1) << 2) | 654 | #define MIPS_CONF5_UFR (_ULCAST_(1) << 2) |
| 655 | #define MIPS_CONF5_MRP (_ULCAST_(1) << 3) | ||
| 655 | #define MIPS_CONF5_MSAEN (_ULCAST_(1) << 27) | 656 | #define MIPS_CONF5_MSAEN (_ULCAST_(1) << 27) |
| 656 | #define MIPS_CONF5_EVA (_ULCAST_(1) << 28) | 657 | #define MIPS_CONF5_EVA (_ULCAST_(1) << 28) |
| 657 | #define MIPS_CONF5_CV (_ULCAST_(1) << 29) | 658 | #define MIPS_CONF5_CV (_ULCAST_(1) << 29) |
| @@ -668,6 +669,12 @@ | |||
| 668 | #define MIPS_CONF7_IAR (_ULCAST_(1) << 10) | 669 | #define MIPS_CONF7_IAR (_ULCAST_(1) << 10) |
| 669 | #define MIPS_CONF7_AR (_ULCAST_(1) << 16) | 670 | #define MIPS_CONF7_AR (_ULCAST_(1) << 16) |
| 670 | 671 | ||
| 672 | /* MAAR bit definitions */ | ||
| 673 | #define MIPS_MAAR_ADDR ((BIT_ULL(BITS_PER_LONG - 12) - 1) << 12) | ||
| 674 | #define MIPS_MAAR_ADDR_SHIFT 12 | ||
| 675 | #define MIPS_MAAR_S (_ULCAST_(1) << 1) | ||
| 676 | #define MIPS_MAAR_V (_ULCAST_(1) << 0) | ||
| 677 | |||
| 671 | /* EntryHI bit definition */ | 678 | /* EntryHI bit definition */ |
| 672 | #define MIPS_ENTRYHI_EHINV (_ULCAST_(1) << 10) | 679 | #define MIPS_ENTRYHI_EHINV (_ULCAST_(1) << 10) |
| 673 | 680 | ||
| @@ -706,6 +713,37 @@ | |||
| 706 | #define MIPS_SEGCFG_MK _ULCAST_(1) | 713 | #define MIPS_SEGCFG_MK _ULCAST_(1) |
| 707 | #define MIPS_SEGCFG_UK _ULCAST_(0) | 714 | #define MIPS_SEGCFG_UK _ULCAST_(0) |
| 708 | 715 | ||
| 716 | #define MIPS_PWFIELD_GDI_SHIFT 24 | ||
| 717 | #define MIPS_PWFIELD_GDI_MASK 0x3f000000 | ||
| 718 | #define MIPS_PWFIELD_UDI_SHIFT 18 | ||
| 719 | #define MIPS_PWFIELD_UDI_MASK 0x00fc0000 | ||
| 720 | #define MIPS_PWFIELD_MDI_SHIFT 12 | ||
| 721 | #define MIPS_PWFIELD_MDI_MASK 0x0003f000 | ||
| 722 | #define MIPS_PWFIELD_PTI_SHIFT 6 | ||
| 723 | #define MIPS_PWFIELD_PTI_MASK 0x00000fc0 | ||
| 724 | #define MIPS_PWFIELD_PTEI_SHIFT 0 | ||
| 725 | #define MIPS_PWFIELD_PTEI_MASK 0x0000003f | ||
| 726 | |||
| 727 | #define MIPS_PWSIZE_GDW_SHIFT 24 | ||
| 728 | #define MIPS_PWSIZE_GDW_MASK 0x3f000000 | ||
| 729 | #define MIPS_PWSIZE_UDW_SHIFT 18 | ||
| 730 | #define MIPS_PWSIZE_UDW_MASK 0x00fc0000 | ||
| 731 | #define MIPS_PWSIZE_MDW_SHIFT 12 | ||
| 732 | #define MIPS_PWSIZE_MDW_MASK 0x0003f000 | ||
| 733 | #define MIPS_PWSIZE_PTW_SHIFT 6 | ||
| 734 | #define MIPS_PWSIZE_PTW_MASK 0x00000fc0 | ||
| 735 | #define MIPS_PWSIZE_PTEW_SHIFT 0 | ||
| 736 | #define MIPS_PWSIZE_PTEW_MASK 0x0000003f | ||
| 737 | |||
| 738 | #define MIPS_PWCTL_PWEN_SHIFT 31 | ||
| 739 | #define MIPS_PWCTL_PWEN_MASK 0x80000000 | ||
| 740 | #define MIPS_PWCTL_DPH_SHIFT 7 | ||
| 741 | #define MIPS_PWCTL_DPH_MASK 0x00000080 | ||
| 742 | #define MIPS_PWCTL_HUGEPG_SHIFT 6 | ||
| 743 | #define MIPS_PWCTL_HUGEPG_MASK 0x00000060 | ||
| 744 | #define MIPS_PWCTL_PSN_SHIFT 0 | ||
| 745 | #define MIPS_PWCTL_PSN_MASK 0x0000003f | ||
| 746 | |||
| 709 | #ifndef __ASSEMBLY__ | 747 | #ifndef __ASSEMBLY__ |
| 710 | 748 | ||
| 711 | /* | 749 | /* |
| @@ -1044,6 +1082,11 @@ do { \ | |||
| 1044 | #define write_c0_config6(val) __write_32bit_c0_register($16, 6, val) | 1082 | #define write_c0_config6(val) __write_32bit_c0_register($16, 6, val) |
| 1045 | #define write_c0_config7(val) __write_32bit_c0_register($16, 7, val) | 1083 | #define write_c0_config7(val) __write_32bit_c0_register($16, 7, val) |
| 1046 | 1084 | ||
| 1085 | #define read_c0_maar() __read_ulong_c0_register($17, 1) | ||
| 1086 | #define write_c0_maar(val) __write_ulong_c0_register($17, 1, val) | ||
| 1087 | #define read_c0_maari() __read_32bit_c0_register($17, 2) | ||
| 1088 | #define write_c0_maari(val) __write_32bit_c0_register($17, 2, val) | ||
| 1089 | |||
| 1047 | /* | 1090 | /* |
| 1048 | * The WatchLo register. There may be up to 8 of them. | 1091 | * The WatchLo register. There may be up to 8 of them. |
| 1049 | */ | 1092 | */ |
| @@ -1201,6 +1244,19 @@ do { \ | |||
| 1201 | #define read_c0_segctl2() __read_32bit_c0_register($5, 4) | 1244 | #define read_c0_segctl2() __read_32bit_c0_register($5, 4) |
| 1202 | #define write_c0_segctl2(val) __write_32bit_c0_register($5, 4, val) | 1245 | #define write_c0_segctl2(val) __write_32bit_c0_register($5, 4, val) |
| 1203 | 1246 | ||
| 1247 | /* Hardware Page Table Walker */ | ||
| 1248 | #define read_c0_pwbase() __read_ulong_c0_register($5, 5) | ||
| 1249 | #define write_c0_pwbase(val) __write_ulong_c0_register($5, 5, val) | ||
| 1250 | |||
| 1251 | #define read_c0_pwfield() __read_ulong_c0_register($5, 6) | ||
| 1252 | #define write_c0_pwfield(val) __write_ulong_c0_register($5, 6, val) | ||
| 1253 | |||
| 1254 | #define read_c0_pwsize() __read_ulong_c0_register($5, 7) | ||
| 1255 | #define write_c0_pwsize(val) __write_ulong_c0_register($5, 7, val) | ||
| 1256 | |||
| 1257 | #define read_c0_pwctl() __read_32bit_c0_register($6, 6) | ||
| 1258 | #define write_c0_pwctl(val) __write_32bit_c0_register($6, 6, val) | ||
| 1259 | |||
| 1204 | /* Cavium OCTEON (cnMIPS) */ | 1260 | /* Cavium OCTEON (cnMIPS) */ |
| 1205 | #define read_c0_cvmcount() __read_ulong_c0_register($9, 6) | 1261 | #define read_c0_cvmcount() __read_ulong_c0_register($9, 6) |
| 1206 | #define write_c0_cvmcount(val) __write_ulong_c0_register($9, 6, val) | 1262 | #define write_c0_cvmcount(val) __write_ulong_c0_register($9, 6, val) |
diff --git a/arch/mips/include/asm/mmu_context.h b/arch/mips/include/asm/mmu_context.h index 2e373da5f8e9..2f82568a3ee4 100644 --- a/arch/mips/include/asm/mmu_context.h +++ b/arch/mips/include/asm/mmu_context.h | |||
| @@ -20,10 +20,20 @@ | |||
| 20 | #include <asm/tlbflush.h> | 20 | #include <asm/tlbflush.h> |
| 21 | #include <asm-generic/mm_hooks.h> | 21 | #include <asm-generic/mm_hooks.h> |
| 22 | 22 | ||
| 23 | #define htw_set_pwbase(pgd) \ | ||
| 24 | do { \ | ||
| 25 | if (cpu_has_htw) { \ | ||
| 26 | write_c0_pwbase(pgd); \ | ||
| 27 | back_to_back_c0_hazard(); \ | ||
| 28 | htw_reset(); \ | ||
| 29 | } \ | ||
| 30 | } while (0) | ||
| 31 | |||
| 23 | #define TLBMISS_HANDLER_SETUP_PGD(pgd) \ | 32 | #define TLBMISS_HANDLER_SETUP_PGD(pgd) \ |
| 24 | do { \ | 33 | do { \ |
| 25 | extern void tlbmiss_handler_setup_pgd(unsigned long); \ | 34 | extern void tlbmiss_handler_setup_pgd(unsigned long); \ |
| 26 | tlbmiss_handler_setup_pgd((unsigned long)(pgd)); \ | 35 | tlbmiss_handler_setup_pgd((unsigned long)(pgd)); \ |
| 36 | htw_set_pwbase((unsigned long)pgd); \ | ||
| 27 | } while (0) | 37 | } while (0) |
| 28 | 38 | ||
| 29 | #ifdef CONFIG_MIPS_PGD_C0_CONTEXT | 39 | #ifdef CONFIG_MIPS_PGD_C0_CONTEXT |
diff --git a/arch/mips/include/asm/msa.h b/arch/mips/include/asm/msa.h index 538f6d482db8..af5638b12c75 100644 --- a/arch/mips/include/asm/msa.h +++ b/arch/mips/include/asm/msa.h | |||
| @@ -12,8 +12,11 @@ | |||
| 12 | 12 | ||
| 13 | #include <asm/mipsregs.h> | 13 | #include <asm/mipsregs.h> |
| 14 | 14 | ||
| 15 | #ifndef __ASSEMBLY__ | ||
| 16 | |||
| 15 | extern void _save_msa(struct task_struct *); | 17 | extern void _save_msa(struct task_struct *); |
| 16 | extern void _restore_msa(struct task_struct *); | 18 | extern void _restore_msa(struct task_struct *); |
| 19 | extern void _init_msa_upper(void); | ||
| 17 | 20 | ||
| 18 | static inline void enable_msa(void) | 21 | static inline void enable_msa(void) |
| 19 | { | 22 | { |
| @@ -112,10 +115,10 @@ static inline unsigned int read_msa_##name(void) \ | |||
| 112 | " .set push\n" \ | 115 | " .set push\n" \ |
| 113 | " .set noat\n" \ | 116 | " .set noat\n" \ |
| 114 | " .insn\n" \ | 117 | " .insn\n" \ |
| 115 | " .word #CFC_MSA_INSN | (" #cs " << 11)\n" \ | 118 | " .word %1 | (" #cs " << 11)\n" \ |
| 116 | " move %0, $1\n" \ | 119 | " move %0, $1\n" \ |
| 117 | " .set pop\n" \ | 120 | " .set pop\n" \ |
| 118 | : "=r"(reg)); \ | 121 | : "=r"(reg) : "i"(CFC_MSA_INSN)); \ |
| 119 | return reg; \ | 122 | return reg; \ |
| 120 | } \ | 123 | } \ |
| 121 | \ | 124 | \ |
| @@ -126,22 +129,13 @@ static inline void write_msa_##name(unsigned int val) \ | |||
| 126 | " .set noat\n" \ | 129 | " .set noat\n" \ |
| 127 | " move $1, %0\n" \ | 130 | " move $1, %0\n" \ |
| 128 | " .insn\n" \ | 131 | " .insn\n" \ |
| 129 | " .word #CTC_MSA_INSN | (" #cs " << 6)\n" \ | 132 | " .word %1 | (" #cs " << 6)\n" \ |
| 130 | " .set pop\n" \ | 133 | " .set pop\n" \ |
| 131 | : : "r"(val)); \ | 134 | : : "r"(val), "i"(CTC_MSA_INSN)); \ |
| 132 | } | 135 | } |
| 133 | 136 | ||
| 134 | #endif /* !TOOLCHAIN_SUPPORTS_MSA */ | 137 | #endif /* !TOOLCHAIN_SUPPORTS_MSA */ |
| 135 | 138 | ||
| 136 | #define MSA_IR 0 | ||
| 137 | #define MSA_CSR 1 | ||
| 138 | #define MSA_ACCESS 2 | ||
| 139 | #define MSA_SAVE 3 | ||
| 140 | #define MSA_MODIFY 4 | ||
| 141 | #define MSA_REQUEST 5 | ||
| 142 | #define MSA_MAP 6 | ||
| 143 | #define MSA_UNMAP 7 | ||
| 144 | |||
| 145 | __BUILD_MSA_CTL_REG(ir, 0) | 139 | __BUILD_MSA_CTL_REG(ir, 0) |
| 146 | __BUILD_MSA_CTL_REG(csr, 1) | 140 | __BUILD_MSA_CTL_REG(csr, 1) |
| 147 | __BUILD_MSA_CTL_REG(access, 2) | 141 | __BUILD_MSA_CTL_REG(access, 2) |
| @@ -151,6 +145,17 @@ __BUILD_MSA_CTL_REG(request, 5) | |||
| 151 | __BUILD_MSA_CTL_REG(map, 6) | 145 | __BUILD_MSA_CTL_REG(map, 6) |
| 152 | __BUILD_MSA_CTL_REG(unmap, 7) | 146 | __BUILD_MSA_CTL_REG(unmap, 7) |
| 153 | 147 | ||
| 148 | #endif /* !__ASSEMBLY__ */ | ||
| 149 | |||
| 150 | #define MSA_IR 0 | ||
| 151 | #define MSA_CSR 1 | ||
| 152 | #define MSA_ACCESS 2 | ||
| 153 | #define MSA_SAVE 3 | ||
| 154 | #define MSA_MODIFY 4 | ||
| 155 | #define MSA_REQUEST 5 | ||
| 156 | #define MSA_MAP 6 | ||
| 157 | #define MSA_UNMAP 7 | ||
| 158 | |||
| 154 | /* MSA Implementation Register (MSAIR) */ | 159 | /* MSA Implementation Register (MSAIR) */ |
| 155 | #define MSA_IR_REVB 0 | 160 | #define MSA_IR_REVB 0 |
| 156 | #define MSA_IR_REVF (_ULCAST_(0xff) << MSA_IR_REVB) | 161 | #define MSA_IR_REVF (_ULCAST_(0xff) << MSA_IR_REVB) |
diff --git a/arch/mips/include/asm/octeon/cvmx-bootinfo.h b/arch/mips/include/asm/octeon/cvmx-bootinfo.h index 7b7818d1e4d5..2298199a287e 100644 --- a/arch/mips/include/asm/octeon/cvmx-bootinfo.h +++ b/arch/mips/include/asm/octeon/cvmx-bootinfo.h | |||
| @@ -228,6 +228,7 @@ enum cvmx_board_types_enum { | |||
| 228 | */ | 228 | */ |
| 229 | CVMX_BOARD_TYPE_CUST_PRIVATE_MIN = 20001, | 229 | CVMX_BOARD_TYPE_CUST_PRIVATE_MIN = 20001, |
| 230 | CVMX_BOARD_TYPE_UBNT_E100 = 20002, | 230 | CVMX_BOARD_TYPE_UBNT_E100 = 20002, |
| 231 | CVMX_BOARD_TYPE_CUST_DSR1000N = 20006, | ||
| 231 | CVMX_BOARD_TYPE_CUST_PRIVATE_MAX = 30000, | 232 | CVMX_BOARD_TYPE_CUST_PRIVATE_MAX = 30000, |
| 232 | 233 | ||
| 233 | /* The remaining range is reserved for future use. */ | 234 | /* The remaining range is reserved for future use. */ |
| @@ -327,6 +328,7 @@ static inline const char *cvmx_board_type_to_string(enum | |||
| 327 | /* Customer private range */ | 328 | /* Customer private range */ |
| 328 | ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MIN) | 329 | ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MIN) |
| 329 | ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E100) | 330 | ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E100) |
| 331 | ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DSR1000N) | ||
| 330 | ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MAX) | 332 | ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MAX) |
| 331 | } | 333 | } |
| 332 | return "Unsupported Board"; | 334 | return "Unsupported Board"; |
diff --git a/arch/mips/include/asm/pgtable-32.h b/arch/mips/include/asm/pgtable-32.h index b4204c179b97..cd7d6064bcbe 100644 --- a/arch/mips/include/asm/pgtable-32.h +++ b/arch/mips/include/asm/pgtable-32.h | |||
| @@ -18,6 +18,18 @@ | |||
| 18 | 18 | ||
| 19 | #include <asm-generic/pgtable-nopmd.h> | 19 | #include <asm-generic/pgtable-nopmd.h> |
| 20 | 20 | ||
| 21 | extern int temp_tlb_entry __cpuinitdata; | ||
| 22 | |||
| 23 | /* | ||
| 24 | * - add_temporary_entry() add a temporary TLB entry. We use TLB entries | ||
| 25 | * starting at the top and working down. This is for populating the | ||
| 26 | * TLB before trap_init() puts the TLB miss handler in place. It | ||
| 27 | * should be used only for entries matching the actual page tables, | ||
| 28 | * to prevent inconsistencies. | ||
| 29 | */ | ||
| 30 | extern int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1, | ||
| 31 | unsigned long entryhi, unsigned long pagemask); | ||
| 32 | |||
| 21 | /* | 33 | /* |
| 22 | * Basically we have the same two-level (which is the logical three level | 34 | * Basically we have the same two-level (which is the logical three level |
| 23 | * Linux page table layout folded) page tables as the i386. Some day | 35 | * Linux page table layout folded) page tables as the i386. Some day |
diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h index 539ddd148bbb..027c74db13f9 100644 --- a/arch/mips/include/asm/pgtable.h +++ b/arch/mips/include/asm/pgtable.h | |||
| @@ -97,6 +97,31 @@ extern void paging_init(void); | |||
| 97 | 97 | ||
| 98 | #define pmd_page_vaddr(pmd) pmd_val(pmd) | 98 | #define pmd_page_vaddr(pmd) pmd_val(pmd) |
| 99 | 99 | ||
| 100 | #define htw_stop() \ | ||
| 101 | do { \ | ||
| 102 | if (cpu_has_htw) \ | ||
| 103 | write_c0_pwctl(read_c0_pwctl() & \ | ||
| 104 | ~(1 << MIPS_PWCTL_PWEN_SHIFT)); \ | ||
| 105 | } while(0) | ||
| 106 | |||
| 107 | #define htw_start() \ | ||
| 108 | do { \ | ||
| 109 | if (cpu_has_htw) \ | ||
| 110 | write_c0_pwctl(read_c0_pwctl() | \ | ||
| 111 | (1 << MIPS_PWCTL_PWEN_SHIFT)); \ | ||
| 112 | } while(0) | ||
| 113 | |||
| 114 | |||
| 115 | #define htw_reset() \ | ||
| 116 | do { \ | ||
| 117 | if (cpu_has_htw) { \ | ||
| 118 | htw_stop(); \ | ||
| 119 | back_to_back_c0_hazard(); \ | ||
| 120 | htw_start(); \ | ||
| 121 | back_to_back_c0_hazard(); \ | ||
| 122 | } \ | ||
| 123 | } while(0) | ||
| 124 | |||
| 100 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) | 125 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) |
| 101 | 126 | ||
| 102 | #define pte_none(pte) (!(((pte).pte_low | (pte).pte_high) & ~_PAGE_GLOBAL)) | 127 | #define pte_none(pte) (!(((pte).pte_low | (pte).pte_high) & ~_PAGE_GLOBAL)) |
| @@ -131,6 +156,7 @@ static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *pt | |||
| 131 | null.pte_low = null.pte_high = _PAGE_GLOBAL; | 156 | null.pte_low = null.pte_high = _PAGE_GLOBAL; |
| 132 | 157 | ||
| 133 | set_pte_at(mm, addr, ptep, null); | 158 | set_pte_at(mm, addr, ptep, null); |
| 159 | htw_reset(); | ||
| 134 | } | 160 | } |
| 135 | #else | 161 | #else |
| 136 | 162 | ||
| @@ -168,6 +194,7 @@ static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *pt | |||
| 168 | else | 194 | else |
| 169 | #endif | 195 | #endif |
| 170 | set_pte_at(mm, addr, ptep, __pte(0)); | 196 | set_pte_at(mm, addr, ptep, __pte(0)); |
| 197 | htw_reset(); | ||
| 171 | } | 198 | } |
| 172 | #endif | 199 | #endif |
| 173 | 200 | ||
diff --git a/arch/mips/include/asm/processor.h b/arch/mips/include/asm/processor.h index ad70cba8daff..05f08438a7c4 100644 --- a/arch/mips/include/asm/processor.h +++ b/arch/mips/include/asm/processor.h | |||
| @@ -238,7 +238,13 @@ typedef struct { | |||
| 238 | unsigned long seg; | 238 | unsigned long seg; |
| 239 | } mm_segment_t; | 239 | } mm_segment_t; |
| 240 | 240 | ||
| 241 | #define ARCH_MIN_TASKALIGN 8 | 241 | #ifdef CONFIG_CPU_HAS_MSA |
| 242 | # define ARCH_MIN_TASKALIGN 16 | ||
| 243 | # define FPU_ALIGN __aligned(16) | ||
| 244 | #else | ||
| 245 | # define ARCH_MIN_TASKALIGN 8 | ||
| 246 | # define FPU_ALIGN | ||
| 247 | #endif | ||
| 242 | 248 | ||
| 243 | struct mips_abi; | 249 | struct mips_abi; |
| 244 | 250 | ||
| @@ -255,7 +261,7 @@ struct thread_struct { | |||
| 255 | unsigned long cp0_status; | 261 | unsigned long cp0_status; |
| 256 | 262 | ||
| 257 | /* Saved fpu/fpu emulator stuff. */ | 263 | /* Saved fpu/fpu emulator stuff. */ |
| 258 | struct mips_fpu_struct fpu; | 264 | struct mips_fpu_struct fpu FPU_ALIGN; |
| 259 | #ifdef CONFIG_MIPS_MT_FPAFF | 265 | #ifdef CONFIG_MIPS_MT_FPAFF |
| 260 | /* Emulated instruction count */ | 266 | /* Emulated instruction count */ |
| 261 | unsigned long emulated_fp; | 267 | unsigned long emulated_fp; |
| @@ -367,6 +373,7 @@ unsigned long get_wchan(struct task_struct *p); | |||
| 367 | #define KSTK_STATUS(tsk) (task_pt_regs(tsk)->cp0_status) | 373 | #define KSTK_STATUS(tsk) (task_pt_regs(tsk)->cp0_status) |
| 368 | 374 | ||
| 369 | #define cpu_relax() barrier() | 375 | #define cpu_relax() barrier() |
| 376 | #define cpu_relax_lowlatency() cpu_relax() | ||
| 370 | 377 | ||
| 371 | /* | 378 | /* |
| 372 | * Return_address is a replacement for __builtin_return_address(count) | 379 | * Return_address is a replacement for __builtin_return_address(count) |
diff --git a/arch/mips/include/asm/ptrace.h b/arch/mips/include/asm/ptrace.h index 7e6e682aece3..fc783f843bdc 100644 --- a/arch/mips/include/asm/ptrace.h +++ b/arch/mips/include/asm/ptrace.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | struct pt_regs { | 23 | struct pt_regs { |
| 24 | #ifdef CONFIG_32BIT | 24 | #ifdef CONFIG_32BIT |
| 25 | /* Pad bytes for argument save space on the stack. */ | 25 | /* Pad bytes for argument save space on the stack. */ |
| 26 | unsigned long pad0[6]; | 26 | unsigned long pad0[8]; |
| 27 | #endif | 27 | #endif |
| 28 | 28 | ||
| 29 | /* Saved main processor registers. */ | 29 | /* Saved main processor registers. */ |
| @@ -47,8 +47,10 @@ struct pt_regs { | |||
| 47 | 47 | ||
| 48 | struct task_struct; | 48 | struct task_struct; |
| 49 | 49 | ||
| 50 | extern int ptrace_getregs(struct task_struct *child, __s64 __user *data); | 50 | extern int ptrace_getregs(struct task_struct *child, |
| 51 | extern int ptrace_setregs(struct task_struct *child, __s64 __user *data); | 51 | struct user_pt_regs __user *data); |
| 52 | extern int ptrace_setregs(struct task_struct *child, | ||
| 53 | struct user_pt_regs __user *data); | ||
| 52 | 54 | ||
| 53 | extern int ptrace_getfpregs(struct task_struct *child, __u32 __user *data); | 55 | extern int ptrace_getfpregs(struct task_struct *child, __u32 __user *data); |
| 54 | extern int ptrace_setfpregs(struct task_struct *child, __u32 __user *data); | 56 | extern int ptrace_setfpregs(struct task_struct *child, __u32 __user *data); |
diff --git a/arch/mips/include/asm/r4kcache.h b/arch/mips/include/asm/r4kcache.h index 0b8bd28a0df1..4520adc8699b 100644 --- a/arch/mips/include/asm/r4kcache.h +++ b/arch/mips/include/asm/r4kcache.h | |||
| @@ -19,6 +19,9 @@ | |||
| 19 | #include <asm/mipsmtregs.h> | 19 | #include <asm/mipsmtregs.h> |
| 20 | #include <asm/uaccess.h> /* for segment_eq() */ | 20 | #include <asm/uaccess.h> /* for segment_eq() */ |
| 21 | 21 | ||
| 22 | extern void (*r4k_blast_dcache)(void); | ||
| 23 | extern void (*r4k_blast_icache)(void); | ||
| 24 | |||
| 22 | /* | 25 | /* |
| 23 | * This macro return a properly sign-extended address suitable as base address | 26 | * This macro return a properly sign-extended address suitable as base address |
| 24 | * for indexed cache operations. Two issues here: | 27 | * for indexed cache operations. Two issues here: |
diff --git a/arch/mips/include/asm/reg.h b/arch/mips/include/asm/reg.h index 910e71a12466..84dc7e2e27a8 100644 --- a/arch/mips/include/asm/reg.h +++ b/arch/mips/include/asm/reg.h | |||
| @@ -1,128 +1 @@ | |||
| 1 | /* | #include <uapi/asm/reg.h> | |
| 2 | * Various register offset definitions for debuggers, core file | ||
| 3 | * examiners and whatnot. | ||
| 4 | * | ||
| 5 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 6 | * License. See the file "COPYING" in the main directory of this archive | ||
| 7 | * for more details. | ||
| 8 | * | ||
| 9 | * Copyright (C) 1995, 1999 Ralf Baechle | ||
| 10 | * Copyright (C) 1995, 1999 Silicon Graphics | ||
| 11 | */ | ||
| 12 | #ifndef __ASM_MIPS_REG_H | ||
| 13 | #define __ASM_MIPS_REG_H | ||
| 14 | |||
| 15 | |||
| 16 | #if defined(CONFIG_32BIT) || defined(WANT_COMPAT_REG_H) | ||
| 17 | |||
| 18 | #define EF_R0 6 | ||
| 19 | #define EF_R1 7 | ||
| 20 | #define EF_R2 8 | ||
| 21 | #define EF_R3 9 | ||
| 22 | #define EF_R4 10 | ||
| 23 | #define EF_R5 11 | ||
| 24 | #define EF_R6 12 | ||
| 25 | #define EF_R7 13 | ||
| 26 | #define EF_R8 14 | ||
| 27 | #define EF_R9 15 | ||
| 28 | #define EF_R10 16 | ||
| 29 | #define EF_R11 17 | ||
| 30 | #define EF_R12 18 | ||
| 31 | #define EF_R13 19 | ||
| 32 | #define EF_R14 20 | ||
| 33 | #define EF_R15 21 | ||
| 34 | #define EF_R16 22 | ||
| 35 | #define EF_R17 23 | ||
| 36 | #define EF_R18 24 | ||
| 37 | #define EF_R19 25 | ||
| 38 | #define EF_R20 26 | ||
| 39 | #define EF_R21 27 | ||
| 40 | #define EF_R22 28 | ||
| 41 | #define EF_R23 29 | ||
| 42 | #define EF_R24 30 | ||
| 43 | #define EF_R25 31 | ||
| 44 | |||
| 45 | /* | ||
| 46 | * k0/k1 unsaved | ||
| 47 | */ | ||
| 48 | #define EF_R26 32 | ||
| 49 | #define EF_R27 33 | ||
| 50 | |||
| 51 | #define EF_R28 34 | ||
| 52 | #define EF_R29 35 | ||
| 53 | #define EF_R30 36 | ||
| 54 | #define EF_R31 37 | ||
| 55 | |||
| 56 | /* | ||
| 57 | * Saved special registers | ||
| 58 | */ | ||
| 59 | #define EF_LO 38 | ||
| 60 | #define EF_HI 39 | ||
| 61 | |||
| 62 | #define EF_CP0_EPC 40 | ||
| 63 | #define EF_CP0_BADVADDR 41 | ||
| 64 | #define EF_CP0_STATUS 42 | ||
| 65 | #define EF_CP0_CAUSE 43 | ||
| 66 | #define EF_UNUSED0 44 | ||
| 67 | |||
| 68 | #define EF_SIZE 180 | ||
| 69 | |||
| 70 | #endif | ||
| 71 | |||
| 72 | #if defined(CONFIG_64BIT) && !defined(WANT_COMPAT_REG_H) | ||
| 73 | |||
| 74 | #define EF_R0 0 | ||
| 75 | #define EF_R1 1 | ||
| 76 | #define EF_R2 2 | ||
| 77 | #define EF_R3 3 | ||
| 78 | #define EF_R4 4 | ||
| 79 | #define EF_R5 5 | ||
| 80 | #define EF_R6 6 | ||
| 81 | #define EF_R7 7 | ||
| 82 | #define EF_R8 8 | ||
| 83 | #define EF_R9 9 | ||
| 84 | #define EF_R10 10 | ||
| 85 | #define EF_R11 11 | ||
| 86 | #define EF_R12 12 | ||
| 87 | #define EF_R13 13 | ||
| 88 | #define EF_R14 14 | ||
| 89 | #define EF_R15 15 | ||
| 90 | #define EF_R16 16 | ||
| 91 | #define EF_R17 17 | ||
| 92 | #define EF_R18 18 | ||
| 93 | #define EF_R19 19 | ||
| 94 | #define EF_R20 20 | ||
| 95 | #define EF_R21 21 | ||
| 96 | #define EF_R22 22 | ||
| 97 | #define EF_R23 23 | ||
| 98 | #define EF_R24 24 | ||
| 99 | #define EF_R25 25 | ||
| 100 | |||
| 101 | /* | ||
| 102 | * k0/k1 unsaved | ||
| 103 | */ | ||
| 104 | #define EF_R26 26 | ||
| 105 | #define EF_R27 27 | ||
| 106 | |||
| 107 | |||
| 108 | #define EF_R28 28 | ||
| 109 | #define EF_R29 29 | ||
| 110 | #define EF_R30 30 | ||
| 111 | #define EF_R31 31 | ||
| 112 | |||
| 113 | /* | ||
| 114 | * Saved special registers | ||
| 115 | */ | ||
| 116 | #define EF_LO 32 | ||
| 117 | #define EF_HI 33 | ||
| 118 | |||
| 119 | #define EF_CP0_EPC 34 | ||
| 120 | #define EF_CP0_BADVADDR 35 | ||
| 121 | #define EF_CP0_STATUS 36 | ||
| 122 | #define EF_CP0_CAUSE 37 | ||
| 123 | |||
| 124 | #define EF_SIZE 304 /* size in bytes */ | ||
| 125 | |||
| 126 | #endif /* CONFIG_64BIT */ | ||
| 127 | |||
| 128 | #endif /* __ASM_MIPS_REG_H */ | ||
diff --git a/arch/mips/include/asm/smp-cps.h b/arch/mips/include/asm/smp-cps.h index a06a08a9afc6..326c16ebd589 100644 --- a/arch/mips/include/asm/smp-cps.h +++ b/arch/mips/include/asm/smp-cps.h | |||
| @@ -31,11 +31,19 @@ extern void mips_cps_core_init(void); | |||
| 31 | 31 | ||
| 32 | extern struct vpe_boot_config *mips_cps_boot_vpes(void); | 32 | extern struct vpe_boot_config *mips_cps_boot_vpes(void); |
| 33 | 33 | ||
| 34 | extern bool mips_cps_smp_in_use(void); | ||
| 35 | |||
| 36 | extern void mips_cps_pm_save(void); | 34 | extern void mips_cps_pm_save(void); |
| 37 | extern void mips_cps_pm_restore(void); | 35 | extern void mips_cps_pm_restore(void); |
| 38 | 36 | ||
| 37 | #ifdef CONFIG_MIPS_CPS | ||
| 38 | |||
| 39 | extern bool mips_cps_smp_in_use(void); | ||
| 40 | |||
| 41 | #else /* !CONFIG_MIPS_CPS */ | ||
| 42 | |||
| 43 | static inline bool mips_cps_smp_in_use(void) { return false; } | ||
| 44 | |||
| 45 | #endif /* !CONFIG_MIPS_CPS */ | ||
| 46 | |||
| 39 | #else /* __ASSEMBLY__ */ | 47 | #else /* __ASSEMBLY__ */ |
| 40 | 48 | ||
| 41 | .extern mips_cps_bootcfg; | 49 | .extern mips_cps_bootcfg; |
diff --git a/arch/mips/include/asm/smp.h b/arch/mips/include/asm/smp.h index b037334fca22..1e0f20a9cdda 100644 --- a/arch/mips/include/asm/smp.h +++ b/arch/mips/include/asm/smp.h | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | 22 | ||
| 23 | extern int smp_num_siblings; | 23 | extern int smp_num_siblings; |
| 24 | extern cpumask_t cpu_sibling_map[]; | 24 | extern cpumask_t cpu_sibling_map[]; |
| 25 | extern cpumask_t cpu_core_map[]; | ||
| 25 | 26 | ||
| 26 | #define raw_smp_processor_id() (current_thread_info()->cpu) | 27 | #define raw_smp_processor_id() (current_thread_info()->cpu) |
| 27 | 28 | ||
| @@ -36,6 +37,11 @@ extern int __cpu_logical_map[NR_CPUS]; | |||
| 36 | 37 | ||
| 37 | #define NO_PROC_ID (-1) | 38 | #define NO_PROC_ID (-1) |
| 38 | 39 | ||
| 40 | #define topology_physical_package_id(cpu) (cpu_data[cpu].package) | ||
| 41 | #define topology_core_id(cpu) (cpu_data[cpu].core) | ||
| 42 | #define topology_core_cpumask(cpu) (&cpu_core_map[cpu]) | ||
| 43 | #define topology_thread_cpumask(cpu) (&cpu_sibling_map[cpu]) | ||
| 44 | |||
| 39 | #define SMP_RESCHEDULE_YOURSELF 0x1 /* XXX braindead */ | 45 | #define SMP_RESCHEDULE_YOURSELF 0x1 /* XXX braindead */ |
| 40 | #define SMP_CALL_FUNCTION 0x2 | 46 | #define SMP_CALL_FUNCTION 0x2 |
| 41 | /* Octeon - Tell another core to flush its icache */ | 47 | /* Octeon - Tell another core to flush its icache */ |
diff --git a/arch/mips/include/asm/sparsemem.h b/arch/mips/include/asm/sparsemem.h index d2da53c2c2f8..b1071c1e54f5 100644 --- a/arch/mips/include/asm/sparsemem.h +++ b/arch/mips/include/asm/sparsemem.h | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | #else | 11 | #else |
| 12 | # define SECTION_SIZE_BITS 28 | 12 | # define SECTION_SIZE_BITS 28 |
| 13 | #endif | 13 | #endif |
| 14 | #define MAX_PHYSMEM_BITS 35 | 14 | #define MAX_PHYSMEM_BITS 48 |
| 15 | 15 | ||
| 16 | #endif /* CONFIG_SPARSEMEM */ | 16 | #endif /* CONFIG_SPARSEMEM */ |
| 17 | #endif /* _MIPS_SPARSEMEM_H */ | 17 | #endif /* _MIPS_SPARSEMEM_H */ |
diff --git a/arch/mips/include/asm/user.h b/arch/mips/include/asm/user.h deleted file mode 100644 index 6bad61b0a53a..000000000000 --- a/arch/mips/include/asm/user.h +++ /dev/null | |||
| @@ -1,58 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 3 | * License. See the file "COPYING" in the main directory of this archive | ||
| 4 | * for more details. | ||
| 5 | * | ||
| 6 | * Copyright (C) 1994, 1995, 1996, 1999 by Ralf Baechle | ||
| 7 | */ | ||
| 8 | #ifndef _ASM_USER_H | ||
| 9 | #define _ASM_USER_H | ||
| 10 | |||
| 11 | #include <asm/page.h> | ||
| 12 | #include <asm/reg.h> | ||
| 13 | |||
| 14 | /* | ||
| 15 | * Core file format: The core file is written in such a way that gdb | ||
| 16 | * can understand it and provide useful information to the user (under | ||
| 17 | * linux we use the `trad-core' bfd, NOT the irix-core). The file | ||
| 18 | * contents are as follows: | ||
| 19 | * | ||
| 20 | * upage: 1 page consisting of a user struct that tells gdb | ||
| 21 | * what is present in the file. Directly after this is a | ||
| 22 | * copy of the task_struct, which is currently not used by gdb, | ||
| 23 | * but it may come in handy at some point. All of the registers | ||
| 24 | * are stored as part of the upage. The upage should always be | ||
| 25 | * only one page long. | ||
| 26 | * data: The data segment follows next. We use current->end_text to | ||
| 27 | * current->brk to pick up all of the user variables, plus any memory | ||
| 28 | * that may have been sbrk'ed. No attempt is made to determine if a | ||
| 29 | * page is demand-zero or if a page is totally unused, we just cover | ||
| 30 | * the entire range. All of the addresses are rounded in such a way | ||
| 31 | * that an integral number of pages is written. | ||
| 32 | * stack: We need the stack information in order to get a meaningful | ||
| 33 | * backtrace. We need to write the data from usp to | ||
| 34 | * current->start_stack, so we round each of these in order to be able | ||
| 35 | * to write an integer number of pages. | ||
| 36 | */ | ||
| 37 | struct user { | ||
| 38 | unsigned long regs[EF_SIZE / /* integer and fp regs */ | ||
| 39 | sizeof(unsigned long) + 64]; | ||
| 40 | size_t u_tsize; /* text size (pages) */ | ||
| 41 | size_t u_dsize; /* data size (pages) */ | ||
| 42 | size_t u_ssize; /* stack size (pages) */ | ||
| 43 | unsigned long start_code; /* text starting address */ | ||
| 44 | unsigned long start_data; /* data starting address */ | ||
| 45 | unsigned long start_stack; /* stack starting address */ | ||
| 46 | long int signal; /* signal causing core dump */ | ||
| 47 | unsigned long u_ar0; /* help gdb find registers */ | ||
| 48 | unsigned long magic; /* identifies a core file */ | ||
| 49 | char u_comm[32]; /* user command name */ | ||
| 50 | }; | ||
| 51 | |||
| 52 | #define NBPG PAGE_SIZE | ||
| 53 | #define UPAGES 1 | ||
| 54 | #define HOST_TEXT_START_ADDR (u.start_code) | ||
| 55 | #define HOST_DATA_START_ADDR (u.start_data) | ||
| 56 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) | ||
| 57 | |||
| 58 | #endif /* _ASM_USER_H */ | ||
diff --git a/arch/mips/include/uapi/asm/ptrace.h b/arch/mips/include/uapi/asm/ptrace.h index b26f7e317279..bbcfb8ba8106 100644 --- a/arch/mips/include/uapi/asm/ptrace.h +++ b/arch/mips/include/uapi/asm/ptrace.h | |||
| @@ -22,24 +22,27 @@ | |||
| 22 | #define DSP_CONTROL 77 | 22 | #define DSP_CONTROL 77 |
| 23 | #define ACX 78 | 23 | #define ACX 78 |
| 24 | 24 | ||
| 25 | #ifndef __KERNEL__ | ||
| 26 | /* | 25 | /* |
| 27 | * This struct defines the way the registers are stored on the stack during a | 26 | * This struct defines the registers as used by PTRACE_{GET,SET}REGS. The |
| 28 | * system call/exception. As usual the registers k0/k1 aren't being saved. | 27 | * format is the same for both 32- and 64-bit processes. Registers for 32-bit |
| 28 | * processes are sign extended. | ||
| 29 | */ | 29 | */ |
| 30 | #ifdef __KERNEL__ | ||
| 31 | struct user_pt_regs { | ||
| 32 | #else | ||
| 30 | struct pt_regs { | 33 | struct pt_regs { |
| 34 | #endif | ||
| 31 | /* Saved main processor registers. */ | 35 | /* Saved main processor registers. */ |
| 32 | unsigned long regs[32]; | 36 | __u64 regs[32]; |
| 33 | 37 | ||
| 34 | /* Saved special registers. */ | 38 | /* Saved special registers. */ |
| 35 | unsigned long cp0_status; | 39 | __u64 lo; |
| 36 | unsigned long hi; | 40 | __u64 hi; |
| 37 | unsigned long lo; | 41 | __u64 cp0_epc; |
| 38 | unsigned long cp0_badvaddr; | 42 | __u64 cp0_badvaddr; |
| 39 | unsigned long cp0_cause; | 43 | __u64 cp0_status; |
| 40 | unsigned long cp0_epc; | 44 | __u64 cp0_cause; |
| 41 | } __attribute__ ((aligned (8))); | 45 | } __attribute__ ((aligned (8))); |
| 42 | #endif /* __KERNEL__ */ | ||
| 43 | 46 | ||
| 44 | /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ | 47 | /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ |
| 45 | #define PTRACE_GETREGS 12 | 48 | #define PTRACE_GETREGS 12 |
diff --git a/arch/mips/include/uapi/asm/reg.h b/arch/mips/include/uapi/asm/reg.h new file mode 100644 index 000000000000..081e377f4f02 --- /dev/null +++ b/arch/mips/include/uapi/asm/reg.h | |||
| @@ -0,0 +1,206 @@ | |||
| 1 | /* | ||
| 2 | * Various register offset definitions for debuggers, core file | ||
| 3 | * examiners and whatnot. | ||
| 4 | * | ||
| 5 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 6 | * License. See the file "COPYING" in the main directory of this archive | ||
| 7 | * for more details. | ||
| 8 | * | ||
| 9 | * Copyright (C) 1995, 1999 Ralf Baechle | ||
| 10 | * Copyright (C) 1995, 1999 Silicon Graphics | ||
| 11 | */ | ||
| 12 | #ifndef __UAPI_ASM_MIPS_REG_H | ||
| 13 | #define __UAPI_ASM_MIPS_REG_H | ||
| 14 | |||
| 15 | #define MIPS32_EF_R0 6 | ||
| 16 | #define MIPS32_EF_R1 7 | ||
| 17 | #define MIPS32_EF_R2 8 | ||
| 18 | #define MIPS32_EF_R3 9 | ||
| 19 | #define MIPS32_EF_R4 10 | ||
| 20 | #define MIPS32_EF_R5 11 | ||
| 21 | #define MIPS32_EF_R6 12 | ||
| 22 | #define MIPS32_EF_R7 13 | ||
| 23 | #define MIPS32_EF_R8 14 | ||
| 24 | #define MIPS32_EF_R9 15 | ||
| 25 | #define MIPS32_EF_R10 16 | ||
| 26 | #define MIPS32_EF_R11 17 | ||
| 27 | #define MIPS32_EF_R12 18 | ||
| 28 | #define MIPS32_EF_R13 19 | ||
| 29 | #define MIPS32_EF_R14 20 | ||
| 30 | #define MIPS32_EF_R15 21 | ||
| 31 | #define MIPS32_EF_R16 22 | ||
| 32 | #define MIPS32_EF_R17 23 | ||
| 33 | #define MIPS32_EF_R18 24 | ||
| 34 | #define MIPS32_EF_R19 25 | ||
| 35 | #define MIPS32_EF_R20 26 | ||
| 36 | #define MIPS32_EF_R21 27 | ||
| 37 | #define MIPS32_EF_R22 28 | ||
| 38 | #define MIPS32_EF_R23 29 | ||
| 39 | #define MIPS32_EF_R24 30 | ||
| 40 | #define MIPS32_EF_R25 31 | ||
| 41 | |||
| 42 | /* | ||
| 43 | * k0/k1 unsaved | ||
| 44 | */ | ||
| 45 | #define MIPS32_EF_R26 32 | ||
| 46 | #define MIPS32_EF_R27 33 | ||
| 47 | |||
| 48 | #define MIPS32_EF_R28 34 | ||
| 49 | #define MIPS32_EF_R29 35 | ||
| 50 | #define MIPS32_EF_R30 36 | ||
| 51 | #define MIPS32_EF_R31 37 | ||
| 52 | |||
| 53 | /* | ||
| 54 | * Saved special registers | ||
| 55 | */ | ||
| 56 | #define MIPS32_EF_LO 38 | ||
| 57 | #define MIPS32_EF_HI 39 | ||
| 58 | |||
| 59 | #define MIPS32_EF_CP0_EPC 40 | ||
| 60 | #define MIPS32_EF_CP0_BADVADDR 41 | ||
| 61 | #define MIPS32_EF_CP0_STATUS 42 | ||
| 62 | #define MIPS32_EF_CP0_CAUSE 43 | ||
| 63 | #define MIPS32_EF_UNUSED0 44 | ||
| 64 | |||
| 65 | #define MIPS32_EF_SIZE 180 | ||
| 66 | |||
| 67 | #define MIPS64_EF_R0 0 | ||
| 68 | #define MIPS64_EF_R1 1 | ||
| 69 | #define MIPS64_EF_R2 2 | ||
| 70 | #define MIPS64_EF_R3 3 | ||
| 71 | #define MIPS64_EF_R4 4 | ||
| 72 | #define MIPS64_EF_R5 5 | ||
| 73 | #define MIPS64_EF_R6 6 | ||
| 74 | #define MIPS64_EF_R7 7 | ||
| 75 | #define MIPS64_EF_R8 8 | ||
| 76 | #define MIPS64_EF_R9 9 | ||
| 77 | #define MIPS64_EF_R10 10 | ||
| 78 | #define MIPS64_EF_R11 11 | ||
| 79 | #define MIPS64_EF_R12 12 | ||
| 80 | #define MIPS64_EF_R13 13 | ||
| 81 | #define MIPS64_EF_R14 14 | ||
| 82 | #define MIPS64_EF_R15 15 | ||
| 83 | #define MIPS64_EF_R16 16 | ||
| 84 | #define MIPS64_EF_R17 17 | ||
| 85 | #define MIPS64_EF_R18 18 | ||
| 86 | #define MIPS64_EF_R19 19 | ||
| 87 | #define MIPS64_EF_R20 20 | ||
| 88 | #define MIPS64_EF_R21 21 | ||
| 89 | #define MIPS64_EF_R22 22 | ||
| 90 | #define MIPS64_EF_R23 23 | ||
| 91 | #define MIPS64_EF_R24 24 | ||
| 92 | #define MIPS64_EF_R25 25 | ||
| 93 | |||
| 94 | /* | ||
| 95 | * k0/k1 unsaved | ||
| 96 | */ | ||
| 97 | #define MIPS64_EF_R26 26 | ||
| 98 | #define MIPS64_EF_R27 27 | ||
| 99 | |||
| 100 | |||
| 101 | #define MIPS64_EF_R28 28 | ||
| 102 | #define MIPS64_EF_R29 29 | ||
| 103 | #define MIPS64_EF_R30 30 | ||
| 104 | #define MIPS64_EF_R31 31 | ||
| 105 | |||
| 106 | /* | ||
| 107 | * Saved special registers | ||
| 108 | */ | ||
| 109 | #define MIPS64_EF_LO 32 | ||
| 110 | #define MIPS64_EF_HI 33 | ||
| 111 | |||
| 112 | #define MIPS64_EF_CP0_EPC 34 | ||
| 113 | #define MIPS64_EF_CP0_BADVADDR 35 | ||
| 114 | #define MIPS64_EF_CP0_STATUS 36 | ||
| 115 | #define MIPS64_EF_CP0_CAUSE 37 | ||
| 116 | |||
| 117 | #define MIPS64_EF_SIZE 304 /* size in bytes */ | ||
| 118 | |||
| 119 | #if _MIPS_SIM == _MIPS_SIM_ABI32 | ||
| 120 | |||
| 121 | #define EF_R0 MIPS32_EF_R0 | ||
| 122 | #define EF_R1 MIPS32_EF_R1 | ||
| 123 | #define EF_R2 MIPS32_EF_R2 | ||
| 124 | #define EF_R3 MIPS32_EF_R3 | ||
| 125 | #define EF_R4 MIPS32_EF_R4 | ||
| 126 | #define EF_R5 MIPS32_EF_R5 | ||
| 127 | #define EF_R6 MIPS32_EF_R6 | ||
| 128 | #define EF_R7 MIPS32_EF_R7 | ||
| 129 | #define EF_R8 MIPS32_EF_R8 | ||
| 130 | #define EF_R9 MIPS32_EF_R9 | ||
| 131 | #define EF_R10 MIPS32_EF_R10 | ||
| 132 | #define EF_R11 MIPS32_EF_R11 | ||
| 133 | #define EF_R12 MIPS32_EF_R12 | ||
| 134 | #define EF_R13 MIPS32_EF_R13 | ||
| 135 | #define EF_R14 MIPS32_EF_R14 | ||
| 136 | #define EF_R15 MIPS32_EF_R15 | ||
| 137 | #define EF_R16 MIPS32_EF_R16 | ||
| 138 | #define EF_R17 MIPS32_EF_R17 | ||
| 139 | #define EF_R18 MIPS32_EF_R18 | ||
| 140 | #define EF_R19 MIPS32_EF_R19 | ||
| 141 | #define EF_R20 MIPS32_EF_R20 | ||
| 142 | #define EF_R21 MIPS32_EF_R21 | ||
| 143 | #define EF_R22 MIPS32_EF_R22 | ||
| 144 | #define EF_R23 MIPS32_EF_R23 | ||
| 145 | #define EF_R24 MIPS32_EF_R24 | ||
| 146 | #define EF_R25 MIPS32_EF_R25 | ||
| 147 | #define EF_R26 MIPS32_EF_R26 | ||
| 148 | #define EF_R27 MIPS32_EF_R27 | ||
| 149 | #define EF_R28 MIPS32_EF_R28 | ||
| 150 | #define EF_R29 MIPS32_EF_R29 | ||
| 151 | #define EF_R30 MIPS32_EF_R30 | ||
| 152 | #define EF_R31 MIPS32_EF_R31 | ||
| 153 | #define EF_LO MIPS32_EF_LO | ||
| 154 | #define EF_HI MIPS32_EF_HI | ||
| 155 | #define EF_CP0_EPC MIPS32_EF_CP0_EPC | ||
| 156 | #define EF_CP0_BADVADDR MIPS32_EF_CP0_BADVADDR | ||
| 157 | #define EF_CP0_STATUS MIPS32_EF_CP0_STATUS | ||
| 158 | #define EF_CP0_CAUSE MIPS32_EF_CP0_CAUSE | ||
| 159 | #define EF_UNUSED0 MIPS32_EF_UNUSED0 | ||
| 160 | #define EF_SIZE MIPS32_EF_SIZE | ||
| 161 | |||
| 162 | #elif _MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32 | ||
| 163 | |||
| 164 | #define EF_R0 MIPS64_EF_R0 | ||
| 165 | #define EF_R1 MIPS64_EF_R1 | ||
| 166 | #define EF_R2 MIPS64_EF_R2 | ||
| 167 | #define EF_R3 MIPS64_EF_R3 | ||
| 168 | #define EF_R4 MIPS64_EF_R4 | ||
| 169 | #define EF_R5 MIPS64_EF_R5 | ||
| 170 | #define EF_R6 MIPS64_EF_R6 | ||
| 171 | #define EF_R7 MIPS64_EF_R7 | ||
| 172 | #define EF_R8 MIPS64_EF_R8 | ||
| 173 | #define EF_R9 MIPS64_EF_R9 | ||
| 174 | #define EF_R10 MIPS64_EF_R10 | ||
| 175 | #define EF_R11 MIPS64_EF_R11 | ||
| 176 | #define EF_R12 MIPS64_EF_R12 | ||
| 177 | #define EF_R13 MIPS64_EF_R13 | ||
| 178 | #define EF_R14 MIPS64_EF_R14 | ||
| 179 | #define EF_R15 MIPS64_EF_R15 | ||
| 180 | #define EF_R16 MIPS64_EF_R16 | ||
| 181 | #define EF_R17 MIPS64_EF_R17 | ||
| 182 | #define EF_R18 MIPS64_EF_R18 | ||
| 183 | #define EF_R19 MIPS64_EF_R19 | ||
| 184 | #define EF_R20 MIPS64_EF_R20 | ||
| 185 | #define EF_R21 MIPS64_EF_R21 | ||
| 186 | #define EF_R22 MIPS64_EF_R22 | ||
| 187 | #define EF_R23 MIPS64_EF_R23 | ||
| 188 | #define EF_R24 MIPS64_EF_R24 | ||
| 189 | #define EF_R25 MIPS64_EF_R25 | ||
| 190 | #define EF_R26 MIPS64_EF_R26 | ||
| 191 | #define EF_R27 MIPS64_EF_R27 | ||
| 192 | #define EF_R28 MIPS64_EF_R28 | ||
| 193 | #define EF_R29 MIPS64_EF_R29 | ||
| 194 | #define EF_R30 MIPS64_EF_R30 | ||
| 195 | #define EF_R31 MIPS64_EF_R31 | ||
| 196 | #define EF_LO MIPS64_EF_LO | ||
| 197 | #define EF_HI MIPS64_EF_HI | ||
| 198 | #define EF_CP0_EPC MIPS64_EF_CP0_EPC | ||
| 199 | #define EF_CP0_BADVADDR MIPS64_EF_CP0_BADVADDR | ||
| 200 | #define EF_CP0_STATUS MIPS64_EF_CP0_STATUS | ||
| 201 | #define EF_CP0_CAUSE MIPS64_EF_CP0_CAUSE | ||
| 202 | #define EF_SIZE MIPS64_EF_SIZE | ||
| 203 | |||
| 204 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32 */ | ||
| 205 | |||
| 206 | #endif /* __UAPI_ASM_MIPS_REG_H */ | ||
diff --git a/arch/mips/include/uapi/asm/unistd.h b/arch/mips/include/uapi/asm/unistd.h index 5805414777e0..9bc13eaf9d67 100644 --- a/arch/mips/include/uapi/asm/unistd.h +++ b/arch/mips/include/uapi/asm/unistd.h | |||
| @@ -372,16 +372,17 @@ | |||
| 372 | #define __NR_sched_setattr (__NR_Linux + 349) | 372 | #define __NR_sched_setattr (__NR_Linux + 349) |
| 373 | #define __NR_sched_getattr (__NR_Linux + 350) | 373 | #define __NR_sched_getattr (__NR_Linux + 350) |
| 374 | #define __NR_renameat2 (__NR_Linux + 351) | 374 | #define __NR_renameat2 (__NR_Linux + 351) |
| 375 | #define __NR_seccomp (__NR_Linux + 352) | ||
| 375 | 376 | ||
| 376 | /* | 377 | /* |
| 377 | * Offset of the last Linux o32 flavoured syscall | 378 | * Offset of the last Linux o32 flavoured syscall |
| 378 | */ | 379 | */ |
| 379 | #define __NR_Linux_syscalls 351 | 380 | #define __NR_Linux_syscalls 352 |
| 380 | 381 | ||
| 381 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ | 382 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ |
| 382 | 383 | ||
| 383 | #define __NR_O32_Linux 4000 | 384 | #define __NR_O32_Linux 4000 |
| 384 | #define __NR_O32_Linux_syscalls 351 | 385 | #define __NR_O32_Linux_syscalls 352 |
| 385 | 386 | ||
| 386 | #if _MIPS_SIM == _MIPS_SIM_ABI64 | 387 | #if _MIPS_SIM == _MIPS_SIM_ABI64 |
| 387 | 388 | ||
| @@ -701,16 +702,17 @@ | |||
| 701 | #define __NR_sched_setattr (__NR_Linux + 309) | 702 | #define __NR_sched_setattr (__NR_Linux + 309) |
| 702 | #define __NR_sched_getattr (__NR_Linux + 310) | 703 | #define __NR_sched_getattr (__NR_Linux + 310) |
| 703 | #define __NR_renameat2 (__NR_Linux + 311) | 704 | #define __NR_renameat2 (__NR_Linux + 311) |
| 705 | #define __NR_seccomp (__NR_Linux + 312) | ||
| 704 | 706 | ||
| 705 | /* | 707 | /* |
| 706 | * Offset of the last Linux 64-bit flavoured syscall | 708 | * Offset of the last Linux 64-bit flavoured syscall |
| 707 | */ | 709 | */ |
| 708 | #define __NR_Linux_syscalls 311 | 710 | #define __NR_Linux_syscalls 312 |
| 709 | 711 | ||
| 710 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ | 712 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ |
| 711 | 713 | ||
| 712 | #define __NR_64_Linux 5000 | 714 | #define __NR_64_Linux 5000 |
| 713 | #define __NR_64_Linux_syscalls 311 | 715 | #define __NR_64_Linux_syscalls 312 |
| 714 | 716 | ||
| 715 | #if _MIPS_SIM == _MIPS_SIM_NABI32 | 717 | #if _MIPS_SIM == _MIPS_SIM_NABI32 |
| 716 | 718 | ||
| @@ -1034,15 +1036,16 @@ | |||
| 1034 | #define __NR_sched_setattr (__NR_Linux + 313) | 1036 | #define __NR_sched_setattr (__NR_Linux + 313) |
| 1035 | #define __NR_sched_getattr (__NR_Linux + 314) | 1037 | #define __NR_sched_getattr (__NR_Linux + 314) |
| 1036 | #define __NR_renameat2 (__NR_Linux + 315) | 1038 | #define __NR_renameat2 (__NR_Linux + 315) |
| 1039 | #define __NR_seccomp (__NR_Linux + 316) | ||
| 1037 | 1040 | ||
| 1038 | /* | 1041 | /* |
| 1039 | * Offset of the last N32 flavoured syscall | 1042 | * Offset of the last N32 flavoured syscall |
| 1040 | */ | 1043 | */ |
| 1041 | #define __NR_Linux_syscalls 315 | 1044 | #define __NR_Linux_syscalls 316 |
| 1042 | 1045 | ||
| 1043 | #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ | 1046 | #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ |
| 1044 | 1047 | ||
| 1045 | #define __NR_N32_Linux 6000 | 1048 | #define __NR_N32_Linux 6000 |
| 1046 | #define __NR_N32_Linux_syscalls 315 | 1049 | #define __NR_N32_Linux_syscalls 316 |
| 1047 | 1050 | ||
| 1048 | #endif /* _UAPI_ASM_UNISTD_H */ | 1051 | #endif /* _UAPI_ASM_UNISTD_H */ |
