diff --git a/patch.sh b/patch.sh
index 0a612b8350287a188100ca18ab9ede7190fdecdc..fa6e29a95c9929db1d8741cb6d4f58bd74f856b6 100644
--- a/patch.sh
+++ b/patch.sh
@@ -355,18 +355,10 @@ reverts () {
 		start_cleanup
 	fi
 
-		#Breaks boot on am335x-boneblack
-		#debug: [bootz 0x82000000 - 88000000] ...
-		### Flattened Device Tree blob at 88000000
-		#   Booting using the fdt blob at 0x88000000
-		#   reserving fdt memory region: addr=88000000 size=88000
-		#   Loading Device Tree to 8ff75000, end 8fffffff ... OK
-		#
-		#Starting kernel ...
+	## notes
+	##git revert --no-edit xyz -s
 
-		#git revert --no-edit c083dc5f3738d394223baa0f90705397b0844acd
-
-		#${git} "${DIR}/patches/reverts/0001-Revert-clk-ti-am33xx-add-set-rate-parent-support-for.patch"
+	#${git} "${DIR}/patches/reverts/0001-Revert-xyz.patch"
 
 	if [ "x${regenerate}" = "xenable" ] ; then
 		wdir="reverts"
@@ -391,6 +383,7 @@ drivers () {
 	dir 'drivers/ti/eqep'
 	dir 'drivers/ti/rpmsg'
 	dir 'drivers/ti/serial'
+	dir 'drivers/ti/spi'
 	dir 'drivers/ti/tsc'
 	dir 'drivers/ti/uio'
 	dir 'drivers/ti/gpio'
diff --git a/patches/WireGuard/0001-merge-WireGuard.patch b/patches/WireGuard/0001-merge-WireGuard.patch
index f0bbce95ae667a321a8d4088b8c87a599dd4c154..0cfd7cec9e29a1e2bec35904d2c52eb3fa0750e1 100644
--- a/patches/WireGuard/0001-merge-WireGuard.patch
+++ b/patches/WireGuard/0001-merge-WireGuard.patch
@@ -1,6 +1,6 @@
-From 0b3b3c6510257e1391432c9e5f0e29d4ca7c380f Mon Sep 17 00:00:00 2001
+From 6ddf9330f2b176f1056bd095ca397b5f67d6fc1a Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Mon, 11 Jun 2018 19:19:50 -0500
+Date: Sat, 16 Jun 2018 11:07:05 -0500
 Subject: [PATCH] merge: WireGuard
 
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
@@ -39,8 +39,8 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
  net/wireguard/crypto/chacha20-x86_64.S        | 2630 ++++++++++++++++
  net/wireguard/crypto/chacha20.c               |  239 ++
  net/wireguard/crypto/chacha20.h               |   46 +
- net/wireguard/crypto/chacha20poly1305.c       |  280 ++
- net/wireguard/crypto/chacha20poly1305.h       |   90 +
+ net/wireguard/crypto/chacha20poly1305.c       |  281 ++
+ net/wireguard/crypto/chacha20poly1305.h       |   51 +
  net/wireguard/crypto/curve25519-arm.S         | 2110 +++++++++++++
  net/wireguard/crypto/curve25519-arm.h         |   14 +
  net/wireguard/crypto/curve25519-fiat32.h      |  838 +++++
@@ -55,6 +55,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
  net/wireguard/crypto/poly1305-x86_64.S        | 2790 +++++++++++++++++
  net/wireguard/crypto/poly1305.c               |  375 +++
  net/wireguard/crypto/poly1305.h               |   34 +
+ net/wireguard/crypto/simd.h                   |   59 +
  net/wireguard/device.c                        |  426 +++
  net/wireguard/device.h                        |   64 +
  net/wireguard/hashtables.c                    |  168 +
@@ -71,7 +72,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
  net/wireguard/queueing.h                      |  145 +
  net/wireguard/ratelimiter.c                   |  199 ++
  net/wireguard/ratelimiter.h                   |   19 +
- net/wireguard/receive.c                       |  490 +++
+ net/wireguard/receive.c                       |  495 +++
  net/wireguard/selftest/allowedips.h           |  586 ++++
  net/wireguard/selftest/blake2s.h              |  559 ++++
  net/wireguard/selftest/chacha20poly1305.h     | 1418 +++++++++
@@ -79,14 +80,14 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
  net/wireguard/selftest/curve25519.h           |  607 ++++
  net/wireguard/selftest/poly1305.h             | 1568 +++++++++
  net/wireguard/selftest/ratelimiter.h          |  157 +
- net/wireguard/send.c                          |  351 +++
+ net/wireguard/send.c                          |  352 +++
  net/wireguard/socket.c                        |  393 +++
  net/wireguard/socket.h                        |   35 +
  net/wireguard/timers.c                        |  195 ++
  net/wireguard/timers.h                        |   22 +
  net/wireguard/uapi/wireguard.h                |  182 ++
  net/wireguard/version.h                       |    1 +
- 81 files changed, 33688 insertions(+)
+ 82 files changed, 33715 insertions(+)
  create mode 100644 net/wireguard/Kconfig
  create mode 100644 net/wireguard/Makefile
  create mode 100644 net/wireguard/allowedips.c
@@ -135,6 +136,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
  create mode 100644 net/wireguard/crypto/poly1305-x86_64.S
  create mode 100644 net/wireguard/crypto/poly1305.c
  create mode 100644 net/wireguard/crypto/poly1305.h
+ create mode 100644 net/wireguard/crypto/simd.h
  create mode 100644 net/wireguard/device.c
  create mode 100644 net/wireguard/device.h
  create mode 100644 net/wireguard/hashtables.c
@@ -12431,10 +12433,10 @@ index 000000000000..01fb99abf34a
 +#endif /* _WG_CHACHA20_H */
 diff --git a/net/wireguard/crypto/chacha20poly1305.c b/net/wireguard/crypto/chacha20poly1305.c
 new file mode 100644
-index 000000000000..ccc6e1c9fa68
+index 000000000000..df1c5aa99bd0
 --- /dev/null
 +++ b/net/wireguard/crypto/chacha20poly1305.c
-@@ -0,0 +1,280 @@
+@@ -0,0 +1,281 @@
 +/* SPDX-License-Identifier: GPL-2.0
 + *
 + * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
@@ -12443,6 +12445,7 @@ index 000000000000..ccc6e1c9fa68
 +#include "chacha20poly1305.h"
 +#include "chacha20.h"
 +#include "poly1305.h"
++#include "simd.h"
 +
 +#include <linux/kernel.h>
 +#include <crypto/scatterwalk.h>
@@ -12502,9 +12505,9 @@ index 000000000000..ccc6e1c9fa68
 +{
 +	bool have_simd;
 +
-+	have_simd = chacha20poly1305_init_simd();
++	have_simd = simd_get();
 +	__chacha20poly1305_encrypt(dst, src, src_len, ad, ad_len, nonce, key, have_simd);
-+	chacha20poly1305_deinit_simd(have_simd);
++	simd_put(have_simd);
 +}
 +
 +bool chacha20poly1305_encrypt_sg(struct scatterlist *dst, struct scatterlist *src, const size_t src_len,
@@ -12613,9 +12616,9 @@ index 000000000000..ccc6e1c9fa68
 +{
 +	bool have_simd, ret;
 +
-+	have_simd = chacha20poly1305_init_simd();
++	have_simd = simd_get();
 +	ret = __chacha20poly1305_decrypt(dst, src, src_len, ad, ad_len, nonce, key, have_simd);
-+	chacha20poly1305_deinit_simd(have_simd);
++	simd_put(have_simd);
 +	return ret;
 +}
 +
@@ -12690,13 +12693,13 @@ index 000000000000..ccc6e1c9fa68
 +			       const u8 nonce[XCHACHA20POLY1305_NONCELEN],
 +			       const u8 key[CHACHA20POLY1305_KEYLEN])
 +{
-+	bool have_simd = chacha20poly1305_init_simd();
++	bool have_simd = simd_get();
 +	u8 derived_key[CHACHA20POLY1305_KEYLEN] __aligned(16);
 +
 +	hchacha20(derived_key, nonce, key, have_simd);
 +	__chacha20poly1305_encrypt(dst, src, src_len, ad, ad_len, le64_to_cpup((__le64 *)(nonce + 16)), derived_key, have_simd);
 +	memzero_explicit(derived_key, CHACHA20POLY1305_KEYLEN);
-+	chacha20poly1305_deinit_simd(have_simd);
++	simd_put(have_simd);
 +}
 +
 +bool xchacha20poly1305_decrypt(u8 *dst, const u8 *src, const size_t src_len,
@@ -12704,23 +12707,23 @@ index 000000000000..ccc6e1c9fa68
 +			       const u8 nonce[XCHACHA20POLY1305_NONCELEN],
 +			       const u8 key[CHACHA20POLY1305_KEYLEN])
 +{
-+	bool ret, have_simd = chacha20poly1305_init_simd();
++	bool ret, have_simd = simd_get();
 +	u8 derived_key[CHACHA20POLY1305_KEYLEN] __aligned(16);
 +
 +	hchacha20(derived_key, nonce, key, have_simd);
 +	ret = __chacha20poly1305_decrypt(dst, src, src_len, ad, ad_len, le64_to_cpup((__le64 *)(nonce + 16)), derived_key, have_simd);
 +	memzero_explicit(derived_key, CHACHA20POLY1305_KEYLEN);
-+	chacha20poly1305_deinit_simd(have_simd);
++	simd_put(have_simd);
 +	return ret;
 +}
 +
 +#include "../selftest/chacha20poly1305.h"
 diff --git a/net/wireguard/crypto/chacha20poly1305.h b/net/wireguard/crypto/chacha20poly1305.h
 new file mode 100644
-index 000000000000..39919cd11918
+index 000000000000..43b0a17bdb33
 --- /dev/null
 +++ b/net/wireguard/crypto/chacha20poly1305.h
-@@ -0,0 +1,90 @@
+@@ -0,0 +1,51 @@
 +/* SPDX-License-Identifier: GPL-2.0
 + *
 + * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
@@ -12767,45 +12770,6 @@ index 000000000000..39919cd11918
 +					    const u8 nonce[XCHACHA20POLY1305_NONCELEN],
 +					    const u8 key[CHACHA20POLY1305_KEYLEN]);
 +
-+#if defined(CONFIG_X86_64)
-+#include <linux/version.h>
-+#include <asm/fpu/api.h>
-+#include <asm/simd.h>
-+#elif IS_ENABLED(CONFIG_KERNEL_MODE_NEON)
-+#include <asm/neon.h>
-+#include <asm/simd.h>
-+#endif
-+
-+static inline bool chacha20poly1305_init_simd(void)
-+{
-+	bool have_simd = false;
-+#if defined(CONFIG_X86_64) && !defined(CONFIG_UML)
-+	have_simd = irq_fpu_usable();
-+	if (have_simd)
-+		kernel_fpu_begin();
-+#elif IS_ENABLED(CONFIG_KERNEL_MODE_NEON)
-+#if defined(CONFIG_ARM64)
-+	have_simd = true; /* ARM64 supports NEON in any context. */
-+#elif defined(CONFIG_ARM)
-+	have_simd = may_use_simd(); /* ARM doesn't support NEON in interrupt context. */
-+#endif
-+	if (have_simd)
-+		kernel_neon_begin();
-+#endif
-+	return have_simd;
-+}
-+
-+static inline void chacha20poly1305_deinit_simd(bool was_on)
-+{
-+#if defined(CONFIG_X86_64) && !defined(CONFIG_UML)
-+	if (was_on)
-+		kernel_fpu_end();
-+#elif IS_ENABLED(CONFIG_KERNEL_MODE_NEON)
-+	if (was_on)
-+		kernel_neon_end();
-+#endif
-+}
-+
 +#ifdef DEBUG
 +bool chacha20poly1305_selftest(void);
 +#endif
@@ -24701,6 +24665,71 @@ index 000000000000..876234c53701
 +#endif
 +
 +#endif /* _WG_POLY1305_H */
+diff --git a/net/wireguard/crypto/simd.h b/net/wireguard/crypto/simd.h
+new file mode 100644
+index 000000000000..07936bff4362
+--- /dev/null
++++ b/net/wireguard/crypto/simd.h
+@@ -0,0 +1,59 @@
++/* SPDX-License-Identifier: GPL-2.0
++ *
++ * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
++ */
++
++#ifndef _WG_SIMD_H
++#define _WG_SIMD_H
++
++#if defined(CONFIG_X86_64)
++#include <linux/version.h>
++#include <asm/fpu/api.h>
++#include <asm/simd.h>
++#elif IS_ENABLED(CONFIG_KERNEL_MODE_NEON)
++#include <asm/neon.h>
++#include <asm/simd.h>
++#endif
++
++static inline bool simd_get(void)
++{
++	bool have_simd = false;
++#if defined(CONFIG_X86_64) && !defined(CONFIG_UML) && !defined(CONFIG_PREEMPT_RT_BASE)
++	have_simd = irq_fpu_usable();
++	if (have_simd)
++		kernel_fpu_begin();
++#elif IS_ENABLED(CONFIG_KERNEL_MODE_NEON) && !defined(CONFIG_PREEMPT_RT_BASE)
++#if defined(CONFIG_ARM64)
++	have_simd = true; /* ARM64 supports NEON in any context. */
++#elif defined(CONFIG_ARM)
++	have_simd = may_use_simd(); /* ARM doesn't support NEON in interrupt context. */
++#endif
++	if (have_simd)
++		kernel_neon_begin();
++#endif
++	return have_simd;
++}
++
++static inline void simd_put(bool was_on)
++{
++#if defined(CONFIG_X86_64) && !defined(CONFIG_UML) && !defined(CONFIG_PREEMPT_RT_BASE)
++	if (was_on)
++		kernel_fpu_end();
++#elif IS_ENABLED(CONFIG_KERNEL_MODE_NEON) && !defined(CONFIG_PREEMPT_RT_BASE)
++	if (was_on)
++		kernel_neon_end();
++#endif
++}
++
++static inline bool simd_relax(bool was_on)
++{
++#ifdef CONFIG_PREEMPT
++	if (was_on && need_resched()) {
++		simd_put(true);
++		return simd_get();
++	}
++#endif
++	return was_on;
++}
++
++#endif /* _WG_SIMD_H */
 diff --git a/net/wireguard/device.c b/net/wireguard/device.c
 new file mode 100644
 index 000000000000..40b9e5cac614
@@ -27174,7 +27203,7 @@ index 000000000000..eb343c1cff74
 +#endif /* _WG_PEER_H */
 diff --git a/net/wireguard/queueing.c b/net/wireguard/queueing.c
 new file mode 100644
-index 000000000000..85dea6be3fef
+index 000000000000..f33395e29c11
 --- /dev/null
 +++ b/net/wireguard/queueing.c
 @@ -0,0 +1,46 @@
@@ -27221,7 +27250,7 @@ index 000000000000..85dea6be3fef
 +{
 +	if (multicore)
 +		free_percpu(queue->worker);
-+	WARN_ON(!ptr_ring_empty_bh(&queue->ring));
++	WARN_ON(!__ptr_ring_empty(&queue->ring));
 +	ptr_ring_cleanup(&queue->ring, NULL);
 +}
 diff --git a/net/wireguard/queueing.h b/net/wireguard/queueing.h
@@ -27607,10 +27636,10 @@ index 000000000000..8931c0615374
 +#endif /* _WG_RATELIMITER_H */
 diff --git a/net/wireguard/receive.c b/net/wireguard/receive.c
 new file mode 100644
-index 000000000000..27d3d04f7fb6
+index 000000000000..c5062f884009
 --- /dev/null
 +++ b/net/wireguard/receive.c
-@@ -0,0 +1,490 @@
+@@ -0,0 +1,495 @@
 +/* SPDX-License-Identifier: GPL-2.0
 + *
 + * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
@@ -27623,6 +27652,7 @@ index 000000000000..27d3d04f7fb6
 +#include "messages.h"
 +#include "cookie.h"
 +#include "socket.h"
++#include "crypto/simd.h"
 +
 +#include <linux/ip.h>
 +#include <linux/ipv6.h>
@@ -27991,7 +28021,6 @@ index 000000000000..27d3d04f7fb6
 +	bool free;
 +
 +	local_bh_disable();
-+	spin_lock_bh(&queue->ring.consumer_lock);
 +	while ((skb = __ptr_ring_peek(&queue->ring)) != NULL && (state = atomic_read(&PACKET_CB(skb)->state)) != PACKET_STATE_UNCRYPTED) {
 +		__ptr_ring_discard_one(&queue->ring);
 +		peer = PACKET_PEER(skb);
@@ -28018,8 +28047,13 @@ index 000000000000..27d3d04f7fb6
 +		peer_put(peer);
 +		if (unlikely(free))
 +			dev_kfree_skb(skb);
++
++		/* Don't totally kill scheduling latency by keeping preemption disabled forever. */
++		if (need_resched()) {
++			local_bh_enable();
++			local_bh_disable();
++		}
 +	}
-+	spin_unlock_bh(&queue->ring.consumer_lock);
 +	local_bh_enable();
 +}
 +
@@ -28027,15 +28061,15 @@ index 000000000000..27d3d04f7fb6
 +{
 +	struct crypt_queue *queue = container_of(work, struct multicore_worker, work)->ptr;
 +	struct sk_buff *skb;
-+	bool have_simd = chacha20poly1305_init_simd();
++	bool have_simd = simd_get();
 +
 +	while ((skb = ptr_ring_consume_bh(&queue->ring)) != NULL) {
 +		enum packet_state state = likely(skb_decrypt(skb, &PACKET_CB(skb)->keypair->receiving, have_simd)) ? PACKET_STATE_CRYPTED : PACKET_STATE_DEAD;
-+
 +		queue_enqueue_per_peer(&PACKET_PEER(skb)->rx_queue, skb, state);
++		have_simd = simd_relax(have_simd);
 +	}
 +
-+	chacha20poly1305_deinit_simd(have_simd);
++	simd_put(have_simd);
 +}
 +
 +static void packet_consume_data(struct wireguard_device *wg, struct sk_buff *skb)
@@ -29260,7 +29294,7 @@ index 000000000000..3770d05d2139
 +#endif
 diff --git a/net/wireguard/selftest/chacha20poly1305.h b/net/wireguard/selftest/chacha20poly1305.h
 new file mode 100644
-index 000000000000..e9070ba383a4
+index 000000000000..9baca0b06260
 --- /dev/null
 +++ b/net/wireguard/selftest/chacha20poly1305.h
 @@ -0,0 +1,1418 @@
@@ -30552,7 +30586,7 @@ index 000000000000..e9070ba383a4
 +
 +static inline void chacha20poly1305_selftest_encrypt_bignonce(u8 *dst, const u8 *src, const size_t src_len, const u8 *ad, const size_t ad_len, const u8 nonce[12], const u8 key[CHACHA20POLY1305_KEYLEN])
 +{
-+	bool have_simd = chacha20poly1305_init_simd();
++	bool have_simd = simd_get();
 +	struct poly1305_ctx poly1305_state;
 +	struct chacha20_ctx chacha20_state;
 +	union {
@@ -30575,7 +30609,7 @@ index 000000000000..e9070ba383a4
 +	b.lens[1] = cpu_to_le64(src_len);
 +	poly1305_update(&poly1305_state, (u8 *)b.lens, sizeof(b.lens), have_simd);
 +	poly1305_finish(&poly1305_state, dst + src_len, have_simd);
-+	chacha20poly1305_deinit_simd(have_simd);
++	simd_put(have_simd);
 +	memzero_explicit(&chacha20_state, sizeof(chacha20_state));
 +	memzero_explicit(&b, sizeof(b));
 +}
@@ -30623,7 +30657,7 @@ index 000000000000..e9070ba383a4
 +			success = false;
 +		}
 +	}
-+	have_simd = chacha20poly1305_init_simd();
++	have_simd = simd_get();
 +	for (i = 0; i < ARRAY_SIZE(chacha20poly1305_enc_vectors); ++i) {
 +		if (chacha20poly1305_enc_vectors[i].nlen != 8)
 +			continue;
@@ -30637,7 +30671,7 @@ index 000000000000..e9070ba383a4
 +			success = false;
 +		}
 +	}
-+	chacha20poly1305_deinit_simd(have_simd);
++	simd_put(have_simd);
 +	for (i = 0; i < ARRAY_SIZE(chacha20poly1305_dec_vectors); ++i) {
 +		memset(computed_result, 0, sizeof(computed_result));
 +		ret = chacha20poly1305_decrypt(computed_result, chacha20poly1305_dec_vectors[i].input, chacha20poly1305_dec_vectors[i].ilen, chacha20poly1305_dec_vectors[i].assoc, chacha20poly1305_dec_vectors[i].alen, le64_to_cpu(*(__force __le64 *)chacha20poly1305_dec_vectors[i].nonce), chacha20poly1305_dec_vectors[i].key);
@@ -30646,7 +30680,7 @@ index 000000000000..e9070ba383a4
 +			success = false;
 +		}
 +	}
-+	have_simd = chacha20poly1305_init_simd();
++	have_simd = simd_get();
 +	for (i = 0; i < ARRAY_SIZE(chacha20poly1305_dec_vectors); ++i) {
 +		memset(heap_dst, 0, MAXIMUM_TEST_BUFFER_LEN);
 +		memcpy(heap_src, chacha20poly1305_dec_vectors[i].input, chacha20poly1305_dec_vectors[i].ilen);
@@ -30658,7 +30692,7 @@ index 000000000000..e9070ba383a4
 +			success = false;
 +		}
 +	}
-+	chacha20poly1305_deinit_simd(have_simd);
++	simd_put(have_simd);
 +	for (i = 0; i < ARRAY_SIZE(xchacha20poly1305_enc_vectors); ++i) {
 +		memset(computed_result, 0, sizeof(computed_result));
 +		xchacha20poly1305_encrypt(computed_result, xchacha20poly1305_enc_vectors[i].input, xchacha20poly1305_enc_vectors[i].ilen, xchacha20poly1305_enc_vectors[i].assoc, xchacha20poly1305_enc_vectors[i].alen, xchacha20poly1305_enc_vectors[i].nonce, xchacha20poly1305_enc_vectors[i].key);
@@ -31395,7 +31429,7 @@ index 000000000000..1f099e9fb219
 +#endif
 diff --git a/net/wireguard/selftest/poly1305.h b/net/wireguard/selftest/poly1305.h
 new file mode 100644
-index 000000000000..41acf7c07ab5
+index 000000000000..7439ac05e790
 --- /dev/null
 +++ b/net/wireguard/selftest/poly1305.h
 @@ -0,0 +1,1568 @@
@@ -32890,7 +32924,7 @@ index 000000000000..41acf7c07ab5
 +
 +bool __init poly1305_selftest(void)
 +{
-+	bool have_simd = chacha20poly1305_init_simd();
++	bool have_simd = simd_get();
 +	bool success = true;
 +	size_t i;
 +
@@ -32959,7 +32993,7 @@ index 000000000000..41acf7c07ab5
 +			}
 +		}
 +	}
-+	chacha20poly1305_deinit_simd(have_simd);
++	simd_put(have_simd);
 +
 +	if (success)
 +		pr_info("poly1305 self-tests: pass\n");
@@ -33132,10 +33166,10 @@ index 000000000000..7e017ce5ab60
 +#endif
 diff --git a/net/wireguard/send.c b/net/wireguard/send.c
 new file mode 100644
-index 000000000000..6e04ad45b800
+index 000000000000..d3e3d752d84d
 --- /dev/null
 +++ b/net/wireguard/send.c
-@@ -0,0 +1,351 @@
+@@ -0,0 +1,352 @@
 +/* SPDX-License-Identifier: GPL-2.0
 + *
 + * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
@@ -33148,6 +33182,7 @@ index 000000000000..6e04ad45b800
 +#include "socket.h"
 +#include "messages.h"
 +#include "cookie.h"
++#include "crypto/simd.h"
 +
 +#include <linux/uio.h>
 +#include <linux/inetdevice.h>
@@ -33361,7 +33396,6 @@ index 000000000000..6e04ad45b800
 +	struct sk_buff *first;
 +	enum packet_state state;
 +
-+	spin_lock_bh(&queue->ring.consumer_lock);
 +	while ((first = __ptr_ring_peek(&queue->ring)) != NULL && (state = atomic_read(&PACKET_CB(first)->state)) != PACKET_STATE_UNCRYPTED) {
 +		__ptr_ring_discard_one(&queue->ring);
 +		peer = PACKET_PEER(first);
@@ -33375,14 +33409,13 @@ index 000000000000..6e04ad45b800
 +		noise_keypair_put(keypair);
 +		peer_put(peer);
 +	}
-+	spin_unlock_bh(&queue->ring.consumer_lock);
 +}
 +
 +void packet_encrypt_worker(struct work_struct *work)
 +{
 +	struct crypt_queue *queue = container_of(work, struct multicore_worker, work)->ptr;
 +	struct sk_buff *first, *skb, *next;
-+	bool have_simd = chacha20poly1305_init_simd();
++	bool have_simd = simd_get();
 +
 +	while ((first = ptr_ring_consume_bh(&queue->ring)) != NULL) {
 +		enum packet_state state = PACKET_STATE_CRYPTED;
@@ -33396,8 +33429,10 @@ index 000000000000..6e04ad45b800
 +			}
 +		}
 +		queue_enqueue_per_peer(&PACKET_PEER(first)->tx_queue, first, state);
++
++		have_simd = simd_relax(have_simd);
 +	}
-+	chacha20poly1305_deinit_simd(have_simd);
++	simd_put(have_simd);
 +}
 +
 +static void packet_create_data(struct sk_buff *first)
@@ -34346,11 +34381,11 @@ index 000000000000..8b8a1f254bb6
 +#endif /* _WG_UAPI_WIREGUARD_H */
 diff --git a/net/wireguard/version.h b/net/wireguard/version.h
 new file mode 100644
-index 000000000000..59830cc36ebe
+index 000000000000..f990e776297e
 --- /dev/null
 +++ b/net/wireguard/version.h
 @@ -0,0 +1 @@
-+#define WIREGUARD_VERSION "0.0.20180531"
++#define WIREGUARD_VERSION "0.0.20180613"
 -- 
 2.17.1
 
diff --git a/patches/aufs4/0001-merge-aufs4-kbuild.patch b/patches/aufs4/0001-merge-aufs4-kbuild.patch
index 5f622fadf87f5468ceae1ae8e795b6e5f94fce27..b83e4fa78a7452e295f76e9ba5c3b4e318c5e687 100644
--- a/patches/aufs4/0001-merge-aufs4-kbuild.patch
+++ b/patches/aufs4/0001-merge-aufs4-kbuild.patch
@@ -1,6 +1,6 @@
-From c8e64b5be9b8e30f170383ede04aa51e3fa2f895 Mon Sep 17 00:00:00 2001
+From 322137d7bc2b35c737c5662f8a0a1a11bd1a7e08 Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Mon, 11 Jun 2018 19:19:30 -0500
+Date: Sat, 16 Jun 2018 11:06:52 -0500
 Subject: [PATCH 1/5] merge: aufs4-kbuild
 
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
diff --git a/patches/aufs4/0002-merge-aufs4-base.patch b/patches/aufs4/0002-merge-aufs4-base.patch
index 2934358ea3419d2b679da56871fd605361fa317f..3dd2c43827145d1053e0dbfe04171b0c5086f37e 100644
--- a/patches/aufs4/0002-merge-aufs4-base.patch
+++ b/patches/aufs4/0002-merge-aufs4-base.patch
@@ -1,6 +1,6 @@
-From 5ca0a07def8b939762865d9995de9094a1fdf32b Mon Sep 17 00:00:00 2001
+From c2f544f0144bde34377df302b1993aa38b50bc6e Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Mon, 11 Jun 2018 19:19:31 -0500
+Date: Sat, 16 Jun 2018 11:06:52 -0500
 Subject: [PATCH 2/5] merge: aufs4-base
 
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
diff --git a/patches/aufs4/0003-merge-aufs4-mmap.patch b/patches/aufs4/0003-merge-aufs4-mmap.patch
index 6d93ecfa23b599a0d96a6a981a0eeadef1f66a32..9453d4b6f42654c6ef22e9933537c57c8f5c13be 100644
--- a/patches/aufs4/0003-merge-aufs4-mmap.patch
+++ b/patches/aufs4/0003-merge-aufs4-mmap.patch
@@ -1,6 +1,6 @@
-From 99795a8eb855533f495a00857d9aa63eea86dcec Mon Sep 17 00:00:00 2001
+From e11667189e9e743262876fe8becf1024938d0764 Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Mon, 11 Jun 2018 19:19:31 -0500
+Date: Sat, 16 Jun 2018 11:06:53 -0500
 Subject: [PATCH 3/5] merge: aufs4-mmap
 
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
diff --git a/patches/aufs4/0004-merge-aufs4-standalone.patch b/patches/aufs4/0004-merge-aufs4-standalone.patch
index dbea6acc0556cb1272533796c6fc67837171c78e..8373a539f52896111c727a052816333362bb9e65 100644
--- a/patches/aufs4/0004-merge-aufs4-standalone.patch
+++ b/patches/aufs4/0004-merge-aufs4-standalone.patch
@@ -1,6 +1,6 @@
-From cb3a572dd265dd407ae7697da1e6fee56be3a160 Mon Sep 17 00:00:00 2001
+From d7c08025ee3c3aa07aea25c2ad128eee066515c0 Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Mon, 11 Jun 2018 19:19:32 -0500
+Date: Sat, 16 Jun 2018 11:06:54 -0500
 Subject: [PATCH 4/5] merge: aufs4-standalone
 
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
diff --git a/patches/aufs4/0005-merge-aufs4.patch b/patches/aufs4/0005-merge-aufs4.patch
index 2c351f800f62970081cd1113e59fc2c09cd90856..1b5c210195bbdb96951a352a358ca9a43861b8ed 100644
--- a/patches/aufs4/0005-merge-aufs4.patch
+++ b/patches/aufs4/0005-merge-aufs4.patch
@@ -1,6 +1,6 @@
-From 870f4207dad3d654481edf0da2f00d956ed161d2 Mon Sep 17 00:00:00 2001
+From a573da02a3c28546c3136e978d5f12cfc93d8b70 Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Mon, 11 Jun 2018 19:19:33 -0500
+Date: Sat, 16 Jun 2018 11:06:55 -0500
 Subject: [PATCH 5/5] merge: aufs4
 
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
diff --git a/patches/drivers/ti/spi/0001-am33xx-spi-we-want-spidev1-spidev2-for-compability-w.patch b/patches/drivers/ti/spi/0001-am33xx-spi-we-want-spidev1-spidev2-for-compability-w.patch
new file mode 100644
index 0000000000000000000000000000000000000000..123c0d6bcfcc66d5ebdf39c144216be907c995e9
--- /dev/null
+++ b/patches/drivers/ti/spi/0001-am33xx-spi-we-want-spidev1-spidev2-for-compability-w.patch
@@ -0,0 +1,29 @@
+From 14cee610e545005f71c116b845d4104221884ed3 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Fri, 15 Jun 2018 13:21:34 -0500
+Subject: [PATCH] am33xx: spi: we want spidev1/spidev2 for compability with
+ v4.4/v4.9
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/boot/dts/am33xx.dtsi | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
+index a048086d10b8..d30a40e4b872 100644
+--- a/arch/arm/boot/dts/am33xx.dtsi
++++ b/arch/arm/boot/dts/am33xx.dtsi
+@@ -36,8 +36,8 @@
+ 		phy1 = &usb1_phy;
+ 		ethernet0 = &cpsw_emac0;
+ 		ethernet1 = &cpsw_emac1;
+-		spi0 = &spi0;
+-		spi1 = &spi1;
++		spi1 = &spi0;
++		spi2 = &spi1;
+ 	};
+ 
+ 	cpus {
+-- 
+2.17.1
+
diff --git a/patches/ref_omap2plus_defconfig b/patches/ref_omap2plus_defconfig
index 5462a56b4b5021206a1e55d3e9e8e780c96a3e40..b45fce9ed503fba430a4eb8aaa2d08b7386917d3 100644
--- a/patches/ref_omap2plus_defconfig
+++ b/patches/ref_omap2plus_defconfig
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 4.17.1 Kernel Configuration
+# Linux/arm 4.17.2 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_ARM_HAS_SG_CHAIN=y
diff --git a/version.sh b/version.sh
index ac376556788a569dc6e4459c5bcd850d68ba26d8..f72363f60685384b286c7d78f23b9bab5c3b637c 100644
--- a/version.sh
+++ b/version.sh
@@ -30,10 +30,10 @@ toolchain="gcc_linaro_gnueabihf_7"
 
 #Kernel
 KERNEL_REL=4.17
-KERNEL_TAG=${KERNEL_REL}.1
+KERNEL_TAG=${KERNEL_REL}.2
 kernel_rt=".X-rtY"
 #Kernel Build
-BUILD=${build_prefix}2
+BUILD=${build_prefix}3
 
 #v4.X-rcX + upto SHA
 #prev_KERNEL_SHA=""