diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2014-05-23 10:29:44 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2014-05-23 18:07:01 -0400 |
commit | b633648c5ad3cfbda0b3daea50d2135d44899259 (patch) | |
tree | 6100185cae10f36a55e71c3b220fc79cfa14b7c0 /arch/mips/kernel/traps.c | |
parent | 8b2e62cc34feaaf1cac9440a93fb18ac0b1e81bc (diff) |
MIPS: MT: Remove SMTC support
Nobody is maintaining SMTC anymore and there also seems to be no userbase.
Which is a pity - the SMTC technology primarily developed by Kevin D.
Kissell <kevink@paralogos.com> is an ingenious demonstration for the MT
ASE's power and elegance.
Based on Markos Chandras <Markos.Chandras@imgtec.com> patch
https://patchwork.linux-mips.org/patch/6719/ which while very similar did
no longer apply cleanly when I tried to merge it plus some additional
post-SMTC cleanup - SMTC was a feature as tricky to remove as it was to
merge once upon a time.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/kernel/traps.c')
-rw-r--r-- | arch/mips/kernel/traps.c | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 074e857ced28..3a2672907f80 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -370,9 +370,6 @@ void __noreturn die(const char *str, struct pt_regs *regs) | |||
370 | { | 370 | { |
371 | static int die_counter; | 371 | static int die_counter; |
372 | int sig = SIGSEGV; | 372 | int sig = SIGSEGV; |
373 | #ifdef CONFIG_MIPS_MT_SMTC | ||
374 | unsigned long dvpret; | ||
375 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
376 | 373 | ||
377 | oops_enter(); | 374 | oops_enter(); |
378 | 375 | ||
@@ -382,13 +379,7 @@ void __noreturn die(const char *str, struct pt_regs *regs) | |||
382 | 379 | ||
383 | console_verbose(); | 380 | console_verbose(); |
384 | raw_spin_lock_irq(&die_lock); | 381 | raw_spin_lock_irq(&die_lock); |
385 | #ifdef CONFIG_MIPS_MT_SMTC | ||
386 | dvpret = dvpe(); | ||
387 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
388 | bust_spinlocks(1); | 382 | bust_spinlocks(1); |
389 | #ifdef CONFIG_MIPS_MT_SMTC | ||
390 | mips_mt_regdump(dvpret); | ||
391 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
392 | 383 | ||
393 | printk("%s[#%d]:\n", str, ++die_counter); | 384 | printk("%s[#%d]:\n", str, ++die_counter); |
394 | show_registers(regs); | 385 | show_registers(regs); |
@@ -1759,19 +1750,6 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs) | |||
1759 | extern char rollback_except_vec_vi; | 1750 | extern char rollback_except_vec_vi; |
1760 | char *vec_start = using_rollback_handler() ? | 1751 | char *vec_start = using_rollback_handler() ? |
1761 | &rollback_except_vec_vi : &except_vec_vi; | 1752 | &rollback_except_vec_vi : &except_vec_vi; |
1762 | #ifdef CONFIG_MIPS_MT_SMTC | ||
1763 | /* | ||
1764 | * We need to provide the SMTC vectored interrupt handler | ||
1765 | * not only with the address of the handler, but with the | ||
1766 | * Status.IM bit to be masked before going there. | ||
1767 | */ | ||
1768 | extern char except_vec_vi_mori; | ||
1769 | #if defined(CONFIG_CPU_MICROMIPS) || defined(CONFIG_CPU_BIG_ENDIAN) | ||
1770 | const int mori_offset = &except_vec_vi_mori - vec_start + 2; | ||
1771 | #else | ||
1772 | const int mori_offset = &except_vec_vi_mori - vec_start; | ||
1773 | #endif | ||
1774 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
1775 | #if defined(CONFIG_CPU_MICROMIPS) || defined(CONFIG_CPU_BIG_ENDIAN) | 1753 | #if defined(CONFIG_CPU_MICROMIPS) || defined(CONFIG_CPU_BIG_ENDIAN) |
1776 | const int lui_offset = &except_vec_vi_lui - vec_start + 2; | 1754 | const int lui_offset = &except_vec_vi_lui - vec_start + 2; |
1777 | const int ori_offset = &except_vec_vi_ori - vec_start + 2; | 1755 | const int ori_offset = &except_vec_vi_ori - vec_start + 2; |
@@ -1795,12 +1773,6 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs) | |||
1795 | #else | 1773 | #else |
1796 | handler_len); | 1774 | handler_len); |
1797 | #endif | 1775 | #endif |
1798 | #ifdef CONFIG_MIPS_MT_SMTC | ||
1799 | BUG_ON(n > 7); /* Vector index %d exceeds SMTC maximum. */ | ||
1800 | |||
1801 | h = (u16 *)(b + mori_offset); | ||
1802 | *h = (0x100 << n); | ||
1803 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
1804 | h = (u16 *)(b + lui_offset); | 1776 | h = (u16 *)(b + lui_offset); |
1805 | *h = (handler >> 16) & 0xffff; | 1777 | *h = (handler >> 16) & 0xffff; |
1806 | h = (u16 *)(b + ori_offset); | 1778 | h = (u16 *)(b + ori_offset); |
@@ -1870,20 +1842,6 @@ void per_cpu_trap_init(bool is_boot_cpu) | |||
1870 | unsigned int cpu = smp_processor_id(); | 1842 | unsigned int cpu = smp_processor_id(); |
1871 | unsigned int status_set = ST0_CU0; | 1843 | unsigned int status_set = ST0_CU0; |
1872 | unsigned int hwrena = cpu_hwrena_impl_bits; | 1844 | unsigned int hwrena = cpu_hwrena_impl_bits; |
1873 | #ifdef CONFIG_MIPS_MT_SMTC | ||
1874 | int secondaryTC = 0; | ||
1875 | int bootTC = (cpu == 0); | ||
1876 | |||
1877 | /* | ||
1878 | * Only do per_cpu_trap_init() for first TC of Each VPE. | ||
1879 | * Note that this hack assumes that the SMTC init code | ||
1880 | * assigns TCs consecutively and in ascending order. | ||
1881 | */ | ||
1882 | |||
1883 | if (((read_c0_tcbind() & TCBIND_CURTC) != 0) && | ||
1884 | ((read_c0_tcbind() & TCBIND_CURVPE) == cpu_data[cpu - 1].vpe_id)) | ||
1885 | secondaryTC = 1; | ||
1886 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
1887 | 1845 | ||
1888 | /* | 1846 | /* |
1889 | * Disable coprocessors and select 32-bit or 64-bit addressing | 1847 | * Disable coprocessors and select 32-bit or 64-bit addressing |
@@ -1911,10 +1869,6 @@ void per_cpu_trap_init(bool is_boot_cpu) | |||
1911 | if (hwrena) | 1869 | if (hwrena) |
1912 | write_c0_hwrena(hwrena); | 1870 | write_c0_hwrena(hwrena); |
1913 | 1871 | ||
1914 | #ifdef CONFIG_MIPS_MT_SMTC | ||
1915 | if (!secondaryTC) { | ||
1916 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
1917 | |||
1918 | if (cpu_has_veic || cpu_has_vint) { | 1872 | if (cpu_has_veic || cpu_has_vint) { |
1919 | unsigned long sr = set_c0_status(ST0_BEV); | 1873 | unsigned long sr = set_c0_status(ST0_BEV); |
1920 | write_c0_ebase(ebase); | 1874 | write_c0_ebase(ebase); |
@@ -1949,10 +1903,6 @@ void per_cpu_trap_init(bool is_boot_cpu) | |||
1949 | cp0_perfcount_irq = -1; | 1903 | cp0_perfcount_irq = -1; |
1950 | } | 1904 | } |
1951 | 1905 | ||
1952 | #ifdef CONFIG_MIPS_MT_SMTC | ||
1953 | } | ||
1954 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
1955 | |||
1956 | if (!cpu_data[cpu].asid_cache) | 1906 | if (!cpu_data[cpu].asid_cache) |
1957 | cpu_data[cpu].asid_cache = ASID_FIRST_VERSION; | 1907 | cpu_data[cpu].asid_cache = ASID_FIRST_VERSION; |
1958 | 1908 | ||
@@ -1961,23 +1911,10 @@ void per_cpu_trap_init(bool is_boot_cpu) | |||
1961 | BUG_ON(current->mm); | 1911 | BUG_ON(current->mm); |
1962 | enter_lazy_tlb(&init_mm, current); | 1912 | enter_lazy_tlb(&init_mm, current); |
1963 | 1913 | ||
1964 | #ifdef CONFIG_MIPS_MT_SMTC | ||
1965 | if (bootTC) { | ||
1966 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
1967 | /* Boot CPU's cache setup in setup_arch(). */ | 1914 | /* Boot CPU's cache setup in setup_arch(). */ |
1968 | if (!is_boot_cpu) | 1915 | if (!is_boot_cpu) |
1969 | cpu_cache_init(); | 1916 | cpu_cache_init(); |
1970 | tlb_init(); | 1917 | tlb_init(); |
1971 | #ifdef CONFIG_MIPS_MT_SMTC | ||
1972 | } else if (!secondaryTC) { | ||
1973 | /* | ||
1974 | * First TC in non-boot VPE must do subset of tlb_init() | ||
1975 | * for MMU countrol registers. | ||
1976 | */ | ||
1977 | write_c0_pagemask(PM_DEFAULT_MASK); | ||
1978 | write_c0_wired(0); | ||
1979 | } | ||
1980 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
1981 | TLBMISS_HANDLER_SETUP(); | 1918 | TLBMISS_HANDLER_SETUP(); |
1982 | } | 1919 | } |
1983 | 1920 | ||