* New RISCV board (cartesi-machine) @ 2021-09-15 20:30 Marcelo Politzer 2021-09-15 21:17 ` Ahmad Fatoum 0 siblings, 1 reply; 7+ messages in thread From: Marcelo Politzer @ 2021-09-15 20:30 UTC (permalink / raw) To: barebox Hi, I'm new to barebox I'm currently porting barebox to a riscv board (cartesi-machine). I got it mostly working: - new serial: serial_sbi.c and - ext4 filesystem with mtdram 1) What I am still trying to figure out is how to customize `env` correctly. I got it to build and appear based on the docs [1], [2], however the only way I found around [3] was to replace `bin/init` with this[4] layout. Is there a recommended way to go about this? 2) I also would like clarification on the upstreaming process, is it PR based, patches on this list? best, Marcelo [1] Makefile: ``` bbenv-$(CONFIG_BOARD_CARTESI) += defaultenv-cartesi ``` [2] arch/riscv/boards/cartesi: ``` defaultenv-cartesi ├── boot │ └── cartesi ├── init │ ├── automount │ └── ps1 └── nv ├── allow_color ├── autoboot_timeout └── user ``` [3] ``` Hit m for menu or any to stop autoboot: 0 Booting entry 'net' ``` [4] ``` defaultenv-cartesi ├── bin │ └── init └── boot └── cartesi ``` _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: New RISCV board (cartesi-machine) 2021-09-15 20:30 New RISCV board (cartesi-machine) Marcelo Politzer @ 2021-09-15 21:17 ` Ahmad Fatoum 2021-09-15 21:43 ` Marcelo Politzer 0 siblings, 1 reply; 7+ messages in thread From: Ahmad Fatoum @ 2021-09-15 21:17 UTC (permalink / raw) To: Marcelo Politzer, barebox Hello Marcelo, On 15.09.21 22:30, Marcelo Politzer wrote: > Hi, I'm new to barebox > > I'm currently porting barebox to a riscv board (cartesi-machine). Oh, looks interesting! What SoC does it use? > I got it mostly working: > - new serial: serial_sbi.c and Keep in mind that newer SBI versions deprecate sbi_console_getchar() and sbi_console_putchar() with no replacement. But if your board's firmware provides it, there is no issue with adding a driver for it. > - ext4 filesystem with mtdram > > 1) What I am still trying to figure out is how to customize `env` correctly. > I got it to build and appear based on the docs [1], [2], Those look ok. I assume you have defaultenv_append_directory(defaultenv_cartesi); in your board code? > however the only way I found around [3] was to replace `bin/init` with > this[4] layout. After drivers probe, barebox invokes init to source init scripts and do the countdown and such. This is written in C, but you can override it with an /env/bin/init shell script, which is what you did here. I would not recommend this. Drop /env/bin/init and use the same C init nearly everyone else does. You can still customize it via the /env/init/ scripts > Is there a recommended way to go about this? You need to set boot.default, e.g. echo 'cartesi net' > defaultenv-cartesi/nv/boot.default Which would try cartesi first and then net if the first one failed. > 2) I also would like clarification on the upstreaming process, is it > PR based, patches on this list? Patches to the mailing list are the usual way of contributing. Cheers, Ahmad > > best, > Marcelo > > > [1] Makefile: > ``` > bbenv-$(CONFIG_BOARD_CARTESI) += defaultenv-cartesi > ``` > > [2] arch/riscv/boards/cartesi: > ``` > defaultenv-cartesi > ├── boot > │ └── cartesi > ├── init > │ ├── automount > │ └── ps1 > └── nv > ├── allow_color > ├── autoboot_timeout > └── user > ``` > > [3] > ``` > Hit m for menu or any to stop autoboot: 0 > Booting entry 'net' > ``` > > [4] > ``` > defaultenv-cartesi > ├── bin > │ └── init > └── boot > └── cartesi > ``` > > _______________________________________________ > barebox mailing list > barebox@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/barebox > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: New RISCV board (cartesi-machine) 2021-09-15 21:17 ` Ahmad Fatoum @ 2021-09-15 21:43 ` Marcelo Politzer 2021-09-15 21:58 ` Ahmad Fatoum 0 siblings, 1 reply; 7+ messages in thread From: Marcelo Politzer @ 2021-09-15 21:43 UTC (permalink / raw) To: Ahmad Fatoum; +Cc: barebox On Wed, Sep 15, 2021 at 6:17 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote: > > Hello Marcelo, > > On 15.09.21 22:30, Marcelo Politzer wrote: > > Hi, I'm new to barebox > > > > I'm currently porting barebox to a riscv board (cartesi-machine). > > Oh, looks interesting! What SoC does it use? It uses SOC_VIRT. It is an emulator to be precise, we use it for verifiable computations. It is pretty easy to try it out (there is a docker image for it): https://www.cartesi.io/en/docs/machine/host/overview/ > > > I got it mostly working: > > - new serial: serial_sbi.c and > > Keep in mind that newer SBI versions deprecate > sbi_console_getchar() and sbi_console_putchar() with no replacement. > > But if your board's firmware provides it, there is no issue with > adding a driver for it. That is what the emulator implements for now. I have to admit that a virtio system would be cool, maybe in the future. > > > - ext4 filesystem with mtdram > > > > 1) What I am still trying to figure out is how to customize `env` correctly. > > I got it to build and appear based on the docs [1], [2], > > Those look ok. I assume you have > > defaultenv_append_directory(defaultenv_cartesi); in your board code? yes > > > however the only way I found around [3] was to replace `bin/init` with > > this[4] layout. > > After drivers probe, barebox invokes init to source init scripts and > do the countdown and such. This is written in C, but you can override > it with an /env/bin/init shell script, which is what you did here. > > I would not recommend this. Drop /env/bin/init and use the same C init > nearly everyone else does. You can still customize it via the > /env/init/ scripts > > > Is there a recommended way to go about this? > > You need to set boot.default, e.g. > > echo 'cartesi net' > defaultenv-cartesi/nv/boot.default > > Which would try cartesi first and then net if the first one failed. That worked great. Looks a lot cleaner now. > > > 2) I also would like clarification on the upstreaming process, is it > > PR based, patches on this list? > > Patches to the mailing list are the usual way of contributing. OK, I'll clean this up and send it as two patches: - serial_sbi - cartesi (board) > > Cheers, > Ahmad > > > > > best, > > Marcelo > > > > > > [1] Makefile: > > ``` > > bbenv-$(CONFIG_BOARD_CARTESI) += defaultenv-cartesi > > ``` > > > > [2] arch/riscv/boards/cartesi: > > ``` > > defaultenv-cartesi > > ├── boot > > │ └── cartesi > > ├── init > > │ ├── automount > > │ └── ps1 > > └── nv > > ├── allow_color > > ├── autoboot_timeout > > └── user > > ``` > > > > [3] > > ``` > > Hit m for menu or any to stop autoboot: 0 > > Booting entry 'net' > > ``` > > > > [4] > > ``` > > defaultenv-cartesi > > ├── bin > > │ └── init > > └── boot > > └── cartesi > > ``` > > > > _______________________________________________ > > barebox mailing list > > barebox@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/barebox > > > > > -- > Pengutronix e.K. | | > Steuerwalder Str. 21 | http://www.pengutronix.de/ | > 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | > Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: New RISCV board (cartesi-machine) 2021-09-15 21:43 ` Marcelo Politzer @ 2021-09-15 21:58 ` Ahmad Fatoum 2021-09-16 18:01 ` Marcelo Politzer 0 siblings, 1 reply; 7+ messages in thread From: Ahmad Fatoum @ 2021-09-15 21:58 UTC (permalink / raw) To: Marcelo Politzer; +Cc: barebox Hello Marcelo, On 15.09.21 23:43, Marcelo Politzer wrote: > On Wed, Sep 15, 2021 at 6:17 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote: >> >> Hello Marcelo, >> >> On 15.09.21 22:30, Marcelo Politzer wrote: >>> Hi, I'm new to barebox >>> >>> I'm currently porting barebox to a riscv board (cartesi-machine). >> >> Oh, looks interesting! What SoC does it use? > > It uses SOC_VIRT. It is an emulator to be precise, we use it for > verifiable computations. > It is pretty easy to try it out (there is a docker image for it): > https://www.cartesi.io/en/docs/machine/host/overview/ Thanks, will check it out. >>> I got it mostly working: >>> - new serial: serial_sbi.c and >> >> Keep in mind that newer SBI versions deprecate >> sbi_console_getchar() and sbi_console_putchar() with no replacement. >> >> But if your board's firmware provides it, there is no issue with >> adding a driver for it. > > That is what the emulator implements for now. > I have to admit that a virtio system would be cool, maybe in the future. Like this? :-) https://www.barebox.org/jsbarebox/ >>> - ext4 filesystem with mtdram >>> >>> 1) What I am still trying to figure out is how to customize `env` correctly. >>> I got it to build and appear based on the docs [1], [2], >> >> Those look ok. I assume you have >> >> defaultenv_append_directory(defaultenv_cartesi); in your board code? > > yes > >> >>> however the only way I found around [3] was to replace `bin/init` with >>> this[4] layout. >> >> After drivers probe, barebox invokes init to source init scripts and >> do the countdown and such. This is written in C, but you can override >> it with an /env/bin/init shell script, which is what you did here. >> >> I would not recommend this. Drop /env/bin/init and use the same C init >> nearly everyone else does. You can still customize it via the >> /env/init/ scripts >> >>> Is there a recommended way to go about this? >> >> You need to set boot.default, e.g. >> >> echo 'cartesi net' > defaultenv-cartesi/nv/boot.default >> >> Which would try cartesi first and then net if the first one failed. > > That worked great. > Looks a lot cleaner now. > >> >>> 2) I also would like clarification on the upstreaming process, is it >>> PR based, patches on this list? >> >> Patches to the mailing list are the usual way of contributing. > > OK, I'll clean this up and send it as two patches: > - serial_sbi > - cartesi (board) Sounds good. Cheers, Ahmad > >> >> Cheers, >> Ahmad >> >>> >>> best, >>> Marcelo >>> >>> >>> [1] Makefile: >>> ``` >>> bbenv-$(CONFIG_BOARD_CARTESI) += defaultenv-cartesi >>> ``` >>> >>> [2] arch/riscv/boards/cartesi: >>> ``` >>> defaultenv-cartesi >>> ├── boot >>> │ └── cartesi >>> ├── init >>> │ ├── automount >>> │ └── ps1 >>> └── nv >>> ├── allow_color >>> ├── autoboot_timeout >>> └── user >>> ``` >>> >>> [3] >>> ``` >>> Hit m for menu or any to stop autoboot: 0 >>> Booting entry 'net' >>> ``` >>> >>> [4] >>> ``` >>> defaultenv-cartesi >>> ├── bin >>> │ └── init >>> └── boot >>> └── cartesi >>> ``` >>> >>> _______________________________________________ >>> barebox mailing list >>> barebox@lists.infradead.org >>> http://lists.infradead.org/mailman/listinfo/barebox >>> >> >> >> -- >> Pengutronix e.K. | | >> Steuerwalder Str. 21 | http://www.pengutronix.de/ | >> 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | >> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: New RISCV board (cartesi-machine) 2021-09-15 21:58 ` Ahmad Fatoum @ 2021-09-16 18:01 ` Marcelo Politzer 2021-09-16 21:21 ` Ahmad Fatoum 0 siblings, 1 reply; 7+ messages in thread From: Marcelo Politzer @ 2021-09-16 18:01 UTC (permalink / raw) To: Ahmad Fatoum; +Cc: barebox [-- Attachment #1: Type: text/plain, Size: 4538 bytes --] On Wed, Sep 15, 2021 at 6:58 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote: > > Hello Marcelo, > > On 15.09.21 23:43, Marcelo Politzer wrote: > > On Wed, Sep 15, 2021 at 6:17 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote: > >> > >> Hello Marcelo, > >> > >> On 15.09.21 22:30, Marcelo Politzer wrote: > >>> Hi, I'm new to barebox > >>> > >>> I'm currently porting barebox to a riscv board (cartesi-machine). > >> > >> Oh, looks interesting! What SoC does it use? > > > > It uses SOC_VIRT. It is an emulator to be precise, we use it for > > verifiable computations. > > It is pretty easy to try it out (there is a docker image for it): > > https://www.cartesi.io/en/docs/machine/host/overview/ > > Thanks, will check it out. > > >>> I got it mostly working: > >>> - new serial: serial_sbi.c and > >> > >> Keep in mind that newer SBI versions deprecate > >> sbi_console_getchar() and sbi_console_putchar() with no replacement. > >> > >> But if your board's firmware provides it, there is no issue with > >> adding a driver for it. > > > > That is what the emulator implements for now. > > I have to admit that a virtio system would be cool, maybe in the future. > > Like this? :-) > > https://www.barebox.org/jsbarebox/ That is cool! > > >>> - ext4 filesystem with mtdram > >>> > >>> 1) What I am still trying to figure out is how to customize `env` correctly. > >>> I got it to build and appear based on the docs [1], [2], > >> > >> Those look ok. I assume you have > >> > >> defaultenv_append_directory(defaultenv_cartesi); in your board code? > > > > yes > > > >> > >>> however the only way I found around [3] was to replace `bin/init` with > >>> this[4] layout. > >> > >> After drivers probe, barebox invokes init to source init scripts and > >> do the countdown and such. This is written in C, but you can override > >> it with an /env/bin/init shell script, which is what you did here. > >> > >> I would not recommend this. Drop /env/bin/init and use the same C init > >> nearly everyone else does. You can still customize it via the > >> /env/init/ scripts > >> > >>> Is there a recommended way to go about this? > >> > >> You need to set boot.default, e.g. > >> > >> echo 'cartesi net' > defaultenv-cartesi/nv/boot.default > >> > >> Which would try cartesi first and then net if the first one failed. > > > > That worked great. > > Looks a lot cleaner now. > > > >> > >>> 2) I also would like clarification on the upstreaming process, is it > >>> PR based, patches on this list? > >> > >> Patches to the mailing list are the usual way of contributing. > > > > OK, I'll clean this up and send it as two patches: > > - serial_sbi > > - cartesi (board) > > Sounds good. Patches attached, please review at your convenience. > > Cheers, > Ahmad > > > > >> > >> Cheers, > >> Ahmad > >> > >>> > >>> best, > >>> Marcelo > >>> > >>> > >>> [1] Makefile: > >>> ``` > >>> bbenv-$(CONFIG_BOARD_CARTESI) += defaultenv-cartesi > >>> ``` > >>> > >>> [2] arch/riscv/boards/cartesi: > >>> ``` > >>> defaultenv-cartesi > >>> ├── boot > >>> │ └── cartesi > >>> ├── init > >>> │ ├── automount > >>> │ └── ps1 > >>> └── nv > >>> ├── allow_color > >>> ├── autoboot_timeout > >>> └── user > >>> ``` > >>> > >>> [3] > >>> ``` > >>> Hit m for menu or any to stop autoboot: 0 > >>> Booting entry 'net' > >>> ``` > >>> > >>> [4] > >>> ``` > >>> defaultenv-cartesi > >>> ├── bin > >>> │ └── init > >>> └── boot > >>> └── cartesi > >>> ``` > >>> > >>> _______________________________________________ > >>> barebox mailing list > >>> barebox@lists.infradead.org > >>> http://lists.infradead.org/mailman/listinfo/barebox > >>> > >> > >> > >> -- > >> Pengutronix e.K. | | > >> Steuerwalder Str. 21 | http://www.pengutronix.de/ | > >> 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | > >> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | > > > > > -- > Pengutronix e.K. | | > Steuerwalder Str. 21 | http://www.pengutronix.de/ | > 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | > Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | [-- Attachment #2: 0002-RISC-V-cartesi-Initial-port.patch --] [-- Type: text/x-patch, Size: 5107 bytes --] From f4a3cf20582dec08fd2b02b62ce864fcae7bb038 Mon Sep 17 00:00:00 2001 From: Marcelo Politzer <marcelo.politzer@cartesi.io> Date: Thu, 16 Sep 2021 14:33:17 -0300 Subject: [PATCH 2/2] RISC-V: cartesi: Initial port --- arch/riscv/Kconfig.socs | 7 +++++ arch/riscv/boards/Makefile | 1 + arch/riscv/boards/cartesi/Makefile | 2 ++ arch/riscv/boards/cartesi/board.c | 28 +++++++++++++++++++ .../cartesi/defaultenv-cartesi/boot/cartesi | 3 ++ .../cartesi/defaultenv-cartesi/init/automount | 6 ++++ .../defaultenv-cartesi/nv/autoboot_timeout | 1 + .../defaultenv-cartesi/nv/boot.default | 1 + arch/riscv/configs/cartesi_defconfig | 15 ++++++++++ 9 files changed, 64 insertions(+) create mode 100644 arch/riscv/boards/cartesi/Makefile create mode 100644 arch/riscv/boards/cartesi/board.c create mode 100755 arch/riscv/boards/cartesi/defaultenv-cartesi/boot/cartesi create mode 100644 arch/riscv/boards/cartesi/defaultenv-cartesi/init/automount create mode 100644 arch/riscv/boards/cartesi/defaultenv-cartesi/nv/autoboot_timeout create mode 100644 arch/riscv/boards/cartesi/defaultenv-cartesi/nv/boot.default create mode 100644 arch/riscv/configs/cartesi_defconfig diff --git a/arch/riscv/Kconfig.socs b/arch/riscv/Kconfig.socs index 221ea133d..12e8e04fc 100644 --- a/arch/riscv/Kconfig.socs +++ b/arch/riscv/Kconfig.socs @@ -22,6 +22,13 @@ config SOC_VIRT Generates an image tht can be be booted by QEMU. The image is called barebox-dt-2nd.img +config BOARD_CARTESI + bool "Cartesi Machine" + select SOC_VIRT + help + Generates an image tht can be be booted by a cartesi-machine. The + image is called barebox-dt-2nd.img + config CPU_SIFIVE bool select HAS_CACHE diff --git a/arch/riscv/boards/Makefile b/arch/riscv/boards/Makefile index cb28a25d8..cee3d2e27 100644 --- a/arch/riscv/boards/Makefile +++ b/arch/riscv/boards/Makefile @@ -2,3 +2,4 @@ obj-$(CONFIG_BOARD_ERIZO_GENERIC) += erizo/ obj-$(CONFIG_BOARD_HIFIVE) += hifive/ obj-$(CONFIG_BOARD_BEAGLEV) += beaglev/ +obj-$(CONFIG_BOARD_CARTESI) += cartesi/ diff --git a/arch/riscv/boards/cartesi/Makefile b/arch/riscv/boards/cartesi/Makefile new file mode 100644 index 000000000..0e3453178 --- /dev/null +++ b/arch/riscv/boards/cartesi/Makefile @@ -0,0 +1,2 @@ +obj-$(CONFIG_BOARD_CARTESI) += board.o +bbenv-$(CONFIG_BOARD_CARTESI) += defaultenv-cartesi diff --git a/arch/riscv/boards/cartesi/board.c b/arch/riscv/boards/cartesi/board.c new file mode 100644 index 000000000..a1a33c8d8 --- /dev/null +++ b/arch/riscv/boards/cartesi/board.c @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2021 Marcelo Politzer, Cartesi + */ + +#include <common.h> +#include <driver.h> +#include <bbu.h> +#include <envfs.h> + +static int cartesi_probe(struct device_d *dev) +{ + barebox_set_hostname("cartesi"); + defaultenv_append_directory(defaultenv_cartesi); + return 0; +} + +static const struct of_device_id cartesi_of_match[] = { + { .compatible = "ucbbar,riscvemu-bar_dev" }, + { /* sentinel */ }, +}; + +static struct driver_d cartesi_board_driver = { + .name = "board-cartesi", + .probe = cartesi_probe, + .of_compatible = cartesi_of_match, +}; +device_platform_driver(cartesi_board_driver); diff --git a/arch/riscv/boards/cartesi/defaultenv-cartesi/boot/cartesi b/arch/riscv/boards/cartesi/defaultenv-cartesi/boot/cartesi new file mode 100755 index 000000000..b175ff556 --- /dev/null +++ b/arch/riscv/boards/cartesi/defaultenv-cartesi/boot/cartesi @@ -0,0 +1,3 @@ +#!/bin/sh + +global.bootm.image=/mnt/rootfs/boot/Image diff --git a/arch/riscv/boards/cartesi/defaultenv-cartesi/init/automount b/arch/riscv/boards/cartesi/defaultenv-cartesi/init/automount new file mode 100644 index 000000000..362ec68ed --- /dev/null +++ b/arch/riscv/boards/cartesi/defaultenv-cartesi/init/automount @@ -0,0 +1,6 @@ +#!/bin/sh + +# mtdram0 +mkdir -p /mnt/rootfs +automount -d /mnt/rootfs 'mount -t ext4 /dev/mtdram0 /mnt/rootfs' + diff --git a/arch/riscv/boards/cartesi/defaultenv-cartesi/nv/autoboot_timeout b/arch/riscv/boards/cartesi/defaultenv-cartesi/nv/autoboot_timeout new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/arch/riscv/boards/cartesi/defaultenv-cartesi/nv/autoboot_timeout @@ -0,0 +1 @@ +0 diff --git a/arch/riscv/boards/cartesi/defaultenv-cartesi/nv/boot.default b/arch/riscv/boards/cartesi/defaultenv-cartesi/nv/boot.default new file mode 100644 index 000000000..98698769f --- /dev/null +++ b/arch/riscv/boards/cartesi/defaultenv-cartesi/nv/boot.default @@ -0,0 +1 @@ +cartesi net diff --git a/arch/riscv/configs/cartesi_defconfig b/arch/riscv/configs/cartesi_defconfig new file mode 100644 index 000000000..79a7a9b42 --- /dev/null +++ b/arch/riscv/configs/cartesi_defconfig @@ -0,0 +1,15 @@ +# minimal +CONFIG_ARCH_RV64I=y +CONFIG_BOARD_CARTESI=y +CONFIG_BOOTM_ELF=y +CONFIG_CMD_AUTOMOUNT=y +CONFIG_CMD_BOOT=y +CONFIG_FS_EXT4=y +CONFIG_MTD=y +CONFIG_MTD_MTDRAM=y +CONFIG_SERIAL_SBI=y +CONFIG_SOC_VIRT=y + +# convenience +CONFIG_CMD_READLINE=y +CONFIG_HUSH_FANCY_PROMPT=y -- 2.32.0 [-- Attachment #3: 0001-serial-implement-SBI-UART-support.patch --] [-- Type: text/x-patch, Size: 3961 bytes --] From 5953062ce13c4b07190d455d2aae228cd3756d42 Mon Sep 17 00:00:00 2001 From: Marcelo Politzer <marcelo.politzer@cartesi.io> Date: Thu, 16 Sep 2021 14:29:51 -0300 Subject: [PATCH 1/2] serial: implement SBI UART support --- arch/riscv/lib/sbi.c | 11 ++++++ drivers/serial/Kconfig | 7 ++++ drivers/serial/Makefile | 1 + drivers/serial/serial_sbi.c | 77 +++++++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 drivers/serial/serial_sbi.c diff --git a/arch/riscv/lib/sbi.c b/arch/riscv/lib/sbi.c index 45a04fb82..209069c98 100644 --- a/arch/riscv/lib/sbi.c +++ b/arch/riscv/lib/sbi.c @@ -64,3 +64,14 @@ static int sbi_init(void) } core_initcall(sbi_init); + + +void sbi_console_putchar(int ch) +{ + sbi_ecall(SBI_EXT_0_1_CONSOLE_PUTCHAR, 0, ch, 0, 0, 0, 0, 0); +} + +int sbi_console_getchar(void) +{ + return sbi_ecall(SBI_EXT_0_1_CONSOLE_GETCHAR, 0, 0, 0, 0, 0, 0, 0).error; +} diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index b9750d177..002871445 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -173,4 +173,11 @@ config SERIAL_SIFIVE contains a SiFive UART IP block. This type of UART is present on SiFive FU540 SoCs, among others. +config SERIAL_SBI + tristate "RISCV SBI UART support" + depends on OFDEVICE + help + Select this option if you are building barebox for a RISCV with SBI + version 0.1.0 (legacy mode) implemented + endmenu diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile index 5120b1737..b1de436ed 100644 --- a/drivers/serial/Makefile +++ b/drivers/serial/Makefile @@ -24,3 +24,4 @@ obj-$(CONFIG_DRIVER_SERIAL_DIGIC) += serial_digic.o obj-$(CONFIG_DRIVER_SERIAL_LPUART) += serial_lpuart.o obj-$(CONFIG_VIRTIO_CONSOLE) += virtio_console.o obj-$(CONFIG_SERIAL_SIFIVE) += serial_sifive.o +obj-$(CONFIG_SERIAL_SBI) += serial_sbi.o diff --git a/drivers/serial/serial_sbi.c b/drivers/serial/serial_sbi.c new file mode 100644 index 000000000..a7e57885f --- /dev/null +++ b/drivers/serial/serial_sbi.c @@ -0,0 +1,77 @@ +#define DEBUG +#define DBG() printf("%s:%s:%d\n", __FILE__, __func__, __LINE__) +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2018 Anup Patel <anup@brainfault.org> + */ + +#include <common.h> +#include <driver.h> +#include <malloc.h> +#include <io.h> +#include <of.h> +#include <asm/sbi.h> + +struct sbi_serial_priv { + struct console_device cdev; + uint8_t b[16], head, tail; +}; + +#define to_priv(cdev) container_of(cdev, struct sbi_serial_priv, cdev) + +static int sbi_serial_getc(struct console_device *cdev) +{ + struct sbi_serial_priv *priv = cdev->dev->priv; + if (priv->head == priv->tail) + return 0; + return priv->b[priv->head++ & 0xf]; +} + +static void sbi_serial_putc(struct console_device *cdev, const char ch) +{ + sbi_console_putchar(ch); +} + +static int sbi_serial_tstc(struct console_device *cdev) +{ + struct sbi_serial_priv *priv = cdev->dev->priv; + int c = sbi_console_getchar(); + + if (c != -1) + priv->b[priv->tail++ & 0xf] = c; + return priv->head != priv->tail; +} +static void sbi_serial_flush(struct console_device *cdev) +{ +} +static int sbi_serial_setbrg(struct console_device *cdev, int _) +{ + return 0; +} + +static int sbi_serial_probe(struct device_d *dev) +{ + struct sbi_serial_priv *priv; + + dev->priv = priv = xzalloc(sizeof(*priv)); + priv->cdev.dev = dev; + priv->cdev.putc = sbi_serial_putc; + priv->cdev.getc = sbi_serial_getc; + priv->cdev.tstc = sbi_serial_tstc; + priv->cdev.flush = sbi_serial_flush; + priv->cdev.setbrg = sbi_serial_setbrg; + + return console_register(&priv->cdev); +} + +static __maybe_unused struct of_device_id sbi_serial_dt_ids[] = { + { .compatible = "ucb,htif0" }, + { /* sentinel */ } +}; + +static struct driver_d serial_sbi_driver = { + .name = "serial_sbi", + .probe = sbi_serial_probe, + .of_compatible = sbi_serial_dt_ids, +}; +console_platform_driver(serial_sbi_driver); -- 2.32.0 [-- Attachment #4: Type: text/plain, Size: 149 bytes --] _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: New RISCV board (cartesi-machine) 2021-09-16 18:01 ` Marcelo Politzer @ 2021-09-16 21:21 ` Ahmad Fatoum 2021-09-20 19:41 ` Marcelo Politzer 0 siblings, 1 reply; 7+ messages in thread From: Ahmad Fatoum @ 2021-09-16 21:21 UTC (permalink / raw) To: Marcelo Politzer; +Cc: barebox Hi Marcelo, On 16.09.21 20:01, Marcelo Politzer wrote: >> Like this? :-) >> >> https://www.barebox.org/jsbarebox/ > > That is cool! :> >>> OK, I'll clean this up and send it as two patches: >>> - serial_sbi >>> - cartesi (board) >> >> Sounds good. > > Patches attached, please review at your convenience. Please resend without attachment if possible (e.g. with git send-email). This makes it easier to review. Some comments: - Signed-off-by is required, just as with Linux. See https://developercertificate.org/ - A short commit message would be nice - BOARD_CARTESI should depend on SOC_VIRT for uniformity with other boards - Can you change device tree compatible? Generic boards should remain generic and not contain vendor-specific stuff. - Please add your new Kconfig options to virt64_defconfig. That way you can build and use the same image for all Virt-based boards (You can still use a different config in your BSP of course) Serial driver: - remove DEBUG defines - depends on RISCV (otherwise there is no <asm/sbi.h>) - You don't need to implement flush and setbrg - ucb,htif0 is an unrelated device, but there is no device tree node, you can bind to. You can register a device in sbi_init and match against that. See riscv-timer for an example - I don't understand the point of the ring buffer. A command would be nice (e.g. This is needed, because SBI lacks a FIFO or such) - to_priv unused Cheers, Ahmad -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: New RISCV board (cartesi-machine) 2021-09-16 21:21 ` Ahmad Fatoum @ 2021-09-20 19:41 ` Marcelo Politzer 0 siblings, 0 replies; 7+ messages in thread From: Marcelo Politzer @ 2021-09-20 19:41 UTC (permalink / raw) To: Ahmad Fatoum; +Cc: barebox Hi Ahmad, I Just thought I should let you know that I won't be able to act on your feedback for a while since something else came along with a higher priority. I'll send the patches with corrections at a later date. best, Marcelo On Thu, Sep 16, 2021 at 6:21 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote: > > Hi Marcelo, > > On 16.09.21 20:01, Marcelo Politzer wrote: > >> Like this? :-) > >> > >> https://www.barebox.org/jsbarebox/ > > > > That is cool! > > :> > > >>> OK, I'll clean this up and send it as two patches: > >>> - serial_sbi > >>> - cartesi (board) > >> > >> Sounds good. > > > > Patches attached, please review at your convenience. > > Please resend without attachment if possible (e.g. with git send-email). > This makes it easier to review. > > Some comments: > > - Signed-off-by is required, just as with Linux. See https://developercertificate.org/ > - A short commit message would be nice > - BOARD_CARTESI should depend on SOC_VIRT for uniformity with other boards > - Can you change device tree compatible? Generic boards should remain generic > and not contain vendor-specific stuff. > - Please add your new Kconfig options to virt64_defconfig. That way you can build > and use the same image for all Virt-based boards (You can still use a different > config in your BSP of course) > > Serial driver: > > - remove DEBUG defines > - depends on RISCV (otherwise there is no <asm/sbi.h>) > - You don't need to implement flush and setbrg > - ucb,htif0 is an unrelated device, but there is no device tree > node, you can bind to. You can register a device in sbi_init > and match against that. See riscv-timer for an example > - I don't understand the point of the ring buffer. A command would > be nice (e.g. This is needed, because SBI lacks a FIFO or such) > - to_priv unused > > Cheers, > Ahmad > > -- > Pengutronix e.K. | | > Steuerwalder Str. 21 | http://www.pengutronix.de/ | > 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | > Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-09-20 19:43 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-09-15 20:30 New RISCV board (cartesi-machine) Marcelo Politzer 2021-09-15 21:17 ` Ahmad Fatoum 2021-09-15 21:43 ` Marcelo Politzer 2021-09-15 21:58 ` Ahmad Fatoum 2021-09-16 18:01 ` Marcelo Politzer 2021-09-16 21:21 ` Ahmad Fatoum 2021-09-20 19:41 ` Marcelo Politzer
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox