mirror of
https://github.com/hanwckf/immortalwrt-mt798x.git
synced 2025-01-07 01:53:34 +08:00
Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
129eaabbd8
@ -6,9 +6,9 @@ ifdef CONFIG_TESTING_KERNEL
|
||||
KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER)
|
||||
endif
|
||||
|
||||
LINUX_VERSION-5.4 = .171
|
||||
LINUX_VERSION-5.4 = .179
|
||||
|
||||
LINUX_KERNEL_HASH-5.4.171 = afbcc8ed7d85485af299567f307b03057ffff3ec7bee02a21c33933d435b4958
|
||||
LINUX_KERNEL_HASH-5.4.179 = 2c9bdec0922a95aff34e8d53d2e0ecf7e842033cd908d2959a43d34afb5d897d
|
||||
|
||||
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
|
||||
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
|
||||
|
@ -8,13 +8,13 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=mbedtls
|
||||
PKG_VERSION:=2.16.11
|
||||
PKG_VERSION:=2.16.12
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
PKG_USE_MIPS16:=0
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/ARMmbed/mbedtls/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=c18e7e9abf95e69e425260493720470021384a1728417042060a35d0b7b18b41
|
||||
PKG_HASH:=294871ab1864a65d0b74325e9219d5bcd6e91c34a3c59270c357bb9ae4d5c393
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_LICENSE:=GPL-2.0-or-later
|
||||
|
@ -1,13 +1,13 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ustream-ssl
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/ustream-ssl.git
|
||||
PKG_SOURCE_DATE:=2020-12-10
|
||||
PKG_SOURCE_VERSION:=68d09243b6fd4473004b27ff6483352e76e6af1a
|
||||
PKG_MIRROR_HASH:=a620090dee08c0624d167c10e9e45d54aa2b953a1f356eff7325a8fe53c622e6
|
||||
PKG_SOURCE_DATE:=2022-01-16
|
||||
PKG_SOURCE_VERSION:=868fd8812f477c110f9c6c5252c0bd172167b94c
|
||||
PKG_MIRROR_HASH:=dd28d5e846b391917cf83d66176653bdfa4e8a0d5b11144b65a012fe7693ddeb
|
||||
CMAKE_INSTALL:=1
|
||||
|
||||
PKG_LICENSE:=ISC
|
||||
|
@ -49,7 +49,11 @@ config WOLFSSL_HAS_WPAS
|
||||
|
||||
config WOLFSSL_HAS_ECC25519
|
||||
bool "Include ECC Curve 25519 support"
|
||||
default n
|
||||
default y
|
||||
|
||||
config WOLFSSL_ALT_NAMES
|
||||
bool "Include SAN (Subject Alternative Name) support"
|
||||
default y
|
||||
|
||||
config WOLFSSL_HAS_DEVCRYPTO
|
||||
bool
|
||||
|
@ -8,12 +8,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=wolfssl
|
||||
PKG_VERSION:=4.8.1-stable
|
||||
PKG_VERSION:=5.1.1-stable
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://github.com/wolfSSL/wolfssl/archive/v$(PKG_VERSION)
|
||||
PKG_HASH:=50db45f348f47e00c93dd244c24108220120cb3cc9d01434789229c32937c444
|
||||
PKG_HASH:=d3e0544dbe7e9587c0f6538cdc671b6492663bb7a4281819538abe6c99cdbd92
|
||||
|
||||
PKG_FIXUP:=libtool libtool-abiver
|
||||
PKG_INSTALL:=1
|
||||
@ -31,7 +31,8 @@ PKG_CONFIG_DEPENDS:=\
|
||||
CONFIG_WOLFSSL_HAS_DH CONFIG_WOLFSSL_HAS_DTLS \
|
||||
CONFIG_WOLFSSL_HAS_ECC25519 CONFIG_WOLFSSL_HAS_OCSP \
|
||||
CONFIG_WOLFSSL_HAS_SESSION_TICKET CONFIG_WOLFSSL_HAS_TLSV10 \
|
||||
CONFIG_WOLFSSL_HAS_TLSV13 CONFIG_WOLFSSL_HAS_WPAS CONFIG_WOLFSSL_HAS_CERTGEN
|
||||
CONFIG_WOLFSSL_HAS_TLSV13 CONFIG_WOLFSSL_HAS_WPAS CONFIG_WOLFSSL_HAS_CERTGEN \
|
||||
CONFIG_WOLFSSL_ALT_NAMES
|
||||
|
||||
PKG_ABI_VERSION=$(patsubst %-stable,%,$(PKG_VERSION)).$(call version_abbrev,$(call confvar,$(PKG_CONFIG_DEPENDS)))
|
||||
|
||||
@ -63,7 +64,7 @@ TARGET_CFLAGS += \
|
||||
-fomit-frame-pointer \
|
||||
-flto \
|
||||
-DFP_MAX_BITS=8192 \
|
||||
-DWOLFSSL_ALT_CERT_CHAINS
|
||||
$(if $(CONFIG_WOLFSSL_ALT_NAMES),-DWOLFSSL_ALT_NAMES)
|
||||
|
||||
TARGET_LDFLAGS += -flto
|
||||
|
||||
@ -75,6 +76,7 @@ CONFIGURE_ARGS += \
|
||||
--enable-opensslextra \
|
||||
--enable-sni \
|
||||
--enable-stunnel \
|
||||
--enable-altcertchains \
|
||||
--disable-crypttests \
|
||||
--disable-examples \
|
||||
--disable-jobserver \
|
||||
|
@ -1,116 +0,0 @@
|
||||
From fa8f23284d4689c2a737204b337b58d966dcbd8c Mon Sep 17 00:00:00 2001
|
||||
From: Sean Parkinson <sean@wolfssl.com>
|
||||
Date: Fri, 20 Aug 2021 10:23:38 +1000
|
||||
Subject: [PATCH] Maths x86 asm: change asm snippets to get compiling
|
||||
|
||||
TFM:
|
||||
Use register or memory for c0, c1, c2 in SQRADD and SQRADD2.
|
||||
SP:
|
||||
Use register or memory for vl, vh, vo in SP_ASM_MUL_ADD,
|
||||
SP_ASM_MUL_ADD2 and SP_ASM_SQR_ADD.
|
||||
---
|
||||
wolfcrypt/src/asm.c | 29 ++++++++++++++++++++---------
|
||||
wolfcrypt/src/sp_int.c | 6 +++---
|
||||
2 files changed, 23 insertions(+), 12 deletions(-)
|
||||
|
||||
--- a/wolfcrypt/src/asm.c
|
||||
+++ b/wolfcrypt/src/asm.c
|
||||
@@ -698,33 +698,39 @@ __asm__( \
|
||||
|
||||
#define SQRADD(i, j) \
|
||||
__asm__( \
|
||||
- "movl %6,%%eax \n\t" \
|
||||
+ "movl %3,%%eax \n\t" \
|
||||
"mull %%eax \n\t" \
|
||||
"addl %%eax,%0 \n\t" \
|
||||
"adcl %%edx,%1 \n\t" \
|
||||
"adcl $0,%2 \n\t" \
|
||||
- :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i) :"%eax","%edx","cc");
|
||||
+ :"+rm"(c0), "+rm"(c1), "+rm"(c2) \
|
||||
+ : "m"(i) \
|
||||
+ :"%eax","%edx","cc");
|
||||
|
||||
#define SQRADD2(i, j) \
|
||||
__asm__( \
|
||||
- "movl %6,%%eax \n\t" \
|
||||
- "mull %7 \n\t" \
|
||||
+ "movl %3,%%eax \n\t" \
|
||||
+ "mull %4 \n\t" \
|
||||
"addl %%eax,%0 \n\t" \
|
||||
"adcl %%edx,%1 \n\t" \
|
||||
"adcl $0,%2 \n\t" \
|
||||
"addl %%eax,%0 \n\t" \
|
||||
"adcl %%edx,%1 \n\t" \
|
||||
"adcl $0,%2 \n\t" \
|
||||
- :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i), "m"(j) :"%eax","%edx", "cc");
|
||||
+ :"+rm"(c0), "+rm"(c1), "+rm"(c2) \
|
||||
+ : "m"(i), "m"(j) \
|
||||
+ :"%eax","%edx", "cc");
|
||||
|
||||
#define SQRADDSC(i, j) \
|
||||
-__asm__( \
|
||||
+__asm__( \
|
||||
"movl %3,%%eax \n\t" \
|
||||
"mull %4 \n\t" \
|
||||
"movl %%eax,%0 \n\t" \
|
||||
"movl %%edx,%1 \n\t" \
|
||||
"xorl %2,%2 \n\t" \
|
||||
- :"=r"(sc0), "=r"(sc1), "=r"(sc2): "g"(i), "g"(j) :"%eax","%edx","cc");
|
||||
+ :"=r"(sc0), "=r"(sc1), "=r"(sc2) \
|
||||
+ : "g"(i), "g"(j) \
|
||||
+ :"%eax","%edx","cc");
|
||||
|
||||
#define SQRADDAC(i, j) \
|
||||
__asm__( \
|
||||
@@ -733,7 +739,9 @@ __asm__(
|
||||
"addl %%eax,%0 \n\t" \
|
||||
"adcl %%edx,%1 \n\t" \
|
||||
"adcl $0,%2 \n\t" \
|
||||
- :"=r"(sc0), "=r"(sc1), "=r"(sc2): "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) :"%eax","%edx","cc");
|
||||
+ :"=r"(sc0), "=r"(sc1), "=r"(sc2) \
|
||||
+ : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
|
||||
+ :"%eax","%edx","cc");
|
||||
|
||||
#define SQRADDDB \
|
||||
__asm__( \
|
||||
@@ -743,7 +751,10 @@ __asm__(
|
||||
"addl %6,%0 \n\t" \
|
||||
"adcl %7,%1 \n\t" \
|
||||
"adcl %8,%2 \n\t" \
|
||||
- :"=r"(c0), "=r"(c1), "=r"(c2) : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) : "cc");
|
||||
+ :"=r"(c0), "=r"(c1), "=r"(c2) \
|
||||
+ : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), \
|
||||
+ "r"(sc2) \
|
||||
+ : "cc");
|
||||
|
||||
#elif defined(TFM_X86_64)
|
||||
/* x86-64 optimized */
|
||||
--- a/wolfcrypt/src/sp_int.c
|
||||
+++ b/wolfcrypt/src/sp_int.c
|
||||
@@ -476,7 +476,7 @@ static WC_INLINE sp_int_digit sp_div_wor
|
||||
"addl %%eax, %[l] \n\t" \
|
||||
"adcl %%edx, %[h] \n\t" \
|
||||
"adcl $0 , %[o] \n\t" \
|
||||
- : [l] "+r" (vl), [h] "+r" (vh), [o] "+r" (vo) \
|
||||
+ : [l] "+rm" (vl), [h] "+rm" (vh), [o] "+rm" (vo) \
|
||||
: [a] "r" (va), [b] "r" (vb) \
|
||||
: "eax", "edx", "cc" \
|
||||
)
|
||||
@@ -502,7 +502,7 @@ static WC_INLINE sp_int_digit sp_div_wor
|
||||
"addl %%eax, %[l] \n\t" \
|
||||
"adcl %%edx, %[h] \n\t" \
|
||||
"adcl $0 , %[o] \n\t" \
|
||||
- : [l] "+r" (vl), [h] "+r" (vh), [o] "+r" (vo) \
|
||||
+ : [l] "+rm" (vl), [h] "+rm" (vh), [o] "+rm" (vo) \
|
||||
: [a] "r" (va), [b] "r" (vb) \
|
||||
: "eax", "edx", "cc" \
|
||||
)
|
||||
@@ -541,7 +541,7 @@ static WC_INLINE sp_int_digit sp_div_wor
|
||||
"addl %%eax, %[l] \n\t" \
|
||||
"adcl %%edx, %[h] \n\t" \
|
||||
"adcl $0 , %[o] \n\t" \
|
||||
- : [l] "+r" (vl), [h] "+r" (vh), [o] "+r" (vo) \
|
||||
+ : [l] "+rm" (vl), [h] "+rm" (vh), [o] "+rm" (vo) \
|
||||
: [a] "m" (va) \
|
||||
: "eax", "edx", "cc" \
|
||||
)
|
@ -1,22 +0,0 @@
|
||||
From f447e4c1fa4c932c0286fa0331966756e243db81 Mon Sep 17 00:00:00 2001
|
||||
From: JacobBarthelmeh <jacob@wolfssl.com>
|
||||
Date: Fri, 17 Sep 2021 15:06:13 -0700
|
||||
Subject: [PATCH] update macro guard on SHA256 transform call
|
||||
|
||||
---
|
||||
src/ssl.c | 3 ++-
|
||||
tests/api.c | 3 ++-
|
||||
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/src/ssl.c
|
||||
+++ b/src/ssl.c
|
||||
@@ -17639,7 +17639,8 @@ size_t wolfSSL_get_client_random(const W
|
||||
|
||||
#if defined(OPENSSL_EXTRA)
|
||||
#if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || \
|
||||
- (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION > 2)))
|
||||
+ (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION > 2))) && \
|
||||
+ !defined(WOLFSSL_DEVCRYPTO_HASH) && !defined(WOLFSSL_AFALG_HASH)
|
||||
/* Apply SHA256 transformation to the data */
|
||||
int wolfSSL_SHA256_Transform(WOLFSSL_SHA256_CTX* sha256,
|
||||
const unsigned char* data)
|
@ -1,6 +1,6 @@
|
||||
--- a/wolfssl/wolfcrypt/settings.h
|
||||
+++ b/wolfssl/wolfcrypt/settings.h
|
||||
@@ -2274,7 +2274,7 @@ extern void uITRON4_free(void *p) ;
|
||||
@@ -2346,7 +2346,7 @@ extern void uITRON4_free(void *p) ;
|
||||
#endif
|
||||
|
||||
/* warning for not using harden build options (default with ./configure) */
|
||||
|
@ -11,7 +11,7 @@ RNG regardless of the built settings for wolfssl.
|
||||
|
||||
--- a/wolfcrypt/src/ecc.c
|
||||
+++ b/wolfcrypt/src/ecc.c
|
||||
@@ -10938,21 +10938,21 @@ void wc_ecc_fp_free(void)
|
||||
@@ -11647,21 +11647,21 @@ void wc_ecc_fp_free(void)
|
||||
|
||||
#endif /* FP_ECC */
|
||||
|
||||
@ -37,7 +37,7 @@ RNG regardless of the built settings for wolfssl.
|
||||
|
||||
--- a/wolfssl/wolfcrypt/ecc.h
|
||||
+++ b/wolfssl/wolfcrypt/ecc.h
|
||||
@@ -616,10 +616,8 @@ WOLFSSL_API
|
||||
@@ -647,10 +647,8 @@ WOLFSSL_API
|
||||
void wc_ecc_fp_free(void);
|
||||
WOLFSSL_LOCAL
|
||||
void wc_ecc_fp_init(void);
|
||||
|
@ -7,7 +7,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=hostapd
|
||||
PKG_RELEASE:=38
|
||||
PKG_RELEASE:=39
|
||||
|
||||
PKG_SOURCE_URL:=http://w1.fi/hostap.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
@ -0,0 +1,65 @@
|
||||
From 2232d3d5f188b65dbb6c823ac62175412739eb16 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Fri, 7 Jan 2022 13:47:16 +0200
|
||||
Subject: [PATCH 2/4] dragonfly: Add sqrt() helper function
|
||||
|
||||
This is a backport of "SAE: Move sqrt() implementation into a helper
|
||||
function" to introduce the helper function needed for the following
|
||||
patches.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
---
|
||||
src/common/dragonfly.c | 34 ++++++++++++++++++++++++++++++++++
|
||||
src/common/dragonfly.h | 2 ++
|
||||
2 files changed, 36 insertions(+)
|
||||
|
||||
--- a/src/common/dragonfly.c
|
||||
+++ b/src/common/dragonfly.c
|
||||
@@ -213,3 +213,37 @@ int dragonfly_generate_scalar(const stru
|
||||
"dragonfly: Unable to get randomness for own scalar");
|
||||
return -1;
|
||||
}
|
||||
+
|
||||
+
|
||||
+/* res = sqrt(val) */
|
||||
+int dragonfly_sqrt(struct crypto_ec *ec, const struct crypto_bignum *val,
|
||||
+ struct crypto_bignum *res)
|
||||
+{
|
||||
+ const struct crypto_bignum *prime;
|
||||
+ struct crypto_bignum *tmp, *one;
|
||||
+ int ret = 0;
|
||||
+ u8 prime_bin[DRAGONFLY_MAX_ECC_PRIME_LEN];
|
||||
+ size_t prime_len;
|
||||
+
|
||||
+ /* For prime p such that p = 3 mod 4, sqrt(w) = w^((p+1)/4) mod p */
|
||||
+
|
||||
+ prime = crypto_ec_get_prime(ec);
|
||||
+ prime_len = crypto_ec_prime_len(ec);
|
||||
+ tmp = crypto_bignum_init();
|
||||
+ one = crypto_bignum_init_uint(1);
|
||||
+
|
||||
+ if (crypto_bignum_to_bin(prime, prime_bin, sizeof(prime_bin),
|
||||
+ prime_len) < 0 ||
|
||||
+ (prime_bin[prime_len - 1] & 0x03) != 3 ||
|
||||
+ !tmp || !one ||
|
||||
+ /* tmp = (p+1)/4 */
|
||||
+ crypto_bignum_add(prime, one, tmp) < 0 ||
|
||||
+ crypto_bignum_rshift(tmp, 2, tmp) < 0 ||
|
||||
+ /* res = sqrt(val) */
|
||||
+ crypto_bignum_exptmod(val, tmp, prime, res) < 0)
|
||||
+ ret = -1;
|
||||
+
|
||||
+ crypto_bignum_deinit(tmp, 0);
|
||||
+ crypto_bignum_deinit(one, 0);
|
||||
+ return ret;
|
||||
+}
|
||||
--- a/src/common/dragonfly.h
|
||||
+++ b/src/common/dragonfly.h
|
||||
@@ -27,5 +27,7 @@ int dragonfly_generate_scalar(const stru
|
||||
struct crypto_bignum *_rand,
|
||||
struct crypto_bignum *_mask,
|
||||
struct crypto_bignum *scalar);
|
||||
+int dragonfly_sqrt(struct crypto_ec *ec, const struct crypto_bignum *val,
|
||||
+ struct crypto_bignum *res);
|
||||
|
||||
#endif /* DRAGONFLY_H */
|
@ -0,0 +1,94 @@
|
||||
From fe534b0baaa8c0e6ddeb24cf529d6e50e33dc501 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Fri, 7 Jan 2022 13:47:16 +0200
|
||||
Subject: [PATCH 3/4] SAE: Derive the y coordinate for PWE with own
|
||||
implementation
|
||||
|
||||
The crypto_ec_point_solve_y_coord() wrapper function might not use
|
||||
constant time operations in the crypto library and as such, could leak
|
||||
side channel information about the password that is used to generate the
|
||||
PWE in the hunting and pecking loop. As such, calculate the two possible
|
||||
y coordinate values and pick the correct one to use with constant time
|
||||
selection.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
---
|
||||
src/common/sae.c | 47 +++++++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 33 insertions(+), 14 deletions(-)
|
||||
|
||||
--- a/src/common/sae.c
|
||||
+++ b/src/common/sae.c
|
||||
@@ -294,14 +294,16 @@ static int sae_derive_pwe_ecc(struct sae
|
||||
int pwd_seed_odd = 0;
|
||||
u8 prime[SAE_MAX_ECC_PRIME_LEN];
|
||||
size_t prime_len;
|
||||
- struct crypto_bignum *x = NULL, *qr = NULL, *qnr = NULL;
|
||||
+ struct crypto_bignum *x = NULL, *y = NULL, *qr = NULL, *qnr = NULL;
|
||||
u8 x_bin[SAE_MAX_ECC_PRIME_LEN];
|
||||
u8 x_cand_bin[SAE_MAX_ECC_PRIME_LEN];
|
||||
u8 qr_bin[SAE_MAX_ECC_PRIME_LEN];
|
||||
u8 qnr_bin[SAE_MAX_ECC_PRIME_LEN];
|
||||
+ u8 x_y[2 * SAE_MAX_ECC_PRIME_LEN];
|
||||
int res = -1;
|
||||
u8 found = 0; /* 0 (false) or 0xff (true) to be used as const_time_*
|
||||
* mask */
|
||||
+ unsigned int is_eq;
|
||||
|
||||
os_memset(x_bin, 0, sizeof(x_bin));
|
||||
|
||||
@@ -410,25 +412,42 @@ static int sae_derive_pwe_ecc(struct sae
|
||||
goto fail;
|
||||
}
|
||||
|
||||
- if (!sae->tmp->pwe_ecc)
|
||||
- sae->tmp->pwe_ecc = crypto_ec_point_init(sae->tmp->ec);
|
||||
- if (!sae->tmp->pwe_ecc)
|
||||
- res = -1;
|
||||
- else
|
||||
- res = crypto_ec_point_solve_y_coord(sae->tmp->ec,
|
||||
- sae->tmp->pwe_ecc, x,
|
||||
- pwd_seed_odd);
|
||||
- if (res < 0) {
|
||||
- /*
|
||||
- * This should not happen since we already checked that there
|
||||
- * is a result.
|
||||
- */
|
||||
+ /* y = sqrt(x^3 + ax + b) mod p
|
||||
+ * if LSB(save) == LSB(y): PWE = (x, y)
|
||||
+ * else: PWE = (x, p - y)
|
||||
+ *
|
||||
+ * Calculate y and the two possible values for PWE and after that,
|
||||
+ * use constant time selection to copy the correct alternative.
|
||||
+ */
|
||||
+ y = crypto_ec_point_compute_y_sqr(sae->tmp->ec, x);
|
||||
+ if (!y ||
|
||||
+ dragonfly_sqrt(sae->tmp->ec, y, y) < 0 ||
|
||||
+ crypto_bignum_to_bin(y, x_y, SAE_MAX_ECC_PRIME_LEN,
|
||||
+ prime_len) < 0 ||
|
||||
+ crypto_bignum_sub(sae->tmp->prime, y, y) < 0 ||
|
||||
+ crypto_bignum_to_bin(y, x_y + SAE_MAX_ECC_PRIME_LEN,
|
||||
+ SAE_MAX_ECC_PRIME_LEN, prime_len) < 0) {
|
||||
wpa_printf(MSG_DEBUG, "SAE: Could not solve y");
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ is_eq = const_time_eq(pwd_seed_odd, x_y[prime_len - 1] & 0x01);
|
||||
+ const_time_select_bin(is_eq, x_y, x_y + SAE_MAX_ECC_PRIME_LEN,
|
||||
+ prime_len, x_y + prime_len);
|
||||
+ os_memcpy(x_y, x_bin, prime_len);
|
||||
+ wpa_hexdump_key(MSG_DEBUG, "SAE: PWE", x_y, 2 * prime_len);
|
||||
+ crypto_ec_point_deinit(sae->tmp->pwe_ecc, 1);
|
||||
+ sae->tmp->pwe_ecc = crypto_ec_point_from_bin(sae->tmp->ec, x_y);
|
||||
+ if (!sae->tmp->pwe_ecc) {
|
||||
+ wpa_printf(MSG_DEBUG, "SAE: Could not generate PWE");
|
||||
+ res = -1;
|
||||
}
|
||||
|
||||
fail:
|
||||
+ forced_memzero(x_y, sizeof(x_y));
|
||||
crypto_bignum_deinit(qr, 0);
|
||||
crypto_bignum_deinit(qnr, 0);
|
||||
+ crypto_bignum_deinit(y, 1);
|
||||
os_free(dummy_password);
|
||||
bin_clear_free(tmp_password, password_len);
|
||||
crypto_bignum_deinit(x, 1);
|
@ -0,0 +1,108 @@
|
||||
From 603cd880e7f90595482658a7136fa6a7be5cb485 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Fri, 7 Jan 2022 18:52:27 +0200
|
||||
Subject: [PATCH 4/4] EAP-pwd: Derive the y coordinate for PWE with own
|
||||
implementation
|
||||
|
||||
The crypto_ec_point_solve_y_coord() wrapper function might not use
|
||||
constant time operations in the crypto library and as such, could leak
|
||||
side channel information about the password that is used to generate the
|
||||
PWE in the hunting and pecking loop. As such, calculate the two possible
|
||||
y coordinate values and pick the correct one to use with constant time
|
||||
selection.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
---
|
||||
src/eap_common/eap_pwd_common.c | 46 ++++++++++++++++++++++++++-------
|
||||
1 file changed, 36 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/src/eap_common/eap_pwd_common.c
|
||||
+++ b/src/eap_common/eap_pwd_common.c
|
||||
@@ -127,7 +127,8 @@ int compute_password_element(EAP_PWD_gro
|
||||
u8 qr_or_qnr_bin[MAX_ECC_PRIME_LEN];
|
||||
u8 x_bin[MAX_ECC_PRIME_LEN];
|
||||
u8 prime_bin[MAX_ECC_PRIME_LEN];
|
||||
- struct crypto_bignum *tmp2 = NULL;
|
||||
+ u8 x_y[2 * MAX_ECC_PRIME_LEN];
|
||||
+ struct crypto_bignum *tmp2 = NULL, *y = NULL;
|
||||
struct crypto_hash *hash;
|
||||
unsigned char pwe_digest[SHA256_MAC_LEN], *prfbuf = NULL, ctr;
|
||||
int ret = 0, res;
|
||||
@@ -139,6 +140,7 @@ int compute_password_element(EAP_PWD_gro
|
||||
u8 found_ctr = 0, is_odd = 0;
|
||||
int cmp_prime;
|
||||
unsigned int in_range;
|
||||
+ unsigned int is_eq;
|
||||
|
||||
if (grp->pwe)
|
||||
return -1;
|
||||
@@ -151,11 +153,6 @@ int compute_password_element(EAP_PWD_gro
|
||||
if (crypto_bignum_to_bin(prime, prime_bin, sizeof(prime_bin),
|
||||
primebytelen) < 0)
|
||||
return -1;
|
||||
- grp->pwe = crypto_ec_point_init(grp->group);
|
||||
- if (!grp->pwe) {
|
||||
- wpa_printf(MSG_INFO, "EAP-pwd: unable to create bignums");
|
||||
- goto fail;
|
||||
- }
|
||||
|
||||
if ((prfbuf = os_malloc(primebytelen)) == NULL) {
|
||||
wpa_printf(MSG_INFO, "EAP-pwd: unable to malloc space for prf "
|
||||
@@ -261,10 +258,37 @@ int compute_password_element(EAP_PWD_gro
|
||||
*/
|
||||
crypto_bignum_deinit(x_candidate, 1);
|
||||
x_candidate = crypto_bignum_init_set(x_bin, primebytelen);
|
||||
- if (!x_candidate ||
|
||||
- crypto_ec_point_solve_y_coord(grp->group, grp->pwe, x_candidate,
|
||||
- is_odd) != 0) {
|
||||
- wpa_printf(MSG_INFO, "EAP-pwd: Could not solve for y");
|
||||
+ if (!x_candidate)
|
||||
+ goto fail;
|
||||
+
|
||||
+ /* y = sqrt(x^3 + ax + b) mod p
|
||||
+ * if LSB(y) == LSB(pwd-seed): PWE = (x, y)
|
||||
+ * else: PWE = (x, p - y)
|
||||
+ *
|
||||
+ * Calculate y and the two possible values for PWE and after that,
|
||||
+ * use constant time selection to copy the correct alternative.
|
||||
+ */
|
||||
+ y = crypto_ec_point_compute_y_sqr(grp->group, x_candidate);
|
||||
+ if (!y ||
|
||||
+ dragonfly_sqrt(grp->group, y, y) < 0 ||
|
||||
+ crypto_bignum_to_bin(y, x_y, MAX_ECC_PRIME_LEN, primebytelen) < 0 ||
|
||||
+ crypto_bignum_sub(prime, y, y) < 0 ||
|
||||
+ crypto_bignum_to_bin(y, x_y + MAX_ECC_PRIME_LEN,
|
||||
+ MAX_ECC_PRIME_LEN, primebytelen) < 0) {
|
||||
+ wpa_printf(MSG_DEBUG, "SAE: Could not solve y");
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ /* Constant time selection of the y coordinate from the two
|
||||
+ * options */
|
||||
+ is_eq = const_time_eq(is_odd, x_y[primebytelen - 1] & 0x01);
|
||||
+ const_time_select_bin(is_eq, x_y, x_y + MAX_ECC_PRIME_LEN,
|
||||
+ primebytelen, x_y + primebytelen);
|
||||
+ os_memcpy(x_y, x_bin, primebytelen);
|
||||
+ wpa_hexdump_key(MSG_DEBUG, "EAP-pwd: PWE", x_y, 2 * primebytelen);
|
||||
+ grp->pwe = crypto_ec_point_from_bin(grp->group, x_y);
|
||||
+ if (!grp->pwe) {
|
||||
+ wpa_printf(MSG_DEBUG, "EAP-pwd: Could not generate PWE");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@@ -289,6 +313,7 @@ int compute_password_element(EAP_PWD_gro
|
||||
/* cleanliness and order.... */
|
||||
crypto_bignum_deinit(x_candidate, 1);
|
||||
crypto_bignum_deinit(tmp2, 1);
|
||||
+ crypto_bignum_deinit(y, 1);
|
||||
crypto_bignum_deinit(qr, 1);
|
||||
crypto_bignum_deinit(qnr, 1);
|
||||
bin_clear_free(prfbuf, primebytelen);
|
||||
@@ -296,6 +321,7 @@ int compute_password_element(EAP_PWD_gro
|
||||
os_memset(qnr_bin, 0, sizeof(qnr_bin));
|
||||
os_memset(qr_or_qnr_bin, 0, sizeof(qr_or_qnr_bin));
|
||||
os_memset(pwe_digest, 0, sizeof(pwe_digest));
|
||||
+ forced_memzero(x_y, sizeof(x_y));
|
||||
|
||||
return ret;
|
||||
}
|
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=tcpdump
|
||||
PKG_VERSION:=4.9.3
|
||||
PKG_RELEASE:=3
|
||||
PKG_RELEASE:=4
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=http://www.tcpdump.org/release/
|
||||
|
101
package/network/utils/tcpdump/patches/102-CVE-2018-16301.patch
Normal file
101
package/network/utils/tcpdump/patches/102-CVE-2018-16301.patch
Normal file
@ -0,0 +1,101 @@
|
||||
From 8ab211a7ec728bb0ad8c766c8eeb12deb0a13b86 Mon Sep 17 00:00:00 2001
|
||||
From: Guy Harris <gharris@sonic.net>
|
||||
Date: Wed, 30 Sep 2020 11:37:30 -0700
|
||||
Subject: [PATCH] Handle very large -f files by rejecting them.
|
||||
|
||||
_read(), on Windows, has a 32-bit size argument and a 32-bit return
|
||||
value, so reject -f files that have more than 2^31-1 characters.
|
||||
|
||||
Add some #defines so that, on Windows, we use _fstati64 to get the size
|
||||
of that file, to handle large files.
|
||||
|
||||
Don't assume that our definition for ssize_t is the same size as size_t;
|
||||
by the time we want to print the return value of the read, we know it'll
|
||||
fit into an int, so just cast it to int and print it with %d.
|
||||
|
||||
(cherry picked from commit faf8fb70af3a013e5d662b8283dec742fd6b1a77)
|
||||
---
|
||||
netdissect-stdinc.h | 16 +++++++++++++++-
|
||||
tcpdump.c | 15 ++++++++++++---
|
||||
2 files changed, 27 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/netdissect-stdinc.h
|
||||
+++ b/netdissect-stdinc.h
|
||||
@@ -149,10 +149,17 @@
|
||||
#ifdef _MSC_VER
|
||||
#define stat _stat
|
||||
#define open _open
|
||||
-#define fstat _fstat
|
||||
#define read _read
|
||||
#define close _close
|
||||
#define O_RDONLY _O_RDONLY
|
||||
+
|
||||
+/*
|
||||
+ * We define our_fstat64 as _fstati64, and define our_statb as
|
||||
+ * struct _stati64, so we get 64-bit file sizes.
|
||||
+ */
|
||||
+#define our_fstat _fstati64
|
||||
+#define our_statb struct _stati64
|
||||
+
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
/*
|
||||
@@ -211,6 +218,13 @@ typedef char* caddr_t;
|
||||
|
||||
#include <arpa/inet.h>
|
||||
|
||||
+/*
|
||||
+ * We should have large file support enabled, if it's available,
|
||||
+ * so just use fstat as our_fstat and struct stat as our_statb.
|
||||
+ */
|
||||
+#define our_fstat fstat
|
||||
+#define our_statb struct stat
|
||||
+
|
||||
#endif /* _WIN32 */
|
||||
|
||||
#ifndef HAVE___ATTRIBUTE__
|
||||
--- a/tcpdump.c
|
||||
+++ b/tcpdump.c
|
||||
@@ -108,6 +108,7 @@ The Regents of the University of Califor
|
||||
#endif /* HAVE_CAP_NG_H */
|
||||
#endif /* HAVE_LIBCAP_NG */
|
||||
|
||||
+#include "netdissect-stdinc.h"
|
||||
#include "netdissect.h"
|
||||
#include "interface.h"
|
||||
#include "addrtoname.h"
|
||||
@@ -861,15 +862,22 @@ read_infile(char *fname)
|
||||
{
|
||||
register int i, fd, cc;
|
||||
register char *cp;
|
||||
- struct stat buf;
|
||||
+ our_statb buf;
|
||||
|
||||
fd = open(fname, O_RDONLY|O_BINARY);
|
||||
if (fd < 0)
|
||||
error("can't open %s: %s", fname, pcap_strerror(errno));
|
||||
|
||||
- if (fstat(fd, &buf) < 0)
|
||||
+ if (our_fstat(fd, &buf) < 0)
|
||||
error("can't stat %s: %s", fname, pcap_strerror(errno));
|
||||
|
||||
+ /*
|
||||
+ * Reject files whose size doesn't fit into an int; a filter
|
||||
+ * *that* large will probably be too big.
|
||||
+ */
|
||||
+ if (buf.st_size > INT_MAX)
|
||||
+ error("%s is too large", fname);
|
||||
+
|
||||
cp = malloc((u_int)buf.st_size + 1);
|
||||
if (cp == NULL)
|
||||
error("malloc(%d) for %s: %s", (u_int)buf.st_size + 1,
|
||||
@@ -878,7 +886,8 @@ read_infile(char *fname)
|
||||
if (cc < 0)
|
||||
error("read %s: %s", fname, pcap_strerror(errno));
|
||||
if (cc != buf.st_size)
|
||||
- error("short read %s (%d != %d)", fname, cc, (int)buf.st_size);
|
||||
+ error("short read %s (%d != %d)", fname, (int) cc,
|
||||
+ (int)buf.st_size);
|
||||
|
||||
close(fd);
|
||||
/* replace "# comment" with spaces */
|
@ -13,9 +13,9 @@ PKG_RELEASE:=5
|
||||
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/uci.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_DATE=2020-10-06
|
||||
PKG_SOURCE_VERSION:=52bbc99f69ea6f67b6fe264f424dac91bde5016c
|
||||
PKG_MIRROR_HASH:=39f2225d1b8f62d7133f708fc73f1f841b6113ae4634485fc0dfdf226041c3c4
|
||||
PKG_SOURCE_DATE=2021-04-14
|
||||
PKG_SOURCE_VERSION:=4b3db1179747b6a6779029407984bacef851325c
|
||||
PKG_MIRROR_HASH:=9d00b5056a0dd4094c7e19f1a0ecaffa90409f22ea28f164d0e36febd06e37d1
|
||||
|
||||
PKG_LICENSE:=LGPL-2.1
|
||||
PKG_LICENSE_FILES:=
|
||||
|
@ -46,12 +46,16 @@ ifeq ($(CONFIG_IB_STANDALONE),)
|
||||
$(VERSION_SED_SCRIPT) $(PKG_BUILD_DIR)/repositories.conf
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_BUILDBOT),)
|
||||
$(INSTALL_DIR) $(PKG_BUILD_DIR)/packages
|
||||
# create an empty package index so `opkg` doesn't report an error
|
||||
touch $(PKG_BUILD_DIR)/packages/Packages
|
||||
$(INSTALL_DATA) ./files/README.md $(PKG_BUILD_DIR)/packages/
|
||||
|
||||
echo '' >> $(PKG_BUILD_DIR)/repositories.conf
|
||||
echo '## This is the local package repository, do not remove!' >> $(PKG_BUILD_DIR)/repositories.conf
|
||||
echo 'src imagebuilder file:packages' >> $(PKG_BUILD_DIR)/repositories.conf
|
||||
|
||||
ifeq ($(CONFIG_BUILDBOT),)
|
||||
ifeq ($(CONFIG_IB_STANDALONE),)
|
||||
$(FIND) $(call FeedPackageDir,libc) -type f \
|
||||
\( -name 'libc_*.ipk' -or -name 'kernel_*.ipk' -or -name 'kmod-*.ipk' \) \
|
||||
|
11
target/imagebuilder/files/README.md
Normal file
11
target/imagebuilder/files/README.md
Normal file
@ -0,0 +1,11 @@
|
||||
# ./packages folder
|
||||
|
||||
Add `.ipk` packages to this folder will allow the ImageBuilder to install them.
|
||||
|
||||
For more complex setups consider adding a custom feed containing packages.
|
||||
|
||||
src custom file:///path/to/packages
|
||||
|
||||
Whenever the ImageBuilder builds a firmware image this folder will be reloaded
|
||||
and a new package index created. In case signature checks are enabled the
|
||||
`./packages/Packages` index will be signed with a locally generated key pair.
|
@ -7,26 +7,34 @@
|
||||
|
||||
/ {
|
||||
compatible = "openmesh,om5p-ac-v2", "qca,qca9558";
|
||||
model = "OpenMesh OM5P-AC V2";
|
||||
model = "OpenMesh OM5P-AC v2";
|
||||
|
||||
extosc: ref {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-output-names = "ref";
|
||||
clock-frequency = <40000000>;
|
||||
chosen {
|
||||
/delete-property/ bootargs;
|
||||
};
|
||||
|
||||
aliases {
|
||||
serial0 = &uart;
|
||||
led-boot = &led_power_blue;
|
||||
led-failsafe = &led_power_blue;
|
||||
led-running = &led_power_blue;
|
||||
led-upgrade = &led_power_blue;
|
||||
label-mac-device = ð0;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
power {
|
||||
label = "blue:power";
|
||||
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
wifi_green {
|
||||
label = "green:wifi";
|
||||
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "phy0tpt";
|
||||
};
|
||||
|
||||
led_power_blue: power_blue {
|
||||
label = "blue:power";
|
||||
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
|
||||
default-state = "on";
|
||||
};
|
||||
|
||||
wifi_yellow {
|
||||
@ -50,6 +58,32 @@
|
||||
};
|
||||
};
|
||||
|
||||
i2c {
|
||||
compatible = "i2c-gpio";
|
||||
gpios = <&gpio 19 GPIO_ACTIVE_HIGH /* sda */
|
||||
&gpio 18 GPIO_ACTIVE_HIGH /* scl */
|
||||
>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
i2c-gpio,scl-open-drain;
|
||||
i2c-gpio,sda-open-drain;
|
||||
|
||||
tmp423a@4e {
|
||||
compatible = "ti,tmp423";
|
||||
reg = <0x4e>;
|
||||
};
|
||||
};
|
||||
|
||||
watchdog {
|
||||
compatible = "linux,wdt-gpio";
|
||||
gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
|
||||
hw_algo = "toggle";
|
||||
/* hw_margin_ms is actually 300s but driver limits it to 60s */
|
||||
hw_margin_ms = <60000>;
|
||||
always-running;
|
||||
};
|
||||
|
||||
gpio-export {
|
||||
compatible = "gpio-export";
|
||||
#size-cells = <0>;
|
||||
@ -69,11 +103,11 @@
|
||||
|
||||
&pinmux {
|
||||
pinmux_pa_dcdc_pins {
|
||||
pinctrl-single,bits = <0x0 0xff00 0x0>;
|
||||
pinctrl-single,bits = <0x0 0x0 0xff0000>;
|
||||
};
|
||||
|
||||
pinmux_pa_high_pins {
|
||||
pinctrl-single,bits = <0x10 0xff 0x0>;
|
||||
pinctrl-single,bits = <0x10 0x0 0xff>;
|
||||
};
|
||||
};
|
||||
|
||||
@ -81,10 +115,6 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pll {
|
||||
clocks = <&extosc>;
|
||||
};
|
||||
|
||||
&spi {
|
||||
status = "okay";
|
||||
|
||||
@ -93,6 +123,7 @@
|
||||
reg = <0>;
|
||||
spi-max-frequency = <25000000>;
|
||||
|
||||
/* partitions are passed via bootloader */
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
@ -104,19 +135,29 @@
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@1 {
|
||||
partition@40000 {
|
||||
label = "u-boot-env";
|
||||
reg = <0x040000 0x010000>;
|
||||
};
|
||||
|
||||
partition@2 {
|
||||
compatible = "denx,uimage";
|
||||
label = "firmware";
|
||||
partition@50000 {
|
||||
label = "custom";
|
||||
reg = <0x050000 0x060000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@b0000 {
|
||||
label = "inactive";
|
||||
reg = <0x0b0000 0x7a0000>;
|
||||
};
|
||||
|
||||
partition@850000 {
|
||||
label = "inactive2";
|
||||
reg = <0x850000 0x7a0000>;
|
||||
};
|
||||
|
||||
partition@3 {
|
||||
label = "art";
|
||||
art: partition@ff0000 {
|
||||
label = "ART";
|
||||
reg = <0xff0000 0x010000>;
|
||||
read-only;
|
||||
};
|
||||
@ -127,18 +168,25 @@
|
||||
&mdio0 {
|
||||
status = "okay";
|
||||
|
||||
phy-mask = <0x10>;
|
||||
|
||||
phy4: ethernet-phy@4 {
|
||||
reg = <4>;
|
||||
phy-mode = "rgmii-id";
|
||||
eee-broken-100tx;
|
||||
eee-broken-1000t;
|
||||
};
|
||||
};
|
||||
|
||||
&mdio1 {
|
||||
status = "okay";
|
||||
|
||||
phy-mask = <0x2>;
|
||||
|
||||
phy1: ethernet-phy@1 {
|
||||
reg = <1>;
|
||||
phy-mode = "sgmii";
|
||||
eee-broken-100tx;
|
||||
eee-broken-1000t;
|
||||
at803x-override-sgmii-link-check;
|
||||
};
|
||||
};
|
||||
|
||||
@ -147,7 +195,19 @@
|
||||
|
||||
pll-data = <0x82000101 0x80000101 0x80001313>;
|
||||
|
||||
mtd-mac-address = <&art 0x0>;
|
||||
|
||||
phy-mode = "rgmii-id";
|
||||
phy-handle = <&phy4>;
|
||||
|
||||
gmac-config {
|
||||
device = <&gmac>;
|
||||
rgmii-enabled = <1>;
|
||||
rxd-delay = <2>;
|
||||
rxdv-delay = <2>;
|
||||
txd-delay = <0>;
|
||||
txen-delay = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
ð1 {
|
||||
@ -155,5 +215,17 @@
|
||||
|
||||
pll-data = <0x03000101 0x80000101 0x80001313>;
|
||||
|
||||
mtd-mac-address = <&art 0x6>;
|
||||
|
||||
qca955x-sgmii-fixup;
|
||||
|
||||
phy-handle = <&phy1>;
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
|
||||
mtd-cal-data = <&art 0x1000>;
|
||||
mtd-mac-address = <&art 0x0>;
|
||||
mac-address-increment = <2>;
|
||||
};
|
||||
|
@ -100,12 +100,9 @@ case "$FIRMWARE" in
|
||||
ath10k_patch_mac $(mtd_get_mac_binary art 0xc)
|
||||
;;
|
||||
openmesh,mr1750-v1|\
|
||||
openmesh,mr1750-v2)
|
||||
caldata_extract "ART" 0x5000 0x844
|
||||
ath10k_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
|
||||
;;
|
||||
openmesh,mr1750-v2|\
|
||||
openmesh,om5p-ac-v2)
|
||||
caldata_extract "art" 0x5000 0x844
|
||||
caldata_extract "ART" 0x5000 0x844
|
||||
ath10k_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
|
||||
;;
|
||||
qihoo,c301)
|
||||
|
@ -78,7 +78,8 @@ platform_do_upgrade() {
|
||||
openmesh,om2p-hs-v3|\
|
||||
openmesh,om2p-hs-v4|\
|
||||
openmesh,om2p-lc|\
|
||||
openmesh,om5p)
|
||||
openmesh,om5p|\
|
||||
openmesh,om5p-ac-v2)
|
||||
PART_NAME="inactive"
|
||||
platform_do_upgrade_openmesh "$1"
|
||||
;;
|
||||
|
@ -1808,12 +1808,12 @@ endef
|
||||
TARGET_DEVICES += openmesh_om5p
|
||||
|
||||
define Device/openmesh_om5p-ac-v2
|
||||
$(Device/openmesh_common_64k)
|
||||
SOC := qca9558
|
||||
DEVICE_VENDOR := OpenMesh
|
||||
DEVICE_MODEL := OM5P-AC
|
||||
DEVICE_VARIANT := v2
|
||||
DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca988x-ct om-watchdog
|
||||
IMAGE_SIZE := 7808k
|
||||
DEVICE_PACKAGES += kmod-ath10k-ct ath10k-firmware-qca988x-ct
|
||||
OPENMESH_CE_TYPE := OM5PAC
|
||||
SUPPORTED_DEVICES += om5p-acv2
|
||||
endef
|
||||
TARGET_DEVICES += openmesh_om5p-ac-v2
|
||||
|
@ -13,7 +13,7 @@ Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
|
||||
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -2267,8 +2267,15 @@ static int bcm2835_clk_probe(struct plat
|
||||
@@ -2262,8 +2262,15 @@ static int bcm2835_clk_probe(struct plat
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -30,7 +30,7 @@ Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
|
||||
}
|
||||
|
||||
static const struct cprman_plat_data cprman_bcm2835_plat_data = {
|
||||
@@ -2294,7 +2301,11 @@ static struct platform_driver bcm2835_cl
|
||||
@@ -2289,7 +2296,11 @@ static struct platform_driver bcm2835_cl
|
||||
.probe = bcm2835_clk_probe,
|
||||
};
|
||||
|
||||
|
@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -1381,6 +1381,11 @@ bcm2835_register_pll_divider(struct bcm2
|
||||
@@ -1376,6 +1376,11 @@ bcm2835_register_pll_divider(struct bcm2
|
||||
divider->div.hw.init = &init;
|
||||
divider->div.table = NULL;
|
||||
|
||||
|
@ -17,7 +17,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -1311,6 +1311,8 @@ static const struct clk_ops bcm2835_vpu_
|
||||
@@ -1306,6 +1306,8 @@ static const struct clk_ops bcm2835_vpu_
|
||||
.debug_init = bcm2835_clock_debug_init,
|
||||
};
|
||||
|
||||
@ -26,7 +26,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman,
|
||||
const struct bcm2835_pll_data *data)
|
||||
{
|
||||
@@ -1327,6 +1329,9 @@ static struct clk_hw *bcm2835_register_p
|
||||
@@ -1322,6 +1324,9 @@ static struct clk_hw *bcm2835_register_p
|
||||
init.ops = &bcm2835_pll_clk_ops;
|
||||
init.flags = CLK_IGNORE_UNUSED;
|
||||
|
||||
@ -36,7 +36,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
pll = kzalloc(sizeof(*pll), GFP_KERNEL);
|
||||
if (!pll)
|
||||
return NULL;
|
||||
@@ -1382,8 +1387,10 @@ bcm2835_register_pll_divider(struct bcm2
|
||||
@@ -1377,8 +1382,10 @@ bcm2835_register_pll_divider(struct bcm2
|
||||
divider->div.table = NULL;
|
||||
|
||||
if (!(cprman_read(cprman, data->cm_reg) & data->hold_mask)) {
|
||||
@ -49,7 +49,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
}
|
||||
|
||||
divider->cprman = cprman;
|
||||
@@ -2191,6 +2198,8 @@ static const struct bcm2835_clk_desc clk
|
||||
@@ -2186,6 +2193,8 @@ static const struct bcm2835_clk_desc clk
|
||||
.ctl_reg = CM_PERIICTL),
|
||||
};
|
||||
|
||||
@ -58,7 +58,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
/*
|
||||
* Permanently take a reference on the parent of the SDRAM clock.
|
||||
*
|
||||
@@ -2210,6 +2219,19 @@ static int bcm2835_mark_sdc_parent_criti
|
||||
@@ -2205,6 +2214,19 @@ static int bcm2835_mark_sdc_parent_criti
|
||||
return clk_prepare_enable(parent);
|
||||
}
|
||||
|
||||
@ -78,7 +78,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
static int bcm2835_clk_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
@@ -2220,6 +2242,7 @@ static int bcm2835_clk_probe(struct plat
|
||||
@@ -2215,6 +2237,7 @@ static int bcm2835_clk_probe(struct plat
|
||||
const size_t asize = ARRAY_SIZE(clk_desc_array);
|
||||
const struct cprman_plat_data *pdata;
|
||||
size_t i;
|
||||
@ -86,7 +86,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
int ret;
|
||||
|
||||
pdata = of_device_get_match_data(&pdev->dev);
|
||||
@@ -2239,6 +2262,13 @@ static int bcm2835_clk_probe(struct plat
|
||||
@@ -2234,6 +2257,13 @@ static int bcm2835_clk_probe(struct plat
|
||||
if (IS_ERR(cprman->regs))
|
||||
return PTR_ERR(cprman->regs);
|
||||
|
||||
|
@ -50,7 +50,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
spinlock_t regs_lock; /* spinlock for all clocks */
|
||||
unsigned int soc;
|
||||
|
||||
@@ -1015,6 +1019,30 @@ static unsigned long bcm2835_clock_get_r
|
||||
@@ -1010,6 +1014,30 @@ static unsigned long bcm2835_clock_get_r
|
||||
return bcm2835_clock_rate_from_divisor(clock, parent_rate, div);
|
||||
}
|
||||
|
||||
@ -81,7 +81,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
static void bcm2835_clock_wait_busy(struct bcm2835_clock *clock)
|
||||
{
|
||||
struct bcm2835_cprman *cprman = clock->cprman;
|
||||
@@ -1303,7 +1331,7 @@ static int bcm2835_vpu_clock_is_on(struc
|
||||
@@ -1298,7 +1326,7 @@ static int bcm2835_vpu_clock_is_on(struc
|
||||
*/
|
||||
static const struct clk_ops bcm2835_vpu_clock_clk_ops = {
|
||||
.is_prepared = bcm2835_vpu_clock_is_on,
|
||||
@ -90,7 +90,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
.set_rate = bcm2835_clock_set_rate,
|
||||
.determine_rate = bcm2835_clock_determine_rate,
|
||||
.set_parent = bcm2835_clock_set_parent,
|
||||
@@ -2241,6 +2269,7 @@ static int bcm2835_clk_probe(struct plat
|
||||
@@ -2236,6 +2264,7 @@ static int bcm2835_clk_probe(struct plat
|
||||
const struct bcm2835_clk_desc *desc;
|
||||
const size_t asize = ARRAY_SIZE(clk_desc_array);
|
||||
const struct cprman_plat_data *pdata;
|
||||
@ -98,7 +98,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
size_t i;
|
||||
u32 clk_id;
|
||||
int ret;
|
||||
@@ -2262,6 +2291,14 @@ static int bcm2835_clk_probe(struct plat
|
||||
@@ -2257,6 +2286,14 @@ static int bcm2835_clk_probe(struct plat
|
||||
if (IS_ERR(cprman->regs))
|
||||
return PTR_ERR(cprman->regs);
|
||||
|
||||
|
@ -20,7 +20,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -1473,6 +1473,15 @@ static struct clk_hw *bcm2835_register_c
|
||||
@@ -1468,6 +1468,15 @@ static struct clk_hw *bcm2835_register_c
|
||||
init.flags = data->flags | CLK_IGNORE_UNUSED;
|
||||
|
||||
/*
|
||||
|
@ -14,7 +14,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -8512,8 +8512,6 @@ int alloc_contig_range(unsigned long sta
|
||||
@@ -8514,8 +8514,6 @@ int alloc_contig_range(unsigned long sta
|
||||
|
||||
/* Make sure the range is really isolated. */
|
||||
if (test_pages_isolated(outer_start, end, false)) {
|
||||
|
@ -14,7 +14,7 @@ use the same logic.
|
||||
|
||||
--- a/drivers/tty/serial/amba-pl011.c
|
||||
+++ b/drivers/tty/serial/amba-pl011.c
|
||||
@@ -2578,7 +2578,12 @@ static int pl011_setup_port(struct devic
|
||||
@@ -2557,7 +2557,12 @@ static int pl011_setup_port(struct devic
|
||||
if (IS_ERR(base))
|
||||
return PTR_ERR(base);
|
||||
|
||||
|
@ -59,7 +59,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
/* Clear pending error and receive interrupts */
|
||||
pl011_write(UART011_OEIS | UART011_BEIS | UART011_PEIS |
|
||||
@@ -2324,7 +2341,7 @@ static int pl011_console_setup(struct co
|
||||
@@ -2303,7 +2320,7 @@ static int pl011_console_setup(struct co
|
||||
plat->init();
|
||||
}
|
||||
|
||||
@ -68,7 +68,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
if (uap->vendor->fixed_options) {
|
||||
baud = uap->fixed_baud;
|
||||
@@ -2509,6 +2526,7 @@ static struct uart_driver amba_reg = {
|
||||
@@ -2488,6 +2505,7 @@ static struct uart_driver amba_reg = {
|
||||
.cons = AMBA_CONSOLE,
|
||||
};
|
||||
|
||||
@ -76,7 +76,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
static int pl011_probe_dt_alias(int index, struct device *dev)
|
||||
{
|
||||
struct device_node *np;
|
||||
@@ -2540,6 +2558,7 @@ static int pl011_probe_dt_alias(int inde
|
||||
@@ -2519,6 +2537,7 @@ static int pl011_probe_dt_alias(int inde
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
- reg
|
||||
--- a/drivers/tty/serial/amba-pl011.c
|
||||
+++ b/drivers/tty/serial/amba-pl011.c
|
||||
@@ -2665,6 +2665,11 @@ static int pl011_probe(struct amba_devic
|
||||
@@ -2644,6 +2644,11 @@ static int pl011_probe(struct amba_devic
|
||||
if (IS_ERR(uap->clk))
|
||||
return PTR_ERR(uap->clk);
|
||||
|
||||
|
@ -11,7 +11,7 @@ Signed-off-by: Noralf Tronnes <notro@tronnes.org>
|
||||
|
||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
@@ -350,7 +350,7 @@ static const struct gpio_chip bcm2835_gp
|
||||
@@ -359,7 +359,7 @@ static const struct gpio_chip bcm2835_gp
|
||||
.get = bcm2835_gpio_get,
|
||||
.set = bcm2835_gpio_set,
|
||||
.set_config = gpiochip_generic_config,
|
||||
|
@ -1040,7 +1040,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
}
|
||||
--- a/drivers/usb/core/hub.c
|
||||
+++ b/drivers/usb/core/hub.c
|
||||
@@ -5379,7 +5379,7 @@ static void port_event(struct usb_hub *h
|
||||
@@ -5382,7 +5382,7 @@ static void port_event(struct usb_hub *h
|
||||
port_dev->over_current_count++;
|
||||
port_over_current_notify(port_dev);
|
||||
|
||||
|
@ -17,7 +17,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/kernel/cgroup/cgroup.c
|
||||
+++ b/kernel/cgroup/cgroup.c
|
||||
@@ -5744,6 +5744,9 @@ int __init cgroup_init_early(void)
|
||||
@@ -5749,6 +5749,9 @@ int __init cgroup_init_early(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -27,7 +27,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
/**
|
||||
* cgroup_init - cgroup initialization
|
||||
*
|
||||
@@ -5782,6 +5785,12 @@ int __init cgroup_init(void)
|
||||
@@ -5787,6 +5790,12 @@ int __init cgroup_init(void)
|
||||
|
||||
mutex_unlock(&cgroup_mutex);
|
||||
|
||||
@ -40,7 +40,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
for_each_subsys(ss, ssid) {
|
||||
if (ss->early_init) {
|
||||
struct cgroup_subsys_state *css =
|
||||
@@ -6191,6 +6200,10 @@ static int __init cgroup_disable(char *s
|
||||
@@ -6196,6 +6205,10 @@ static int __init cgroup_disable(char *s
|
||||
strcmp(token, ss->legacy_name))
|
||||
continue;
|
||||
|
||||
@ -51,7 +51,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
static_branch_disable(cgroup_subsys_enabled_key[i]);
|
||||
pr_info("Disabling %s control group subsystem\n",
|
||||
ss->name);
|
||||
@@ -6200,6 +6213,31 @@ static int __init cgroup_disable(char *s
|
||||
@@ -6205,6 +6218,31 @@ static int __init cgroup_disable(char *s
|
||||
}
|
||||
__setup("cgroup_disable=", cgroup_disable);
|
||||
|
||||
|
@ -13,7 +13,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -2354,7 +2354,7 @@ static int bcm2835_clk_probe(struct plat
|
||||
@@ -2349,7 +2349,7 @@ static int bcm2835_clk_probe(struct plat
|
||||
return ret;
|
||||
|
||||
/* note that we have registered all the clocks */
|
||||
|
@ -27,7 +27,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
/* Disable rate control for now */
|
||||
bcmgenet_tdma_ring_writel(priv, index, flow_period_val,
|
||||
TDMA_FLOW_PERIOD);
|
||||
@@ -3574,9 +3574,12 @@ static int bcmgenet_probe(struct platfor
|
||||
@@ -3576,9 +3576,12 @@ static int bcmgenet_probe(struct platfor
|
||||
netif_set_real_num_rx_queues(priv->dev, priv->hw_params->rx_queues + 1);
|
||||
|
||||
/* Set default coalescing parameters */
|
||||
|
@ -14,7 +14,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -1114,15 +1114,19 @@ static int bcm2835_clock_set_rate(struct
|
||||
@@ -1109,15 +1109,19 @@ static int bcm2835_clock_set_rate(struct
|
||||
|
||||
spin_lock(&cprman->regs_lock);
|
||||
|
||||
@ -42,7 +42,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
ctl |= (div & CM_DIV_FRAC_MASK) ? CM_FRAC : 0;
|
||||
cprman_write(cprman, data->ctl_reg, ctl);
|
||||
|
||||
@@ -1494,7 +1498,7 @@ static struct clk_hw *bcm2835_register_c
|
||||
@@ -1489,7 +1493,7 @@ static struct clk_hw *bcm2835_register_c
|
||||
init.ops = &bcm2835_vpu_clock_clk_ops;
|
||||
} else {
|
||||
init.ops = &bcm2835_clock_clk_ops;
|
||||
|
@ -15,7 +15,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -1103,8 +1103,10 @@ static int bcm2835_clock_on(struct clk_h
|
||||
@@ -1098,8 +1098,10 @@ static int bcm2835_clock_on(struct clk_h
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -28,7 +28,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
{
|
||||
struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw);
|
||||
struct bcm2835_cprman *cprman = clock->cprman;
|
||||
@@ -1126,6 +1128,11 @@ static int bcm2835_clock_set_rate(struct
|
||||
@@ -1121,6 +1123,11 @@ static int bcm2835_clock_set_rate(struct
|
||||
bcm2835_clock_wait_busy(clock);
|
||||
}
|
||||
|
||||
@ -40,7 +40,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
ctl &= ~CM_FRAC;
|
||||
ctl |= (div & CM_DIV_FRAC_MASK) ? CM_FRAC : 0;
|
||||
cprman_write(cprman, data->ctl_reg, ctl);
|
||||
@@ -1137,6 +1144,12 @@ static int bcm2835_clock_set_rate(struct
|
||||
@@ -1132,6 +1139,12 @@ static int bcm2835_clock_set_rate(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -53,7 +53,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
static bool
|
||||
bcm2835_clk_is_pllc(struct clk_hw *hw)
|
||||
{
|
||||
@@ -1320,6 +1333,7 @@ static const struct clk_ops bcm2835_cloc
|
||||
@@ -1315,6 +1328,7 @@ static const struct clk_ops bcm2835_cloc
|
||||
.unprepare = bcm2835_clock_off,
|
||||
.recalc_rate = bcm2835_clock_get_rate,
|
||||
.set_rate = bcm2835_clock_set_rate,
|
||||
@ -61,7 +61,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
.determine_rate = bcm2835_clock_determine_rate,
|
||||
.set_parent = bcm2835_clock_set_parent,
|
||||
.get_parent = bcm2835_clock_get_parent,
|
||||
@@ -1498,7 +1512,6 @@ static struct clk_hw *bcm2835_register_c
|
||||
@@ -1493,7 +1507,6 @@ static struct clk_hw *bcm2835_register_c
|
||||
init.ops = &bcm2835_vpu_clock_clk_ops;
|
||||
} else {
|
||||
init.ops = &bcm2835_clock_clk_ops;
|
||||
|
@ -27,7 +27,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
|
||||
--- a/drivers/usb/core/hcd.c
|
||||
+++ b/drivers/usb/core/hcd.c
|
||||
@@ -1941,6 +1941,16 @@ reset:
|
||||
@@ -1962,6 +1962,16 @@ reset:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
|
||||
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -2280,9 +2280,11 @@ static bool bcm2835_clk_is_claimed(const
|
||||
@@ -2275,9 +2275,11 @@ static bool bcm2835_clk_is_claimed(const
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(clk_desc_array); i++) {
|
||||
|
@ -1,40 +0,0 @@
|
||||
From cf658ebc86b3e22c0b77e136fbbf19b580c7c256 Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Wahren <wahrenst@gmx.net>
|
||||
Date: Sun, 21 Jul 2019 16:01:36 +0200
|
||||
Subject: [PATCH] pinctrl: bcm2835: Add support for BCM2711 pull-up
|
||||
functionality
|
||||
|
||||
commit e38a9a437fb93ddafab5030165e4c6a3a5021669 upstream.
|
||||
|
||||
The BCM2711 has a new way of selecting the pull-up/pull-down setting
|
||||
for a GPIO pin. The registers used for the BCM2835, GP_PUD and
|
||||
GP_PUDCLKn0, are no longer connected. A new set of registers,
|
||||
GP_GPIO_PUP_PDN_CNTRL_REGx must be used. This commit will add
|
||||
a new compatible string "brcm,bcm2711-gpio" and the kernel
|
||||
driver will use it to select which method is used to select
|
||||
pull-up/pull-down.
|
||||
|
||||
This patch based on a patch by Al Cooper which was intended for the
|
||||
BCM7211. This is a bugfixed and improved version.
|
||||
|
||||
Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
|
||||
Acked-by: Eric Anholt <eric@anholt.net>
|
||||
---
|
||||
drivers/pinctrl/bcm/pinctrl-bcm2835.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
@@ -1168,6 +1168,12 @@ static int bcm2835_pinctrl_probe(struct
|
||||
(const struct pinconf_ops *)match->data;
|
||||
}
|
||||
|
||||
+ match = of_match_node(bcm2835_pinctrl_match, pdev->dev.of_node);
|
||||
+ if (match) {
|
||||
+ bcm2835_pinctrl_desc.confops =
|
||||
+ (const struct pinconf_ops *)match->data;
|
||||
+ }
|
||||
+
|
||||
pc->pctl_dev = devm_pinctrl_register(dev, &bcm2835_pinctrl_desc, pc);
|
||||
if (IS_ERR(pc->pctl_dev)) {
|
||||
gpiochip_remove(&pc->gpio_chip);
|
@ -1,107 +0,0 @@
|
||||
From b1d33d1e5a44afd2025c5a44a85dc2fab00ec6a7 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Tue, 5 Nov 2019 11:28:19 +0000
|
||||
Subject: [PATCH] Revert "pinctrl: bcm2835: Pass irqchip when adding
|
||||
gpiochip"
|
||||
|
||||
This reverts commit 73345a18d464b1b945b29f54f630ace6873344e2.
|
||||
---
|
||||
drivers/pinctrl/bcm/pinctrl-bcm2835.c | 55 +++++++++++++++------------
|
||||
1 file changed, 30 insertions(+), 25 deletions(-)
|
||||
|
||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
@@ -78,6 +78,7 @@
|
||||
struct bcm2835_pinctrl {
|
||||
struct device *dev;
|
||||
void __iomem *base;
|
||||
+ int irq[BCM2835_NUM_IRQS];
|
||||
|
||||
/* note: locking assumes each bank will have its own unsigned long */
|
||||
unsigned long enabled_irq_map[BCM2835_NUM_BANKS];
|
||||
@@ -381,14 +382,14 @@ static void bcm2835_gpio_irq_handler(str
|
||||
int group;
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < BCM2835_NUM_IRQS; i++) {
|
||||
- if (chip->irq.parents[i] == irq) {
|
||||
+ for (i = 0; i < ARRAY_SIZE(pc->irq); i++) {
|
||||
+ if (pc->irq[i] == irq) {
|
||||
group = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* This should not happen, every IRQ has a bank */
|
||||
- if (i == BCM2835_NUM_IRQS)
|
||||
+ if (i == ARRAY_SIZE(pc->irq))
|
||||
BUG();
|
||||
|
||||
chained_irq_enter(host_chip, desc);
|
||||
@@ -1086,7 +1087,6 @@ static int bcm2835_pinctrl_probe(struct
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *np = dev->of_node;
|
||||
struct bcm2835_pinctrl *pc;
|
||||
- struct gpio_irq_chip *girq;
|
||||
struct resource iomem;
|
||||
int err, i;
|
||||
const struct of_device_id *match;
|
||||
@@ -1135,33 +1135,38 @@ static int bcm2835_pinctrl_probe(struct
|
||||
raw_spin_lock_init(&pc->irq_lock[i]);
|
||||
}
|
||||
|
||||
- girq = &pc->gpio_chip.irq;
|
||||
- girq->chip = &bcm2835_gpio_irq_chip;
|
||||
- girq->parent_handler = bcm2835_gpio_irq_handler;
|
||||
- girq->num_parents = BCM2835_NUM_IRQS;
|
||||
- girq->parents = devm_kcalloc(dev, BCM2835_NUM_IRQS,
|
||||
- sizeof(*girq->parents),
|
||||
- GFP_KERNEL);
|
||||
- if (!girq->parents)
|
||||
- return -ENOMEM;
|
||||
- /*
|
||||
- * Use the same handler for all groups: this is necessary
|
||||
- * since we use one gpiochip to cover all lines - the
|
||||
- * irq handler then needs to figure out which group and
|
||||
- * bank that was firing the IRQ and look up the per-group
|
||||
- * and bank data.
|
||||
- */
|
||||
- for (i = 0; i < BCM2835_NUM_IRQS; i++)
|
||||
- girq->parents[i] = irq_of_parse_and_map(np, i);
|
||||
- girq->default_type = IRQ_TYPE_NONE;
|
||||
- girq->handler = handle_level_irq;
|
||||
-
|
||||
err = gpiochip_add_data(&pc->gpio_chip, pc);
|
||||
if (err) {
|
||||
dev_err(dev, "could not add GPIO chip\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
+ err = gpiochip_irqchip_add(&pc->gpio_chip, &bcm2835_gpio_irq_chip,
|
||||
+ 0, handle_level_irq, IRQ_TYPE_NONE);
|
||||
+ if (err) {
|
||||
+ dev_info(dev, "could not add irqchip\n");
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < BCM2835_NUM_IRQS; i++) {
|
||||
+ pc->irq[i] = irq_of_parse_and_map(np, i);
|
||||
+
|
||||
+ if (pc->irq[i] == 0)
|
||||
+ continue;
|
||||
+
|
||||
+ /*
|
||||
+ * Use the same handler for all groups: this is necessary
|
||||
+ * since we use one gpiochip to cover all lines - the
|
||||
+ * irq handler then needs to figure out which group and
|
||||
+ * bank that was firing the IRQ and look up the per-group
|
||||
+ * and bank data.
|
||||
+ */
|
||||
+ gpiochip_set_chained_irqchip(&pc->gpio_chip,
|
||||
+ &bcm2835_gpio_irq_chip,
|
||||
+ pc->irq[i],
|
||||
+ bcm2835_gpio_irq_handler);
|
||||
+ }
|
||||
+
|
||||
match = of_match_node(bcm2835_pinctrl_match, pdev->dev.of_node);
|
||||
if (match) {
|
||||
bcm2835_pinctrl_desc.confops =
|
@ -12,7 +12,7 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
|
||||
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -1734,16 +1734,12 @@ static const struct bcm2835_clk_desc clk
|
||||
@@ -1729,16 +1729,12 @@ static const struct bcm2835_clk_desc clk
|
||||
.hold_mask = CM_PLLA_HOLDCORE,
|
||||
.fixed_divider = 1,
|
||||
.flags = CLK_SET_RATE_PARENT),
|
||||
@ -35,7 +35,7 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
|
||||
[BCM2835_PLLA_DSI0] = REGISTER_PLL_DIV(
|
||||
SOC_ALL,
|
||||
.name = "plla_dsi0",
|
||||
@@ -2021,14 +2017,12 @@ static const struct bcm2835_clk_desc clk
|
||||
@@ -2016,14 +2012,12 @@ static const struct bcm2835_clk_desc clk
|
||||
.int_bits = 6,
|
||||
.frac_bits = 0,
|
||||
.tcnt_mux = 3),
|
||||
|
@ -14,12 +14,12 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
@@ -1135,7 +1135,7 @@ static int bcm2835_pinctrl_probe(struct
|
||||
raw_spin_lock_init(&pc->irq_lock[i]);
|
||||
}
|
||||
@@ -1315,7 +1315,7 @@ static int bcm2835_pinctrl_probe(struct
|
||||
girq->default_type = IRQ_TYPE_NONE;
|
||||
girq->handler = handle_level_irq;
|
||||
|
||||
- err = gpiochip_add_data(&pc->gpio_chip, pc);
|
||||
+ err = devm_gpiochip_add_data(dev, &pc->gpio_chip, pc);
|
||||
if (err) {
|
||||
dev_err(dev, "could not add GPIO chip\n");
|
||||
return err;
|
||||
goto out_remove;
|
||||
|
@ -1,88 +0,0 @@
|
||||
From 27cb8bf0442f677380a1df93b93b7589b7ce5243 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 6 Jan 2020 14:05:42 +0000
|
||||
Subject: [PATCH] pinctrl: bcm2835: Change init order for gpio hogs
|
||||
|
||||
pinctrl-bcm2835 is a combined pinctrl/gpio driver. Currently the gpio
|
||||
side is registered first, but this breaks gpio hogs (which are
|
||||
configured during gpiochip_add_data). Part of the hog initialisation
|
||||
is a call to pinctrl_gpio_request, and since the pinctrl driver hasn't
|
||||
yet been registered this results in an -EPROBE_DEFER from which it can
|
||||
never recover.
|
||||
|
||||
Change the initialisation sequence to register the pinctrl driver
|
||||
first.
|
||||
|
||||
See: https://www.raspberrypi.org/forums/viewtopic.php?f=107&t=260600
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
drivers/pinctrl/bcm/pinctrl-bcm2835.c | 40 ++++++++++++---------------
|
||||
1 file changed, 17 insertions(+), 23 deletions(-)
|
||||
|
||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
@@ -1135,9 +1135,25 @@ static int bcm2835_pinctrl_probe(struct
|
||||
raw_spin_lock_init(&pc->irq_lock[i]);
|
||||
}
|
||||
|
||||
+ match = of_match_node(bcm2835_pinctrl_match, pdev->dev.of_node);
|
||||
+ if (match) {
|
||||
+ bcm2835_pinctrl_desc.confops =
|
||||
+ (const struct pinconf_ops *)match->data;
|
||||
+ }
|
||||
+
|
||||
+ pc->pctl_dev = devm_pinctrl_register(dev, &bcm2835_pinctrl_desc, pc);
|
||||
+ if (IS_ERR(pc->pctl_dev))
|
||||
+ return PTR_ERR(pc->pctl_dev);
|
||||
+
|
||||
+ pc->gpio_range = bcm2835_pinctrl_gpio_range;
|
||||
+ pc->gpio_range.base = pc->gpio_chip.base;
|
||||
+ pc->gpio_range.gc = &pc->gpio_chip;
|
||||
+ pinctrl_add_gpio_range(pc->pctl_dev, &pc->gpio_range);
|
||||
+
|
||||
err = devm_gpiochip_add_data(dev, &pc->gpio_chip, pc);
|
||||
if (err) {
|
||||
dev_err(dev, "could not add GPIO chip\n");
|
||||
+ pinctrl_remove_gpio_range(pc->pctl_dev, &pc->gpio_range);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -1145,6 +1161,7 @@ static int bcm2835_pinctrl_probe(struct
|
||||
0, handle_level_irq, IRQ_TYPE_NONE);
|
||||
if (err) {
|
||||
dev_info(dev, "could not add irqchip\n");
|
||||
+ pinctrl_remove_gpio_range(pc->pctl_dev, &pc->gpio_range);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -1167,29 +1184,6 @@ static int bcm2835_pinctrl_probe(struct
|
||||
bcm2835_gpio_irq_handler);
|
||||
}
|
||||
|
||||
- match = of_match_node(bcm2835_pinctrl_match, pdev->dev.of_node);
|
||||
- if (match) {
|
||||
- bcm2835_pinctrl_desc.confops =
|
||||
- (const struct pinconf_ops *)match->data;
|
||||
- }
|
||||
-
|
||||
- match = of_match_node(bcm2835_pinctrl_match, pdev->dev.of_node);
|
||||
- if (match) {
|
||||
- bcm2835_pinctrl_desc.confops =
|
||||
- (const struct pinconf_ops *)match->data;
|
||||
- }
|
||||
-
|
||||
- pc->pctl_dev = devm_pinctrl_register(dev, &bcm2835_pinctrl_desc, pc);
|
||||
- if (IS_ERR(pc->pctl_dev)) {
|
||||
- gpiochip_remove(&pc->gpio_chip);
|
||||
- return PTR_ERR(pc->pctl_dev);
|
||||
- }
|
||||
-
|
||||
- pc->gpio_range = bcm2835_pinctrl_gpio_range;
|
||||
- pc->gpio_range.base = pc->gpio_chip.base;
|
||||
- pc->gpio_range.gc = &pc->gpio_chip;
|
||||
- pinctrl_add_gpio_range(pc->pctl_dev, &pc->gpio_range);
|
||||
-
|
||||
return 0;
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
|
||||
|
||||
--- a/arch/arm/boot/dts/bcm283x.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm283x.dtsi
|
||||
@@ -635,22 +635,16 @@
|
||||
@@ -636,22 +636,16 @@
|
||||
};
|
||||
|
||||
clocks {
|
||||
|
@ -78,7 +78,7 @@ Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
|
||||
arm-pmu {
|
||||
--- a/arch/arm/boot/dts/bcm283x.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm283x.dtsi
|
||||
@@ -432,18 +432,6 @@
|
||||
@@ -433,18 +433,6 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -97,7 +97,7 @@ Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
|
||||
dpi: dpi@7e208000 {
|
||||
compatible = "brcm,bcm2835-dpi";
|
||||
reg = <0x7e208000 0x8c>;
|
||||
@@ -608,12 +596,6 @@
|
||||
@@ -609,12 +597,6 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -25,7 +25,7 @@ Co-authored-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -2401,7 +2401,7 @@ static int __init __bcm2835_clk_driver_i
|
||||
@@ -2396,7 +2396,7 @@ static int __init __bcm2835_clk_driver_i
|
||||
{
|
||||
return platform_driver_register(&bcm2835_clk_driver);
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
static void pl011_stop_rx(struct uart_port *port)
|
||||
{
|
||||
struct uart_amba_port *uap =
|
||||
@@ -2167,6 +2193,8 @@ static const struct uart_ops amba_pl011_
|
||||
@@ -2150,6 +2176,8 @@ static const struct uart_ops amba_pl011_
|
||||
.stop_tx = pl011_stop_tx,
|
||||
.start_tx = pl011_start_tx,
|
||||
.stop_rx = pl011_stop_rx,
|
||||
|
@ -1771,7 +1771,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
compatible = "brcm,bcm2835-rng";
|
||||
reg = <0x7e104000 0x10>;
|
||||
interrupts = <2 29>;
|
||||
@@ -269,35 +212,6 @@
|
||||
@@ -270,35 +213,6 @@
|
||||
brcm,function = <BCM2835_FSEL_ALT2>;
|
||||
};
|
||||
|
||||
@ -1807,7 +1807,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
sdhost_gpio48: sdhost_gpio48 {
|
||||
brcm,pins = <48 49 50 51 52 53>;
|
||||
brcm,function = <BCM2835_FSEL_ALT0>;
|
||||
@@ -379,7 +293,7 @@
|
||||
@@ -380,7 +294,7 @@
|
||||
};
|
||||
|
||||
uart0: serial@7e201000 {
|
||||
@ -1816,7 +1816,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
reg = <0x7e201000 0x200>;
|
||||
interrupts = <2 25>;
|
||||
clocks = <&clocks BCM2835_CLOCK_UART>,
|
||||
@@ -393,8 +307,6 @@
|
||||
@@ -394,8 +308,6 @@
|
||||
reg = <0x7e202000 0x100>;
|
||||
interrupts = <2 24>;
|
||||
clocks = <&clocks BCM2835_CLOCK_VPU>;
|
||||
@ -1825,7 +1825,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -402,10 +314,6 @@
|
||||
@@ -403,10 +315,6 @@
|
||||
compatible = "brcm,bcm2835-i2s";
|
||||
reg = <0x7e203000 0x24>;
|
||||
clocks = <&clocks BCM2835_CLOCK_PCM>;
|
||||
@ -1836,7 +1836,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -414,8 +322,6 @@
|
||||
@@ -415,8 +323,6 @@
|
||||
reg = <0x7e204000 0x200>;
|
||||
interrupts = <2 22>;
|
||||
clocks = <&clocks BCM2835_CLOCK_VPU>;
|
||||
@ -1845,7 +1845,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
@@ -541,32 +447,6 @@
|
||||
@@ -542,32 +448,6 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -1878,7 +1878,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
i2c1: i2c@7e804000 {
|
||||
compatible = "brcm,bcm2835-i2c";
|
||||
reg = <0x7e804000 0x1000>;
|
||||
@@ -577,16 +457,6 @@
|
||||
@@ -578,16 +458,6 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -1895,7 +1895,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
vec: vec@7e806000 {
|
||||
compatible = "brcm,bcm2835-vec";
|
||||
reg = <0x7e806000 0x1000>;
|
||||
@@ -595,20 +465,6 @@
|
||||
@@ -596,20 +466,6 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -1916,7 +1916,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
usb: usb@7e980000 {
|
||||
compatible = "brcm,bcm2835-usb";
|
||||
reg = <0x7e980000 0x10000>;
|
||||
@@ -620,10 +476,6 @@
|
||||
@@ -621,10 +477,6 @@
|
||||
phys = <&usbphy>;
|
||||
phy-names = "usb2-phy";
|
||||
};
|
||||
|
@ -82,7 +82,7 @@ Cc: linux-rockchip@lists.infradead.org
|
||||
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -1523,7 +1523,8 @@ static int advk_pcie_probe(struct platfo
|
||||
@@ -1525,7 +1525,8 @@ static int advk_pcie_probe(struct platfo
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -392,7 +392,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
+};
|
||||
--- a/arch/arm/boot/dts/bcm283x.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm283x.dtsi
|
||||
@@ -340,7 +340,7 @@
|
||||
@@ -341,7 +341,7 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -401,7 +401,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
compatible = "brcm,bcm2835-i2c";
|
||||
reg = <0x7e205000 0x200>;
|
||||
interrupts = <2 21>;
|
||||
@@ -350,6 +350,30 @@
|
||||
@@ -351,6 +351,30 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -44,7 +44,7 @@ Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
|
||||
|
||||
if ((rcsi2_read(priv, PHCLM_REG) & PHCLM_STOPSTATECKL) &&
|
||||
(rcsi2_read(priv, PHDLM_REG) & lane_mask) == lane_mask)
|
||||
@@ -445,7 +447,8 @@ static int rcsi2_set_phypll(struct rcar_
|
||||
@@ -452,7 +454,8 @@ static int rcsi2_set_phypll(struct rcar_
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -54,7 +54,7 @@ Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
|
||||
{
|
||||
struct v4l2_subdev *source;
|
||||
struct v4l2_ctrl *ctrl;
|
||||
@@ -470,15 +473,63 @@ static int rcsi2_calc_mbps(struct rcar_c
|
||||
@@ -477,15 +480,63 @@ static int rcsi2_calc_mbps(struct rcar_c
|
||||
* bps = link_freq * 2
|
||||
*/
|
||||
mbps = v4l2_ctrl_g_ctrl_int64(ctrl) * bpp;
|
||||
@ -119,7 +119,7 @@ Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
|
||||
unsigned int i;
|
||||
int mbps, ret;
|
||||
|
||||
@@ -522,10 +573,18 @@ static int rcsi2_start_receiver(struct r
|
||||
@@ -529,10 +580,18 @@ static int rcsi2_start_receiver(struct r
|
||||
fld |= FLD_FLD_NUM(1);
|
||||
}
|
||||
|
||||
@ -140,7 +140,7 @@ Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
|
||||
if (mbps < 0)
|
||||
return mbps;
|
||||
|
||||
@@ -572,7 +631,7 @@ static int rcsi2_start_receiver(struct r
|
||||
@@ -579,7 +638,7 @@ static int rcsi2_start_receiver(struct r
|
||||
rcsi2_write(priv, PHYCNT_REG, phycnt | PHYCNT_SHUTDOWNZ);
|
||||
rcsi2_write(priv, PHYCNT_REG, phycnt | PHYCNT_SHUTDOWNZ | PHYCNT_RSTZ);
|
||||
|
||||
@ -149,7 +149,7 @@ Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -749,6 +808,7 @@ static int rcsi2_notify_bound(struct v4l
|
||||
@@ -756,6 +815,7 @@ static int rcsi2_notify_bound(struct v4l
|
||||
}
|
||||
|
||||
priv->remote = subdev;
|
||||
|
@ -18,7 +18,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
|
||||
--- a/drivers/bluetooth/hci_bcm.c
|
||||
+++ b/drivers/bluetooth/hci_bcm.c
|
||||
@@ -1427,6 +1427,7 @@ static const struct of_device_id bcm_blu
|
||||
@@ -1432,6 +1432,7 @@ static const struct of_device_id bcm_blu
|
||||
{ .compatible = "brcm,bcm4345c5" },
|
||||
{ .compatible = "brcm,bcm4330-bt" },
|
||||
{ .compatible = "brcm,bcm43438-bt" },
|
||||
|
@ -48,7 +48,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
|
||||
--- a/drivers/bluetooth/hci_bcm.c
|
||||
+++ b/drivers/bluetooth/hci_bcm.c
|
||||
@@ -1428,6 +1428,7 @@ static const struct of_device_id bcm_blu
|
||||
@@ -1433,6 +1433,7 @@ static const struct of_device_id bcm_blu
|
||||
{ .compatible = "brcm,bcm4330-bt" },
|
||||
{ .compatible = "brcm,bcm43438-bt" },
|
||||
{ .compatible = "brcm,bcm43540-bt" },
|
||||
|
@ -76,7 +76,7 @@ Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
|
||||
else if (hu->proto->oper_speed)
|
||||
speed = hu->proto->oper_speed;
|
||||
else
|
||||
@@ -1377,6 +1395,7 @@ static struct platform_driver bcm_driver
|
||||
@@ -1382,6 +1400,7 @@ static struct platform_driver bcm_driver
|
||||
static int bcm_serdev_probe(struct serdev_device *serdev)
|
||||
{
|
||||
struct bcm_device *bcmdev;
|
||||
@ -84,7 +84,7 @@ Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
|
||||
int err;
|
||||
|
||||
bcmdev = devm_kzalloc(&serdev->dev, sizeof(*bcmdev), GFP_KERNEL);
|
||||
@@ -1411,6 +1430,10 @@ static int bcm_serdev_probe(struct serde
|
||||
@@ -1416,6 +1435,10 @@ static int bcm_serdev_probe(struct serde
|
||||
if (err)
|
||||
dev_err(&serdev->dev, "Failed to power down\n");
|
||||
|
||||
@ -95,7 +95,7 @@ Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
|
||||
return hci_uart_register_device(&bcmdev->serdev_hu, &bcm_proto);
|
||||
}
|
||||
|
||||
@@ -1422,12 +1445,16 @@ static void bcm_serdev_remove(struct ser
|
||||
@@ -1427,12 +1450,16 @@ static void bcm_serdev_remove(struct ser
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
|
@ -52,9 +52,9 @@ Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1149,6 +1162,9 @@ static int bcm_probe(struct platform_dev
|
||||
dev->dev = &pdev->dev;
|
||||
dev->irq = platform_get_irq(pdev, 0);
|
||||
@@ -1154,6 +1167,9 @@ static int bcm_probe(struct platform_dev
|
||||
|
||||
dev->irq = ret;
|
||||
|
||||
+ /* Initialize routing field to an unused value */
|
||||
+ dev->pcm_int_params[0] = 0xff;
|
||||
@ -62,7 +62,7 @@ Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
|
||||
if (has_acpi_companion(&pdev->dev)) {
|
||||
ret = bcm_acpi_probe(dev);
|
||||
if (ret)
|
||||
@@ -1409,6 +1425,9 @@ static int bcm_serdev_probe(struct serde
|
||||
@@ -1414,6 +1430,9 @@ static int bcm_serdev_probe(struct serde
|
||||
bcmdev->serdev_hu.serdev = serdev;
|
||||
serdev_device_set_drvdata(serdev, bcmdev);
|
||||
|
||||
|
@ -61,7 +61,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
if (err)
|
||||
goto err_unset_hu;
|
||||
}
|
||||
@@ -1450,8 +1457,10 @@ static int bcm_serdev_probe(struct serde
|
||||
@@ -1455,8 +1462,10 @@ static int bcm_serdev_probe(struct serde
|
||||
dev_err(&serdev->dev, "Failed to power down\n");
|
||||
|
||||
data = device_get_match_data(bcmdev->dev);
|
||||
@ -73,7 +73,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
|
||||
return hci_uart_register_device(&bcmdev->serdev_hu, &bcm_proto);
|
||||
}
|
||||
@@ -1468,11 +1477,15 @@ static struct bcm_device_data bcm4354_de
|
||||
@@ -1473,11 +1482,15 @@ static struct bcm_device_data bcm4354_de
|
||||
.no_early_set_baudrate = true,
|
||||
};
|
||||
|
||||
|
@ -59,7 +59,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
/* Reinitialize TDMA and RDMA and SW housekeeping */
|
||||
ret = bcmgenet_init_dma(priv);
|
||||
@@ -3665,7 +3673,7 @@ static int bcmgenet_resume(struct device
|
||||
@@ -3667,7 +3675,7 @@ static int bcmgenet_resume(struct device
|
||||
bcmgenet_power_up(priv, GENET_POWER_WOL_MAGIC);
|
||||
|
||||
/* Disable RX/TX DMA and flush TX queues */
|
||||
|
@ -49,7 +49,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
.phy_id = PHY_ID_BCM5461,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM5461",
|
||||
@@ -753,7 +762,8 @@ module_phy_driver(broadcom_drivers);
|
||||
@@ -754,7 +763,8 @@ module_phy_driver(broadcom_drivers);
|
||||
static struct mdio_device_id __maybe_unused broadcom_tbl[] = {
|
||||
{ PHY_ID_BCM5411, 0xfffffff0 },
|
||||
{ PHY_ID_BCM5421, 0xfffffff0 },
|
||||
|
@ -98,6 +98,9 @@ CONFIG_GENERIC_MSI_IRQ=y
|
||||
CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
|
||||
CONFIG_GENERIC_PCI_IOMAP=y
|
||||
CONFIG_GENERIC_PHY=y
|
||||
CONFIG_GENERIC_PINCONF=y
|
||||
CONFIG_GENERIC_PINCTRL_GROUPS=y
|
||||
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
|
||||
CONFIG_GENERIC_SCHED_CLOCK=y
|
||||
CONFIG_GENERIC_SMP_IDLE_THREAD=y
|
||||
CONFIG_GENERIC_STRNCPY_FROM_USER=y
|
||||
@ -116,6 +119,9 @@ CONFIG_HOLES_IN_ZONE=y
|
||||
CONFIG_HZ=250
|
||||
CONFIG_HZ_250=y
|
||||
CONFIG_HZ_PERIODIC=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_BRCMSTB=y
|
||||
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
|
||||
CONFIG_IRQCHIP=y
|
||||
CONFIG_IRQ_DOMAIN=y
|
||||
@ -177,6 +183,9 @@ CONFIG_PHYLIB=y
|
||||
CONFIG_PHYLINK=y
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_PHY_BRCM_USB=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_BCM4908=y
|
||||
# CONFIG_PINCTRL_SINGLE is not set
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_CLK=y
|
||||
CONFIG_PM_GENERIC_DOMAINS=y
|
||||
|
@ -0,0 +1,47 @@
|
||||
From 33826e9c6ba76b265d4e26cb95493fa27ed78974 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Wed, 29 Dec 2021 11:23:14 +0100
|
||||
Subject: [PATCH] arm64: dts: broadcom: bcm4908: use proper TWD binding
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Block at <ff800400 0x4c> is a TWD that contains timers, watchdog and
|
||||
reset. Actual timers happen to be at block beginning but they only span
|
||||
across the first 0x28 registers. It means the old block description was
|
||||
incorrect (size 0x3c).
|
||||
|
||||
Drop timers binding for now and use documented TWD binding. Timers
|
||||
should be properly documented and defined as TWD subnode.
|
||||
|
||||
Fixes: 2961f69f151c ("arm64: dts: broadcom: add BCM4908 and Asus GT-AC5300 early DTS files")
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
---
|
||||
arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
|
||||
@@ -273,9 +273,9 @@
|
||||
#size-cells = <1>;
|
||||
ranges = <0x00 0x00 0xff800000 0x3000>;
|
||||
|
||||
- timer: timer@400 {
|
||||
- compatible = "brcm,bcm6328-timer", "syscon";
|
||||
- reg = <0x400 0x3c>;
|
||||
+ twd: timer-mfd@400 {
|
||||
+ compatible = "brcm,bcm4908-twd", "simple-mfd", "syscon";
|
||||
+ reg = <0x400 0x4c>;
|
||||
};
|
||||
|
||||
gpio0: gpio-controller@500 {
|
||||
@@ -330,7 +330,7 @@
|
||||
|
||||
reboot {
|
||||
compatible = "syscon-reboot";
|
||||
- regmap = <&timer>;
|
||||
+ regmap = <&twd>;
|
||||
offset = <0x34>;
|
||||
mask = <1>;
|
||||
};
|
@ -0,0 +1,160 @@
|
||||
From 72b1c5da796ec5266f2012c36470e226cb4f09c9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Thu, 30 Dec 2021 12:05:35 +0100
|
||||
Subject: [PATCH] arm64: dts: broadcom: bcm4908: add pinctrl binding
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Describe pinmux block with its maps.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
---
|
||||
.../boot/dts/broadcom/bcm4908/bcm4908.dtsi | 135 ++++++++++++++++++
|
||||
1 file changed, 135 insertions(+)
|
||||
|
||||
--- a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
|
||||
@@ -287,6 +287,141 @@
|
||||
gpio-controller;
|
||||
};
|
||||
|
||||
+ pinctrl@560 {
|
||||
+ compatible = "brcm,bcm4908-pinctrl";
|
||||
+ reg = <0x560 0x10>;
|
||||
+
|
||||
+ pins_led_0_a: led_0-a-pins {
|
||||
+ function = "led_0";
|
||||
+ groups = "led_0_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_1_a: led_1-a-pins {
|
||||
+ function = "led_1";
|
||||
+ groups = "led_1_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_2_a: led_2-a-pins {
|
||||
+ function = "led_2";
|
||||
+ groups = "led_2_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_3_a: led_3-a-pins {
|
||||
+ function = "led_3";
|
||||
+ groups = "led_3_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_4_a: led_4-a-pins {
|
||||
+ function = "led_4";
|
||||
+ groups = "led_4_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_5_a: led_5-a-pins {
|
||||
+ function = "led_5";
|
||||
+ groups = "led_5_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_6_a: led_6-a-pins {
|
||||
+ function = "led_6";
|
||||
+ groups = "led_6_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_7_a: led_7-a-pins {
|
||||
+ function = "led_7";
|
||||
+ groups = "led_7_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_8_a: led_8-a-pins {
|
||||
+ function = "led_8";
|
||||
+ groups = "led_8_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_9_a: led_9-a-pins {
|
||||
+ function = "led_9";
|
||||
+ groups = "led_9_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_21_a: led_21-a-pins {
|
||||
+ function = "led_21";
|
||||
+ groups = "led_21_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_22_a: led_22-a-pins {
|
||||
+ function = "led_22";
|
||||
+ groups = "led_22_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_26_a: led_26-a-pins {
|
||||
+ function = "led_26";
|
||||
+ groups = "led_26_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_27_a: led_27-a-pins {
|
||||
+ function = "led_27";
|
||||
+ groups = "led_27_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_28_a: led_28-a-pins {
|
||||
+ function = "led_28";
|
||||
+ groups = "led_28_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_29_a: led_29-a-pins {
|
||||
+ function = "led_29";
|
||||
+ groups = "led_29_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_led_30_a: led_30-a-pins {
|
||||
+ function = "led_30";
|
||||
+ groups = "led_30_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_hs_uart: hs_uart-pins {
|
||||
+ function = "hs_uart";
|
||||
+ groups = "hs_uart_grp";
|
||||
+ };
|
||||
+
|
||||
+ pins_i2c_a: i2c-a-pins {
|
||||
+ function = "i2c";
|
||||
+ groups = "i2c_grp_a";
|
||||
+ };
|
||||
+
|
||||
+ pins_i2c_b: i2c-b-pins {
|
||||
+ function = "i2c";
|
||||
+ groups = "i2c_grp_b";
|
||||
+ };
|
||||
+
|
||||
+ pins_i2s: i2s-pins {
|
||||
+ function = "i2s";
|
||||
+ groups = "i2s_grp";
|
||||
+ };
|
||||
+
|
||||
+ pins_nand_ctrl: nand_ctrl-pins {
|
||||
+ function = "nand_ctrl";
|
||||
+ groups = "nand_ctrl_grp";
|
||||
+ };
|
||||
+
|
||||
+ pins_nand_data: nand_data-pins {
|
||||
+ function = "nand_data";
|
||||
+ groups = "nand_data_grp";
|
||||
+ };
|
||||
+
|
||||
+ pins_emmc_ctrl: emmc_ctrl-pins {
|
||||
+ function = "emmc_ctrl";
|
||||
+ groups = "emmc_ctrl_grp";
|
||||
+ };
|
||||
+
|
||||
+ pins_usb0_pwr: usb0_pwr-pins {
|
||||
+ function = "usb0_pwr";
|
||||
+ groups = "usb0_pwr_grp";
|
||||
+ };
|
||||
+
|
||||
+ pins_usb1_pwr: usb1_pwr-pins {
|
||||
+ function = "usb1_pwr";
|
||||
+ groups = "usb1_pwr_grp";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
uart0: serial@640 {
|
||||
compatible = "brcm,bcm6345-uart";
|
||||
reg = <0x640 0x18>;
|
@ -0,0 +1,35 @@
|
||||
From 47513f6dd93b5b7d91143219c2c1fb883664ed13 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Wed, 9 Feb 2022 21:14:17 +0100
|
||||
Subject: [PATCH] arm64: dts: broadcom: bcm4908: add watchdog block
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
BCM4908 has the same watchdog as BCM63xx devices. Use "brcm,bcm6345-wdt"
|
||||
binding which matches the first SoC with that block.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
---
|
||||
arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
--- a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
|
||||
@@ -276,6 +276,15 @@
|
||||
twd: timer-mfd@400 {
|
||||
compatible = "brcm,bcm4908-twd", "simple-mfd", "syscon";
|
||||
reg = <0x400 0x4c>;
|
||||
+ ranges = <0x0 0x400 0x4c>;
|
||||
+
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+
|
||||
+ watchdog@28 {
|
||||
+ compatible = "brcm,bcm6345-wdt";
|
||||
+ reg = <0x28 0x8>;
|
||||
+ };
|
||||
};
|
||||
|
||||
gpio0: gpio-controller@500 {
|
@ -0,0 +1,34 @@
|
||||
From ba5dfa2fd8d0aed4e4b6f650ba9e8ea7cdd6ead1 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 15 Feb 2022 07:36:39 +0100
|
||||
Subject: [PATCH] arm64: dts: broadcom: bcm4908: add I2C block
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
BCM4908 uses the same I2C hw as BCM63xx / BCM67xx / BCM68xx SoCs.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
---
|
||||
arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
--- a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
|
||||
@@ -456,6 +456,15 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ i2c@2100 {
|
||||
+ compatible = "brcm,brcmper-i2c";
|
||||
+ reg = <0x2100 0x58>;
|
||||
+ clock-frequency = <97500>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pins_i2c_a>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
misc@2600 {
|
||||
compatible = "brcm,misc", "simple-mfd";
|
||||
reg = <0x2600 0xe4>;
|
@ -0,0 +1,209 @@
|
||||
From af30f8eaa8fe4ff1987280f716309711997bd979 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Wed, 29 Dec 2021 18:16:42 +0100
|
||||
Subject: [PATCH] net: dsa: bcm_sf2: refactor LED regs access
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
1. Define more regs. Some switches (e.g. BCM4908) have up to 6 regs.
|
||||
2. Add helper for handling non-lineral port <-> reg mappings.
|
||||
3. Add support for 12 B LED reg blocks on BCM4908 (different layout)
|
||||
|
||||
Complete support for LEDs setup will be implemented once Linux receives
|
||||
a proper design & implementation for "hardware" LEDs.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20211229171642.22942-1-zajec5@gmail.com
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/dsa/bcm_sf2.c | 54 ++++++++++++++++++++++++----
|
||||
drivers/net/dsa/bcm_sf2.h | 10 ++++++
|
||||
drivers/net/dsa/bcm_sf2_regs.h | 65 +++++++++++++++++++++++++++++++---
|
||||
3 files changed, 119 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/net/dsa/bcm_sf2.c
|
||||
+++ b/drivers/net/dsa/bcm_sf2.c
|
||||
@@ -31,6 +31,38 @@
|
||||
#include "b53/b53_priv.h"
|
||||
#include "b53/b53_regs.h"
|
||||
|
||||
+static u16 bcm_sf2_reg_led_base(struct bcm_sf2_priv *priv, int port)
|
||||
+{
|
||||
+ switch (port) {
|
||||
+ case 0:
|
||||
+ return REG_LED_0_CNTRL;
|
||||
+ case 1:
|
||||
+ return REG_LED_1_CNTRL;
|
||||
+ case 2:
|
||||
+ return REG_LED_2_CNTRL;
|
||||
+ }
|
||||
+
|
||||
+ switch (priv->type) {
|
||||
+ case BCM4908_DEVICE_ID:
|
||||
+ switch (port) {
|
||||
+ case 3:
|
||||
+ return REG_LED_3_CNTRL;
|
||||
+ case 7:
|
||||
+ return REG_LED_4_CNTRL;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ WARN_ONCE(1, "Unsupported port %d\n", port);
|
||||
+
|
||||
+ /* RO fallback reg */
|
||||
+ return REG_SWITCH_STATUS;
|
||||
+}
|
||||
+
|
||||
static u16 bcm_sf2_reg_rgmii_cntrl(struct bcm_sf2_priv *priv, int port)
|
||||
{
|
||||
switch (priv->type) {
|
||||
@@ -141,9 +173,14 @@ static void bcm_sf2_gphy_enable_set(stru
|
||||
|
||||
/* Use PHY-driven LED signaling */
|
||||
if (!enable) {
|
||||
- reg = reg_readl(priv, REG_LED_CNTRL(0));
|
||||
- reg |= SPDLNK_SRC_SEL;
|
||||
- reg_writel(priv, reg, REG_LED_CNTRL(0));
|
||||
+ u16 led_ctrl = bcm_sf2_reg_led_base(priv, 0);
|
||||
+
|
||||
+ if (priv->type == BCM7278_DEVICE_ID ||
|
||||
+ priv->type == BCM7445_DEVICE_ID) {
|
||||
+ reg = reg_led_readl(priv, led_ctrl, 0);
|
||||
+ reg |= LED_CNTRL_SPDLNK_SRC_SEL;
|
||||
+ reg_led_writel(priv, reg, led_ctrl, 0);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1085,9 +1122,14 @@ static const u16 bcm_sf2_4908_reg_offset
|
||||
[REG_SPHY_CNTRL] = 0x24,
|
||||
[REG_CROSSBAR] = 0xc8,
|
||||
[REG_RGMII_11_CNTRL] = 0x014c,
|
||||
- [REG_LED_0_CNTRL] = 0x40,
|
||||
- [REG_LED_1_CNTRL] = 0x4c,
|
||||
- [REG_LED_2_CNTRL] = 0x58,
|
||||
+ [REG_LED_0_CNTRL] = 0x40,
|
||||
+ [REG_LED_1_CNTRL] = 0x4c,
|
||||
+ [REG_LED_2_CNTRL] = 0x58,
|
||||
+ [REG_LED_3_CNTRL] = 0x64,
|
||||
+ [REG_LED_4_CNTRL] = 0x88,
|
||||
+ [REG_LED_5_CNTRL] = 0xa0,
|
||||
+ [REG_LED_AGGREGATE_CTRL] = 0xb8,
|
||||
+
|
||||
};
|
||||
|
||||
static const struct bcm_sf2_of_data bcm_sf2_4908_data = {
|
||||
--- a/drivers/net/dsa/bcm_sf2.h
|
||||
+++ b/drivers/net/dsa/bcm_sf2.h
|
||||
@@ -203,6 +203,16 @@ SF2_IO_MACRO(acb);
|
||||
SWITCH_INTR_L2(0);
|
||||
SWITCH_INTR_L2(1);
|
||||
|
||||
+static inline u32 reg_led_readl(struct bcm_sf2_priv *priv, u16 off, u16 reg)
|
||||
+{
|
||||
+ return readl_relaxed(priv->reg + priv->reg_offsets[off] + reg);
|
||||
+}
|
||||
+
|
||||
+static inline void reg_led_writel(struct bcm_sf2_priv *priv, u32 val, u16 off, u16 reg)
|
||||
+{
|
||||
+ writel_relaxed(val, priv->reg + priv->reg_offsets[off] + reg);
|
||||
+}
|
||||
+
|
||||
/* RXNFC */
|
||||
int bcm_sf2_get_rxnfc(struct dsa_switch *ds, int port,
|
||||
struct ethtool_rxnfc *nfc, u32 *rule_locs);
|
||||
--- a/drivers/net/dsa/bcm_sf2_regs.h
|
||||
+++ b/drivers/net/dsa/bcm_sf2_regs.h
|
||||
@@ -25,6 +25,10 @@ enum bcm_sf2_reg_offs {
|
||||
REG_LED_0_CNTRL,
|
||||
REG_LED_1_CNTRL,
|
||||
REG_LED_2_CNTRL,
|
||||
+ REG_LED_3_CNTRL,
|
||||
+ REG_LED_4_CNTRL,
|
||||
+ REG_LED_5_CNTRL,
|
||||
+ REG_LED_AGGREGATE_CTRL,
|
||||
REG_SWITCH_REG_MAX,
|
||||
};
|
||||
|
||||
@@ -56,6 +60,63 @@ enum bcm_sf2_reg_offs {
|
||||
#define CROSSBAR_BCM4908_EXT_GPHY4 1
|
||||
#define CROSSBAR_BCM4908_EXT_RGMII 2
|
||||
|
||||
+/* Relative to REG_LED_*_CNTRL (BCM7278, BCM7445) */
|
||||
+#define LED_CNTRL_NO_LINK_ENCODE_SHIFT 0
|
||||
+#define LED_CNTRL_M10_ENCODE_SHIFT 2
|
||||
+#define LED_CNTRL_M100_ENCODE_SHIFT 4
|
||||
+#define LED_CNTRL_M1000_ENCODE_SHIFT 6
|
||||
+#define LED_CNTRL_SEL_NO_LINK_ENCODE_SHIFT 8
|
||||
+#define LED_CNTRL_SEL_10M_ENCODE_SHIFT 10
|
||||
+#define LED_CNTRL_SEL_100M_ENCODE_SHIFT 12
|
||||
+#define LED_CNTRL_SEL_1000M_ENCODE_SHIFT 14
|
||||
+#define LED_CNTRL_RX_DV_EN (1 << 16)
|
||||
+#define LED_CNTRL_TX_EN_EN (1 << 17)
|
||||
+#define LED_CNTRL_SPDLNK_LED0_ACT_SEL_SHIFT 18
|
||||
+#define LED_CNTRL_SPDLNK_LED1_ACT_SEL_SHIFT 20
|
||||
+#define LED_CNTRL_ACT_LED_ACT_SEL_SHIFT 22
|
||||
+#define LED_CNTRL_SPDLNK_SRC_SEL (1 << 24)
|
||||
+#define LED_CNTRL_SPDLNK_LED0_ACT_POL_SEL (1 << 25)
|
||||
+#define LED_CNTRL_SPDLNK_LED1_ACT_POL_SEL (1 << 26)
|
||||
+#define LED_CNTRL_ACT_LED_POL_SEL (1 << 27)
|
||||
+#define LED_CNTRL_MASK 0x3
|
||||
+
|
||||
+/* Register relative to REG_LED_*_CNTRL (BCM4908) */
|
||||
+#define REG_LED_CTRL 0x0
|
||||
+#define LED_CTRL_RX_ACT_EN 0x00000001
|
||||
+#define LED_CTRL_TX_ACT_EN 0x00000002
|
||||
+#define LED_CTRL_SPDLNK_LED0_ACT_SEL 0x00000004
|
||||
+#define LED_CTRL_SPDLNK_LED1_ACT_SEL 0x00000008
|
||||
+#define LED_CTRL_SPDLNK_LED2_ACT_SEL 0x00000010
|
||||
+#define LED_CTRL_ACT_LED_ACT_SEL 0x00000020
|
||||
+#define LED_CTRL_SPDLNK_LED0_ACT_POL_SEL 0x00000040
|
||||
+#define LED_CTRL_SPDLNK_LED1_ACT_POL_SEL 0x00000080
|
||||
+#define LED_CTRL_SPDLNK_LED2_ACT_POL_SEL 0x00000100
|
||||
+#define LED_CTRL_ACT_LED_POL_SEL 0x00000200
|
||||
+#define LED_CTRL_LED_SPD_OVRD 0x00001c00
|
||||
+#define LED_CTRL_LNK_STATUS_OVRD 0x00002000
|
||||
+#define LED_CTRL_SPD_OVRD_EN 0x00004000
|
||||
+#define LED_CTRL_LNK_OVRD_EN 0x00008000
|
||||
+
|
||||
+/* Register relative to REG_LED_*_CNTRL (BCM4908) */
|
||||
+#define REG_LED_LINK_SPEED_ENC_SEL 0x4
|
||||
+#define LED_LINK_SPEED_ENC_SEL_NO_LINK_SHIFT 0
|
||||
+#define LED_LINK_SPEED_ENC_SEL_10M_SHIFT 3
|
||||
+#define LED_LINK_SPEED_ENC_SEL_100M_SHIFT 6
|
||||
+#define LED_LINK_SPEED_ENC_SEL_1000M_SHIFT 9
|
||||
+#define LED_LINK_SPEED_ENC_SEL_2500M_SHIFT 12
|
||||
+#define LED_LINK_SPEED_ENC_SEL_10G_SHIFT 15
|
||||
+#define LED_LINK_SPEED_ENC_SEL_MASK 0x7
|
||||
+
|
||||
+/* Register relative to REG_LED_*_CNTRL (BCM4908) */
|
||||
+#define REG_LED_LINK_SPEED_ENC 0x8
|
||||
+#define LED_LINK_SPEED_ENC_NO_LINK_SHIFT 0
|
||||
+#define LED_LINK_SPEED_ENC_M10_SHIFT 3
|
||||
+#define LED_LINK_SPEED_ENC_M100_SHIFT 6
|
||||
+#define LED_LINK_SPEED_ENC_M1000_SHIFT 9
|
||||
+#define LED_LINK_SPEED_ENC_M2500_SHIFT 12
|
||||
+#define LED_LINK_SPEED_ENC_M10G_SHIFT 15
|
||||
+#define LED_LINK_SPEED_ENC_MASK 0x7
|
||||
+
|
||||
/* Relative to REG_RGMII_CNTRL */
|
||||
#define RGMII_MODE_EN (1 << 0)
|
||||
#define ID_MODE_DIS (1 << 1)
|
||||
@@ -73,10 +134,6 @@ enum bcm_sf2_reg_offs {
|
||||
#define LPI_COUNT_SHIFT 9
|
||||
#define LPI_COUNT_MASK 0x3F
|
||||
|
||||
-#define REG_LED_CNTRL(x) (REG_LED_0_CNTRL + (x))
|
||||
-
|
||||
-#define SPDLNK_SRC_SEL (1 << 24)
|
||||
-
|
||||
/* Register set relative to 'INTRL2_0' and 'INTRL2_1' */
|
||||
#define INTRL2_CPU_STATUS 0x00
|
||||
#define INTRL2_CPU_SET 0x04
|
@ -0,0 +1,111 @@
|
||||
From 7b5730f0ff24b0d7d1cb660a482384a807618a46 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 24 Jan 2022 11:22:42 +0100
|
||||
Subject: [PATCH] dt-bindings: pinctrl: Add binding for BCM4908 pinctrl
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It's hardware block that is part of every SoC from BCM4908 family.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Reviewed-by: Rob Herring <robh@kernel.org>
|
||||
Link: https://lore.kernel.org/r/20220124102243.14912-1-zajec5@gmail.com
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
.../pinctrl/brcm,bcm4908-pinctrl.yaml | 72 +++++++++++++++++++
|
||||
MAINTAINERS | 7 ++
|
||||
2 files changed, 79 insertions(+)
|
||||
create mode 100644 Documentation/devicetree/bindings/pinctrl/brcm,bcm4908-pinctrl.yaml
|
||||
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/bindings/pinctrl/brcm,bcm4908-pinctrl.yaml
|
||||
@@ -0,0 +1,72 @@
|
||||
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
+%YAML 1.2
|
||||
+---
|
||||
+$id: http://devicetree.org/schemas/pinctrl/brcm,bcm4908-pinctrl.yaml#
|
||||
+$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
+
|
||||
+title: Broadcom BCM4908 pin controller
|
||||
+
|
||||
+maintainers:
|
||||
+ - Rafał Miłecki <rafal@milecki.pl>
|
||||
+
|
||||
+description:
|
||||
+ Binding for pin controller present on BCM4908 family SoCs.
|
||||
+
|
||||
+properties:
|
||||
+ compatible:
|
||||
+ const: brcm,bcm4908-pinctrl
|
||||
+
|
||||
+ reg:
|
||||
+ maxItems: 1
|
||||
+
|
||||
+patternProperties:
|
||||
+ '-pins$':
|
||||
+ type: object
|
||||
+ $ref: pinmux-node.yaml#
|
||||
+
|
||||
+ properties:
|
||||
+ function:
|
||||
+ enum: [ led_0, led_1, led_2, led_3, led_4, led_5, led_6, led_7, led_8,
|
||||
+ led_9, led_10, led_11, led_12, led_13, led_14, led_15, led_16,
|
||||
+ led_17, led_18, led_19, led_20, led_21, led_22, led_23, led_24,
|
||||
+ led_25, led_26, led_27, led_28, led_29, led_30, led_31,
|
||||
+ hs_uart, i2c, i2s, nand_ctrl, nand_data, emmc_ctrl, usb0_pwr,
|
||||
+ usb1_pwr ]
|
||||
+
|
||||
+ groups:
|
||||
+ minItems: 1
|
||||
+ maxItems: 2
|
||||
+ items:
|
||||
+ enum: [ led_0_grp_a, led_1_grp_a, led_2_grp_a, led_3_grp_a,
|
||||
+ led_4_grp_a, led_5_grp_a, led_6_grp_a, led_7_grp_a,
|
||||
+ led_8_grp_a, led_9_grp_a, led_10_grp_a, led_10_grp_b,
|
||||
+ led_11_grp_a, led_11_grp_b, led_12_grp_a, led_12_grp_b,
|
||||
+ led_13_grp_a, led_13_grp_b, led_14_grp_a, led_15_grp_a,
|
||||
+ led_16_grp_a, led_17_grp_a, led_18_grp_a, led_19_grp_a,
|
||||
+ led_20_grp_a, led_21_grp_a, led_22_grp_a, led_23_grp_a,
|
||||
+ led_24_grp_a, led_25_grp_a, led_26_grp_a, led_27_grp_a,
|
||||
+ led_28_grp_a, led_29_grp_a, led_30_grp_a, led_31_grp_a,
|
||||
+ led_31_grp_b, hs_uart_grp, i2c_grp_a, i2c_grp_b, i2s_grp,
|
||||
+ nand_ctrl_grp, nand_data_grp, emmc_ctrl_grp, usb0_pwr_grp,
|
||||
+ usb1_pwr_grp ]
|
||||
+
|
||||
+allOf:
|
||||
+ - $ref: pinctrl.yaml#
|
||||
+
|
||||
+required:
|
||||
+ - compatible
|
||||
+ - reg
|
||||
+
|
||||
+unevaluatedProperties: false
|
||||
+
|
||||
+examples:
|
||||
+ - |
|
||||
+ pinctrl@ff800560 {
|
||||
+ compatible = "brcm,bcm4908-pinctrl";
|
||||
+ reg = <0xff800560 0x10>;
|
||||
+
|
||||
+ led_0-a-pins {
|
||||
+ function = "led_0";
|
||||
+ groups = "led_0_grp_a";
|
||||
+ };
|
||||
+ };
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3216,6 +3216,13 @@ F: Documentation/devicetree/bindings/net
|
||||
F: drivers/net/ethernet/broadcom/bcm4908_enet.*
|
||||
F: drivers/net/ethernet/broadcom/unimac.h
|
||||
|
||||
+BROADCOM BCM4908 PINMUX DRIVER
|
||||
+M: Rafał Miłecki <rafal@milecki.pl>
|
||||
+M: bcm-kernel-feedback-list@broadcom.com
|
||||
+L: linux-gpio@vger.kernel.org
|
||||
+S: Maintained
|
||||
+F: Documentation/devicetree/bindings/pinctrl/brcm,bcm4908-pinctrl.yaml
|
||||
+
|
||||
BROADCOM BCM5301X ARM ARCHITECTURE
|
||||
M: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
M: Rafał Miłecki <zajec5@gmail.com>
|
@ -0,0 +1,30 @@
|
||||
From d0aee048d648ec2d9aa7af43b127ebf847d497d5 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Fri, 11 Feb 2022 11:58:06 +0100
|
||||
Subject: [PATCH] i2c: brcmstb: allow compiling on BCM4908
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
BCM4908 SoCs use the same I2C hardware block as STB and BCM63xx devices.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
Signed-off-by: Wolfram Sang <wsa@kernel.org>
|
||||
---
|
||||
drivers/i2c/busses/Kconfig | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/i2c/busses/Kconfig
|
||||
+++ b/drivers/i2c/busses/Kconfig
|
||||
@@ -472,8 +472,8 @@ config I2C_BCM_KONA
|
||||
|
||||
config I2C_BRCMSTB
|
||||
tristate "BRCM Settop/DSL I2C controller"
|
||||
- depends on ARCH_BRCMSTB || BMIPS_GENERIC || ARCH_BCM_63XX || \
|
||||
- COMPILE_TEST
|
||||
+ depends on ARCH_BCM4908 || ARCH_BCM_63XX || ARCH_BRCMSTB || \
|
||||
+ BMIPS_GENERIC || COMPILE_TEST
|
||||
default y
|
||||
help
|
||||
If you say yes to this option, support will be included for the
|
@ -0,0 +1,630 @@
|
||||
From f7e322d99f1180270fb4a3e1ae992b3116cfcf34 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 24 Jan 2022 11:22:43 +0100
|
||||
Subject: [PATCH] pinctrl: bcm: add driver for BCM4908 pinmux
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
BCM4908 has its own pins layout so it needs a custom binding and a Linux
|
||||
driver.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20220124102243.14912-2-zajec5@gmail.com
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
MAINTAINERS | 1 +
|
||||
drivers/pinctrl/bcm/Kconfig | 14 +
|
||||
drivers/pinctrl/bcm/Makefile | 1 +
|
||||
drivers/pinctrl/bcm/pinctrl-bcm4908.c | 563 ++++++++++++++++++++++++++
|
||||
4 files changed, 579 insertions(+)
|
||||
create mode 100644 drivers/pinctrl/bcm/pinctrl-bcm4908.c
|
||||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3222,6 +3222,7 @@ M: bcm-kernel-feedback-list@broadcom.com
|
||||
L: linux-gpio@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/pinctrl/brcm,bcm4908-pinctrl.yaml
|
||||
+F: drivers/pinctrl/bcm/pinctrl-bcm4908.c
|
||||
|
||||
BROADCOM BCM5301X ARM ARCHITECTURE
|
||||
M: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
--- a/drivers/pinctrl/bcm/Kconfig
|
||||
+++ b/drivers/pinctrl/bcm/Kconfig
|
||||
@@ -29,6 +29,20 @@ config PINCTRL_BCM2835
|
||||
help
|
||||
Say Y here to enable the Broadcom BCM2835 GPIO driver.
|
||||
|
||||
+config PINCTRL_BCM4908
|
||||
+ tristate "Broadcom BCM4908 pinmux driver"
|
||||
+ depends on OF && (ARCH_BCM4908 || COMPILE_TEST)
|
||||
+ select PINMUX
|
||||
+ select PINCONF
|
||||
+ select GENERIC_PINCONF
|
||||
+ select GENERIC_PINCTRL_GROUPS
|
||||
+ select GENERIC_PINMUX_FUNCTIONS
|
||||
+ default ARCH_BCM4908
|
||||
+ help
|
||||
+ Driver for BCM4908 family SoCs with integrated pin controller.
|
||||
+
|
||||
+ If compiled as module it will be called pinctrl-bcm4908.
|
||||
+
|
||||
config PINCTRL_IPROC_GPIO
|
||||
bool "Broadcom iProc GPIO (with PINCONF) driver"
|
||||
depends on OF_GPIO && (ARCH_BCM_IPROC || COMPILE_TEST)
|
||||
--- a/drivers/pinctrl/bcm/Makefile
|
||||
+++ b/drivers/pinctrl/bcm/Makefile
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
obj-$(CONFIG_PINCTRL_BCM281XX) += pinctrl-bcm281xx.o
|
||||
obj-$(CONFIG_PINCTRL_BCM2835) += pinctrl-bcm2835.o
|
||||
+obj-$(CONFIG_PINCTRL_BCM4908) += pinctrl-bcm4908.o
|
||||
obj-$(CONFIG_PINCTRL_IPROC_GPIO) += pinctrl-iproc-gpio.o
|
||||
obj-$(CONFIG_PINCTRL_CYGNUS_MUX) += pinctrl-cygnus-mux.o
|
||||
obj-$(CONFIG_PINCTRL_NS) += pinctrl-ns.o
|
||||
--- /dev/null
|
||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm4908.c
|
||||
@@ -0,0 +1,561 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/* Copyright (C) 2021 Rafał Miłecki <rafal@milecki.pl> */
|
||||
+
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/mod_devicetable.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/pinctrl/pinconf-generic.h>
|
||||
+#include <linux/pinctrl/pinctrl.h>
|
||||
+#include <linux/pinctrl/pinmux.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/string_helpers.h>
|
||||
+
|
||||
+#include "../core.h"
|
||||
+#include "../pinmux.h"
|
||||
+
|
||||
+#define BCM4908_NUM_PINS 86
|
||||
+
|
||||
+#define BCM4908_TEST_PORT_BLOCK_EN_LSB 0x00
|
||||
+#define BCM4908_TEST_PORT_BLOCK_DATA_MSB 0x04
|
||||
+#define BCM4908_TEST_PORT_BLOCK_DATA_LSB 0x08
|
||||
+#define BCM4908_TEST_PORT_LSB_PINMUX_DATA_SHIFT 12
|
||||
+#define BCM4908_TEST_PORT_COMMAND 0x0c
|
||||
+#define BCM4908_TEST_PORT_CMD_LOAD_MUX_REG 0x00000021
|
||||
+
|
||||
+struct bcm4908_pinctrl {
|
||||
+ struct device *dev;
|
||||
+ void __iomem *base;
|
||||
+ struct mutex mutex;
|
||||
+ struct pinctrl_dev *pctldev;
|
||||
+ struct pinctrl_desc pctldesc;
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Groups
|
||||
+ */
|
||||
+
|
||||
+struct bcm4908_pinctrl_pin_setup {
|
||||
+ unsigned int number;
|
||||
+ unsigned int function;
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_0_pins_a[] = {
|
||||
+ { 0, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_1_pins_a[] = {
|
||||
+ { 1, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_2_pins_a[] = {
|
||||
+ { 2, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_3_pins_a[] = {
|
||||
+ { 3, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_4_pins_a[] = {
|
||||
+ { 4, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_5_pins_a[] = {
|
||||
+ { 5, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_6_pins_a[] = {
|
||||
+ { 6, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_7_pins_a[] = {
|
||||
+ { 7, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_8_pins_a[] = {
|
||||
+ { 8, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_9_pins_a[] = {
|
||||
+ { 9, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_10_pins_a[] = {
|
||||
+ { 10, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_11_pins_a[] = {
|
||||
+ { 11, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_12_pins_a[] = {
|
||||
+ { 12, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_13_pins_a[] = {
|
||||
+ { 13, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_14_pins_a[] = {
|
||||
+ { 14, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_15_pins_a[] = {
|
||||
+ { 15, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_16_pins_a[] = {
|
||||
+ { 16, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_17_pins_a[] = {
|
||||
+ { 17, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_18_pins_a[] = {
|
||||
+ { 18, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_19_pins_a[] = {
|
||||
+ { 19, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_20_pins_a[] = {
|
||||
+ { 20, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_21_pins_a[] = {
|
||||
+ { 21, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_22_pins_a[] = {
|
||||
+ { 22, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_23_pins_a[] = {
|
||||
+ { 23, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_24_pins_a[] = {
|
||||
+ { 24, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_25_pins_a[] = {
|
||||
+ { 25, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_26_pins_a[] = {
|
||||
+ { 26, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_27_pins_a[] = {
|
||||
+ { 27, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_28_pins_a[] = {
|
||||
+ { 28, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_29_pins_a[] = {
|
||||
+ { 29, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_30_pins_a[] = {
|
||||
+ { 30, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_31_pins_a[] = {
|
||||
+ { 31, 3 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_10_pins_b[] = {
|
||||
+ { 8, 2 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_11_pins_b[] = {
|
||||
+ { 9, 2 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_12_pins_b[] = {
|
||||
+ { 0, 2 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_13_pins_b[] = {
|
||||
+ { 1, 2 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup led_31_pins_b[] = {
|
||||
+ { 30, 2 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup hs_uart_pins[] = {
|
||||
+ { 10, 0 }, /* CTS */
|
||||
+ { 11, 0 }, /* RTS */
|
||||
+ { 12, 0 }, /* RXD */
|
||||
+ { 13, 0 }, /* TXD */
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup i2c_pins_a[] = {
|
||||
+ { 18, 0 }, /* SDA */
|
||||
+ { 19, 0 }, /* SCL */
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup i2c_pins_b[] = {
|
||||
+ { 22, 0 }, /* SDA */
|
||||
+ { 23, 0 }, /* SCL */
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup i2s_pins[] = {
|
||||
+ { 27, 0 }, /* MCLK */
|
||||
+ { 28, 0 }, /* LRCK */
|
||||
+ { 29, 0 }, /* SDATA */
|
||||
+ { 30, 0 }, /* SCLK */
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup nand_ctrl_pins[] = {
|
||||
+ { 32, 0 },
|
||||
+ { 33, 0 },
|
||||
+ { 34, 0 },
|
||||
+ { 43, 0 },
|
||||
+ { 44, 0 },
|
||||
+ { 45, 0 },
|
||||
+ { 56, 1 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup nand_data_pins[] = {
|
||||
+ { 35, 0 },
|
||||
+ { 36, 0 },
|
||||
+ { 37, 0 },
|
||||
+ { 38, 0 },
|
||||
+ { 39, 0 },
|
||||
+ { 40, 0 },
|
||||
+ { 41, 0 },
|
||||
+ { 42, 0 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup emmc_ctrl_pins[] = {
|
||||
+ { 46, 0 },
|
||||
+ { 47, 0 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup usb0_pwr_pins[] = {
|
||||
+ { 63, 0 },
|
||||
+ { 64, 0 },
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_pin_setup usb1_pwr_pins[] = {
|
||||
+ { 66, 0 },
|
||||
+ { 67, 0 },
|
||||
+};
|
||||
+
|
||||
+struct bcm4908_pinctrl_grp {
|
||||
+ const char *name;
|
||||
+ const struct bcm4908_pinctrl_pin_setup *pins;
|
||||
+ const unsigned int num_pins;
|
||||
+};
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_grp bcm4908_pinctrl_grps[] = {
|
||||
+ { "led_0_grp_a", led_0_pins_a, ARRAY_SIZE(led_0_pins_a) },
|
||||
+ { "led_1_grp_a", led_1_pins_a, ARRAY_SIZE(led_1_pins_a) },
|
||||
+ { "led_2_grp_a", led_2_pins_a, ARRAY_SIZE(led_2_pins_a) },
|
||||
+ { "led_3_grp_a", led_3_pins_a, ARRAY_SIZE(led_3_pins_a) },
|
||||
+ { "led_4_grp_a", led_4_pins_a, ARRAY_SIZE(led_4_pins_a) },
|
||||
+ { "led_5_grp_a", led_5_pins_a, ARRAY_SIZE(led_5_pins_a) },
|
||||
+ { "led_6_grp_a", led_6_pins_a, ARRAY_SIZE(led_6_pins_a) },
|
||||
+ { "led_7_grp_a", led_7_pins_a, ARRAY_SIZE(led_7_pins_a) },
|
||||
+ { "led_8_grp_a", led_8_pins_a, ARRAY_SIZE(led_8_pins_a) },
|
||||
+ { "led_9_grp_a", led_9_pins_a, ARRAY_SIZE(led_9_pins_a) },
|
||||
+ { "led_10_grp_a", led_10_pins_a, ARRAY_SIZE(led_10_pins_a) },
|
||||
+ { "led_11_grp_a", led_11_pins_a, ARRAY_SIZE(led_11_pins_a) },
|
||||
+ { "led_12_grp_a", led_12_pins_a, ARRAY_SIZE(led_12_pins_a) },
|
||||
+ { "led_13_grp_a", led_13_pins_a, ARRAY_SIZE(led_13_pins_a) },
|
||||
+ { "led_14_grp_a", led_14_pins_a, ARRAY_SIZE(led_14_pins_a) },
|
||||
+ { "led_15_grp_a", led_15_pins_a, ARRAY_SIZE(led_15_pins_a) },
|
||||
+ { "led_16_grp_a", led_16_pins_a, ARRAY_SIZE(led_16_pins_a) },
|
||||
+ { "led_17_grp_a", led_17_pins_a, ARRAY_SIZE(led_17_pins_a) },
|
||||
+ { "led_18_grp_a", led_18_pins_a, ARRAY_SIZE(led_18_pins_a) },
|
||||
+ { "led_19_grp_a", led_19_pins_a, ARRAY_SIZE(led_19_pins_a) },
|
||||
+ { "led_20_grp_a", led_20_pins_a, ARRAY_SIZE(led_20_pins_a) },
|
||||
+ { "led_21_grp_a", led_21_pins_a, ARRAY_SIZE(led_21_pins_a) },
|
||||
+ { "led_22_grp_a", led_22_pins_a, ARRAY_SIZE(led_22_pins_a) },
|
||||
+ { "led_23_grp_a", led_23_pins_a, ARRAY_SIZE(led_23_pins_a) },
|
||||
+ { "led_24_grp_a", led_24_pins_a, ARRAY_SIZE(led_24_pins_a) },
|
||||
+ { "led_25_grp_a", led_25_pins_a, ARRAY_SIZE(led_25_pins_a) },
|
||||
+ { "led_26_grp_a", led_26_pins_a, ARRAY_SIZE(led_26_pins_a) },
|
||||
+ { "led_27_grp_a", led_27_pins_a, ARRAY_SIZE(led_27_pins_a) },
|
||||
+ { "led_28_grp_a", led_28_pins_a, ARRAY_SIZE(led_28_pins_a) },
|
||||
+ { "led_29_grp_a", led_29_pins_a, ARRAY_SIZE(led_29_pins_a) },
|
||||
+ { "led_30_grp_a", led_30_pins_a, ARRAY_SIZE(led_30_pins_a) },
|
||||
+ { "led_31_grp_a", led_31_pins_a, ARRAY_SIZE(led_31_pins_a) },
|
||||
+ { "led_10_grp_b", led_10_pins_b, ARRAY_SIZE(led_10_pins_b) },
|
||||
+ { "led_11_grp_b", led_11_pins_b, ARRAY_SIZE(led_11_pins_b) },
|
||||
+ { "led_12_grp_b", led_12_pins_b, ARRAY_SIZE(led_12_pins_b) },
|
||||
+ { "led_13_grp_b", led_13_pins_b, ARRAY_SIZE(led_13_pins_b) },
|
||||
+ { "led_31_grp_b", led_31_pins_b, ARRAY_SIZE(led_31_pins_b) },
|
||||
+ { "hs_uart_grp", hs_uart_pins, ARRAY_SIZE(hs_uart_pins) },
|
||||
+ { "i2c_grp_a", i2c_pins_a, ARRAY_SIZE(i2c_pins_a) },
|
||||
+ { "i2c_grp_b", i2c_pins_b, ARRAY_SIZE(i2c_pins_b) },
|
||||
+ { "i2s_grp", i2s_pins, ARRAY_SIZE(i2s_pins) },
|
||||
+ { "nand_ctrl_grp", nand_ctrl_pins, ARRAY_SIZE(nand_ctrl_pins) },
|
||||
+ { "nand_data_grp", nand_data_pins, ARRAY_SIZE(nand_data_pins) },
|
||||
+ { "emmc_ctrl_grp", emmc_ctrl_pins, ARRAY_SIZE(emmc_ctrl_pins) },
|
||||
+ { "usb0_pwr_grp", usb0_pwr_pins, ARRAY_SIZE(usb0_pwr_pins) },
|
||||
+ { "usb1_pwr_grp", usb1_pwr_pins, ARRAY_SIZE(usb1_pwr_pins) },
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Functions
|
||||
+ */
|
||||
+
|
||||
+struct bcm4908_pinctrl_function {
|
||||
+ const char *name;
|
||||
+ const char * const *groups;
|
||||
+ const unsigned int num_groups;
|
||||
+};
|
||||
+
|
||||
+static const char * const led_0_groups[] = { "led_0_grp_a" };
|
||||
+static const char * const led_1_groups[] = { "led_1_grp_a" };
|
||||
+static const char * const led_2_groups[] = { "led_2_grp_a" };
|
||||
+static const char * const led_3_groups[] = { "led_3_grp_a" };
|
||||
+static const char * const led_4_groups[] = { "led_4_grp_a" };
|
||||
+static const char * const led_5_groups[] = { "led_5_grp_a" };
|
||||
+static const char * const led_6_groups[] = { "led_6_grp_a" };
|
||||
+static const char * const led_7_groups[] = { "led_7_grp_a" };
|
||||
+static const char * const led_8_groups[] = { "led_8_grp_a" };
|
||||
+static const char * const led_9_groups[] = { "led_9_grp_a" };
|
||||
+static const char * const led_10_groups[] = { "led_10_grp_a", "led_10_grp_b" };
|
||||
+static const char * const led_11_groups[] = { "led_11_grp_a", "led_11_grp_b" };
|
||||
+static const char * const led_12_groups[] = { "led_12_grp_a", "led_12_grp_b" };
|
||||
+static const char * const led_13_groups[] = { "led_13_grp_a", "led_13_grp_b" };
|
||||
+static const char * const led_14_groups[] = { "led_14_grp_a" };
|
||||
+static const char * const led_15_groups[] = { "led_15_grp_a" };
|
||||
+static const char * const led_16_groups[] = { "led_16_grp_a" };
|
||||
+static const char * const led_17_groups[] = { "led_17_grp_a" };
|
||||
+static const char * const led_18_groups[] = { "led_18_grp_a" };
|
||||
+static const char * const led_19_groups[] = { "led_19_grp_a" };
|
||||
+static const char * const led_20_groups[] = { "led_20_grp_a" };
|
||||
+static const char * const led_21_groups[] = { "led_21_grp_a" };
|
||||
+static const char * const led_22_groups[] = { "led_22_grp_a" };
|
||||
+static const char * const led_23_groups[] = { "led_23_grp_a" };
|
||||
+static const char * const led_24_groups[] = { "led_24_grp_a" };
|
||||
+static const char * const led_25_groups[] = { "led_25_grp_a" };
|
||||
+static const char * const led_26_groups[] = { "led_26_grp_a" };
|
||||
+static const char * const led_27_groups[] = { "led_27_grp_a" };
|
||||
+static const char * const led_28_groups[] = { "led_28_grp_a" };
|
||||
+static const char * const led_29_groups[] = { "led_29_grp_a" };
|
||||
+static const char * const led_30_groups[] = { "led_30_grp_a" };
|
||||
+static const char * const led_31_groups[] = { "led_31_grp_a", "led_31_grp_b" };
|
||||
+static const char * const hs_uart_groups[] = { "hs_uart_grp" };
|
||||
+static const char * const i2c_groups[] = { "i2c_grp_a", "i2c_grp_b" };
|
||||
+static const char * const i2s_groups[] = { "i2s_grp" };
|
||||
+static const char * const nand_ctrl_groups[] = { "nand_ctrl_grp" };
|
||||
+static const char * const nand_data_groups[] = { "nand_data_grp" };
|
||||
+static const char * const emmc_ctrl_groups[] = { "emmc_ctrl_grp" };
|
||||
+static const char * const usb0_pwr_groups[] = { "usb0_pwr_grp" };
|
||||
+static const char * const usb1_pwr_groups[] = { "usb1_pwr_grp" };
|
||||
+
|
||||
+static const struct bcm4908_pinctrl_function bcm4908_pinctrl_functions[] = {
|
||||
+ { "led_0", led_0_groups, ARRAY_SIZE(led_0_groups) },
|
||||
+ { "led_1", led_1_groups, ARRAY_SIZE(led_1_groups) },
|
||||
+ { "led_2", led_2_groups, ARRAY_SIZE(led_2_groups) },
|
||||
+ { "led_3", led_3_groups, ARRAY_SIZE(led_3_groups) },
|
||||
+ { "led_4", led_4_groups, ARRAY_SIZE(led_4_groups) },
|
||||
+ { "led_5", led_5_groups, ARRAY_SIZE(led_5_groups) },
|
||||
+ { "led_6", led_6_groups, ARRAY_SIZE(led_6_groups) },
|
||||
+ { "led_7", led_7_groups, ARRAY_SIZE(led_7_groups) },
|
||||
+ { "led_8", led_8_groups, ARRAY_SIZE(led_8_groups) },
|
||||
+ { "led_9", led_9_groups, ARRAY_SIZE(led_9_groups) },
|
||||
+ { "led_10", led_10_groups, ARRAY_SIZE(led_10_groups) },
|
||||
+ { "led_11", led_11_groups, ARRAY_SIZE(led_11_groups) },
|
||||
+ { "led_12", led_12_groups, ARRAY_SIZE(led_12_groups) },
|
||||
+ { "led_13", led_13_groups, ARRAY_SIZE(led_13_groups) },
|
||||
+ { "led_14", led_14_groups, ARRAY_SIZE(led_14_groups) },
|
||||
+ { "led_15", led_15_groups, ARRAY_SIZE(led_15_groups) },
|
||||
+ { "led_16", led_16_groups, ARRAY_SIZE(led_16_groups) },
|
||||
+ { "led_17", led_17_groups, ARRAY_SIZE(led_17_groups) },
|
||||
+ { "led_18", led_18_groups, ARRAY_SIZE(led_18_groups) },
|
||||
+ { "led_19", led_19_groups, ARRAY_SIZE(led_19_groups) },
|
||||
+ { "led_20", led_20_groups, ARRAY_SIZE(led_20_groups) },
|
||||
+ { "led_21", led_21_groups, ARRAY_SIZE(led_21_groups) },
|
||||
+ { "led_22", led_22_groups, ARRAY_SIZE(led_22_groups) },
|
||||
+ { "led_23", led_23_groups, ARRAY_SIZE(led_23_groups) },
|
||||
+ { "led_24", led_24_groups, ARRAY_SIZE(led_24_groups) },
|
||||
+ { "led_25", led_25_groups, ARRAY_SIZE(led_25_groups) },
|
||||
+ { "led_26", led_26_groups, ARRAY_SIZE(led_26_groups) },
|
||||
+ { "led_27", led_27_groups, ARRAY_SIZE(led_27_groups) },
|
||||
+ { "led_28", led_28_groups, ARRAY_SIZE(led_28_groups) },
|
||||
+ { "led_29", led_29_groups, ARRAY_SIZE(led_29_groups) },
|
||||
+ { "led_30", led_30_groups, ARRAY_SIZE(led_30_groups) },
|
||||
+ { "led_31", led_31_groups, ARRAY_SIZE(led_31_groups) },
|
||||
+ { "hs_uart", hs_uart_groups, ARRAY_SIZE(hs_uart_groups) },
|
||||
+ { "i2c", i2c_groups, ARRAY_SIZE(i2c_groups) },
|
||||
+ { "i2s", i2s_groups, ARRAY_SIZE(i2s_groups) },
|
||||
+ { "nand_ctrl", nand_ctrl_groups, ARRAY_SIZE(nand_ctrl_groups) },
|
||||
+ { "nand_data", nand_data_groups, ARRAY_SIZE(nand_data_groups) },
|
||||
+ { "emmc_ctrl", emmc_ctrl_groups, ARRAY_SIZE(emmc_ctrl_groups) },
|
||||
+ { "usb0_pwr", usb0_pwr_groups, ARRAY_SIZE(usb0_pwr_groups) },
|
||||
+ { "usb1_pwr", usb1_pwr_groups, ARRAY_SIZE(usb1_pwr_groups) },
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Groups code
|
||||
+ */
|
||||
+
|
||||
+static const struct pinctrl_ops bcm4908_pinctrl_ops = {
|
||||
+ .get_groups_count = pinctrl_generic_get_group_count,
|
||||
+ .get_group_name = pinctrl_generic_get_group_name,
|
||||
+ .get_group_pins = pinctrl_generic_get_group_pins,
|
||||
+ .dt_node_to_map = pinconf_generic_dt_node_to_map_group,
|
||||
+ .dt_free_map = pinconf_generic_dt_free_map,
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Functions code
|
||||
+ */
|
||||
+
|
||||
+static int bcm4908_pinctrl_set_mux(struct pinctrl_dev *pctrl_dev,
|
||||
+ unsigned int func_selector,
|
||||
+ unsigned int group_selector)
|
||||
+{
|
||||
+ struct bcm4908_pinctrl *bcm4908_pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
|
||||
+ const struct bcm4908_pinctrl_grp *group;
|
||||
+ struct group_desc *group_desc;
|
||||
+ int i;
|
||||
+
|
||||
+ group_desc = pinctrl_generic_get_group(pctrl_dev, group_selector);
|
||||
+ if (!group_desc)
|
||||
+ return -EINVAL;
|
||||
+ group = group_desc->data;
|
||||
+
|
||||
+ mutex_lock(&bcm4908_pinctrl->mutex);
|
||||
+ for (i = 0; i < group->num_pins; i++) {
|
||||
+ u32 lsb = 0;
|
||||
+
|
||||
+ lsb |= group->pins[i].number;
|
||||
+ lsb |= group->pins[i].function << BCM4908_TEST_PORT_LSB_PINMUX_DATA_SHIFT;
|
||||
+
|
||||
+ writel(0x0, bcm4908_pinctrl->base + BCM4908_TEST_PORT_BLOCK_DATA_MSB);
|
||||
+ writel(lsb, bcm4908_pinctrl->base + BCM4908_TEST_PORT_BLOCK_DATA_LSB);
|
||||
+ writel(BCM4908_TEST_PORT_CMD_LOAD_MUX_REG,
|
||||
+ bcm4908_pinctrl->base + BCM4908_TEST_PORT_COMMAND);
|
||||
+ }
|
||||
+ mutex_unlock(&bcm4908_pinctrl->mutex);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct pinmux_ops bcm4908_pinctrl_pmxops = {
|
||||
+ .get_functions_count = pinmux_generic_get_function_count,
|
||||
+ .get_function_name = pinmux_generic_get_function_name,
|
||||
+ .get_function_groups = pinmux_generic_get_function_groups,
|
||||
+ .set_mux = bcm4908_pinctrl_set_mux,
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Controller code
|
||||
+ */
|
||||
+
|
||||
+static struct pinctrl_desc bcm4908_pinctrl_desc = {
|
||||
+ .name = "bcm4908-pinctrl",
|
||||
+ .pctlops = &bcm4908_pinctrl_ops,
|
||||
+ .pmxops = &bcm4908_pinctrl_pmxops,
|
||||
+};
|
||||
+
|
||||
+static const struct of_device_id bcm4908_pinctrl_of_match_table[] = {
|
||||
+ { .compatible = "brcm,bcm4908-pinctrl", },
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static int bcm4908_pinctrl_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct device *dev = &pdev->dev;
|
||||
+ struct bcm4908_pinctrl *bcm4908_pinctrl;
|
||||
+ struct pinctrl_desc *pctldesc;
|
||||
+ struct pinctrl_pin_desc *pins;
|
||||
+ int i;
|
||||
+
|
||||
+ bcm4908_pinctrl = devm_kzalloc(dev, sizeof(*bcm4908_pinctrl), GFP_KERNEL);
|
||||
+ if (!bcm4908_pinctrl)
|
||||
+ return -ENOMEM;
|
||||
+ pctldesc = &bcm4908_pinctrl->pctldesc;
|
||||
+ platform_set_drvdata(pdev, bcm4908_pinctrl);
|
||||
+
|
||||
+ /* Set basic properties */
|
||||
+
|
||||
+ bcm4908_pinctrl->dev = dev;
|
||||
+
|
||||
+ bcm4908_pinctrl->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
+ if (IS_ERR(bcm4908_pinctrl->base))
|
||||
+ return PTR_ERR(bcm4908_pinctrl->base);
|
||||
+
|
||||
+ mutex_init(&bcm4908_pinctrl->mutex);
|
||||
+
|
||||
+ memcpy(pctldesc, &bcm4908_pinctrl_desc, sizeof(*pctldesc));
|
||||
+
|
||||
+ /* Set pinctrl properties */
|
||||
+
|
||||
+ pins = devm_kcalloc(dev, BCM4908_NUM_PINS, sizeof(*pins), GFP_KERNEL);
|
||||
+ if (!pins)
|
||||
+ return -ENOMEM;
|
||||
+ for (i = 0; i < BCM4908_NUM_PINS; i++) {
|
||||
+ pins[i].number = i;
|
||||
+ pins[i].name = devm_kasprintf(dev, GFP_KERNEL, "pin-%d", i);
|
||||
+ if (!pins[i].name)
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+ pctldesc->pins = pins;
|
||||
+ pctldesc->npins = BCM4908_NUM_PINS;
|
||||
+
|
||||
+ /* Register */
|
||||
+
|
||||
+ bcm4908_pinctrl->pctldev = devm_pinctrl_register(dev, pctldesc, bcm4908_pinctrl);
|
||||
+ if (IS_ERR(bcm4908_pinctrl->pctldev)) {
|
||||
+ dev_err(dev, "Failed to register pinctrl\n");
|
||||
+ return PTR_ERR(bcm4908_pinctrl->pctldev);
|
||||
+ }
|
||||
+
|
||||
+ /* Groups */
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(bcm4908_pinctrl_grps); i++) {
|
||||
+ const struct bcm4908_pinctrl_grp *group = &bcm4908_pinctrl_grps[i];
|
||||
+ int *pins;
|
||||
+ int j;
|
||||
+
|
||||
+ pins = devm_kcalloc(dev, group->num_pins, sizeof(*pins), GFP_KERNEL);
|
||||
+ if (!pins)
|
||||
+ return -ENOMEM;
|
||||
+ for (j = 0; j < group->num_pins; j++)
|
||||
+ pins[j] = group->pins[j].number;
|
||||
+
|
||||
+ pinctrl_generic_add_group(bcm4908_pinctrl->pctldev, group->name,
|
||||
+ pins, group->num_pins, (void *)group);
|
||||
+ }
|
||||
+
|
||||
+ /* Functions */
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(bcm4908_pinctrl_functions); i++) {
|
||||
+ const struct bcm4908_pinctrl_function *function = &bcm4908_pinctrl_functions[i];
|
||||
+
|
||||
+ pinmux_generic_add_function(bcm4908_pinctrl->pctldev,
|
||||
+ function->name,
|
||||
+ function->groups,
|
||||
+ function->num_groups, NULL);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct platform_driver bcm4908_pinctrl_driver = {
|
||||
+ .probe = bcm4908_pinctrl_probe,
|
||||
+ .driver = {
|
||||
+ .name = "bcm4908-pinctrl",
|
||||
+ .of_match_table = bcm4908_pinctrl_of_match_table,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+module_platform_driver(bcm4908_pinctrl_driver);
|
||||
+
|
||||
+MODULE_AUTHOR("Rafał Miłecki");
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
+MODULE_DEVICE_TABLE(of, bcm4908_pinctrl_of_match_table);
|
@ -0,0 +1,30 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 15 Feb 2022 08:27:35 +0100
|
||||
Subject: [PATCH] i2c: brcmstb: fix support for DSL and CM variants
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
DSL and CM (Cable Modem) support 8 B max transfer size and have a custom
|
||||
DT binding for that reason. This driver was checking for a wrong
|
||||
"compatible" however which resulted in an incorrect setup.
|
||||
|
||||
Fixes: e2e5a2c61837 ("i2c: brcmstb: Adding support for CM and DSL SoCs")
|
||||
Cc: Kamal Dasu <kdasu.kdev@gmail.com>
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
---
|
||||
drivers/i2c/busses/i2c-brcmstb.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/i2c/busses/i2c-brcmstb.c
|
||||
+++ b/drivers/i2c/busses/i2c-brcmstb.c
|
||||
@@ -640,7 +640,7 @@ static int brcmstb_i2c_probe(struct plat
|
||||
|
||||
/* set the data in/out register size for compatible SoCs */
|
||||
if (of_device_is_compatible(dev->device->of_node,
|
||||
- "brcmstb,brcmper-i2c"))
|
||||
+ "brcm,brcmper-i2c"))
|
||||
dev->data_regsz = sizeof(u8);
|
||||
else
|
||||
dev->data_regsz = sizeof(u32);
|
@ -1,13 +1,16 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 9 Nov 2021 11:34:28 +0100
|
||||
Subject: [PATCH] watchdog: bcm7038_wdt: allow building on ARCH_BCM4908
|
||||
Date: Wed, 9 Feb 2022 21:32:02 +0100
|
||||
Subject: [PATCH] watchdog: allow building BCM7038_WDT for BCM4908
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The same hardware block is present on BCM4908 SoCs family.
|
||||
BCM4908 is a SoCs family that shares a lot of hardware with BCM63xx
|
||||
including the watchdog block. Allow building this driver for it.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/watchdog/Kconfig | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
@ -0,0 +1,28 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Wed, 16 Feb 2022 07:28:34 +0100
|
||||
Subject: [PATCH] watchdog: bcm7038_wdt: Support BCM6345 compatible string
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
A new "compatible" value has been added in the commit 17fffe91ba36
|
||||
("dt-bindings: watchdog: Add BCM6345 compatible to BCM7038 binding").
|
||||
It's meant to be used for BCM63xx SoCs family but hardware block can be
|
||||
programmed just like the 7038 one.
|
||||
|
||||
Cc: Florian Fainelli <f.fainelli@gmail.com>
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
drivers/watchdog/bcm7038_wdt.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/watchdog/bcm7038_wdt.c
|
||||
+++ b/drivers/watchdog/bcm7038_wdt.c
|
||||
@@ -193,6 +193,7 @@ static SIMPLE_DEV_PM_OPS(bcm7038_wdt_pm_
|
||||
bcm7038_wdt_resume);
|
||||
|
||||
static const struct of_device_id bcm7038_wdt_match[] = {
|
||||
+ { .compatible = "brcm,bcm6345-wdt" },
|
||||
{ .compatible = "brcm,bcm7038-wdt" },
|
||||
{},
|
||||
};
|
@ -12,7 +12,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
|
||||
--- a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
|
||||
@@ -281,7 +281,7 @@
|
||||
@@ -290,7 +290,7 @@
|
||||
gpio0: gpio-controller@500 {
|
||||
compatible = "brcm,bcm6345-gpio";
|
||||
reg-names = "dirout", "dat";
|
||||
|
@ -1,50 +0,0 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 9 Nov 2021 11:39:42 +0100
|
||||
Subject: [PATCH] arm64: dts: broadcom: bcm4908: add TWD block
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
BCM4908 contains TWD block that provides few functions:
|
||||
1. Timers
|
||||
2. Wathchdog
|
||||
3. Software reset
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
.../boot/dts/broadcom/bcm4908/bcm4908.dtsi | 17 +++++++++++++----
|
||||
1 file changed, 13 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
|
||||
@@ -273,9 +273,18 @@
|
||||
#size-cells = <1>;
|
||||
ranges = <0x00 0x00 0xff800000 0x3000>;
|
||||
|
||||
- timer: timer@400 {
|
||||
- compatible = "brcm,bcm6328-timer", "syscon";
|
||||
- reg = <0x400 0x3c>;
|
||||
+ twd: timer-mfd@400 {
|
||||
+ compatible = "brcm,bcm4908-twd", "brcm,twd", "simple-mfd", "syscon";
|
||||
+ reg = <0x400 0x4c>;
|
||||
+ ranges = <0x0 0x400 0x4c>;
|
||||
+
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+
|
||||
+ watchdog@28 {
|
||||
+ compatible = "brcm,bcm7038-wdt";
|
||||
+ reg = <0x28 0x8>;
|
||||
+ };
|
||||
};
|
||||
|
||||
gpio0: gpio-controller@500 {
|
||||
@@ -330,7 +339,7 @@
|
||||
|
||||
reboot {
|
||||
compatible = "syscon-reboot";
|
||||
- regmap = <&timer>;
|
||||
+ regmap = <&twd>;
|
||||
offset = <0x34>;
|
||||
mask = <1>;
|
||||
};
|
@ -29,7 +29,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
|
||||
--- a/drivers/net/dsa/bcm_sf2.c
|
||||
+++ b/drivers/net/dsa/bcm_sf2.c
|
||||
@@ -1321,10 +1321,14 @@ static int bcm_sf2_sw_probe(struct platf
|
||||
@@ -1363,10 +1363,14 @@ static int bcm_sf2_sw_probe(struct platf
|
||||
rev = reg_readl(priv, REG_PHY_REVISION);
|
||||
priv->hw_params.gphy_rev = rev & PHY_REVISION_MASK;
|
||||
|
||||
|
@ -15,7 +15,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
|
||||
--- a/drivers/net/dsa/bcm_sf2.c
|
||||
+++ b/drivers/net/dsa/bcm_sf2.c
|
||||
@@ -1335,6 +1335,12 @@ static int bcm_sf2_sw_probe(struct platf
|
||||
@@ -1377,6 +1377,12 @@ static int bcm_sf2_sw_probe(struct platf
|
||||
priv->hw_params.core_rev >> 8, priv->hw_params.core_rev & 0xff,
|
||||
priv->irq0, priv->irq1);
|
||||
|
||||
|
@ -107,7 +107,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
}
|
||||
|
||||
static struct clk clk_pcie = {
|
||||
@@ -542,6 +556,21 @@ static struct clk_lookup bcm6368_clks[]
|
||||
@@ -548,6 +562,21 @@ static struct clk_lookup bcm6368_clks[]
|
||||
CLKDEV_INIT(NULL, "ipsec", &clk_ipsec),
|
||||
};
|
||||
|
||||
@ -129,7 +129,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
#define HSSPI_PLL_HZ_6328 133333333
|
||||
#define HSSPI_PLL_HZ_6362 400000000
|
||||
|
||||
@@ -574,6 +603,10 @@ static int __init bcm63xx_clk_init(void)
|
||||
@@ -580,6 +609,10 @@ static int __init bcm63xx_clk_init(void)
|
||||
case BCM6368_CPU_ID:
|
||||
clkdev_add_table(bcm6368_clks, ARRAY_SIZE(bcm6368_clks));
|
||||
break;
|
||||
|
@ -57,7 +57,7 @@ Subject: [PATCH 51/53] MIPS: BCM63XX: add support for BCM6318
|
||||
mask = CKCTL_6328_HSSPI_EN;
|
||||
else if (BCMCPU_IS_6362())
|
||||
mask = CKCTL_6362_HSSPI_EN;
|
||||
@@ -450,6 +452,19 @@ static struct clk_lookup bcm3368_clks[]
|
||||
@@ -456,6 +458,19 @@ static struct clk_lookup bcm3368_clks[]
|
||||
CLKDEV_INIT("bcm63xx_enet.1", "enet", &clk_enet1),
|
||||
};
|
||||
|
||||
@ -77,7 +77,7 @@ Subject: [PATCH 51/53] MIPS: BCM63XX: add support for BCM6318
|
||||
static struct clk_lookup bcm6328_clks[] = {
|
||||
/* fixed rate clocks */
|
||||
CLKDEV_INIT(NULL, "periph", &clk_periph),
|
||||
@@ -571,6 +586,7 @@ static struct clk_lookup bcm63268_clks[]
|
||||
@@ -577,6 +592,7 @@ static struct clk_lookup bcm63268_clks[]
|
||||
CLKDEV_INIT(NULL, "pcie", &clk_pcie),
|
||||
};
|
||||
|
||||
@ -85,7 +85,7 @@ Subject: [PATCH 51/53] MIPS: BCM63XX: add support for BCM6318
|
||||
#define HSSPI_PLL_HZ_6328 133333333
|
||||
#define HSSPI_PLL_HZ_6362 400000000
|
||||
|
||||
@@ -580,6 +596,10 @@ static int __init bcm63xx_clk_init(void)
|
||||
@@ -586,6 +602,10 @@ static int __init bcm63xx_clk_init(void)
|
||||
case BCM3368_CPU_ID:
|
||||
clkdev_add_table(bcm3368_clks, ARRAY_SIZE(bcm3368_clks));
|
||||
break;
|
||||
|
@ -9,7 +9,7 @@ Subject: [PATCH] MIPS: BCM63XX: add clkdev lookups for device tree
|
||||
|
||||
--- a/arch/mips/bcm63xx/clk.c
|
||||
+++ b/arch/mips/bcm63xx/clk.c
|
||||
@@ -495,6 +495,8 @@ static struct clk_lookup bcm3368_clks[]
|
||||
@@ -501,6 +501,8 @@ static struct clk_lookup bcm3368_clks[]
|
||||
CLKDEV_INIT(NULL, "periph", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.0", "refclk", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.1", "refclk", &clk_periph),
|
||||
@ -18,7 +18,7 @@ Subject: [PATCH] MIPS: BCM63XX: add clkdev lookups for device tree
|
||||
/* gated clocks */
|
||||
CLKDEV_INIT(NULL, "enet0", &clk_enet0),
|
||||
CLKDEV_INIT(NULL, "enet1", &clk_enet1),
|
||||
@@ -511,7 +513,9 @@ static struct clk_lookup bcm6318_clks[]
|
||||
@@ -517,7 +519,9 @@ static struct clk_lookup bcm6318_clks[]
|
||||
/* fixed rate clocks */
|
||||
CLKDEV_INIT(NULL, "periph", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.0", "refclk", &clk_periph),
|
||||
@ -28,7 +28,7 @@ Subject: [PATCH] MIPS: BCM63XX: add clkdev lookups for device tree
|
||||
/* gated clocks */
|
||||
CLKDEV_INIT(NULL, "enetsw", &clk_enetsw),
|
||||
CLKDEV_INIT(NULL, "usbh", &clk_usbh),
|
||||
@@ -525,7 +529,10 @@ static struct clk_lookup bcm6328_clks[]
|
||||
@@ -531,7 +535,10 @@ static struct clk_lookup bcm6328_clks[]
|
||||
CLKDEV_INIT(NULL, "periph", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.0", "refclk", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.1", "refclk", &clk_periph),
|
||||
@ -39,7 +39,7 @@ Subject: [PATCH] MIPS: BCM63XX: add clkdev lookups for device tree
|
||||
/* gated clocks */
|
||||
CLKDEV_INIT(NULL, "enetsw", &clk_enetsw),
|
||||
CLKDEV_INIT(NULL, "usbh", &clk_usbh),
|
||||
@@ -538,6 +545,7 @@ static struct clk_lookup bcm6338_clks[]
|
||||
@@ -544,6 +551,7 @@ static struct clk_lookup bcm6338_clks[]
|
||||
/* fixed rate clocks */
|
||||
CLKDEV_INIT(NULL, "periph", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.0", "refclk", &clk_periph),
|
||||
@ -47,7 +47,7 @@ Subject: [PATCH] MIPS: BCM63XX: add clkdev lookups for device tree
|
||||
/* gated clocks */
|
||||
CLKDEV_INIT(NULL, "enet0", &clk_enet0),
|
||||
CLKDEV_INIT(NULL, "enet1", &clk_enet1),
|
||||
@@ -552,6 +560,7 @@ static struct clk_lookup bcm6345_clks[]
|
||||
@@ -558,6 +566,7 @@ static struct clk_lookup bcm6345_clks[]
|
||||
/* fixed rate clocks */
|
||||
CLKDEV_INIT(NULL, "periph", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.0", "refclk", &clk_periph),
|
||||
@ -55,7 +55,7 @@ Subject: [PATCH] MIPS: BCM63XX: add clkdev lookups for device tree
|
||||
/* gated clocks */
|
||||
CLKDEV_INIT(NULL, "enet0", &clk_enet0),
|
||||
CLKDEV_INIT(NULL, "enet1", &clk_enet1),
|
||||
@@ -566,6 +575,7 @@ static struct clk_lookup bcm6348_clks[]
|
||||
@@ -572,6 +581,7 @@ static struct clk_lookup bcm6348_clks[]
|
||||
/* fixed rate clocks */
|
||||
CLKDEV_INIT(NULL, "periph", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.0", "refclk", &clk_periph),
|
||||
@ -63,7 +63,7 @@ Subject: [PATCH] MIPS: BCM63XX: add clkdev lookups for device tree
|
||||
/* gated clocks */
|
||||
CLKDEV_INIT(NULL, "enet0", &clk_enet0),
|
||||
CLKDEV_INIT(NULL, "enet1", &clk_enet1),
|
||||
@@ -582,6 +592,8 @@ static struct clk_lookup bcm6358_clks[]
|
||||
@@ -588,6 +598,8 @@ static struct clk_lookup bcm6358_clks[]
|
||||
CLKDEV_INIT(NULL, "periph", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.0", "refclk", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.1", "refclk", &clk_periph),
|
||||
@ -72,7 +72,7 @@ Subject: [PATCH] MIPS: BCM63XX: add clkdev lookups for device tree
|
||||
/* gated clocks */
|
||||
CLKDEV_INIT(NULL, "enet0", &clk_enet0),
|
||||
CLKDEV_INIT(NULL, "enet1", &clk_enet1),
|
||||
@@ -601,7 +613,10 @@ static struct clk_lookup bcm6362_clks[]
|
||||
@@ -607,7 +619,10 @@ static struct clk_lookup bcm6362_clks[]
|
||||
CLKDEV_INIT(NULL, "periph", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.0", "refclk", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.1", "refclk", &clk_periph),
|
||||
@ -83,7 +83,7 @@ Subject: [PATCH] MIPS: BCM63XX: add clkdev lookups for device tree
|
||||
/* gated clocks */
|
||||
CLKDEV_INIT(NULL, "enetsw", &clk_enetsw),
|
||||
CLKDEV_INIT(NULL, "usbh", &clk_usbh),
|
||||
@@ -617,6 +632,8 @@ static struct clk_lookup bcm6368_clks[]
|
||||
@@ -623,6 +638,8 @@ static struct clk_lookup bcm6368_clks[]
|
||||
CLKDEV_INIT(NULL, "periph", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.0", "refclk", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.1", "refclk", &clk_periph),
|
||||
@ -92,7 +92,7 @@ Subject: [PATCH] MIPS: BCM63XX: add clkdev lookups for device tree
|
||||
/* gated clocks */
|
||||
CLKDEV_INIT(NULL, "enetsw", &clk_enetsw),
|
||||
CLKDEV_INIT(NULL, "usbh", &clk_usbh),
|
||||
@@ -631,7 +648,10 @@ static struct clk_lookup bcm63268_clks[]
|
||||
@@ -637,7 +654,10 @@ static struct clk_lookup bcm63268_clks[]
|
||||
CLKDEV_INIT(NULL, "periph", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.0", "refclk", &clk_periph),
|
||||
CLKDEV_INIT("bcm63xx_uart.1", "refclk", &clk_periph),
|
||||
|
@ -24,7 +24,7 @@
|
||||
* Internal peripheral clock
|
||||
*/
|
||||
static struct clk clk_periph = {
|
||||
@@ -618,6 +635,7 @@ static struct clk_lookup bcm6362_clks[]
|
||||
@@ -624,6 +641,7 @@ static struct clk_lookup bcm6362_clks[]
|
||||
CLKDEV_INIT("bcm63xx-hsspi.0", "pll", &clk_hsspi_pll),
|
||||
CLKDEV_INIT("10001000.spi", "pll", &clk_hsspi_pll),
|
||||
/* gated clocks */
|
||||
@ -32,7 +32,7 @@
|
||||
CLKDEV_INIT(NULL, "enetsw", &clk_enetsw),
|
||||
CLKDEV_INIT(NULL, "usbh", &clk_usbh),
|
||||
CLKDEV_INIT(NULL, "usbd", &clk_usbd),
|
||||
@@ -635,6 +653,7 @@ static struct clk_lookup bcm6368_clks[]
|
||||
@@ -641,6 +659,7 @@ static struct clk_lookup bcm6368_clks[]
|
||||
CLKDEV_INIT("10000100.serial", "refclk", &clk_periph),
|
||||
CLKDEV_INIT("10000120.serial", "refclk", &clk_periph),
|
||||
/* gated clocks */
|
||||
@ -40,7 +40,7 @@
|
||||
CLKDEV_INIT(NULL, "enetsw", &clk_enetsw),
|
||||
CLKDEV_INIT(NULL, "usbh", &clk_usbh),
|
||||
CLKDEV_INIT(NULL, "usbd", &clk_usbd),
|
||||
@@ -653,6 +672,7 @@ static struct clk_lookup bcm63268_clks[]
|
||||
@@ -659,6 +678,7 @@ static struct clk_lookup bcm63268_clks[]
|
||||
CLKDEV_INIT("bcm63xx-hsspi.0", "pll", &clk_hsspi_pll),
|
||||
CLKDEV_INIT("10001000.spi", "pll", &clk_hsspi_pll),
|
||||
/* gated clocks */
|
||||
|
@ -0,0 +1,28 @@
|
||||
From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
|
||||
Date: Fri, 31 Jul 2020 19:26:16 +0300
|
||||
Subject: [PATCH] net: bridge: clear bridge's private skb space on xmit
|
||||
|
||||
We need to clear all of the bridge private skb variables as they can be
|
||||
stale due to the packet being recirculated through the stack and then
|
||||
transmitted through the bridge device. Similar memset is already done on
|
||||
bridge's input. We've seen cases where proxyarp_replied was 1 on routed
|
||||
multicast packets transmitted through the bridge to ports with neigh
|
||||
suppress which were getting dropped. Same thing can in theory happen with
|
||||
the port isolation bit as well.
|
||||
|
||||
Fixes: 821f1b21cabb ("bridge: add new BR_NEIGH_SUPPRESS port flag to suppress arp and nd flood")
|
||||
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
|
||||
--- a/net/bridge/br_device.c
|
||||
+++ b/net/bridge/br_device.c
|
||||
@@ -36,6 +36,8 @@ netdev_tx_t br_dev_xmit(struct sk_buff *
|
||||
struct ethhdr *eth;
|
||||
u16 vid = 0;
|
||||
|
||||
+ memset(skb->cb, 0, sizeof(struct br_input_skb_cb));
|
||||
+
|
||||
rcu_read_lock();
|
||||
nf_ops = rcu_dereference(nf_br_ops);
|
||||
if (nf_ops && nf_ops->br_dev_xmit_hook(skb)) {
|
@ -16,7 +16,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
|
||||
--- a/drivers/net/phy/phylink.c
|
||||
+++ b/drivers/net/phy/phylink.c
|
||||
@@ -565,26 +565,17 @@ static const struct sfp_upstream_ops sfp
|
||||
@@ -565,31 +565,17 @@ static const struct sfp_upstream_ops sfp
|
||||
static int phylink_register_sfp(struct phylink *pl,
|
||||
struct fwnode_handle *fwnode)
|
||||
{
|
||||
@ -42,6 +42,11 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
return ret;
|
||||
}
|
||||
|
||||
- if (!fwnode_device_is_available(ref.fwnode)) {
|
||||
- fwnode_handle_put(ref.fwnode);
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- pl->sfp_bus = sfp_register_upstream(ref.fwnode, pl, &sfp_phylink_ops);
|
||||
- if (!pl->sfp_bus)
|
||||
- return -ENOMEM;
|
||||
@ -59,7 +64,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
#include <linux/rtnetlink.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
@@ -520,45 +521,63 @@ static void sfp_upstream_clear(struct sf
|
||||
@@ -520,45 +521,68 @@ static void sfp_upstream_clear(struct sf
|
||||
}
|
||||
|
||||
/**
|
||||
@ -117,6 +122,11 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
+ else if (ret < 0)
|
||||
+ return ERR_PTR(ret);
|
||||
+
|
||||
+ if (!fwnode_device_is_available(ref.fwnode)) {
|
||||
+ fwnode_handle_put(ref.fwnode);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ bus = sfp_bus_get(ref.fwnode);
|
||||
+ fwnode_handle_put(ref.fwnode);
|
||||
+ if (!bus)
|
||||
|
@ -117,7 +117,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
{
|
||||
struct fwnode_reference_args ref;
|
||||
struct sfp_bus *bus;
|
||||
@@ -557,7 +563,39 @@ struct sfp_bus *sfp_register_upstream_no
|
||||
@@ -562,7 +568,39 @@ struct sfp_bus *sfp_register_upstream_no
|
||||
if (!bus)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
@ -157,7 +157,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
bus->upstream_ops = ops;
|
||||
bus->upstream = upstream;
|
||||
|
||||
@@ -570,33 +608,33 @@ struct sfp_bus *sfp_register_upstream_no
|
||||
@@ -575,33 +613,33 @@ struct sfp_bus *sfp_register_upstream_no
|
||||
}
|
||||
rtnl_unlock();
|
||||
|
||||
|
@ -286,7 +286,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
goto err;
|
||||
--- a/net/core/net-procfs.c
|
||||
+++ b/net/core/net-procfs.c
|
||||
@@ -279,10 +279,12 @@ static int __net_init dev_proc_net_init(
|
||||
@@ -309,10 +309,12 @@ static int __net_init dev_proc_net_init(
|
||||
if (!proc_create_net("dev", 0444, net->proc_net, &dev_seq_ops,
|
||||
sizeof(struct seq_net_private)))
|
||||
goto out;
|
||||
@ -301,7 +301,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
sizeof(struct seq_net_private)))
|
||||
goto out_softnet;
|
||||
|
||||
@@ -292,9 +294,11 @@ static int __net_init dev_proc_net_init(
|
||||
@@ -322,9 +324,11 @@ static int __net_init dev_proc_net_init(
|
||||
out:
|
||||
return rc;
|
||||
out_ptype:
|
||||
@ -315,7 +315,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
out_dev:
|
||||
remove_proc_entry("dev", net->proc_net);
|
||||
goto out;
|
||||
@@ -304,8 +308,10 @@ static void __net_exit dev_proc_net_exit
|
||||
@@ -334,8 +338,10 @@ static void __net_exit dev_proc_net_exit
|
||||
{
|
||||
wext_proc_exit(net);
|
||||
|
||||
|
@ -71,7 +71,7 @@ Signed-off-by: Tobias Wolf <dev-NTEO@vplace.de>
|
||||
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -6884,7 +6884,7 @@ static void __ref alloc_node_mem_map(str
|
||||
@@ -6886,7 +6886,7 @@ static void __ref alloc_node_mem_map(str
|
||||
mem_map = NODE_DATA(0)->node_mem_map;
|
||||
#if defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) || defined(CONFIG_FLATMEM)
|
||||
if (page_to_pfn(mem_map) != pgdat->node_start_pfn)
|
||||
|
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#define PACKET_FANOUT_LB 1
|
||||
--- a/net/packet/af_packet.c
|
||||
+++ b/net/packet/af_packet.c
|
||||
@@ -1797,6 +1797,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
@@ -1801,6 +1801,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
{
|
||||
struct sock *sk;
|
||||
struct sockaddr_pkt *spkt;
|
||||
@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/*
|
||||
* When we registered the protocol we saved the socket in the data
|
||||
@@ -1804,6 +1805,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
@@ -1808,6 +1809,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
*/
|
||||
|
||||
sk = pt->af_packet_priv;
|
||||
@ -46,7 +46,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/*
|
||||
* Yank back the headers [hope the device set this
|
||||
@@ -1816,7 +1818,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
@@ -1820,7 +1822,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
* so that this procedure is noop.
|
||||
*/
|
||||
|
||||
@ -55,7 +55,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
goto out;
|
||||
|
||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||
@@ -2054,12 +2056,12 @@ static int packet_rcv(struct sk_buff *sk
|
||||
@@ -2058,12 +2060,12 @@ static int packet_rcv(struct sk_buff *sk
|
||||
unsigned int snaplen, res;
|
||||
bool is_drop_n_account = false;
|
||||
|
||||
@ -71,7 +71,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||
goto drop;
|
||||
|
||||
@@ -2185,12 +2187,12 @@ static int tpacket_rcv(struct sk_buff *s
|
||||
@@ -2189,12 +2191,12 @@ static int tpacket_rcv(struct sk_buff *s
|
||||
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
|
||||
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
|
||||
|
||||
@ -87,7 +87,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||
goto drop;
|
||||
|
||||
@@ -3289,6 +3291,7 @@ static int packet_create(struct net *net
|
||||
@@ -3293,6 +3295,7 @@ static int packet_create(struct net *net
|
||||
mutex_init(&po->pg_vec_lock);
|
||||
po->rollover = NULL;
|
||||
po->prot_hook.func = packet_rcv;
|
||||
@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (sock->type == SOCK_PACKET)
|
||||
po->prot_hook.func = packet_rcv_spkt;
|
||||
@@ -3924,6 +3927,16 @@ packet_setsockopt(struct socket *sock, i
|
||||
@@ -3930,6 +3933,16 @@ packet_setsockopt(struct socket *sock, i
|
||||
po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
|
||||
return 0;
|
||||
}
|
||||
@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
default:
|
||||
return -ENOPROTOOPT;
|
||||
}
|
||||
@@ -3980,6 +3993,13 @@ static int packet_getsockopt(struct sock
|
||||
@@ -3986,6 +3999,13 @@ static int packet_getsockopt(struct sock
|
||||
case PACKET_VNET_HDR:
|
||||
val = po->has_vnet_hdr;
|
||||
break;
|
||||
|
@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
#include <linux/uaccess.h>
|
||||
#include "br_private.h"
|
||||
@@ -382,6 +386,28 @@ static const struct ethtool_ops br_ethto
|
||||
@@ -384,6 +388,28 @@ static const struct ethtool_ops br_ethto
|
||||
.get_link = ethtool_op_get_link,
|
||||
};
|
||||
|
||||
@ -49,7 +49,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static const struct net_device_ops br_netdev_ops = {
|
||||
.ndo_open = br_dev_open,
|
||||
.ndo_stop = br_dev_stop,
|
||||
@@ -410,6 +436,9 @@ static const struct net_device_ops br_ne
|
||||
@@ -412,6 +438,9 @@ static const struct net_device_ops br_ne
|
||||
.ndo_bridge_setlink = br_setlink,
|
||||
.ndo_bridge_dellink = br_dellink,
|
||||
.ndo_features_check = passthru_features_check,
|
||||
|
@ -21,7 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#define PPP_VERSION "2.4.2"
|
||||
|
||||
/*
|
||||
@@ -1373,12 +1378,37 @@ static void ppp_dev_priv_destructor(stru
|
||||
@@ -1378,12 +1383,37 @@ static void ppp_dev_priv_destructor(stru
|
||||
ppp_destroy_interface(ppp);
|
||||
}
|
||||
|
||||
|
@ -53,7 +53,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
|
||||
--- a/net/ipv4/fib_semantics.c
|
||||
+++ b/net/ipv4/fib_semantics.c
|
||||
@@ -141,6 +141,10 @@ const struct fib_prop fib_props[RTN_MAX
|
||||
@@ -142,6 +142,10 @@ const struct fib_prop fib_props[RTN_MAX
|
||||
.error = -EINVAL,
|
||||
.scope = RT_SCOPE_NOWHERE,
|
||||
},
|
||||
|
@ -32,7 +32,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
|
||||
--- a/drivers/net/phy/sfp-bus.c
|
||||
+++ b/drivers/net/phy/sfp-bus.c
|
||||
@@ -712,6 +712,27 @@ void sfp_module_remove(struct sfp_bus *b
|
||||
@@ -717,6 +717,27 @@ void sfp_module_remove(struct sfp_bus *b
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sfp_module_remove);
|
||||
|
||||
|
@ -22,7 +22,7 @@ Signed-off-by: John Thomson <git@johnthomson.fastmail.com.au>
|
||||
|
||||
--- a/arch/arm/boot/compressed/head.S
|
||||
+++ b/arch/arm/boot/compressed/head.S
|
||||
@@ -599,6 +599,41 @@ not_relocated: mov r0, #0
|
||||
@@ -600,6 +600,41 @@ not_relocated: mov r0, #0
|
||||
bic r4, r4, #1
|
||||
blne cache_on
|
||||
|
||||
|
@ -18,7 +18,7 @@ Signed-off-by: Xiaowei Bao <xiaowei.bao@nxp.com>
|
||||
|
||||
--- a/arch/arm64/boot/dts/freescale/fsl-ls1028a-qds.dts
|
||||
+++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a-qds.dts
|
||||
@@ -222,6 +222,21 @@
|
||||
@@ -226,6 +226,21 @@
|
||||
phy-connection-type = "rgmii-id";
|
||||
};
|
||||
|
||||
|
@ -13,7 +13,7 @@ Signed-off-by: Wen He <wen.he_1@nxp.com>
|
||||
|
||||
--- a/arch/arm64/boot/dts/freescale/fsl-ls1028a-qds.dts
|
||||
+++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a-qds.dts
|
||||
@@ -244,3 +244,15 @@
|
||||
@@ -248,3 +248,15 @@
|
||||
&sata {
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -1,42 +0,0 @@
|
||||
From d4c7270a63b1d78b89d91f74d782cce2a2bd9690 Mon Sep 17 00:00:00 2001
|
||||
From: Biwen Li <biwen.li@nxp.com>
|
||||
Date: Wed, 4 Sep 2019 11:39:30 +0800
|
||||
Subject: [PATCH] arm64: ls1028a-qds: correct bus of rtc
|
||||
|
||||
The rtc is on i2c2 bus(hardware), not on i2c1 channel 3,
|
||||
so correct it
|
||||
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
---
|
||||
arch/arm64/boot/dts/freescale/fsl-ls1028a-qds.dts | 13 ++++++++-----
|
||||
1 file changed, 8 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/arch/arm64/boot/dts/freescale/fsl-ls1028a-qds.dts
|
||||
+++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a-qds.dts
|
||||
@@ -169,11 +169,6 @@
|
||||
vcc-supply = <&sb_3v3>;
|
||||
};
|
||||
|
||||
- rtc@51 {
|
||||
- compatible = "nxp,pcf2129";
|
||||
- reg = <0x51>;
|
||||
- };
|
||||
-
|
||||
eeprom@56 {
|
||||
compatible = "atmel,24c512";
|
||||
reg = <0x56>;
|
||||
@@ -217,6 +212,14 @@
|
||||
|
||||
};
|
||||
|
||||
+&i2c1 {
|
||||
+ status = "okay";
|
||||
+ rtc@51 {
|
||||
+ compatible = "nxp,pcf2129";
|
||||
+ reg = <0x51>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
&enetc_port1 {
|
||||
phy-handle = <&qds_phy1>;
|
||||
phy-connection-type = "rgmii-id";
|
@ -346,7 +346,7 @@ Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
|
||||
};
|
||||
};
|
||||
|
||||
@@ -259,3 +283,6 @@
|
||||
@@ -260,3 +284,6 @@
|
||||
edp_num_lanes = <0x4>;
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -14,7 +14,7 @@ Signed-off-by: Wen He <wen.he_1@nxp.com>
|
||||
|
||||
--- a/arch/arm64/boot/dts/freescale/fsl-ls1028a-qds.dts
|
||||
+++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a-qds.dts
|
||||
@@ -273,14 +273,7 @@
|
||||
@@ -274,14 +274,7 @@
|
||||
};
|
||||
|
||||
&hdptx0 {
|
||||
|
@ -884,7 +884,7 @@ Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
|
||||
-};
|
||||
--- a/arch/arm64/boot/dts/freescale/fsl-ls1028a-qds.dts
|
||||
+++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a-qds.dts
|
||||
@@ -276,6 +276,3 @@
|
||||
@@ -277,6 +277,3 @@
|
||||
lane-mapping = <0x4e>;
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -87,7 +87,7 @@ Signed-off-by: Li Yang <leoyang.li@nxp.com>
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3896,6 +3912,7 @@ static int cgroup_add_file(struct cgroup
|
||||
@@ -3901,6 +3917,7 @@ static int cgroup_add_file(struct cgroup
|
||||
{
|
||||
char name[CGROUP_FILE_NAME_MAX];
|
||||
struct kernfs_node *kn;
|
||||
@ -95,7 +95,7 @@ Signed-off-by: Li Yang <leoyang.li@nxp.com>
|
||||
struct lock_class_key *key = NULL;
|
||||
int ret;
|
||||
|
||||
@@ -3926,6 +3943,14 @@ static int cgroup_add_file(struct cgroup
|
||||
@@ -3931,6 +3948,14 @@ static int cgroup_add_file(struct cgroup
|
||||
spin_unlock_irq(&cgroup_file_kn_lock);
|
||||
}
|
||||
|
||||
|
@ -89,7 +89,7 @@ Signed-off-by: Li Yang <leoyang.li@nxp.com>
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3912,7 +3896,6 @@ static int cgroup_add_file(struct cgroup
|
||||
@@ -3917,7 +3901,6 @@ static int cgroup_add_file(struct cgroup
|
||||
{
|
||||
char name[CGROUP_FILE_NAME_MAX];
|
||||
struct kernfs_node *kn;
|
||||
@ -97,7 +97,7 @@ Signed-off-by: Li Yang <leoyang.li@nxp.com>
|
||||
struct lock_class_key *key = NULL;
|
||||
int ret;
|
||||
|
||||
@@ -3943,14 +3926,6 @@ static int cgroup_add_file(struct cgroup
|
||||
@@ -3948,14 +3931,6 @@ static int cgroup_add_file(struct cgroup
|
||||
spin_unlock_irq(&cgroup_file_kn_lock);
|
||||
}
|
||||
|
||||
|
@ -439,7 +439,7 @@ This reverts commit cf9441adb1a35506d7606866c382b9d8614169b5.
|
||||
IRQF_SHARED, dev_name(dev), pdev);
|
||||
--- a/sound/soc/xilinx/xlnx_formatter_pcm.c
|
||||
+++ b/sound/soc/xilinx/xlnx_formatter_pcm.c
|
||||
@@ -613,6 +613,7 @@ static int xlnx_formatter_pcm_probe(stru
|
||||
@@ -634,6 +634,7 @@ static int xlnx_formatter_pcm_probe(stru
|
||||
aud_drv_data->mm2s_irq = platform_get_irq_byname(pdev,
|
||||
"irq_mm2s");
|
||||
if (aud_drv_data->mm2s_irq < 0) {
|
||||
@ -447,7 +447,7 @@ This reverts commit cf9441adb1a35506d7606866c382b9d8614169b5.
|
||||
ret = aud_drv_data->mm2s_irq;
|
||||
goto clk_err;
|
||||
}
|
||||
@@ -639,6 +640,7 @@ static int xlnx_formatter_pcm_probe(stru
|
||||
@@ -660,6 +661,7 @@ static int xlnx_formatter_pcm_probe(stru
|
||||
aud_drv_data->s2mm_irq = platform_get_irq_byname(pdev,
|
||||
"irq_s2mm");
|
||||
if (aud_drv_data->s2mm_irq < 0) {
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user