* L2 cache support for pxa16x
@ 2010-05-12 9:56 Siddarth Gore
2010-05-12 10:11 ` Eric Miao
0 siblings, 1 reply; 12+ messages in thread
From: Siddarth Gore @ 2010-05-12 9:56 UTC (permalink / raw)
To: linux-arm-kernel
Hi Eric/Haojian,
Can the Tauros2 support be used for pxa168 as well? The one difference I
can see is that L2 Enable is in control register instead of extra
feature register. But rest of the things look very similar to me.
-siddarth
^ permalink raw reply [flat|nested] 12+ messages in thread
* L2 cache support for pxa16x
2010-05-12 9:56 L2 cache support for pxa16x Siddarth Gore
@ 2010-05-12 10:11 ` Eric Miao
2010-05-20 10:17 ` Siddarth Gore
0 siblings, 1 reply; 12+ messages in thread
From: Eric Miao @ 2010-05-12 10:11 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, May 12, 2010 at 11:56 AM, Siddarth Gore <gores@marvell.com> wrote:
> Hi Eric/Haojian,
>
> Can the Tauros2 support be used for pxa168 as well? The one difference I
> can see is that L2 Enable is in control register instead of extra
> feature register. But rest of the things look very similar to me.
>
My assumption is 'yes', you can have a try and report back. I never did
that by myself so far.
^ permalink raw reply [flat|nested] 12+ messages in thread
* L2 cache support for pxa16x
2010-05-12 10:11 ` Eric Miao
@ 2010-05-20 10:17 ` Siddarth Gore
2010-05-20 14:06 ` Eric Miao
2010-05-21 11:05 ` Haojian Zhuang
0 siblings, 2 replies; 12+ messages in thread
From: Siddarth Gore @ 2010-05-20 10:17 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, 2010-05-12 at 03:11 -0700, Eric Miao wrote:
> On Wed, May 12, 2010 at 11:56 AM, Siddarth Gore <gores@marvell.com> wrote:
> > Hi Eric/Haojian,
> >
> > Can the Tauros2 support be used for pxa168 as well? The one difference I
> > can see is that L2 Enable is in control register instead of extra
> > feature register. But rest of the things look very similar to me.
> >
I tried doing this. It works when I enable L2 before turning the MMU on,
i.e. in __mohawk_setup
But when I do the following in tauros2_init(), the kernel crashes.
1. flush and disable dcache
2. invalidate and disable icache
3. drain write buffer
4. invalidate TLB
5. invalidate L2
6. enable L2
7. enable icache
8. enable dcache
I think the right place to enable L2 is in tauros2_init, so any idea
what I am doing wrong here?
-siddarth
^ permalink raw reply [flat|nested] 12+ messages in thread
* L2 cache support for pxa16x
2010-05-20 10:17 ` Siddarth Gore
@ 2010-05-20 14:06 ` Eric Miao
2010-05-21 9:44 ` Siddarth Gore
2010-05-21 11:05 ` Haojian Zhuang
1 sibling, 1 reply; 12+ messages in thread
From: Eric Miao @ 2010-05-20 14:06 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, May 20, 2010 at 6:17 PM, Siddarth Gore <gores@marvell.com> wrote:
> On Wed, 2010-05-12 at 03:11 -0700, Eric Miao wrote:
>> On Wed, May 12, 2010 at 11:56 AM, Siddarth Gore <gores@marvell.com> wrote:
>> > Hi Eric/Haojian,
>> >
>> > Can the Tauros2 support be used for pxa168 as well? The one difference I
>> > can see is that L2 Enable is in control register instead of extra
>> > feature register. But rest of the things look very similar to me.
>> >
>
> I tried doing this. It works when I enable L2 before turning the MMU on,
> i.e. in __mohawk_setup
>
> But when I do the following in tauros2_init(), the kernel crashes.
> 1. flush and disable dcache
> 2. invalidate and disable icache
> 3. drain write buffer
> 4. invalidate TLB
> 5. invalidate L2
> 6. enable L2
> 7. enable icache
> 8. enable dcache
>
> I think the right place to enable L2 is in tauros2_init, so any idea
> what I am doing wrong here?
>
I believe that was the reason why I didn't put tauros2 support to pxa168
at the first place. And enabling L2 after MMU is enabled is supposed to
be unsafe, which is mentioned in xscale3 manual, though not sure if that's
the case for pxa168 as well.
> -siddarth
>
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* L2 cache support for pxa16x
2010-05-20 14:06 ` Eric Miao
@ 2010-05-21 9:44 ` Siddarth Gore
2010-05-21 10:27 ` Eric Miao
0 siblings, 1 reply; 12+ messages in thread
From: Siddarth Gore @ 2010-05-21 9:44 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, 2010-05-20 at 07:06 -0700, Eric Miao wrote:
> On Thu, May 20, 2010 at 6:17 PM, Siddarth Gore <gores@marvell.com> wrote:
> > On Wed, 2010-05-12 at 03:11 -0700, Eric Miao wrote:
> >> On Wed, May 12, 2010 at 11:56 AM, Siddarth Gore <gores@marvell.com> wrote:
> >> > Hi Eric/Haojian,
> >> >
> >> > Can the Tauros2 support be used for pxa168 as well? The one difference I
> >> > can see is that L2 Enable is in control register instead of extra
> >> > feature register. But rest of the things look very similar to me.
> >> >
> >
> > I tried doing this. It works when I enable L2 before turning the MMU on,
> > i.e. in __mohawk_setup
> >
> > But when I do the following in tauros2_init(), the kernel crashes.
> > 1. flush and disable dcache
> > 2. invalidate and disable icache
> > 3. drain write buffer
> > 4. invalidate TLB
> > 5. invalidate L2
> > 6. enable L2
> > 7. enable icache
> > 8. enable dcache
> >
> > I think the right place to enable L2 is in tauros2_init, so any idea
> > what I am doing wrong here?
> >
>
> I believe that was the reason why I didn't put tauros2 support to pxa168
> at the first place. And enabling L2 after MMU is enabled is supposed to
> be unsafe, which is mentioned in xscale3 manual, though not sure if that's
> the case for pxa168 as well.
>
I did not find it mentioned anywhere in the mohawk (PJ1) datasheet. Also
any idea why is this unsafe? I clean and disable the L1 cache first so
all the page tables, etc. will be backed up in main memory before
turning L2 on. plus invalidate the entire L2, so all the fetches will
first go to main memory.
other CPUs using tauros2 (also feroceon) turn L2 on after MMU, and they
work fine.
-siddarth
> > -siddarth
> >
> >
^ permalink raw reply [flat|nested] 12+ messages in thread
* L2 cache support for pxa16x
2010-05-21 9:44 ` Siddarth Gore
@ 2010-05-21 10:27 ` Eric Miao
2010-05-21 10:37 ` Siddarth Gore
0 siblings, 1 reply; 12+ messages in thread
From: Eric Miao @ 2010-05-21 10:27 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, May 21, 2010 at 5:44 PM, Siddarth Gore <gores@marvell.com> wrote:
>
> On Thu, 2010-05-20 at 07:06 -0700, Eric Miao wrote:
> > On Thu, May 20, 2010 at 6:17 PM, Siddarth Gore <gores@marvell.com> wrote:
> > > On Wed, 2010-05-12 at 03:11 -0700, Eric Miao wrote:
> > >> On Wed, May 12, 2010 at 11:56 AM, Siddarth Gore <gores@marvell.com> wrote:
> > >> > Hi Eric/Haojian,
> > >> >
> > >> > Can the Tauros2 support be used for pxa168 as well? The one difference I
> > >> > can see is that L2 Enable is in control register instead of extra
> > >> > feature register. But rest of the things look very similar to me.
> > >> >
> > >
> > > I tried doing this. It works when I enable L2 before turning the MMU on,
> > > i.e. in __mohawk_setup
> > >
> > > But when I do the following in tauros2_init(), the kernel crashes.
> > > 1. flush and disable dcache
> > > 2. invalidate and disable icache
> > > 3. drain write buffer
> > > 4. invalidate TLB
> > > 5. invalidate L2
> > > 6. enable L2
> > > 7. enable icache
> > > 8. enable dcache
> > >
> > > I think the right place to enable L2 is in tauros2_init, so any idea
> > > what I am doing wrong here?
> > >
> >
> > I believe that was the reason why I didn't put tauros2 support to pxa168
> > at the first place. And enabling L2 after MMU is enabled is supposed to
> > be unsafe, which is mentioned in xscale3 manual, though not sure if that's
> > the case for pxa168 as well.
> >
> I did not find it mentioned anywhere in the mohawk (PJ1) datasheet. Also
> any idea why is this unsafe? I clean and disable the L1 cache first so
> all the page tables, etc. will be backed up in main memory before
> turning L2 on. plus invalidate the entire L2, so all the fetches will
> first go to main memory.
>
> other CPUs using tauros2 (also feroceon) turn L2 on after MMU, and they
> work fine.
>
Can you post here the changes you've made?
^ permalink raw reply [flat|nested] 12+ messages in thread
* L2 cache support for pxa16x
2010-05-21 10:27 ` Eric Miao
@ 2010-05-21 10:37 ` Siddarth Gore
2010-05-21 11:07 ` Haojian Zhuang
0 siblings, 1 reply; 12+ messages in thread
From: Siddarth Gore @ 2010-05-21 10:37 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, 2010-05-21 at 03:27 -0700, Eric Miao wrote:
> On Fri, May 21, 2010 at 5:44 PM, Siddarth Gore <gores@marvell.com> wrote:
> >
> > On Thu, 2010-05-20 at 07:06 -0700, Eric Miao wrote:
> > > On Thu, May 20, 2010 at 6:17 PM, Siddarth Gore <gores@marvell.com> wrote:
> > > > On Wed, 2010-05-12 at 03:11 -0700, Eric Miao wrote:
> > > >> On Wed, May 12, 2010 at 11:56 AM, Siddarth Gore <gores@marvell.com> wrote:
> > > >> > Hi Eric/Haojian,
> > > >> >
> > > >> > Can the Tauros2 support be used for pxa168 as well? The one difference I
> > > >> > can see is that L2 Enable is in control register instead of extra
> > > >> > feature register. But rest of the things look very similar to me.
> > > >> >
> > > >
> > > > I tried doing this. It works when I enable L2 before turning the MMU on,
> > > > i.e. in __mohawk_setup
> > > >
> > > > But when I do the following in tauros2_init(), the kernel crashes.
> > > > 1. flush and disable dcache
> > > > 2. invalidate and disable icache
> > > > 3. drain write buffer
> > > > 4. invalidate TLB
> > > > 5. invalidate L2
> > > > 6. enable L2
> > > > 7. enable icache
> > > > 8. enable dcache
> > > >
> > > > I think the right place to enable L2 is in tauros2_init, so any idea
> > > > what I am doing wrong here?
> > > >
> > >
> > > I believe that was the reason why I didn't put tauros2 support to pxa168
> > > at the first place. And enabling L2 after MMU is enabled is supposed to
> > > be unsafe, which is mentioned in xscale3 manual, though not sure if that's
> > > the case for pxa168 as well.
> > >
> > I did not find it mentioned anywhere in the mohawk (PJ1) datasheet. Also
> > any idea why is this unsafe? I clean and disable the L1 cache first so
> > all the page tables, etc. will be backed up in main memory before
> > turning L2 on. plus invalidate the entire L2, so all the fetches will
> > first go to main memory.
> >
> > other CPUs using tauros2 (also feroceon) turn L2 on after MMU, and they
> > work fine.
> >
>
> Can you post here the changes you've made?
Please find them below. It works if I uncomment the last change in
proc-mohawk.S
-siddarth
diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c
index a2d307e..d047d8c 100644
--- a/arch/arm/mach-mmp/aspenite.c
+++ b/arch/arm/mach-mmp/aspenite.c
@@ -17,6 +17,7 @@
#include <linux/mtd/partitions.h>
#include <linux/mtd/nand.h>
+#include <asm/hardware/cache-tauros2.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <mach/addr-map.h>
@@ -125,6 +126,7 @@ static struct pxa3xx_nand_platform_data
aspenite_nand_info = {
static void __init common_init(void)
{
+ tauros2_init();
mfp_config(ARRAY_AND_SIZE(common_pin_config));
/* on-chip devices */
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
index 5bd7c89..ededf5a 100644
--- a/arch/arm/mm/Kconfig
+++ b/arch/arm/mm/Kconfig
@@ -769,7 +769,7 @@ config CACHE_L2X0
config CACHE_TAUROS2
bool "Enable the Tauros2 L2 cache controller"
- depends on ARCH_DOVE
+ depends on ARCH_DOVE || ARCH_MMP
default y
select OUTER_CACHE
help
diff --git a/arch/arm/mm/cache-tauros2.c b/arch/arm/mm/cache-tauros2.c
index 5086865..d2d4545 100644
--- a/arch/arm/mm/cache-tauros2.c
+++ b/arch/arm/mm/cache-tauros2.c
@@ -48,6 +48,10 @@ static inline void tauros2_inv_pa(unsigned long addr)
__asm__("mcr p15, 1, %0, c7, c7, 3" : : "r" (addr));
}
+static inline void tauros2_inv_all(void)
+{
+ __asm__("mcr p15, 1, %0, c7, c7, 0" : : "r" (0));
+}
/*
* Linux primitives.
@@ -168,6 +172,62 @@ static inline void __init write_actlr(u32 actlr)
__asm__("mcr p15, 0, %0, c1, c0, 1\n" : : "r" (actlr));
}
+static int __init flush_and_disable_dcache(void)
+{
+ u32 cr;
+
+ cr = get_cr();
+ if (cr & CR_C) {
+ unsigned long flags;
+
+ raw_local_irq_save(flags);
+ flush_cache_all();
+ set_cr(cr & ~CR_C);
+ raw_local_irq_restore(flags);
+ return 1;
+ }
+ return 0;
+}
+
+static void __init enable_dcache(void)
+{
+ u32 cr;
+
+ cr = get_cr();
+ set_cr(cr | CR_C);
+}
+
+static void __init __invalidate_icache(void)
+{
+ __asm__("mcr p15, 0, %0, c7, c5, 0" : : "r" (0));
+}
+
+static int __init invalidate_and_disable_icache(void)
+{
+ u32 cr;
+
+ cr = get_cr();
+ if (cr & CR_I) {
+ set_cr(cr & ~CR_I);
+ __invalidate_icache();
+ return 1;
+ }
+ return 0;
+}
+
+static void __init enable_icache(void)
+{
+ u32 cr;
+
+ cr = get_cr();
+ set_cr(cr | CR_I);
+}
+
+static void __init __invalidate_tlb(void)
+{
+ __asm__("mcr p15, 0, %0, c8, c7, 0" : : "r" (0));
+}
+
void __init tauros2_init(void)
{
extern int processor_id;
@@ -179,6 +239,25 @@ void __init tauros2_init(void)
if ((processor_id & 0xff0f0000) == 0x56050000) {
u32 feat;
+#ifdef CONFIG_CPU_MOHAWK
+ /*
+ * for mohawk cpu, L2 enable bit is in control reg
+ */
+#define CR_L2 (1 << 26)
+ feat = get_cr();
+ if (!(feat & CR_L2)) {
+ printk(KERN_INFO "Tauros2: Enabling L2 cache.\n");
+
+ flush_and_disable_dcache();
+ invalidate_and_disable_icache();
+ dsb();
+ __invalidate_tlb();
+ tauros2_inv_all();
+ set_cr(feat | CR_L2);
+ enable_icache();
+ enable_dcache();
+ }
+#else
/*
* v5 CPUs with Tauros2 have the L2 cache enable bit
* located in the CPU Extra Features register.
@@ -188,6 +267,7 @@ void __init tauros2_init(void)
printk(KERN_INFO "Tauros2: Enabling L2 cache.\n");
write_extra_features(feat | 0x00400000);
}
+#endif
mode = "ARMv5";
outer_cache.inv_range = tauros2_inv_range;
diff --git a/arch/arm/mm/proc-mohawk.S b/arch/arm/mm/proc-mohawk.S
index caa3115..5f7d706 100644
--- a/arch/arm/mm/proc-mohawk.S
+++ b/arch/arm/mm/proc-mohawk.S
@@ -361,6 +361,7 @@ __mohawk_setup:
mrc p15, 0, r0, c1, c0 @ get control register
bic r0, r0, r5
orr r0, r0, r6
+@ orr r0, r0, #(1 << 26) @ L2 enable - xscale/PJ41/PJ4
mov pc, lr
.size __mohawk_setup, . - __mohawk_setup
^ permalink raw reply related [flat|nested] 12+ messages in thread
* L2 cache support for pxa16x
2010-05-20 10:17 ` Siddarth Gore
2010-05-20 14:06 ` Eric Miao
@ 2010-05-21 11:05 ` Haojian Zhuang
2010-05-21 11:37 ` Eric Miao
2010-06-11 10:20 ` Siddarth Gore
1 sibling, 2 replies; 12+ messages in thread
From: Haojian Zhuang @ 2010-05-21 11:05 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, May 20, 2010 at 6:17 PM, Siddarth Gore <gores@marvell.com> wrote:
> On Wed, 2010-05-12 at 03:11 -0700, Eric Miao wrote:
>> On Wed, May 12, 2010 at 11:56 AM, Siddarth Gore <gores@marvell.com> wrote:
>> > Hi Eric/Haojian,
>> >
>> > Can the Tauros2 support be used for pxa168 as well? The one difference I
>> > can see is that L2 Enable is in control register instead of extra
>> > feature register. But rest of the things look very similar to me.
>> >
>
> I tried doing this. It works when I enable L2 before turning the MMU on,
> i.e. in __mohawk_setup
>
> But when I do the following in tauros2_init(), the kernel crashes.
> 1. flush and disable dcache
> 2. invalidate and disable icache
> 3. drain write buffer
> 4. invalidate TLB
> 5. invalidate L2
> 6. enable L2
> 7. enable icache
> 8. enable dcache
>
> I think the right place to enable L2 is in tauros2_init, so any idea
> what I am doing wrong here?
>
> -siddarth
>
>
I didn't meet any failure on enabling L2. What I do is in below. Which
kernel version are you using?
diff --git a/arch/arm/mach-mmp/pxa168.c b/arch/arm/mach-mmp/pxa168.c
index 652ae66..689e0d5 100644
--- a/arch/arm/mach-mmp/pxa168.c
+++ b/arch/arm/mach-mmp/pxa168.c
@@ -15,6 +15,7 @@
#include <linux/io.h>
#include <linux/clk.h>
+#include <asm/hardware/cache-tauros2.h>
#include <asm/mach/time.h>
#include <mach/addr-map.h>
#include <mach/cputype.h>
@@ -101,6 +102,7 @@ static struct clk_lookup pxa168_clkregs[] = {
static int __init pxa168_init(void)
{
if (cpu_is_pxa168()) {
+ tauros2_init();
mfp_init_base(MFPR_VIRT_BASE);
mfp_init_addr(pxa168_mfp_addr_map);
pxa_init_dma(IRQ_PXA168_DMA_INT0, 32);
diff --git a/arch/arm/mm/cache-tauros2.c b/arch/arm/mm/cache-tauros2.c
index 5086865..79f49f5 100644
--- a/arch/arm/mm/cache-tauros2.c
+++ b/arch/arm/mm/cache-tauros2.c
@@ -120,7 +120,11 @@ static inline u32 __init read_extra_features(void)
static inline void __init write_extra_features(u32 u)
{
+ volatile u32 cp15;
__asm__("mcr p15, 1, %0, c15, c1, 0" : : "r" (u));
+ __asm__("mrc p15, 0, %0, c1, c0, 0" : "=r" (cp15));
+ cp15 |= (1 << 26);
+ __asm__("mcr p15, 0, %0, c1, c0, 0" : : "r" (cp15));
}
^ permalink raw reply related [flat|nested] 12+ messages in thread
* L2 cache support for pxa16x
2010-05-21 10:37 ` Siddarth Gore
@ 2010-05-21 11:07 ` Haojian Zhuang
2010-05-21 11:30 ` Eric Miao
0 siblings, 1 reply; 12+ messages in thread
From: Haojian Zhuang @ 2010-05-21 11:07 UTC (permalink / raw)
To: linux-arm-kernel
> diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c
> index a2d307e..d047d8c 100644
> --- a/arch/arm/mach-mmp/aspenite.c
> +++ b/arch/arm/mach-mmp/aspenite.c
> @@ -17,6 +17,7 @@
> ?#include <linux/mtd/partitions.h>
> ?#include <linux/mtd/nand.h>
>
> +#include <asm/hardware/cache-tauros2.h>
> ?#include <asm/mach-types.h>
> ?#include <asm/mach/arch.h>
> ?#include <mach/addr-map.h>
> @@ -125,6 +126,7 @@ static struct pxa3xx_nand_platform_data
> aspenite_nand_info = {
>
> ?static void __init common_init(void)
> ?{
> + ? ? ? tauros2_init();
> ? ? ? ?mfp_config(ARRAY_AND_SIZE(common_pin_config));
>
Why do you initialize L2 at here? I think that we should enable L2 a
bit earlier. For example, in pxa168_init().
^ permalink raw reply [flat|nested] 12+ messages in thread
* L2 cache support for pxa16x
2010-05-21 11:07 ` Haojian Zhuang
@ 2010-05-21 11:30 ` Eric Miao
0 siblings, 0 replies; 12+ messages in thread
From: Eric Miao @ 2010-05-21 11:30 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, May 21, 2010 at 7:07 PM, Haojian Zhuang
<haojian.zhuang@gmail.com> wrote:
>> diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c
>> index a2d307e..d047d8c 100644
>> --- a/arch/arm/mach-mmp/aspenite.c
>> +++ b/arch/arm/mach-mmp/aspenite.c
>> @@ -17,6 +17,7 @@
>> ?#include <linux/mtd/partitions.h>
>> ?#include <linux/mtd/nand.h>
>>
>> +#include <asm/hardware/cache-tauros2.h>
>> ?#include <asm/mach-types.h>
>> ?#include <asm/mach/arch.h>
>> ?#include <mach/addr-map.h>
>> @@ -125,6 +126,7 @@ static struct pxa3xx_nand_platform_data
>> aspenite_nand_info = {
>>
>> ?static void __init common_init(void)
>> ?{
>> + ? ? ? tauros2_init();
>> ? ? ? ?mfp_config(ARRAY_AND_SIZE(common_pin_config));
>>
>
> Why do you initialize L2 at here? I think that we should enable L2 a
> bit earlier. For example, in pxa168_init().
>
I think that's what dove is doing.
^ permalink raw reply [flat|nested] 12+ messages in thread
* L2 cache support for pxa16x
2010-05-21 11:05 ` Haojian Zhuang
@ 2010-05-21 11:37 ` Eric Miao
2010-06-11 10:20 ` Siddarth Gore
1 sibling, 0 replies; 12+ messages in thread
From: Eric Miao @ 2010-05-21 11:37 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, May 21, 2010 at 7:05 PM, Haojian Zhuang
<haojian.zhuang@gmail.com> wrote:
> On Thu, May 20, 2010 at 6:17 PM, Siddarth Gore <gores@marvell.com> wrote:
>> On Wed, 2010-05-12 at 03:11 -0700, Eric Miao wrote:
>>> On Wed, May 12, 2010 at 11:56 AM, Siddarth Gore <gores@marvell.com> wrote:
>>> > Hi Eric/Haojian,
>>> >
>>> > Can the Tauros2 support be used for pxa168 as well? The one difference I
>>> > can see is that L2 Enable is in control register instead of extra
>>> > feature register. But rest of the things look very similar to me.
>>> >
>>
>> I tried doing this. It works when I enable L2 before turning the MMU on,
>> i.e. in __mohawk_setup
>>
>> But when I do the following in tauros2_init(), the kernel crashes.
>> 1. flush and disable dcache
>> 2. invalidate and disable icache
>> 3. drain write buffer
>> 4. invalidate TLB
>> 5. invalidate L2
>> 6. enable L2
>> 7. enable icache
>> 8. enable dcache
>>
>> I think the right place to enable L2 is in tauros2_init, so any idea
>> what I am doing wrong here?
>>
>> -siddarth
>>
>>
>
> I didn't meet any failure on enabling L2. What I do is in below. Which
> kernel version are you using?
>
>
> diff --git a/arch/arm/mach-mmp/pxa168.c b/arch/arm/mach-mmp/pxa168.c
> index 652ae66..689e0d5 100644
> --- a/arch/arm/mach-mmp/pxa168.c
> +++ b/arch/arm/mach-mmp/pxa168.c
> @@ -15,6 +15,7 @@
> ?#include <linux/io.h>
> ?#include <linux/clk.h>
>
> +#include <asm/hardware/cache-tauros2.h>
> ?#include <asm/mach/time.h>
> ?#include <mach/addr-map.h>
> ?#include <mach/cputype.h>
> @@ -101,6 +102,7 @@ static struct clk_lookup pxa168_clkregs[] = {
> ?static int __init pxa168_init(void)
> ?{
> ? ? ? ?if (cpu_is_pxa168()) {
> + ? ? ? ? ? ? ? tauros2_init();
> ? ? ? ? ? ? ? ?mfp_init_base(MFPR_VIRT_BASE);
> ? ? ? ? ? ? ? ?mfp_init_addr(pxa168_mfp_addr_map);
> ? ? ? ? ? ? ? ?pxa_init_dma(IRQ_PXA168_DMA_INT0, 32);
> diff --git a/arch/arm/mm/cache-tauros2.c b/arch/arm/mm/cache-tauros2.c
> index 5086865..79f49f5 100644
> --- a/arch/arm/mm/cache-tauros2.c
> +++ b/arch/arm/mm/cache-tauros2.c
> @@ -120,7 +120,11 @@ static inline u32 __init read_extra_features(void)
>
> ?static inline void __init write_extra_features(u32 u)
> ?{
> + ? ? ? volatile u32 cp15;
> ? ? ? ?__asm__("mcr p15, 1, %0, c15, c1, 0" : : "r" (u));
> + ? ? ? __asm__("mrc p15, 0, %0, c1, c0, 0" : "=r" (cp15));
> + ? ? ? cp15 |= (1 << 26);
> + ? ? ? __asm__("mcr p15, 0, %0, c1, c0, 0" : : "r" (cp15));
> ?}
>
The feature register existing on other v5 cores is actually co-processor
enable register in PJ1. I doubt that's going to cause no side effect, we don't
likely need to use this extra feature register at all. A more preferable way
would be to have something like below in tauros2_init:
if (cpu_is_pj1()) {
enable_l2_bit();
outer_cache.inv_range = ....
....
}
^ permalink raw reply [flat|nested] 12+ messages in thread
* L2 cache support for pxa16x
2010-05-21 11:05 ` Haojian Zhuang
2010-05-21 11:37 ` Eric Miao
@ 2010-06-11 10:20 ` Siddarth Gore
1 sibling, 0 replies; 12+ messages in thread
From: Siddarth Gore @ 2010-06-11 10:20 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, 2010-05-21 at 04:05 -0700, Haojian Zhuang wrote:
> >
>
> I didn't meet any failure on enabling L2. What I do is in below. Which
> kernel version are you using?
>
extremely sorry for replying _so_ late. I was using 2.6.34 vanilla
kernel. I tried your patch on latest 2.6.35-rc2 today, and it is
crashing as well (log pasted below).
<...snip...>
Uncompressing Linux... done, booting the kernel.
[ 0.000000] Linux version 2.6.35-rc2-00131-g7908a9e-dirty
(gores at linux-dev.marvell.com) (gcc version 4.1.2 20070925 (Red Hat
4.1.2-33.fa1)) #40 PREEMPT Fr
i Jun 11 15:29:40 IST 2010
[ 0.000000] CPU: Marvell 88SV331x [56158400] revision 0 (ARMv5TE),
cr=00053947
[ 0.000000] CPU: VIVT data cache, VIVT instruction cache
[ 0.000000] Machine: PXA168-based Aspenite Development Platform
[ 0.000000] Memory policy: ECC disabled, Data cache writeback
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on.
Total pages: 65024
[ 0.000000] Kernel command line: root=mtd4 rw rootfstype=jffs2
console=ttyS0,115200
[ 0.000000] PID hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.000000] Dentry cache hash table entries: 32768 (order: 5, 131072
bytes)
[ 0.000000] Inode-cache hash table entries: 16384 (order: 4, 65536
bytes)
[ 0.000000] Memory: 256MB = 256MB total
[ 0.000000] Memory: 256664k/256664k available, 5480k reserved, 0K
highmem
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[ 0.000000] fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
[ 0.000000] DMA : 0xffc00000 - 0xffe00000 ( 2 MB)
[ 0.000000] vmalloc : 0xd0800000 - 0xfe000000 ( 728 MB)
[ 0.000000] lowmem : 0xc0000000 - 0xd0000000 ( 256 MB)
[ 0.000000] modules : 0xbf000000 - 0xc0000000 ( 16 MB)
[ 0.000000] .init : 0xc0008000 - 0xc001d000 ( 84 kB)
[ 0.000000] .text : 0xc001d000 - 0xc02d0000 (2764 kB)
[ 0.000000] .data : 0xc02e6000 - 0xc030a460 ( 146 kB)
[ 0.000000] Hierarchical RCU implementation.
[ 0.000000] RCU-based detection of stalled CPUs is disabled.
[ 0.000000] Verbose stalled-CPUs detection is disabled.
[ 0.000000] NR_IRQS:384
[ 0.000000] Console: colour dummy device 80x30
[ 0.000015] Calibrating delay loop... 796.26 BogoMIPS (lpj=3981312)
[ 0.220115] pid_max: default: 32768 minimum: 301
[ 0.220147] Mount-cache hash table entries: 512
[ 0.220321] CPU: Testing write buffer coherency: ok
[ 0.224377] NET: Registered protocol family 16
[ 0.224505] Tauros2: Disabling L2 prefetch.
[ 0.224554] Tauros2: Enabling L2 cache.
[ 0.224567] Tauros2: L2 cache support initialised in ARMv5 mode.
[ 0.231784] bio: create slab <bio-0> at 0
<...snip...>
[ 4.243206] VFS: Mounted root (jffs2 filesystem) on device 31:4.
[ 4.243249] Freeing init memory: 84K
[ 4.370645] BUG: Bad page state in process init pfn:00563
[ 4.376669] page:c0334c60 count:0 mapcount:0 mapping:cf80aab8
index:0x4f
[ 4.383411] page flags: 0x8(uptodate)
[ 4.383420] [<c00235e8>] (unwind_backtrace+0x0/0xe0) from
[<c006c0d0>] (bad_page+0xc8/0xfc)
[ 4.395478] [<c006c0d0>] (bad_page+0xc8/0xfc) from [<c006c16c>]
(free_pages_prepare+0x68/0xbc)
[ 4.404141] [<c006c16c>] (free_pages_prepare+0x68/0xbc) from
[<c006c9c4>] (free_hot_cold_page+0x20/0x1a0)
[ 4.413758] [<c006c9c4>] (free_hot_cold_page+0x20/0x1a0) from
[<c006cc10>] (__pagevec_free+0x20/0x34)
[ 4.423019] [<c006cc10>] (__pagevec_free+0x20/0x34) from [<c0070798>]
(release_pages+0x274/0x28c)
[ 4.423048] [<c0070798>] (release_pages+0x274/0x28c) from
[<c0070984>] (____pagevec_lru_add+0x1d4/0x1ec)
[ 4.441441] [<c0070984>] (____pagevec_lru_add+0x1d4/0x1ec) from
[<c0070c28>] (lru_add_drain+0x40/0xac)
[ 4.450798] [<c0070c28>] (lru_add_drain+0x40/0xac) from [<c00813c8>]
(exit_mmap+0x5c/0x1cc)
[ 4.459201] [<c00813c8>] (exit_mmap+0x5c/0x1cc) from [<c0033d08>]
(mmput+0x3c/0x11c)
[ 4.466988] [<c0033d08>] (mmput+0x3c/0x11c) from [<c0037f40>]
(exit_mm+0x124/0x130)
[ 4.474686] [<c0037f40>] (exit_mm+0x124/0x130) from [<c00394f8>]
(do_exit+0x16c/0x654)
[ 4.474712] [<c00394f8>] (do_exit+0x16c/0x654) from [<c0039a98>]
(do_group_exit+0xb8/0xec)
[ 4.490928] [<c0039a98>] (do_group_exit+0xb8/0xec) from [<c0045528>]
(get_signal_to_deliver+0x3cc/0x42c)
[ 4.500459] [<c0045528>] (get_signal_to_deliver+0x3cc/0x42c) from
[<c00206c4>] (do_notify_resume+0x58/0x5d8)
[ 4.510337] [<c00206c4>] (do_notify_resume+0x58/0x5d8) from
[<c001df2c>] (work_pending+0x1c/0x20)
[ 4.519263] Disabling lock debugging due to kernel taint
[ 4.524634] kernel BUG at lib/prio_tree.c:149!
[ 4.524679] Unable to handle kernel NULL pointer dereference at
virtual address 00000000
[ 4.529129] pgd = c0004000
[ 4.537220] [00000000] *pgd=00000000
[ 4.539919] Internal error: Oops: 817 [#1] PREEMPT
[ 4.543490] last sysfs file:
[ 4.548277] Modules linked in:
[ 4.551238] CPU: 0 Tainted: G B
(2.6.35-rc2-00131-g7908a9e-dirty #40)
[ 4.554290] PC is at __bug+0x1c/0x28
[ 4.561862] LR is at __bug+0x18/0x28
[ 4.565434] pc : [<c002140c>] lr : [<c0021408>] psr: 60000093
[ 4.569016] sp : cfc19db0 ip : c0183b34 fp : cfc19fb0
[ 4.569025] r10: 00001000 r9 : c02ea1d0 r8 : 00000000
[ 4.580503] r7 : cfc725c4 r6 : cfc725a0 r5 : cf80aacc r4 :
cfc7256c
[ 4.585730] r3 : 00000000 r2 : 00000003 r1 : 00002370 r0 :
00000038
[ 4.592257] Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM
Segment user
[ 4.598785] Control: 0005397f Table: 0fd00018 DAC: 00000015
[ 4.606008] Process init (pid: 1, stack limit = 0xcfc18278)
[ 4.611752] Stack: (0xcfc19db0 to 0xcfc1a000)
[ 4.617326] 9da0: cfdc2ce0
c01571cc 00000000 c01572fc
[ 4.621688] 9dc0: 00006fab 00000000 00000001 be9ba000 cfd02fa0
cf80aab8 cfc72548 cfc725a0
[ 4.629879] 9de0: 00008000 c00817f0 cfc18000 c0081850 cfc18000
c007f298 cfc19e1c cfc18000
[ 4.638065] 9e00: cfc18000 00000000 cfc725a0 cfd5bde0 cfc19ee8
00000001 cfc19f68 c0081480
[ 4.646250] 9e20: cfc19e28 00000000 00000025 c02ea1d0 cfc15bc0
00000000 cfd5bde0 cfd5be18
[ 4.654435] 9e40: cfc15bc0 c0033d08 cfd5bde0 cfc18000 cfd5bde0
c0037f40 00000000 c0044074
[ 4.662623] 9e60: cfc18000 cfc18000 cfc15bc0 0000000b 000000dc
c00394f8 00000000 cfc7880c
[ 4.670807] 9e80: 0000000b 0000000b cfdc3590 000000dc cfc19ee8
cfc1bd60 cfc19f68 c0039a98
[ 4.678993] 9ea0: cfc18000 c0045528 00008000 cfdc35a0 00000000
cfc18000 00000000 cfc19fb0
[ 4.687179] 9ec0: 00000000 00000000 cfc18000 4000cfac be9b9d64
c00206c4 cfc15bc0 00000190
[ 4.695365] 9ee0: 00020001 c0024978 0000000b 00000000 00030001
00000190 00000000 00000003
[ 4.703549] 9f00: 40003000 c032a1e0 4000cfac c001d30c c02f5760
cfd69ba0 cfc18000 00000000
[ 4.711736] 9f20: c00cdb3c c0096b44 cfc18000 cfc19f88 cfd69ba0
00000000 cfd69ba0 c02927e8
[ 4.719922] 9f40: cfc18000 00000000 00000000 cfd69ba0 c02927e8
c0097fd4 cfdc2d10 00000000
[ 4.728107] 9f60: 00000000 c02927e8 c02e98e4 00000000 00001fb0
cfc19f88 00000000 cfc19fb0
[ 4.736293] 9f80: cfc18000 c002124c 00000000 ffffffff be9b9f8f
40000000 00000000 00000000
[ 4.744479] 9fa0: cfc18000 4000cfac be9b9d64 c001df2c ea00004b
00000190 be9b9f8f 00040000
[ 4.752665] 9fc0: 00000000 be9b9f8f 40000000 00000000 00000000
00000000 4000cfac be9b9d64
[ 4.760850] 9fe0: be9b9f8f be9b9d58 40003c70 40000a7c a0000010
ffffffff 76f7fd97 fdc53774
[ 4.769037] [<c002140c>] (__bug+0x1c/0x28) from [<c01571cc>]
(prio_tree_replace+0x3c/0x90)
[ 4.777233] [<c01571cc>] (prio_tree_replace+0x3c/0x90) from
[<c01572fc>] (prio_tree_remove+0xdc/0xf8)
[ 4.785517] [<c01572fc>] (prio_tree_remove+0xdc/0xf8) from
[<c00817f0>] (__remove_shared_vm_struct+0xa4/0xd8)
[ 4.794758] [<c00817f0>] (__remove_shared_vm_struct+0xa4/0xd8) from
[<c0081850>] (unlink_file_vma+0x2c/0x4c)
[ 4.804694] [<c0081850>] (unlink_file_vma+0x2c/0x4c) from
[<c007f298>] (free_pgtables+0x34/0x98)
[ 4.814534] [<c007f298>] (free_pgtables+0x34/0x98) from [<c0081480>]
(exit_mmap+0x114/0x1cc)
[ 4.823337] [<c0081480>] (exit_mmap+0x114/0x1cc) from [<c0033d08>]
(mmput+0x3c/0x11c)
[ 4.831791] [<c0033d08>] (mmput+0x3c/0x11c) from [<c0037f40>]
(exit_mm+0x124/0x130)
[ 4.839639] [<c0037f40>] (exit_mm+0x124/0x130) from [<c00394f8>]
(do_exit+0x16c/0x654)
[ 4.847311] [<c00394f8>] (do_exit+0x16c/0x654) from [<c0039a98>]
(do_group_exit+0xb8/0xec)
[ 4.855245] [<c0039a98>] (do_group_exit+0xb8/0xec) from [<c0045528>]
(get_signal_to_deliver+0x3cc/0x42c)
[ 4.863531] [<c0045528>] (get_signal_to_deliver+0x3cc/0x42c) from
[<c00206c4>] (do_notify_resume+0x58/0x5d8)
[ 4.873025] [<c00206c4>] (do_notify_resume+0x58/0x5d8) from
[<c001df2c>] (work_pending+0x1c/0x20)
[ 4.882874] Code: e1a01000 e59f000c eb0056ac e3a03000 (e5833000)
[ 4.897903] ---[ end trace 053bf21ade3656af ]---
[ 4.897921] Fixing recursive fault but reboot is needed!
[ 4.907883] BUG: scheduling while atomic: init/1/0x00000004
[ 4.913488] Modules linked in:
[ 4.913495] [<c00235e8>] (unwind_backtrace+0x0/0xe0) from
[<c0233970>] (schedule+0x6c/0x320)
[ 4.929710] kernel BUG at fs/jffs2/readinode.c:154!
[ 4.934682] Unable to handle kernel NULL pointer dereference at
virtual address 00000000
[ 4.934695] pgd = c0004000
[ 4.945504] [00000000] *pgd=00000000
[ 4.945513] Internal error: Oops: 817 [#2] PREEMPT
[ 4.949086] last sysfs file:
[ 4.953875] Modules linked in:
[ 4.956836] CPU: 0 Tainted: G B D
(2.6.35-rc2-00131-g7908a9e-dirty #40)
[ 4.959887] PC is at __bug+0x1c/0x28
[ 4.967458] LR is at __bug+0x18/0x28
[ 4.971031] pc : [<c002140c>] lr : [<c0021408>] psr: 60000013
[ 4.974613] sp : cfc71db0 ip : cfc71ca0 fp : cfcae600
[ 4.974622] r10: cfc4df80 r9 : cfc4aef0 r8 : cfcaea00
[ 4.986101] r7 : 00000000 r6 : cfc4df80 r5 : cfc71e4c r4 :
cfc4df80
[ 4.991327] r3 : 00000000 r2 : 00000000 r1 : 00000001 r0 :
0000003d
[ 4.997855] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM
Segment kernel
[ 5.004383] Control: 0005397f Table: 0fd00018 DAC: 00000017
[ 5.011693] Process jffs2_gcd_mtd4 (pid: 194, stack limit =
0xcfc70278)
[ 5.017437] Stack: (0xcfc71db0 to 0xcfc72000)
[ 5.024051] 1da0: 00000002
c0122fb4 00000000 cfc71e70
[ 5.028414] 1dc0: cfc68000 cfcaea00 00000110 cfc4df20 cfc4df80
cfc71e4c cfc4df80 00000000
[ 5.036605] 1de0: cfcaea00 0000001a cfc4df00 c012341c cfc4df20
00000000 cfc4df80 cfc71e4c
[ 5.044791] 1e00: cfc4df80 cfc4df80 000001cb 00000000 cfc71ea4
cfd5a000 00000000 c01246ac
[ 5.052976] 1e20: 000007cc cfc71e70 cfd5a000 c02ea8f0 00000085
cfcae600 cfcaea00 00000000
[ 5.061163] 1e40: cfc70000 00000000 00008f07 00000000 00000000
cfc4df60 0000001b 00000000
[ 5.069347] 1e60: 00000000 00000000 cfd57a98 00000001 000007cc
cfc71e80 c00325ac cfcae600
[ 5.077533] 1e80: cfc4b3b0 cfcaea00 00000001 00000000 00000000
00000000 00000000 c0124eb0
[ 5.085719] 1ea0: 00000017 c02f4ddc cfc15bc0 c0051664 00000000
c002eb08 c002f388 cfc1801c
[ 5.093906] 1ec0: 00000000 cfdc2ce0 cfc71efc cfc71ed8 c0233ba8
c002eff8 cfdc2ce0 ffff8c7e
[ 5.102092] 1ee0: c0310a00 00000005 cfc70000 cfc4b3b0 cfcaea00
c012949c ffff8c7e c02343f4
[ 5.110278] 1f00: 00000000 00200200 ffff8c7e c0310a00 c00413c8
cfdc2ce0 cfc71fd4 cfc70000
[ 5.118462] 1f20: cfcaea00 cfcaea00 00000000 00000000 00000000
c012b070 cfdc2d10 c02ea8f0
[ 5.126648] 1f40: cfc71f8c cfc71f50 c00315d0 c002dab0 cfdc2d10
c02ea8f0 cfdc2d10 cfdc2e44
[ 5.134836] 1f60: 00000000 00000000 00000000 c002eb1c c02ea8f0
cfdc2d10 cfc71fa4 cfc71f88
[ 5.143028] 1f80: c002ebe8 c002eb08 00000000 c02ea8b0 cfdc2ce0
cfc70000 cfc71fcc cfc71fa8
[ 5.151214] 1fa0: c0233a70 c002eb70 cfc71fcc cfc71fd4 cfc19e08
cfcaea00 c012af10 cfc71fd4
[ 5.159400] 1fc0: cfc19e08 cfcaea00 c012af10 c004bfa8 00000000
00000000 cfc71fd8 cfc71fd8
[ 5.167586] 1fe0: 00000000 00000000 00000000 00000000 00000000
c001ef1c 76f7fd97 fdcd3774
[ 5.175770] [<c002140c>] (__bug+0x1c/0x28) from [<c0122fb4>]
(check_tn_node+0x54/0x3c4)
[ 5.183967] [<c0122fb4>] (check_tn_node+0x54/0x3c4) from [<c012341c>]
(jffs2_build_inode_fragtree+0xf8/0x1ec)
[ 5.191993] [<c012341c>] (jffs2_build_inode_fragtree+0xf8/0x1ec) from
[<c01246ac>] (jffs2_do_read_inode_internal+0x119c/0x194c)
[ 5.201921] [<c01246ac>] (jffs2_do_read_inode_internal+0x119c/0x194c)
from [<c0124eb0>] (jffs2_do_crccheck_inode+0x54/0x94)
[ 5.213414] [<c0124eb0>] (jffs2_do_crccheck_inode+0x54/0x94) from
[<c012949c>] (jffs2_garbage_collect_pass+0x21c/0x974)
[ 5.224561] [<c012949c>] (jffs2_garbage_collect_pass+0x21c/0x974)
from [<c012b070>] (jffs2_garbage_collect_thread+0x160/0x1b8)
[ 5.235360] [<c012b070>] (jffs2_garbage_collect_thread+0x160/0x1b8)
from [<c004bfa8>] (kthread+0x78/0x80)
[ 5.246766] [<c004bfa8>] (kthread+0x78/0x80) from [<c001ef1c>]
(kernel_thread_exit+0x0/0x8)
[ 5.256347] Code: e1a01000 e59f000c eb0056ac e3a03000 (e5833000)
[ 5.270951] ---[ end trace 053bf21ade3656b0 ]---
[ 7.022826] kernel BUG at mm/slab.c:509!
[ 7.022938] Unable to handle kernel NULL pointer dereference at
virtual address 00000000
[ 7.026862] pgd = c0004000
[ 7.034956] [00000000] *pgd=00000000
[ 7.037655] Internal error: Oops: 817 [#3] PREEMPT
[ 7.041224] last sysfs file:
[ 7.046014] Modules linked in:
[ 7.048973] CPU: 0 Tainted: G B D
(2.6.35-rc2-00131-g7908a9e-dirty #40)
[ 7.052024] PC is at __bug+0x1c/0x28
[ 7.059598] LR is at __bug+0x18/0x28
[ 7.063170] pc : [<c002140c>] lr : [<c0021408>] psr: 60000093
[ 7.066751] sp : cfc31f40 ip : c0183b34 fp : 00000000
[ 7.066761] r10: 00000001 r9 : 00000000 r8 : 00000000
[ 7.078238] r7 : 00000000 r6 : cfc05130 r5 : cfc003c0 r4 :
cfc05130
[ 7.083465] r3 : 00000000 r2 : 00000001 r1 : 000045ae r0 :
00000032
[ 7.089993] Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM
Segment kernel
[ 7.096521] Control: 0005397f Table: 0fd00018 DAC: 00000017
[ 7.103917] Process events/0 (pid: 5, stack limit = 0xcfc30278)
[ 7.109661] Stack: (0xcfc31f40 to 0xcfc32000)
[ 7.115582] 1f40: 00000017 c008ea44 cfcab660 cfc05130 00000001
cfc05120 00000000 cfc003c0
[ 7.119951] 1f60: 00000000 c008ebf8 cfc022a0 cfc003c0 00000000
c02f51c8 c008fc90 c008fccc
[ 7.128135] 1f80: 00000000 cfc018e0 c02f51c8 c02f51cc cfc30000
cfc018e0 c02f51c8 c0048eb4
[ 7.136322] 1fa0: c0233a70 00000000 cfc15040 c004c268 cfc31fb0
cfc31fb0 cfc31fd4 cfc19f60
[ 7.144507] 1fc0: cfc018e0 c0048d84 00000000 c004bfa8 00000000
00000000 cfc31fd8 cfc31fd8
[ 7.152692] 1fe0: 00000000 00000000 00000000 00000000 00000000
c001ef1c 76f7fd97 fdcd3774
[ 7.160877] [<c002140c>] (__bug+0x1c/0x28) from [<c008ea44>]
(free_block+0x60/0x15c)
[ 7.169073] [<c008ea44>] (free_block+0x60/0x15c) from [<c008ebf8>]
(drain_array+0xb8/0x108)
[ 7.176829] [<c008ebf8>] (drain_array+0xb8/0x108) from [<c008fccc>]
(cache_reap+0x3c/0x114)
[ 7.185196] [<c008fccc>] (cache_reap+0x3c/0x114) from [<c0048eb4>]
(worker_thread+0x130/0x1f8)
[ 7.193570] [<c0048eb4>] (worker_thread+0x130/0x1f8) from
[<c004bfa8>] (kthread+0x78/0x80)
[ 7.202205] [<c004bfa8>] (kthread+0x78/0x80) from [<c001ef1c>]
(kernel_thread_exit+0x0/0x8)
[ 7.210481] Code: e1a01000 e59f000c eb0056ac e3a03000 (e5833000)
[ 7.224964] ---[ end trace 053bf21ade3656b1 ]---
[ 7.224979] note: events/0[5] exited with preempt_count 1
-siddarth
>
> diff --git a/arch/arm/mach-mmp/pxa168.c b/arch/arm/mach-mmp/pxa168.c
> index 652ae66..689e0d5 100644
> --- a/arch/arm/mach-mmp/pxa168.c
> +++ b/arch/arm/mach-mmp/pxa168.c
> @@ -15,6 +15,7 @@
> #include <linux/io.h>
> #include <linux/clk.h>
>
> +#include <asm/hardware/cache-tauros2.h>
> #include <asm/mach/time.h>
> #include <mach/addr-map.h>
> #include <mach/cputype.h>
> @@ -101,6 +102,7 @@ static struct clk_lookup pxa168_clkregs[] = {
> static int __init pxa168_init(void)
> {
> if (cpu_is_pxa168()) {
> + tauros2_init();
> mfp_init_base(MFPR_VIRT_BASE);
> mfp_init_addr(pxa168_mfp_addr_map);
> pxa_init_dma(IRQ_PXA168_DMA_INT0, 32);
> diff --git a/arch/arm/mm/cache-tauros2.c b/arch/arm/mm/cache-tauros2.c
> index 5086865..79f49f5 100644
> --- a/arch/arm/mm/cache-tauros2.c
> +++ b/arch/arm/mm/cache-tauros2.c
> @@ -120,7 +120,11 @@ static inline u32 __init read_extra_features(void)
>
> static inline void __init write_extra_features(u32 u)
> {
> + volatile u32 cp15;
> __asm__("mcr p15, 1, %0, c15, c1, 0" : : "r" (u));
> + __asm__("mrc p15, 0, %0, c1, c0, 0" : "=r" (cp15));
> + cp15 |= (1 << 26);
> + __asm__("mcr p15, 0, %0, c1, c0, 0" : : "r" (cp15));
> }
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2010-06-11 10:20 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-12 9:56 L2 cache support for pxa16x Siddarth Gore
2010-05-12 10:11 ` Eric Miao
2010-05-20 10:17 ` Siddarth Gore
2010-05-20 14:06 ` Eric Miao
2010-05-21 9:44 ` Siddarth Gore
2010-05-21 10:27 ` Eric Miao
2010-05-21 10:37 ` Siddarth Gore
2010-05-21 11:07 ` Haojian Zhuang
2010-05-21 11:30 ` Eric Miao
2010-05-21 11:05 ` Haojian Zhuang
2010-05-21 11:37 ` Eric Miao
2010-06-11 10:20 ` Siddarth Gore
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).