From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9612CA00C3; Fri, 13 May 2022 13:48:08 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8583D410F2; Fri, 13 May 2022 13:48:08 +0200 (CEST) Received: from mail-lf1-f41.google.com (mail-lf1-f41.google.com [209.85.167.41]) by mails.dpdk.org (Postfix) with ESMTP id D879D40DDE for ; Fri, 13 May 2022 13:48:06 +0200 (CEST) Received: by mail-lf1-f41.google.com with SMTP id j4so14048953lfh.8 for ; Fri, 13 May 2022 04:48:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=iCu3PZEJ01O/TxgS8bF/f/mO7upGOSOvI8nAb1HZhFQ=; b=M/yonphjk9sY2sDQV1pzgBCuWEsJgDBAQkRi2h7F4P2K8Nh/SYASPKAhHCFFFh1Q1M /+p6kkVKYVITI/hOI1FbGY4ODtpNH1vcCv9J0uzQdbUIb96o1SYjgUzOi1MdtMyhOgR4 jNAWs8qvTxlgyH/00Wfs+Ho2eHj3ecAjAvcOijKXmi9zsx9lERsyTlHRTMnfjW2GAtYD zlU1/FN+05tRlyOoD/3T+m+koLCbx30mi4Jx3qfH711I0js1ubyXXeB6ajKaORMADqLR i/q4VR3gvG5AQSWbtVLHWUfLGUihE+6Hvad+ge2MYdN8dNqBRKDCl+0AQKM4LIdxGI0M q7kQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=iCu3PZEJ01O/TxgS8bF/f/mO7upGOSOvI8nAb1HZhFQ=; b=Bj5cIHADeGnusRu1bjWJUuIG1c6Cg0cBBMaBfXAszAWYJ8IpHMwppi8GaZXNGaP6/m UjEGJPbd3+wmZWG84rWi7ojNlTnHVrE8fHiyMR9V9ypKx8qVl1EXAz3NEfbyJkixE4EU pb6sfjy8tyuwrWNtfxH89EJSmQMsF76iP+7qQPTWRmb7V9c6yIiudFTi98LOZrOelmBS mn6ws/YM1AAMSaHiR5CZw5vu52GDS/RReellO5ClT+HSEUHCqnncxbLZUpO9sRIEOvAF Hgn26quzu207YXFjuO2hI2XbUg2kzMqYxJJiCIxU7yy57BYP4ZdjFSaOZTV+grTC0Ibb e8XA== X-Gm-Message-State: AOAM530+ACvqGYRNOGaGr2pCErGHcZrL6rkQe7ZL8SS2DXzX/L8WUjjz bje3UdoPVKpcoVEAj2kFsXpvZK2XaOtMVci9D4hOrQ== X-Google-Smtp-Source: ABdhPJyHxuTnQOltRDRZAbwG7THWgSFo/GPGIkHkA7zVTZ87LMXGtHetKAaVAf3T9u4ryXFKHgbSRXv/tzTAGLnkzDQ= X-Received: by 2002:a05:6512:3402:b0:474:41fe:69e9 with SMTP id i2-20020a056512340200b0047441fe69e9mr3243621lfr.514.1652442486172; Fri, 13 May 2022 04:48:06 -0700 (PDT) MIME-Version: 1.0 References: <20220510150759.525434-1-kda@semihalf.com> <20220510154849.530872-1-kda@semihalf.com> <20220510154849.530872-2-kda@semihalf.com> <7bc97240-10c7-c437-9f31-b97dc2b418c6@canonical.com> In-Reply-To: From: =?UTF-8?Q?Stanis=C5=82aw_Kardach?= Date: Fri, 13 May 2022 13:47:30 +0200 Message-ID: Subject: Re: [PATCH v3 1/8] eal: add initial support for RISC-V architecture To: Heinrich Schuchardt Cc: Thomas Monjalon , Michal Mazurek , dev , Frank Zhao , Sam Grove , Marcin Wojtas , upstream@semihalf.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On Fri, May 13, 2022 at 12:52 PM Heinrich Schuchardt wrote: > > On 5/13/22 10:42, Stanis=C5=82aw Kardach wrote: > > On Fri, May 13, 2022 at 8:50 AM Heinrich Schuchardt > > wrote: > > > >>> +Linux kernel > >>> +~~~~~~~~~~~~ > >>> + > >>> +It is recommended to use Linux kernel built from > >>> +`SiFive Freedom Unleashed 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 misle= ading. > >> > >> 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 >=3D 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? > > The Debian maintainer introduced this change in package > gcc-defaults-ports. The change log does not give a reason. > > > Given that, is there a Ubuntu manual page or tool somewhere specifying > > the correct values to obtain for a given arch? > > The values might depend on the Linux distribution. > > In Ubuntu the .pc files are in > > /usr/lib/riscv64-linux-gnu/pkgconfig > /usr/lib/pkgconfig > /usr/share/pkgconfig OK, I'll describe those for Ubuntu path. > > > > >> > >>> + > >>> + > >>> +GNU toolchain > >>> +------------- > >>> + > >>> + > >>> +Obtain the cross toolchain > >>> +~~~~~~~~~~~~~~~~~~~~~~~~~~ > >>> + > >>> +The build process was tested using: > >>> + > >>> +* Ubuntu toolchain (the ``crossbuild-essential-riscv64`` package). > >>> + > >>> +* Latest `RISC-V GNU toolchain > >>> + `_ on Ubunt= u or Arch > >>> + Linux. > >>> + > >>> +Alternatively the toolchain may be built straight from the source, t= o 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 t= oolchain is > >>> +in the PATH already. > >>> + > >>> +.. code-block:: console > >>> + > >>> + tar -xvf riscv64-glibc-ubuntu-20.04-.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=3D$PATH:/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 > >>> + ninja -C cross-build > >>> + > >>> +For example if the target machine is a generic rv64gc RISC-V, use th= e following > >>> +command:: > >>> + > >>> + meson riscv64-build-gcc --cross-file config/riscv/riscv64_linux_g= cc > >>> + ninja -C riscv64-build-gcc > >>> + > >>> +If riscv-gnu-toolchain is used, binary names should be updated to ma= tch. Update the following lines in the cross-file: > >>> + > >>> +.. code-block:: console > >>> + > >>> + [binaries] > >>> + c =3D 'riscv64-unknown-linux-gnu-gcc' > >>> + cpp =3D 'riscv64-unknown-linux-gnu-g++' > >>> + ar =3D 'riscv64-unknown-linux-gnu-ar' > >>> + strip =3D '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 app= ropriate > >>> +paths to the cross-file: > >>> + > >>> +.. code-block:: console > >>> + > >>> + [properties] > >>> + ... > >>> + c_args =3D ['--sysroot', ''] > >>> + cpp_args =3D c_args > >>> + c_link_args =3D ['--sysroot', ''] > >>> + cpp_link_args =3D 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 so= ld > >> 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 > > https://forums.sifive.com/t/sifive-update-on-hifive-unmatched-boards-in-2= 022/5569?s=3D09 > : > > "we=E2=80=99ve decided to focus on the next generation SiFive HiFive deve= lopment > systems rather than trying to put together another build of the HiFive > Unmatched platform in 2022." I did not know that, thank you. > > > 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. > > Distributions like Ubuntu will only build a single configuration. I understand however there are also platform specific configs for Aarch64 here (Graviton, ThunderX, CnXk to name a few) so it's not that uncommon. Plus distro packages although useful for orchestration environments such as accelerating OpenStack Neutron (or other orchestrated networking packages), there will still be people compiling DPDK locally, be it via company-wide Yocto server to package for specific HW or just integrating DPDK statically in their projects (to not pay the cost of a dynamic lib call). > It is preferable to read vendor_id and arch_id via an SBI call at runtime > to switch code paths. Right, but SBI call can only be made from S-mode (so kernel), right? Issuing "ecall" from U-mode (userspace) will transfer control to kernel. AFAIK it is KVM that emulates or forwards SBI calls further but that's in qemu scope. I was trying to figure out how to get this data from Linux to decide at build time but it's not in the /proc/cpuinfo (it only prints DTS's "compatible" for the CPU). Deciding at runtime is costly because you either need a functor call or self-modifying code (similar to how Linux handles Compare-And-Swap on Aarch64). > > Isn't the saving gained by removing the fence irrelevant compared to the > duration of an SBI call? Yes, that is most likely but I was not able to measure it, because the access to the time source on Unmatched is emulated, so it's hard to reason. Other thing that this config triggers (or more precisely the vendor_id and arch_id) is "-mtune" value which I believe still contains some compiler tweaks for the platform. Given all that I can remove the current infrastructure in config/riscv/meson.build and the related sifive config but I'd prefer not to. I'm pretty sure it'll come in handy when a new RISC-V platform comes in (and serve as a reference for new developers). There is a warning in meson.build noting the lack of ability to detect the current platform. When someone implements it in Linux, that'll be a single place to change. Even then the configs won't become useless due to cross-compiling for a specific target. Best Regards, Stanislaw Kardach