Reg: Enable arc to access the spi controller on I/O fabric on C1000
Mahendravarman Rajarao (RBEI/EAA10) <Mahendravarman.Rajarao@...>
Hi
Please help me on the following queries
I have downloaded zephyr 1.6 and I have applied the patch https://gerrit.zephyrproject.org/r/#/c/8708/ to Enable arc to access the spi controller on I/O fabric.
I have few queries on the above.
1. I have declared CONFIG_SPI in the prj.conf for the ARC project and SPI access is working. Can I declare the CONFIG_ SPI on the prj.conf on the X86 also ? My query is simultaneous SPI access is possible via ARC and X86 ? or should we declare CONFIG_SPI in any one of the cores only.
2. After reset of C1000, the code in the ARC is getting executed first, Followed by x86 . By default can I make some settings to delay the execution of ARC code other than task_sleep ?
Best regards
|
|
Michael Rosen
1. I have declared CONFIG_SPI in the prj.conf for the ARC project and SPI access is working.You can, just be aware that there isn't any builtin mutual exclusion between the x86 and ARC cores in the OS, so if both cores are trying to access the same SPI controller, there will likely be concurrency issues. But it should be perfectly fine to use SPI0 from x86 and SPI1 from ARC (just be aware there still might be issues if you attempt to clock gate the controllers from both cores). Just be sure to disable the SPI controller you aren't using on the core that isn't using it or the interrupt routing will break things (wrong core responding to the interrupt). x86.conf: CONFIG_SPI=y CONFIG_SPI_QMSI=y CONFIG_SPI_0=y CONFIG_SPI_1=n arc.conf: CONFIG_SPI=y CONFIG_SPI_QMSI=y CONFIG_SPI_0=n CONFIG_SPI_1=y 2. After reset of C1000, the code in the ARC is getting executed first, Followed by x86 .You can make sure ARC starts later if you modify the following file (unfortunately, the option isn't Kconfig'able): arch/x86/soc/intel_quark/quark_se/soc.c And modify the priority under SYS_INIT to be later. However, if you want it to happen AFTER the x86 application starts, youll need to still modify that file to remove the SYS_INIT and add this to your application: extern int _arc_init(struct dev* arg); // use in app like so // if (_arc_init(NULL)) { // printk("ARC initialization failed!\n"); // } Its pretty ugly, but functional. You will still need CONFIG_ARC_INIT=y to build the _arc_init function. Mike |
|