LoongArch: crypto: Add crc32 and crc32c hw acceleration
authorMin Zhou <zhoumin@loongson.cn>
Mon, 1 May 2023 09:19:43 +0000 (17:19 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Mon, 1 May 2023 09:19:43 +0000 (17:19 +0800)
commit2f1648220214d18168e55920c21014e71c2d5bbc
tree093cd9506fa568b620c3c1c91f403c82506de6e6
parent69e3a6aa6be21de6aaf38130fad97ecde34a193c
LoongArch: crypto: Add crc32 and crc32c hw acceleration

With a blatant copy of some MIPS bits we introduce the crc32 and crc32c
hw accelerated module to LoongArch.

LoongArch has provided these instructions to calculate crc32 and crc32c:
        * crc.w.b.w    crcc.w.b.w
        * crc.w.h.w    crcc.w.h.w
        * crc.w.w.w    crcc.w.w.w
        * crc.w.d.w    crcc.w.d.w

So we can make use of these instructions to improve the performance of
calculation for crc32(c) checksums.

As can be seen from the following test results, crc32(c) instructions
can improve the performance by 58%.

                  Software implemention    Hardware acceleration
  Buffer size     time cost (seconds)      time cost (seconds)    Accel.
   100 KB                0.000845                 0.000534        59.1%
     1 MB                0.007758                 0.004836        59.4%
    10 MB                0.076593                 0.047682        59.4%
   100 MB                0.756734                 0.479126        58.5%
  1000 MB                7.563841                 4.778266        58.5%

Signed-off-by: Min Zhou <zhoumin@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/Makefile
arch/loongarch/crypto/Kconfig [new file with mode: 0644]
arch/loongarch/crypto/Makefile [new file with mode: 0644]
arch/loongarch/crypto/crc32-loongarch.c [new file with mode: 0644]
crypto/Kconfig