Skip to content

Commit fb25070

Browse files
3x380VBoris Brezillon
authored andcommitted
mtd: onenand: omap2: Unify OMAP2 and OMAP3 DMA implementation
Since the very first commit (36cd4fb: "[MTD] [OneNAND] Add OMAP2 / OMAP3 OneNAND driver") DMA is disabled for OMAP2. Later fixes thus went only into OMAP3 specific DMA functions which turned out not to be so OMAP3 specific, so merge those two implementations. Signed-off-by: Ladislav Michl <ladis@linux-mips.org> Reviewed-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> Acked-by: Roger Quadros <rogerq@ti.com> Tested-by: Tony Lindgren <tony@atomide.com> Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
1 parent 3621311 commit fb25070

File tree

1 file changed

+4
-125
lines changed

1 file changed

+4
-125
lines changed

drivers/mtd/onenand/omap2.c

Lines changed: 4 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -315,9 +315,7 @@ static inline int omap2_onenand_dma_transfer(struct omap2_onenand *c,
315315
return 0;
316316
}
317317

318-
#if defined(CONFIG_ARCH_OMAP3) || defined(MULTI_OMAP2)
319-
320-
static int omap3_onenand_read_bufferram(struct mtd_info *mtd, int area,
318+
static int omap2_onenand_read_bufferram(struct mtd_info *mtd, int area,
321319
unsigned char *buffer, int offset,
322320
size_t count)
323321
{
@@ -379,7 +377,7 @@ static int omap3_onenand_read_bufferram(struct mtd_info *mtd, int area,
379377
return 0;
380378
}
381379

382-
static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
380+
static int omap2_onenand_write_bufferram(struct mtd_info *mtd, int area,
383381
const unsigned char *buffer,
384382
int offset, size_t count)
385383
{
@@ -434,120 +432,6 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
434432
return 0;
435433
}
436434

437-
#else
438-
439-
static int omap3_onenand_read_bufferram(struct mtd_info *mtd, int area,
440-
unsigned char *buffer, int offset,
441-
size_t count)
442-
{
443-
return -ENOSYS;
444-
}
445-
446-
static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
447-
const unsigned char *buffer,
448-
int offset, size_t count)
449-
{
450-
return -ENOSYS;
451-
}
452-
453-
#endif
454-
455-
#if defined(CONFIG_ARCH_OMAP2) || defined(MULTI_OMAP2)
456-
457-
static int omap2_onenand_read_bufferram(struct mtd_info *mtd, int area,
458-
unsigned char *buffer, int offset,
459-
size_t count)
460-
{
461-
struct omap2_onenand *c = container_of(mtd, struct omap2_onenand, mtd);
462-
struct onenand_chip *this = mtd->priv;
463-
dma_addr_t dma_src, dma_dst;
464-
int bram_offset, ret;
465-
466-
bram_offset = omap2_onenand_bufferram_offset(mtd, area) + area + offset;
467-
/* DMA is not used. Revisit PM requirements before enabling it. */
468-
if (1 || (c->dma_channel < 0) ||
469-
((void *) buffer >= (void *) high_memory) || (bram_offset & 3) ||
470-
(((unsigned int) buffer) & 3) || (count < 1024) || (count & 3)) {
471-
memcpy(buffer, (__force void *)(this->base + bram_offset),
472-
count);
473-
return 0;
474-
}
475-
476-
dma_src = c->phys_base + bram_offset;
477-
dma_dst = dma_map_single(&c->pdev->dev, buffer, count,
478-
DMA_FROM_DEVICE);
479-
if (dma_mapping_error(&c->pdev->dev, dma_dst)) {
480-
dev_err(&c->pdev->dev,
481-
"Couldn't DMA map a %d byte buffer\n",
482-
count);
483-
return -1;
484-
}
485-
486-
ret = omap2_onenand_dma_transfer(c, dma_src, dma_dst, count);
487-
dma_unmap_single(&c->pdev->dev, dma_dst, count, DMA_FROM_DEVICE);
488-
489-
if (ret)
490-
dev_err(&c->pdev->dev, "timeout waiting for DMA\n");
491-
492-
return ret;
493-
}
494-
495-
static int omap2_onenand_write_bufferram(struct mtd_info *mtd, int area,
496-
const unsigned char *buffer,
497-
int offset, size_t count)
498-
{
499-
struct omap2_onenand *c = container_of(mtd, struct omap2_onenand, mtd);
500-
struct onenand_chip *this = mtd->priv;
501-
dma_addr_t dma_src, dma_dst;
502-
int bram_offset, ret;
503-
504-
bram_offset = omap2_onenand_bufferram_offset(mtd, area) + area + offset;
505-
/* DMA is not used. Revisit PM requirements before enabling it. */
506-
if (1 || (c->dma_channel < 0) ||
507-
((void *) buffer >= (void *) high_memory) || (bram_offset & 3) ||
508-
(((unsigned int) buffer) & 3) || (count < 1024) || (count & 3)) {
509-
memcpy((__force void *)(this->base + bram_offset), buffer,
510-
count);
511-
return 0;
512-
}
513-
514-
dma_src = dma_map_single(&c->pdev->dev, (void *) buffer, count,
515-
DMA_TO_DEVICE);
516-
dma_dst = c->phys_base + bram_offset;
517-
if (dma_mapping_error(&c->pdev->dev, dma_src)) {
518-
dev_err(&c->pdev->dev,
519-
"Couldn't DMA map a %d byte buffer\n",
520-
count);
521-
return -1;
522-
}
523-
524-
ret = omap2_onenand_dma_transfer(c, dma_src, dma_dst, count);
525-
dma_unmap_single(&c->pdev->dev, dma_src, count, DMA_TO_DEVICE);
526-
527-
if (ret)
528-
dev_err(&c->pdev->dev, "timeout waiting for DMA\n");
529-
530-
return ret;
531-
}
532-
533-
#else
534-
535-
static int omap2_onenand_read_bufferram(struct mtd_info *mtd, int area,
536-
unsigned char *buffer, int offset,
537-
size_t count)
538-
{
539-
return -ENOSYS;
540-
}
541-
542-
static int omap2_onenand_write_bufferram(struct mtd_info *mtd, int area,
543-
const unsigned char *buffer,
544-
int offset, size_t count)
545-
{
546-
return -ENOSYS;
547-
}
548-
549-
#endif
550-
551435
static struct platform_driver omap2_onenand_driver;
552436

553437
static void omap2_onenand_shutdown(struct platform_device *pdev)
@@ -671,13 +555,8 @@ static int omap2_onenand_probe(struct platform_device *pdev)
671555
this = &c->onenand;
672556
if (c->dma_channel >= 0) {
673557
this->wait = omap2_onenand_wait;
674-
if (c->flags & ONENAND_IN_OMAP34XX) {
675-
this->read_bufferram = omap3_onenand_read_bufferram;
676-
this->write_bufferram = omap3_onenand_write_bufferram;
677-
} else {
678-
this->read_bufferram = omap2_onenand_read_bufferram;
679-
this->write_bufferram = omap2_onenand_write_bufferram;
680-
}
558+
this->read_bufferram = omap2_onenand_read_bufferram;
559+
this->write_bufferram = omap2_onenand_write_bufferram;
681560
}
682561

683562
if ((r = onenand_scan(&c->mtd, 1)) < 0)

0 commit comments

Comments
 (0)