GNU bug report logs - #43852
[PATCH] gnu: Add riscv-openocd.

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix-patches; Reported by: Malte Frank Gerdes <malte.f.gerdes@HIDDEN>; Keywords: patch; Done: Ludovic Courtès <ludo@HIDDEN>; Maintainer for guix-patches is guix-patches@HIDDEN.

Message received at 43852-done <at> debbugs.gnu.org:


Received: (at 43852-done) by debbugs.gnu.org; 22 Oct 2020 14:49:46 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Oct 22 10:49:46 2020
Received: from localhost ([127.0.0.1]:53417 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kVbuT-0008Gg-VR
	for submit <at> debbugs.gnu.org; Thu, 22 Oct 2020 10:49:46 -0400
Received: from eggs.gnu.org ([209.51.188.92]:54952)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1kVbuT-0008GT-0Y
 for 43852-done <at> debbugs.gnu.org; Thu, 22 Oct 2020 10:49:45 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:44435)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1kVbuN-0006Vf-5f; Thu, 22 Oct 2020 10:49:39 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=51352 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1kVbuK-0000V2-9d; Thu, 22 Oct 2020 10:49:37 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Malte Frank Gerdes <malte.f.gerdes@HIDDEN>
Subject: Re: [bug#43852] [PATCH v2] gnu: Add riscv-openocd.
References: <86lfgh6bzy.fsf@HIDDEN> <20201009190257.GA2052@jurong>
 <86blha2n79.fsf_-_@HIDDEN>
Date: Thu, 22 Oct 2020 16:49:34 +0200
In-Reply-To: <86blha2n79.fsf_-_@HIDDEN> (Malte Frank Gerdes's message of
 "Sat, 10 Oct 2020 16:02:50 +0200")
Message-ID: <87a6wetiwx.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 43852-done
Cc: Ricardo Wurmus <rekado@HIDDEN>,
 Danny Milosavljevic <dannym@HIDDEN>, Andreas Enge <andreas@HIDDEN>,
 43852-done <at> debbugs.gnu.org, Mathieu Othacehe <othacehe@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hello,

Malte Frank Gerdes <malte.f.gerdes@HIDDEN> skribis:

>>From 5be71d32e9694fadea411a267e36333697510bb1 Mon Sep 17 00:00:00 2001
> From: Malte Frank Gerdes <malte.f.gerdes@HIDDEN>
> Date: Sat, 10 Oct 2020 15:24:46 +0200
> Subject: [PATCH 1/2] gnu: libjaylink: Update to 0.2.0
>
> * gnu/packages/embedded.scm (libjaylink): Update to 0.2.0
> [origin]: Substitute upstream repository location.

[...]

>>From de5299f976f54ef431e856ca15b045408495491b Mon Sep 17 00:00:00 2001
> From: Malte Frank Gerdes <malte.f.gerdes@HIDDEN>
> Date: Sat, 10 Oct 2020 15:31:14 +0200
> Subject: [PATCH 2/2] gnu: openocd: Update to
>  9a877a83a1c8b1f105cdc0de46c5cbc4d9e8799e.
>
> * gnu/packages/embedded.scm (openocd): Update to 9a877a83a1c8b1f105cdc0de=
46c5cbc4d9e8799e.
> [version]: Substitute release with current master.
> [source]: Remove openocd-nrf52.patch
> [arguments]: Replace bootstrap build phase.
>
> * gnu/local.mk: Remove openocd-nrf52.patch.
> * gnu/packages/patches/openocd-nrf52.patch: Remove file.

I believe this addresses the concerns Andreas raised, so I=E2=80=99ve appli=
ed
them now.

(I=E2=80=99ve Cc=E2=80=99d Ricardo, Danny, and Mathieu, who also work in th=
is area, just
so they notice.)

Thanks!

Ludo=E2=80=99.




Notification sent to Malte Frank Gerdes <malte.f.gerdes@HIDDEN>:
bug acknowledged by developer. Full text available.
Reply sent to Ludovic Courtès <ludo@HIDDEN>:
You have taken responsibility. Full text available.

Message received at 43852 <at> debbugs.gnu.org:


Received: (at 43852) by debbugs.gnu.org; 10 Oct 2020 14:03:13 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Oct 10 10:03:13 2020
Received: from localhost ([127.0.0.1]:38134 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kRFSh-0007Bo-6J
	for submit <at> debbugs.gnu.org; Sat, 10 Oct 2020 10:03:13 -0400
Received: from mail-ej1-f42.google.com ([209.85.218.42]:37144)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <malte.f.gerdes@HIDDEN>) id 1kRFSc-0007BH-Mz
 for 43852 <at> debbugs.gnu.org; Sat, 10 Oct 2020 10:03:02 -0400
Received: by mail-ej1-f42.google.com with SMTP id e22so17137763ejr.4
 for <43852 <at> debbugs.gnu.org>; Sat, 10 Oct 2020 07:02:58 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:cc:subject:references:date:in-reply-to:message-id
 :user-agent:mime-version;
 bh=BUjXOkOf4LF5riKDrUVUo9rwTcIXWjpJ5NcOv8/6Wjs=;
 b=T1qZoxMKBkHUjVRZQ49DLLVHqlbm3O0jerms/X03KsyPPYOya8FuCOw0kaT8XIIoCX
 o2VWzH0/cjyHaojRDRBBwTqCBKDCsJ+Kx5cA/003WRa/TpJ8+/UV45bLx7yGro4/WUNG
 kqOo1ch7DKWgxBLV5Pkpgk4GmJ9PZTwdxtEMC30I2G+vksaVNFetMztaZHllPUNQiPVt
 tNjucBOQTd57o1N2wVKzec+aPtzzx8g+y5SZEYx+US7aY/Ss5t/ounyBA/2vPcvtlTRN
 IDeAzCd6+4tuhRfKkJUQtRtsDlT20UKoUYVyQf8btk7MNHZvyIcqAvEASN4CcgLKJWyh
 o1bA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to
 :message-id:user-agent:mime-version;
 bh=BUjXOkOf4LF5riKDrUVUo9rwTcIXWjpJ5NcOv8/6Wjs=;
 b=NCpD0CQctCShG06RMu+F4NqeLdhsmM1V6AnlkDCPwZW86A36aMWPI1cFATYFhm1Cqu
 mD5J54+zQboekCtgf0bbMprqto6KiRWmeBBxKFl+RtBooj+lvZiz114GclABGTkZOkh3
 EDIouEDRhSvLkJp3td+rIkKkg0EaXy2aX3XvTtzpyWY+CCN3bHmAk6tGmen2cxU2Ezui
 WL2h2QY61PIyCKd3qKByljS2fySb9S6FFA7V/PocQVKa21oPsI4nM+zQ6H7YoN7btI7H
 xhNnWjqEzN4NGcVpEh26DVTPleZLx1y3rhpFwm/y8Uy7xfFsCyTZ/o6QszpuuveXpkNK
 6jjQ==
X-Gm-Message-State: AOAM5310fpqlQgRoVDpurHhyr3lVGydyIBBfpTzP/HM6Nyl0Oebyi7rb
 /gFzQD3yscJHa7keNXzKg4oNUJb1f1Ej4w==
X-Google-Smtp-Source: ABdhPJxDe3eOjGnCiRcIWok79xzhtsNFVB2F9FCjaDIFf+yvTzGhjVdkuo+8DdZQUn+WGgAGIrDXLQ==
X-Received: by 2002:a17:906:b285:: with SMTP id
 q5mr19814113ejz.470.1602338572563; 
 Sat, 10 Oct 2020 07:02:52 -0700 (PDT)
Received: from Morphium (ip-84-118-73-55.unity-media.net. [84.118.73.55])
 by smtp.gmail.com with ESMTPSA id p16sm8016173ejz.103.2020.10.10.07.02.51
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Sat, 10 Oct 2020 07:02:51 -0700 (PDT)
From: Malte Frank Gerdes <malte.f.gerdes@HIDDEN>
To: Andreas Enge <andreas@HIDDEN>
Subject: [PATCH v2] gnu: Add riscv-openocd.
References: <86lfgh6bzy.fsf@HIDDEN> <20201009190257.GA2052@jurong>
Date: Sat, 10 Oct 2020 16:02:50 +0200
In-Reply-To: <20201009190257.GA2052@jurong> (Andreas Enge's message of "Fri, 9
 Oct 2020 21:02:57 +0200")
Message-ID: <86blha2n79.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: 0.7 (/)
X-Debbugs-Envelope-To: 43852
Cc: 43852 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: text/plain

Andreas Enge <andreas@HIDDEN> writes:

> Hello,
>
> since I am speaking as someone who does not know what these packages are
> about, please take what follows with a grain of salt.

Feedback is always good! especially when it leads to realizing how it
should actually be done.

> On Wed, Oct 07, 2020 at 10:02:09PM +0200, Malte Frank Gerdes wrote:
>> libjaylink ... is
>> ... available as a package. The available package ...
>> ... is too old ...
>> ... should I do something?
>
> Written like this, I would say you could try updating it, independently
> of your target package. Then the question is whether you break anything
> else:
>     guix refresh -l libjaylink
> A single dependent package: openocd@HIDDEN
>
> So there already is an openocd, which maybe should be updated at the same
> time?

The problem was: i didn't realize that libjaylink has a new release and
that it's actually possible to clone it; because the official upstream
repo seems to be locked behind a login. But there is a mirror of it on
repo.or.cz - which i'm now using. 

> And do you really need a new package, or could it be enough to provide
> more inputs or configuration flags to the existing one? Otherwise, how
> about inheriting? The name also is weird, see the section in the manual;
> we normally keep the upstream project name.

I used riscv/riscv-openocd as the upstream repo (github), but it seems
that this isn't necessary. So i'm now just updating the package we
already have. It doesn't have a new release, so i had to use the git
master.


Malte


--=-=-=
Content-Type: text/x-patch
Content-Disposition: inline;
 filename=0001-gnu-libjaylink-Update-to-0.2.0.patch

From 5be71d32e9694fadea411a267e36333697510bb1 Mon Sep 17 00:00:00 2001
From: Malte Frank Gerdes <malte.f.gerdes@HIDDEN>
Date: Sat, 10 Oct 2020 15:24:46 +0200
Subject: [PATCH 1/2] gnu: libjaylink: Update to 0.2.0

* gnu/packages/embedded.scm (libjaylink): Update to 0.2.0
[origin]: Substitute upstream repository location.
---
 gnu/packages/embedded.scm | 52 ++++++++++++++++++---------------------
 1 file changed, 24 insertions(+), 28 deletions(-)

diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index f9f0e04238..1eacb72a45 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -458,35 +458,31 @@ languages are C and C++.")
      ,@(package-arguments gdb)))))
 
 (define-public libjaylink
-  ;; No release tarballs available.
-  (let ((commit "699b7001d34a79c8e7064503dde1bede786fd7f0")
-        (revision "2"))
-    (package
-      (name "libjaylink")
-      (version (string-append "0.1.0-" revision "."
-                              (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://git.zapb.de/libjaylink.git")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "034872d44myycnzn67v5b8ixrgmg8sk32aqalvm5x7108w2byww1"))))
-      (build-system gnu-build-system)
-      (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)))
-      (inputs
-       `(("libusb" ,libusb)))
-      (home-page "https://repo.or.cz/w/libjaylink.git")
-      (synopsis "Library to interface Segger J-Link devices")
-      (description "libjaylink is a shared library written in C to access
+  (package
+    (name "libjaylink")
+    (version "0.2.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://repo.or.cz/libjaylink.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ndyfh51hiqyv2yscpj6qd091w7myxxjid3a6rx8f6k233vy826q"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("libusb" ,libusb)))
+    (home-page "https://repo.or.cz/w/libjaylink.git")
+    (synopsis "Library to interface Segger J-Link devices")
+    (description "libjaylink is a shared library written in C to access
 SEGGER J-Link and compatible devices.")
-      (license license:gpl2+))))
+    (license license:gpl2+)))
 
 (define-public jimtcl
   (package
-- 
2.28.0


--=-=-=
Content-Type: text/x-patch; charset=utf-8
Content-Disposition: inline;
 filename=0002-gnu-openocd-Update-to-9a877a83a1c8b1f105cdc0de46c5cb.patch
Content-Transfer-Encoding: quoted-printable

From de5299f976f54ef431e856ca15b045408495491b Mon Sep 17 00:00:00 2001
From: Malte Frank Gerdes <malte.f.gerdes@HIDDEN>
Date: Sat, 10 Oct 2020 15:31:14 +0200
Subject: [PATCH 2/2] gnu: openocd: Update to
 9a877a83a1c8b1f105cdc0de46c5cbc4d9e8799e.

* gnu/packages/embedded.scm (openocd): Update to 9a877a83a1c8b1f105cdc0de46=
c5cbc4d9e8799e.
[version]: Substitute release with current master.
[source]: Remove openocd-nrf52.patch
[arguments]: Replace bootstrap build phase.

* gnu/local.mk: Remove openocd-nrf52.patch.
* gnu/packages/patches/openocd-nrf52.patch: Remove file.
---
 gnu/local.mk                             |   2 +-
 gnu/packages/embedded.scm                | 124 ++--
 gnu/packages/patches/openocd-nrf52.patch | 827 -----------------------
 3 files changed, 65 insertions(+), 888 deletions(-)
 delete mode 100644 gnu/packages/patches/openocd-nrf52.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index f3b5b17e84..70a563cf99 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -37,6 +37,7 @@
 # Copyright =C2=A9 2020 Brice Waegeneire <brice@HIDDEN>
 # Copyright =C2=A9 2020 Tanguy Le Carrour <tanguy@HIDDEN>
 # Copyright =C2=A9 2020 Martin Becze <mjbecze@HIDDEN>
+# Copyright =C2=A9 2020 Malte Frank Gerdes <mate.f.gerdes@HIDDEN>
 #
 # This file is part of GNU Guix.
 #
@@ -1385,7 +1386,6 @@ dist_patch_DATA =3D						\
   %D%/packages/patches/openfoam-4.1-cleanup.patch			\
   %D%/packages/patches/openjdk-10-idlj-reproducibility.patch	\
   %D%/packages/patches/openmpi-mtl-priorities.patch		\
-  %D%/packages/patches/openocd-nrf52.patch			\
   %D%/packages/patches/openssh-hurd.patch			\
   %D%/packages/patches/openresolv-restartcmd-guix.patch	\
   %D%/packages/patches/openscad-parser-boost-1.72.patch	\
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index 1eacb72a45..cc26b17ea6 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -514,67 +514,71 @@ language.")
     (license license:bsd-2)))
=20
 (define-public openocd
-  (package
-    (name "openocd")
-    (version "0.10.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://sourceforge/openocd/openocd/"
-                                  version "/openocd-" version ".tar.gz"))
-              (sha256
-               (base32
-                "09p57y3c2spqx4vjjlz1ljm1lcd0j9q8g76ywxqgn3yc34wv18zd"))
-              ;; FIXME: Remove after nrf52 patch is merged.
-              (patches
-               (search-patches "openocd-nrf52.patch"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("hidapi" ,hidapi)
-       ("jimtcl" ,jimtcl)
-       ("libftdi" ,libftdi)
-       ("libjaylink" ,libjaylink)
-       ("libusb-compat" ,libusb-compat)))
-    (arguments
-     '(#:configure-flags
-       (append (list "--disable-werror"
-                     "--enable-sysfsgpio"
-                     "--disable-internal-jimtcl"
-                     "--disable-internal-libjaylink")
-               (map (lambda (programmer)
-                      (string-append "--enable-" programmer))
-                    '("amtjtagaccel" "armjtagew" "buspirate" "ftdi"
-                      "gw16012" "jlink" "opendous" "osbdm"
-                      "parport" "aice" "cmsis-dap" "dummy" "jtag_vpi"
-                      "remote-bitbang" "rlink" "stlink" "ti-icdi" "ulink"
-                      "usbprog" "vsllink" "usb-blaster-2" "usb_blaster"
-                      "presto" "openjtag")))
-       #:phases
-       (modify-phases %standard-phases
-         ;; Required because of patched sources.
-         (add-before 'configure 'autoreconf
-           (lambda _ (invoke "autoreconf" "-vfi") #t))
-         (add-after 'autoreconf 'change-udev-group
-           (lambda _
-             (substitute* "contrib/60-openocd.rules"
-               (("plugdev") "dialout"))
-             #t))
-         (add-after 'install 'install-udev-rules
-           (lambda* (#:key outputs #:allow-other-keys)
-             (install-file "contrib/60-openocd.rules"
-                           (string-append
-                            (assoc-ref outputs "out")
-                            "/lib/udev/rules.d/"))
-             #t)))))
-    (home-page "http://openocd.org")
-    (synopsis "On-Chip Debugger")
-    (description "OpenOCD provides on-chip programming and debugging suppo=
rt
+  (let ((commit "9a877a83a1c8b1f105cdc0de46c5cbc4d9e8799e")
+        (revision "0"))
+    (package
+      (name "openocd")
+      (version (string-append "0.10.0-" revision "."
+                              (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.code.sf.net/p/openocd/code")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "1q536cp80v2bcy6xwk08f1r2ljyw13jchx3a1z7d3ni3vqql7rc6"))=
))
+      (build-system gnu-build-system)
+      (native-inputs
+       `(("autoconf" ,autoconf)
+         ("automake" ,automake)
+         ("libtool" ,libtool)
+         ("which" ,base:which)
+         ("pkg-config" ,pkg-config)))
+      (inputs
+       `(("hidapi" ,hidapi)
+         ("jimtcl" ,jimtcl)
+         ("libftdi" ,libftdi)
+         ("libjaylink" ,libjaylink)
+         ("libusb-compat" ,libusb-compat)))
+      (arguments
+       '(#:configure-flags
+         (append (list "--disable-werror"
+                       "--enable-sysfsgpio"
+                       "--disable-internal-jimtcl"
+                       "--disable-internal-libjaylink")
+                 (map (lambda (programmer)
+                        (string-append "--enable-" programmer))
+                      '("amtjtagaccel" "armjtagew" "buspirate" "ftdi"
+                        "gw16012" "jlink" "opendous" "osbdm"
+                        "parport" "aice" "cmsis-dap" "dummy" "jtag_vpi"
+                        "remote-bitbang" "rlink" "stlink" "ti-icdi" "ulink"
+                        "usbprog" "vsllink" "usb-blaster-2" "usb_blaster"
+                        "presto" "openjtag")))
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'bootstrap
+             (lambda _
+               (patch-shebang "bootstrap")
+               (invoke "./bootstrap" "nosubmodule")))
+           (add-after 'autoreconf 'change-udev-group
+             (lambda _
+               (substitute* "contrib/60-openocd.rules"
+                 (("plugdev") "dialout"))
+               #t))
+           (add-after 'install 'install-udev-rules
+             (lambda* (#:key outputs #:allow-other-keys)
+               (install-file "contrib/60-openocd.rules"
+                             (string-append
+                              (assoc-ref outputs "out")
+                              "/lib/udev/rules.d/"))
+               #t)))))
+      (home-page "http://openocd.org")
+      (synopsis "On-Chip Debugger")
+      (description "OpenOCD provides on-chip programming and debugging sup=
port
 with a layered architecture of JTAG interface and TAP support.")
-    (license license:gpl2+)))
+      (license license:gpl2+))))
=20
 ;; The commits for all propeller tools are the stable versions published at
 ;; https://github.com/propellerinc/propgcc in the release_1_0.  According =
to
diff --git a/gnu/packages/patches/openocd-nrf52.patch b/gnu/packages/patche=
s/openocd-nrf52.patch
deleted file mode 100644
index 0ec4348cb4..0000000000
--- a/gnu/packages/patches/openocd-nrf52.patch
+++ /dev/null
@@ -1,827 +0,0 @@
-This patch adds support for nRF52 series devices.  It is patchset 7 from
-<http://openocd.zylin.com/#/c/3511/>, which has been tested, but not
-merged yet in master.
-
-From: Michael Dietz <mjdietzx@HIDDEN>
-Date: Mon, 30 May 2016 12:50:44 +0000 (-0700)
-Subject: Added support for nRF52 Series Devices.
-X-Git-Url: http://openocd.zylin.com/gitweb?p=3Dopenocd.git;a=3Dcommitdiff_=
plain;h=3D9ba15633e221d9d72e320372ba8f49d3f30d4bce
-
-Added support for nRF52 Series Devices.
-
-Both nrf52.c and nrf52.cfg are based off of previous nRF51 files.
-- Some possible race conditions with NVMC have been fixed in nRF52.c
-- Removed nrf51_get_probed_chip_if_halted() as the core does not have to b=
e halted to perform operations where it is called.
-- Only registers that are needed by openOCD are defined, some registers in=
 nRF51 don't exist in nRF52 and are removed.
-- Some all around cleanup has been done.
-- The protection mechanism is completely different on nRF52 and this has n=
ot been implemented yet - just prints a warning and returns for now.
-
-Change-Id: I4dd42c86f33f450709bb981806c2655f04aa6201
-Signed-off-by: Michael Dietz <mjdietzx@HIDDEN>
----
-
-diff --git a/src/flash/nor/Makefile.am b/src/flash/nor/Makefile.am
-index 727e4f2..839667c 100644
---- a/src/flash/nor/Makefile.am
-+++ b/src/flash/nor/Makefile.am
-@@ -36,6 +36,7 @@ NOR_DRIVERS =3D \
- 	%D%/niietcm4.c \
- 	%D%/non_cfi.c \
- 	%D%/nrf51.c \
-+	%D%/nrf52.c \
- 	%D%/numicro.c \
- 	%D%/ocl.c \
- 	%D%/pic32mx.c \
-diff --git a/src/flash/nor/drivers.c b/src/flash/nor/drivers.c
-index 56a5cb2..071273e 100644
---- a/src/flash/nor/drivers.c
-+++ b/src/flash/nor/drivers.c
-@@ -48,6 +48,7 @@ extern struct flash_driver mdr_flash;
- extern struct flash_driver mrvlqspi_flash;
- extern struct flash_driver niietcm4_flash;
- extern struct flash_driver nrf51_flash;
-+extern struct flash_driver nrf52_flash;
- extern struct flash_driver numicro_flash;
- extern struct flash_driver ocl_flash;
- extern struct flash_driver pic32mx_flash;
-@@ -100,6 +101,7 @@ static struct flash_driver *flash_drivers[] =3D {
- 	&mrvlqspi_flash,
- 	&niietcm4_flash,
- 	&nrf51_flash,
-+       &nrf52_flash,
- 	&numicro_flash,
- 	&ocl_flash,
- 	&pic32mx_flash,
-diff --git a/src/flash/nor/nrf52.c b/src/flash/nor/nrf52.c
-new file mode 100644
-index 0000000..7f2bd35
---- /dev/null
-+++ b/src/flash/nor/nrf52.c
-@@ -0,0 +1,733 @@
-+/************************************************************************=
***
-+ *   Copyright (C) 2013 Synapse Product Development                      =
  *
-+ *   Andrey Smirnov <andrew.smironv@HIDDEN>                           =
  *
-+ *   Angus Gratton <gus@HIDDEN>                                  =
  *
-+ *   Erdem U. Altunyurt <spamjunkeater@HIDDEN>                        =
  *
-+ *                                                                       =
  *
-+ *   This program is free software; you can redistribute it and/or modify=
  *
-+ *   it under the terms of the GNU General Public License as published by=
  *
-+ *   the Free Software Foundation; either version 2 of the License, or   =
  *
-+ *   (at your option) any later version.                                 =
  *
-+ *                                                                       =
  *
-+ *   This program is distributed in the hope that it will be useful,     =
  *
-+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of      =
  *
-+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the       =
  *
-+ *   GNU General Public License for more details.                        =
  *
-+ *                                                                       =
  *
-+ *   You should have received a copy of the GNU General Public License   =
  *
-+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>=
. *
-+ ************************************************************************=
***/
-+
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include <stdlib.h>
-+
-+#include "imp.h"
-+#include <target/algorithm.h>
-+#include <target/armv7m.h>
-+#include <helper/types.h>
-+
-+/* nRF52 Register addresses used by openOCD. */
-+#define NRF52_FLASH_BASE_ADDR        (0x0)
-+
-+#define NRF52_FICR_BASE_ADDR         (0x10000000)
-+#define NRF52_FICR_CODEPAGESIZE_ADDR (NRF52_FICR_BASE_ADDR | 0x010)
-+#define NRF52_FICR_CODESIZE_ADDR     (NRF52_FICR_BASE_ADDR | 0x014)
-+
-+#define NRF52_UICR_BASE_ADDR         (0x10001000)
-+
-+#define NRF52_NVMC_BASE_ADDR         (0x4001E000)
-+#define NRF52_NVMC_READY_ADDR        (NRF52_NVMC_BASE_ADDR | 0x400)
-+#define NRF52_NVMC_CONFIG_ADDR       (NRF52_NVMC_BASE_ADDR | 0x504)
-+#define NRF52_NVMC_ERASEPAGE_ADDR    (NRF52_NVMC_BASE_ADDR | 0x508)
-+#define NRF52_NVMC_ERASEALL_ADDR     (NRF52_NVMC_BASE_ADDR | 0x50C)
-+#define NRF52_NVMC_ERASEUICR_ADDR    (NRF52_NVMC_BASE_ADDR | 0x514)
-+
-+/* nRF52 bit fields. */
-+enum nrf52_nvmc_config_bits {
-+	NRF52_NVMC_CONFIG_REN =3D 0x0,
-+	NRF52_NVMC_CONFIG_WEN =3D 0x01,
-+	NRF52_NVMC_CONFIG_EEN =3D 0x02
-+};
-+
-+enum nrf52_nvmc_ready_bits {
-+	NRF52_NVMC_BUSY  =3D 0x0,
-+	NRF52_NVMC_READY =3D 0x01
-+};
-+
-+/* nRF52 state information. */
-+struct nrf52_info {
-+	uint32_t code_page_size; /* Size of FLASH page in bytes. */
-+	uint32_t code_memory_size; /* Size of Code FLASH region in bytes. */
-+
-+	struct {
-+		bool probed;
-+		int (*write) (struct flash_bank *bank,
-+				struct nrf52_info *chip,
-+				const uint8_t *buffer, uint32_t offset, uint32_t count);
-+	} bank[2]; /* There are two regions in nRF52 FLASH - Code and UICR. */
-+	struct target *target;
-+};
-+
-+static int nrf52_protect_check(struct flash_bank *bank);
-+
-+static int nrf52_probe(struct flash_bank *bank)
-+{
-+	int res;
-+	struct nrf52_info *chip =3D bank->driver_priv;
-+	assert(chip !=3D NULL);
-+
-+	res =3D target_read_u32(chip->target,
-+						NRF52_FICR_CODEPAGESIZE_ADDR,
-+						&chip->code_page_size);
-+	if (res !=3D ERROR_OK) {
-+		LOG_ERROR("Couldn't read code page size");
-+		return res;
-+	}
-+
-+	res =3D target_read_u32(chip->target,
-+						NRF52_FICR_CODESIZE_ADDR,
-+						&chip->code_memory_size);
-+	if (res !=3D ERROR_OK) {
-+		LOG_ERROR("Couldn't read code memory size");
-+		return res;
-+	}
-+
-+	chip->code_memory_size =3D chip->code_memory_size * chip->code_page_size;
-+
-+	if (bank->base =3D=3D NRF52_FLASH_BASE_ADDR) {
-+		bank->size =3D chip->code_memory_size;
-+		bank->num_sectors =3D bank->size / chip->code_page_size;
-+		bank->sectors =3D calloc(bank->num_sectors,
-+							sizeof((bank->sectors)[0]));
-+		if (!bank->sectors)
-+			return ERROR_FLASH_BANK_NOT_PROBED;
-+
-+		/* Fill out the sector information: All nRF51 sectors are the same size=
. */
-+		for (int i =3D 0; i < bank->num_sectors; i++) {
-+			bank->sectors[i].size =3D chip->code_page_size;
-+			bank->sectors[i].offset	=3D i * chip->code_page_size;
-+
-+			/* Mark as unknown. */
-+			bank->sectors[i].is_erased =3D -1;
-+			bank->sectors[i].is_protected =3D -1;
-+		}
-+
-+		nrf52_protect_check(bank);
-+
-+		chip->bank[0].probed =3D true;
-+	} else { /* This is the UICR bank. */
-+		bank->size =3D chip->code_page_size;
-+		bank->num_sectors =3D 1;
-+		bank->sectors =3D calloc(bank->num_sectors,
-+							sizeof((bank->sectors)[0]));
-+		if (!bank->sectors)
-+			return ERROR_FLASH_BANK_NOT_PROBED;
-+
-+		bank->sectors[0].size =3D bank->size;
-+		bank->sectors[0].offset	=3D 0;
-+
-+		bank->sectors[0].is_erased =3D -1;
-+		bank->sectors[0].is_protected =3D -1;
-+
-+		chip->bank[1].probed =3D true;
-+	}
-+
-+	return ERROR_OK;
-+}
-+
-+static int nrf52_bank_is_probed(struct flash_bank *bank)
-+{
-+	struct nrf52_info *chip =3D bank->driver_priv;
-+	assert(chip !=3D NULL);
-+
-+	return chip->bank[bank->bank_number].probed;
-+}
-+
-+static int nrf52_auto_probe(struct flash_bank *bank)
-+{
-+	if (!nrf52_bank_is_probed(bank))
-+		return nrf52_probe(bank);
-+	else
-+		return ERROR_OK;
-+}
-+
-+static int nrf52_wait_for_nvmc(struct nrf52_info *chip)
-+{
-+	int res;
-+	uint32_t ready;
-+	int timeout =3D 100;
-+
-+	do {
-+		res =3D target_read_u32(chip->target, NRF52_NVMC_READY_ADDR, &ready);
-+		if (res !=3D ERROR_OK) {
-+			LOG_ERROR("Couldn't read NVMC_READY register");
-+			return res;
-+		}
-+
-+		if (ready =3D=3D NRF52_NVMC_READY)
-+			return ERROR_OK;
-+
-+		alive_sleep(1);
-+	} while (timeout--);
-+
-+	LOG_DEBUG("Timed out waiting for the NVMC to be ready");
-+	return ERROR_FLASH_BUSY;
-+}
-+
-+static int nrf52_nvmc_erase_enable(struct nrf52_info *chip)
-+{
-+	int res;
-+
-+	res =3D nrf52_wait_for_nvmc(chip);
-+	if (res !=3D ERROR_OK)
-+		return res;
-+
-+	res =3D target_write_u32(chip->target,
-+						NRF52_NVMC_CONFIG_ADDR,
-+						NRF52_NVMC_CONFIG_EEN);
-+	if (res !=3D ERROR_OK) {
-+		LOG_ERROR("Failed to configure the NVMC for erasing");
-+		return res;
-+	}
-+
-+	return res;
-+}
-+
-+static int nrf52_nvmc_write_enable(struct nrf52_info *chip)
-+{
-+	int res;
-+
-+	res =3D nrf52_wait_for_nvmc(chip);
-+	if (res !=3D ERROR_OK)
-+		return res;
-+
-+	res =3D target_write_u32(chip->target,
-+						NRF52_NVMC_CONFIG_ADDR,
-+						NRF52_NVMC_CONFIG_WEN);
-+	if (res !=3D ERROR_OK) {
-+		LOG_ERROR("Failed to configure the NVMC for writing");
-+		return res;
-+	}
-+
-+	return res;
-+}
-+
-+static int nrf52_nvmc_read_only(struct nrf52_info *chip)
-+{
-+	int res;
-+
-+	res =3D nrf52_wait_for_nvmc(chip);
-+	if (res !=3D ERROR_OK)
-+		return res;
-+
-+	res =3D target_write_u32(chip->target,
-+						NRF52_NVMC_CONFIG_ADDR,
-+						NRF52_NVMC_CONFIG_REN);
-+	if (res !=3D ERROR_OK) {
-+		LOG_ERROR("Failed to configure the NVMC for read-only");
-+		return res;
-+	}
-+
-+	return res;
-+}
-+
-+static int nrf52_nvmc_generic_erase(struct nrf52_info *chip,
-+								uint32_t erase_register,
-+								uint32_t erase_value)
-+{
-+	int res;
-+
-+	res =3D nrf52_nvmc_erase_enable(chip);
-+	if (res !=3D ERROR_OK)
-+		return res;
-+
-+	res =3D target_write_u32(chip->target,
-+						erase_register,
-+						erase_value);
-+	if (res !=3D ERROR_OK)
-+		LOG_ERROR("Failed to write NVMC erase register");
-+
-+	return nrf52_nvmc_read_only(chip);
-+}
-+
-+static int nrf52_protect_check(struct flash_bank *bank)
-+{
-+	LOG_WARNING("nrf52_protect_check() is not implemented for nRF52 series d=
evices yet");
-+	return ERROR_OK;
-+}
-+
-+static int nrf52_protect(struct flash_bank *bank, int set, int first, int=
 last)
-+{
-+	LOG_WARNING("nrf52_protect() is not implemented for nRF52 series devices=
 yet");
-+	return ERROR_OK;
-+}
-+
-+static struct flash_sector *nrf52_find_sector_by_address(struct flash_ban=
k *bank, uint32_t address)
-+{
-+	struct nrf52_info *chip =3D bank->driver_priv;
-+	assert(chip !=3D NULL);
-+
-+	for (int i =3D 0; i < bank->num_sectors; i++)
-+		if (bank->sectors[i].offset <=3D address &&
-+			address < (bank->sectors[i].offset + chip->code_page_size)) {
-+			return &bank->sectors[i];
-+		}
-+
-+	return NULL;
-+}
-+
-+static int nrf52_erase_all(struct nrf52_info *chip)
-+{
-+	LOG_DEBUG("Erasing all non-volatile memory");
-+	return nrf52_nvmc_generic_erase(chip,
-+								NRF52_NVMC_ERASEALL_ADDR,
-+								0x01);
-+}
-+
-+static int nrf52_erase_page(struct flash_bank *bank,
-+							struct nrf52_info *chip,
-+							struct flash_sector *sector)
-+{
-+	int res;
-+
-+	LOG_DEBUG("Erasing page at 0x%"PRIx32, sector->offset);
-+	if (sector->is_protected =3D=3D 1) {
-+		LOG_ERROR("Cannot erase protected sector at 0x%" PRIx32, sector->offset=
);
-+		return ERROR_FAIL;
-+	}
-+
-+	if (bank->base =3D=3D NRF52_UICR_BASE_ADDR) {
-+		res =3D nrf52_nvmc_generic_erase(chip,
-+									NRF52_NVMC_ERASEUICR_ADDR,
-+									0x00000001);
-+	} else {
-+		res =3D nrf52_nvmc_generic_erase(chip,
-+									NRF52_NVMC_ERASEPAGE_ADDR,
-+									sector->offset);
-+	}
-+
-+	if (res =3D=3D ERROR_OK)
-+		sector->is_erased =3D 1;
-+	return res;
-+}
-+
-+static const uint8_t nrf52_flash_write_code[] =3D {
-+	/* See contrib/loaders/flash/cortex-m0.S */
-+	/* <wait_fifo>: */
-+	0x0d, 0x68,		/* ldr	r5,	[r1,	#0] */
-+	0x00, 0x2d,		/* cmp	r5,	#0 */
-+	0x0b, 0xd0,		/* beq.n	1e <exit> */
-+	0x4c, 0x68,		/* ldr	r4,	[r1,	#4] */
-+	0xac, 0x42,		/* cmp	r4,	r5 */
-+	0xf9, 0xd0,		/* beq.n	0 <wait_fifo> */
-+	0x20, 0xcc,		/* ldmia	r4!,	{r5} */
-+	0x20, 0xc3,		/* stmia	r3!,	{r5} */
-+	0x94, 0x42,		/* cmp	r4,	r2 */
-+	0x01, 0xd3,		/* bcc.n	18 <no_wrap> */
-+	0x0c, 0x46,		/* mov	r4,	r1 */
-+	0x08, 0x34,		/* adds	r4,	#8 */
-+	/* <no_wrap>: */
-+	0x4c, 0x60,		/* str	r4, [r1,	#4] */
-+	0x04, 0x38,		/* subs	r0, #4 */
-+	0xf0, 0xd1,		/* bne.n	0 <wait_fifo> */
-+	/* <exit>: */
-+	0x00, 0xbe		/* bkpt	0x0000 */
-+};
-+
-+
-+/* Start a low level flash write for the specified region */
-+static int nrf52_ll_flash_write(struct nrf52_info *chip, uint32_t offset,=
 const uint8_t *buffer, uint32_t bytes)
-+{
-+	struct target *target =3D chip->target;
-+	uint32_t buffer_size =3D 8192;
-+	struct working_area *write_algorithm;
-+	struct working_area *source;
-+	uint32_t address =3D NRF52_FLASH_BASE_ADDR + offset;
-+	struct reg_param reg_params[4];
-+	struct armv7m_algorithm armv7m_info;
-+	int retval =3D ERROR_OK;
-+
-+	LOG_DEBUG("Writing buffer to flash offset=3D0x%"PRIx32" bytes=3D0x%"PRIx=
32, offset, bytes);
-+	assert(bytes % 4 =3D=3D 0);
-+
-+	/* allocate working area with flash programming code */
-+	if (target_alloc_working_area(target, sizeof(nrf52_flash_write_code),
-+			&write_algorithm) !=3D ERROR_OK) {
-+		LOG_WARNING("no working area available, falling back to slow memory wri=
tes");
-+
-+		for (; bytes > 0; bytes -=3D 4) {
-+			retval =3D target_write_memory(chip->target,
-+										offset, 4, 1, buffer);
-+			if (retval !=3D ERROR_OK)
-+				return retval;
-+
-+			retval =3D nrf52_wait_for_nvmc(chip);
-+			if (retval !=3D ERROR_OK)
-+				return retval;
-+
-+			offset +=3D 4;
-+			buffer +=3D 4;
-+		}
-+
-+		return ERROR_OK;
-+	}
-+
-+	LOG_WARNING("using fast async flash loader. This is currently supported"=
);
-+	LOG_WARNING("only with ST-Link and CMSIS-DAP. If you have issues, add");
-+	LOG_WARNING("\"set WORKAREASIZE 0\" before sourcing nrf52.cfg to disable=
 it");
-+
-+	retval =3D target_write_buffer(target, write_algorithm->address,
-+				sizeof(nrf52_flash_write_code),
-+				nrf52_flash_write_code);
-+	if (retval !=3D ERROR_OK)
-+		return retval;
-+
-+	/* memory buffer */
-+	while (target_alloc_working_area(target, buffer_size, &source) !=3D ERRO=
R_OK) {
-+		buffer_size /=3D 2;
-+		buffer_size &=3D ~3UL; /* Make sure it's 4 byte aligned */
-+		if (buffer_size <=3D 256) {
-+			/* free working area, write algorithm already allocated */
-+			target_free_working_area(target, write_algorithm);
-+
-+			LOG_WARNING("No large enough working area available, can't do block me=
mory writes");
-+			return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
-+		}
-+	}
-+
-+	armv7m_info.common_magic =3D ARMV7M_COMMON_MAGIC;
-+	armv7m_info.core_mode =3D ARM_MODE_THREAD;
-+
-+	init_reg_param(&reg_params[0], "r0", 32, PARAM_IN_OUT);	/* byte count */
-+	init_reg_param(&reg_params[1], "r1", 32, PARAM_OUT);	/* buffer start */
-+	init_reg_param(&reg_params[2], "r2", 32, PARAM_OUT);	/* buffer end */
-+	init_reg_param(&reg_params[3], "r3", 32, PARAM_IN_OUT);	/* target addres=
s */
-+
-+	buf_set_u32(reg_params[0].value, 0, 32, bytes);
-+	buf_set_u32(reg_params[1].value, 0, 32, source->address);
-+	buf_set_u32(reg_params[2].value, 0, 32, source->address + source->size);
-+	buf_set_u32(reg_params[3].value, 0, 32, address);
-+
-+	retval =3D target_run_flash_async_algorithm(target, buffer, bytes/4, 4,
-+			0, NULL,
-+			4, reg_params,
-+			source->address, source->size,
-+			write_algorithm->address, 0,
-+			&armv7m_info);
-+
-+	target_free_working_area(target, source);
-+	target_free_working_area(target, write_algorithm);
-+
-+	destroy_reg_param(&reg_params[0]);
-+	destroy_reg_param(&reg_params[1]);
-+	destroy_reg_param(&reg_params[2]);
-+	destroy_reg_param(&reg_params[3]);
-+
-+	return retval;
-+}
-+
-+/* Check and erase flash sectors in specified range, then start a low lev=
el page write.
-+   start/end must be sector aligned.
-+*/
-+static int nrf52_write_pages(struct flash_bank *bank, uint32_t start, uin=
t32_t end, const uint8_t *buffer)
-+{
-+	int res;
-+	uint32_t offset;
-+	struct flash_sector *sector;
-+	struct nrf52_info *chip =3D bank->driver_priv;
-+	assert(chip !=3D NULL);
-+
-+	assert(start % chip->code_page_size =3D=3D 0);
-+	assert(end % chip->code_page_size =3D=3D 0);
-+
-+	/* Erase all sectors */
-+	for (offset =3D start; offset < end; offset +=3D chip->code_page_size) {
-+		sector =3D nrf52_find_sector_by_address(bank, offset);
-+
-+		if (sector =3D=3D NULL) {
-+			LOG_ERROR("Invalid sector @ 0x%08"PRIx32, offset);
-+			return ERROR_FLASH_SECTOR_INVALID;
-+		}
-+
-+		if (sector->is_protected =3D=3D 1) {
-+			LOG_ERROR("Can't erase protected sector @ 0x%08"PRIx32, offset);
-+			return ERROR_FAIL;
-+		}
-+
-+		if (sector->is_erased !=3D 1) {	/* 1 =3D erased, 0=3D not erased, -1 =
=3D unknown */
-+			res =3D nrf52_erase_page(bank, chip, sector);
-+			if (res !=3D ERROR_OK) {
-+				LOG_ERROR("Failed to erase sector @ 0x%08"PRIx32, sector->offset);
-+				return res;
-+			}
-+		}
-+		sector->is_erased =3D 1;
-+	}
-+
-+	res =3D nrf52_nvmc_write_enable(chip);
-+	if (res !=3D ERROR_OK)
-+		return res;
-+
-+	res =3D nrf52_ll_flash_write(chip, start, buffer, (end - start));
-+	if (res !=3D ERROR_OK) {
-+		LOG_ERROR("Failed to write FLASH");
-+		nrf52_nvmc_read_only(chip);
-+		return res;
-+	}
-+
-+	return nrf52_nvmc_read_only(chip);
-+}
-+
-+static int nrf52_erase(struct flash_bank *bank, int first, int last)
-+{
-+	int res =3D ERROR_OK;
-+	struct nrf52_info *chip =3D bank->driver_priv;
-+	assert(chip !=3D NULL);
-+
-+	/* For each sector to be erased */
-+	for (int s =3D first; s <=3D last && res =3D=3D ERROR_OK; s++)
-+		res =3D nrf52_erase_page(bank, chip, &bank->sectors[s]);
-+
-+	return res;
-+}
-+
-+static int nrf52_code_flash_write(struct flash_bank *bank,
-+								struct nrf52_info *chip,
-+								const uint8_t *buffer, uint32_t offset, uint32_t count)
-+{
-+	int res;
-+	/* Need to perform reads to fill any gaps we need to preserve in the fir=
st page,
-+	   before the start of buffer, or in the last page, after the end of buf=
fer */
-+	uint32_t first_page =3D offset / chip->code_page_size;
-+	uint32_t last_page =3D DIV_ROUND_UP(offset+count, chip->code_page_size);
-+
-+	uint32_t first_page_offset =3D first_page * chip->code_page_size;
-+	uint32_t last_page_offset =3D last_page * chip->code_page_size;
-+
-+	LOG_DEBUG("Padding write from 0x%08"PRIx32"-0x%08"PRIx32" as 0x%08"PRIx3=
2"-0x%08"PRIx32,
-+			offset, offset+count, first_page_offset, last_page_offset);
-+
-+	uint32_t page_cnt =3D last_page - first_page;
-+	uint8_t buffer_to_flash[page_cnt * chip->code_page_size];
-+
-+	/* Fill in any space between start of first page and start of buffer */
-+	uint32_t pre =3D offset - first_page_offset;
-+	if (pre > 0) {
-+		res =3D target_read_memory(bank->target, first_page_offset, 1, pre, buf=
fer_to_flash);
-+		if (res !=3D ERROR_OK)
-+			return res;
-+	}
-+
-+	/* Fill in main contents of buffer */
-+	memcpy(buffer_to_flash + pre, buffer, count);
-+
-+	/* Fill in any space between end of buffer and end of last page */
-+	uint32_t post =3D last_page_offset - (offset + count);
-+	if (post > 0) {
-+		/* Retrieve the full row contents from Flash */
-+		res =3D target_read_memory(bank->target, offset + count, 1, post, buffe=
r_to_flash + pre + count);
-+		if (res !=3D ERROR_OK)
-+			return res;
-+	}
-+
-+	return nrf52_write_pages(bank, first_page_offset, last_page_offset, buff=
er_to_flash);
-+}
-+
-+static int nrf52_uicr_flash_write(struct flash_bank *bank,
-+								struct nrf52_info *chip,
-+								const uint8_t *buffer, uint32_t offset, uint32_t count)
-+{
-+	int res;
-+	uint32_t nrf52_uicr_size =3D chip->code_page_size;
-+	uint8_t uicr[nrf52_uicr_size];
-+	struct flash_sector *sector =3D &bank->sectors[0];
-+
-+	if ((offset + count) > nrf52_uicr_size)
-+		return ERROR_FAIL;
-+
-+	res =3D target_read_memory(bank->target, NRF52_UICR_BASE_ADDR, 1, nrf52_=
uicr_size, uicr);
-+
-+	if (res !=3D ERROR_OK)
-+		return res;
-+
-+	if (sector->is_erased !=3D 1) {
-+		res =3D nrf52_erase_page(bank, chip, sector);
-+		if (res !=3D ERROR_OK)
-+			return res;
-+	}
-+
-+	memcpy(&uicr[offset], buffer, count);
-+
-+	res =3D nrf52_nvmc_write_enable(chip);
-+	if (res !=3D ERROR_OK)
-+		return res;
-+
-+	res =3D nrf52_ll_flash_write(chip, NRF52_UICR_BASE_ADDR, uicr, nrf52_uic=
r_size);
-+	if (res !=3D ERROR_OK) {
-+		nrf52_nvmc_read_only(chip);
-+		return res;
-+	}
-+
-+	return nrf52_nvmc_read_only(chip);
-+}
-+
-+
-+static int nrf52_write(struct flash_bank *bank, const uint8_t *buffer,
-+					uint32_t offset, uint32_t count)
-+{
-+	struct nrf52_info *chip =3D bank->driver_priv;
-+	assert(chip !=3D NULL);
-+
-+	return chip->bank[bank->bank_number].write(bank, chip, buffer, offset, c=
ount);
-+}
-+
-+
-+FLASH_BANK_COMMAND_HANDLER(nrf52_flash_bank_command)
-+{
-+	static struct nrf52_info *chip;
-+
-+	assert(bank !=3D NULL);
-+
-+	switch (bank->base) {
-+	case NRF52_FLASH_BASE_ADDR:
-+		bank->bank_number =3D 0;
-+		break;
-+	case NRF52_UICR_BASE_ADDR:
-+		bank->bank_number =3D 1;
-+		break;
-+	default:
-+		LOG_ERROR("Invalid bank address 0x%08" PRIx32, bank->base);
-+		return ERROR_FAIL;
-+	}
-+
-+	if (!chip) {
-+		/* Create a new chip */
-+		chip =3D calloc(1, sizeof(*chip));
-+		assert(chip !=3D NULL);
-+
-+		chip->target =3D bank->target;
-+	}
-+
-+	switch (bank->base) {
-+	case NRF52_FLASH_BASE_ADDR:
-+		chip->bank[bank->bank_number].write =3D nrf52_code_flash_write;
-+		break;
-+	case NRF52_UICR_BASE_ADDR:
-+		chip->bank[bank->bank_number].write =3D nrf52_uicr_flash_write;
-+		break;
-+	}
-+
-+	chip->bank[bank->bank_number].probed =3D false;
-+	bank->driver_priv =3D chip;
-+
-+	return ERROR_OK;
-+}
-+
-+COMMAND_HANDLER(nrf52_handle_mass_erase_command)
-+{
-+	int res;
-+	struct flash_bank *bank =3D NULL;
-+	struct target *target =3D get_current_target(CMD_CTX);
-+
-+	res =3D get_flash_bank_by_addr(target, NRF52_FLASH_BASE_ADDR, true, &ban=
k);
-+	if (res !=3D ERROR_OK)
-+		return res;
-+
-+	assert(bank !=3D NULL);
-+
-+	struct nrf52_info *chip =3D bank->driver_priv;
-+	assert(chip !=3D NULL);
-+
-+	res =3D nrf52_erase_all(chip);
-+	if (res !=3D ERROR_OK) {
-+		LOG_ERROR("Failed to erase the chip");
-+		nrf52_protect_check(bank);
-+		return res;
-+	}
-+
-+	for (int i =3D 0; i < bank->num_sectors; i++)
-+		bank->sectors[i].is_erased =3D 1;
-+
-+	res =3D nrf52_protect_check(bank);
-+	if (res !=3D ERROR_OK) {
-+		LOG_ERROR("Failed to check chip's write protection");
-+		return res;
-+	}
-+
-+	res =3D get_flash_bank_by_addr(target, NRF52_UICR_BASE_ADDR, true, &bank=
);
-+	if (res !=3D ERROR_OK)
-+		return res;
-+
-+	bank->sectors[0].is_erased =3D 1;
-+
-+	return ERROR_OK;
-+}
-+
-+static int nrf52_info(struct flash_bank *bank, char *buf, int buf_size)
-+{
-+	int res;
-+	uint32_t ficr[2];
-+	struct nrf52_info *chip =3D bank->driver_priv;
-+	assert(chip !=3D NULL);
-+
-+	res =3D target_read_u32(chip->target, NRF52_FICR_CODEPAGESIZE_ADDR, &fic=
r[0]);
-+		if (res !=3D ERROR_OK) {
-+			LOG_ERROR("Couldn't read NVMC_READY register");
-+			return res;
-+		}
-+
-+	res =3D target_read_u32(chip->target, NRF52_FICR_CODESIZE_ADDR, &ficr[1]=
);
-+		if (res !=3D ERROR_OK) {
-+			LOG_ERROR("Couldn't read NVMC_READY register");
-+			return res;
-+		}
-+
-+	snprintf(buf, buf_size,
-+			"\n--------nRF52 Series Device--------\n\n"
-+			"\n[factory information control block]\n"
-+			"code page size: %"PRIu32"B\n"
-+			"code memory size: %"PRIu32"kB\n",
-+			ficr[0],
-+			(ficr[1] * ficr[0]) / 1024);
-+
-+	return ERROR_OK;
-+}
-+
-+static const struct command_registration nrf52_exec_command_handlers[] =
=3D {
-+	{
-+		.name		=3D "mass_erase",
-+		.handler	=3D nrf52_handle_mass_erase_command,
-+		.mode		=3D COMMAND_EXEC,
-+		.help		=3D "Erase all flash contents of the chip.",
-+	},
-+	COMMAND_REGISTRATION_DONE
-+};
-+
-+static const struct command_registration nrf52_command_handlers[] =3D {
-+	{
-+		.name	=3D "nrf52",
-+		.mode	=3D COMMAND_ANY,
-+		.help	=3D "nrf52 flash command group",
-+		.usage	=3D "",
-+		.chain	=3D nrf52_exec_command_handlers,
-+	},
-+	COMMAND_REGISTRATION_DONE
-+};
-+
-+struct flash_driver nrf52_flash =3D {
-+	.name			=3D "nrf52",
-+	.commands		=3D nrf52_command_handlers,
-+	.flash_bank_command	=3D nrf52_flash_bank_command,
-+	.info			=3D nrf52_info,
-+	.erase			=3D nrf52_erase,
-+	.protect		=3D nrf52_protect,
-+	.write			=3D nrf52_write,
-+	.read			=3D default_flash_read,
-+	.probe			=3D nrf52_probe,
-+	.auto_probe		=3D nrf52_auto_probe,
-+	.erase_check	=3D default_flash_blank_check,
-+	.protect_check	=3D nrf52_protect_check,
-+};
-diff --git a/tcl/target/nrf52.cfg b/tcl/target/nrf52.cfg
-index c1cbf1a..41a22ff 100644
---- a/tcl/target/nrf52.cfg
-+++ b/tcl/target/nrf52.cfg
-@@ -10,6 +10,13 @@ if { [info exists CHIPNAME] } {
- 	set _CHIPNAME nrf52
- }
-=20
-+# Work-area is a space in RAM used for flash programming, by default use =
16kB.
-+if { [info exists WORKAREASIZE] } {
-+        set _WORKAREASIZE $WORKAREASIZE
-+} else {
-+        set _WORKAREASIZE 0x4000
-+}
-+
- if { [info exists CPUTAPID] } {
- 	set _CPUTAPID $CPUTAPID
- } else {
-@@ -22,7 +29,15 @@ set _TARGETNAME $_CHIPNAME.cpu
- target create $_TARGETNAME cortex_m -chain-position $_TARGETNAME
-=20
- adapter_khz 10000
-+$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKA=
REASIZE -work-area-backup 0
-=20
- if { ![using_hla] } {
- 	cortex_m reset_config sysresetreq
- }
-+
-+flash bank $_CHIPNAME.flash nrf52 0x00000000 0 1 1 $_TARGETNAME
-+flash bank $_CHIPNAME.uicr nrf52 0x10001000 0 1 1 $_TARGETNAME
-+
-+adapter_khz 1000
-+
-+$_TARGETNAME configure -event reset-end {}
--=20
2.28.0


--=-=-=--




Information forwarded to guix-patches@HIDDEN:
bug#43852; Package guix-patches. Full text available.

Message received at 43852 <at> debbugs.gnu.org:


Received: (at 43852) by debbugs.gnu.org; 9 Oct 2020 19:03:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Oct 09 15:03:04 2020
Received: from localhost ([127.0.0.1]:36229 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kQxfT-0004J1-Ns
	for submit <at> debbugs.gnu.org; Fri, 09 Oct 2020 15:03:04 -0400
Received: from hera.aquilenet.fr ([185.233.100.1]:33658)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <andreas@HIDDEN>) id 1kQxfR-0004IZ-N8
 for 43852 <at> debbugs.gnu.org; Fri, 09 Oct 2020 15:03:02 -0400
Received: from localhost (localhost [127.0.0.1])
 by hera.aquilenet.fr (Postfix) with ESMTP id CF11A120D;
 Fri,  9 Oct 2020 21:02:59 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at aquilenet.fr
Received: from hera.aquilenet.fr ([127.0.0.1])
 by localhost (hera.aquilenet.fr [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id y1IikbBrkDBP; Fri,  9 Oct 2020 21:02:59 +0200 (CEST)
Received: from jurong (unknown [IPv6:2001:910:103f::5fe])
 by hera.aquilenet.fr (Postfix) with ESMTPSA id D13671204;
 Fri,  9 Oct 2020 21:02:58 +0200 (CEST)
Date: Fri, 9 Oct 2020 21:02:57 +0200
From: Andreas Enge <andreas@HIDDEN>
To: Malte Frank Gerdes <malte.f.gerdes@HIDDEN>
Subject: Re: [bug#43852] [PATCH] gnu: Add riscv-openocd.
Message-ID: <20201009190257.GA2052@jurong>
References: <86lfgh6bzy.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <86lfgh6bzy.fsf@HIDDEN>
X-Spam-Score: 0.7 (/)
X-Debbugs-Envelope-To: 43852
Cc: 43852 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.3 (/)

Hello,

since I am speaking as someone who does not know what these packages are
about, please take what follows with a grain of salt.

On Wed, Oct 07, 2020 at 10:02:09PM +0200, Malte Frank Gerdes wrote:
> libjaylink ... is
> ... available as a package. The available package ...
> ... is too old ...
> ... should I do something?

Written like this, I would say you could try updating it, independently
of your target package. Then the question is whether you break anything
else:
    guix refresh -l libjaylink
A single dependent package: openocd@HIDDEN

So there already is an openocd, which maybe should be updated at the same
time?

And do you really need a new package, or could it be enough to provide
more inputs or configuration flags to the existing one? Otherwise, how
about inheriting? The name also is weird, see the section in the manual;
we normally keep the upstream project name.

Andreas





Information forwarded to guix-patches@HIDDEN:
bug#43852; Package guix-patches. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 7 Oct 2020 20:02:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Oct 07 16:02:47 2020
Received: from localhost ([127.0.0.1]:58156 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kQFe3-0002db-I5
	for submit <at> debbugs.gnu.org; Wed, 07 Oct 2020 16:02:47 -0400
Received: from lists.gnu.org ([209.51.188.17]:60284)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <malte.f.gerdes@HIDDEN>) id 1kQFdv-0002dN-ON
 for submit <at> debbugs.gnu.org; Wed, 07 Oct 2020 16:02:38 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:33026)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <malte.f.gerdes@HIDDEN>)
 id 1kQFdq-0001Qk-9I
 for guix-patches@HIDDEN; Wed, 07 Oct 2020 16:02:29 -0400
Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]:45413)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <malte.f.gerdes@HIDDEN>)
 id 1kQFdg-0004Fh-P1
 for guix-patches@HIDDEN; Wed, 07 Oct 2020 16:02:25 -0400
Received: by mail-ed1-x52f.google.com with SMTP id dg9so1134204edb.12
 for <guix-patches@HIDDEN>; Wed, 07 Oct 2020 13:02:15 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:subject:date:message-id:user-agent:mime-version;
 bh=2EgM3OUiRZCgQcMICHhjGuD1EAGu0t1/z2lJYdN8FTE=;
 b=NVj3VkqJ6vCAxtvLr6pb7/l8Am7lA7/4zcSbe4HxsWWERmcobq6+9mQPhvI8yR0iuM
 4i44wFaAaid27qJ0aIzktG0raaiFLcA7a3JNkO6QVVp7wXv/T7FXs8HN10RT/zWu986J
 ryiGAdThR5QRU9sHyZ0bhuAgEg/G83FqMbRvt+/Hk+xIGRQQPZEmGBFYA4CBPaoJrw1M
 emjFU2tLdmn/pLsCv89F+KC9pc0+j6fqnGYvbeVJikl91CdrtaEAErtRKAWHungs5zrX
 wDtJ9Yp7QNGFEhcqYFHS47hdTfwnsUVLNRuHOWH9tNMVdedalC1KCU/Pjyka5Rt7ZQHJ
 f1ig==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:subject:date:message-id:user-agent
 :mime-version;
 bh=2EgM3OUiRZCgQcMICHhjGuD1EAGu0t1/z2lJYdN8FTE=;
 b=FfTxp3u60JyuAD87BaSKnmJ8YDNS0lqhAa80aD3BNKFLNxGufsaS6ZMJ3HJKznjiYu
 6xmNU8R+ejXO81Ehrld3Qzxvsd8sb/TYzchMxt9F42sVtXZSmQ8oMSo0ucxRMp8haJcW
 6uqLwCe19PIUDA480+EcmRvy3MkN5Rhy2a4Y3jbwq7gJs4341RCOLRx0tIpxHgDJ/nzm
 92ZyKkH0GjyffPMxBoD2P509b7+64wFExL0JBeFySkpr0pVZH8F6MYrtnauTOvmBoosP
 py5CTWY3DwtfT1qPq6p9ybAwwD5z4nXMt6KCd2ygiWdsIp3TWg9PTLdvMLNydVuDDxfQ
 bqbg==
X-Gm-Message-State: AOAM5331cMvhN7jRcSX0VIepnOFPglvo80Jn47vKCKFVUvsjFa2TOUOE
 GgXeVrNnhTPzUyfMsWRm11WWFAV1C+o=
X-Google-Smtp-Source: ABdhPJzTBp062KzVYZ5wMWbqwM5WEc7EQLZW3YPE1MOGERulNMI9yLbzRqw0VcHBIWWIlZ1JOemZxQ==
X-Received: by 2002:a05:6402:84f:: with SMTP id
 b15mr5430353edz.149.1602100931071; 
 Wed, 07 Oct 2020 13:02:11 -0700 (PDT)
Received: from Morphium (ip-84-118-73-55.unity-media.net. [84.118.73.55])
 by smtp.gmail.com with ESMTPSA id ds8sm2031786ejc.86.2020.10.07.13.02.09
 for <guix-patches@HIDDEN>
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Oct 2020 13:02:10 -0700 (PDT)
From: Malte Frank Gerdes <malte.f.gerdes@HIDDEN>
To: guix-patches@HIDDEN
Subject: [PATCH] gnu: Add riscv-openocd.
Date: Wed, 07 Oct 2020 22:02:09 +0200
Message-ID: <86lfgh6bzy.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
Received-SPF: pass client-ip=2a00:1450:4864:20::52f;
 envelope-from=malte.f.gerdes@HIDDEN; helo=mail-ed1-x52f.google.com
X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache.
 That's all we know.
X-Spam_score_int: -19
X-Spam_score: -2.0
X-Spam_bar: --
X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001,
 URIBL_SBL_A=0.1 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 3.5 (+++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 Content preview:  Hi, this adds OpenOCD with RISC-V support to Guix. There is
 a problem though: riscv-openocd bundles libjaylink, which is also available
 as a package. The available package cannot be used because it is too old
 and riscv-openocd has riscv-specific addit [...] 
 Content analysis details:   (3.5 points, 10.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 0.1 URIBL_SBL_A Contains URL's A record listed in the Spamhaus SBL
 blocklist [URIs: openocd.org]
 0.6 URIBL_SBL Contains an URL's NS IP listed in the Spamhaus SBL
 blocklist [URIs: openocd.org]
 1.0 SPF_SOFTFAIL           SPF: sender does not match SPF record (softfail)
 0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail
 provider (malte.f.gerdes[at]gmail.com)
 0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 1.8 SPOOFED_FREEMAIL       No description available.
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

--=-=-=
Content-Type: text/plain

Hi,

this adds OpenOCD with RISC-V support to Guix.

There is a problem though: riscv-openocd bundles libjaylink, which is
also available as a package. The available package cannot be used
because it is too old and riscv-openocd has riscv-specific additions
made to it. So the question is: does this justify using the bundled
library or should I do something? (if yes, what?)

I have successfully used the package to communicate via JTAG with a
Sipeed Nano and a JLink V8.

I built this package successfully on: x86_64-linux, aarch64-linux


Malte


--=-=-=
Content-Type: text/x-patch; charset=utf-8
Content-Disposition: inline; filename=0001-gnu-Add-riscv-openocd.patch
Content-Transfer-Encoding: quoted-printable

From ccbb612dcf87e2e628febfee74f893726b6ca309 Mon Sep 17 00:00:00 2001
From: Malte Frank Gerdes <malte.f.gerdes@HIDDEN>
Date: Wed, 7 Oct 2020 20:27:51 +0200
Subject: [PATCH] gnu: Add riscv-openocd.

* gnu/packages/embedded.scm (riscv-openocd): New variable.
* gnu/packages/patches/riscv-openocd-reproducibility.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register patch.
---
 gnu/local.mk                                  |  2 +
 gnu/packages/embedded.scm                     | 80 +++++++++++++++++++
 .../riscv-openocd-reproducibility.patch       | 57 +++++++++++++
 3 files changed, 139 insertions(+)
 create mode 100644 gnu/packages/patches/riscv-openocd-reproducibility.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index f3b5b17e84..4fa460d4a1 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -37,6 +37,7 @@
 # Copyright =C2=A9 2020 Brice Waegeneire <brice@HIDDEN>
 # Copyright =C2=A9 2020 Tanguy Le Carrour <tanguy@HIDDEN>
 # Copyright =C2=A9 2020 Martin Becze <mjbecze@HIDDEN>
+# Copyright =C2=A9 2020 Malte Frank Gerdes <malte.f.gerdes@HIDDEN>
 #
 # This file is part of GNU Guix.
 #
@@ -1407,6 +1408,7 @@ dist_patch_DATA =3D						\
   %D%/packages/patches/pango-skip-libthai-test.patch		\
   %D%/packages/patches/pciutils-hurd-configure.patch		\
   %D%/packages/patches/ppsspp-disable-upgrade-and-gold.patch		\
+  %D%/packages/patches/riscv-openocd-reproducibility.patch		\
   %D%/packages/patches/samba-fix-fcntl-hint-detection.patch		\
   %D%/packages/patches/sdl-pango-api_additions.patch		\
   %D%/packages/patches/sdl-pango-blit_overflow.patch		\
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index f9f0e04238..89fdf81349 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -7,6 +7,7 @@
 ;;; Copyright =C2=A9 2018, 2019 Cl=C3=A9ment Lassieur <clement@HIDDEN=
g>
 ;;; Copyright =C2=A9 2020 Marius Bakke <mbakke@HIDDEN>
 ;;; Copyright =C2=A9 2020 Bj=C3=B6rn H=C3=B6fling <bjoern.hoefling@bjoernh=
oefling.de>
+;;; Copyright =C2=A9 2020 Malte Frank Gerdes <malte.f.gerdes@HIDDEN>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,6 +39,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module ((gnu packages base) #:prefix base:)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages dejagnu)
@@ -54,6 +56,7 @@
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages xorg)
   #:use-module (srfi srfi-1))
=20
@@ -580,6 +583,83 @@ language.")
 with a layered architecture of JTAG interface and TAP support.")
     (license license:gpl2+)))
=20
+(define-public riscv-openocd
+  (let ((commit "675259382bacade0d4cc44d1944be2aa6a893adc")
+        (revision "0"))
+    (package
+      (name "riscv-openocd")
+      (version (string-append "0.10.0-" revision "."
+                              (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                     (url "https://github.com/riscv/riscv-openocd")
+                     (commit commit)))
+                (sha256
+                 (base32
+                  "083xyx2dq2f9yfkjpl8gm0icn96im1kip479y85nxl0z9ih7fxbf"))
+                (patches
+                 (search-patches "riscv-openocd-reproducibility.patch"))))
+      (build-system gnu-build-system)
+      (native-inputs
+       `(("autoconf" ,autoconf)
+         ("automake" ,automake)
+         ("which" ,base:which)
+         ("libtool" ,libtool)
+         ("pkg-config" ,pkg-config)
+         ("bash-minimal" ,bash-minimal)
+         ("texinfo" ,texinfo)))
+      (inputs
+       `(("hidapi" ,hidapi)
+         ("jimtcl" ,jimtcl)
+         ("libftdi" ,libftdi)
+         ("libusb-compat" ,libusb-compat)))
+      (arguments
+       '(#:configure-flags
+         (append (list "--disable-werror"
+                       "--enable-sysfsgpio"
+                       "--disable-internal-jimtcl")
+                 (map (lambda (programmer)
+                        (string-append "--enable-" programmer))
+                      '("amtjtagaccel" "armjtagew" "buspirate" "ftdi"
+                        "gw16012" "jlink" "opendous" "osbdm"
+                        "parport" "aice" "cmsis-dap" "dummy" "jtag_vpi"
+                        "remote-bitbang" "rlink" "stlink" "ti-icdi" "ulink"
+                        "usbprog" "vsllink" "usb-blaster-2" "usb_blaster"
+                        "presto" "openjtag")))
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'bootstrap
+             (lambda _
+               (chmod "src/jtag/drivers/libjaylink/autogen.sh" #o644)
+               (invoke "sh" "bootstrap" "nosubmodule")))
+           (add-after 'bootstrap 'bootstrap-jaylink
+             ;; we are using the bundled libjaylink here, because the orig=
inal
+             ;; repo (https://git.zapb.de/libjaylink.git) is now behind a =
login
+             ;; and cannot be cloned anymore. This package has custom addi=
tions
+             ;; to libjaylink.
+             (lambda _
+               (with-directory-excursion "src/jtag/drivers/libjaylink"
+                 (patch-shebang "autogen.sh")
+                 (invoke "sh"  "autogen.sh"))))
+           (add-before 'configure 'change-udev-group
+             (lambda _
+               (substitute* "contrib/60-openocd.rules"
+                 (("plugdev") "dialout"))
+               #t))
+           (add-after 'install 'install-udev-rules
+             (lambda* (#:key outputs #:allow-other-keys)
+               (install-file "contrib/60-openocd.rules"
+                             (string-append
+                              (assoc-ref outputs "out")
+                              "/lib/udev/rules.d/"))
+               #t)))))
+      (home-page "http://openocd.org")
+      (synopsis "On-Chip Debugger with RISC-V Support.")
+      (description "OpenOCD provides on-chip programming and debugging sup=
port
+with a layered architecture of JTAG interface and TAP support.")
+      (license license:gpl2+))))
+
 ;; The commits for all propeller tools are the stable versions published at
 ;; https://github.com/propellerinc/propgcc in the release_1_0.  According =
to
 ;; personal correspondence with the developers in July 2017, more recent
diff --git a/gnu/packages/patches/riscv-openocd-reproducibility.patch b/gnu=
/packages/patches/riscv-openocd-reproducibility.patch
new file mode 100644
index 0000000000..3f7227e7a3
--- /dev/null
+++ b/gnu/packages/patches/riscv-openocd-reproducibility.patch
@@ -0,0 +1,57 @@
+diff --git a/Makefile.am b/Makefile.am
+index fcfd554c2..55088fef8 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -94,9 +94,7 @@ TCL_FILES =3D find $(srcdir)/$(TCL_PATH) -name '*.cfg' -=
o -name '*.tcl' -o -name '
+ 		sed -e 's,^$(srcdir)/$(TCL_PATH),,'
+
+ dist-hook:
+-	if test -d $(srcdir)/.git -a \( ! -e $(distdir)/ChangeLog -o -w $(distdi=
r)/ChangeLog \) ; then \
+-		git --git-dir $(srcdir)/.git log | $(srcdir)/tools/git2cl/git2cl > $(di=
stdir)/ChangeLog ; \
+-	fi
++
+ 	for i in $$($(TCL_FILES)); do \
+ 		j=3D"$(distdir)/$(TCL_PATH)/$$i" && \
+ 		mkdir -p "$$(dirname $$j)" && \
+@@ -122,7 +120,7 @@ distclean-local:
+ # instead we have a hook that enforces this in each workspace. To make su=
re
+ # that users actually use those hooks, we point git at them here.
+ all-local:
+-	cd $(srcdir) && git config core.hooksPath ./git-hooks
++	echo "no git"
+
+ DISTCLEANFILES =3D doxygen.log
+
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index 67592038d..3a2e86049 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -4,8 +4,3 @@ info_TEXINFOS +=3D %D%/openocd.texi
+ dist_man_MANS +=3D %D%/openocd.1
+
+ EXTRA_DIST +=3D %D%/manual
+-
+-MAINTAINERCLEANFILES +=3D \
+-	%D%/mdate-sh \
+-	%D%/stamp-vti \
+-	%D%/version.texi
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 07981aa67..98e0c98c1 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -22,14 +22,9 @@ endif
+
+ # banner output includes RELSTR appended to $VERSION from the configure s=
cript
+ # guess-rev.sh returns either a repository version ID or "-snapshot"
+-if RELEASE
+ %C%_libopenocd_la_CPPFLAGS +=3D -DRELSTR=3D\"\"
+ %C%_libopenocd_la_CPPFLAGS +=3D -DGITVERSION=3D\"\"
+-else
+-%C%_libopenocd_la_CPPFLAGS +=3D -DRELSTR=3D\"`$(top_srcdir)/guess-rev.sh =
$(top_srcdir)`\"
+-%C%_libopenocd_la_CPPFLAGS +=3D -DGITVERSION=3D\"`cd $(top_srcdir) && git=
 describe`\"
+-%C%_libopenocd_la_CPPFLAGS +=3D -DPKGBLDDATE=3D\"`date +%F-%R`\"
+-endif
++
+
+ # add default CPPFLAGS
+ %C%_libopenocd_la_CPPFLAGS +=3D $(AM_CPPFLAGS) $(CPPFLAGS)
--=20
2.28.0


--=-=-=--




Acknowledgement sent to Malte Frank Gerdes <malte.f.gerdes@HIDDEN>:
New bug report received and forwarded. Copy sent to guix-patches@HIDDEN. Full text available.
Report forwarded to guix-patches@HIDDEN:
bug#43852; Package guix-patches. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Thu, 22 Oct 2020 15:00:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.