forked from Minki/linux
gbefb: switch to managed version of the DMA allocator
gbefb uses managed resources, so it should do the same for DMA allocations. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
This commit is contained in:
parent
12a7b035ca
commit
9f989e8c06
@ -1162,9 +1162,9 @@ static int gbefb_probe(struct platform_device *p_dev)
|
||||
}
|
||||
gbe_revision = gbe->ctrlstat & 15;
|
||||
|
||||
gbe_tiles.cpu =
|
||||
dma_alloc_coherent(NULL, GBE_TLB_SIZE * sizeof(uint16_t),
|
||||
&gbe_tiles.dma, GFP_KERNEL);
|
||||
gbe_tiles.cpu = dmam_alloc_coherent(&p_dev->dev,
|
||||
GBE_TLB_SIZE * sizeof(uint16_t),
|
||||
&gbe_tiles.dma, GFP_KERNEL);
|
||||
if (!gbe_tiles.cpu) {
|
||||
printk(KERN_ERR "gbefb: couldn't allocate tiles table\n");
|
||||
ret = -ENOMEM;
|
||||
@ -1178,19 +1178,20 @@ static int gbefb_probe(struct platform_device *p_dev)
|
||||
if (!gbe_mem) {
|
||||
printk(KERN_ERR "gbefb: couldn't map framebuffer\n");
|
||||
ret = -ENOMEM;
|
||||
goto out_tiles_free;
|
||||
goto out_release_mem_region;
|
||||
}
|
||||
|
||||
gbe_dma_addr = 0;
|
||||
} else {
|
||||
/* try to allocate memory with the classical allocator
|
||||
* this has high chance to fail on low memory machines */
|
||||
gbe_mem = dma_alloc_wc(NULL, gbe_mem_size, &gbe_dma_addr,
|
||||
GFP_KERNEL);
|
||||
gbe_mem = dmam_alloc_attrs(&p_dev->dev, gbe_mem_size,
|
||||
&gbe_dma_addr, GFP_KERNEL,
|
||||
DMA_ATTR_WRITE_COMBINE);
|
||||
if (!gbe_mem) {
|
||||
printk(KERN_ERR "gbefb: couldn't allocate framebuffer memory\n");
|
||||
ret = -ENOMEM;
|
||||
goto out_tiles_free;
|
||||
goto out_release_mem_region;
|
||||
}
|
||||
|
||||
gbe_mem_phys = (unsigned long) gbe_dma_addr;
|
||||
@ -1237,11 +1238,6 @@ static int gbefb_probe(struct platform_device *p_dev)
|
||||
|
||||
out_gbe_unmap:
|
||||
arch_phys_wc_del(par->wc_cookie);
|
||||
if (gbe_dma_addr)
|
||||
dma_free_wc(NULL, gbe_mem_size, gbe_mem, gbe_mem_phys);
|
||||
out_tiles_free:
|
||||
dma_free_coherent(NULL, GBE_TLB_SIZE * sizeof(uint16_t),
|
||||
(void *)gbe_tiles.cpu, gbe_tiles.dma);
|
||||
out_release_mem_region:
|
||||
release_mem_region(GBE_BASE, sizeof(struct sgi_gbe));
|
||||
out_release_framebuffer:
|
||||
@ -1258,10 +1254,6 @@ static int gbefb_remove(struct platform_device* p_dev)
|
||||
unregister_framebuffer(info);
|
||||
gbe_turn_off();
|
||||
arch_phys_wc_del(par->wc_cookie);
|
||||
if (gbe_dma_addr)
|
||||
dma_free_wc(NULL, gbe_mem_size, gbe_mem, gbe_mem_phys);
|
||||
dma_free_coherent(NULL, GBE_TLB_SIZE * sizeof(uint16_t),
|
||||
(void *)gbe_tiles.cpu, gbe_tiles.dma);
|
||||
release_mem_region(GBE_BASE, sizeof(struct sgi_gbe));
|
||||
gbefb_remove_sysfs(&p_dev->dev);
|
||||
framebuffer_release(info);
|
||||
|
Loading…
Reference in New Issue
Block a user