SMP: Need to enable FPU on other CPUs as well
This commit is contained in:
parent
07acd5327a
commit
356692d70e
@ -73,7 +73,7 @@
|
|||||||
|
|
||||||
int arm_start_handler(int irq, FAR void *context)
|
int arm_start_handler(int irq, FAR void *context)
|
||||||
{
|
{
|
||||||
FAR struct tcb_s *tcb = this_task();
|
FAR struct tcb_s *tcb;
|
||||||
|
|
||||||
/* Invalidate CPUn L1 so that is will be reloaded from coherent L2. */
|
/* Invalidate CPUn L1 so that is will be reloaded from coherent L2. */
|
||||||
|
|
||||||
@ -81,6 +81,7 @@ int arm_start_handler(int irq, FAR void *context)
|
|||||||
|
|
||||||
/* Reset scheduler parameters */
|
/* Reset scheduler parameters */
|
||||||
|
|
||||||
|
tcb = this_task();
|
||||||
sched_resume_scheduler(tcb);
|
sched_resume_scheduler(tcb);
|
||||||
|
|
||||||
/* Then switch contexts. This instantiates the exception context of the
|
/* Then switch contexts. This instantiates the exception context of the
|
||||||
|
@ -51,6 +51,7 @@
|
|||||||
#include "chip/imx_src.h"
|
#include "chip/imx_src.h"
|
||||||
#include "sctlr.h"
|
#include "sctlr.h"
|
||||||
#include "smp.h"
|
#include "smp.h"
|
||||||
|
#include "fpu.h"
|
||||||
#include "gic.h"
|
#include "gic.h"
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
@ -258,6 +259,12 @@ void imx_cpu_enable(void)
|
|||||||
|
|
||||||
void arm_cpu_boot(int cpu)
|
void arm_cpu_boot(int cpu)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_ARCH_FPU
|
||||||
|
/* Initialize the FPU */
|
||||||
|
|
||||||
|
arm_fpuconfig();
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Initialize the Generic Interrupt Controller (GIC) for CPUn (n != 0) */
|
/* Initialize the Generic Interrupt Controller (GIC) for CPUn (n != 0) */
|
||||||
|
|
||||||
arm_gic_initialize();
|
arm_gic_initialize();
|
||||||
|
@ -468,12 +468,41 @@ Open Issues:
|
|||||||
CPU (which may not be CPU0). Perhaps that should be a spinlock to prohibit
|
CPU (which may not be CPU0). Perhaps that should be a spinlock to prohibit
|
||||||
execution of interrupts on CPU0 when other CPUs are in a critical section?
|
execution of interrupts on CPU0 when other CPUs are in a critical section?
|
||||||
|
|
||||||
2. Cache Concurency. This is a difficult problem. There is logic in place now to
|
2. Cache Concurency. This is a complex problem. There is logic in place now to
|
||||||
clean CPU0 D-cache before starting a new CPU and for invalidating the D-Cache
|
clean CPU0 D-cache before starting a new CPU and for invalidating the D-Cache
|
||||||
when the new CPU is started.
|
when the new CPU is started. REVISIT: Seems that this should not be necessary.
|
||||||
|
If the Shareable bit set in the MMU mappings and my understanding is that this
|
||||||
|
should keep cache coherency at least within a cluster. I need to study more
|
||||||
|
how the inner and outer shareable attribute works to control cacheing
|
||||||
|
|
||||||
But there are many, many more cache coherency issues. This could, in face, be
|
But there may are many, many more such cache coherency issues if I cannot find
|
||||||
a showstopping issue.
|
a systematic way to manage cache coherency.
|
||||||
|
|
||||||
|
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0008a/CJABEHDA.html
|
||||||
|
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/CEGDBEJE.html
|
||||||
|
|
||||||
|
Try:
|
||||||
|
|
||||||
|
--- mmu.h.orig 2016-05-20 13:09:34.773462000 -0600
|
||||||
|
+++ mmu.h 2016-05-20 13:03:13.261978100 -0600
|
||||||
|
@@ -572,8 +572,14 @@
|
||||||
|
|
||||||
|
#define MMU_ROMFLAGS (PMD_TYPE_SECT | PMD_SECT_AP_R1 | PMD_CACHEABLE | \
|
||||||
|
PMD_SECT_DOM(0))
|
||||||
|
-#define MMU_MEMFLAGS (PMD_TYPE_SECT | PMD_SECT_AP_RW1 | PMD_CACHEABLE | \
|
||||||
|
+#ifdef CONFIG_SMP
|
||||||
|
+
|
||||||
|
+# define MMU_MEMFLAGS (PMD_TYPE_SECT | PMD_SECT_AP_RW1 | PMD_CACHEABLE | \
|
||||||
|
+ PMD_SECT_S | PMD_SECT_DOM(0))
|
||||||
|
+#else
|
||||||
|
+# define MMU_MEMFLAGS (PMD_TYPE_SECT | PMD_SECT_AP_RW1 | PMD_CACHEABLE | \
|
||||||
|
PMD_SECT_DOM(0))
|
||||||
|
+#endif
|
||||||
|
#define MMU_IOFLAGS (PMD_TYPE_SECT | PMD_SECT_AP_RW1 | PMD_DEVICE | \
|
||||||
|
PMD_SECT_DOM(0) | PMD_SECT_XN)
|
||||||
|
#define MMU_STRONGLY_ORDERED (PMD_TYPE_SECT | PMD_SECT_AP_RW1 | \
|
||||||
|
|
||||||
|
3. Assertions. On a fatal assertions, other CPUs need to be stopped.
|
||||||
|
|
||||||
Configurations
|
Configurations
|
||||||
==============
|
==============
|
||||||
|
Loading…
Reference in New Issue
Block a user