Lines Matching refs:ecc_dev

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