Current RTEMS master build for CSB336 (MC9328MXL)

Pavel Pisa ppisa4lists at pikron.com
Wed Jul 24 12:58:44 UTC 2013


Hello Sebastian Huber and others,

I have started testing of RTEMS git (i.e. 4.11 pre) and I have found
error during compile that CPU_ALIGNMENT definition is missing in
the heap implementation.

Next change fixes the problem


diff --git a/cpukit/score/include/rtems/score/heapimpl.h b/cpukit/score/include/rtems/score/heapimpl.h
index 27c3a23..6855244 100644
--- a/cpukit/score/include/rtems/score/heapimpl.h
+++ b/cpukit/score/include/rtems/score/heapimpl.h
@@ -19,6 +19,7 @@
 #define _RTEMS_SCORE_HEAPIMPL_H

 #include <rtems/score/heap.h>
+#include <rtems/score/cpu.h>

 #ifdef __cplusplus



Tested on master 218286bc055e9d9bcbefd3dfa2b38f92a95b15a6 7/23/13 5:17 PM

I have found some other problems with CSB336 on real hardware.
I have resolved already some and investigating others.

The good new is that I have hacked version (without MMU
mapped memory to the the address 0 which uses jumps from
Flash for the exception processing) which is able to run
some minimal applications.

I expect, I get to more testing (even the graphic on CSB336)
when I return from vacations (planned from July 26 till August 4 or 8).

The one fix which is the must for MC9328MXL is the correction
of bsp_interrupt_dispatch() function.

diff --git a/c/src/lib/libcpu/arm/mc9328mxl/irq/irq.c b/c/src/lib/libcpu/arm/mc9328mxl/irq/irq.c
index 447dedf..d3bde4c 100644
--- a/c/src/lib/libcpu/arm/mc9328mxl/irq/irq.c
+++ b/c/src/lib/libcpu/arm/mc9328mxl/irq/irq.c
@@ -20,18 +20,29 @@

 void bsp_interrupt_dispatch(void)
 {
-  rtems_vector_number vector = *((uint32_t *) 0x00223040) >> 16;
+
+  rtems_vector_number vector = MC9328MXL_AITC_NIVECSR >> 16;

   bsp_interrupt_handler_dispatch(vector);
 }


The original is missing void and (*x >> 16) is optimized to ldh rX,[rY].
But it is not allowed/supported to access bus/range used by AITC
by other than 32 bit wide accesses and access results in the data abort.
The corrected version works and is even more readable.

I think that it worth to provide non-stub implementation
of bsp_interrupt_vector_enable/disable as well.

 rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector)
 {
+  if (vector >= MC9328MXL_NUM_INTS)
+     return RTEMS_INVALID_ID;
+
+  MC9328MXL_AITC_INTENNUM = vector;
+
   return RTEMS_SUCCESSFUL;
 }

 rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
 {
+  if (vector >= MC9328MXL_NUM_INTS)
+     return RTEMS_INVALID_ID;
+
+  MC9328MXL_AITC_INTDISNUM = vector;
+
   return RTEMS_SUCCESSFUL;
 }


Or is there some reason to have only local version of this functionality
in rtems_irq_connect_data? I.e. for 

static void clock_isr_on(const rtems_irq_connect_data *unused)
{
  MC9328MXL_TMR1_TCTL |= MC9328MXL_TMR_TCTL_IRQEN;
  MC9328MXL_AITC_INTENNUM = MC9328MXL_INT_TIMER1;
}

I expect to prepare separate bsp_interrupt_dispatch fix patch
and extension of the bsp_interrupt_vector_enable/disable
as an other GIT formatted patch and send these to the
devel list. If there is confirmation today, I can do it before my
leave else after return. Is that OK?
I do not expect to do separate patch for score/heapimpl.h.
Please, commit that fix directly.

I will report other findings when I have more information
what is the problem with page/rage 0 overlay. It worked
well in 4.9 so it is something strange there.

Best wishes,

                Pavel



More information about the devel mailing list