circuitpython/ports/litex
Jeff Epler 726dcdb60a Add some NORETURN attributes
I have a function where it should be impossible to reach the end, so I put in a safe-mode reset at the bottom:
```
int find_unused_slot(void) {
    // precondition: you already verified that a slot was available
    for (int i=0; i<NUM_SLOTS; i++) {
        if( slot_free(i)) {
            return i;
        }
    }
    safe_mode_reset(MICROPY_FATAL_ERROR);
}
```
However, the compiler still gave a diagnostic, because safe_mode_reset was not declared NORETURN.

So I started by teaching the compiler that reset_into_safe_mode never returned.  This leads at least one level deeper due to reset_cpu needing to be a NORETURN function.  Each port is a little different in this area.  I also marked reset_to_bootloader as NORETURN.
Additional notes:

 * stm32's reset_to_bootloader was not implemented, but now does a bare reset.  Most stm32s are not fitted with uf2 bootloaders anyway.
 * ditto cxd56
 * esp32s2 did not implement reset_cpu at all.  I used esp_restart().  (not tested)
 * litex did not implement reset_cpu at all.  I used reboot_ctrl_write.  But notably this is what reset_to_bootloader already did, so one or the other must be incorrect (not tested).  reboot_ctrl_write cannot be declared NORETURN, as it returns unless the special value 0xac is written), so a new unreachable forever-loop is added.
 * cxd56's reset is via a boardctl() call which can't generically be declared NORETURN, so a new unreacahble "for(;;)" forever-loop is added.
 * In several places, NVIC_SystemReset is redeclared with NORETURN applied.  This is accepted just fine by gcc.  I chose this as preferable to editing the multiple copies of CMSIS headers where it is normally declared.
 * the stub safe_mode reset simply aborts.  This is used in mpy-cross.
2020-09-28 18:55:56 -05:00
..
boards supervisor.mk: Compute USB_DEVICES; remove from boards and ports 2020-06-23 12:59:01 -05:00
common-hal Finish common-hal pin API 2020-07-24 12:29:18 -04:00
hw Fix up end of file and trailing whitespace. 2020-06-03 10:56:35 +01:00
supervisor Add some NORETURN attributes 2020-09-28 18:55:56 -05:00
.gitignore Update LiteX APIs for new tick 2020-03-31 17:52:23 -07:00
Makefile Changes to optimization option 2020-07-23 19:27:02 -05:00
README.rst Update the supported ports 2020-03-31 18:27:55 -07:00
background.c supervisor: factor supervisor_background_tasks from sundry ports 2020-07-15 11:49:44 -05:00
background.h supervisor: factor supervisor_background_tasks from sundry ports 2020-07-15 11:49:44 -05:00
crt0-vexriscv.S ports: litex: add port and fomu board 2020-03-31 09:40:38 +08:00
fatfs_port.c Add license to some obvious files. 2020-07-06 19:16:25 +01:00
irq.h Fix up end of file and trailing whitespace. 2020-06-03 10:56:35 +01:00
mpconfigport.h litex: enable binascii and ujson modules 2020-04-16 10:02:08 +08:00
mpconfigport.mk sdcardio: implement new library for SD card I/O 2020-06-26 11:50:23 -05:00
mphalport.c supervisor: factor out, Handle USB via background callback 2020-07-15 11:49:44 -05:00
mphalport.h ports: litex: add port and fomu board 2020-03-31 09:40:38 +08:00
qstrdefsport.h ports: litex: add port and fomu board 2020-03-31 09:40:38 +08:00

README.rst

LiteX (FPGA)
============

`LiteX <https://github.com/enjoy-digital/litex>`_ is a Python-based System on a Chip (SoC) designer
for open source supported Field Programmable Gate Array (FPGA) chips. This means that the CPU
core(s) and peripherals are not defined by the physical chip. Instead, they are loaded as separate
"gateware". Once this gateware is loaded, CircuitPython can be loaded on top of it to work as
expected.

Installation
-------------

You'll need ``dfu-util`` to install CircuitPython on the Fomu.

Make sure the foboot bootloader is updated. Instructions are here: https://github.com/im-tomu/fomu-workshop/blob/master/docs/bootloader.rst

Once you've updated the bootloader, you should know how to use ``dfu-util``. It's pretty easy!

To install CircuitPython do:

.. code-block:: shell

  dfu-util -D adafruit-circuitpython-fomu-en_US-<version>.dfu

It will install and then restart. CIRCUITPY should appear as it usually does and work the same.