Lines Matching +full:timeout +full:- +full:sec

1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2008-2014 Freescale Semiconductor, Inc.
18 #define CIRC_CNT(head, tail, size) (((head) - (tail)) & (size - 1))
34 (CONFIG_SYS_FSL_JR0_OFFSET - CONFIG_SYS_FSL_SEC_OFFSET))
40 ccsr_sec_t *sec = (void *)SEC_ADDR(sec_idx); in start_jr0() local
41 u32 ctpr_ms = sec_in32(&sec->ctpr_ms); in start_jr0()
42 u32 scfgr = sec_in32(&sec->scfgr); in start_jr0()
50 sec_out32(&sec->jrstartr, CONFIG_JRSTARTR_JR0); in start_jr0()
54 sec_out32(&sec->jrstartr, CONFIG_JRSTARTR_JR0); in start_jr0()
60 ccsr_sec_t *sec = (void *)SEC_ADDR(sec_idx); in jr_reset_liodn() local
61 sec_out32(&sec->jrliodnr[0].ls, 0); in jr_reset_liodn()
67 uint32_t jrcfg = sec_in32(&regs->jrcfg1); in jr_disable_irq()
71 sec_out32(&regs->jrcfg1, jrcfg); in jr_disable_irq()
78 phys_addr_t ip_base = virt_to_phys((void *)jr->input_ring); in jr_initregs()
79 phys_addr_t op_base = virt_to_phys((void *)jr->output_ring); in jr_initregs()
82 sec_out32(&regs->irba_h, ip_base >> 32); in jr_initregs()
84 sec_out32(&regs->irba_h, 0x0); in jr_initregs()
86 sec_out32(&regs->irba_l, (uint32_t)ip_base); in jr_initregs()
88 sec_out32(&regs->orba_h, op_base >> 32); in jr_initregs()
90 sec_out32(&regs->orba_h, 0x0); in jr_initregs()
92 sec_out32(&regs->orba_l, (uint32_t)op_base); in jr_initregs()
93 sec_out32(&regs->ors, JR_SIZE); in jr_initregs()
94 sec_out32(&regs->irs, JR_SIZE); in jr_initregs()
96 if (!jr->irq) in jr_initregs()
106 jr->jq_id = DEFAULT_JR_ID; in jr_init()
107 jr->irq = DEFAULT_IRQ; in jr_init()
110 jr->liodn = DEFAULT_JR_LIODN; in jr_init()
112 jr->size = JR_SIZE; in jr_init()
113 jr->input_ring = (dma_addr_t *)memalign(ARCH_DMA_MINALIGN, in jr_init()
115 if (!jr->input_ring) in jr_init()
116 return -1; in jr_init()
118 jr->op_size = roundup(JR_SIZE * sizeof(struct op_ring), in jr_init()
120 jr->output_ring = in jr_init()
121 (struct op_ring *)memalign(ARCH_DMA_MINALIGN, jr->op_size); in jr_init()
122 if (!jr->output_ring) in jr_init()
123 return -1; in jr_init()
125 memset(jr->input_ring, 0, JR_SIZE * sizeof(dma_addr_t)); in jr_init()
126 memset(jr->output_ring, 0, jr->op_size); in jr_init()
139 jr->head = 0; in jr_sw_cleanup()
140 jr->tail = 0; in jr_sw_cleanup()
141 jr->read_idx = 0; in jr_sw_cleanup()
142 jr->write_idx = 0; in jr_sw_cleanup()
143 memset(jr->info, 0, sizeof(jr->info)); in jr_sw_cleanup()
144 memset(jr->input_ring, 0, jr->size * sizeof(dma_addr_t)); in jr_sw_cleanup()
145 memset(jr->output_ring, 0, jr->size * sizeof(struct op_ring)); in jr_sw_cleanup()
153 uint32_t timeout = 100000; in jr_hw_reset() local
156 sec_out32(&regs->jrcr, JRCR_RESET); in jr_hw_reset()
158 jrint = sec_in32(&regs->jrint); in jr_hw_reset()
160 JRINT_ERR_HALT_INPROGRESS) && --timeout); in jr_hw_reset()
162 jrint = sec_in32(&regs->jrint); in jr_hw_reset()
164 JRINT_ERR_HALT_INPROGRESS) && timeout == 0) in jr_hw_reset()
165 return -1; in jr_hw_reset()
167 timeout = 100000; in jr_hw_reset()
168 sec_out32(&regs->jrcr, JRCR_RESET); in jr_hw_reset()
170 jrcr = sec_in32(&regs->jrcr); in jr_hw_reset()
171 } while ((jrcr & JRCR_RESET) && --timeout); in jr_hw_reset()
173 if (timeout == 0) in jr_hw_reset()
174 return -1; in jr_hw_reset()
179 /* -1 --- error, can't enqueue -- no space available */
186 int head = jr->head; in jr_enqueue()
194 /* The descriptor must be submitted to SEC block as per endianness in jr_enqueue()
195 * of the SEC Block. in jr_enqueue()
196 * So, if the endianness of Core and SEC block is different, each word in jr_enqueue()
197 * of the descriptor will be byte-swapped. in jr_enqueue()
206 jr->info[head].desc_phys_addr = desc_phys_addr; in jr_enqueue()
207 jr->info[head].callback = (void *)callback; in jr_enqueue()
208 jr->info[head].arg = arg; in jr_enqueue()
209 jr->info[head].op_done = 0; in jr_enqueue()
211 unsigned long start = (unsigned long)&jr->info[head] & in jr_enqueue()
212 ~(ARCH_DMA_MINALIGN - 1); in jr_enqueue()
213 unsigned long end = ALIGN((unsigned long)&jr->info[head] + in jr_enqueue()
220 * depend on endianness of SEC block. in jr_enqueue()
223 addr_lo = (uint32_t *)(&jr->input_ring[head]); in jr_enqueue()
224 addr_hi = (uint32_t *)(&jr->input_ring[head]) + 1; in jr_enqueue()
226 addr_hi = (uint32_t *)(&jr->input_ring[head]); in jr_enqueue()
227 addr_lo = (uint32_t *)(&jr->input_ring[head]) + 1; in jr_enqueue()
235 sec_out32(&jr->input_ring[head], desc_phys_addr); in jr_enqueue()
238 start = (unsigned long)&jr->input_ring[head] & ~(ARCH_DMA_MINALIGN - 1); in jr_enqueue()
239 end = ALIGN((unsigned long)&jr->input_ring[head] + in jr_enqueue()
243 jr->head = (head + 1) & (jr->size - 1); in jr_enqueue()
246 start = (unsigned long)jr->output_ring & in jr_enqueue()
247 ~(ARCH_DMA_MINALIGN - 1); in jr_enqueue()
248 end = ALIGN((unsigned long)jr->output_ring + jr->op_size, in jr_enqueue()
252 sec_out32(&regs->irja, 1); in jr_enqueue()
261 int head = jr->head; in jr_dequeue()
262 int tail = jr->tail; in jr_dequeue()
272 while (sec_in32(&regs->orsf) && CIRC_CNT(jr->head, jr->tail, in jr_dequeue()
273 jr->size)) { in jr_dequeue()
281 * depend on endianness of SEC block. in jr_dequeue()
284 addr_lo = (uint32_t *)(&jr->output_ring[jr->tail].desc); in jr_dequeue()
285 addr_hi = (uint32_t *)(&jr->output_ring[jr->tail].desc) + 1; in jr_dequeue()
287 addr_hi = (uint32_t *)(&jr->output_ring[jr->tail].desc); in jr_dequeue()
288 addr_lo = (uint32_t *)(&jr->output_ring[jr->tail].desc) + 1; in jr_dequeue()
296 addr = (uint32_t *)&jr->output_ring[jr->tail].desc; in jr_dequeue()
300 uint32_t status = sec_in32(&jr->output_ring[jr->tail].status); in jr_dequeue()
302 for (i = 0; CIRC_CNT(head, tail + i, jr->size) >= 1; i++) { in jr_dequeue()
303 idx = (tail + i) & (jr->size - 1); in jr_dequeue()
304 if (op_desc == jr->info[idx].desc_phys_addr) { in jr_dequeue()
312 return -1; in jr_dequeue()
314 jr->info[idx].op_done = 1; in jr_dequeue()
315 callback = (void *)jr->info[idx].callback; in jr_dequeue()
316 arg = jr->info[idx].arg; in jr_dequeue()
324 tail = (tail + 1) & (jr->size - 1); in jr_dequeue()
325 } while (jr->info[tail].op_done); in jr_dequeue()
327 jr->tail = tail; in jr_dequeue()
328 jr->read_idx = (jr->read_idx + 1) & (jr->size - 1); in jr_dequeue()
330 sec_out32(&regs->orjr, 1); in jr_dequeue()
331 jr->info[idx].op_done = 0; in jr_dequeue()
342 x->status = status; in desc_done()
346 x->done = 1; in desc_done()
352 unsigned long long timeout = usec2ticks(CONFIG_SEC_DEQ_TIMEOUT); in run_descriptor_jr_idx() local
360 debug("Error in SEC enq\n"); in run_descriptor_jr_idx()
366 timeout = usec2ticks(CONFIG_SEC_DEQ_TIMEOUT); in run_descriptor_jr_idx()
370 debug("Error in SEC deq\n"); in run_descriptor_jr_idx()
375 if ((get_ticks() - timeval) > timeout) { in run_descriptor_jr_idx()
376 debug("SEC Dequeue timed out\n"); in run_descriptor_jr_idx()
398 return -1; in jr_reset_sec()
413 ccsr_sec_t *sec = (void *)SEC_ADDR(sec_idx); in sec_reset_idx() local
414 uint32_t mcfgr = sec_in32(&sec->mcfgr); in sec_reset_idx()
415 uint32_t timeout = 100000; in sec_reset_idx() local
418 sec_out32(&sec->mcfgr, mcfgr); in sec_reset_idx()
421 sec_out32(&sec->mcfgr, mcfgr); in sec_reset_idx()
423 mcfgr = sec_in32(&sec->mcfgr); in sec_reset_idx()
424 } while ((mcfgr & MCFGR_DMA_RST) == MCFGR_DMA_RST && --timeout); in sec_reset_idx()
426 if (timeout == 0) in sec_reset_idx()
427 return -1; in sec_reset_idx()
429 timeout = 100000; in sec_reset_idx()
431 mcfgr = sec_in32(&sec->mcfgr); in sec_reset_idx()
432 } while ((mcfgr & MCFGR_SWRST) == MCFGR_SWRST && --timeout); in sec_reset_idx()
434 if (timeout == 0) in sec_reset_idx()
435 return -1; in sec_reset_idx()
449 ccsr_sec_t __iomem *sec = (ccsr_sec_t __iomem *)SEC_ADDR(sec_idx); in instantiate_rng() local
451 (struct rng4tst __iomem *)&sec->rng; in instantiate_rng()
456 return -1; in instantiate_rng()
464 rdsta_val = sec_in32(&rng->rdsta) & RNG_STATE_HANDLE_MASK; in instantiate_rng()
479 rdsta_val = sec_in32(&rng->rdsta) & RNG_STATE_HANDLE_MASK; in instantiate_rng()
482 return -1; in instantiate_rng()
495 ccsr_sec_t *sec = (void *)SEC_ADDR(sec_idx); in get_rng_vid() local
496 u32 cha_vid = sec_in32(&sec->chavid_ls); in get_rng_vid()
507 ccsr_sec_t __iomem *sec = (ccsr_sec_t __iomem *)SEC_ADDR(sec_idx); in kick_trng() local
509 (struct rng4tst __iomem *)&sec->rng; in kick_trng()
513 sec_setbits32(&rng->rtmctl, RTMCTL_PRGM); in kick_trng()
514 /* rtsdctl bits 0-15 contain "Entropy Delay, which defines the in kick_trng()
517 val = sec_in32(&rng->rtsdctl); in kick_trng()
520 sec_out32(&rng->rtsdctl, val); in kick_trng()
522 sec_out32(&rng->rtfreqmin, ent_delay >> 2); in kick_trng()
524 sec_out32(&rng->rtfreqmax, RTFRQMAX_DISABLE); in kick_trng()
529 sec_setbits32(&rng->rtmctl, RTMCTL_SAMP_MODE_RAW_ES_SC); in kick_trng()
531 sec_clrbits32(&rng->rtmctl, RTMCTL_PRGM); in kick_trng()
537 ccsr_sec_t __iomem *sec = (ccsr_sec_t __iomem *)SEC_ADDR(sec_idx); in rng_init() local
539 (struct rng4tst __iomem *)&sec->rng; in rng_init()
543 inst_handles = sec_in32(&rng->rdsta) & RNG_STATE_HANDLE_MASK; in rng_init()
565 } while ((ret == -1) && (ent_delay < RTSDCTL_ENT_DLY_MAX)); in rng_init()
572 sec_setbits32(&sec->scfgr, SEC_SCFGR_RDBENABLE); in rng_init()
579 ccsr_sec_t *sec = (void *)SEC_ADDR(sec_idx); in sec_init_idx() local
580 uint32_t mcr = sec_in32(&sec->mcfgr); in sec_init_idx()
592 printf("SEC initialization failed\n"); in sec_init_idx()
593 return -1; in sec_init_idx()
599 * For AXI Write - Cacheable, Write Back, Write allocate in sec_init_idx()
600 * For AXI Read - Cacheable, Read allocate in sec_init_idx()
613 sec_out32(&sec->mcfgr, mcr); in sec_init_idx()
618 * For SPL Build, Set the Liodns in SEC JR0 for in sec_init_idx()
625 liodnr = sec_in32(&sec->jrliodnr[0].ls) & in sec_init_idx()
630 sec_out32(&sec->jrliodnr[0].ls, liodnr); in sec_init_idx()
632 liodnr = sec_in32(&sec->jrliodnr[0].ls); in sec_init_idx()
638 /* Set ownership of job rings to non-TrustZone mode by default */ in sec_init_idx()
639 for (i = 0; i < ARRAY_SIZE(sec->jrliodnr); i++) { in sec_init_idx()
640 jrown_ns = sec_in32(&sec->jrliodnr[i].ms); in sec_init_idx()
642 sec_out32(&sec->jrliodnr[i].ms, jrown_ns); in sec_init_idx()
647 printf("SEC initialization failed\n"); in sec_init_idx()
648 return -1; in sec_init_idx()
654 return -1; in sec_init_idx()
661 printf("SEC%u: RNG instantiation failed\n", sec_idx); in sec_init_idx()
662 return -1; in sec_init_idx()
664 printf("SEC%u: RNG instantiated\n", sec_idx); in sec_init_idx()