|
@@ -46,6 +46,7 @@ struct vsp1_dl_entry {
|
|
|
* @dma: DMA address of the entries
|
|
|
* @size: size of the DMA memory in bytes
|
|
|
* @num_entries: number of stored entries
|
|
|
+ * @max_entries: number of entries available
|
|
|
*/
|
|
|
struct vsp1_dl_body {
|
|
|
struct list_head list;
|
|
@@ -56,6 +57,7 @@ struct vsp1_dl_body {
|
|
|
size_t size;
|
|
|
|
|
|
unsigned int num_entries;
|
|
|
+ unsigned int max_entries;
|
|
|
};
|
|
|
|
|
|
/**
|
|
@@ -138,6 +140,7 @@ static int vsp1_dl_body_init(struct vsp1_device *vsp1,
|
|
|
|
|
|
dlb->vsp1 = vsp1;
|
|
|
dlb->size = size;
|
|
|
+ dlb->max_entries = num_entries;
|
|
|
|
|
|
dlb->entries = dma_alloc_wc(vsp1->bus_master, dlb->size, &dlb->dma,
|
|
|
GFP_KERNEL);
|
|
@@ -219,6 +222,10 @@ void vsp1_dl_body_free(struct vsp1_dl_body *dlb)
|
|
|
*/
|
|
|
void vsp1_dl_body_write(struct vsp1_dl_body *dlb, u32 reg, u32 data)
|
|
|
{
|
|
|
+ if (WARN_ONCE(dlb->num_entries >= dlb->max_entries,
|
|
|
+ "DLB size exceeded (max %u)", dlb->max_entries))
|
|
|
+ return;
|
|
|
+
|
|
|
dlb->entries[dlb->num_entries].addr = reg;
|
|
|
dlb->entries[dlb->num_entries].data = data;
|
|
|
dlb->num_entries++;
|