Dear all,
I'm currently evaluating xenomai 2.5.5.2 on a i.MX27 platform with
adeos-ipipe-2.6.33-arm-1.18-01.patch.
I've encountred two issues for the time being (same with
adeos-ipipe-2.6.33-arm-1.18-00.patch).
1°/ First one happens when building a 2.6.33.3 kernel (after xenomai
prepare/configure/compile stage):
CC arch/arm/plat-mxc/time.o
arch/arm/plat-mxc/time.c: In function 'mxc_timer_init':
arch/arm/plat-mxc/time.c:400: error: 'TIM1_BASE_ADDR' undeclared (first
use in this function)
arch/arm/plat-mxc/time.c:400: error: (Each undeclared identifier is
reported only once
arch/arm/plat-mxc/time.c:400: error: for each function it appears in.)
make[1]: *** [arch/arm/plat-mxc/time.o] Erreur 1
make: *** [arch/arm/plat-mxc] Erreur 2
I first tried 2.6.31 kernel that was compiling (patched with
adeos-ipipe-2.6.31-arm-1.16-02.patch).
Looking for differences lead me to patch my kernel with:
Index: linux-2.6.33.3/arch/arm/plat-mxc/time.c
===================================================================
--- linux-2.6.33.3.orig/arch/arm/plat-mxc/time.c 2011-02-28
11:44:02.000000000 +0100
+++ linux-2.6.33.3/arch/arm/plat-mxc/time.c 2011-02-28
11:48:19.000000000 +0100
@@ -395,12 +395,17 @@
tsc_info.freq = clk_get_rate(timer_clk);
mxc_min_delay = ((__ipipe_cpu_freq + 500000) / 1000000) ?: 1;
- if (cpu_is_mx1() || cpu_is_mx2()) {
-#if defined(CONFIG_ARCH_MX1) || defined(CONFIG_ARCH_MX2)
+ if (cpu_is_mx1()) {
+#ifdef CONFIG_ARCH_MX1
tsc_info.u.counter_paddr = (TIM1_BASE_ADDR + MX1_2_TCN);
tsc_info.counter_vaddr =
(unsigned long)(timer_base + MX1_2_TCN);
#endif
+ } else if (cpu_is_mx2()) {
+#ifdef CONFIG_ARCH_MX2
+ tsc_info.u.counter_paddr = (GPT1_BASE_ADDR + MX1_2_TCN);
+ tsc_info.counter_vaddr = (unsigned long)(timer_base + MX1_2_TCN);
+#endif
} else if (cpu_is_mx3()) {
#ifdef CONFIG_ARCH_MX3
tsc_info.u.counter_paddr = (GPT1_BASE_ADDR + MX3_TCN);
2°/ Second issue comes when trying to launch xeno-test:
[...]
root@phyCARD:~ /usr/xenomai/share/xenomai/testsuite/latency/run -- -sh
-T 120 -t0
*
*
* Type ^C to stop this application.
*
*
== Sampling period: 1000 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
Unhandled fault: external abort on non-linefetch (0x008) at 0x40021010
Bus error
[...]
Looking at that thread:
http://www.mail-archive.com/[email protected]/msg09607.html
It appears a similar issue has already been fixed on an i.MX25 by
clearing supervisor's protection bit.
So, I tried the following, that seem to fix the issue as well:
Index: linux-2.6.33.3/arch/arm/mach-mx2/devices.c
===================================================================
--- linux-2.6.33.3.orig/arch/arm/mach-mx2/devices.c 2011-03-01
10:51:53.000000000 +0100
+++ linux-2.6.33.3/arch/arm/mach-mx2/devices.c 2011-03-02
17:44:08.000000000 +0100
@@ -680,3 +680,16 @@
{
return mxc_gpio_init(imx_gpio_ports, ARRAY_SIZE(imx_gpio_ports));
}
+
+#ifdef CONFIG_IPIPE
+static int post_cpu_init(void)
+{
+ /* Allow userspace access through the
+ * peripheral access register (PAR).
+ */
+ if (cpu_is_mx27 ())
+ ipipe_mach_allow_uaccess(AIPI_BASE_ADDR, 3);
+ return 0;
+}
+postcore_initcall(post_cpu_init);
+#endif /* CONFIG_IPIPE */
Index: linux-2.6.33.3/arch/arm/plat-mxc/cpu.c
===================================================================
--- linux-2.6.33.3.orig/arch/arm/plat-mxc/cpu.c 2011-03-01
15:11:57.000000000 +0100
+++ linux-2.6.33.3/arch/arm/plat-mxc/cpu.c 2011-03-02
09:38:28.000000000 +0100
@@ -1,5 +1,6 @@
#include <linux/module.h>
#include <linux/io.h>
+#include <mach/hardware.h>
unsigned int __mxc_cpu_type;
EXPORT_SYMBOL(__mxc_cpu_type);
@@ -34,4 +35,16 @@
aips_reg &= 0x00FFFFFF;
__raw_writel(aips_reg, aips2 + 0x50);
}
+
+#if defined(CONFIG_ARCH_MX1) || defined(CONFIG_ARCH_MX2)
+void ipipe_mach_allow_uaccess(unsigned long aipi_base_addr, unsigned
long bit_num)
+{
+ u32 tmp;
+
+ tmp = __raw_readl(IO_ADDRESS(aipi_base_addr + 0x00000008));
+ __raw_writel(tmp & ~(1 << bit_num), IO_ADDRESS(aipi_base_addr +
0x00000008));
+
+}
+#endif
+
#endif /* CONFIG_IPIPE */
Index: linux-2.6.33.3/arch/arm/plat-mxc/include/mach/common.h
===================================================================
--- linux-2.6.33.3.orig/arch/arm/plat-mxc/include/mach/common.h
2011-03-01 15:14:35.000000000 +0100
+++ linux-2.6.33.3/arch/arm/plat-mxc/include/mach/common.h 2011-03-02
09:47:34.000000000 +0100
@@ -47,6 +47,9 @@
#ifdef CONFIG_IPIPE
void ipipe_mach_allow_hwtimer_uaccess(unsigned long aips1, unsigned
long aips2);
+#if defined(CONFIG_ARCH_MX1) || defined(CONFIG_ARCH_MX2)
+void ipipe_mach_allow_uaccess(unsigned long aipi_base_addr, unsigned
long bit_num);
+#endif
#endif
#endif
Could someone advise me on the modifications brought here?
Do these modifications look like ok to you?
Thanks in advance,
Fabrice
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help