22
22
#include "jr.h"
23
23
#include "error.h"
24
24
25
- #define CAAM_RNG_MAX_FIFO_STORE_SIZE U16_MAX
26
-
27
- #define CAAM_RNG_FIFO_LEN SZ_32K /* Must be a multiple of 2 */
25
+ #define CAAM_RNG_MAX_FIFO_STORE_SIZE 16
28
26
29
27
/*
30
28
* Length of used descriptors, see caam_init_desc()
@@ -65,14 +63,15 @@ static void caam_rng_done(struct device *jrdev, u32 *desc, u32 err,
65
63
complete (jctx -> done );
66
64
}
67
65
68
- static u32 * caam_init_desc (u32 * desc , dma_addr_t dst_dma , int len )
66
+ static u32 * caam_init_desc (u32 * desc , dma_addr_t dst_dma )
69
67
{
70
68
init_job_desc (desc , 0 ); /* + 1 cmd_sz */
71
69
/* Generate random bytes: + 1 cmd_sz */
72
70
append_operation (desc , OP_ALG_ALGSEL_RNG | OP_TYPE_CLASS1_ALG |
73
71
OP_ALG_PR_ON );
74
72
/* Store bytes: + 1 cmd_sz + caam_ptr_sz */
75
- append_fifo_store (desc , dst_dma , len , FIFOST_TYPE_RNGSTORE );
73
+ append_fifo_store (desc , dst_dma ,
74
+ CAAM_RNG_MAX_FIFO_STORE_SIZE , FIFOST_TYPE_RNGSTORE );
76
75
77
76
print_hex_dump_debug ("rng job desc@: " , DUMP_PREFIX_ADDRESS ,
78
77
16 , 4 , desc , desc_bytes (desc ), 1 );
@@ -92,7 +91,7 @@ static int caam_rng_read_one(struct device *jrdev,
92
91
.err = & ret ,
93
92
};
94
93
95
- len = min_t ( int , len , CAAM_RNG_MAX_FIFO_STORE_SIZE ) ;
94
+ len = CAAM_RNG_MAX_FIFO_STORE_SIZE ;
96
95
97
96
dst_dma = dma_map_single (jrdev , dst , len , DMA_FROM_DEVICE );
98
97
if (dma_mapping_error (jrdev , dst_dma )) {
@@ -102,7 +101,7 @@ static int caam_rng_read_one(struct device *jrdev,
102
101
103
102
init_completion (done );
104
103
err = caam_jr_enqueue (jrdev ,
105
- caam_init_desc (desc , dst_dma , len ),
104
+ caam_init_desc (desc , dst_dma ),
106
105
caam_rng_done , & jctx );
107
106
if (err == - EINPROGRESS ) {
108
107
wait_for_completion (done );
@@ -122,7 +121,7 @@ static void caam_rng_fill_async(struct caam_rng_ctx *ctx)
122
121
123
122
sg_init_table (sg , ARRAY_SIZE (sg ));
124
123
nents = kfifo_dma_in_prepare (& ctx -> fifo , sg , ARRAY_SIZE (sg ),
125
- CAAM_RNG_FIFO_LEN );
124
+ CAAM_RNG_MAX_FIFO_STORE_SIZE );
126
125
if (!nents )
127
126
return ;
128
127
@@ -156,7 +155,7 @@ static int caam_read(struct hwrng *rng, void *dst, size_t max, bool wait)
156
155
}
157
156
158
157
out = kfifo_out (& ctx -> fifo , dst , max );
159
- if (kfifo_len (& ctx -> fifo ) <= CAAM_RNG_FIFO_LEN / 2 )
158
+ if (kfifo_is_empty (& ctx -> fifo ))
160
159
schedule_work (& ctx -> worker );
161
160
162
161
return out ;
@@ -186,7 +185,8 @@ static int caam_init(struct hwrng *rng)
186
185
if (!ctx -> desc_async )
187
186
return - ENOMEM ;
188
187
189
- if (kfifo_alloc (& ctx -> fifo , CAAM_RNG_FIFO_LEN , GFP_DMA | GFP_KERNEL ))
188
+ if (kfifo_alloc (& ctx -> fifo , CAAM_RNG_MAX_FIFO_STORE_SIZE ,
189
+ GFP_DMA | GFP_KERNEL ))
190
190
return - ENOMEM ;
191
191
192
192
INIT_WORK (& ctx -> worker , caam_rng_worker );
@@ -246,6 +246,7 @@ int caam_rng_init(struct device *ctrldev)
246
246
ctx -> rng .cleanup = caam_cleanup ;
247
247
ctx -> rng .read = caam_read ;
248
248
ctx -> rng .priv = (unsigned long )ctx ;
249
+ ctx -> rng .quality = 1024 ;
249
250
250
251
dev_info (ctrldev , "registering rng-caam\n" );
251
252
0 commit comments