From: Abhishek Paliwal <abhishek.pali...@aricent.com>

From: David Daney <dda...@caviumnetworks.com>

These instructions are available in OCTEON II CPUs.

Signed-off-by: David Daney <dda...@caviumnetworks.com>
Signed-off-by: Leonid Rosenboim <lrosenb...@caviumnetworks.com>
Signed-off-by: Abhishek Paliwal <abhishek.pali...@aricent.com>
---
 arch/mips/include/asm/uasm.h      | 2 ++
 arch/mips/include/uapi/asm/inst.h | 7 +++++++
 arch/mips/mm/uasm-mips.c          | 2 ++
 arch/mips/mm/uasm.c               | 4 +++-
 4 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/arch/mips/include/asm/uasm.h b/arch/mips/include/asm/uasm.h
index c33a956..0a0e300 100644
--- a/arch/mips/include/asm/uasm.h
+++ b/arch/mips/include/asm/uasm.h
@@ -145,6 +145,8 @@ Ip_0(_tlbwr);
 Ip_u3u1u2(_xor);
 Ip_u2u1u3(_xori);
 
+Ip_u1(_zcb);
+Ip_u1(_zcbt);
 
 /* Handle labels. */
 struct uasm_label {
diff --git a/arch/mips/include/uapi/asm/inst.h 
b/arch/mips/include/uapi/asm/inst.h
index f25181b..8c16288 100644
--- a/arch/mips/include/uapi/asm/inst.h
+++ b/arch/mips/include/uapi/asm/inst.h
@@ -62,6 +62,7 @@ enum spec_op {
 enum spec2_op {
        madd_op, maddu_op, mul_op, spec2_3_unused_op,
        msub_op, msubu_op, /* more unused ops */
+       cvm_op = 0x1f,
        clz_op = 0x20, clo_op,
        dclz_op = 0x24, dclo_op,
        sdbpp_op = 0x3f
@@ -180,6 +181,12 @@ enum mad_func {
        madd_fp_op      = 0x08, msub_fp_op      = 0x0a,
        nmadd_fp_op     = 0x0c, nmsub_fp_op     = 0x0e
 };
+/*
+ * func field for special2 cavium opcodes.
+ */
+enum cvm_func {
+       zcb_op = 0x1c, zcbt_op = 0x1d
+};
 
 /*
  * func field for special3 lx opcodes (Cavium Octeon).
diff --git a/arch/mips/mm/uasm-mips.c b/arch/mips/mm/uasm-mips.c
index 3abd609..229ac23 100644
--- a/arch/mips/mm/uasm-mips.c
+++ b/arch/mips/mm/uasm-mips.c
@@ -113,6 +113,8 @@ static struct insn insn_table[] = {
        { insn_tlbwr,  M(cop0_op, cop_op, 0, 0, 0, tlbwr_op),  0 },
        { insn_xori,  M(xori_op, 0, 0, 0, 0, 0),  RS | RT | UIMM },
        { insn_xor,  M(spec_op, 0, 0, 0, 0, xor_op),  RS | RT | RD },
+       { insn_zcb,  M(spec2_op, 0, 0, 0, zcb_op, cvm_op),  RS },
+       { insn_zcbt,  M(spec2_op, 0, 0, 0, zcbt_op, cvm_op),  RS },
        { insn_invalid, 0, 0 }
 };
 
diff --git a/arch/mips/mm/uasm.c b/arch/mips/mm/uasm.c
index b9d14b6..63dd1cc 100644
--- a/arch/mips/mm/uasm.c
+++ b/arch/mips/mm/uasm.c
@@ -54,7 +54,7 @@ enum opcode {
        insn_or, insn_ori, insn_pref, insn_rfe, insn_rotr, insn_sc, insn_scd,
        insn_sd, insn_sll, insn_sra, insn_srl, insn_subu, insn_sw,
        insn_syscall, insn_tlbp, insn_tlbr, insn_tlbwi, insn_tlbwr, insn_xor,
-       insn_xori,
+       insn_xori, insn_zcb, insn_zcbt
 };
 
 struct insn {
@@ -283,6 +283,8 @@ I_u1u2s3(_bbit0);
 I_u1u2s3(_bbit1);
 I_u3u1u2(_lwx)
 I_u3u1u2(_ldx)
+I_u1(_zcb);
+I_u1(_zcbt);
 
 #ifdef CONFIG_CPU_CAVIUM_OCTEON
 #include <asm/octeon/octeon.h>
-- 
1.8.1.4

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to