DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Stanisław Kardach" <kda@semihalf.com>
To: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Cc: Thomas Monjalon <thomas@monjalon.net>,
	Michal Mazurek <maz@semihalf.com>, dev <dev@dpdk.org>,
	 Frank Zhao <Frank.Zhao@starfivetech.com>,
	Sam Grove <sam.grove@sifive.com>,
	 Marcin Wojtas <mw@semihalf.com>,
	upstream@semihalf.com
Subject: Re: [PATCH v3 1/8] eal: add initial support for RISC-V architecture
Date: Fri, 13 May 2022 10:42:24 +0200	[thread overview]
Message-ID: <CALVGJWL9uME1VzPKCCWa1sk0YVbKJfhitojwbL0tUtkqytE=6Q@mail.gmail.com> (raw)
In-Reply-To: <7bc97240-10c7-c437-9f31-b97dc2b418c6@canonical.com>

On Fri, May 13, 2022 at 8:50 AM Heinrich Schuchardt
<heinrich.schuchardt@canonical.com> wrote:
<snip>
> > +Linux kernel
> > +~~~~~~~~~~~~
> > +
> > +It is recommended to use Linux kernel built from
> > +`SiFive Freedom Unleashed SDK <https://github.com/sifive/freedom-u-sdk>`_.
>
> How would the Unleashed SDK help on a later board or a board from a
> different vendor?
This SDK is for both Unleashed and Unmatched. The naming is a bit misleading.
>
> Why wouldn't an upstream kernel work?
At the point of writing it was missing patches related to PCI resource
mapping exposure to userspace. Right now it's there.
>
> I suggest to eliminate this misleading section.
I'll re-test with the latest upstream kernel and rephrase that this
should work with Linux kernel >= x.y.z.
>
> > +
> > +
> > +Meson prerequisites
> > +~~~~~~~~~~~~~~~~~~~
> > +
> > +Meson depends on pkgconfig to find the dependencies.
> > +The package ``pkg-config-riscv64-linux-gnu`` is required for RISC-V.
> > +To install it in Ubuntu::
> > +
> > +   sudo apt install pkg-config-riscv64-linux-gnu
>
> This package does not exist in the current Ubuntu LTS (22.04, Jammy).
>
> Setting environment variables PKG_CONFIG_LIBDIR, PKG_CONFIG_PATH,
> PKG_CONFIG_SYSROOT_DIR properly should do the job with the normal
> pkg-config.
Do you happen to know why was this package removed?
Given that, is there a Ubuntu manual page or tool somewhere specifying
the correct values to obtain for a given arch?

>
> > +
> > +
> > +GNU toolchain
> > +-------------
> > +
> > +
> > +Obtain the cross toolchain
> > +~~~~~~~~~~~~~~~~~~~~~~~~~~
> > +
> > +The build process was tested using:
> > +
> > +* Ubuntu toolchain (the ``crossbuild-essential-riscv64`` package).
> > +
> > +* Latest `RISC-V GNU toolchain
> > +  <https://github.com/riscv/riscv-gnu-toolchain/releases>`_ on Ubuntu or Arch
> > +  Linux.
> > +
> > +Alternatively the toolchain may be built straight from the source, to do that
> > +follow the instructions on the riscv-gnu-toolchain github page.
> > +
> > +
> > +Unzip and add into the PATH
> > +~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > +
> > +This step is only required for the riscv-gnu-toolchain. The Ubuntu toolchain is
> > +in the PATH already.
> > +
> > +.. code-block:: console
> > +
> > +   tar -xvf riscv64-glibc-ubuntu-20.04-<version>.tar.gz
>
> You can install the glibc package with apt-get after adding the
> architecture with sudo dpkg --add-architecture riscv64. See
> https://wiki.debian.org/CrossCompiling.
>
This guide is supposed to target also Arch where this toolchain should
work properly. That's why in previous section I'm mentioning
crossbuild-essential-riscv64 and RISC-V GNU toolchain from github
separately.
> > +   export PATH=$PATH:<cross_install_dir>/riscv/bin
> > +
> > +
> > +Cross Compiling DPDK with GNU toolchain using Meson
> > +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > +
> > +To cross-compile DPDK for a desired target machine use the following command::
> > +
> > +   meson cross-build --cross-file <target_machine_configuration>
> > +   ninja -C cross-build
> > +
> > +For example if the target machine is a generic rv64gc RISC-V, use the following
> > +command::
> > +
> > +   meson riscv64-build-gcc --cross-file config/riscv/riscv64_linux_gcc
> > +   ninja -C riscv64-build-gcc
> > +
> > +If riscv-gnu-toolchain is used, binary names should be updated to match. Update the following lines in the cross-file:
> > +
> > +.. code-block:: console
> > +
> > +   [binaries]
> > +   c = 'riscv64-unknown-linux-gnu-gcc'
> > +   cpp = 'riscv64-unknown-linux-gnu-g++'
> > +   ar = 'riscv64-unknown-linux-gnu-ar'
> > +   strip = 'riscv64-unknown-linux-gnu-strip'
> > +   ...
> > +
> > +Some toolchains (such as freedom-u-sdk one) require also setting ``--sysroot``,
> > +otherwise include paths might not be resolved. To do so, add the appropriate
> > +paths to the cross-file:
> > +
> > +.. code-block:: console
> > +
> > +   [properties]
> > +   ...
> > +   c_args = ['--sysroot', '<path/to/toolchain/sysroot>']
> > +   cpp_args = c_args
> > +   c_link_args = ['--sysroot', '<path/to/toolchain/sysroot>']
> > +   cpp_link_args = c_link_args
> > +   ...
> > +
> > +
> > +Supported cross-compilation targets
> > +-----------------------------------
> > +
> > +Currently the following targets are supported:
> > +
> > +* Generic rv64gc ISA: ``config/riscv/riscv64_linux_gcc``
> > +
> > +* SiFive U740 SoC: ``config/riscv/riscv64_sifive_u740_linux_gcc``
>
> Why do we need a special config for the Unmatched board that is not sold
> anymore? Doesn't the Unmatched board work with the genenric config?
I wasn't aware that they did discontinue it. As far as I can see it's
due to supply chain issues, maybe that means it'll get back? Generic
config works just fine for the Unmatched. However config for Unmatched
enables certain optimizations that are valid there. I.e. when reading
RIME or CYCLE registers in a precise way, normally a fence should be
inserted before reading it. However on Unmatched read to both counters
is emulated through a call to firmware (SBI) in userspace, eliminating
the need for the fence.
>
> I assume a single configuriation file for the generic target is enough.
>
> Best regards
>
> Heinrich
>

  reply	other threads:[~2022-05-13  8:43 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-05 17:29 [PATCH 00/11] Introduce " Stanislaw Kardach
2022-05-05 17:29 ` [PATCH 01/11] lpm: add a scalar version of lookupx4 function Stanislaw Kardach
2022-05-05 17:29 ` [PATCH 02/11] examples/l3fwd: fix scalar LPM compilation Stanislaw Kardach
2022-05-05 17:39   ` Stephen Hemminger
2022-05-05 17:49     ` Stanisław Kardach
2022-05-05 18:09       ` Stephen Hemminger
2022-05-05 17:29 ` [PATCH 03/11] eal: add initial support for RISC-V architecture Stanislaw Kardach
2022-05-05 17:29 ` [PATCH 04/11] net/ixgbe: enable vector stubs for RISC-V Stanislaw Kardach
2022-05-05 17:29 ` [PATCH 05/11] net/memif: set memfd syscall ID on RISC-V Stanislaw Kardach
2022-05-05 17:29 ` [PATCH 06/11] net/tap: set BPF syscall ID for RISC-V Stanislaw Kardach
2022-05-05 17:29 ` [PATCH 07/11] examples/l3fwd: enable RISC-V operation Stanislaw Kardach
2022-05-05 17:30 ` [PATCH 08/11] test/cpuflags: add test for RISC-V cpu flag Stanislaw Kardach
2022-05-05 17:30 ` [PATCH 09/11] test/ring: disable problematic tests for RISC-V Stanislaw Kardach
2022-05-05 17:35   ` Stephen Hemminger
2022-05-05 17:43     ` Stanisław Kardach
2022-05-05 18:06       ` Stephen Hemminger
2022-05-10 23:28   ` Honnappa Nagarahalli
2022-05-11 10:07     ` Stanisław Kardach
2022-05-05 17:30 ` [PATCH 10/11] devtools: add RISC-V to test-meson-builds.sh Stanislaw Kardach
2022-05-05 17:30 ` [PATCH 11/11] test/hash: report non HTM numbers for single r/w Stanislaw Kardach
2022-05-06  9:13 ` [PATCH 00/11] Introduce support for RISC-V architecture David Marchand
2022-05-09 12:24   ` Stanisław Kardach
2022-05-09 12:30     ` Thomas Monjalon
2022-05-11  8:09       ` Morten Brørup
2022-05-11 10:28         ` Stanisław Kardach
2022-05-11 11:06           ` Thomas Monjalon
2022-05-09 14:30     ` David Marchand
2022-05-10 11:21       ` Stanisław Kardach
2022-05-10 12:31         ` Thomas Monjalon
2022-05-10 14:00           ` Stanisław Kardach
2022-05-10 14:23             ` Thomas Monjalon
2022-05-10 15:07 ` [PATCH v2 0/8] " Stanislaw Kardach
2022-05-10 15:07   ` [PATCH v2 1/8] eal: add initial " Stanislaw Kardach
2022-05-10 15:07   ` [PATCH v2 2/8] net/ixgbe: enable vector stubs for RISC-V Stanislaw Kardach
2022-05-10 15:07   ` [PATCH v2 3/8] net/memif: set memfd syscall ID on RISC-V Stanislaw Kardach
2022-05-10 15:07   ` [PATCH v2 4/8] net/tap: set BPF syscall ID for RISC-V Stanislaw Kardach
2022-05-10 15:07   ` [PATCH v2 5/8] examples/l3fwd: enable RISC-V operation Stanislaw Kardach
2022-05-10 15:07   ` [PATCH v2 6/8] test/cpuflags: add test for RISC-V cpu flag Stanislaw Kardach
2022-05-10 15:07   ` [PATCH v2 7/8] devtools: add RISC-V to test-meson-builds.sh Stanislaw Kardach
2022-05-10 15:35     ` Stanisław Kardach
2022-05-10 15:07   ` [PATCH v2 8/8] ci: add RISCV64 cross compilation job Stanislaw Kardach
2022-05-10 15:48   ` [PATCH v3 0/8] Introduce support for RISC-V architecture Stanislaw Kardach
2022-05-10 15:48     ` [PATCH v3 1/8] eal: add initial " Stanislaw Kardach
2022-05-13  6:50       ` Heinrich Schuchardt
2022-05-13  8:42         ` Stanisław Kardach [this message]
2022-05-13 10:51           ` Heinrich Schuchardt
2022-05-13 11:47             ` Stanisław Kardach
2022-05-13 15:37         ` Stephen Hemminger
2022-05-16  8:00           ` Stanisław Kardach
2022-05-10 15:48     ` [PATCH v3 2/8] net/ixgbe: enable vector stubs for RISC-V Stanislaw Kardach
2022-05-10 15:48     ` [PATCH v3 3/8] net/memif: set memfd syscall ID on RISC-V Stanislaw Kardach
2022-05-10 15:48     ` [PATCH v3 4/8] net/tap: set BPF syscall ID for RISC-V Stanislaw Kardach
2022-05-10 15:48     ` [PATCH v3 5/8] examples/l3fwd: enable RISC-V operation Stanislaw Kardach
2022-05-10 15:48     ` [PATCH v3 6/8] test/cpuflags: add test for RISC-V cpu flag Stanislaw Kardach
2022-05-10 15:48     ` [PATCH v3 7/8] devtools: add RISC-V to test-meson-builds.sh Stanislaw Kardach
2022-05-10 15:48     ` [PATCH v3 8/8] ci: add RISCV64 cross compilation job Stanislaw Kardach
2022-05-12 15:47       ` Aaron Conole
2022-05-12 16:07         ` Stanisław Kardach
2022-05-13 14:33           ` Aaron Conole
2022-05-12  8:04 ` [PATCH 00/11] Introduce support for RISC-V architecture Heinrich Schuchardt
2022-05-12  8:35   ` Stanisław Kardach
2022-05-12  9:46     ` Heinrich Schuchardt
2022-05-12 13:56       ` Stanisław Kardach
2022-05-12 21:06         ` Heinrich Schuchardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CALVGJWL9uME1VzPKCCWa1sk0YVbKJfhitojwbL0tUtkqytE=6Q@mail.gmail.com' \
    --to=kda@semihalf.com \
    --cc=Frank.Zhao@starfivetech.com \
    --cc=dev@dpdk.org \
    --cc=heinrich.schuchardt@canonical.com \
    --cc=maz@semihalf.com \
    --cc=mw@semihalf.com \
    --cc=sam.grove@sifive.com \
    --cc=thomas@monjalon.net \
    --cc=upstream@semihalf.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).