@@ -256,6 +256,7 @@ static void caam_cleanup(struct hwrng *rng)
256
256
}
257
257
258
258
rng_unmap_ctx (rng_ctx );
259
+ caam_jr_free (rng_ctx -> jrdev );
259
260
}
260
261
261
262
static int caam_init_buf (struct caam_rng_ctx * ctx , int buf_id )
@@ -274,28 +275,43 @@ static int caam_init_buf(struct caam_rng_ctx *ctx, int buf_id)
274
275
return 0 ;
275
276
}
276
277
277
- static int caam_init_rng (struct caam_rng_ctx * ctx , struct device * jrdev )
278
+ static int caam_init (struct hwrng * rng )
278
279
{
280
+ struct caam_rng_ctx * ctx = rng_ctx ;
279
281
int err ;
280
282
281
- ctx -> jrdev = jrdev ;
283
+ ctx -> jrdev = caam_jr_alloc ();
284
+ err = PTR_ERR_OR_ZERO (ctx -> jrdev );
285
+ if (err ) {
286
+ pr_err ("Job Ring Device allocation for transform failed\n" );
287
+ return err ;
288
+ }
282
289
283
290
err = rng_create_sh_desc (ctx );
284
291
if (err )
285
- return err ;
292
+ goto free_jrdev ;
286
293
287
294
ctx -> current_buf = 0 ;
288
295
ctx -> cur_buf_idx = 0 ;
289
296
290
297
err = caam_init_buf (ctx , 0 );
291
298
if (err )
292
- return err ;
299
+ goto free_jrdev ;
300
+
301
+ err = caam_init_buf (ctx , 1 );
302
+ if (err )
303
+ goto free_jrdev ;
293
304
294
- return caam_init_buf (ctx , 1 );
305
+ return 0 ;
306
+
307
+ free_jrdev :
308
+ caam_jr_free (ctx -> jrdev );
309
+ return err ;
295
310
}
296
311
297
312
static struct hwrng caam_rng = {
298
313
.name = "rng-caam" ,
314
+ .init = caam_init ,
299
315
.cleanup = caam_cleanup ,
300
316
.read = caam_read ,
301
317
};
@@ -305,14 +321,12 @@ void caam_rng_exit(void)
305
321
if (!init_done )
306
322
return ;
307
323
308
- caam_jr_free (rng_ctx -> jrdev );
309
324
hwrng_unregister (& caam_rng );
310
325
kfree (rng_ctx );
311
326
}
312
327
313
328
int caam_rng_init (struct device * ctrldev )
314
329
{
315
- struct device * dev ;
316
330
u32 rng_inst ;
317
331
struct caam_drv_private * priv = dev_get_drvdata (ctrldev );
318
332
int err ;
@@ -328,31 +342,18 @@ int caam_rng_init(struct device *ctrldev)
328
342
if (!rng_inst )
329
343
return 0 ;
330
344
331
- dev = caam_jr_alloc ();
332
- if (IS_ERR (dev )) {
333
- pr_err ("Job Ring Device allocation for transform failed\n" );
334
- return PTR_ERR (dev );
335
- }
336
345
rng_ctx = kmalloc (sizeof (* rng_ctx ), GFP_DMA | GFP_KERNEL );
337
- if (!rng_ctx ) {
338
- err = - ENOMEM ;
339
- goto free_caam_alloc ;
340
- }
341
- err = caam_init_rng (rng_ctx , dev );
342
- if (err )
343
- goto free_rng_ctx ;
346
+ if (!rng_ctx )
347
+ return - ENOMEM ;
344
348
345
- dev_info (dev , "registering rng-caam\n" );
349
+ dev_info (ctrldev , "registering rng-caam\n" );
346
350
347
351
err = hwrng_register (& caam_rng );
348
352
if (!err ) {
349
353
init_done = true;
350
354
return err ;
351
355
}
352
356
353
- free_rng_ctx :
354
357
kfree (rng_ctx );
355
- free_caam_alloc :
356
- caam_jr_free (dev );
357
358
return err ;
358
359
}
0 commit comments