Lines Matching refs:acry_dev

113 	struct aspeed_acry_dev		*acry_dev;  member
130 struct aspeed_acry_dev *acry_dev; member
172 static int aspeed_acry_handle_queue(struct aspeed_acry_dev *acry_dev, in aspeed_acry_handle_queue() argument
176 ACRY_DBG(acry_dev, "SW fallback\n"); in aspeed_acry_handle_queue()
180 return crypto_transfer_akcipher_request_to_engine(acry_dev->crypt_engine_rsa, req); in aspeed_acry_handle_queue()
188 struct aspeed_acry_dev *acry_dev = ctx->acry_dev; in aspeed_acry_do_request() local
190 acry_dev->req = req; in aspeed_acry_do_request()
191 acry_dev->flags |= CRYPTO_FLAGS_BUSY; in aspeed_acry_do_request()
193 return ctx->trigger(acry_dev); in aspeed_acry_do_request()
196 static int aspeed_acry_complete(struct aspeed_acry_dev *acry_dev, int err) in aspeed_acry_complete() argument
198 struct akcipher_request *req = acry_dev->req; in aspeed_acry_complete()
200 acry_dev->flags &= ~CRYPTO_FLAGS_BUSY; in aspeed_acry_complete()
202 crypto_finalize_akcipher_request(acry_dev->crypt_engine_rsa, req, err); in aspeed_acry_complete()
210 static void aspeed_acry_rsa_sg_copy_to_buffer(struct aspeed_acry_dev *acry_dev, in aspeed_acry_rsa_sg_copy_to_buffer() argument
218 ACRY_DBG(acry_dev, "\n"); in aspeed_acry_rsa_sg_copy_to_buffer()
223 data_idx = acry_dev->data_byte_mapping[i]; in aspeed_acry_rsa_sg_copy_to_buffer()
229 data_idx = acry_dev->data_byte_mapping[i]; in aspeed_acry_rsa_sg_copy_to_buffer()
247 static int aspeed_acry_rsa_ctx_copy(struct aspeed_acry_dev *acry_dev, void *buf, in aspeed_acry_rsa_ctx_copy() argument
257 ACRY_DBG(acry_dev, "nbytes:%zu, mode:%d\n", nbytes, mode); in aspeed_acry_rsa_ctx_copy()
288 idx = acry_dev->exp_dw_mapping[j - 1]; in aspeed_acry_rsa_ctx_copy()
290 idx = acry_dev->mod_dw_mapping[j - 1]; in aspeed_acry_rsa_ctx_copy()
299 static int aspeed_acry_rsa_transfer(struct aspeed_acry_dev *acry_dev) in aspeed_acry_rsa_transfer() argument
301 struct akcipher_request *req = acry_dev->req; in aspeed_acry_rsa_transfer()
302 u8 __iomem *sram_buffer = acry_dev->acry_sram; in aspeed_acry_rsa_transfer()
311 ast_acry_write(acry_dev, ACRY_CMD_DMEM_AHB, ASPEED_ACRY_DMA_CMD); in aspeed_acry_rsa_transfer()
314 regmap_update_bits(acry_dev->ahbc, AHBC_REGION_PROT, in aspeed_acry_rsa_transfer()
320 data_idx = acry_dev->data_byte_mapping[j]; in aspeed_acry_rsa_transfer()
330 ACRY_DBG(acry_dev, "result_nbytes:%d, req->dst_len:%d\n", in aspeed_acry_rsa_transfer()
339 dev_err(acry_dev->dev, "RSA engine error!\n"); in aspeed_acry_rsa_transfer()
342 memzero_explicit(acry_dev->buf_addr, ASPEED_ACRY_BUFF_SIZE); in aspeed_acry_rsa_transfer()
344 return aspeed_acry_complete(acry_dev, 0); in aspeed_acry_rsa_transfer()
347 static int aspeed_acry_rsa_trigger(struct aspeed_acry_dev *acry_dev) in aspeed_acry_rsa_trigger() argument
349 struct akcipher_request *req = acry_dev->req; in aspeed_acry_rsa_trigger()
355 dev_err(acry_dev->dev, "%s: key n is not set\n", __func__); in aspeed_acry_rsa_trigger()
359 memzero_explicit(acry_dev->buf_addr, ASPEED_ACRY_BUFF_SIZE); in aspeed_acry_rsa_trigger()
362 aspeed_acry_rsa_sg_copy_to_buffer(acry_dev, acry_dev->buf_addr, in aspeed_acry_rsa_trigger()
365 nm = aspeed_acry_rsa_ctx_copy(acry_dev, acry_dev->buf_addr, ctx->n, in aspeed_acry_rsa_trigger()
369 dev_err(acry_dev->dev, "%s: key e is not set\n", in aspeed_acry_rsa_trigger()
374 ne = aspeed_acry_rsa_ctx_copy(acry_dev, acry_dev->buf_addr, in aspeed_acry_rsa_trigger()
379 dev_err(acry_dev->dev, "%s: key d is not set\n", in aspeed_acry_rsa_trigger()
384 ne = aspeed_acry_rsa_ctx_copy(acry_dev, acry_dev->buf_addr, in aspeed_acry_rsa_trigger()
389 ast_acry_write(acry_dev, acry_dev->buf_dma_addr, in aspeed_acry_rsa_trigger()
391 ast_acry_write(acry_dev, (ne << 16) + nm, in aspeed_acry_rsa_trigger()
393 ast_acry_write(acry_dev, ASPEED_ACRY_BUFF_SIZE, in aspeed_acry_rsa_trigger()
396 acry_dev->resume = aspeed_acry_rsa_transfer; in aspeed_acry_rsa_trigger()
399 regmap_update_bits(acry_dev->ahbc, AHBC_REGION_PROT, in aspeed_acry_rsa_trigger()
402 ast_acry_write(acry_dev, ACRY_RSA_ISR, ASPEED_ACRY_INT_MASK); in aspeed_acry_rsa_trigger()
403 ast_acry_write(acry_dev, ACRY_CMD_DMA_SRAM_MODE_RSA | in aspeed_acry_rsa_trigger()
407 ast_acry_write(acry_dev, ACRY_CMD_RSA_TRIGGER | in aspeed_acry_rsa_trigger()
417 struct aspeed_acry_dev *acry_dev = ctx->acry_dev; in aspeed_acry_rsa_enc() local
422 return aspeed_acry_handle_queue(acry_dev, req); in aspeed_acry_rsa_enc()
429 struct aspeed_acry_dev *acry_dev = ctx->acry_dev; in aspeed_acry_rsa_dec() local
434 return aspeed_acry_handle_queue(acry_dev, req); in aspeed_acry_rsa_dec()
489 struct aspeed_acry_dev *acry_dev = ctx->acry_dev; in aspeed_acry_rsa_setkey() local
498 dev_err(acry_dev->dev, "rsa parse key failed, ret:0x%x\n", in aspeed_acry_rsa_setkey()
526 dev_err(acry_dev->dev, "rsa set key failed\n"); in aspeed_acry_rsa_setkey()
579 ctx->acry_dev = acry_alg->acry_dev; in aspeed_acry_rsa_init_tfm()
584 dev_err(ctx->acry_dev->dev, "ERROR: Cannot allocate fallback for %s %ld\n", in aspeed_acry_rsa_init_tfm()
629 static void aspeed_acry_register(struct aspeed_acry_dev *acry_dev) in aspeed_acry_register() argument
634 aspeed_acry_akcipher_algs[i].acry_dev = acry_dev; in aspeed_acry_register()
637 ACRY_DBG(acry_dev, "Failed to register %s\n", in aspeed_acry_register()
643 static void aspeed_acry_unregister(struct aspeed_acry_dev *acry_dev) in aspeed_acry_unregister() argument
654 struct aspeed_acry_dev *acry_dev = (struct aspeed_acry_dev *)dev; in aspeed_acry_irq() local
657 sts = ast_acry_read(acry_dev, ASPEED_ACRY_STATUS); in aspeed_acry_irq()
658 ast_acry_write(acry_dev, sts, ASPEED_ACRY_STATUS); in aspeed_acry_irq()
660 ACRY_DBG(acry_dev, "irq sts:0x%x\n", sts); in aspeed_acry_irq()
664 ast_acry_write(acry_dev, 0, ASPEED_ACRY_TRIGGER); in aspeed_acry_irq()
666 if (acry_dev->flags & CRYPTO_FLAGS_BUSY) in aspeed_acry_irq()
667 tasklet_schedule(&acry_dev->done_task); in aspeed_acry_irq()
669 dev_err(acry_dev->dev, "RSA no active requests.\n"); in aspeed_acry_irq()
679 static void aspeed_acry_sram_mapping(struct aspeed_acry_dev *acry_dev) in aspeed_acry_sram_mapping() argument
684 acry_dev->exp_dw_mapping[i] = j; in aspeed_acry_sram_mapping()
685 acry_dev->mod_dw_mapping[i] = j + 4; in aspeed_acry_sram_mapping()
686 acry_dev->data_byte_mapping[(i * 4)] = (j + 8) * 4; in aspeed_acry_sram_mapping()
687 acry_dev->data_byte_mapping[(i * 4) + 1] = (j + 8) * 4 + 1; in aspeed_acry_sram_mapping()
688 acry_dev->data_byte_mapping[(i * 4) + 2] = (j + 8) * 4 + 2; in aspeed_acry_sram_mapping()
689 acry_dev->data_byte_mapping[(i * 4) + 3] = (j + 8) * 4 + 3; in aspeed_acry_sram_mapping()
697 struct aspeed_acry_dev *acry_dev = (struct aspeed_acry_dev *)data; in aspeed_acry_done_task() local
699 (void)acry_dev->resume(acry_dev); in aspeed_acry_done_task()
709 struct aspeed_acry_dev *acry_dev; in aspeed_acry_probe() local
713 acry_dev = devm_kzalloc(dev, sizeof(struct aspeed_acry_dev), in aspeed_acry_probe()
715 if (!acry_dev) in aspeed_acry_probe()
718 acry_dev->dev = dev; in aspeed_acry_probe()
720 platform_set_drvdata(pdev, acry_dev); in aspeed_acry_probe()
722 acry_dev->regs = devm_platform_ioremap_resource(pdev, 0); in aspeed_acry_probe()
723 if (IS_ERR(acry_dev->regs)) in aspeed_acry_probe()
724 return PTR_ERR(acry_dev->regs); in aspeed_acry_probe()
726 acry_dev->acry_sram = devm_platform_ioremap_resource(pdev, 1); in aspeed_acry_probe()
727 if (IS_ERR(acry_dev->acry_sram)) in aspeed_acry_probe()
728 return PTR_ERR(acry_dev->acry_sram); in aspeed_acry_probe()
731 acry_dev->irq = platform_get_irq(pdev, 0); in aspeed_acry_probe()
732 if (acry_dev->irq < 0) in aspeed_acry_probe()
735 rc = devm_request_irq(dev, acry_dev->irq, aspeed_acry_irq, 0, in aspeed_acry_probe()
736 dev_name(dev), acry_dev); in aspeed_acry_probe()
742 acry_dev->clk = devm_clk_get_enabled(dev, NULL); in aspeed_acry_probe()
743 if (IS_ERR(acry_dev->clk)) { in aspeed_acry_probe()
745 return PTR_ERR(acry_dev->clk); in aspeed_acry_probe()
748 acry_dev->ahbc = syscon_regmap_lookup_by_phandle(dev->of_node, in aspeed_acry_probe()
750 if (IS_ERR(acry_dev->ahbc)) { in aspeed_acry_probe()
756 acry_dev->crypt_engine_rsa = crypto_engine_alloc_init(dev, true); in aspeed_acry_probe()
757 if (!acry_dev->crypt_engine_rsa) { in aspeed_acry_probe()
762 rc = crypto_engine_start(acry_dev->crypt_engine_rsa); in aspeed_acry_probe()
766 tasklet_init(&acry_dev->done_task, aspeed_acry_done_task, in aspeed_acry_probe()
767 (unsigned long)acry_dev); in aspeed_acry_probe()
770 ast_acry_write(acry_dev, ACRY_CMD_DMEM_AHB, ASPEED_ACRY_DMA_CMD); in aspeed_acry_probe()
773 aspeed_acry_sram_mapping(acry_dev); in aspeed_acry_probe()
775 acry_dev->buf_addr = dmam_alloc_coherent(dev, ASPEED_ACRY_BUFF_SIZE, in aspeed_acry_probe()
776 &acry_dev->buf_dma_addr, in aspeed_acry_probe()
778 if (!acry_dev->buf_addr) { in aspeed_acry_probe()
783 aspeed_acry_register(acry_dev); in aspeed_acry_probe()
790 crypto_engine_exit(acry_dev->crypt_engine_rsa); in aspeed_acry_probe()
792 clk_disable_unprepare(acry_dev->clk); in aspeed_acry_probe()
799 struct aspeed_acry_dev *acry_dev = platform_get_drvdata(pdev); in aspeed_acry_remove() local
801 aspeed_acry_unregister(acry_dev); in aspeed_acry_remove()
802 crypto_engine_exit(acry_dev->crypt_engine_rsa); in aspeed_acry_remove()
803 tasklet_kill(&acry_dev->done_task); in aspeed_acry_remove()
804 clk_disable_unprepare(acry_dev->clk); in aspeed_acry_remove()