Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
Pull more MIPS updates from Ralf Baechle: "This is the secondnd batch of MIPS patches for 4.7. Summary: CPS: - Copy EVA configuration when starting secondary VPs. EIC: - Clear Status IPL. Lasat: - Fix a few off by one bugs. lib: - Mark intrinsics notrace. Not only are the intrinsics uninteresting, it would cause infinite recursion. MAINTAINERS: - Add file patterns for MIPS BRCM device tree bindings. - Add file patterns for mips device tree bindings. MT7628: - Fix MT7628 pinmux typos. - wled_an pinmux gpio. - EPHY LEDs pinmux support. Pistachio: - Enable KASLR VDSO: - Build microMIPS VDSO for microMIPS kernels. - Fix aliasing warning by building with `-fno-strict-aliasing' for debugging but also tracing them might result in recursion. Misc: - Add missing FROZEN hotplug notifier transitions. - Fix clk binding example for varioius PIC32 devices. - Fix cpu interrupt controller node-names in the DT files. - Fix XPA CPU feature separation. - Fix write_gc0_* macros when writing zero. - Add inline asm encoding helpers. - Add missing VZ accessor microMIPS encodings. - Fix little endian microMIPS MSA encodings. - Add 64-bit HTW fields and fix its configuration. - Fix sigreturn via VDSO on microMIPS kernel. - Lots of typo fixes. - Add definitions of SegCtl registers and use them" * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (49 commits) MIPS: Add missing FROZEN hotplug notifier transitions MIPS: Build microMIPS VDSO for microMIPS kernels MIPS: Fix sigreturn via VDSO on microMIPS kernel MIPS: devicetree: fix cpu interrupt controller node-names MIPS: VDSO: Build with `-fno-strict-aliasing' MIPS: Pistachio: Enable KASLR MIPS: lib: Mark intrinsics notrace MIPS: Fix 64-bit HTW configuration MIPS: Add 64-bit HTW fields MAINTAINERS: Add file patterns for mips device tree bindings MAINTAINERS: Add file patterns for mips brcm device tree bindings MIPS: Simplify DSP instruction encoding macros MIPS: Add missing tlbinvf/XPA microMIPS encodings MIPS: Fix little endian microMIPS MSA encodings MIPS: Add missing VZ accessor microMIPS encodings MIPS: Add inline asm encoding helpers MIPS: Spelling fix lets -> let's MIPS: VR41xx: Fix typo MIPS: oprofile: Fix typo MIPS: math-emu: Fix typo ...
This commit is contained in:
@@ -19,6 +19,28 @@
|
||||
#include <asm/asmmacro-64.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Helper macros for generating raw instruction encodings.
|
||||
*/
|
||||
#ifdef CONFIG_CPU_MICROMIPS
|
||||
.macro insn32_if_mm enc
|
||||
.insn
|
||||
.hword ((\enc) >> 16)
|
||||
.hword ((\enc) & 0xffff)
|
||||
.endm
|
||||
|
||||
.macro insn_if_mips enc
|
||||
.endm
|
||||
#else
|
||||
.macro insn32_if_mm enc
|
||||
.endm
|
||||
|
||||
.macro insn_if_mips enc
|
||||
.insn
|
||||
.word (\enc)
|
||||
.endm
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
|
||||
.macro local_irq_enable reg=t0
|
||||
ei
|
||||
@@ -341,38 +363,6 @@
|
||||
.endm
|
||||
#else
|
||||
|
||||
#ifdef CONFIG_CPU_MICROMIPS
|
||||
#define CFC_MSA_INSN 0x587e0056
|
||||
#define CTC_MSA_INSN 0x583e0816
|
||||
#define LDB_MSA_INSN 0x58000807
|
||||
#define LDH_MSA_INSN 0x58000817
|
||||
#define LDW_MSA_INSN 0x58000827
|
||||
#define LDD_MSA_INSN 0x58000837
|
||||
#define STB_MSA_INSN 0x5800080f
|
||||
#define STH_MSA_INSN 0x5800081f
|
||||
#define STW_MSA_INSN 0x5800082f
|
||||
#define STD_MSA_INSN 0x5800083f
|
||||
#define COPY_SW_MSA_INSN 0x58b00056
|
||||
#define COPY_SD_MSA_INSN 0x58b80056
|
||||
#define INSERT_W_MSA_INSN 0x59300816
|
||||
#define INSERT_D_MSA_INSN 0x59380816
|
||||
#else
|
||||
#define CFC_MSA_INSN 0x787e0059
|
||||
#define CTC_MSA_INSN 0x783e0819
|
||||
#define LDB_MSA_INSN 0x78000820
|
||||
#define LDH_MSA_INSN 0x78000821
|
||||
#define LDW_MSA_INSN 0x78000822
|
||||
#define LDD_MSA_INSN 0x78000823
|
||||
#define STB_MSA_INSN 0x78000824
|
||||
#define STH_MSA_INSN 0x78000825
|
||||
#define STW_MSA_INSN 0x78000826
|
||||
#define STD_MSA_INSN 0x78000827
|
||||
#define COPY_SW_MSA_INSN 0x78b00059
|
||||
#define COPY_SD_MSA_INSN 0x78b80059
|
||||
#define INSERT_W_MSA_INSN 0x79300819
|
||||
#define INSERT_D_MSA_INSN 0x79380819
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Temporary until all toolchains in use include MSA support.
|
||||
*/
|
||||
@@ -380,8 +370,8 @@
|
||||
.set push
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
.insn
|
||||
.word CFC_MSA_INSN | (\cs << 11)
|
||||
insn_if_mips 0x787e0059 | (\cs << 11)
|
||||
insn32_if_mm 0x587e0056 | (\cs << 11)
|
||||
move \rd, $1
|
||||
.set pop
|
||||
.endm
|
||||
@@ -391,7 +381,8 @@
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
move $1, \rs
|
||||
.word CTC_MSA_INSN | (\cd << 6)
|
||||
insn_if_mips 0x783e0819 | (\cd << 6)
|
||||
insn32_if_mm 0x583e0816 | (\cd << 6)
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
@@ -400,7 +391,8 @@
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
PTR_ADDU $1, \base, \off
|
||||
.word LDB_MSA_INSN | (\wd << 6)
|
||||
insn_if_mips 0x78000820 | (\wd << 6)
|
||||
insn32_if_mm 0x58000807 | (\wd << 6)
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
@@ -409,7 +401,8 @@
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
PTR_ADDU $1, \base, \off
|
||||
.word LDH_MSA_INSN | (\wd << 6)
|
||||
insn_if_mips 0x78000821 | (\wd << 6)
|
||||
insn32_if_mm 0x58000817 | (\wd << 6)
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
@@ -418,7 +411,8 @@
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
PTR_ADDU $1, \base, \off
|
||||
.word LDW_MSA_INSN | (\wd << 6)
|
||||
insn_if_mips 0x78000822 | (\wd << 6)
|
||||
insn32_if_mm 0x58000827 | (\wd << 6)
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
@@ -427,7 +421,8 @@
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
PTR_ADDU $1, \base, \off
|
||||
.word LDD_MSA_INSN | (\wd << 6)
|
||||
insn_if_mips 0x78000823 | (\wd << 6)
|
||||
insn32_if_mm 0x58000837 | (\wd << 6)
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
@@ -436,7 +431,8 @@
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
PTR_ADDU $1, \base, \off
|
||||
.word STB_MSA_INSN | (\wd << 6)
|
||||
insn_if_mips 0x78000824 | (\wd << 6)
|
||||
insn32_if_mm 0x5800080f | (\wd << 6)
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
@@ -445,7 +441,8 @@
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
PTR_ADDU $1, \base, \off
|
||||
.word STH_MSA_INSN | (\wd << 6)
|
||||
insn_if_mips 0x78000825 | (\wd << 6)
|
||||
insn32_if_mm 0x5800081f | (\wd << 6)
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
@@ -454,7 +451,8 @@
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
PTR_ADDU $1, \base, \off
|
||||
.word STW_MSA_INSN | (\wd << 6)
|
||||
insn_if_mips 0x78000826 | (\wd << 6)
|
||||
insn32_if_mm 0x5800082f | (\wd << 6)
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
@@ -463,7 +461,8 @@
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
PTR_ADDU $1, \base, \off
|
||||
.word STD_MSA_INSN | (\wd << 6)
|
||||
insn_if_mips 0x78000827 | (\wd << 6)
|
||||
insn32_if_mm 0x5800083f | (\wd << 6)
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
@@ -471,8 +470,8 @@
|
||||
.set push
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
.insn
|
||||
.word COPY_SW_MSA_INSN | (\n << 16) | (\ws << 11)
|
||||
insn_if_mips 0x78b00059 | (\n << 16) | (\ws << 11)
|
||||
insn32_if_mm 0x58b00056 | (\n << 16) | (\ws << 11)
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
@@ -480,8 +479,8 @@
|
||||
.set push
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
.insn
|
||||
.word COPY_SD_MSA_INSN | (\n << 16) | (\ws << 11)
|
||||
insn_if_mips 0x78b80059 | (\n << 16) | (\ws << 11)
|
||||
insn32_if_mm 0x58b80056 | (\n << 16) | (\ws << 11)
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
@@ -489,7 +488,8 @@
|
||||
.set push
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
.word INSERT_W_MSA_INSN | (\n << 16) | (\wd << 6)
|
||||
insn_if_mips 0x79300819 | (\n << 16) | (\wd << 6)
|
||||
insn32_if_mm 0x59300816 | (\n << 16) | (\wd << 6)
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
@@ -497,7 +497,8 @@
|
||||
.set push
|
||||
.set noat
|
||||
SET_HARDFLOAT
|
||||
.word INSERT_D_MSA_INSN | (\n << 16) | (\wd << 6)
|
||||
insn_if_mips 0x79380819 | (\n << 16) | (\wd << 6)
|
||||
insn32_if_mm 0x59380816 | (\n << 16) | (\wd << 6)
|
||||
.set pop
|
||||
.endm
|
||||
#endif
|
||||
|
@@ -58,8 +58,8 @@
|
||||
* address of a label as argument to inline assembler. Gas otoh has the
|
||||
* annoying difference between la and dla which are only usable for 32-bit
|
||||
* rsp. 64-bit code, so can't be used without conditional compilation.
|
||||
* The alterantive is switching the assembler to 64-bit code which happens
|
||||
* to work right even for 32-bit code ...
|
||||
* The alternative is switching the assembler to 64-bit code which happens
|
||||
* to work right even for 32-bit code...
|
||||
*/
|
||||
#define instruction_hazard() \
|
||||
do { \
|
||||
@@ -133,8 +133,8 @@ do { \
|
||||
* address of a label as argument to inline assembler. Gas otoh has the
|
||||
* annoying difference between la and dla which are only usable for 32-bit
|
||||
* rsp. 64-bit code, so can't be used without conditional compilation.
|
||||
* The alterantive is switching the assembler to 64-bit code which happens
|
||||
* to work right even for 32-bit code ...
|
||||
* The alternative is switching the assembler to 64-bit code which happens
|
||||
* to work right even for 32-bit code...
|
||||
*/
|
||||
#define __instruction_hazard() \
|
||||
do { \
|
||||
|
@@ -100,7 +100,7 @@ typedef volatile struct au1xxx_ddma_desc {
|
||||
u32 dscr_nxtptr; /* Next descriptor pointer (mostly) */
|
||||
/*
|
||||
* First 32 bytes are HW specific!!!
|
||||
* Lets have some SW data following -- make sure it's 32 bytes.
|
||||
* Let's have some SW data following -- make sure it's 32 bytes.
|
||||
*/
|
||||
u32 sw_status;
|
||||
u32 sw_context;
|
||||
|
@@ -140,7 +140,7 @@ static inline int au1300_gpio_getinitlvl(unsigned int gpio)
|
||||
* Cases 1 and 3 are intended for boards which want to provide their own
|
||||
* GPIO namespace and -operations (i.e. for example you have 8 GPIOs
|
||||
* which are in part provided by spare Au1300 GPIO pins and in part by
|
||||
* an external FPGA but you still want them to be accssible in linux
|
||||
* an external FPGA but you still want them to be accessible in linux
|
||||
* as gpio0-7. The board can of course use the alchemy_gpioX_* functions
|
||||
* as required).
|
||||
*/
|
||||
|
@@ -22,7 +22,7 @@ struct bcm63xx_enet_platform_data {
|
||||
int has_phy_interrupt;
|
||||
int phy_interrupt;
|
||||
|
||||
/* if has_phy, use autonegociated pause parameters or force
|
||||
/* if has_phy, use autonegotiated pause parameters or force
|
||||
* them */
|
||||
int pause_auto;
|
||||
int pause_rx;
|
||||
|
@@ -64,7 +64,7 @@ static inline void plat_post_dma_flush(struct device *dev)
|
||||
|
||||
static inline int plat_device_is_coherent(struct device *dev)
|
||||
{
|
||||
return 1; /* IP27 non-cohernet mode is unsupported */
|
||||
return 1; /* IP27 non-coherent mode is unsupported */
|
||||
}
|
||||
|
||||
#endif /* __ASM_MACH_IP27_DMA_COHERENCE_H */
|
||||
|
@@ -86,7 +86,7 @@ static inline void plat_post_dma_flush(struct device *dev)
|
||||
|
||||
static inline int plat_device_is_coherent(struct device *dev)
|
||||
{
|
||||
return 0; /* IP32 is non-cohernet */
|
||||
return 0; /* IP32 is non-coherent */
|
||||
}
|
||||
|
||||
#endif /* __ASM_MACH_IP32_DMA_COHERENCE_H */
|
||||
|
@@ -22,7 +22,7 @@
|
||||
|
||||
/*
|
||||
* during early_printk no ioremap possible at this early stage
|
||||
* lets use KSEG1 instead
|
||||
* let's use KSEG1 instead
|
||||
*/
|
||||
#define LTQ_ASC0_BASE_ADDR 0x1E100C00
|
||||
#define LTQ_EARLY_ASC KSEG1ADDR(LTQ_ASC0_BASE_ADDR)
|
||||
|
@@ -75,7 +75,7 @@ extern __iomem void *ltq_cgu_membase;
|
||||
|
||||
/*
|
||||
* during early_printk no ioremap is possible
|
||||
* lets use KSEG1 instead
|
||||
* let's use KSEG1 instead
|
||||
*/
|
||||
#define LTQ_ASC1_BASE_ADDR 0x1E100C00
|
||||
#define LTQ_EARLY_ASC KSEG1ADDR(LTQ_ASC1_BASE_ADDR)
|
||||
|
@@ -24,7 +24,7 @@ struct temp_range {
|
||||
u8 level;
|
||||
};
|
||||
|
||||
#define CONSTANT_SPEED_POLICY 0 /* at constent speed */
|
||||
#define CONSTANT_SPEED_POLICY 0 /* at constant speed */
|
||||
#define STEP_SPEED_POLICY 1 /* use up/down arrays to describe policy */
|
||||
#define KERNEL_HELPER_POLICY 2 /* kernel as a helper to fan control */
|
||||
|
||||
|
@@ -56,7 +56,7 @@
|
||||
(0 << MIPS_SEGCFG_PA_SHIFT) | \
|
||||
(1 << MIPS_SEGCFG_EU_SHIFT)) << 16)
|
||||
or t0, t2
|
||||
mtc0 t0, $5, 2
|
||||
mtc0 t0, CP0_SEGCTL0
|
||||
|
||||
/* SegCtl1 */
|
||||
li t0, ((MIPS_SEGCFG_MUSUK << MIPS_SEGCFG_AM_SHIFT) | \
|
||||
@@ -67,7 +67,7 @@
|
||||
(0 << MIPS_SEGCFG_PA_SHIFT) | \
|
||||
(1 << MIPS_SEGCFG_EU_SHIFT)) << 16)
|
||||
ins t0, t1, 16, 3
|
||||
mtc0 t0, $5, 3
|
||||
mtc0 t0, CP0_SEGCTL1
|
||||
|
||||
/* SegCtl2 */
|
||||
li t0, ((MIPS_SEGCFG_MUSUK << MIPS_SEGCFG_AM_SHIFT) | \
|
||||
@@ -77,7 +77,7 @@
|
||||
(4 << MIPS_SEGCFG_PA_SHIFT) | \
|
||||
(1 << MIPS_SEGCFG_EU_SHIFT)) << 16)
|
||||
or t0, t2
|
||||
mtc0 t0, $5, 4
|
||||
mtc0 t0, CP0_SEGCTL2
|
||||
|
||||
jal mips_ihb
|
||||
mfc0 t0, $16, 5
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Definitions and decalrations for MIPS MT support that are common between
|
||||
* Definitions and declarations for MIPS MT support that are common between
|
||||
* the VSMP, and AP/SP kernel models.
|
||||
*/
|
||||
#ifndef __ASM_MIPS_MT_H
|
||||
|
@@ -48,6 +48,9 @@
|
||||
#define CP0_CONF $3
|
||||
#define CP0_CONTEXT $4
|
||||
#define CP0_PAGEMASK $5
|
||||
#define CP0_SEGCTL0 $5, 2
|
||||
#define CP0_SEGCTL1 $5, 3
|
||||
#define CP0_SEGCTL2 $5, 4
|
||||
#define CP0_WIRED $6
|
||||
#define CP0_INFO $7
|
||||
#define CP0_HWRENA $7, 0
|
||||
@@ -726,6 +729,8 @@
|
||||
#define MIPS_PWFIELD_PTEI_SHIFT 0
|
||||
#define MIPS_PWFIELD_PTEI_MASK 0x0000003f
|
||||
|
||||
#define MIPS_PWSIZE_PS_SHIFT 30
|
||||
#define MIPS_PWSIZE_PS_MASK 0x40000000
|
||||
#define MIPS_PWSIZE_GDW_SHIFT 24
|
||||
#define MIPS_PWSIZE_GDW_MASK 0x3f000000
|
||||
#define MIPS_PWSIZE_UDW_SHIFT 18
|
||||
@@ -739,6 +744,12 @@
|
||||
|
||||
#define MIPS_PWCTL_PWEN_SHIFT 31
|
||||
#define MIPS_PWCTL_PWEN_MASK 0x80000000
|
||||
#define MIPS_PWCTL_XK_SHIFT 28
|
||||
#define MIPS_PWCTL_XK_MASK 0x10000000
|
||||
#define MIPS_PWCTL_XS_SHIFT 27
|
||||
#define MIPS_PWCTL_XS_MASK 0x08000000
|
||||
#define MIPS_PWCTL_XU_SHIFT 26
|
||||
#define MIPS_PWCTL_XU_MASK 0x04000000
|
||||
#define MIPS_PWCTL_DPH_SHIFT 7
|
||||
#define MIPS_PWCTL_DPH_MASK 0x00000080
|
||||
#define MIPS_PWCTL_HUGEPG_SHIFT 6
|
||||
@@ -1045,6 +1056,33 @@ static inline int mm_insn_16bit(u16 insn)
|
||||
return (opcode >= 1 && opcode <= 3) ? 1 : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper macros for generating raw instruction encodings in inline asm.
|
||||
*/
|
||||
#ifdef CONFIG_CPU_MICROMIPS
|
||||
#define _ASM_INSN16_IF_MM(_enc) \
|
||||
".insn\n\t" \
|
||||
".hword (" #_enc ")\n\t"
|
||||
#define _ASM_INSN32_IF_MM(_enc) \
|
||||
".insn\n\t" \
|
||||
".hword ((" #_enc ") >> 16)\n\t" \
|
||||
".hword ((" #_enc ") & 0xffff)\n\t"
|
||||
#else
|
||||
#define _ASM_INSN_IF_MIPS(_enc) \
|
||||
".insn\n\t" \
|
||||
".word (" #_enc ")\n\t"
|
||||
#endif
|
||||
|
||||
#ifndef _ASM_INSN16_IF_MM
|
||||
#define _ASM_INSN16_IF_MM(_enc)
|
||||
#endif
|
||||
#ifndef _ASM_INSN32_IF_MM
|
||||
#define _ASM_INSN32_IF_MM(_enc)
|
||||
#endif
|
||||
#ifndef _ASM_INSN_IF_MIPS
|
||||
#define _ASM_INSN_IF_MIPS(_enc)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* TLB Invalidate Flush
|
||||
*/
|
||||
@@ -1053,7 +1091,9 @@ static inline void tlbinvf(void)
|
||||
__asm__ __volatile__(
|
||||
".set push\n\t"
|
||||
".set noreorder\n\t"
|
||||
".word 0x42000004\n\t" /* tlbinvf */
|
||||
"# tlbinvf\n\t"
|
||||
_ASM_INSN_IF_MIPS(0x42000004)
|
||||
_ASM_INSN32_IF_MM(0x0000537c)
|
||||
".set pop");
|
||||
}
|
||||
|
||||
@@ -1274,9 +1314,9 @@ do { \
|
||||
" .set push \n" \
|
||||
" .set noat \n" \
|
||||
" .set mips32r2 \n" \
|
||||
" .insn \n" \
|
||||
" # mfhc0 $1, %1 \n" \
|
||||
" .word (0x40410000 | ((%1 & 0x1f) << 11)) \n" \
|
||||
_ASM_INSN_IF_MIPS(0x40410000 | ((%1 & 0x1f) << 11)) \
|
||||
_ASM_INSN32_IF_MM(0x002000f4 | ((%1 & 0x1f) << 16)) \
|
||||
" move %0, $1 \n" \
|
||||
" .set pop \n" \
|
||||
: "=r" (__res) \
|
||||
@@ -1292,8 +1332,8 @@ do { \
|
||||
" .set mips32r2 \n" \
|
||||
" move $1, %0 \n" \
|
||||
" # mthc0 $1, %1 \n" \
|
||||
" .insn \n" \
|
||||
" .word (0x40c10000 | ((%1 & 0x1f) << 11)) \n" \
|
||||
_ASM_INSN_IF_MIPS(0x40c10000 | ((%1 & 0x1f) << 11)) \
|
||||
_ASM_INSN32_IF_MM(0x002002f4 | ((%1 & 0x1f) << 16)) \
|
||||
" .set pop \n" \
|
||||
: \
|
||||
: "r" (value), "i" (register)); \
|
||||
@@ -1743,7 +1783,8 @@ do { \
|
||||
".set\tpush\n\t" \
|
||||
".set\tnoat\n\t" \
|
||||
"# mfgc0\t$1, $%1, %2\n\t" \
|
||||
".word\t(0x40610000 | %1 << 11 | %2)\n\t" \
|
||||
_ASM_INSN_IF_MIPS(0x40610000 | %1 << 11 | %2) \
|
||||
_ASM_INSN32_IF_MM(0x002004fc | %1 << 16 | %2 << 11) \
|
||||
"move\t%0, $1\n\t" \
|
||||
".set\tpop" \
|
||||
: "=r" (__res) \
|
||||
@@ -1757,7 +1798,8 @@ do { \
|
||||
".set\tpush\n\t" \
|
||||
".set\tnoat\n\t" \
|
||||
"# dmfgc0\t$1, $%1, %2\n\t" \
|
||||
".word\t(0x40610100 | %1 << 11 | %2)\n\t" \
|
||||
_ASM_INSN_IF_MIPS(0x40610100 | %1 << 11 | %2) \
|
||||
_ASM_INSN32_IF_MM(0x582004fc | %1 << 16 | %2 << 11) \
|
||||
"move\t%0, $1\n\t" \
|
||||
".set\tpop" \
|
||||
: "=r" (__res) \
|
||||
@@ -1770,9 +1812,10 @@ do { \
|
||||
__asm__ __volatile__( \
|
||||
".set\tpush\n\t" \
|
||||
".set\tnoat\n\t" \
|
||||
"move\t$1, %0\n\t" \
|
||||
"move\t$1, %z0\n\t" \
|
||||
"# mtgc0\t$1, $%1, %2\n\t" \
|
||||
".word\t(0x40610200 | %1 << 11 | %2)\n\t" \
|
||||
_ASM_INSN_IF_MIPS(0x40610200 | %1 << 11 | %2) \
|
||||
_ASM_INSN32_IF_MM(0x002006fc | %1 << 16 | %2 << 11) \
|
||||
".set\tpop" \
|
||||
: : "Jr" ((unsigned int)(value)), \
|
||||
"i" (register), "i" (sel)); \
|
||||
@@ -1783,9 +1826,10 @@ do { \
|
||||
__asm__ __volatile__( \
|
||||
".set\tpush\n\t" \
|
||||
".set\tnoat\n\t" \
|
||||
"move\t$1, %0\n\t" \
|
||||
"move\t$1, %z0\n\t" \
|
||||
"# dmtgc0\t$1, $%1, %2\n\t" \
|
||||
".word\t(0x40610300 | %1 << 11 | %2)\n\t" \
|
||||
_ASM_INSN_IF_MIPS(0x40610300 | %1 << 11 | %2) \
|
||||
_ASM_INSN32_IF_MM(0x582006fc | %1 << 16 | %2 << 11) \
|
||||
".set\tpop" \
|
||||
: : "Jr" (value), \
|
||||
"i" (register), "i" (sel)); \
|
||||
@@ -2246,7 +2290,6 @@ do { \
|
||||
|
||||
#else
|
||||
|
||||
#ifdef CONFIG_CPU_MICROMIPS
|
||||
#define rddsp(mask) \
|
||||
({ \
|
||||
unsigned int __res; \
|
||||
@@ -2255,8 +2298,8 @@ do { \
|
||||
" .set push \n" \
|
||||
" .set noat \n" \
|
||||
" # rddsp $1, %x1 \n" \
|
||||
" .hword ((0x0020067c | (%x1 << 14)) >> 16) \n" \
|
||||
" .hword ((0x0020067c | (%x1 << 14)) & 0xffff) \n" \
|
||||
_ASM_INSN_IF_MIPS(0x7c000cb8 | (%x1 << 16)) \
|
||||
_ASM_INSN32_IF_MM(0x0020067c | (%x1 << 14)) \
|
||||
" move %0, $1 \n" \
|
||||
" .set pop \n" \
|
||||
: "=r" (__res) \
|
||||
@@ -2271,98 +2314,13 @@ do { \
|
||||
" .set noat \n" \
|
||||
" move $1, %0 \n" \
|
||||
" # wrdsp $1, %x1 \n" \
|
||||
" .hword ((0x0020167c | (%x1 << 14)) >> 16) \n" \
|
||||
" .hword ((0x0020167c | (%x1 << 14)) & 0xffff) \n" \
|
||||
_ASM_INSN_IF_MIPS(0x7c2004f8 | (%x1 << 11)) \
|
||||
_ASM_INSN32_IF_MM(0x0020167c | (%x1 << 14)) \
|
||||
" .set pop \n" \
|
||||
: \
|
||||
: "r" (val), "i" (mask)); \
|
||||
} while (0)
|
||||
|
||||
#define _umips_dsp_mfxxx(ins) \
|
||||
({ \
|
||||
unsigned long __treg; \
|
||||
\
|
||||
__asm__ __volatile__( \
|
||||
" .set push \n" \
|
||||
" .set noat \n" \
|
||||
" .hword 0x0001 \n" \
|
||||
" .hword %x1 \n" \
|
||||
" move %0, $1 \n" \
|
||||
" .set pop \n" \
|
||||
: "=r" (__treg) \
|
||||
: "i" (ins)); \
|
||||
__treg; \
|
||||
})
|
||||
|
||||
#define _umips_dsp_mtxxx(val, ins) \
|
||||
do { \
|
||||
__asm__ __volatile__( \
|
||||
" .set push \n" \
|
||||
" .set noat \n" \
|
||||
" move $1, %0 \n" \
|
||||
" .hword 0x0001 \n" \
|
||||
" .hword %x1 \n" \
|
||||
" .set pop \n" \
|
||||
: \
|
||||
: "r" (val), "i" (ins)); \
|
||||
} while (0)
|
||||
|
||||
#define _umips_dsp_mflo(reg) _umips_dsp_mfxxx((reg << 14) | 0x107c)
|
||||
#define _umips_dsp_mfhi(reg) _umips_dsp_mfxxx((reg << 14) | 0x007c)
|
||||
|
||||
#define _umips_dsp_mtlo(val, reg) _umips_dsp_mtxxx(val, ((reg << 14) | 0x307c))
|
||||
#define _umips_dsp_mthi(val, reg) _umips_dsp_mtxxx(val, ((reg << 14) | 0x207c))
|
||||
|
||||
#define mflo0() _umips_dsp_mflo(0)
|
||||
#define mflo1() _umips_dsp_mflo(1)
|
||||
#define mflo2() _umips_dsp_mflo(2)
|
||||
#define mflo3() _umips_dsp_mflo(3)
|
||||
|
||||
#define mfhi0() _umips_dsp_mfhi(0)
|
||||
#define mfhi1() _umips_dsp_mfhi(1)
|
||||
#define mfhi2() _umips_dsp_mfhi(2)
|
||||
#define mfhi3() _umips_dsp_mfhi(3)
|
||||
|
||||
#define mtlo0(x) _umips_dsp_mtlo(x, 0)
|
||||
#define mtlo1(x) _umips_dsp_mtlo(x, 1)
|
||||
#define mtlo2(x) _umips_dsp_mtlo(x, 2)
|
||||
#define mtlo3(x) _umips_dsp_mtlo(x, 3)
|
||||
|
||||
#define mthi0(x) _umips_dsp_mthi(x, 0)
|
||||
#define mthi1(x) _umips_dsp_mthi(x, 1)
|
||||
#define mthi2(x) _umips_dsp_mthi(x, 2)
|
||||
#define mthi3(x) _umips_dsp_mthi(x, 3)
|
||||
|
||||
#else /* !CONFIG_CPU_MICROMIPS */
|
||||
#define rddsp(mask) \
|
||||
({ \
|
||||
unsigned int __res; \
|
||||
\
|
||||
__asm__ __volatile__( \
|
||||
" .set push \n" \
|
||||
" .set noat \n" \
|
||||
" # rddsp $1, %x1 \n" \
|
||||
" .word 0x7c000cb8 | (%x1 << 16) \n" \
|
||||
" move %0, $1 \n" \
|
||||
" .set pop \n" \
|
||||
: "=r" (__res) \
|
||||
: "i" (mask)); \
|
||||
__res; \
|
||||
})
|
||||
|
||||
#define wrdsp(val, mask) \
|
||||
do { \
|
||||
__asm__ __volatile__( \
|
||||
" .set push \n" \
|
||||
" .set noat \n" \
|
||||
" move $1, %0 \n" \
|
||||
" # wrdsp $1, %x1 \n" \
|
||||
" .word 0x7c2004f8 | (%x1 << 11) \n" \
|
||||
" .set pop \n" \
|
||||
: \
|
||||
: "r" (val), "i" (mask)); \
|
||||
} while (0)
|
||||
|
||||
#define _dsp_mfxxx(ins) \
|
||||
({ \
|
||||
unsigned long __treg; \
|
||||
@@ -2370,7 +2328,8 @@ do { \
|
||||
__asm__ __volatile__( \
|
||||
" .set push \n" \
|
||||
" .set noat \n" \
|
||||
" .word (0x00000810 | %1) \n" \
|
||||
_ASM_INSN_IF_MIPS(0x00000810 | %X1) \
|
||||
_ASM_INSN32_IF_MM(0x0001007c | %x1) \
|
||||
" move %0, $1 \n" \
|
||||
" .set pop \n" \
|
||||
: "=r" (__treg) \
|
||||
@@ -2384,18 +2343,31 @@ do { \
|
||||
" .set push \n" \
|
||||
" .set noat \n" \
|
||||
" move $1, %0 \n" \
|
||||
" .word (0x00200011 | %1) \n" \
|
||||
_ASM_INSN_IF_MIPS(0x00200011 | %X1) \
|
||||
_ASM_INSN32_IF_MM(0x0001207c | %x1) \
|
||||
" .set pop \n" \
|
||||
: \
|
||||
: "r" (val), "i" (ins)); \
|
||||
} while (0)
|
||||
|
||||
#ifdef CONFIG_CPU_MICROMIPS
|
||||
|
||||
#define _dsp_mflo(reg) _dsp_mfxxx((reg << 14) | 0x1000)
|
||||
#define _dsp_mfhi(reg) _dsp_mfxxx((reg << 14) | 0x0000)
|
||||
|
||||
#define _dsp_mtlo(val, reg) _dsp_mtxxx(val, ((reg << 14) | 0x1000))
|
||||
#define _dsp_mthi(val, reg) _dsp_mtxxx(val, ((reg << 14) | 0x0000))
|
||||
|
||||
#else /* !CONFIG_CPU_MICROMIPS */
|
||||
|
||||
#define _dsp_mflo(reg) _dsp_mfxxx((reg << 21) | 0x0002)
|
||||
#define _dsp_mfhi(reg) _dsp_mfxxx((reg << 21) | 0x0000)
|
||||
|
||||
#define _dsp_mtlo(val, reg) _dsp_mtxxx(val, ((reg << 11) | 0x0002))
|
||||
#define _dsp_mthi(val, reg) _dsp_mtxxx(val, ((reg << 11) | 0x0000))
|
||||
|
||||
#endif /* CONFIG_CPU_MICROMIPS */
|
||||
|
||||
#define mflo0() _dsp_mflo(0)
|
||||
#define mflo1() _dsp_mflo(1)
|
||||
#define mflo2() _dsp_mflo(2)
|
||||
@@ -2416,7 +2388,6 @@ do { \
|
||||
#define mthi2(x) _dsp_mthi(x, 2)
|
||||
#define mthi3(x) _dsp_mthi(x, 3)
|
||||
|
||||
#endif /* CONFIG_CPU_MICROMIPS */
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -2556,28 +2527,32 @@ static inline void guest_tlb_probe(void)
|
||||
{
|
||||
__asm__ __volatile__(
|
||||
"# tlbgp\n\t"
|
||||
".word 0x42000010");
|
||||
_ASM_INSN_IF_MIPS(0x42000010)
|
||||
_ASM_INSN32_IF_MM(0x0000017c));
|
||||
}
|
||||
|
||||
static inline void guest_tlb_read(void)
|
||||
{
|
||||
__asm__ __volatile__(
|
||||
"# tlbgr\n\t"
|
||||
".word 0x42000009");
|
||||
_ASM_INSN_IF_MIPS(0x42000009)
|
||||
_ASM_INSN32_IF_MM(0x0000117c));
|
||||
}
|
||||
|
||||
static inline void guest_tlb_write_indexed(void)
|
||||
{
|
||||
__asm__ __volatile__(
|
||||
"# tlbgwi\n\t"
|
||||
".word 0x4200000a");
|
||||
_ASM_INSN_IF_MIPS(0x4200000a)
|
||||
_ASM_INSN32_IF_MM(0x0000217c));
|
||||
}
|
||||
|
||||
static inline void guest_tlb_write_random(void)
|
||||
{
|
||||
__asm__ __volatile__(
|
||||
"# tlbgwr\n\t"
|
||||
".word 0x4200000e");
|
||||
_ASM_INSN_IF_MIPS(0x4200000e)
|
||||
_ASM_INSN32_IF_MM(0x0000317c));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2587,7 +2562,8 @@ static inline void guest_tlbinvf(void)
|
||||
{
|
||||
__asm__ __volatile__(
|
||||
"# tlbginvf\n\t"
|
||||
".word 0x4200000c");
|
||||
_ASM_INSN_IF_MIPS(0x4200000c)
|
||||
_ASM_INSN32_IF_MM(0x0000517c));
|
||||
}
|
||||
|
||||
#endif /* !TOOLCHAIN_SUPPORTS_VIRT */
|
||||
|
@@ -192,13 +192,6 @@ static inline void write_msa_##name(unsigned int val) \
|
||||
* allow compilation with toolchains that do not support MSA. Once all
|
||||
* toolchains in use support MSA these can be removed.
|
||||
*/
|
||||
#ifdef CONFIG_CPU_MICROMIPS
|
||||
#define CFC_MSA_INSN 0x587e0056
|
||||
#define CTC_MSA_INSN 0x583e0816
|
||||
#else
|
||||
#define CFC_MSA_INSN 0x787e0059
|
||||
#define CTC_MSA_INSN 0x783e0819
|
||||
#endif
|
||||
|
||||
#define __BUILD_MSA_CTL_REG(name, cs) \
|
||||
static inline unsigned int read_msa_##name(void) \
|
||||
@@ -207,11 +200,12 @@ static inline unsigned int read_msa_##name(void) \
|
||||
__asm__ __volatile__( \
|
||||
" .set push\n" \
|
||||
" .set noat\n" \
|
||||
" .insn\n" \
|
||||
" .word %1 | (" #cs " << 11)\n" \
|
||||
" # cfcmsa $1, $%1\n" \
|
||||
_ASM_INSN_IF_MIPS(0x787e0059 | %1 << 11) \
|
||||
_ASM_INSN32_IF_MM(0x587e0056 | %1 << 11) \
|
||||
" move %0, $1\n" \
|
||||
" .set pop\n" \
|
||||
: "=r"(reg) : "i"(CFC_MSA_INSN)); \
|
||||
: "=r"(reg) : "i"(cs)); \
|
||||
return reg; \
|
||||
} \
|
||||
\
|
||||
@@ -221,10 +215,11 @@ static inline void write_msa_##name(unsigned int val) \
|
||||
" .set push\n" \
|
||||
" .set noat\n" \
|
||||
" move $1, %0\n" \
|
||||
" .insn\n" \
|
||||
" .word %1 | (" #cs " << 6)\n" \
|
||||
" # ctcmsa $%1, $1\n" \
|
||||
_ASM_INSN_IF_MIPS(0x783e0819 | %1 << 6) \
|
||||
_ASM_INSN32_IF_MM(0x583e0816 | %1 << 6) \
|
||||
" .set pop\n" \
|
||||
: : "r"(val), "i"(CTC_MSA_INSN)); \
|
||||
: : "r"(val), "i"(cs)); \
|
||||
}
|
||||
|
||||
#endif /* !TOOLCHAIN_SUPPORTS_MSA */
|
||||
|
@@ -146,7 +146,7 @@ typedef struct {
|
||||
* This structure contains the global state of all command queues.
|
||||
* It is stored in a bootmem named block and shared by all
|
||||
* applications running on Octeon. Tickets are stored in a differnet
|
||||
* cahce line that queue information to reduce the contention on the
|
||||
* cache line that queue information to reduce the contention on the
|
||||
* ll/sc used to get a ticket. If this is not the case, the update
|
||||
* of queue state causes the ll/sc to fail quite often.
|
||||
*/
|
||||
|
@@ -94,7 +94,7 @@ extern int cvmx_helper_board_get_mii_address(int ipd_port);
|
||||
* @phy_addr: The address of the PHY to program
|
||||
* @link_flags:
|
||||
* Flags to control autonegotiation. Bit 0 is autonegotiation
|
||||
* enable/disable to maintain backware compatibility.
|
||||
* enable/disable to maintain backward compatibility.
|
||||
* @link_info: Link speed to program. If the speed is zero and autonegotiation
|
||||
* is enabled, all possible negotiation speeds are advertised.
|
||||
*
|
||||
|
@@ -39,7 +39,7 @@
|
||||
|
||||
enum cvmx_ipd_mode {
|
||||
CVMX_IPD_OPC_MODE_STT = 0LL, /* All blocks DRAM, not cached in L2 */
|
||||
CVMX_IPD_OPC_MODE_STF = 1LL, /* All bloccks into L2 */
|
||||
CVMX_IPD_OPC_MODE_STF = 1LL, /* All blocks into L2 */
|
||||
CVMX_IPD_OPC_MODE_STF1_STT = 2LL, /* 1st block L2, rest DRAM */
|
||||
CVMX_IPD_OPC_MODE_STF2_STT = 3LL /* 1st, 2nd blocks L2, rest DRAM */
|
||||
};
|
||||
|
@@ -2051,7 +2051,7 @@ static inline void cvmx_pow_tag_sw_desched(uint32_t tag,
|
||||
}
|
||||
|
||||
/**
|
||||
* Descchedules the current work queue entry.
|
||||
* Deschedules the current work queue entry.
|
||||
*
|
||||
* @no_sched: no schedule flag value to be set on the work queue
|
||||
* entry. If this is set the entry will not be
|
||||
|
@@ -39,7 +39,7 @@ struct hpc3_pbus_dmacregs {
|
||||
volatile u32 pbdma_dptr; /* pbus dma channel desc ptr */
|
||||
u32 _unused0[0x1000/4 - 2]; /* padding */
|
||||
volatile u32 pbdma_ctrl; /* pbus dma channel control register has
|
||||
* copletely different meaning for read
|
||||
* completely different meaning for read
|
||||
* compared with write */
|
||||
/* read */
|
||||
#define HPC3_PDMACTRL_INT 0x00000001 /* interrupt (cleared after read) */
|
||||
|
Reference in New Issue
Block a user