Merge "platform-drivers: msm: sps: improve robustness of SPS driver" into msm-3.0
This commit is contained in:
committed by
QuIC Gerrit Code Review
commit
1aa2e29e45
@@ -1203,11 +1203,11 @@ exit_err:
|
|||||||
mutex_unlock(&sps->lock);
|
mutex_unlock(&sps->lock);
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
if (virt_addr != NULL)
|
if (bam != NULL) {
|
||||||
iounmap(bam->props.virt_addr);
|
if (virt_addr != NULL)
|
||||||
|
iounmap(bam->props.virt_addr);
|
||||||
if (bam != NULL)
|
|
||||||
kfree(bam);
|
kfree(bam);
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -634,9 +634,16 @@ void sps_bam_pipe_free(struct sps_bam *dev, u32 pipe_index)
|
|||||||
SPS_ERR("Disconnect BAM 0x%x pipe %d with events pending",
|
SPS_ERR("Disconnect BAM 0x%x pipe %d with events pending",
|
||||||
BAM_ID(dev), pipe_index);
|
BAM_ID(dev), pipe_index);
|
||||||
|
|
||||||
list_for_each_entry(sps_event, &pipe->sys.events_q, list) {
|
sps_event = list_entry((&pipe->sys.events_q)->next,
|
||||||
|
typeof(*sps_event), list);
|
||||||
|
|
||||||
|
while (&sps_event->list != (&pipe->sys.events_q)) {
|
||||||
|
struct sps_q_event *sps_event_delete = sps_event;
|
||||||
|
|
||||||
list_del(&sps_event->list);
|
list_del(&sps_event->list);
|
||||||
kfree(sps_event);
|
sps_event = list_entry(sps_event->list.next,
|
||||||
|
typeof(*sps_event), list);
|
||||||
|
kfree(sps_event_delete);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1086,11 +1093,17 @@ int sps_bam_pipe_reg_event(struct sps_bam *dev,
|
|||||||
continue; /* No */
|
continue; /* No */
|
||||||
|
|
||||||
index = SPS_EVENT_INDEX(opt_event_table[n].event_id);
|
index = SPS_EVENT_INDEX(opt_event_table[n].event_id);
|
||||||
event_reg = &pipe->sys.event_regs[index];
|
if (index < 0)
|
||||||
event_reg->xfer_done = reg->xfer_done;
|
SPS_ERR("Negative event index: "
|
||||||
event_reg->callback = reg->callback;
|
"BAM 0x%x pipe %d mode %d",
|
||||||
event_reg->mode = reg->mode;
|
BAM_ID(dev), pipe_index, reg->mode);
|
||||||
event_reg->user = reg->user;
|
else {
|
||||||
|
event_reg = &pipe->sys.event_regs[index];
|
||||||
|
event_reg->xfer_done = reg->xfer_done;
|
||||||
|
event_reg->callback = reg->callback;
|
||||||
|
event_reg->mode = reg->mode;
|
||||||
|
event_reg->user = reg->user;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -291,6 +291,11 @@ int sps_dma_device_init(u32 h)
|
|||||||
dev->h = h;
|
dev->h = h;
|
||||||
dev->bam = sps_h2bam(h);
|
dev->bam = sps_h2bam(h);
|
||||||
|
|
||||||
|
if (dev->bam == NULL) {
|
||||||
|
SPS_ERR("BAM-DMA BAM device is not found from the handle.");
|
||||||
|
goto exit_err;
|
||||||
|
}
|
||||||
|
|
||||||
/* Map the BAM DMA device into virtual space, if necessary */
|
/* Map the BAM DMA device into virtual space, if necessary */
|
||||||
props = &dev->bam->props;
|
props = &dev->bam->props;
|
||||||
dev->phys_addr = props->periph_phys_addr;
|
dev->phys_addr = props->periph_phys_addr;
|
||||||
|
|||||||
@@ -131,6 +131,12 @@ int sps_mem_init(u32 pipemem_phys_base, u32 pipemem_size)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
pool = gen_pool_create(min_alloc_order, nid);
|
pool = gen_pool_create(min_alloc_order, nid);
|
||||||
|
|
||||||
|
if (!pool) {
|
||||||
|
SPS_ERR("sps:Failed to create a new memory pool.\n");
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_SPS_SUPPORT_NDP_BAM
|
#ifndef CONFIG_SPS_SUPPORT_NDP_BAM
|
||||||
res = gen_pool_add(pool, (u32) iomem_virt, iomem_size, nid);
|
res = gen_pool_add(pool, (u32) iomem_virt, iomem_size, nid);
|
||||||
if (res)
|
if (res)
|
||||||
|
|||||||
Reference in New Issue
Block a user