Blackfin: no-mpu: fix masking of small uncached dma region
authorSonic Zhang <sonic.zhang@analog.com>
Thu, 4 Nov 2010 08:01:37 +0000 (08:01 +0000)
committerMike Frysinger <vapier@gentoo.org>
Mon, 10 Jan 2011 12:18:18 +0000 (07:18 -0500)
When using an uncached DMA region less than 1 MiB, we try to mask off
the whole last 1 MiB for it.  Unfortunately, this fails as we forgot
to subtract one from the calculated mask, leading to the region still
be marked as cacheable.

Reported-by: Andrew Rook <andrew.rook@speakerbus.co.uk>
Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
arch/blackfin/kernel/cplb-nompu/cplbinit.c

index bfe75af4e8bd71db8fbe50c7bfe2a30c8ba00723..886e00014d7514a5a83fa3f5b31c064f53ba12f8 100644 (file)
@@ -116,7 +116,7 @@ void __init generate_cplb_tables_all(void)
            ((_ramend - uncached_end) >= 1 * 1024 * 1024))
                dcplb_bounds[i_d].eaddr = uncached_end;
        else
-               dcplb_bounds[i_d].eaddr = uncached_end & ~(1 * 1024 * 1024);
+               dcplb_bounds[i_d].eaddr = uncached_end & ~(1 * 1024 * 1024 - 1);
        dcplb_bounds[i_d++].data = SDRAM_DGENERIC;
        /* DMA uncached region.  */
        if (DMA_UNCACHED_REGION) {