static void qpic_nand_wait_for_cmd_exec(uint32_t num_desc) { /* Create a read/write event to notify the periperal of the added desc. */ bam_sys_gen_event(&bam, CMD_PIPE_INDEX, num_desc); /* Wait for the descriptors to be processed */ bam_wait_for_interrupt(&bam, CMD_PIPE_INDEX, P_PRCSD_DESC_EN_MASK); /* Read offset update for the circular FIFO */ bam_read_offset_update(&bam, CMD_PIPE_INDEX); }
static void crypto_wait_for_cmd_exec(struct bam_instance *bam_core, uint32_t num_desc, uint8_t pipe) { /* Create a read/write event to notify the periperal of the added desc. */ bam_sys_gen_event(bam_core, pipe, num_desc); /* Wait for the descriptors to be processed */ bam_wait_for_interrupt(bam_core, pipe, P_PRCSD_DESC_EN_MASK); /* Read offset update for the circular FIFO */ bam_read_offset_update(bam_core, pipe); }
/* Function to add BAM descriptors for a given fifo. * bam : BAM instance to be used. * data_ptr : Memory address for data transfer. * data_len : Length of the data_ptr. * flags : Flags to be set on the last desc added. * * Note: This function also notifies the BAM about the added descriptors. */ int bam_add_desc(struct bam_instance *bam, unsigned int pipe_num, unsigned char *data_ptr, unsigned int data_len, unsigned flags) { int bam_ret = BAM_RESULT_SUCCESS; unsigned int len = data_len; unsigned int desc_len; unsigned int n = 0; unsigned int desc_flags; dprintf(INFO, "Data length for BAM transfer is %u\n", data_len); if (data_ptr == NULL || len == 0) { dprintf(CRITICAL, "Wrong params for BAM transfer \n"); bam_ret = BAM_RESULT_FAILURE; goto bam_add_desc_error; } /* Check if we have enough space in FIFO */ if (len > (unsigned)bam->pipe[pipe_num].fifo.size * BAM_MAX_DESC_DATA_LEN) { dprintf(CRITICAL, "Data transfer exceeds desc fifo length.\n"); bam_ret = BAM_RESULT_FAILURE; goto bam_add_desc_error; } while (len) { /* There are only 16 bits to write data length. * If more bits are needed, create more * descriptors. */ if (len > BAM_MAX_DESC_DATA_LEN) { desc_len = BAM_MAX_DESC_DATA_LEN; len -= BAM_MAX_DESC_DATA_LEN; desc_flags = 0; } else { desc_len = len; len = 0; /* Set correct flags on the last desc. */ desc_flags = flags; } /* Write descriptor */ bam_add_one_desc(bam, pipe_num, data_ptr, desc_len, desc_flags); data_ptr += BAM_MAX_DESC_DATA_LEN; n++; } /* Create a read/write event to notify the periperal of the added desc. */ bam_sys_gen_event(bam, pipe_num, n); bam_add_desc_error: return bam_ret; }