]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
Add MT_MEMORY_SO, mark L3 and L4 to use it
authorNathan Monson <nmonson@gmail.com>
Thu, 16 Oct 2008 20:10:47 +0000 (13:10 -0700)
committerTony Lindgren <tony@atomide.com>
Fri, 17 Oct 2008 00:16:15 +0000 (17:16 -0700)
On Wed, Oct 8, 2008 at 11:36 AM, Nathan Monson <nmonson@gmail.com> wrote:
> "Felipe Contreras" <felipe.contreras@gmail.com> writes:
>> irq -33, desc: c0335cf8, depth: 0, count: 0, unhandled: 0
>
> On the BeagleBoard list, Pratheesh Gangadhar said that mapping I/O
> regions as Strongly Ordered suppresses this problem:
> http://groups.google.com/group/beagleboard/browse_thread/thread/23e1c95b4bfb09b5/70d12dca569ca503?show_docid=70d12dca569ca503

Pratheesh helped me make a patch against the latest linux-omap git to
try this.

With this patch, my IRQ -33 problems with the DSP have disappeared.
Before, I would end up in IRQ -33 loop after 10 invocations of the DSP
Bridge 'ping.out' utility.  I just finished running it 50,000 times
without error.

As stated before, this patch is just a workaround for testing
purposes, not a fix.  Who knows what performance side effects it
has...

Signed-off-by: Nathan Monson <nmonson@gmail.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/include/asm/mach/map.h
arch/arm/mach-omap2/io.c
arch/arm/mm/mmu.c

index 9eb936e49cc349564f651ea973f71e6cdd273ee9..5cb4f5f511bd0f7f00ef126fca55fb52ae10031f 100644 (file)
@@ -25,6 +25,7 @@ struct map_desc {
 #define MT_HIGH_VECTORS                8
 #define MT_MEMORY              9
 #define MT_ROM                 10
+#define MT_MEMORY_SO           11
 
 #define MT_NONSHARED_DEVICE    MT_DEVICE_NONSHARED
 #define MT_IXP2000_DEVICE      MT_DEVICE_IXP2000
index adbe21fcd68408c30b712d06aff6daf671afed38..c11c0e830c5027fdddceb256c382b194a2847914 100644 (file)
@@ -119,13 +119,13 @@ static struct map_desc omap34xx_io_desc[] __initdata = {
                .virtual        = L3_34XX_VIRT,
                .pfn            = __phys_to_pfn(L3_34XX_PHYS),
                .length         = L3_34XX_SIZE,
-               .type           = MT_DEVICE
+               .type           = MT_MEMORY_SO
        },
        {
                .virtual        = L4_34XX_VIRT,
                .pfn            = __phys_to_pfn(L4_34XX_PHYS),
                .length         = L4_34XX_SIZE,
-               .type           = MT_DEVICE
+               .type           = MT_MEMORY_SO
        },
        {
                .virtual        = L4_WK_34XX_VIRT,
@@ -137,19 +137,19 @@ static struct map_desc omap34xx_io_desc[] __initdata = {
                .virtual        = OMAP34XX_GPMC_VIRT,
                .pfn            = __phys_to_pfn(OMAP34XX_GPMC_PHYS),
                .length         = OMAP34XX_GPMC_SIZE,
-               .type           = MT_DEVICE
+               .type           = MT_MEMORY_SO
        },
        {
                .virtual        = OMAP343X_SMS_VIRT,
                .pfn            = __phys_to_pfn(OMAP343X_SMS_PHYS),
                .length         = OMAP343X_SMS_SIZE,
-               .type           = MT_DEVICE
+               .type           = MT_MEMORY_SO
        },
        {
                .virtual        = OMAP343X_SDRC_VIRT,
                .pfn            = __phys_to_pfn(OMAP343X_SDRC_PHYS),
                .length         = OMAP343X_SDRC_SIZE,
-               .type           = MT_DEVICE
+               .type           = MT_MEMORY_SO
        },
        {
                .virtual        = L4_PER_34XX_VIRT,
@@ -161,7 +161,7 @@ static struct map_desc omap34xx_io_desc[] __initdata = {
                .virtual        = L4_EMU_34XX_VIRT,
                .pfn            = __phys_to_pfn(L4_EMU_34XX_PHYS),
                .length         = L4_EMU_34XX_SIZE,
-               .type           = MT_DEVICE
+               .type           = MT_MEMORY_SO
        },
 };
 #endif
index a713e40e1f1a718549f333327c0f1a234e38a12c..d5f25ad5cd4e2dd40f7162f4f2b386546d31145a 100644 (file)
@@ -245,6 +245,10 @@ static struct mem_type mem_types[] = {
                .prot_sect = PMD_TYPE_SECT,
                .domain    = DOMAIN_KERNEL,
        },
+       [MT_MEMORY_SO] = {
+               .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_UNCACHED,
+               .domain    = DOMAIN_KERNEL,
+       },
 };
 
 const struct mem_type *get_mem_type(unsigned int type)