diff options
Diffstat (limited to 'arch/mips/mm')
-rw-r--r-- | arch/mips/mm/Makefile | 10 | ||||
-rw-r--r-- | arch/mips/mm/c-r4k.c | 43 | ||||
-rw-r--r-- | arch/mips/mm/dma-default.c | 5 | ||||
-rw-r--r-- | arch/mips/mm/gup.c | 2 | ||||
-rw-r--r-- | arch/mips/mm/init.c | 2 | ||||
-rw-r--r-- | arch/mips/mm/ioremap.c | 18 | ||||
-rw-r--r-- | arch/mips/mm/sc-r5k.c | 2 | ||||
-rw-r--r-- | arch/mips/mm/tlb-r4k.c | 2 | ||||
-rw-r--r-- | arch/mips/mm/tlbex.c | 18 | ||||
-rw-r--r-- | arch/mips/mm/uasm-mips.c | 2 | ||||
-rw-r--r-- | arch/mips/mm/uasm.c | 14 |
11 files changed, 87 insertions, 31 deletions
diff --git a/arch/mips/mm/Makefile b/arch/mips/mm/Makefile index 7f4f93ab22b7..67ede4ef9b8d 100644 --- a/arch/mips/mm/Makefile +++ b/arch/mips/mm/Makefile | |||
@@ -4,7 +4,13 @@ | |||
4 | 4 | ||
5 | obj-y += cache.o dma-default.o extable.o fault.o \ | 5 | obj-y += cache.o dma-default.o extable.o fault.o \ |
6 | gup.o init.o mmap.o page.o page-funcs.o \ | 6 | gup.o init.o mmap.o page.o page-funcs.o \ |
7 | tlbex.o tlbex-fault.o tlb-funcs.o uasm-mips.o | 7 | tlbex.o tlbex-fault.o tlb-funcs.o |
8 | |||
9 | ifdef CONFIG_CPU_MICROMIPS | ||
10 | obj-y += uasm-micromips.o | ||
11 | else | ||
12 | obj-y += uasm-mips.o | ||
13 | endif | ||
8 | 14 | ||
9 | obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o | 15 | obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o |
10 | obj-$(CONFIG_64BIT) += pgtable-64.o | 16 | obj-$(CONFIG_64BIT) += pgtable-64.o |
@@ -22,5 +28,3 @@ obj-$(CONFIG_IP22_CPU_SCACHE) += sc-ip22.o | |||
22 | obj-$(CONFIG_R5000_CPU_SCACHE) += sc-r5k.o | 28 | obj-$(CONFIG_R5000_CPU_SCACHE) += sc-r5k.o |
23 | obj-$(CONFIG_RM7000_CPU_SCACHE) += sc-rm7k.o | 29 | obj-$(CONFIG_RM7000_CPU_SCACHE) += sc-rm7k.o |
24 | obj-$(CONFIG_MIPS_CPU_SCACHE) += sc-mips.o | 30 | obj-$(CONFIG_MIPS_CPU_SCACHE) += sc-mips.o |
25 | |||
26 | obj-$(CONFIG_SYS_SUPPORTS_MICROMIPS) += uasm-micromips.o | ||
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c index fbcd8674ff1d..dd261df005c2 100644 --- a/arch/mips/mm/c-r4k.c +++ b/arch/mips/mm/c-r4k.c | |||
@@ -917,6 +917,18 @@ static inline void alias_74k_erratum(struct cpuinfo_mips *c) | |||
917 | } | 917 | } |
918 | } | 918 | } |
919 | 919 | ||
920 | static void b5k_instruction_hazard(void) | ||
921 | { | ||
922 | __sync(); | ||
923 | __sync(); | ||
924 | __asm__ __volatile__( | ||
925 | " nop; nop; nop; nop; nop; nop; nop; nop\n" | ||
926 | " nop; nop; nop; nop; nop; nop; nop; nop\n" | ||
927 | " nop; nop; nop; nop; nop; nop; nop; nop\n" | ||
928 | " nop; nop; nop; nop; nop; nop; nop; nop\n" | ||
929 | : : : "memory"); | ||
930 | } | ||
931 | |||
920 | static char *way_string[] = { NULL, "direct mapped", "2-way", | 932 | static char *way_string[] = { NULL, "direct mapped", "2-way", |
921 | "3-way", "4-way", "5-way", "6-way", "7-way", "8-way" | 933 | "3-way", "4-way", "5-way", "6-way", "7-way", "8-way" |
922 | }; | 934 | }; |
@@ -1683,6 +1695,37 @@ void r4k_cache_init(void) | |||
1683 | 1695 | ||
1684 | coherency_setup(); | 1696 | coherency_setup(); |
1685 | board_cache_error_setup = r4k_cache_error_setup; | 1697 | board_cache_error_setup = r4k_cache_error_setup; |
1698 | |||
1699 | /* | ||
1700 | * Per-CPU overrides | ||
1701 | */ | ||
1702 | switch (current_cpu_type()) { | ||
1703 | case CPU_BMIPS4350: | ||
1704 | case CPU_BMIPS4380: | ||
1705 | /* No IPI is needed because all CPUs share the same D$ */ | ||
1706 | flush_data_cache_page = r4k_blast_dcache_page; | ||
1707 | break; | ||
1708 | case CPU_BMIPS5000: | ||
1709 | /* We lose our superpowers if L2 is disabled */ | ||
1710 | if (c->scache.flags & MIPS_CACHE_NOT_PRESENT) | ||
1711 | break; | ||
1712 | |||
1713 | /* I$ fills from D$ just by emptying the write buffers */ | ||
1714 | flush_cache_page = (void *)b5k_instruction_hazard; | ||
1715 | flush_cache_range = (void *)b5k_instruction_hazard; | ||
1716 | flush_cache_sigtramp = (void *)b5k_instruction_hazard; | ||
1717 | local_flush_data_cache_page = (void *)b5k_instruction_hazard; | ||
1718 | flush_data_cache_page = (void *)b5k_instruction_hazard; | ||
1719 | flush_icache_range = (void *)b5k_instruction_hazard; | ||
1720 | local_flush_icache_range = (void *)b5k_instruction_hazard; | ||
1721 | |||
1722 | /* Cache aliases are handled in hardware; allow HIGHMEM */ | ||
1723 | current_cpu_data.dcache.flags &= ~MIPS_CACHE_ALIASES; | ||
1724 | |||
1725 | /* Optimization: an L2 flush implicitly flushes the L1 */ | ||
1726 | current_cpu_data.options |= MIPS_CPU_INCLUSIVE_CACHES; | ||
1727 | break; | ||
1728 | } | ||
1686 | } | 1729 | } |
1687 | 1730 | ||
1688 | static int r4k_cache_pm_notifier(struct notifier_block *self, unsigned long cmd, | 1731 | static int r4k_cache_pm_notifier(struct notifier_block *self, unsigned long cmd, |
diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c index 33ba3c558fe4..af5f046e627e 100644 --- a/arch/mips/mm/dma-default.c +++ b/arch/mips/mm/dma-default.c | |||
@@ -61,6 +61,11 @@ static inline struct page *dma_addr_to_page(struct device *dev, | |||
61 | * Warning on the terminology - Linux calls an uncached area coherent; | 61 | * Warning on the terminology - Linux calls an uncached area coherent; |
62 | * MIPS terminology calls memory areas with hardware maintained coherency | 62 | * MIPS terminology calls memory areas with hardware maintained coherency |
63 | * coherent. | 63 | * coherent. |
64 | * | ||
65 | * Note that the R14000 and R16000 should also be checked for in this | ||
66 | * condition. However this function is only called on non-I/O-coherent | ||
67 | * systems and only the R10000 and R12000 are used in such systems, the | ||
68 | * SGI IP28 Indigo² rsp. SGI IP32 aka O2. | ||
64 | */ | 69 | */ |
65 | static inline int cpu_needs_post_dma_flush(struct device *dev) | 70 | static inline int cpu_needs_post_dma_flush(struct device *dev) |
66 | { | 71 | { |
diff --git a/arch/mips/mm/gup.c b/arch/mips/mm/gup.c index 06ce17c2a905..7cba480568c8 100644 --- a/arch/mips/mm/gup.c +++ b/arch/mips/mm/gup.c | |||
@@ -17,7 +17,7 @@ | |||
17 | 17 | ||
18 | static inline pte_t gup_get_pte(pte_t *ptep) | 18 | static inline pte_t gup_get_pte(pte_t *ptep) |
19 | { | 19 | { |
20 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) | 20 | #if defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32) |
21 | pte_t pte; | 21 | pte_t pte; |
22 | 22 | ||
23 | retry: | 23 | retry: |
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index f42e35e42790..448cde372af0 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c | |||
@@ -95,7 +95,7 @@ static void *__kmap_pgprot(struct page *page, unsigned long addr, pgprot_t prot) | |||
95 | idx += in_interrupt() ? FIX_N_COLOURS : 0; | 95 | idx += in_interrupt() ? FIX_N_COLOURS : 0; |
96 | vaddr = __fix_to_virt(FIX_CMAP_END - idx); | 96 | vaddr = __fix_to_virt(FIX_CMAP_END - idx); |
97 | pte = mk_pte(page, prot); | 97 | pte = mk_pte(page, prot); |
98 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) | 98 | #if defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32) |
99 | entrylo = pte.pte_high; | 99 | entrylo = pte.pte_high; |
100 | #else | 100 | #else |
101 | entrylo = pte_to_entrylo(pte_val(pte)); | 101 | entrylo = pte_to_entrylo(pte_val(pte)); |
diff --git a/arch/mips/mm/ioremap.c b/arch/mips/mm/ioremap.c index 7f840bc08abf..8d5008cbdc0f 100644 --- a/arch/mips/mm/ioremap.c +++ b/arch/mips/mm/ioremap.c | |||
@@ -17,9 +17,9 @@ | |||
17 | #include <asm/tlbflush.h> | 17 | #include <asm/tlbflush.h> |
18 | 18 | ||
19 | static inline void remap_area_pte(pte_t * pte, unsigned long address, | 19 | static inline void remap_area_pte(pte_t * pte, unsigned long address, |
20 | phys_t size, phys_t phys_addr, unsigned long flags) | 20 | phys_addr_t size, phys_addr_t phys_addr, unsigned long flags) |
21 | { | 21 | { |
22 | phys_t end; | 22 | phys_addr_t end; |
23 | unsigned long pfn; | 23 | unsigned long pfn; |
24 | pgprot_t pgprot = __pgprot(_PAGE_GLOBAL | _PAGE_PRESENT | __READABLE | 24 | pgprot_t pgprot = __pgprot(_PAGE_GLOBAL | _PAGE_PRESENT | __READABLE |
25 | | __WRITEABLE | flags); | 25 | | __WRITEABLE | flags); |
@@ -43,9 +43,9 @@ static inline void remap_area_pte(pte_t * pte, unsigned long address, | |||
43 | } | 43 | } |
44 | 44 | ||
45 | static inline int remap_area_pmd(pmd_t * pmd, unsigned long address, | 45 | static inline int remap_area_pmd(pmd_t * pmd, unsigned long address, |
46 | phys_t size, phys_t phys_addr, unsigned long flags) | 46 | phys_addr_t size, phys_addr_t phys_addr, unsigned long flags) |
47 | { | 47 | { |
48 | phys_t end; | 48 | phys_addr_t end; |
49 | 49 | ||
50 | address &= ~PGDIR_MASK; | 50 | address &= ~PGDIR_MASK; |
51 | end = address + size; | 51 | end = address + size; |
@@ -64,8 +64,8 @@ static inline int remap_area_pmd(pmd_t * pmd, unsigned long address, | |||
64 | return 0; | 64 | return 0; |
65 | } | 65 | } |
66 | 66 | ||
67 | static int remap_area_pages(unsigned long address, phys_t phys_addr, | 67 | static int remap_area_pages(unsigned long address, phys_addr_t phys_addr, |
68 | phys_t size, unsigned long flags) | 68 | phys_addr_t size, unsigned long flags) |
69 | { | 69 | { |
70 | int error; | 70 | int error; |
71 | pgd_t * dir; | 71 | pgd_t * dir; |
@@ -111,13 +111,13 @@ static int remap_area_pages(unsigned long address, phys_t phys_addr, | |||
111 | * caller shouldn't need to know that small detail. | 111 | * caller shouldn't need to know that small detail. |
112 | */ | 112 | */ |
113 | 113 | ||
114 | #define IS_LOW512(addr) (!((phys_t)(addr) & (phys_t) ~0x1fffffffULL)) | 114 | #define IS_LOW512(addr) (!((phys_addr_t)(addr) & (phys_addr_t) ~0x1fffffffULL)) |
115 | 115 | ||
116 | void __iomem * __ioremap(phys_t phys_addr, phys_t size, unsigned long flags) | 116 | void __iomem * __ioremap(phys_addr_t phys_addr, phys_addr_t size, unsigned long flags) |
117 | { | 117 | { |
118 | struct vm_struct * area; | 118 | struct vm_struct * area; |
119 | unsigned long offset; | 119 | unsigned long offset; |
120 | phys_t last_addr; | 120 | phys_addr_t last_addr; |
121 | void * addr; | 121 | void * addr; |
122 | 122 | ||
123 | phys_addr = fixup_bigphys_addr(phys_addr, size); | 123 | phys_addr = fixup_bigphys_addr(phys_addr, size); |
diff --git a/arch/mips/mm/sc-r5k.c b/arch/mips/mm/sc-r5k.c index 0216ed6eaa2a..751b5cd18bf2 100644 --- a/arch/mips/mm/sc-r5k.c +++ b/arch/mips/mm/sc-r5k.c | |||
@@ -81,7 +81,7 @@ static inline int __init r5k_sc_probe(void) | |||
81 | unsigned long config = read_c0_config(); | 81 | unsigned long config = read_c0_config(); |
82 | 82 | ||
83 | if (config & CONF_SC) | 83 | if (config & CONF_SC) |
84 | return(0); | 84 | return 0; |
85 | 85 | ||
86 | scache_size = (512 * 1024) << ((config & R5K_CONF_SS) >> 20); | 86 | scache_size = (512 * 1024) << ((config & R5K_CONF_SS) >> 20); |
87 | 87 | ||
diff --git a/arch/mips/mm/tlb-r4k.c b/arch/mips/mm/tlb-r4k.c index c3917e251f59..e90b2e899291 100644 --- a/arch/mips/mm/tlb-r4k.c +++ b/arch/mips/mm/tlb-r4k.c | |||
@@ -332,7 +332,7 @@ void __update_tlb(struct vm_area_struct * vma, unsigned long address, pte_t pte) | |||
332 | { | 332 | { |
333 | ptep = pte_offset_map(pmdp, address); | 333 | ptep = pte_offset_map(pmdp, address); |
334 | 334 | ||
335 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) | 335 | #if defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32) |
336 | write_c0_entrylo0(ptep->pte_high); | 336 | write_c0_entrylo0(ptep->pte_high); |
337 | ptep++; | 337 | ptep++; |
338 | write_c0_entrylo1(ptep->pte_high); | 338 | write_c0_entrylo1(ptep->pte_high); |
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c index e3328a96e809..3978a3d81366 100644 --- a/arch/mips/mm/tlbex.c +++ b/arch/mips/mm/tlbex.c | |||
@@ -637,7 +637,7 @@ static __maybe_unused void build_convert_pte_to_entrylo(u32 **p, | |||
637 | if (cpu_has_rixi) { | 637 | if (cpu_has_rixi) { |
638 | UASM_i_ROTR(p, reg, reg, ilog2(_PAGE_GLOBAL)); | 638 | UASM_i_ROTR(p, reg, reg, ilog2(_PAGE_GLOBAL)); |
639 | } else { | 639 | } else { |
640 | #ifdef CONFIG_64BIT_PHYS_ADDR | 640 | #ifdef CONFIG_PHYS_ADDR_T_64BIT |
641 | uasm_i_dsrl_safe(p, reg, reg, ilog2(_PAGE_GLOBAL)); | 641 | uasm_i_dsrl_safe(p, reg, reg, ilog2(_PAGE_GLOBAL)); |
642 | #else | 642 | #else |
643 | UASM_i_SRL(p, reg, reg, ilog2(_PAGE_GLOBAL)); | 643 | UASM_i_SRL(p, reg, reg, ilog2(_PAGE_GLOBAL)); |
@@ -1009,7 +1009,7 @@ static void build_update_entries(u32 **p, unsigned int tmp, unsigned int ptep) | |||
1009 | * 64bit address support (36bit on a 32bit CPU) in a 32bit | 1009 | * 64bit address support (36bit on a 32bit CPU) in a 32bit |
1010 | * Kernel is a special case. Only a few CPUs use it. | 1010 | * Kernel is a special case. Only a few CPUs use it. |
1011 | */ | 1011 | */ |
1012 | #ifdef CONFIG_64BIT_PHYS_ADDR | 1012 | #ifdef CONFIG_PHYS_ADDR_T_64BIT |
1013 | if (cpu_has_64bits) { | 1013 | if (cpu_has_64bits) { |
1014 | uasm_i_ld(p, tmp, 0, ptep); /* get even pte */ | 1014 | uasm_i_ld(p, tmp, 0, ptep); /* get even pte */ |
1015 | uasm_i_ld(p, ptep, sizeof(pte_t), ptep); /* get odd pte */ | 1015 | uasm_i_ld(p, ptep, sizeof(pte_t), ptep); /* get odd pte */ |
@@ -1510,14 +1510,14 @@ static void | |||
1510 | iPTE_LW(u32 **p, unsigned int pte, unsigned int ptr) | 1510 | iPTE_LW(u32 **p, unsigned int pte, unsigned int ptr) |
1511 | { | 1511 | { |
1512 | #ifdef CONFIG_SMP | 1512 | #ifdef CONFIG_SMP |
1513 | # ifdef CONFIG_64BIT_PHYS_ADDR | 1513 | # ifdef CONFIG_PHYS_ADDR_T_64BIT |
1514 | if (cpu_has_64bits) | 1514 | if (cpu_has_64bits) |
1515 | uasm_i_lld(p, pte, 0, ptr); | 1515 | uasm_i_lld(p, pte, 0, ptr); |
1516 | else | 1516 | else |
1517 | # endif | 1517 | # endif |
1518 | UASM_i_LL(p, pte, 0, ptr); | 1518 | UASM_i_LL(p, pte, 0, ptr); |
1519 | #else | 1519 | #else |
1520 | # ifdef CONFIG_64BIT_PHYS_ADDR | 1520 | # ifdef CONFIG_PHYS_ADDR_T_64BIT |
1521 | if (cpu_has_64bits) | 1521 | if (cpu_has_64bits) |
1522 | uasm_i_ld(p, pte, 0, ptr); | 1522 | uasm_i_ld(p, pte, 0, ptr); |
1523 | else | 1523 | else |
@@ -1530,13 +1530,13 @@ static void | |||
1530 | iPTE_SW(u32 **p, struct uasm_reloc **r, unsigned int pte, unsigned int ptr, | 1530 | iPTE_SW(u32 **p, struct uasm_reloc **r, unsigned int pte, unsigned int ptr, |
1531 | unsigned int mode) | 1531 | unsigned int mode) |
1532 | { | 1532 | { |
1533 | #ifdef CONFIG_64BIT_PHYS_ADDR | 1533 | #ifdef CONFIG_PHYS_ADDR_T_64BIT |
1534 | unsigned int hwmode = mode & (_PAGE_VALID | _PAGE_DIRTY); | 1534 | unsigned int hwmode = mode & (_PAGE_VALID | _PAGE_DIRTY); |
1535 | #endif | 1535 | #endif |
1536 | 1536 | ||
1537 | uasm_i_ori(p, pte, pte, mode); | 1537 | uasm_i_ori(p, pte, pte, mode); |
1538 | #ifdef CONFIG_SMP | 1538 | #ifdef CONFIG_SMP |
1539 | # ifdef CONFIG_64BIT_PHYS_ADDR | 1539 | # ifdef CONFIG_PHYS_ADDR_T_64BIT |
1540 | if (cpu_has_64bits) | 1540 | if (cpu_has_64bits) |
1541 | uasm_i_scd(p, pte, 0, ptr); | 1541 | uasm_i_scd(p, pte, 0, ptr); |
1542 | else | 1542 | else |
@@ -1548,7 +1548,7 @@ iPTE_SW(u32 **p, struct uasm_reloc **r, unsigned int pte, unsigned int ptr, | |||
1548 | else | 1548 | else |
1549 | uasm_il_beqz(p, r, pte, label_smp_pgtable_change); | 1549 | uasm_il_beqz(p, r, pte, label_smp_pgtable_change); |
1550 | 1550 | ||
1551 | # ifdef CONFIG_64BIT_PHYS_ADDR | 1551 | # ifdef CONFIG_PHYS_ADDR_T_64BIT |
1552 | if (!cpu_has_64bits) { | 1552 | if (!cpu_has_64bits) { |
1553 | /* no uasm_i_nop needed */ | 1553 | /* no uasm_i_nop needed */ |
1554 | uasm_i_ll(p, pte, sizeof(pte_t) / 2, ptr); | 1554 | uasm_i_ll(p, pte, sizeof(pte_t) / 2, ptr); |
@@ -1563,14 +1563,14 @@ iPTE_SW(u32 **p, struct uasm_reloc **r, unsigned int pte, unsigned int ptr, | |||
1563 | uasm_i_nop(p); | 1563 | uasm_i_nop(p); |
1564 | # endif | 1564 | # endif |
1565 | #else | 1565 | #else |
1566 | # ifdef CONFIG_64BIT_PHYS_ADDR | 1566 | # ifdef CONFIG_PHYS_ADDR_T_64BIT |
1567 | if (cpu_has_64bits) | 1567 | if (cpu_has_64bits) |
1568 | uasm_i_sd(p, pte, 0, ptr); | 1568 | uasm_i_sd(p, pte, 0, ptr); |
1569 | else | 1569 | else |
1570 | # endif | 1570 | # endif |
1571 | UASM_i_SW(p, pte, 0, ptr); | 1571 | UASM_i_SW(p, pte, 0, ptr); |
1572 | 1572 | ||
1573 | # ifdef CONFIG_64BIT_PHYS_ADDR | 1573 | # ifdef CONFIG_PHYS_ADDR_T_64BIT |
1574 | if (!cpu_has_64bits) { | 1574 | if (!cpu_has_64bits) { |
1575 | uasm_i_lw(p, pte, sizeof(pte_t) / 2, ptr); | 1575 | uasm_i_lw(p, pte, sizeof(pte_t) / 2, ptr); |
1576 | uasm_i_ori(p, pte, pte, hwmode); | 1576 | uasm_i_ori(p, pte, pte, hwmode); |
diff --git a/arch/mips/mm/uasm-mips.c b/arch/mips/mm/uasm-mips.c index 6708a2dbf934..8e02291cfc0c 100644 --- a/arch/mips/mm/uasm-mips.c +++ b/arch/mips/mm/uasm-mips.c | |||
@@ -96,9 +96,11 @@ static struct insn insn_table[] = { | |||
96 | { insn_lw, M(lw_op, 0, 0, 0, 0, 0), RS | RT | SIMM }, | 96 | { insn_lw, M(lw_op, 0, 0, 0, 0, 0), RS | RT | SIMM }, |
97 | { insn_lwx, M(spec3_op, 0, 0, 0, lwx_op, lx_op), RS | RT | RD }, | 97 | { insn_lwx, M(spec3_op, 0, 0, 0, lwx_op, lx_op), RS | RT | RD }, |
98 | { insn_mfc0, M(cop0_op, mfc_op, 0, 0, 0, 0), RT | RD | SET}, | 98 | { insn_mfc0, M(cop0_op, mfc_op, 0, 0, 0, 0), RT | RD | SET}, |
99 | { insn_mfhc0, M(cop0_op, mfhc0_op, 0, 0, 0, 0), RT | RD | SET}, | ||
99 | { insn_mfhi, M(spec_op, 0, 0, 0, 0, mfhi_op), RD }, | 100 | { insn_mfhi, M(spec_op, 0, 0, 0, 0, mfhi_op), RD }, |
100 | { insn_mflo, M(spec_op, 0, 0, 0, 0, mflo_op), RD }, | 101 | { insn_mflo, M(spec_op, 0, 0, 0, 0, mflo_op), RD }, |
101 | { insn_mtc0, M(cop0_op, mtc_op, 0, 0, 0, 0), RT | RD | SET}, | 102 | { insn_mtc0, M(cop0_op, mtc_op, 0, 0, 0, 0), RT | RD | SET}, |
103 | { insn_mthc0, M(cop0_op, mthc0_op, 0, 0, 0, 0), RT | RD | SET}, | ||
102 | { insn_mul, M(spec2_op, 0, 0, 0, 0, mul_op), RS | RT | RD}, | 104 | { insn_mul, M(spec2_op, 0, 0, 0, 0, mul_op), RS | RT | RD}, |
103 | { insn_ori, M(ori_op, 0, 0, 0, 0, 0), RS | RT | UIMM }, | 105 | { insn_ori, M(ori_op, 0, 0, 0, 0, 0), RS | RT | UIMM }, |
104 | { insn_or, M(spec_op, 0, 0, 0, 0, or_op), RS | RT | RD }, | 106 | { insn_or, M(spec_op, 0, 0, 0, 0, or_op), RS | RT | RD }, |
diff --git a/arch/mips/mm/uasm.c b/arch/mips/mm/uasm.c index a01b0d6cedd2..4adf30284813 100644 --- a/arch/mips/mm/uasm.c +++ b/arch/mips/mm/uasm.c | |||
@@ -51,12 +51,12 @@ enum opcode { | |||
51 | insn_dsll32, insn_dsra, insn_dsrl, insn_dsrl32, insn_dsubu, insn_eret, | 51 | insn_dsll32, insn_dsra, insn_dsrl, insn_dsrl32, insn_dsubu, insn_eret, |
52 | insn_ext, insn_ins, insn_j, insn_jal, insn_jalr, insn_jr, insn_lb, | 52 | insn_ext, insn_ins, insn_j, insn_jal, insn_jalr, insn_jr, insn_lb, |
53 | insn_ld, insn_ldx, insn_lh, insn_ll, insn_lld, insn_lui, insn_lw, | 53 | insn_ld, insn_ldx, insn_lh, insn_ll, insn_lld, insn_lui, insn_lw, |
54 | insn_lwx, insn_mfc0, insn_mfhi, insn_mflo, insn_mtc0, insn_mul, | 54 | insn_lwx, insn_mfc0, insn_mfhc0, insn_mfhi, insn_mflo, insn_mtc0, |
55 | insn_or, insn_ori, insn_pref, insn_rfe, insn_rotr, insn_sc, insn_scd, | 55 | insn_mthc0, insn_mul, insn_or, insn_ori, insn_pref, insn_rfe, |
56 | insn_sd, insn_sll, insn_sllv, insn_slt, insn_sltiu, insn_sltu, insn_sra, | 56 | insn_rotr, insn_sc, insn_scd, insn_sd, insn_sll, insn_sllv, insn_slt, |
57 | insn_srl, insn_srlv, insn_subu, insn_sw, insn_sync, insn_syscall, | 57 | insn_sltiu, insn_sltu, insn_sra, insn_srl, insn_srlv, insn_subu, |
58 | insn_tlbp, insn_tlbr, insn_tlbwi, insn_tlbwr, insn_wait, insn_wsbh, | 58 | insn_sw, insn_sync, insn_syscall, insn_tlbp, insn_tlbr, insn_tlbwi, |
59 | insn_xor, insn_xori, insn_yield, | 59 | insn_tlbwr, insn_wait, insn_wsbh, insn_xor, insn_xori, insn_yield, |
60 | }; | 60 | }; |
61 | 61 | ||
62 | struct insn { | 62 | struct insn { |
@@ -284,9 +284,11 @@ I_u2s3u1(_lld) | |||
284 | I_u1s2(_lui) | 284 | I_u1s2(_lui) |
285 | I_u2s3u1(_lw) | 285 | I_u2s3u1(_lw) |
286 | I_u1u2u3(_mfc0) | 286 | I_u1u2u3(_mfc0) |
287 | I_u1u2u3(_mfhc0) | ||
287 | I_u1(_mfhi) | 288 | I_u1(_mfhi) |
288 | I_u1(_mflo) | 289 | I_u1(_mflo) |
289 | I_u1u2u3(_mtc0) | 290 | I_u1u2u3(_mtc0) |
291 | I_u1u2u3(_mthc0) | ||
290 | I_u3u1u2(_mul) | 292 | I_u3u1u2(_mul) |
291 | I_u2u1u3(_ori) | 293 | I_u2u1u3(_ori) |
292 | I_u3u1u2(_or) | 294 | I_u3u1u2(_or) |