Lines Matching refs:ecc_dev

100 	struct ocs_ecc_dev *ecc_dev;  member
143 static void ocs_ecc_cmd_start(struct ocs_ecc_dev *ecc_dev, u32 op_size) in ocs_ecc_cmd_start() argument
146 ecc_dev->base_reg + HW_OFFS_OCS_ECC_COMMAND); in ocs_ecc_cmd_start()
164 static int ocs_ecc_trigger_op(struct ocs_ecc_dev *ecc_dev, u32 op_size, in ocs_ecc_trigger_op() argument
167 reinit_completion(&ecc_dev->irq_done); in ocs_ecc_trigger_op()
169 iowrite32(ECC_ENABLE_INTR, ecc_dev->base_reg + HW_OFFS_OCS_ECC_IER); in ocs_ecc_trigger_op()
170 iowrite32(op_size | inst, ecc_dev->base_reg + HW_OFFS_OCS_ECC_COMMAND); in ocs_ecc_trigger_op()
172 return wait_for_completion_interruptible(&ecc_dev->irq_done); in ocs_ecc_trigger_op()
205 if (tctx->ecc_dev) in kmb_ocs_ecc_find_dev()
206 return tctx->ecc_dev; in kmb_ocs_ecc_find_dev()
211 tctx->ecc_dev = list_first_entry(&ocs_ecc.dev_list, struct ocs_ecc_dev, in kmb_ocs_ecc_find_dev()
216 return tctx->ecc_dev; in kmb_ocs_ecc_find_dev()
220 static int kmb_ecc_point_mult(struct ocs_ecc_dev *ecc_dev, in kmb_ecc_point_mult() argument
243 rc = ocs_ecc_wait_idle(ecc_dev); in kmb_ecc_point_mult()
248 ocs_ecc_cmd_start(ecc_dev, op_size); in kmb_ecc_point_mult()
251 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_AX, in kmb_ecc_point_mult()
255 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_AY, in kmb_ecc_point_mult()
265 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_BX_D, in kmb_ecc_point_mult()
269 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_BY_L, in kmb_ecc_point_mult()
274 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_P, in kmb_ecc_point_mult()
278 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_A, in kmb_ecc_point_mult()
282 rc = ocs_ecc_trigger_op(ecc_dev, op_size, OCS_ECC_INST_CALC_D_IDX_A); in kmb_ecc_point_mult()
287 ocs_ecc_read_cx_out(ecc_dev, result->x, nbytes); in kmb_ecc_point_mult()
288 ocs_ecc_read_cy_out(ecc_dev, result->y, nbytes); in kmb_ecc_point_mult()
305 static int kmb_ecc_do_scalar_op(struct ocs_ecc_dev *ecc_dev, u64 *scalar_out, in kmb_ecc_do_scalar_op() argument
316 rc = ocs_ecc_wait_idle(ecc_dev); in kmb_ecc_do_scalar_op()
321 ocs_ecc_cmd_start(ecc_dev, op_size); in kmb_ecc_do_scalar_op()
324 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_AX, in kmb_ecc_do_scalar_op()
328 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_AY, in kmb_ecc_do_scalar_op()
332 ocs_ecc_write_cmd_and_data(ecc_dev, op_size, OCS_ECC_INST_WRITE_P, in kmb_ecc_do_scalar_op()
336 rc = ocs_ecc_trigger_op(ecc_dev, op_size, inst); in kmb_ecc_do_scalar_op()
340 ocs_ecc_read_cx_out(ecc_dev, scalar_out, nbytes); in kmb_ecc_do_scalar_op()
349 static int kmb_ocs_ecc_is_pubkey_valid_partial(struct ocs_ecc_dev *ecc_dev, in kmb_ocs_ecc_is_pubkey_valid_partial() argument
376 rc = kmb_ecc_do_scalar_op(ecc_dev, yy, pk->y, pk->y, curve, pk->ndigits, in kmb_ocs_ecc_is_pubkey_valid_partial()
385 rc = kmb_ecc_do_scalar_op(ecc_dev, xxx, pk->x, w, curve, pk->ndigits, in kmb_ocs_ecc_is_pubkey_valid_partial()
391 rc = kmb_ecc_do_scalar_op(ecc_dev, w, curve->a, pk->x, curve, in kmb_ocs_ecc_is_pubkey_valid_partial()
398 rc = kmb_ecc_do_scalar_op(ecc_dev, w, w, curve->b, curve, in kmb_ocs_ecc_is_pubkey_valid_partial()
405 rc = kmb_ecc_do_scalar_op(ecc_dev, w, xxx, w, curve, pk->ndigits, in kmb_ocs_ecc_is_pubkey_valid_partial()
424 static int kmb_ocs_ecc_is_pubkey_valid_full(struct ocs_ecc_dev *ecc_dev, in kmb_ocs_ecc_is_pubkey_valid_full() argument
432 rc = kmb_ocs_ecc_is_pubkey_valid_partial(ecc_dev, curve, pk); in kmb_ocs_ecc_is_pubkey_valid_full()
441 rc = kmb_ecc_point_mult(ecc_dev, nQ, pk, curve->n, curve); in kmb_ocs_ecc_is_pubkey_valid_full()
578 struct ocs_ecc_dev *ecc_dev = tctx->ecc_dev; in kmb_ecc_do_shared_secret() local
612 rc = kmb_ocs_ecc_is_pubkey_valid_partial(ecc_dev, curve, pk); in kmb_ecc_do_shared_secret()
624 rc = kmb_ecc_point_mult(ecc_dev, result, pk, tctx->private_key, curve); in kmb_ecc_do_shared_secret()
676 rc = kmb_ecc_point_mult(tctx->ecc_dev, pk, &curve->g, tctx->private_key, in kmb_ecc_do_public_key()
682 if (kmb_ocs_ecc_is_pubkey_valid_full(tctx->ecc_dev, curve, pk)) { in kmb_ecc_do_public_key()
710 struct ocs_ecc_dev *ecc_dev = tctx->ecc_dev; in kmb_ocs_ecc_do_one_request() local
718 crypto_finalize_kpp_request(ecc_dev->engine, req, rc); in kmb_ocs_ecc_do_one_request()
744 return crypto_transfer_kpp_request_to_engine(tctx->ecc_dev->engine, in kmb_ocs_ecdh_generate_public_key()
772 return crypto_transfer_kpp_request_to_engine(tctx->ecc_dev->engine, in kmb_ocs_ecdh_compute_shared_secret()
780 tctx->ecc_dev = kmb_ocs_ecc_find_dev(tctx); in kmb_ecc_tctx_init()
782 if (IS_ERR(tctx->ecc_dev)) { in kmb_ecc_tctx_init()
784 PTR_ERR(tctx->ecc_dev)); in kmb_ecc_tctx_init()
785 return PTR_ERR(tctx->ecc_dev); in kmb_ecc_tctx_init()
860 struct ocs_ecc_dev *ecc_dev = dev_id; in ocs_ecc_irq_handler() local
867 status = ioread32(ecc_dev->base_reg + HW_OFFS_OCS_ECC_ISR); in ocs_ecc_irq_handler()
868 iowrite32(status, ecc_dev->base_reg + HW_OFFS_OCS_ECC_ISR); in ocs_ecc_irq_handler()
873 complete(&ecc_dev->irq_done); in ocs_ecc_irq_handler()
881 struct ocs_ecc_dev *ecc_dev; in kmb_ocs_ecc_probe() local
884 ecc_dev = devm_kzalloc(dev, sizeof(*ecc_dev), GFP_KERNEL); in kmb_ocs_ecc_probe()
885 if (!ecc_dev) in kmb_ocs_ecc_probe()
888 ecc_dev->dev = dev; in kmb_ocs_ecc_probe()
890 platform_set_drvdata(pdev, ecc_dev); in kmb_ocs_ecc_probe()
892 INIT_LIST_HEAD(&ecc_dev->list); in kmb_ocs_ecc_probe()
893 init_completion(&ecc_dev->irq_done); in kmb_ocs_ecc_probe()
896 ecc_dev->base_reg = devm_platform_ioremap_resource(pdev, 0); in kmb_ocs_ecc_probe()
897 if (IS_ERR(ecc_dev->base_reg)) { in kmb_ocs_ecc_probe()
899 rc = PTR_ERR(ecc_dev->base_reg); in kmb_ocs_ecc_probe()
904 ecc_dev->irq = platform_get_irq(pdev, 0); in kmb_ocs_ecc_probe()
905 if (ecc_dev->irq < 0) { in kmb_ocs_ecc_probe()
906 rc = ecc_dev->irq; in kmb_ocs_ecc_probe()
910 rc = devm_request_threaded_irq(dev, ecc_dev->irq, ocs_ecc_irq_handler, in kmb_ocs_ecc_probe()
911 NULL, 0, "keembay-ocs-ecc", ecc_dev); in kmb_ocs_ecc_probe()
919 list_add_tail(&ecc_dev->list, &ocs_ecc.dev_list); in kmb_ocs_ecc_probe()
923 ecc_dev->engine = crypto_engine_alloc_init(dev, 1); in kmb_ocs_ecc_probe()
924 if (!ecc_dev->engine) { in kmb_ocs_ecc_probe()
930 rc = crypto_engine_start(ecc_dev->engine); in kmb_ocs_ecc_probe()
957 crypto_engine_exit(ecc_dev->engine); in kmb_ocs_ecc_probe()
961 list_del(&ecc_dev->list); in kmb_ocs_ecc_probe()
969 struct ocs_ecc_dev *ecc_dev; in kmb_ocs_ecc_remove() local
971 ecc_dev = platform_get_drvdata(pdev); in kmb_ocs_ecc_remove()
977 list_del(&ecc_dev->list); in kmb_ocs_ecc_remove()
980 crypto_engine_exit(ecc_dev->engine); in kmb_ocs_ecc_remove()