Lines Matching refs:ecc_dev

105 	struct ocs_ecc_dev *ecc_dev;  member
148 static void ocs_ecc_cmd_start(struct ocs_ecc_dev *ecc_dev, u32 op_size) in ocs_ecc_cmd_start() argument
151 ecc_dev->base_reg + HW_OFFS_OCS_ECC_COMMAND); in ocs_ecc_cmd_start()
169 static int ocs_ecc_trigger_op(struct ocs_ecc_dev *ecc_dev, u32 op_size, in ocs_ecc_trigger_op() argument
172 reinit_completion(&ecc_dev->irq_done); in ocs_ecc_trigger_op()
174 iowrite32(ECC_ENABLE_INTR, ecc_dev->base_reg + HW_OFFS_OCS_ECC_IER); in ocs_ecc_trigger_op()
175 iowrite32(op_size | inst, ecc_dev->base_reg + HW_OFFS_OCS_ECC_COMMAND); in ocs_ecc_trigger_op()
177 return wait_for_completion_interruptible(&ecc_dev->irq_done); in ocs_ecc_trigger_op()
210 if (tctx->ecc_dev) in kmb_ocs_ecc_find_dev()
211 return tctx->ecc_dev; in kmb_ocs_ecc_find_dev()
216 tctx->ecc_dev = list_first_entry(&ocs_ecc.dev_list, struct ocs_ecc_dev, in kmb_ocs_ecc_find_dev()
221 return tctx->ecc_dev; in kmb_ocs_ecc_find_dev()
225 static int kmb_ecc_point_mult(struct ocs_ecc_dev *ecc_dev, in kmb_ecc_point_mult() argument
248 rc = ocs_ecc_wait_idle(ecc_dev); in kmb_ecc_point_mult()
253 ocs_ecc_cmd_start(ecc_dev, op_size); in kmb_ecc_point_mult()
256 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_AX, in kmb_ecc_point_mult()
260 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_AY, in kmb_ecc_point_mult()
270 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_BX_D, in kmb_ecc_point_mult()
274 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_BY_L, in kmb_ecc_point_mult()
279 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_P, in kmb_ecc_point_mult()
283 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_A, in kmb_ecc_point_mult()
287 rc = ocs_ecc_trigger_op(ecc_dev, op_size, OCS_ECC_INST_CALC_D_IDX_A); in kmb_ecc_point_mult()
292 ocs_ecc_read_cx_out(ecc_dev, result->x, nbytes); in kmb_ecc_point_mult()
293 ocs_ecc_read_cy_out(ecc_dev, result->y, nbytes); in kmb_ecc_point_mult()
310 static int kmb_ecc_do_scalar_op(struct ocs_ecc_dev *ecc_dev, u64 *scalar_out, in kmb_ecc_do_scalar_op() argument
321 rc = ocs_ecc_wait_idle(ecc_dev); in kmb_ecc_do_scalar_op()
326 ocs_ecc_cmd_start(ecc_dev, op_size); in kmb_ecc_do_scalar_op()
329 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_AX, in kmb_ecc_do_scalar_op()
333 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_AY, in kmb_ecc_do_scalar_op()
337 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_P, in kmb_ecc_do_scalar_op()
341 rc = ocs_ecc_trigger_op(ecc_dev, op_size, inst); in kmb_ecc_do_scalar_op()
345 ocs_ecc_read_cx_out(ecc_dev, scalar_out, nbytes); in kmb_ecc_do_scalar_op()
354 static int kmb_ocs_ecc_is_pubkey_valid_partial(struct ocs_ecc_dev *ecc_dev, in kmb_ocs_ecc_is_pubkey_valid_partial() argument
381 rc = kmb_ecc_do_scalar_op(ecc_dev, yy, pk->y, pk->y, curve, pk->ndigits, in kmb_ocs_ecc_is_pubkey_valid_partial()
390 rc = kmb_ecc_do_scalar_op(ecc_dev, xxx, pk->x, w, curve, pk->ndigits, in kmb_ocs_ecc_is_pubkey_valid_partial()
396 rc = kmb_ecc_do_scalar_op(ecc_dev, w, curve->a, pk->x, curve, in kmb_ocs_ecc_is_pubkey_valid_partial()
403 rc = kmb_ecc_do_scalar_op(ecc_dev, w, w, curve->b, curve, in kmb_ocs_ecc_is_pubkey_valid_partial()
410 rc = kmb_ecc_do_scalar_op(ecc_dev, w, xxx, w, curve, pk->ndigits, in kmb_ocs_ecc_is_pubkey_valid_partial()
429 static int kmb_ocs_ecc_is_pubkey_valid_full(struct ocs_ecc_dev *ecc_dev, in kmb_ocs_ecc_is_pubkey_valid_full() argument
437 rc = kmb_ocs_ecc_is_pubkey_valid_partial(ecc_dev, curve, pk); in kmb_ocs_ecc_is_pubkey_valid_full()
446 rc = kmb_ecc_point_mult(ecc_dev, nQ, pk, curve->n, curve); in kmb_ocs_ecc_is_pubkey_valid_full()
583 struct ocs_ecc_dev *ecc_dev = tctx->ecc_dev; in kmb_ecc_do_shared_secret() local
617 rc = kmb_ocs_ecc_is_pubkey_valid_partial(ecc_dev, curve, pk); in kmb_ecc_do_shared_secret()
629 rc = kmb_ecc_point_mult(ecc_dev, result, pk, tctx->private_key, curve); in kmb_ecc_do_shared_secret()
681 rc = kmb_ecc_point_mult(tctx->ecc_dev, pk, &curve->g, tctx->private_key, in kmb_ecc_do_public_key()
687 if (kmb_ocs_ecc_is_pubkey_valid_full(tctx->ecc_dev, curve, pk)) { in kmb_ecc_do_public_key()
715 struct ocs_ecc_dev *ecc_dev = tctx->ecc_dev; in kmb_ocs_ecc_do_one_request() local
723 crypto_finalize_kpp_request(ecc_dev->engine, req, rc); in kmb_ocs_ecc_do_one_request()
749 return crypto_transfer_kpp_request_to_engine(tctx->ecc_dev->engine, in kmb_ocs_ecdh_generate_public_key()
777 return crypto_transfer_kpp_request_to_engine(tctx->ecc_dev->engine, in kmb_ocs_ecdh_compute_shared_secret()
785 tctx->ecc_dev = kmb_ocs_ecc_find_dev(tctx); in kmb_ecc_tctx_init()
787 if (IS_ERR(tctx->ecc_dev)) { in kmb_ecc_tctx_init()
789 PTR_ERR(tctx->ecc_dev)); in kmb_ecc_tctx_init()
790 return PTR_ERR(tctx->ecc_dev); in kmb_ecc_tctx_init()
867 struct ocs_ecc_dev *ecc_dev = dev_id; in ocs_ecc_irq_handler() local
874 status = ioread32(ecc_dev->base_reg + HW_OFFS_OCS_ECC_ISR); in ocs_ecc_irq_handler()
875 iowrite32(status, ecc_dev->base_reg + HW_OFFS_OCS_ECC_ISR); in ocs_ecc_irq_handler()
880 complete(&ecc_dev->irq_done); in ocs_ecc_irq_handler()
888 struct ocs_ecc_dev *ecc_dev; in kmb_ocs_ecc_probe() local
891 ecc_dev = devm_kzalloc(dev, sizeof(*ecc_dev), GFP_KERNEL); in kmb_ocs_ecc_probe()
892 if (!ecc_dev) in kmb_ocs_ecc_probe()
895 ecc_dev->dev = dev; in kmb_ocs_ecc_probe()
897 platform_set_drvdata(pdev, ecc_dev); in kmb_ocs_ecc_probe()
899 INIT_LIST_HEAD(&ecc_dev->list); in kmb_ocs_ecc_probe()
900 init_completion(&ecc_dev->irq_done); in kmb_ocs_ecc_probe()
903 ecc_dev->base_reg = devm_platform_ioremap_resource(pdev, 0); in kmb_ocs_ecc_probe()
904 if (IS_ERR(ecc_dev->base_reg)) { in kmb_ocs_ecc_probe()
906 rc = PTR_ERR(ecc_dev->base_reg); in kmb_ocs_ecc_probe()
911 ecc_dev->irq = platform_get_irq(pdev, 0); in kmb_ocs_ecc_probe()
912 if (ecc_dev->irq < 0) { in kmb_ocs_ecc_probe()
913 rc = ecc_dev->irq; in kmb_ocs_ecc_probe()
917 rc = devm_request_threaded_irq(dev, ecc_dev->irq, ocs_ecc_irq_handler, in kmb_ocs_ecc_probe()
918 NULL, 0, "keembay-ocs-ecc", ecc_dev); in kmb_ocs_ecc_probe()
926 list_add_tail(&ecc_dev->list, &ocs_ecc.dev_list); in kmb_ocs_ecc_probe()
930 ecc_dev->engine = crypto_engine_alloc_init(dev, 1); in kmb_ocs_ecc_probe()
931 if (!ecc_dev->engine) { in kmb_ocs_ecc_probe()
937 rc = crypto_engine_start(ecc_dev->engine); in kmb_ocs_ecc_probe()
964 crypto_engine_exit(ecc_dev->engine); in kmb_ocs_ecc_probe()
968 list_del(&ecc_dev->list); in kmb_ocs_ecc_probe()
976 struct ocs_ecc_dev *ecc_dev; in kmb_ocs_ecc_remove() local
978 ecc_dev = platform_get_drvdata(pdev); in kmb_ocs_ecc_remove()
984 list_del(&ecc_dev->list); in kmb_ocs_ecc_remove()
987 crypto_engine_exit(ecc_dev->engine); in kmb_ocs_ecc_remove()