On 08/01/2020 00:24, Joel Sherrill wrote: > > > On Tue, Jan 7, 2020 at 12:42 PM Christian Mauderer <l...@c-mauderer.de > <mailto:l...@c-mauderer.de>> wrote: > > Hello Alan, > > I pushed the patches mentioned further below. So the raspberry BSP > should now work again for all raspberry 1 and 2 on the official master > branch. Note that the > > kernel_address=0x200000 > > is still necessary. > > > This is awesome work. What about the Pi 3 and and Pi 4? I think Niteesh > has the Pi 3 working so that leaves the 4. Any idea? > > --joel >
As far as I followed his work Niteesh had some minimal version working with the mini UART and thought about trying the existing NS16550 (after I suggested that one). But I haven't seen a patch yet. So currently even if some basic stuff runs there will be no console. Beneath that: Pi 3 and Pi 4 are both 64Bit cores. I don't have any experience with aarch64. Therefore I'm not sure whether we can safely use them with 32Bit fallback. It seems to work to some extend but according to https://en.wikipedia.org/wiki/ARM_architecture#AArch64 "ARMv8-A allows 32-bit applications to be executed in a 64-bit OS, and a 32-bit OS to be under the control of a 64-bit hypervisor." So I'm not sure in which situations we will run into problems. Maybe on interrupts? Best regards Christian > > Best regards > > Christian > > On 06/01/2020 11:10, Christian Mauderer wrote: > > Hello Alan, > > > > thanks for your very detailed tests. > > > > On 05/01/2020 23:42, Alan Cudmore wrote: > >> I finally found the time to try the latest RTEMS head on my > collection > >> of Raspberry Pi models. > >> The last time I tried to run RTEMS on a Pi, I had trouble with the > >> current version of the Raspberry Pi Firmware, so I had to go back > to a > >> specific tag on the Rasberry Pi firmware repository to get RTEMS to > >> work. This time, the head of the firmware repository seems to > work (at > >> least on the single core models) > >> > >> To keep things simple, I'm just going address the single core models > >> here, I can follow up after I finish testing the Raspberry Pi 2. > >> > >> Test Setup: > >> I used the git.rtems.org <http://git.rtems.org> > <http://git.rtems.org> rtems master from Jan 03 > >> 2020. > >> I used the Raspberry Pi firmware from the same date. > >> The firmware can be found here: > >> https://github.com/raspberrypi/firmware/tree/master/boot > >> To boot an RTEMS image, you can copy all files from the above "boot" > >> directory on a DOS formatted SD/MicroSD card along with the RTEMS > image > >> (more about that in a minute). > >> On the SD card, I deleted the "dtb" files, as well as the overlay > >> directory. I dont think these are necessary to boot an RTEMS image. > >> > >> I built a new arm-rtems5 toolchain using the RSB tool (head from the > >> same date) and built the "raspberrypi" BSP. After a quick test > failed, I > >> reviewed the latest mailing list posts, and ended up applying the > linker > >> script patch: > >> https://lists.rtems.org/pipermail/devel/2019-December/056551.html > > > > I don't think that we will apply that patch. It moves code in an area > > that is protected against access to catch null pointer accesses later. > > This increases the image size. > > > > The alternative is to add the line > > > > kernel_address=0x200000 > > > > to the config.txt of the raspberry SD image. Niteesh is in the process > > of documenting this: > > > > https://lists.rtems.org/pipermail/devel/2020-January/056796.html > > > >> > >> After applying this patch and rebuilding, a few RTEMS samples > seemed to > >> work fine on the Raspberry Pi Zero Models 1.2 and 1.3 (no > wireless). I > >> ran hello.exe, ticker.exe, and unlimited.exe > >> > >> The above images must be prepared using the following command: > >> $ arm-rtems5-objcopy -Obinary ticker.exe kernel.img > >> Then I copied kernel.img over the linux kernel on the SD card. > >> > >> For all of these tests, I found this serial to USB board to be very > >> useful in my tests: > >> https://www.adafruit.com/product/3589 > >> It can power the pi through the USB cable and has a power switch > as well. > >> > >> After the Pi Zero models, I tried my remaining older single core > models: > >> 1. Raspberry Pi Model B ( Original single core model with 512MB > of RAM > >> and 26 pin GPIO header) > >> 2. Raspberry Pi Model B+ (Updated Single core model with 512MB of RAM > >> and 40 pin GPIO header) > >> 3. Raspberry Pi Model A+ (Smaller form factor single core model with > >> 256MB of RAM and 40 pin GPIO header) > >> (Note this model has been updated to now have 512MB of RAM) > >> > >> All three of the above models had the same exception that has been > >> discussed on the mailing list: > >> https://lists.rtems.org/pipermail/devel/2019-December/056556.html > > > > I addressed that issue in the following patch set: > > > > https://lists.rtems.org/pipermail/devel/2019-December/056623.html > > https://lists.rtems.org/pipermail/devel/2019-December/056622.html > > https://lists.rtems.org/pipermail/devel/2019-December/056624.html > > > > I'll push it in the next days together with patches regarding the > > console from Niteesh. I just gave it some more time for review during > > the public holidays. > > > > Basically it addresses the issues that you describe below. > > > >> > >> All of these single core models are supposed to be compatible, and > >> should run the same RTEMS image given the same memory configuration. > >> Since the previous message was discussing the bspgetworkarea.c > changes, > >> I made a couple of changes: > >> - Reverted to the generic bspgetworkarea.c file, and changed the > memory > >> size from 256MB to 128MB ( same as the 4.11 release ). > >> With these changes, the same RTEMS images worked on all single > core models: > >> - RPi Zero 1.2 and 1.3 > >> - RPi Model B > >> - RPi Model B+ > >> - RPi Model A+ > >> > >> Findings: > >> 1. The code that identifies the models in bspstart.c does not account > >> for the older models: > >> > https://git.rtems.org/rtems/tree/bsps/arm/raspberrypi/start/bspstart.c > >> The RPi Model B, B+, and A+ that I have all use the older > revision which > >> is not in the table in bspstart.c. I think we can fix this by > adding the > >> older revision codes in the table, but I think this code is > mostly cosmetic. > >> > > https://www.raspberrypi.org/documentation/hardware/raspberrypi/revision-codes/README.md > >> > >> 2. I think the code that determines the memory size in > bspgetworkarea.c > >> is not correct: > >> > > https://git.rtems.org/rtems/tree/bsps/arm/raspberrypi/start/bspgetworkarea.c > >> a) The mask for the memory size field should probably be 0x7 > rather > >> than 0xf. The 0xF picks up the "new revision" field of the word. > >> > >> > > https://git.rtems.org/rtems/tree/bsps/arm/raspberrypi/start/bspgetworkarea.c#n70 > >> b) I'm not sure if the rpi_mem array is correct. The values > are used > >> in address size calculations, but the values seem to be in Kilobytes, > >> not Megabytes. Maybe I'm not catching a shift that is done on > these values. > >> > >> > > https://git.rtems.org/rtems/tree/bsps/arm/raspberrypi/start/bspgetworkarea.c#n73 > >> c) I'm not sure that the numbers all add up. Line 80 computes the > >> ram_end value by adding the Work Area start to the total size of the > >> RAM. I think this will overrun the end of the RAM. > >> > >> > > https://git.rtems.org/rtems/tree/bsps/arm/raspberrypi/start/bspgetworkarea.c#n80 > >> d) I would like to look at the relationship between the ram_end > >> calculation and the ram_size given in the autoconfigure setting ( > >> currently at 256MiB). Are the MMU settings done based on the hard > coded > >> linker script value that may conflict with the sizes set here? > >> e) the code may not work for the older models that do not > have the > >> updated revision fields. > >> > >> If the intent is to cover the different raspberry pi memory sizes > >> automatically, then we can probably rework this code to work for > all models. > >> We may be able to use the following rationale to simplify the > memory logic: > >> 1. All of the current production single core raspberry Pi models have > >> 512MB of RAM. Do we need to worry about out of production 256MiB > models? > >> I have an older A+ model with 256MiB, but I am unlikely to use it for > >> anything serious. I would rather use a Raspberry Pi Zero instead. > Given > >> that, we could assume that the "raspberrypi" BSP has 512 MiB of RAM. > >> This would only require the calculation of how much memory is > devoted to > >> the GPU. > >> > >> 2. All of the Raspberry Pi 2 models have 1 Gigabyte of RAM, so the > >> raspberrypi2 BSP can safely assume 1 gigabyte. > >> > >> We could also use the specific revision code register (old and > new) to > >> set the RAM size, since that should be accurate. > >> > >> Anyway, that is what I have so far on the single core models. I would > >> like to take a look at the Pi 2 next. Note that the Pi 2 is a > Quad A7, > >> that is considered "legacy" but it is still in production. The latest > >> Raspberry Pi 2 has been switched to a Quad core A53, so it is now > very > >> similar to the Raspberry Pi 3 without the Wireless/Bluetooth > module. I > >> dont have a Raspberry Pi 2 with an A53. > >> > >> There are quite a few newer models as well, so it's probably worth a > >> discussion of what we really want to support. My personal > preferences: > >> - Of the single core models, I would be happy with Raspberry Pi Zero > >> (and possibly Zero W) support. These are are very inexpensive and > >> available worldwide. It may be the least expensive non-simulator > RTEMS > >> target board available. > >> - I would like one multi-core model as an inexpensive SMP target > to work > >> with and learn RTEMS SMP details. Again, my focus is on low cost and > >> wide availability. > > > > In the ideal case: All models. > > In the real case: It's unfunded. Therefore we take the ones that > someone > > is ready to add and maintain during free time. > > > > Beneath that I think it's more a question which models should be in > > which BSP variant. > > > > The `raspberry` variant uses the following CPU_CFLAGS: > > > > CPU_CFLAGS = -mcpu=arm1176jzf-s > > > > The `raspberry2` variant uses the following CPU_CFLAGS: > > > > CPU_CFLAGS = -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard > > -mtune=cortex-a7 > > > > Maybe we will need a variant in the future for an aarch64 support when > > the core is supported in RTEMS somewhen. Currently I hope that we can > > just fall back to 32 Bit mode for the newer models. > > > > So the variants will end up with only a different core. It should be > > possible to handle other differences by parsing the FDT. Niteesh > already > > started that with the console. > > > >> > >> Thanks for you attention, and happy new year! > > > > A happy new year to you too. > > > > Best regards > > > > Christian > > > >> Alan > >> > >> > >> > >> _______________________________________________ > >> devel mailing list > >> devel@rtems.org <mailto:devel@rtems.org> > >> http://lists.rtems.org/mailman/listinfo/devel > >> > > _______________________________________________ > > devel mailing list > > devel@rtems.org <mailto:devel@rtems.org> > > http://lists.rtems.org/mailman/listinfo/devel > > > _______________________________________________ > devel mailing list > devel@rtems.org <mailto:devel@rtems.org> > http://lists.rtems.org/mailman/listinfo/devel > > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel > -- -------------------------------------------- embedded brains GmbH Herr Christian Mauderer Dornierstr. 4 D-82178 Puchheim Germany email: christian.maude...@embedded-brains.de Phone: +49-89-18 94 741 - 18 Fax: +49-89-18 94 741 - 08 PGP: Public key available on request. Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG. _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel