Hello The sun8i-ce hardware can work on multiple requests in one batch. For this it use a task descriptor, and chain them. For the moment, the driver does not use this mechanism and do requests one at a time and issue an irq for each. Using the chaining will permit to issue less interrupts, and increase thoughput. But the crypto/engine can enqueue lots of requests but can ran them only one by one. This serie introduce a way to batch requests in crypto/engine by adding a new function can_queue_more() that a driver can implement to tell crypto_engine if it can handle more request. For testing the serie, the selftest are not enough, since it issue request one at a time. I have used LUKS for testing it. Tested on sun8i-ce (with/without batching). And tested for non-regression on caam, amlogic and sun8i-ss drivers. The 4 first patchs are cleanup necessary for permit crypto_engine to handle more requests. The 5th patch introduce the new wrappers for handle multiple requests. Lasts patchs are for enabling batching in sun8i-ce. Regards Corentin Labbe (9): crypto: engine: workqueue can only be processed one by one crypto: engine: get rid of cur_req_prepared crypto: engine: get rid of cur_req crypto: engine: permit to choose queue length crypto: engine: add enqueue_request/can_do_more crypto: sun8i-ce: move iv data to request context crypto: sun8i-ce: increase task list size crypto: sun8i-ce: split into prepare/run/unprepare crypto: sun8i-ce: permit to batch requests crypto/crypto_engine.c | 99 +++++++----- .../allwinner/sun8i-ce/sun8i-ce-cipher.c | 153 ++++++++++++++---- .../crypto/allwinner/sun8i-ce/sun8i-ce-core.c | 19 ++- drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h | 20 ++- include/crypto/engine.h | 19 +-- 5 files changed, 213 insertions(+), 97 deletions(-) -- 2.24.1