omap3-pandora-kernel2: update
[openpandora.oe.git] / recipes / linux / omap3-pandora-kernel / fix-irq33.diff
1 From: "Nathan Monson" <nmonson@gmail.com>
2 To: "linux-omap@vger.kernel.org List" <linux-omap@vger.kernel.org>
3 Subject: Re: omapfb: help from userspace
4 Cc: "TK, Pratheesh Gangadhar" <pratheesh@ti.com>
5
6 On Wed, Oct 8, 2008 at 11:36 AM, Nathan Monson <nmonson@gmail.com> wrote:
7 > "Felipe Contreras" <felipe.contreras@gmail.com> writes:
8 >> irq -33, desc: c0335cf8, depth: 0, count: 0, unhandled: 0
9 >
10 > On the BeagleBoard list, Pratheesh Gangadhar said that mapping I/O
11 > regions as Strongly Ordered suppresses this problem:
12 > http://groups.google.com/group/beagleboard/browse_thread/thread/23e1c95b4bfb09b5/70d12dca569ca503?show_docid=70d12dca569ca503
13
14 Pratheesh helped me make a patch against the latest linux-omap git to
15 try this.
16
17 With this patch, my IRQ -33 problems with the DSP have disappeared.
18 Before, I would end up in IRQ -33 loop after 10 invocations of the DSP
19 Bridge 'ping.out' utility.  I just finished running it 50,000 times
20 without error.
21
22 As stated before, this patch is just a workaround for testing
23 purposes, not a fix.  Who knows what performance side effects it
24 has...
25
26 ---
27 diff --git a/arch/arm/include/asm/mach/map.h b/arch/arm/include/asm/mach/map.h
28 index 9eb936e..5cb4f5f 100644
29 --- a/arch/arm/include/asm/mach/map.h
30 +++ b/arch/arm/include/asm/mach/map.h
31 @@ -25,6 +25,7 @@ struct map_desc {
32  #define MT_HIGH_VECTORS                8
33  #define MT_MEMORY              9
34  #define MT_ROM                 10
35 +#define MT_MEMORY_SO           11
36
37  #define MT_NONSHARED_DEVICE    MT_DEVICE_NONSHARED
38  #define MT_IXP2000_DEVICE      MT_DEVICE_IXP2000
39 diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c
40 index adbe21f..c11c0e8 100644
41 --- a/arch/arm/mach-omap2/io.c
42 +++ b/arch/arm/mach-omap2/io.c
43 @@ -119,13 +119,13 @@ static struct map_desc omap34xx_io_desc[] __initdata = {
44                 .virtual        = L3_34XX_VIRT,
45                 .pfn            = __phys_to_pfn(L3_34XX_PHYS),
46                 .length         = L3_34XX_SIZE,
47 -               .type           = MT_DEVICE
48 +               .type           = MT_MEMORY_SO
49         },
50         {
51                 .virtual        = L4_34XX_VIRT,
52                 .pfn            = __phys_to_pfn(L4_34XX_PHYS),
53                 .length         = L4_34XX_SIZE,
54 -               .type           = MT_DEVICE
55 +               .type           = MT_MEMORY_SO
56         },
57         {
58                 .virtual        = L4_WK_34XX_VIRT,
59 @@ -137,19 +137,19 @@ static struct map_desc omap34xx_io_desc[] __initdata = {
60                 .virtual        = OMAP34XX_GPMC_VIRT,
61                 .pfn            = __phys_to_pfn(OMAP34XX_GPMC_PHYS),
62                 .length         = OMAP34XX_GPMC_SIZE,
63 -               .type           = MT_DEVICE
64 +               .type           = MT_MEMORY_SO
65         },
66         {
67                 .virtual        = OMAP343X_SMS_VIRT,
68                 .pfn            = __phys_to_pfn(OMAP343X_SMS_PHYS),
69                 .length         = OMAP343X_SMS_SIZE,
70 -               .type           = MT_DEVICE
71 +               .type           = MT_MEMORY_SO
72         },
73         {
74                 .virtual        = OMAP343X_SDRC_VIRT,
75                 .pfn            = __phys_to_pfn(OMAP343X_SDRC_PHYS),
76                 .length         = OMAP343X_SDRC_SIZE,
77 -               .type           = MT_DEVICE
78 +               .type           = MT_MEMORY_SO
79         },
80         {
81                 .virtual        = L4_PER_34XX_VIRT,
82 @@ -161,7 +161,7 @@ static struct map_desc omap34xx_io_desc[] __initdata = {
83                 .virtual        = L4_EMU_34XX_VIRT,
84                 .pfn            = __phys_to_pfn(L4_EMU_34XX_PHYS),
85                 .length         = L4_EMU_34XX_SIZE,
86 -               .type           = MT_DEVICE
87 +               .type           = MT_MEMORY_SO
88         },
89  };
90  #endif
91 diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
92 index a713e40..d5f25ad 100644
93 --- a/arch/arm/mm/mmu.c
94 +++ b/arch/arm/mm/mmu.c
95 @@ -245,6 +245,10 @@ static struct mem_type mem_types[] = {
96                 .prot_sect = PMD_TYPE_SECT,
97                 .domain    = DOMAIN_KERNEL,
98         },
99 +       [MT_MEMORY_SO] = {
100 +               .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_UNCACHED,
101 +               .domain    = DOMAIN_KERNEL,
102 +       },
103  };
104
105  const struct mem_type *get_mem_type(unsigned int type)
106 --
107 --
108 To unsubscribe from this list: send the line "unsubscribe linux-omap" in
109 the body of a message to majordomo@vger.kernel.org
110 More majordomo info at  http://vger.kernel.org/majordomo-info.html
111