Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
Pull MIPS updates from Ralf Baechle: "This is the MIPS pull request for the next kernel: - Zubair's patch series adds CMA support for MIPS. Doing so it also touches ARM64 and x86. - remove the last instance of IRQF_DISABLED from arch/mips - updates to two of the MIPS defconfig files. - cleanup of how cache coherency bits are handled on MIPS and implement support for write-combining. - platform upgrades for Alchemy - move MIPS DTS files to arch/mips/boot/dts/" * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (24 commits) MIPS: ralink: remove deprecated IRQF_DISABLED MIPS: pgtable.h: Implement the pgprot_writecombine function for MIPS MIPS: cpu-probe: Set the write-combine CCA value on per core basis MIPS: pgtable-bits: Define the CCA bit for WC writes on Ingenic cores MIPS: pgtable-bits: Move the CCA bits out of the core's ifdef blocks MIPS: DMA: Add cma support x86: use generic dma-contiguous.h arm64: use generic dma-contiguous.h asm-generic: Add dma-contiguous.h MIPS: BPF: Add new emit_long_instr macro MIPS: ralink: Move device-trees to arch/mips/boot/dts/ MIPS: Netlogic: Move device-trees to arch/mips/boot/dts/ MIPS: sead3: Move device-trees to arch/mips/boot/dts/ MIPS: Lantiq: Move device-trees to arch/mips/boot/dts/ MIPS: Octeon: Move device-trees to arch/mips/boot/dts/ MIPS: Add support for building device-tree binaries MIPS: Create common infrastructure for building built-in device-trees MIPS: SEAD3: Enable DEVTMPFS MIPS: SEAD3: Regenerate defconfigs MIPS: Alchemy: DB1300: Add touch penirq support ...
This commit is contained in:
@@ -163,6 +163,19 @@ do { \
|
||||
(ctx)->idx++; \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Similar to emit_instr but it must be used when we need to emit
|
||||
* 32-bit or 64-bit instructions
|
||||
*/
|
||||
#define emit_long_instr(ctx, func, ...) \
|
||||
do { \
|
||||
if ((ctx)->target != NULL) { \
|
||||
u32 *p = &(ctx)->target[ctx->idx]; \
|
||||
UASM_i_##func(&p, ##__VA_ARGS__); \
|
||||
} \
|
||||
(ctx)->idx++; \
|
||||
} while (0)
|
||||
|
||||
/* Determine if immediate is within the 16-bit signed range */
|
||||
static inline bool is_range16(s32 imm)
|
||||
{
|
||||
@@ -218,13 +231,6 @@ static inline void emit_ori(unsigned int dst, unsigned src, u32 imm,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static inline void emit_daddu(unsigned int dst, unsigned int src1,
|
||||
unsigned int src2, struct jit_ctx *ctx)
|
||||
{
|
||||
emit_instr(ctx, daddu, dst, src1, src2);
|
||||
}
|
||||
|
||||
static inline void emit_daddiu(unsigned int dst, unsigned int src,
|
||||
int imm, struct jit_ctx *ctx)
|
||||
{
|
||||
@@ -283,11 +289,7 @@ static inline void emit_xori(ptr dst, ptr src, u32 imm, struct jit_ctx *ctx)
|
||||
|
||||
static inline void emit_stack_offset(int offset, struct jit_ctx *ctx)
|
||||
{
|
||||
if (config_enabled(CONFIG_64BIT))
|
||||
emit_instr(ctx, daddiu, r_sp, r_sp, offset);
|
||||
else
|
||||
emit_instr(ctx, addiu, r_sp, r_sp, offset);
|
||||
|
||||
emit_long_instr(ctx, ADDIU, r_sp, r_sp, offset);
|
||||
}
|
||||
|
||||
static inline void emit_subu(unsigned int dst, unsigned int src1,
|
||||
@@ -365,10 +367,7 @@ static inline void emit_store_stack_reg(ptr reg, ptr base,
|
||||
unsigned int offset,
|
||||
struct jit_ctx *ctx)
|
||||
{
|
||||
if (config_enabled(CONFIG_64BIT))
|
||||
emit_instr(ctx, sd, reg, offset, base);
|
||||
else
|
||||
emit_instr(ctx, sw, reg, offset, base);
|
||||
emit_long_instr(ctx, SW, reg, offset, base);
|
||||
}
|
||||
|
||||
static inline void emit_store(ptr reg, ptr base, unsigned int offset,
|
||||
@@ -381,10 +380,7 @@ static inline void emit_load_stack_reg(ptr reg, ptr base,
|
||||
unsigned int offset,
|
||||
struct jit_ctx *ctx)
|
||||
{
|
||||
if (config_enabled(CONFIG_64BIT))
|
||||
emit_instr(ctx, ld, reg, offset, base);
|
||||
else
|
||||
emit_instr(ctx, lw, reg, offset, base);
|
||||
emit_long_instr(ctx, LW, reg, offset, base);
|
||||
}
|
||||
|
||||
static inline void emit_load(unsigned int reg, unsigned int base,
|
||||
@@ -458,10 +454,7 @@ static inline void emit_load_ptr(unsigned int dst, unsigned int src,
|
||||
int imm, struct jit_ctx *ctx)
|
||||
{
|
||||
/* src contains the base addr of the 32/64-pointer */
|
||||
if (config_enabled(CONFIG_64BIT))
|
||||
emit_instr(ctx, ld, dst, imm, src);
|
||||
else
|
||||
emit_instr(ctx, lw, dst, imm, src);
|
||||
emit_long_instr(ctx, LW, dst, imm, src);
|
||||
}
|
||||
|
||||
/* load a function pointer to register */
|
||||
@@ -483,10 +476,7 @@ static inline void emit_load_func(unsigned int reg, ptr imm,
|
||||
/* Move to real MIPS register */
|
||||
static inline void emit_reg_move(ptr dst, ptr src, struct jit_ctx *ctx)
|
||||
{
|
||||
if (config_enabled(CONFIG_64BIT))
|
||||
emit_daddu(dst, src, r_zero, ctx);
|
||||
else
|
||||
emit_addu(dst, src, r_zero, ctx);
|
||||
emit_long_instr(ctx, ADDU, dst, src, r_zero);
|
||||
}
|
||||
|
||||
/* Move to JIT (32-bit) register */
|
||||
@@ -623,10 +613,7 @@ static void save_bpf_jit_regs(struct jit_ctx *ctx, unsigned offset)
|
||||
if (ctx->flags & SEEN_MEM) {
|
||||
if (real_off % (RSIZE * 2))
|
||||
real_off += RSIZE;
|
||||
if (config_enabled(CONFIG_64BIT))
|
||||
emit_daddiu(r_M, r_sp, real_off, ctx);
|
||||
else
|
||||
emit_addiu(r_M, r_sp, real_off, ctx);
|
||||
emit_long_instr(ctx, ADDIU, r_M, r_sp, real_off);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1241,7 +1228,7 @@ jmp_cmp:
|
||||
emit_half_load(r_A, r_skb, off, ctx);
|
||||
#ifdef CONFIG_CPU_LITTLE_ENDIAN
|
||||
/* This needs little endian fixup */
|
||||
if (cpu_has_mips_r2) {
|
||||
if (cpu_has_wsbh) {
|
||||
/* R2 and later have the wsbh instruction */
|
||||
emit_wsbh(r_A, r_A, ctx);
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user