diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig
index 93df829868dad2b109629304be854a6e4aee43be..cd7958c1c14967270c8dc06d9a47d96533c15df1 100644
--- a/drivers/crypto/Kconfig
+++ b/drivers/crypto/Kconfig
@@ -562,4 +562,39 @@ config CRYPTO_DEV_LANTIQ_EIP123
    help
       Selects Hardware accelerated EIP123 crypto drivers.
 
+config CRYPTO_DEV_LANTIQ_EIP97
+   tristate "Support Lantiq EIP97 hardware crypto engine"
+   depends on LANTIQ && SOC_GRX500
+   select CRYPTO_AUTHENC
+   select CRYPTO_SHA1
+   select CRYPTO_SHA256
+   select CRYPTO_SHA512
+   select CRYPTO_MD5
+   select CRYPTO_AES
+   select CRYPTO_DES
+   select CRYPTO_MANAGER_DISABLE_TESTS
+   default n
+   help
+      Selects Hardware accelerated EIP97 crypto drivers.
+
+config LTQ_CRYPTO_TEST
+   tristate "Lantiq Crypto Test"
+   depends on m && CRYPTO_DEV_LANTIQ_EIP97
+   help
+      Test suites for the hw crypto algs
+
+config LTQ_MPE_IPSEC_SUPPORT
+   bool
+   depends on LTQ_PPA_MPE_IP97
+   default y
+
+config LTQ_CRYPTO_MAX_RING_USED
+   int "Maximum number of ring used in the driver"
+   depends on CRYPTO_DEV_LANTIQ_EIP97
+   default "4" if LTQ_MPE_IPSEC_SUPPORT
+   default "2"
+   help
+     Number of rings used in the driver. By default, the driver supports up to
+     two rings. However, if MPE firmware is used, we only use 1 ring in the driver
+
 endif # CRYPTO_HW
diff --git a/drivers/crypto/Makefile b/drivers/crypto/Makefile
index b08f259d17d5f7d616409acbeb0c35a5a9a4f108..f78abb7bf0594f7b9f483325c972ca21cd90e586 100644
--- a/drivers/crypto/Makefile
+++ b/drivers/crypto/Makefile
@@ -33,3 +33,4 @@ obj-$(CONFIG_CRYPTO_DEV_SUN4I_SS) += sunxi-ss/
 obj-$(CONFIG_CRYPTO_DEV_ROCKCHIP) += rockchip/
 obj-$(CONFIG_CRYPTO_DEV_CHELSIO) += chelsio/
 obj-$(CONFIG_CRYPTO_DEV_LANTIQ_EIP123) += lantiq_eip123/
+obj-$(CONFIG_CRYPTO_DEV_LANTIQ_EIP97) += lantiq_eip97/
diff --git a/drivers/crypto/lantiq_eip97/Makefile b/drivers/crypto/lantiq_eip97/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..e19128ffb6d8aac6daaaa36e03beaf4a8c472268
--- /dev/null
+++ b/drivers/crypto/lantiq_eip97/Makefile
@@ -0,0 +1,77 @@
+SRC := Sources
+SRC_APP := $(SRC)/Adapter
+SRC_DRV_FWK := $(SRC)/DriverFramework
+SRC_EIP201 := $(SRC)/EIP201
+SRC_GLB_CTRL := $(SRC)/EIP97/GlobalControl
+SRC_RING_CTRL := $(SRC)/EIP97/RingControl
+SRC_LOG := $(SRC)/Log
+SRC_RINGHELPER := $(SRC)/RingHelper
+SRC_SABUILDER := $(SRC)/SABuilder
+SRC_TOKENBUILDER := $(SRC)/TokenBuilder
+INCL_FILES := $(SRC)/incl
+
+ccflags-y := -I$(src)/$(INCL_FILES)
+ccflags-y += -I$(src)/$(SRC_DRV_FWK) -I$(src)/$(SRC_EIP201) -I$(src)/$(SRC_GLB_CTRL) -I$(src)/$(SRC_RING_CTRL)
+ccflags-y += -I$(src)/$(SRC_RINGHELPER) -I$(src)/$(SRC_SABUILDER) -I$(src)/$(SRC_TOKENBUILDER) -I$(src)/$(SRC_LOG)
+
+ltq_crypto-y += $(SRC_APP)/adapter_global_control_init.o
+ltq_crypto-y += $(SRC_APP)/adapter_init.o
+ltq_crypto-y += $(SRC_APP)/adapter_dmabuf.o
+ltq_crypto-y += $(SRC_APP)/adapter_driver97_init.o
+ltq_crypto-y += $(SRC_APP)/adapter_global_eip97.o
+ltq_crypto-y += $(SRC_APP)/adapter_global_init.o
+ltq_crypto-y += $(SRC_APP)/adapter_interrupts.o
+ltq_crypto-y += $(SRC_APP)/adapter_pec_dma.o
+ltq_crypto-y += $(SRC_APP)/adapter_ring_eip202.o
+ltq_crypto-y += $(SRC_APP)/adapter_sglist.o
+ltq_crypto-y += $(SRC_APP)/adapter_sleep.o
+ltq_crypto-y += $(SRC_APP)/adapter_lock.o
+ltq_crypto-y += $(SRC_APP)/adapter_lock_internal.o
+
+ltq_crypto-y += $(SRC_DRV_FWK)/dmares_gen.o
+ltq_crypto-y += $(SRC_DRV_FWK)/dmares_lkm.o
+
+ltq_crypto-y += $(SRC_EIP201)/eip201.o
+
+ltq_crypto-y += $(SRC_GLB_CTRL)/eip97_global_event.o
+ltq_crypto-y += $(SRC_GLB_CTRL)/eip97_global_fsm.o
+ltq_crypto-y += $(SRC_GLB_CTRL)/eip97_global_init.o
+ltq_crypto-y += $(SRC_GLB_CTRL)/eip97_global_prng.o
+ltq_crypto-y += $(SRC_RING_CTRL)/eip202_cd_format.o
+ltq_crypto-y += $(SRC_RING_CTRL)/eip202_cdr_dscr.o
+ltq_crypto-y += $(SRC_RING_CTRL)/eip202_cdr_event.o
+ltq_crypto-y += $(SRC_RING_CTRL)/eip202_cdr_fsm.o
+ltq_crypto-y += $(SRC_RING_CTRL)/eip202_cdr_init.o
+ltq_crypto-y += $(SRC_RING_CTRL)/eip202_rd_format.o
+ltq_crypto-y += $(SRC_RING_CTRL)/eip202_rdr_dscr.o
+ltq_crypto-y += $(SRC_RING_CTRL)/eip202_rdr_event.o
+ltq_crypto-y += $(SRC_RING_CTRL)/eip202_rdr_fsm.o
+ltq_crypto-y += $(SRC_RING_CTRL)/eip202_rdr_init.o
+
+ltq_crypto-y += $(SRC_LOG)/log.o
+
+ltq_crypto-y += $(SRC_RINGHELPER)/ringhelper.o
+
+ltq_crypto-y += $(SRC_SABUILDER)/sa_builder.o
+ltq_crypto-y += $(SRC_SABUILDER)/sa_builder_basic.o
+ltq_crypto-y += $(SRC_SABUILDER)/sa_builder_ipsec.o
+ltq_crypto-y += $(SRC_SABUILDER)/sa_builder_srtp.o
+ltq_crypto-y += $(SRC_SABUILDER)/sa_builder_ssltls.o
+
+ltq_crypto-y += $(SRC_TOKENBUILDER)/token_builder_context.o
+ltq_crypto-y += $(SRC_TOKENBUILDER)/token_builder_core.o
+
+# Driver glue layer
+ltq_crypto-y += $(SRC)/device_lkm_ltq.o
+# Driver interface to crypto API
+ltq_crypto-y += $(SRC)/ltq_crypto_core.o
+ifeq ($(CONFIG_LTQ_MPE_IPSEC_SUPPORT), y)
+# Driver interface to IPsec fast-path (TPT layer acceleration)
+ltq_crypto-y += $(SRC)/ltq_ipsec_api.o
+endif
+obj-$(CONFIG_CRYPTO_DEV_LANTIQ_EIP97) += ltq_crypto.o
+obj-$(CONFIG_LTQ_CRYPTO_TEST) += $(SRC)/ltq_module_test.o
+ifeq ($(CONFIG_LTQ_MPE_IPSEC_SUPPORT), y)
+obj-$(CONFIG_LTQ_CRYPTO_TEST) += $(SRC)/ltq_ipsec_api_test.o
+obj-$(CONFIG_LTQ_CRYPTO_TEST) += $(SRC)/ltq_submit_one.o
+endif