On Sun, 25 Apr 2021 at 21:04, somesh deshmukh <someshdeshmuk...@gmail.com> wrote: > > Hi Hesham, > > Comments added below and please find the attached device tree source file. > > Regards, > Somesh > > On Sun, Apr 25, 2021 at 12:34 AM Hesham Almatary > <hesham.almat...@cl.cam.ac.uk> wrote: >> >> Hello Somesh, >> >> On Sat, 24 Apr 2021 at 20:52, somesh deshmukh >> <someshdeshmuk...@gmail.com> wrote: >> > >> > Hi, >> > >> > The diff between the changed files is mentioned below. The default riscv >> > clock driver is recently updated and it includes the changes I was >> > proposing. >> > >> > --- /rtems/bsps/riscv/riscv/console/console-config.c 2021-04-23 >> > 16:01:13.355468092 +0530 >> > +++ /quick-start/rtems/bsps/riscv/riscv/console/console-config.c >> > 2021-04-24 21:08:55.000000000 +0530 >> > @@ -91,7 +91,7 @@ >> > stdout_path = ""; >> > } >> > >> > -#if RISCV_ENABLE_FRDME310ARTY_SUPPORT != 0 >> > +#if ((RISCV_ENABLE_FRDME310ARTY_SUPPORT != 0) || >> > (RISCV_CONSOLE_MAX_NS16550_DEVICES > 0)) >> > int root; >> > int soc; >> > root = fdt_path_offset(fdt, "/"); >> > @@ -318,7 +318,7 @@ >> > >> > rtems_termios_device_install( >> > path, >> > - &ns16550_handler_interrupt, >> > + &ns16550_handler_polled, >> Doesn't your UART support interrupts? Could you also paste your DTS? > > >> Yes, my UART supports interrupt mode but in the console-config.c > line 234 and 235 we are assigning the ns16550_polled_putchar and > ns16550_polled_getchar for write and read respectively. Because of this > assignment I wanted to initialize the console as ns16550_handler_polled. > >> But this is not the issue I faced, I was facing a problem in > riscv_get_console_node(diff have the change I made). Without that change, I > was not able to read the console_node correctly for ns16550. Yeah please submit a separate patch for that so that we can review and push it.
>> >> >> > NULL, >> > &ctx->base >> > ); >> > >> > --- /rtems/spec/build/bsps/riscv/riscv/bsprv64imafdcmedany.yml 2021-04-23 >> > 16:01:13.563436275 +0530 >> > +++ /quick-start/rtems/spec/build/bsps/riscv/riscv/bsprv64imafdcmedany.yml >> > 2021-03-26 14:30:37.454515153 +0530 >> > @@ -12,7 +12,7 @@ >> > install: [] >> > links: >> > - role: build-dependency >> > - uid: ../../opto2 >> > + uid: ../../opto0 >> > - role: build-dependency >> > uid: grp >> > source: [] >> > >> > --- /rtems/bsps/riscv/shared/start/start.S 2021-04-23 16:01:13.359467480 >> > +0530 >> > +++ /quick-start/rtems/bsps/riscv/shared/start/start.S 2021-03-18 >> > 11:16:47.608079073 +0530 >> > @@ -74,17 +74,18 @@ >> > LADDR sp, _ISR_Stack_area_end >> > #endif >> > >> > +/* Clear .bss */ >> > +LADDR a0, bsp_section_bss_begin >> > +li a1, 0 >> > +LADDR a2, bsp_section_bss_size >> > +call memset >> > + >> That shouldn't be a bug on the RTEMS side. It seems like your placed >> FDT overlaps with RAM/BSS area. How/where are you embedding the FDT? > > >> Yes. The fdt overlaps with the BSS area. The DTB is available at > 0x80000000 location and the same address is passed to > >> #a1 register. The bsp_fdt_blob is getting address from .BSS section. > Right, it is the RTEMS allocated bsp_fdt_blob that's placed in the BSS. If you can submit another patch for that it will be great. Please read https://docs.rtems.org/branches/master/user/support/contrib.html > >> #ifdef BSP_START_COPY_FDT_FROM_U_BOOT > >> li a1, 0x80000000 > >> mv a0, a1 > >> call bsp_fdt_copy > > >> This is the startup code that copies the fdt blob address in a1 > register manually. after this, the bsp_fdt_cpoy will copy the > >> fdt blob from 0x80000000 to local memory. > > Sections: > Idx Name Size VMA > LMA File off Algn Flags > 13 .bss 00013ae8 0000000080124e40 0000000080124e40 00025d98 > 2**6 ALLOC > > SYMBOL TABLE: > 0000000080127ac0 l O .bss 0000000000010000 bsp_fdt_blob > > >> >> >> > #ifdef BSP_START_COPY_FDT_FROM_U_BOOT >> > mv a0, a1 >> > call bsp_fdt_copy >> > #endif >> > >> > - /* Clear .bss */ >> > - LADDR a0, bsp_section_bss_begin >> > - li a1, 0 >> > - LADDR a2, bsp_section_bss_size >> > - call memset >> > - >> > #ifdef RTEMS_SMP >> > /* Give go to secondary processors */ >> > LADDR t0, .Lsecondary_processor_go >> > >> > Let me know if you have any comments/suggestions for the above changes. >> > >> > Regards, >> > Somesh >> > >> > On Fri, Apr 23, 2021 at 5:15 PM Joel Sherrill <j...@rtems.org> wrote: >> >> >> >> I agree with Karel that a diff posted would be appreciated. It.would be >> >> nice to see this worked through and merged. Also updates to the Users >> >> Guide on this. >> >> >> >> On Thu, Apr 22, 2021, 10:52 PM somesh deshmukh >> >> <someshdeshmuk...@gmail.com> wrote: >> >>> >> >>> I was able to test the rtems hello-world example and ticker example on >> >>> the polarfire soc icicle kit. >> >>> >> >>> A little background about Polarfire SoC ICICLE Kit. >> >>> The PolarFire SoC Icicle kit is a low-cost development platform that >> >>> enables the evaluation of the five-core Linux capable RISC-V >> >>> microprocessor subsystem. It includes >> >>> >> >>> SiFive E51 Monitor core (1 x RV64IMAC) >> >>> SiFive U54 Application cores (4 x RV64GC) >> >>> >> >>> More info is available at the link below: >> >>> https://www.microsemi.com/existing-parts/parts/152514 >> >>> >> >>> There were few changes I had to make in the rtems source code to make it >> >>> work, as mentioned below. >> >>> >> >>> 1. In the startup code the bsp_fdt_copy copies the device tree blob from >> >>> the address from #a1 register to the .rodata section. This is followed >> >>> by a memset operation for the bss section. >> >>> The problem was the call to a memset function was clearing the device >> >>> tree blob copied in the bsp_fdt_copy() operation. >> >>> To fix this I performed the memset first and then bsp_fdt_copy operation. >> >> >> >> >> >> This sounds like a bug from what you describe. Patch will show. >> >>> >> >>> >> >>> 2. The riscv_console_probe() will try to read the console_node from the >> >>> device tree. The original code provided for ns16550 UART was not able to >> >>> read the console node from the device tree correctly. >> >>> To fix this I used the sifive code to read the console node. The sifive >> >>> code was limited to only sifive-uart. >> >> >> >> >> >> We'll have to see. This may require more smarts in the console driver to >> >> support both. Or a BSP variant. >> >> >> >> >> >>> >> >>> 3. RTEMS uses -O2 as default optimization settings. With these settings, >> >>> we were facing a trap while trying to perform the open call on the >> >>> console device after mounting the file system. >> >>> To fix this I changed the optimization to -O0 and it resolved the issue. >> >>> I need to debug this more to find the exact cause. >> >> >> >> >> >> This is unfortunate. Could be anything from a driver missing a volatile >> >> to bad code generation. You can try at different optimisation levels and >> >> that narrows down things a bit. You are right. This requires debugging. >> >> >> >>> >> >>> 4. The default clock driver simply assumes that the code is running on >> >>> hart0. This was breaking the ticker example testing. >> >>> To fix this I updated the clock driver to read the hart ID and then >> >>> configure the >> >>> mtimecmp register accordingly. >> >> >> >> >> >> This sounds like an improvement. >> >> >> >>> >> >>> Let me know if these changes are valid. >> >> >> >> >> >> Patches welcome and then we shall see. >> >>> >> >>> >> >>> >> >>> Regards, >> >>> Somesh >> >>> >> >>> >> >>> _______________________________________________ >> >>> devel mailing list >> >>> devel@rtems.org >> >>> http://lists.rtems.org/mailman/listinfo/devel >> > >> > _______________________________________________ >> > devel mailing list >> > devel@rtems.org >> > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel