[PATCH] Temporary fix for ethernet rx intr hang issue and Disable cache
ragunath
ragunath3252 at gmail.com
Sun Jun 28 09:54:09 UTC 2015
---
c/src/lib/libbsp/arm/beagle/configure.ac | 3 +++
c/src/lib/libbsp/arm/beagle/irq.c | 5 +++--
c/src/lib/libbsp/arm/beagle/startup/bspstartmmu.c | 17 +++++++++++++++++
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/c/src/lib/libbsp/arm/beagle/configure.ac b/c/src/lib/libbsp/arm/beagle/configure.ac
index b0c99a3..41cd939 100644
--- a/c/src/lib/libbsp/arm/beagle/configure.ac
+++ b/c/src/lib/libbsp/arm/beagle/configure.ac
@@ -33,6 +33,9 @@ RTEMS_BSPOPTS_HELP([CONSOLE_POLLED],[polled console i/o (e.g. to run testsuite)]
RTEMS_BSPOPTS_SET([BBB_DEBUG],[beaglebone*],[0])
RTEMS_BSPOPTS_HELP([BBB_DEBUG],[Enable BBB debug])
+RTEMS_BSPOPTS_SET([BBB_CACHE_DISABLE],[beaglebone*],[0])
+RTEMS_BSPOPTS_HELP([BBB_CACHE_DISABLE],[DISABLE CACHE IN BBB])
+
RTEMS_BSP_CLEANUP_OPTIONS(0, 0)
RTEMS_BSP_LINKCMDS
diff --git a/c/src/lib/libbsp/arm/beagle/irq.c b/c/src/lib/libbsp/arm/beagle/irq.c
index c6485cd..9f2429c 100644
--- a/c/src/lib/libbsp/arm/beagle/irq.c
+++ b/c/src/lib/libbsp/arm/beagle/irq.c
@@ -73,7 +73,8 @@ void bsp_interrupt_dispatch(void)
_ARMV4_Status_restore(psr);
- bsp_interrupt_vector_enable(irq);
+ if ( ! ( irq == 40 || irq == 41 || irq == 42 || irq == 43 ) )
+ bsp_interrupt_vector_enable(irq);
}
}
@@ -94,11 +95,11 @@ rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector)
uint32_t mask, cur;
uint32_t mir_reg = get_mir_reg(vector, &mask);
+ irqs_enabled[vector] = 1;
cur = mmio_read(omap_intr.base + mir_reg);
mmio_write(omap_intr.base + mir_reg, cur & ~mask);
flush_data_cache();
- irqs_enabled[vector] = 1;
return RTEMS_SUCCESSFUL;
}
diff --git a/c/src/lib/libbsp/arm/beagle/startup/bspstartmmu.c b/c/src/lib/libbsp/arm/beagle/startup/bspstartmmu.c
index 157edfa..c8d6526 100644
--- a/c/src/lib/libbsp/arm/beagle/startup/bspstartmmu.c
+++ b/c/src/lib/libbsp/arm/beagle/startup/bspstartmmu.c
@@ -44,10 +44,26 @@ BSP_START_TEXT_SECTION void beagle_setup_mmu_and_cache(void)
{
/* turn mmu off first in case it's on */
uint32_t ctrl = arm_cp15_start_setup_mmu_and_cache(
+#if BBB_CACHE_DISABLE
+ /* clear - mmu off & disable cache */
+ ARM_CP15_CTRL_M | ARM_CP15_CTRL_A | ARM_CP15_CTRL_I | ARM_CP15_CTRL_C,
+#else
ARM_CP15_CTRL_M | ARM_CP15_CTRL_A, /* clear - mmu off */
+#endif /* BBB_CACHE_DISABLE */
ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_Z
);
+#if BBB_CACHE_DISABLE
+ arm_cp15_start_setup_translation_table(
+ (uint32_t *) bsp_translation_table_base,
+ ARM_MMU_DEFAULT_CLIENT_DOMAIN,
+ &beagle_mmu_config_table[0],
+ RTEMS_ARRAY_SIZE(beagle_mmu_config_table)
+ );
+
+ ctrl |= ARM_CP15_CTRL_M;
+ arm_cp15_set_control(ctrl);
+#else
arm_cp15_start_setup_translation_table_and_enable_mmu_and_cache(
ctrl,
(uint32_t *) bsp_translation_table_base,
@@ -55,4 +71,5 @@ BSP_START_TEXT_SECTION void beagle_setup_mmu_and_cache(void)
&beagle_mmu_config_table[0],
RTEMS_ARRAY_SIZE(beagle_mmu_config_table)
);
+#endif /* BBB_CACHE_DISABLE */
}
--
1.9.1
More information about the devel
mailing list