<html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><style>body { line-height: 1.5; }blockquote { margin-top: 0px; margin-bottom: 0px; margin-left: 0.5em; }body { font-size: 10.5pt; font-family: ????; color: rgb(0, 0, 0); line-height: 1.5; }</style></head><body>
<div><span></span>Thanks. Bugs have been fixed. </div><div><br></div>
<div><br></div><hr style="width: 210px; height: 1px;" color="#b5c4df" size="1" align="left">
<div><span><div style="MARGIN: 10px; FONT-FAMILY: verdana; FONT-SIZE: 10pt"><div>Best,</div><div>Tian</div><div>Q.K.M Technology Co., Ltd.</div><div><span style="font-size: 10pt; line-height: 1.5; background-color: window;">xuelin.tian@qkmtech.com</span></div></div></span></div>
<blockquote style="margin-top: 0px; margin-bottom: 0px; margin-left: 0.5em;"><div> </div><div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm"><div style="PADDING-RIGHT: 8px; PADDING-LEFT: 8px; FONT-SIZE: 12px;FONT-FAMILY:tahoma;COLOR:#000000; BACKGROUND: #efefef; PADDING-BOTTOM: 8px; PADDING-TOP: 8px"><div><b>From:</b> <a href="mailto:chrisj@rtems.org">Chris Johns</a></div><div><b>Date:</b> 2016-05-19 07:07</div><div><b>To:</b> <a href="mailto:xuelin.tian@qkmtech.com">xuelin.tian@qkmtech.com</a>; <a href="mailto:rtems-users@rtems.org">'rtems-users@rtems.org'</a></div><div><b>Subject:</b> Re: Access PL within Zynq through rtems</div></div></div><div><div>On 17/05/2016 22:44, xuelin.tian@qkmtech.com wrote:</div>
<div>> Dear all,</div>
<div>> I encountered an issue recently, about controlling and reading</div>
<div>> from/writing to PL within Zynq via rtems application. I've built up an</div>
<div>> IP core, and programmed FPGA, it all went well. The address assigned to</div>
<div>> this IP core starts from, for example, 0x43c0_0000 to 0x43c0_ffff. If I</div>
<div>> wanted to control this, I just wrote some value to the above address,</div>
<div>> like 0x43c0_0000, 0x43c0_0004 and so on. Unfortunatelly, it did not</div>
<div>> work. By the way, it all went well in bare metal application.</div>
<div> </div>
<div>If you mean the Xilinx SDK, that tool opens the whole address space up </div>
<div>and I do not know if any of the caches are enabled.</div>
<div> </div>
<div>> First, it generates an Abort exception. I figured out that I need to</div>
<div>> modify the comfiguration in *.../xilinx-zynq/startup/bspstartmmu.c*, to</div>
<div>> assign a new section in *zynq_mmu_config_table[]*.</div>
<div>> After that, it does not generate Abort exception, but I still can not</div>
<div>> control the PL.</div>
<div> </div>
<div>I add a file to my applications that override the default build with the </div>
<div>BSP. The contents is:</div>
<div> </div>
<div>#define ARM_CP15_TEXT_SECTION BSP_START_TEXT_SECTION</div>
<div> </div>
<div>#include <bsp.h></div>
<div>#include <bsp/start.h></div>
<div>#include <bsp/arm-gic-irq.h></div>
<div>#include <bsp/arm-cp15-start.h></div>
<div>#include <bsp/arm-a9mpcore-start.h></div>
<div> </div>
<div>#ifdef ARMV7_CP15_START_DEFAULT_SECTIONS</div>
<div> </div>
<div>BSP_START_DATA_SECTION static const arm_cp15_start_section_config</div>
<div>zynq_mmu_config_table[] = {</div>
<div>   ARMV7_CP15_START_DEFAULT_SECTIONS,</div>
<div>   {</div>
<div>     .begin = 0xe0000000U,</div>
<div>     .end   = 0xe0200000U,</div>
<div>     .flags = ARMV7_MMU_DEVICE</div>
<div>   }, {</div>
<div>     .begin = 0xf8000000U,</div>
<div>     .end   = 0xf9000000U,</div>
<div>     .flags = ARMV7_MMU_DEVICE</div>
<div>   }, {</div>
<div>     .begin = 0x40000000U,</div>
<div>     .end   = 0xc0000000U,</div>
<div>     .flags = ARMV7_MMU_DEVICE</div>
<div>   }, {</div>
<div>     .begin = 0x00100000U,</div>
<div>     .end   = 0x00400000U,</div>
<div>     .flags = ARMV7_MMU_DEVICE</div>
<div>   }, {</div>
<div>     .begin = 0xfffc0000u,</div>
<div>     .end   = 0xffffffffu,</div>
<div>     .flags = ARMV7_MMU_DEVICE</div>
<div>   }</div>
<div>};</div>
<div> </div>
<div>BSP_START_TEXT_SECTION void zynq_setup_mmu_and_cache(void)</div>
<div>{</div>
<div>   uint32_t ctrl = arm_cp15_start_setup_mmu_and_cache(</div>
<div>     ARM_CP15_CTRL_A,</div>
<div>     ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_Z</div>
<div>   );</div>
<div> </div>
<div>   arm_cp15_start_setup_translation_table_and_enable_mmu_and_cache(</div>
<div>     ctrl,</div>
<div>     (uint32_t *) bsp_translation_table_base,</div>
<div>     ARM_MMU_DEFAULT_CLIENT_DOMAIN,</div>
<div>     &zynq_mmu_config_table[0],</div>
<div>     RTEMS_ARRAY_SIZE(zynq_mmu_config_table)</div>
<div>   );</div>
<div>}</div>
<div> </div>
<div>Chris</div>
</div></blockquote>
</body></html>