diff --git a/root/target/linux/brcm2708/patches-4.14/0416-staging-vc04_services-no-need-to-check-debugfs-retur.patch b/root/target/linux/brcm2708/patches-4.14/0416-staging-vc04_services-no-need-to-check-debugfs-retur.patch new file mode 100644 index 00000000..8c6a0602 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0416-staging-vc04_services-no-need-to-check-debugfs-retur.patch @@ -0,0 +1,227 @@ +From 3e676d8a73e2b2082113b9a0bf043cde7cc920de Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Fri, 1 Jun 2018 13:09:59 +0200 +Subject: [PATCH 416/496] staging: vc04_services: no need to check debugfs + return values + +commit 0723103f8ba15a019bbcaf6f130d73d05337332f upstream + +When calling debugfs functions, there is no need to ever check the +return value. The function can work or not, but the code logic should +never do something different based on this. + +Clean up the vchiq_arm code by not caring about the value of debugfs +calls. This ends up removing a number of lines of code that are not +needed. + +Cc: Stefan Wahren +Cc: Kees Cook +Cc: Dan Carpenter +Cc: Arnd Bergmann +Cc: Keerthi Reddy +Cc: linux-rpi-kernel@lists.infradead.org +Cc: linux-arm-kernel@lists.infradead.org +Reviewed-by: Eric Anholt +Signed-off-by: Greg Kroah-Hartman +--- + .../interface/vchiq_arm/vchiq_arm.c | 8 +- + .../interface/vchiq_arm/vchiq_debugfs.c | 73 +++---------------- + .../interface/vchiq_arm/vchiq_debugfs.h | 4 +- + 3 files changed, 15 insertions(+), 70 deletions(-) + +diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +index 63e4308a4f71..d67987fbf25e 100644 +--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c ++++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +@@ -1748,7 +1748,7 @@ vchiq_open(struct inode *inode, struct file *file) + instance->state = state; + instance->pid = current->tgid; + +- (void)vchiq_debugfs_add_instance(instance); ++ vchiq_debugfs_add_instance(instance); + + sema_init(&instance->insert_event, 0); + sema_init(&instance->remove_event, 0); +@@ -3432,9 +3432,7 @@ static int vchiq_probe(struct platform_device *pdev) + goto failed_device_create; + + /* create debugfs entries */ +- err = vchiq_debugfs_init(); +- if (err != 0) +- goto failed_debugfs_init; ++ vchiq_debugfs_init(); + + vchiq_log_info(vchiq_arm_log_level, + "vchiq: initialised - version %d (min %d), device %d.%d", +@@ -3443,8 +3441,6 @@ static int vchiq_probe(struct platform_device *pdev) + + return 0; + +-failed_debugfs_init: +- device_destroy(vchiq_class, vchiq_devid); + failed_device_create: + class_destroy(vchiq_class); + failed_class_create: +diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +index 9367a9a5aa3c..a568ec90f607 100644 +--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c ++++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +@@ -160,15 +160,12 @@ static const struct file_operations debugfs_log_fops = { + }; + + /* create an entry under /vchiq/log for each log category */ +-static int vchiq_debugfs_create_log_entries(struct dentry *top) ++static void vchiq_debugfs_create_log_entries(struct dentry *top) + { + struct dentry *dir; + size_t i; +- int ret = 0; + + dir = debugfs_create_dir("log", vchiq_debugfs_top()); +- if (!dir) +- return -ENOMEM; + debugfs_info.log_categories = dir; + + for (i = 0; i < n_log_entries; i++) { +@@ -179,14 +176,8 @@ static int vchiq_debugfs_create_log_entries(struct dentry *top) + debugfs_info.log_categories, + levp, + &debugfs_log_fops); +- if (!dir) { +- ret = -ENOMEM; +- break; +- } +- + vchiq_debugfs_log_entries[i].dir = dir; + } +- return ret; + } + + static int debugfs_usecount_show(struct seq_file *f, void *offset) +@@ -270,43 +261,22 @@ static const struct file_operations debugfs_trace_fops = { + }; + + /* add an instance (process) to the debugfs entries */ +-int vchiq_debugfs_add_instance(VCHIQ_INSTANCE_T instance) ++void vchiq_debugfs_add_instance(VCHIQ_INSTANCE_T instance) + { + char pidstr[16]; +- struct dentry *top, *use_count, *trace; ++ struct dentry *top; + struct dentry *clients = vchiq_clients_top(); + + snprintf(pidstr, sizeof(pidstr), "%d", + vchiq_instance_get_pid(instance)); + + top = debugfs_create_dir(pidstr, clients); +- if (!top) +- goto fail_top; +- +- use_count = debugfs_create_file("use_count", +- 0444, top, +- instance, +- &debugfs_usecount_fops); +- if (!use_count) +- goto fail_use_count; +- +- trace = debugfs_create_file("trace", +- 0644, top, +- instance, +- &debugfs_trace_fops); +- if (!trace) +- goto fail_trace; +- +- vchiq_instance_get_debugfs_node(instance)->dentry = top; + +- return 0; ++ debugfs_create_file("use_count", 0444, top, instance, ++ &debugfs_usecount_fops); ++ debugfs_create_file("trace", 0644, top, instance, &debugfs_trace_fops); + +-fail_trace: +- debugfs_remove(use_count); +-fail_use_count: +- debugfs_remove(top); +-fail_top: +- return -ENOMEM; ++ vchiq_instance_get_debugfs_node(instance)->dentry = top; + } + + void vchiq_debugfs_remove_instance(VCHIQ_INSTANCE_T instance) +@@ -316,32 +286,13 @@ void vchiq_debugfs_remove_instance(VCHIQ_INSTANCE_T instance) + debugfs_remove_recursive(node->dentry); + } + +- +-int vchiq_debugfs_init(void) ++void vchiq_debugfs_init(void) + { +- BUG_ON(debugfs_info.vchiq_cfg_dir != NULL); +- + debugfs_info.vchiq_cfg_dir = debugfs_create_dir("vchiq", NULL); +- if (debugfs_info.vchiq_cfg_dir == NULL) +- goto fail; +- + debugfs_info.clients = debugfs_create_dir("clients", + vchiq_debugfs_top()); +- if (!debugfs_info.clients) +- goto fail; +- +- if (vchiq_debugfs_create_log_entries(vchiq_debugfs_top()) != 0) +- goto fail; +- +- return 0; + +-fail: +- vchiq_debugfs_deinit(); +- vchiq_log_error(vchiq_arm_log_level, +- "%s: failed to create debugfs directory", +- __func__); +- +- return -ENOMEM; ++ vchiq_debugfs_create_log_entries(vchiq_debugfs_top()); + } + + /* remove all the debugfs entries */ +@@ -363,18 +314,16 @@ static struct dentry *vchiq_debugfs_top(void) + + #else /* CONFIG_DEBUG_FS */ + +-int vchiq_debugfs_init(void) ++void vchiq_debugfs_init(void) + { +- return 0; + } + + void vchiq_debugfs_deinit(void) + { + } + +-int vchiq_debugfs_add_instance(VCHIQ_INSTANCE_T instance) ++void vchiq_debugfs_add_instance(VCHIQ_INSTANCE_T instance) + { +- return 0; + } + + void vchiq_debugfs_remove_instance(VCHIQ_INSTANCE_T instance) +diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h +index 1d95e3d70621..3af6397ada19 100644 +--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h ++++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.h +@@ -40,11 +40,11 @@ typedef struct vchiq_debugfs_node_struct { + struct dentry *dentry; + } VCHIQ_DEBUGFS_NODE_T; + +-int vchiq_debugfs_init(void); ++void vchiq_debugfs_init(void); + + void vchiq_debugfs_deinit(void); + +-int vchiq_debugfs_add_instance(VCHIQ_INSTANCE_T instance); ++void vchiq_debugfs_add_instance(VCHIQ_INSTANCE_T instance); + + void vchiq_debugfs_remove_instance(VCHIQ_INSTANCE_T instance); + +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0417-staging-vc04_services-remove-odd-vchiq_debugfs_top-w.patch b/root/target/linux/brcm2708/patches-4.14/0417-staging-vc04_services-remove-odd-vchiq_debugfs_top-w.patch new file mode 100644 index 00000000..f9887de4 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0417-staging-vc04_services-remove-odd-vchiq_debugfs_top-w.patch @@ -0,0 +1,109 @@ +From b03490c29c77c8796a2209107209af5cf3bb15ff Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Fri, 1 Jun 2018 13:10:00 +0200 +Subject: [PATCH 417/496] staging: vc04_services: remove odd + vchiq_debugfs_top() wrapper + +commit 2739deaece4bc25fba5df0566423f4a11c3f4e84 upstream + +vchiq_debugfs_top() is only a wrapper around a pointer to a dentry, so +just use the dentry directly instead, making it a static variable +instead of part of a static structure. + +This also removes the pointless BUG_ON() when checking that dentry as no +one should ever care if debugfs is working or not, and the kernel should +really not panic over something as trivial as that. + +Suggested-by: Eric Anholt +Cc: Stefan Wahren +Cc: Kees Cook +Cc: Dan Carpenter +Cc: Arnd Bergmann +Cc: Keerthi Reddy +Cc: linux-rpi-kernel@lists.infradead.org +Cc: linux-arm-kernel@lists.infradead.org +Reviewed-by: Eric Anholt +Signed-off-by: Greg Kroah-Hartman +--- + .../interface/vchiq_arm/vchiq_debugfs.c | 24 +++++++------------ + 1 file changed, 8 insertions(+), 16 deletions(-) + +diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +index a568ec90f607..f1c1ef0be795 100644 +--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c ++++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +@@ -55,9 +55,6 @@ + + /* Top-level debug info */ + struct vchiq_debugfs_info { +- /* Global 'vchiq' debugfs entry used by all instances */ +- struct dentry *vchiq_cfg_dir; +- + /* one entry per client process */ + struct dentry *clients; + +@@ -67,6 +64,9 @@ struct vchiq_debugfs_info { + + static struct vchiq_debugfs_info debugfs_info; + ++/* Global 'vchiq' debugfs entry used by all instances */ ++struct dentry *vchiq_dbg_dir; ++ + /* Log category debugfs entries */ + struct vchiq_debugfs_log_entry { + const char *name; +@@ -84,7 +84,6 @@ static struct vchiq_debugfs_log_entry vchiq_debugfs_log_entries[] = { + static int n_log_entries = ARRAY_SIZE(vchiq_debugfs_log_entries); + + static struct dentry *vchiq_clients_top(void); +-static struct dentry *vchiq_debugfs_top(void); + + static int debugfs_log_show(struct seq_file *f, void *offset) + { +@@ -165,7 +164,7 @@ static void vchiq_debugfs_create_log_entries(struct dentry *top) + struct dentry *dir; + size_t i; + +- dir = debugfs_create_dir("log", vchiq_debugfs_top()); ++ dir = debugfs_create_dir("log", vchiq_dbg_dir); + debugfs_info.log_categories = dir; + + for (i = 0; i < n_log_entries; i++) { +@@ -288,17 +287,16 @@ void vchiq_debugfs_remove_instance(VCHIQ_INSTANCE_T instance) + + void vchiq_debugfs_init(void) + { +- debugfs_info.vchiq_cfg_dir = debugfs_create_dir("vchiq", NULL); +- debugfs_info.clients = debugfs_create_dir("clients", +- vchiq_debugfs_top()); ++ vchiq_dbg_dir = debugfs_create_dir("vchiq", NULL); ++ debugfs_info.clients = debugfs_create_dir("clients", vchiq_dbg_dir); + +- vchiq_debugfs_create_log_entries(vchiq_debugfs_top()); ++ vchiq_debugfs_create_log_entries(vchiq_dbg_dir); + } + + /* remove all the debugfs entries */ + void vchiq_debugfs_deinit(void) + { +- debugfs_remove_recursive(vchiq_debugfs_top()); ++ debugfs_remove_recursive(vchiq_dbg_dir); + } + + static struct dentry *vchiq_clients_top(void) +@@ -306,12 +304,6 @@ static struct dentry *vchiq_clients_top(void) + return debugfs_info.clients; + } + +-static struct dentry *vchiq_debugfs_top(void) +-{ +- BUG_ON(debugfs_info.vchiq_cfg_dir == NULL); +- return debugfs_info.vchiq_cfg_dir; +-} +- + #else /* CONFIG_DEBUG_FS */ + + void vchiq_debugfs_init(void) +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0418-staging-vc04_services-move-client-dbg-directory-into.patch b/root/target/linux/brcm2708/patches-4.14/0418-staging-vc04_services-move-client-dbg-directory-into.patch new file mode 100644 index 00000000..49aec38f --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0418-staging-vc04_services-move-client-dbg-directory-into.patch @@ -0,0 +1,99 @@ +From 468f8f61d465493f3597be7e715eddb7aac79b6c Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Fri, 1 Jun 2018 13:10:01 +0200 +Subject: [PATCH 418/496] staging: vc04_services: move client dbg directory + into static variable + +commit 24e8d3fc42f25936ff270e404847a3a462c38468 upstream + +This does not need to be part of a wrapper function, or in a structure, +just properly reference it directly as a single variable. + +The whole variable will be going away soon anyway, this is just a step +toward that direction. + +Suggested-by: Eric Anholt +Cc: Stefan Wahren +Cc: Kees Cook +Cc: Dan Carpenter +Cc: Arnd Bergmann +Cc: Keerthi Reddy +Cc: linux-rpi-kernel@lists.infradead.org +Cc: linux-arm-kernel@lists.infradead.org +Reviewed-by: Eric Anholt +Signed-off-by: Greg Kroah-Hartman +--- + .../interface/vchiq_arm/vchiq_debugfs.c | 18 ++++-------------- + 1 file changed, 4 insertions(+), 14 deletions(-) + +diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +index f1c1ef0be795..efdc985236ac 100644 +--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c ++++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +@@ -55,17 +55,15 @@ + + /* Top-level debug info */ + struct vchiq_debugfs_info { +- /* one entry per client process */ +- struct dentry *clients; +- + /* log categories */ + struct dentry *log_categories; + }; + + static struct vchiq_debugfs_info debugfs_info; + +-/* Global 'vchiq' debugfs entry used by all instances */ ++/* Global 'vchiq' debugfs and clients entry used by all instances */ + struct dentry *vchiq_dbg_dir; ++struct dentry *vchiq_dbg_clients; + + /* Log category debugfs entries */ + struct vchiq_debugfs_log_entry { +@@ -83,8 +81,6 @@ static struct vchiq_debugfs_log_entry vchiq_debugfs_log_entries[] = { + }; + static int n_log_entries = ARRAY_SIZE(vchiq_debugfs_log_entries); + +-static struct dentry *vchiq_clients_top(void); +- + static int debugfs_log_show(struct seq_file *f, void *offset) + { + int *levp = f->private; +@@ -264,12 +260,11 @@ void vchiq_debugfs_add_instance(VCHIQ_INSTANCE_T instance) + { + char pidstr[16]; + struct dentry *top; +- struct dentry *clients = vchiq_clients_top(); + + snprintf(pidstr, sizeof(pidstr), "%d", + vchiq_instance_get_pid(instance)); + +- top = debugfs_create_dir(pidstr, clients); ++ top = debugfs_create_dir(pidstr, vchiq_dbg_clients); + + debugfs_create_file("use_count", 0444, top, instance, + &debugfs_usecount_fops); +@@ -288,7 +283,7 @@ void vchiq_debugfs_remove_instance(VCHIQ_INSTANCE_T instance) + void vchiq_debugfs_init(void) + { + vchiq_dbg_dir = debugfs_create_dir("vchiq", NULL); +- debugfs_info.clients = debugfs_create_dir("clients", vchiq_dbg_dir); ++ vchiq_dbg_clients = debugfs_create_dir("clients", vchiq_dbg_dir); + + vchiq_debugfs_create_log_entries(vchiq_dbg_dir); + } +@@ -299,11 +294,6 @@ void vchiq_debugfs_deinit(void) + debugfs_remove_recursive(vchiq_dbg_dir); + } + +-static struct dentry *vchiq_clients_top(void) +-{ +- return debugfs_info.clients; +-} +- + #else /* CONFIG_DEBUG_FS */ + + void vchiq_debugfs_init(void) +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0419-staging-vc04_services-remove-struct-vchiq_debugfs_in.patch b/root/target/linux/brcm2708/patches-4.14/0419-staging-vc04_services-remove-struct-vchiq_debugfs_in.patch new file mode 100644 index 00000000..fd164f2b --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0419-staging-vc04_services-remove-struct-vchiq_debugfs_in.patch @@ -0,0 +1,68 @@ +From f731c29ba7438c48c624d7681d1824028741e69f Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Fri, 1 Jun 2018 13:10:02 +0200 +Subject: [PATCH 419/496] staging: vc04_services: remove struct + vchiq_debugfs_info + +commit 127892febb2d5d6612756da2d7d0bab526db3b51 upstream + +This structure, and the one static variable that was declared with it, +were not being used for anything. The log_categories field was being +set, but never used again. So just remove it entirely as it is not +needed at all. + +Suggested-by: Eric Anholt +Cc: Stefan Wahren +Cc: Kees Cook +Cc: Dan Carpenter +Cc: Arnd Bergmann +Cc: Keerthi Reddy +Cc: linux-rpi-kernel@lists.infradead.org +Cc: linux-arm-kernel@lists.infradead.org +Reviewed-by: Eric Anholt +Signed-off-by: Greg Kroah-Hartman +--- + .../interface/vchiq_arm/vchiq_debugfs.c | 15 +-------------- + 1 file changed, 1 insertion(+), 14 deletions(-) + +diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +index efdc985236ac..5893d9e45f5a 100644 +--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c ++++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +@@ -52,15 +52,6 @@ + #define VCHIQ_LOG_INFO_STR "info" + #define VCHIQ_LOG_TRACE_STR "trace" + +- +-/* Top-level debug info */ +-struct vchiq_debugfs_info { +- /* log categories */ +- struct dentry *log_categories; +-}; +- +-static struct vchiq_debugfs_info debugfs_info; +- + /* Global 'vchiq' debugfs and clients entry used by all instances */ + struct dentry *vchiq_dbg_dir; + struct dentry *vchiq_dbg_clients; +@@ -161,16 +152,12 @@ static void vchiq_debugfs_create_log_entries(struct dentry *top) + size_t i; + + dir = debugfs_create_dir("log", vchiq_dbg_dir); +- debugfs_info.log_categories = dir; + + for (i = 0; i < n_log_entries; i++) { + void *levp = (void *)vchiq_debugfs_log_entries[i].plevel; + + dir = debugfs_create_file(vchiq_debugfs_log_entries[i].name, +- 0644, +- debugfs_info.log_categories, +- levp, +- &debugfs_log_fops); ++ 0644, dir, levp, &debugfs_log_fops); + vchiq_debugfs_log_entries[i].dir = dir; + } + } +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0420-staging-vc04_services-vchiq_debugfs_log_entry-can-be.patch b/root/target/linux/brcm2708/patches-4.14/0420-staging-vc04_services-vchiq_debugfs_log_entry-can-be.patch new file mode 100644 index 00000000..79dc1b9c --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0420-staging-vc04_services-vchiq_debugfs_log_entry-can-be.patch @@ -0,0 +1,56 @@ +From c92dccec989d373f68a1756e461a06e584482292 Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Fri, 1 Jun 2018 13:10:03 +0200 +Subject: [PATCH 420/496] staging: vc04_services: vchiq_debugfs_log_entry can + be a void * + +commit 54f156968a1ca1655a53b4975e91b767552d8008 upstream + +There's no need to set this to be int * when it is only used as a void *. +This lets us remove the unneeded cast, and unneeded temporary variable +the one place it is referenced in the code. + +Suggested-by: Eric Anholt +Cc: Stefan Wahren +Cc: Kees Cook +Cc: Dan Carpenter +Cc: Arnd Bergmann +Cc: Keerthi Reddy +Cc: linux-rpi-kernel@lists.infradead.org +Cc: linux-arm-kernel@lists.infradead.org +Reviewed-by: Eric Anholt +Signed-off-by: Greg Kroah-Hartman +--- + .../vc04_services/interface/vchiq_arm/vchiq_debugfs.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +index 5893d9e45f5a..e8f95ac5131f 100644 +--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c ++++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +@@ -59,7 +59,7 @@ struct dentry *vchiq_dbg_clients; + /* Log category debugfs entries */ + struct vchiq_debugfs_log_entry { + const char *name; +- int *plevel; ++ void *plevel; + struct dentry *dir; + }; + +@@ -154,10 +154,10 @@ static void vchiq_debugfs_create_log_entries(struct dentry *top) + dir = debugfs_create_dir("log", vchiq_dbg_dir); + + for (i = 0; i < n_log_entries; i++) { +- void *levp = (void *)vchiq_debugfs_log_entries[i].plevel; +- + dir = debugfs_create_file(vchiq_debugfs_log_entries[i].name, +- 0644, dir, levp, &debugfs_log_fops); ++ 0644, dir, ++ vchiq_debugfs_log_entries[i].plevel, ++ &debugfs_log_fops); + vchiq_debugfs_log_entries[i].dir = dir; + } + } +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0421-staging-vc04_services-no-need-to-save-the-log-debufs.patch b/root/target/linux/brcm2708/patches-4.14/0421-staging-vc04_services-no-need-to-save-the-log-debufs.patch new file mode 100644 index 00000000..cc622ebe --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0421-staging-vc04_services-no-need-to-save-the-log-debufs.patch @@ -0,0 +1,88 @@ +From da38e1d6f0d496c128150bd973816986dd23a290 Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Fri, 1 Jun 2018 13:10:04 +0200 +Subject: [PATCH 421/496] staging: vc04_services: no need to save the log + debufs dentries + +commit 3b93c0f4b6accb8105152900d7e414593a8b0c79 upstream + +The log entry dentries are only set, never referenced, so no need to +keep them around. Remove the pointer from struct +vchiq_debugfs_log_entry as it is not needed anymore and get rid of the +separate vchiq_debugfs_create_log_entries() function as it is only used +in one place. + +Suggested-by: Eric Anholt +Cc: Stefan Wahren +Cc: Kees Cook +Cc: Dan Carpenter +Cc: Arnd Bergmann +Cc: Keerthi Reddy +Cc: linux-rpi-kernel@lists.infradead.org +Cc: linux-arm-kernel@lists.infradead.org +Reviewed-by: Eric Anholt +Signed-off-by: Greg Kroah-Hartman +--- + .../interface/vchiq_arm/vchiq_debugfs.c | 29 +++++++------------ + 1 file changed, 10 insertions(+), 19 deletions(-) + +diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +index e8f95ac5131f..db4f0c75a083 100644 +--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c ++++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +@@ -60,7 +60,6 @@ struct dentry *vchiq_dbg_clients; + struct vchiq_debugfs_log_entry { + const char *name; + void *plevel; +- struct dentry *dir; + }; + + static struct vchiq_debugfs_log_entry vchiq_debugfs_log_entries[] = { +@@ -145,23 +144,6 @@ static const struct file_operations debugfs_log_fops = { + .release = single_release, + }; + +-/* create an entry under /vchiq/log for each log category */ +-static void vchiq_debugfs_create_log_entries(struct dentry *top) +-{ +- struct dentry *dir; +- size_t i; +- +- dir = debugfs_create_dir("log", vchiq_dbg_dir); +- +- for (i = 0; i < n_log_entries; i++) { +- dir = debugfs_create_file(vchiq_debugfs_log_entries[i].name, +- 0644, dir, +- vchiq_debugfs_log_entries[i].plevel, +- &debugfs_log_fops); +- vchiq_debugfs_log_entries[i].dir = dir; +- } +-} +- + static int debugfs_usecount_show(struct seq_file *f, void *offset) + { + VCHIQ_INSTANCE_T instance = f->private; +@@ -269,10 +251,19 @@ void vchiq_debugfs_remove_instance(VCHIQ_INSTANCE_T instance) + + void vchiq_debugfs_init(void) + { ++ struct dentry *dir; ++ int i; ++ + vchiq_dbg_dir = debugfs_create_dir("vchiq", NULL); + vchiq_dbg_clients = debugfs_create_dir("clients", vchiq_dbg_dir); + +- vchiq_debugfs_create_log_entries(vchiq_dbg_dir); ++ /* create an entry under /vchiq/log for each log category */ ++ dir = debugfs_create_dir("log", vchiq_dbg_dir); ++ ++ for (i = 0; i < n_log_entries; i++) ++ debugfs_create_file(vchiq_debugfs_log_entries[i].name, 0644, ++ dir, vchiq_debugfs_log_entries[i].plevel, ++ &debugfs_log_fops); + } + + /* remove all the debugfs entries */ +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0422-staging-vc04_services-Join-multiline-dereferences.patch b/root/target/linux/brcm2708/patches-4.14/0422-staging-vc04_services-Join-multiline-dereferences.patch new file mode 100644 index 00000000..4d873af7 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0422-staging-vc04_services-Join-multiline-dereferences.patch @@ -0,0 +1,65 @@ +From b6bd1034b83c0c7ceeb0d58ea0abd9d141d55710 Mon Sep 17 00:00:00 2001 +From: Genki Sky +Date: Tue, 5 Dec 2017 19:09:54 -0500 +Subject: [PATCH 422/496] staging: vc04_services: Join multiline dereferences + +commit 7260ea5fc327344974716e5109180f96f0483a85 upstream + +This was found using checkpatch.pl's MULTILINE_DEREFERENCE warning. +Putting the dereference onto one line makes them easier to read, +especially when part of a larger expression (in this case, function +arguments and ternary operator), and when the dereferences are short +(as they are here). + +Signed-off-by: Genki Sky +Signed-off-by: Greg Kroah-Hartman +--- + .../bcm2835-camera/bcm2835-camera.c | 16 ++++++---------- + 1 file changed, 6 insertions(+), 10 deletions(-) + +diff --git a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c +index 8bfd60e06a08..f31f8c756741 100644 +--- a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c ++++ b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c +@@ -356,11 +356,9 @@ static void buffer_cb(struct vchiq_mmal_instance *instance, + pr_debug("Grab another frame"); + vchiq_mmal_port_parameter_set( + instance, +- dev->capture. +- camera_port, ++ dev->capture.camera_port, + MMAL_PARAMETER_CAPTURE, +- &dev->capture. +- frame_count, ++ &dev->capture.frame_count, + sizeof(dev->capture.frame_count)); + } + } else { +@@ -419,11 +417,9 @@ static void buffer_cb(struct vchiq_mmal_instance *instance, + "Grab another frame as buffer has EOS"); + vchiq_mmal_port_parameter_set( + instance, +- dev->capture. +- camera_port, ++ dev->capture.camera_port, + MMAL_PARAMETER_CAPTURE, +- &dev->capture. +- frame_count, ++ &dev->capture.frame_count, + sizeof(dev->capture.frame_count)); + } + } else { +@@ -1267,8 +1263,8 @@ static int mmal_setup_components(struct bm2835_mmal_dev *dev, + port->current_buffer.size = + (f->fmt.pix.sizeimage < + (100 << 10)) +- ? (100 << 10) : f->fmt.pix. +- sizeimage; ++ ? (100 << 10) ++ : f->fmt.pix.sizeimage; + } + v4l2_dbg(1, bcm2835_v4l2_debug, + &dev->v4l2_dev, +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0444-Revert-mm-alloc_contig-re-allow-CMA-to-compact-FS-pa.patch b/root/target/linux/brcm2708/patches-4.14/0444-Revert-mm-alloc_contig-re-allow-CMA-to-compact-FS-pa.patch new file mode 100644 index 00000000..716d5594 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0444-Revert-mm-alloc_contig-re-allow-CMA-to-compact-FS-pa.patch @@ -0,0 +1,33 @@ +From 00f0e834c44c492555e43fdaf9c112ed269db01f Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Wed, 15 Aug 2018 12:25:32 +0100 +Subject: [PATCH 444/496] Revert "mm: alloc_contig: re-allow CMA to compact FS + pages" + +The upstream commit caused poor video playback performance +on a busy system for many users. + +See: https://github.com/raspberrypi/linux/issues/2503 + +This reverts commit 424f6c4818bbf1b8ccf58aa012ecc19c0bb9b446. + +Signed-off-by: popcornmix +--- + mm/page_alloc.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/mm/page_alloc.c b/mm/page_alloc.c +index 9b31af7654d3..023e12c6e5cb 100644 +--- a/mm/page_alloc.c ++++ b/mm/page_alloc.c +@@ -7527,7 +7527,6 @@ int alloc_contig_range(unsigned long start, unsigned long end, + .zone = page_zone(pfn_to_page(start)), + .mode = MIGRATE_SYNC, + .ignore_skip_hint = true, +- .gfp_mask = current_gfp_context(gfp_mask), + }; + INIT_LIST_HEAD(&cc.migratepages); + +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0453-qmi_wwan-apply-SET_DTR-quirk-to-the-SIMCOM-shared-de.patch b/root/target/linux/brcm2708/patches-4.14/0453-qmi_wwan-apply-SET_DTR-quirk-to-the-SIMCOM-shared-de.patch new file mode 100644 index 00000000..c2c6084f --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0453-qmi_wwan-apply-SET_DTR-quirk-to-the-SIMCOM-shared-de.patch @@ -0,0 +1,50 @@ +From 3dc96a250fab4720d0ea6121ac5d52c6c4989fc1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= +Date: Fri, 25 May 2018 15:00:20 +0200 +Subject: [PATCH 453/496] qmi_wwan: apply SET_DTR quirk to the SIMCOM shared + device ID +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +commit 102cd909635612c0be784a519651954a7924c786 upstream. + +SIMCOM are reusing a single device ID for many (all of their?) +different modems, based on different chipsets and firmwares. Newer +Qualcomm chipset generations require setting DTR to wake the QMI +function. The SIM7600E modem is using such a chipset, making it +fail to work with this driver despite the device ID match. + +Fix by unconditionally enabling the SET_DTR quirk for all SIMCOM +modems using this specific device ID. This is similar to what +we already have done for another case of device IDs recycled over +multiple chipset generations: 14cf4a771b30 ("drivers: net: usb: +qmi_wwan: add QMI_QUIRK_SET_DTR for Telit PID 0x1201") + +Initial testing on an older SIM7100 modem shows no immediate side +effects. + +Reported-by: Sebastian Sjoholm +Cc: Reinhard Speyerer +Signed-off-by: Bjørn Mork +Signed-off-by: David S. Miller +--- + drivers/net/usb/qmi_wwan.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c +index 6d3811c869fd..ee2760c060eb 100644 +--- a/drivers/net/usb/qmi_wwan.c ++++ b/drivers/net/usb/qmi_wwan.c +@@ -1249,7 +1249,7 @@ static const struct usb_device_id products[] = { + {QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */ + {QMI_FIXED_INTF(0x03f0, 0x9d1d, 1)}, /* HP lt4120 Snapdragon X5 LTE */ + {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */ +- {QMI_FIXED_INTF(0x1e0e, 0x9001, 5)}, /* SIMCom 7230E */ ++ {QMI_QUIRK_SET_DTR(0x1e0e, 0x9001, 5)}, /* SIMCom 7100E, 7230E, 7600E ++ */ + {QMI_QUIRK_SET_DTR(0x2c7c, 0x0125, 4)}, /* Quectel EC25, EC20 R2.0 Mini PCIe */ + {QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */ + {QMI_QUIRK_SET_DTR(0x2c7c, 0x0191, 4)}, /* Quectel EG91 */ +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0454-Revert-Revert-mm-alloc_contig-re-allow-CMA-to-compac.patch b/root/target/linux/brcm2708/patches-4.14/0454-Revert-Revert-mm-alloc_contig-re-allow-CMA-to-compac.patch new file mode 100644 index 00000000..0df02a9f --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0454-Revert-Revert-mm-alloc_contig-re-allow-CMA-to-compac.patch @@ -0,0 +1,26 @@ +From 91c64870bb6f940011e723f4a7d499f7d40a2923 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Fri, 14 Sep 2018 20:13:29 +0100 +Subject: [PATCH 454/496] Revert "Revert "mm: alloc_contig: re-allow CMA to + compact FS pages"" + +This reverts commit 00f0e834c44c492555e43fdaf9c112ed269db01f. +--- + mm/page_alloc.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/mm/page_alloc.c b/mm/page_alloc.c +index 023e12c6e5cb..9b31af7654d3 100644 +--- a/mm/page_alloc.c ++++ b/mm/page_alloc.c +@@ -7527,6 +7527,7 @@ int alloc_contig_range(unsigned long start, unsigned long end, + .zone = page_zone(pfn_to_page(start)), + .mode = MIGRATE_SYNC, + .ignore_skip_hint = true, ++ .gfp_mask = current_gfp_context(gfp_mask), + }; + INIT_LIST_HEAD(&cc.migratepages); + +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0458-Bluetooth-hci_ldisc-Free-rw_semaphore-on-close.patch b/root/target/linux/brcm2708/patches-4.14/0458-Bluetooth-hci_ldisc-Free-rw_semaphore-on-close.patch new file mode 100644 index 00000000..2c06bda0 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0458-Bluetooth-hci_ldisc-Free-rw_semaphore-on-close.patch @@ -0,0 +1,57 @@ +From f92b55d534dcf9e740352b9c6c98f01f38aaa5e8 Mon Sep 17 00:00:00 2001 +From: Hermes Zhang +Date: Tue, 28 Aug 2018 09:48:30 +0800 +Subject: [PATCH 458/496] Bluetooth: hci_ldisc: Free rw_semaphore on close + +commit e6a57d22f787e73635ce0d29eef0abb77928b3e9 upstream. + +The percpu_rw_semaphore is not currently freed, and this leads to +a crash when the stale rcu callback is invoked. DEBUG_OBJECTS +detects this. + + ODEBUG: free active (active state 1) object type: rcu_head hint: (null) + ------------[ cut here ]------------ + WARNING: CPU: 1 PID: 2024 at debug_print_object+0xac/0xc8 + PC is at debug_print_object+0xac/0xc8 + LR is at debug_print_object+0xac/0xc8 + Call trace: + [] debug_print_object+0xac/0xc8 + [] debug_check_no_obj_freed+0x1e8/0x228 + [] kfree+0x1cc/0x250 + [] hci_uart_tty_close+0x54/0x108 + [] tty_ldisc_close.isra.1+0x40/0x58 + [] tty_ldisc_kill+0x1c/0x40 + [] tty_ldisc_release+0x94/0x170 + [] tty_release_struct+0x1c/0x58 + [] tty_release+0x3b0/0x490 + [] __fput+0x88/0x1d0 + [] ____fput+0xc/0x18 + [] task_work_run+0x9c/0xc0 + [] do_exit+0x24c/0x8a0 + [] do_group_exit+0x38/0xa0 + [] __wake_up_parent+0x0/0x28 + [] el0_svc_naked+0x34/0x38 + ---[ end trace bfe08cbd89098cdf ]--- + +Signed-off-by: Hermes Zhang +Signed-off-by: Marcel Holtmann +--- + drivers/bluetooth/hci_ldisc.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c +index c823914b3a80..30bbe19b4b85 100644 +--- a/drivers/bluetooth/hci_ldisc.c ++++ b/drivers/bluetooth/hci_ldisc.c +@@ -539,6 +539,8 @@ static void hci_uart_tty_close(struct tty_struct *tty) + } + clear_bit(HCI_UART_PROTO_SET, &hu->flags); + ++ percpu_free_rwsem(&hu->proto_lock); ++ + kfree(hu); + } + +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0461-dwc_otg-fiq_fsm-fix-incorrect-DMA-register-offset-ca.patch b/root/target/linux/brcm2708/patches-4.14/0461-dwc_otg-fiq_fsm-fix-incorrect-DMA-register-offset-ca.patch new file mode 100644 index 00000000..cebecdf7 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0461-dwc_otg-fiq_fsm-fix-incorrect-DMA-register-offset-ca.patch @@ -0,0 +1,70 @@ +From 3b53ff15e81fa1ee7ae43a7e8a68e05768d4f9f9 Mon Sep 17 00:00:00 2001 +From: P33M +Date: Fri, 21 Sep 2018 14:05:09 +0100 +Subject: [PATCH 461/496] dwc_otg: fiq_fsm: fix incorrect DMA register offset + calculation + +Rationalise the offset and update all call sites. + +Fixes https://github.com/raspberrypi/linux/issues/2408 +--- + drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c | 8 ++++---- + drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h | 2 +- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c b/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c +index ca362db1602a..c44650f80adc 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c +@@ -250,7 +250,7 @@ static int notrace fiq_increment_dma_buf(struct fiq_state *st, int num_channels, + BUG(); + + hcdma.d32 = (dma_addr_t) &blob->channel[n].index[i].buf[0]; +- FIQ_WRITE(st->dwc_regs_base + HC_DMA + (HC_OFFSET * n), hcdma.d32); ++ FIQ_WRITE(st->dwc_regs_base + HC_START + (HC_OFFSET * n) + HC_DMA, hcdma.d32); + st->channel[n].dma_info.index = i; + return 0; + } +@@ -302,7 +302,7 @@ static int notrace fiq_iso_out_advance(struct fiq_state *st, int num_channels, i + + /* New DMA address - address of bounce buffer referred to in index */ + hcdma.d32 = (uint32_t) &blob->channel[n].index[i].buf[0]; +- //hcdma.d32 = FIQ_READ(st->dwc_regs_base + HC_DMA + (HC_OFFSET * n)); ++ //hcdma.d32 = FIQ_READ(st->dwc_regs_base + HC_START + (HC_OFFSET * n) + HC_DMA); + //hcdma.d32 += st->channel[n].dma_info.slot_len[i]; + fiq_print(FIQDBG_INT, st, "LAST: %01d ", last); + fiq_print(FIQDBG_INT, st, "LEN: %03d", st->channel[n].dma_info.slot_len[i]); +@@ -317,7 +317,7 @@ static int notrace fiq_iso_out_advance(struct fiq_state *st, int num_channels, i + st->channel[n].dma_info.index++; + FIQ_WRITE(st->dwc_regs_base + HC_START + (HC_OFFSET * n) + HCSPLT, hcsplt.d32); + FIQ_WRITE(st->dwc_regs_base + HC_START + (HC_OFFSET * n) + HCTSIZ, hctsiz.d32); +- FIQ_WRITE(st->dwc_regs_base + HC_DMA + (HC_OFFSET * n), hcdma.d32); ++ FIQ_WRITE(st->dwc_regs_base + HC_START + (HC_OFFSET * n) + HC_DMA, hcdma.d32); + return last; + } + +@@ -564,7 +564,7 @@ static int notrace noinline fiq_fsm_update_hs_isoc(struct fiq_state *state, int + + /* grab the next DMA address offset from the array */ + hcdma.d32 = st->hcdma_copy.d32 + st->hs_isoc_info.iso_desc[st->hs_isoc_info.index].offset; +- FIQ_WRITE(state->dwc_regs_base + HC_DMA + (HC_OFFSET * n), hcdma.d32); ++ FIQ_WRITE(state->dwc_regs_base + HC_START + (HC_OFFSET * n) + HC_DMA, hcdma.d32); + + /* We need to set multi_count. This is a bit tricky - has to be set per-transaction as + * the core needs to be told to send the correct number. Caution: for IN transfers, +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h b/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h +index ed088f34f210..06288ec08763 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h ++++ b/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h +@@ -94,7 +94,7 @@ do { \ + #define HC_START 0x500 + #define HC_OFFSET 0x020 + +-#define HC_DMA 0x514 ++#define HC_DMA 0x14 + + #define HCCHAR 0x00 + #define HCSPLT 0x04 +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0467-vchiq_2835_arm-Implement-a-DMA-pool-for-small-bulk-t.patch b/root/target/linux/brcm2708/patches-4.14/0467-vchiq_2835_arm-Implement-a-DMA-pool-for-small-bulk-t.patch new file mode 100644 index 00000000..b2a80a1c --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0467-vchiq_2835_arm-Implement-a-DMA-pool-for-small-bulk-t.patch @@ -0,0 +1,131 @@ +From e24b1f6c0c798508981c7c5f59a5d76ce6fe58e1 Mon Sep 17 00:00:00 2001 +From: detule +Date: Tue, 2 Oct 2018 04:10:08 -0400 +Subject: [PATCH 467/496] vchiq_2835_arm: Implement a DMA pool for small bulk + transfers (#2699) + +During a bulk transfer we request a DMA allocation to hold the +scatter-gather list. Most of the time, this allocation is small +(<< PAGE_SIZE), however it can be requested at a high enough frequency +to cause fragmentation and/or stress the CMA allocator (think time +spent in compaction here, or during allocations elsewhere). + +Implement a pool to serve up small DMA allocations, falling back +to a coherent allocation if the request is greater than +VCHIQ_DMA_POOL_SIZE. + +Signed-off-by: Oliver Gjoneski +--- + .../interface/vchiq_arm/vchiq_2835_arm.c | 40 +++++++++++++++---- + 1 file changed, 33 insertions(+), 7 deletions(-) + +diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c +index be08849175ea..59e21d2277de 100644 +--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c ++++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -59,6 +60,8 @@ + #define BELL0 0x00 + #define BELL2 0x08 + ++#define VCHIQ_DMA_POOL_SIZE PAGE_SIZE ++ + typedef struct vchiq_2835_state_struct { + int inited; + VCHIQ_ARM_STATE_T arm_state; +@@ -68,6 +71,7 @@ struct vchiq_pagelist_info { + PAGELIST_T *pagelist; + size_t pagelist_buffer_size; + dma_addr_t dma_addr; ++ bool is_from_pool; + enum dma_data_direction dma_dir; + unsigned int num_pages; + unsigned int pages_need_release; +@@ -78,6 +82,7 @@ struct vchiq_pagelist_info { + + static void __iomem *g_regs; + static unsigned int g_cache_line_size = sizeof(CACHE_LINE_SIZE); ++static struct dma_pool *g_dma_pool; + static unsigned int g_fragments_size; + static char *g_fragments_base; + static char *g_free_fragments; +@@ -193,6 +198,14 @@ int vchiq_platform_init(struct platform_device *pdev, VCHIQ_STATE_T *state) + } + + g_dev = dev; ++ g_dma_pool = dmam_pool_create("vchiq_scatter_pool", dev, ++ VCHIQ_DMA_POOL_SIZE, g_cache_line_size, ++ 0); ++ if (!g_dma_pool) { ++ dev_err(dev, "failed to create dma pool"); ++ return -ENOMEM; ++ } ++ + vchiq_log_info(vchiq_arm_log_level, + "vchiq_init - done (slots %pK, phys %pad)", + vchiq_slot_zero, &slot_phys); +@@ -377,9 +390,14 @@ cleanup_pagelistinfo(struct vchiq_pagelist_info *pagelistinfo) + for (i = 0; i < pagelistinfo->num_pages; i++) + put_page(pagelistinfo->pages[i]); + } +- +- dma_free_coherent(g_dev, pagelistinfo->pagelist_buffer_size, +- pagelistinfo->pagelist, pagelistinfo->dma_addr); ++ if (pagelistinfo->is_from_pool) { ++ dma_pool_free(g_dma_pool, pagelistinfo->pagelist, ++ pagelistinfo->dma_addr); ++ } else { ++ dma_free_coherent(g_dev, pagelistinfo->pagelist_buffer_size, ++ pagelistinfo->pagelist, ++ pagelistinfo->dma_addr); ++ } + } + + /* There is a potential problem with partial cache lines (pages?) +@@ -400,6 +418,7 @@ create_pagelist(char __user *buf, size_t count, unsigned short type, + u32 *addrs; + unsigned int num_pages, offset, i, k; + int actual_pages; ++ bool is_from_pool; + size_t pagelist_size; + struct scatterlist *scatterlist, *sg; + int dma_buffers; +@@ -417,10 +436,16 @@ create_pagelist(char __user *buf, size_t count, unsigned short type, + /* Allocate enough storage to hold the page pointers and the page + ** list + */ +- pagelist = dma_zalloc_coherent(g_dev, +- pagelist_size, +- &dma_addr, +- GFP_KERNEL); ++ if (pagelist_size > VCHIQ_DMA_POOL_SIZE) { ++ pagelist = dma_zalloc_coherent(g_dev, ++ pagelist_size, ++ &dma_addr, ++ GFP_KERNEL); ++ is_from_pool = false; ++ } else { ++ pagelist = dma_pool_zalloc(g_dma_pool, GFP_KERNEL, &dma_addr); ++ is_from_pool = true; ++ } + + vchiq_log_trace(vchiq_arm_log_level, "create_pagelist - %pK", + pagelist); +@@ -441,6 +466,7 @@ create_pagelist(char __user *buf, size_t count, unsigned short type, + pagelistinfo->pagelist = pagelist; + pagelistinfo->pagelist_buffer_size = pagelist_size; + pagelistinfo->dma_addr = dma_addr; ++ pagelistinfo->is_from_pool = is_from_pool; + pagelistinfo->dma_dir = (type == PAGELIST_WRITE) ? + DMA_TO_DEVICE : DMA_FROM_DEVICE; + pagelistinfo->num_pages = num_pages; +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0469-drivers-thermal-step_wise-add-support-for-hysteresis.patch b/root/target/linux/brcm2708/patches-4.14/0469-drivers-thermal-step_wise-add-support-for-hysteresis.patch new file mode 100644 index 00000000..0d486a95 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0469-drivers-thermal-step_wise-add-support-for-hysteresis.patch @@ -0,0 +1,101 @@ +From 3e4671e3c51a0ba0e107c0b6d118148dd0ed12da Mon Sep 17 00:00:00 2001 +From: Ram Chandrasekar +Date: Mon, 7 May 2018 11:54:08 -0600 +Subject: [PATCH 469/496] drivers: thermal: step_wise: add support for + hysteresis + +From: Ram Chandrasekar + +Step wise governor increases the mitigation level when the temperature +goes above a threshold and will decrease the mitigation when the +temperature falls below the threshold. If it were a case, where the +temperature hovers around a threshold, the mitigation will be applied +and removed at every iteration. This reaction to the temperature is +inefficient for performance. + +The use of hysteresis temperature could avoid this ping-pong of +mitigation by relaxing the mitigation to happen only when the +temperature goes below this lower hysteresis value. + +Signed-off-by: Ram Chandrasekar +Signed-off-by: Lina Iyer +--- + drivers/thermal/step_wise.c | 33 +++++++++++++++++++++++---------- + 1 file changed, 23 insertions(+), 10 deletions(-) + +diff --git a/drivers/thermal/step_wise.c b/drivers/thermal/step_wise.c +index ee047ca43084..cf07e2269291 100644 +--- a/drivers/thermal/step_wise.c ++++ b/drivers/thermal/step_wise.c +@@ -36,7 +36,7 @@ + * for this trip point + * d. if the trend is THERMAL_TREND_DROP_FULL, use lower limit + * for this trip point +- * If the temperature is lower than a trip point, ++ * If the temperature is lower than a hysteresis temperature, + * a. if the trend is THERMAL_TREND_RAISING, do nothing + * b. if the trend is THERMAL_TREND_DROPPING, use lower cooling + * state for this trip point, if the cooling state already +@@ -127,7 +127,7 @@ static void update_passive_instance(struct thermal_zone_device *tz, + + static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip) + { +- int trip_temp; ++ int trip_temp, hyst_temp; + enum thermal_trip_type trip_type; + enum thermal_trend trend; + struct thermal_instance *instance; +@@ -135,22 +135,23 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip) + int old_target; + + if (trip == THERMAL_TRIPS_NONE) { +- trip_temp = tz->forced_passive; ++ hyst_temp = trip_temp = tz->forced_passive; + trip_type = THERMAL_TRIPS_NONE; + } else { + tz->ops->get_trip_temp(tz, trip, &trip_temp); ++ hyst_temp = trip_temp; ++ if (tz->ops->get_trip_hyst) { ++ tz->ops->get_trip_hyst(tz, trip, &hyst_temp); ++ hyst_temp = trip_temp - hyst_temp; ++ } + tz->ops->get_trip_type(tz, trip, &trip_type); + } + + trend = get_tz_trend(tz, trip); + +- if (tz->temperature >= trip_temp) { +- throttle = true; +- trace_thermal_zone_trip(tz, trip, trip_type); +- } +- +- dev_dbg(&tz->device, "Trip%d[type=%d,temp=%d]:trend=%d,throttle=%d\n", +- trip, trip_type, trip_temp, trend, throttle); ++ dev_dbg(&tz->device, ++ "Trip%d[type=%d,temp=%d,hyst=%d]:trend=%d,throttle=%d\n", ++ trip, trip_type, trip_temp, hyst_temp, trend, throttle); + + mutex_lock(&tz->lock); + +@@ -159,6 +160,18 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip) + continue; + + old_target = instance->target; ++ throttle = false; ++ /* ++ * Lower the mitigation only if the temperature ++ * goes below the hysteresis temperature. ++ */ ++ if (tz->temperature >= trip_temp || ++ (tz->temperature >= hyst_temp && ++ old_target != THERMAL_NO_TARGET)) { ++ throttle = true; ++ trace_thermal_zone_trip(tz, trip, trip_type); ++ } ++ + instance->target = get_target_state(instance, trend, throttle); + dev_dbg(&instance->cdev->device, "old_target=%d, target=%d\n", + old_target, (int)instance->target); +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0470-drivers-thermal-step_wise-avoid-throttling-at-hyster.patch b/root/target/linux/brcm2708/patches-4.14/0470-drivers-thermal-step_wise-avoid-throttling-at-hyster.patch new file mode 100644 index 00000000..f3aa49e7 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0470-drivers-thermal-step_wise-avoid-throttling-at-hyster.patch @@ -0,0 +1,27 @@ +From d30f9834bfc33d6886bab67a3caad9e0e3edae77 Mon Sep 17 00:00:00 2001 +From: Serge Schneider +Date: Tue, 2 Oct 2018 11:14:15 +0100 +Subject: [PATCH 470/496] drivers: thermal: step_wise: avoid throttling at + hysteresis temperature after dropping below it + +Signed-off-by: Serge Schneider +--- + drivers/thermal/step_wise.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/thermal/step_wise.c b/drivers/thermal/step_wise.c +index cf07e2269291..da695d8f2939 100644 +--- a/drivers/thermal/step_wise.c ++++ b/drivers/thermal/step_wise.c +@@ -167,7 +167,7 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip) + */ + if (tz->temperature >= trip_temp || + (tz->temperature >= hyst_temp && +- old_target != THERMAL_NO_TARGET)) { ++ old_target == instance->upper)) { + throttle = true; + trace_thermal_zone_trip(tz, trip, trip_type); + } +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0473-overlays-Add-gpio-no-bank0-irq-overlay.patch b/root/target/linux/brcm2708/patches-4.14/0473-overlays-Add-gpio-no-bank0-irq-overlay.patch new file mode 100644 index 00000000..53a686dc --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0473-overlays-Add-gpio-no-bank0-irq-overlay.patch @@ -0,0 +1,70 @@ +From 6d27aa156c26977dfd079a7107e31670127d17d3 Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Wed, 18 Jul 2018 17:25:00 +0100 +Subject: [PATCH 473/496] overlays: Add gpio-no-bank0-irq overlay + +See: https://github.com/raspberrypi/linux/issues/2590 + +Signed-off-by: Phil Elwell +--- + arch/arm/boot/dts/overlays/Makefile | 1 + + arch/arm/boot/dts/overlays/README | 9 +++++++++ + .../dts/overlays/gpio-no-bank0-irq-overlay.dts | 14 ++++++++++++++ + 3 files changed, 24 insertions(+) + create mode 100755 arch/arm/boot/dts/overlays/gpio-no-bank0-irq-overlay.dts + +diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile +index 7cdd0195e7eb..abe86d184488 100644 +--- a/arch/arm/boot/dts/overlays/Makefile ++++ b/arch/arm/boot/dts/overlays/Makefile +@@ -39,6 +39,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ + gpio-ir.dtbo \ + gpio-ir-tx.dtbo \ + gpio-key.dtbo \ ++ gpio-no-bank0-irq.dtbo \ + gpio-no-irq.dtbo \ + gpio-poweroff.dtbo \ + gpio-shutdown.dtbo \ +diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README +index 2c2b5ab76835..41e5028269e7 100644 +--- a/arch/arm/boot/dts/overlays/README ++++ b/arch/arm/boot/dts/overlays/README +@@ -619,6 +619,15 @@ Params: gpio GPIO pin to trigger on (default 3) + keycode Set the key code for the button + + ++Name: gpio-no-bank0-irq ++Info: Use this overlay to disable GPIO interrupts for GPIOs in bank 0 (0-27), ++ which can be useful for UIO drivers. ++ N.B. Using this overlay will trigger a kernel WARN during booting, but ++ this can safely be ignored - the system should work as expected. ++Load: dtoverlay=gpio-no-bank0-irq ++Params: ++ ++ + Name: gpio-no-irq + Info: Use this overlay to disable all GPIO interrupts, which can be useful + for user-space GPIO edge detection systems. +diff --git a/arch/arm/boot/dts/overlays/gpio-no-bank0-irq-overlay.dts b/arch/arm/boot/dts/overlays/gpio-no-bank0-irq-overlay.dts +new file mode 100755 +index 000000000000..96cbe80820b7 +--- /dev/null ++++ b/arch/arm/boot/dts/overlays/gpio-no-bank0-irq-overlay.dts +@@ -0,0 +1,14 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "brcm,bcm2835"; ++ ++ fragment@0 { ++ // Configure the gpio pin controller ++ target = <&gpio>; ++ __overlay__ { ++ interrupts = <255 255>, <2 18>; ++ }; ++ }; ++}; +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0477-mmc-bcm2835-sdhost-Recover-from-MMC_SEND_EXT_CSD.patch b/root/target/linux/brcm2708/patches-4.14/0477-mmc-bcm2835-sdhost-Recover-from-MMC_SEND_EXT_CSD.patch new file mode 100644 index 00000000..37bf6bfa --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0477-mmc-bcm2835-sdhost-Recover-from-MMC_SEND_EXT_CSD.patch @@ -0,0 +1,55 @@ +From eb5381fdbcdecacdc30636e1633e146da2f5fcb9 Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Fri, 26 Oct 2018 17:29:51 +0100 +Subject: [PATCH 477/496] mmc/bcm2835-sdhost: Recover from MMC_SEND_EXT_CSD + +If the user issues an "mmc extcsd read", the SD controller receives +what it thinks is a SEND_IF_COND command with an unexpected data block. +The resulting operations leave the FSM stuck in READWAIT, a state which +persists until the MMC framework resets the controller, by which point +the root filesystem is likely to have been unmounted. + +A less heavyweight solution is to detect the condition and nudge the +FSM by asserting the (self-clearing) FORCE_DATA_MODE bit. + +N.B. This workaround was essentially discovered by accident and without +a full understanding the inner workings of the controller, so it is +fortunate that the "fix" only modifies error paths. + +See: https://github.com/raspberrypi/linux/issues/2728 + +Signed-off-by: Phil Elwell +--- + drivers/mmc/host/bcm2835-sdhost.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/drivers/mmc/host/bcm2835-sdhost.c b/drivers/mmc/host/bcm2835-sdhost.c +index 273b1be058c5..c8a673e81ab7 100644 +--- a/drivers/mmc/host/bcm2835-sdhost.c ++++ b/drivers/mmc/host/bcm2835-sdhost.c +@@ -1244,6 +1244,8 @@ static void bcm2835_sdhost_finish_command(struct bcm2835_host *host, + pr_info("%s: ignoring CRC7 error for CMD1\n", + mmc_hostname(host->mmc)); + } else { ++ u32 edm, fsm; ++ + if (sdhsts & SDHSTS_CMD_TIME_OUT) { + if (host->debug) + pr_warn("%s: command %d timeout\n", +@@ -1256,6 +1258,13 @@ static void bcm2835_sdhost_finish_command(struct bcm2835_host *host, + host->cmd->opcode); + host->cmd->error = -EILSEQ; + } ++ ++ edm = readl(host->ioaddr + SDEDM); ++ fsm = edm & SDEDM_FSM_MASK; ++ if (fsm == SDEDM_FSM_READWAIT || ++ fsm == SDEDM_FSM_WRITESTART1) ++ writel(edm | SDEDM_FORCE_DATA_MODE, ++ host->ioaddr + SDEDM); + tasklet_schedule(&host->finish_tasklet); + return; + } +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0478-mmc-bcm2835-Recover-from-MMC_SEND_EXT_CSD.patch b/root/target/linux/brcm2708/patches-4.14/0478-mmc-bcm2835-Recover-from-MMC_SEND_EXT_CSD.patch new file mode 100644 index 00000000..7ff5559f --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0478-mmc-bcm2835-Recover-from-MMC_SEND_EXT_CSD.patch @@ -0,0 +1,55 @@ +From 37646b2e2fb9ca34203a5478c2b813e4cd323115 Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Fri, 26 Oct 2018 17:40:44 +0100 +Subject: [PATCH 478/496] mmc/bcm2835: Recover from MMC_SEND_EXT_CSD + +If the user issues an "mmc extcsd read", the SD controller receives +what it thinks is a SEND_IF_COND command with an unexpected data block. +The resulting operations leave the FSM stuck in READWAIT, a state which +persists until the MMC framework resets the controller, by which point +the root filesystem is likely to have been unmounted. + +A less heavyweight solution is to detect the condition and nudge the +FSM by asserting the (self-clearing) FORCE_DATA_MODE bit. + +N.B. This workaround was essentially discovered by accident and without +a full understanding the inner workings of the controller, so it is +fortunate that the "fix" only modifies error paths. + +See: https://github.com/raspberrypi/linux/issues/2728 + +Signed-off-by: Phil Elwell +--- + drivers/mmc/host/bcm2835.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/drivers/mmc/host/bcm2835.c b/drivers/mmc/host/bcm2835.c +index 768972af8b85..aef40e1739ee 100644 +--- a/drivers/mmc/host/bcm2835.c ++++ b/drivers/mmc/host/bcm2835.c +@@ -772,6 +772,8 @@ static void bcm2835_finish_command(struct bcm2835_host *host) + + if (!(sdhsts & SDHSTS_CRC7_ERROR) || + (host->cmd->opcode != MMC_SEND_OP_COND)) { ++ u32 edm, fsm; ++ + if (sdhsts & SDHSTS_CMD_TIME_OUT) { + host->cmd->error = -ETIMEDOUT; + } else { +@@ -780,6 +782,13 @@ static void bcm2835_finish_command(struct bcm2835_host *host) + bcm2835_dumpregs(host); + host->cmd->error = -EILSEQ; + } ++ edm = readl(host->ioaddr + SDEDM); ++ fsm = edm & SDEDM_FSM_MASK; ++ if (fsm == SDEDM_FSM_READWAIT || ++ fsm == SDEDM_FSM_WRITESTART1) ++ /* Kick the FSM out of its wait */ ++ writel(edm | SDEDM_FORCE_DATA_MODE, ++ host->ioaddr + SDEDM); + bcm2835_finish_request(host); + return; + } +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0480-Revert-rtc-pcf8523-properly-handle-oscillator-stop-b.patch b/root/target/linux/brcm2708/patches-4.14/0480-Revert-rtc-pcf8523-properly-handle-oscillator-stop-b.patch new file mode 100644 index 00000000..ff4ae7e5 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0480-Revert-rtc-pcf8523-properly-handle-oscillator-stop-b.patch @@ -0,0 +1,61 @@ +From 8ec2a2d27dd3e3e32113445592f44ea974b21732 Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Mon, 29 Oct 2018 14:45:45 +0000 +Subject: [PATCH 480/496] Revert "rtc: pcf8523: properly handle oscillator stop + bit" + +This reverts commit ede44c908d44b166a5b6bd7caacd105c2ff5a70f. + +See: https://github.com/raspberrypi/firmware/issues/1065 + +Signed-off-by: Phil Elwell +--- + drivers/rtc/rtc-pcf8523.c | 25 ++++++++++++++++++++++--- + 1 file changed, 22 insertions(+), 3 deletions(-) + +diff --git a/drivers/rtc/rtc-pcf8523.c b/drivers/rtc/rtc-pcf8523.c +index 28c48b3c1946..988566caaaa6 100644 +--- a/drivers/rtc/rtc-pcf8523.c ++++ b/drivers/rtc/rtc-pcf8523.c +@@ -178,8 +178,28 @@ static int pcf8523_rtc_read_time(struct device *dev, struct rtc_time *tm) + if (err < 0) + return err; + +- if (regs[0] & REG_SECONDS_OS) +- return -EINVAL; ++ if (regs[0] & REG_SECONDS_OS) { ++ /* ++ * If the oscillator was stopped, try to clear the flag. Upon ++ * power-up the flag is always set, but if we cannot clear it ++ * the oscillator isn't running properly for some reason. The ++ * sensible thing therefore is to return an error, signalling ++ * that the clock cannot be assumed to be correct. ++ */ ++ ++ regs[0] &= ~REG_SECONDS_OS; ++ ++ err = pcf8523_write(client, REG_SECONDS, regs[0]); ++ if (err < 0) ++ return err; ++ ++ err = pcf8523_read(client, REG_SECONDS, ®s[0]); ++ if (err < 0) ++ return err; ++ ++ if (regs[0] & REG_SECONDS_OS) ++ return -EAGAIN; ++ } + + tm->tm_sec = bcd2bin(regs[0] & 0x7f); + tm->tm_min = bcd2bin(regs[1] & 0x7f); +@@ -215,7 +235,6 @@ static int pcf8523_rtc_set_time(struct device *dev, struct rtc_time *tm) + return err; + + regs[0] = REG_SECONDS; +- /* This will purposely overwrite REG_SECONDS_OS */ + regs[1] = bin2bcd(tm->tm_sec); + regs[2] = bin2bcd(tm->tm_min); + regs[3] = bin2bcd(tm->tm_hour); +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0483-sc16is7xx-Don-t-spin-if-no-data-received.patch b/root/target/linux/brcm2708/patches-4.14/0483-sc16is7xx-Don-t-spin-if-no-data-received.patch new file mode 100644 index 00000000..dce4499a --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0483-sc16is7xx-Don-t-spin-if-no-data-received.patch @@ -0,0 +1,28 @@ +From 9ca74c53cbda1f104bce3b33850fd3bf33eb3793 Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Tue, 6 Nov 2018 12:57:48 +0000 +Subject: [PATCH 483/496] sc16is7xx: Don't spin if no data received + +See: https://github.com/raspberrypi/linux/issues/2676 + +Signed-off-by: Phil Elwell +--- + drivers/tty/serial/sc16is7xx.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c +index 97fcacc00003..444d354d12d6 100644 +--- a/drivers/tty/serial/sc16is7xx.c ++++ b/drivers/tty/serial/sc16is7xx.c +@@ -701,6 +701,8 @@ static bool sc16is7xx_port_irq(struct sc16is7xx_port *s, int portno) + rxlen = sc16is7xx_port_read(port, SC16IS7XX_RXLVL_REG); + if (rxlen) + sc16is7xx_handle_rx(port, rxlen, iir); ++ else ++ return false; + break; + case SC16IS7XX_IIR_THRI_SRC: + sc16is7xx_handle_tx(port); +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0485-staging-vchiq_arm-fix-compat-VCHIQ_IOC_AWAIT_COMPLET.patch b/root/target/linux/brcm2708/patches-4.14/0485-staging-vchiq_arm-fix-compat-VCHIQ_IOC_AWAIT_COMPLET.patch new file mode 100644 index 00000000..7e0d2f93 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0485-staging-vchiq_arm-fix-compat-VCHIQ_IOC_AWAIT_COMPLET.patch @@ -0,0 +1,63 @@ +From d1394b5739ff97a6e504be4755ce023e422a6d39 Mon Sep 17 00:00:00 2001 +From: Ben Wolsieffer +Date: Tue, 13 Nov 2018 08:30:17 -0500 +Subject: [PATCH 485/496] staging: vchiq_arm: fix compat + VCHIQ_IOC_AWAIT_COMPLETION (#2703) + +The compatibility ioctl wrapper for VCHIQ_IOC_AWAIT_COMPLETION assumes that +the native ioctl always uses a message buffer and decrements msgbufcount. +Certain message types do not use a message buffer and in this case +msgbufcount is not decremented, and completion->header for the message is +NULL. Because the wrapper unconditionally decrements msgbufcount, the +calling process may assume that a message buffer has been used even when +it has not. + +This results in a memory leak in the userspace code that interfaces with +this driver. When msgbufcount is decremented, the userspace code assumes +that the buffer can be freed though the reference in completion->header, +which cannot happen when the reference is NULL. + +This patch causes the wrapper to only decrement msgbufcount when the +native ioctl decrements it. Note that we cannot simply copy the native +ioctl's value of msgbufcount, because the wrapper only retrieves messages +from the native ioctl one at a time, while userspace may request multiple +messages. + +See https://github.com/raspberrypi/linux/pull/2703 for more discussion of +this patch. + +Fixes: 5569a12 ("staging: vchiq_arm: Add compatibility wrappers for ioctls") + +Signed-off-by: Ben Wolsieffer +--- + .../staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +index d67987fbf25e..8ff0e7e860f3 100644 +--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c ++++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +@@ -1461,6 +1461,7 @@ vchiq_compat_ioctl_await_completion(struct file *file, + struct vchiq_await_completion32 args32; + struct vchiq_completion_data32 completion32; + unsigned int *msgbufcount32; ++ unsigned int msgbufcount_native; + compat_uptr_t msgbuf32; + void *msgbuf; + void **msgbufptr; +@@ -1572,7 +1573,11 @@ vchiq_compat_ioctl_await_completion(struct file *file, + sizeof(completion32))) + return -EFAULT; + +- args32.msgbufcount--; ++ if (get_user(msgbufcount_native, &args->msgbufcount)) ++ return -EFAULT; ++ ++ if (!msgbufcount_native) ++ args32.msgbufcount--; + + msgbufcount32 = + &((struct vchiq_await_completion32 __user *)arg)->msgbufcount; +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0488-vcsm-Fix-an-NULL-dereference-in-the-import_dmabuf-er.patch b/root/target/linux/brcm2708/patches-4.14/0488-vcsm-Fix-an-NULL-dereference-in-the-import_dmabuf-er.patch new file mode 100644 index 00000000..443359a5 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0488-vcsm-Fix-an-NULL-dereference-in-the-import_dmabuf-er.patch @@ -0,0 +1,30 @@ +From aed74fc13420b8c4ab6bd0c6f03544655b3acb4f Mon Sep 17 00:00:00 2001 +From: Dave Stevenson +Date: Wed, 14 Nov 2018 11:54:46 +0000 +Subject: [PATCH 488/496] vcsm: Fix an NULL dereference in the import_dmabuf + error path + +resource was dereferenced even though it was NULL. + +Signed-off-by: Dave Stevenson +--- + drivers/char/broadcom/vc_sm/vmcs_sm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/char/broadcom/vc_sm/vmcs_sm.c b/drivers/char/broadcom/vc_sm/vmcs_sm.c +index 1bc37ee88225..56a21658b538 100644 +--- a/drivers/char/broadcom/vc_sm/vmcs_sm.c ++++ b/drivers/char/broadcom/vc_sm/vmcs_sm.c +@@ -2315,8 +2315,8 @@ int vc_sm_ioctl_import_dmabuf(struct sm_priv_data_t *private, + return 0; + + error: +- resource->res_stats[IMPORT_FAIL]++; + if (resource) { ++ resource->res_stats[IMPORT_FAIL]++; + vc_sm_resource_deceased(resource, 1); + kfree(resource); + } +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0489-net-lan78xx-Support-auto-downshift-to-100Mb-s.patch b/root/target/linux/brcm2708/patches-4.14/0489-net-lan78xx-Support-auto-downshift-to-100Mb-s.patch new file mode 100644 index 00000000..a5e8850a --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0489-net-lan78xx-Support-auto-downshift-to-100Mb-s.patch @@ -0,0 +1,135 @@ +From df22a8f70b97cd92dfd791082e580ede7e30237a Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Mon, 26 Nov 2018 19:46:58 +0000 +Subject: [PATCH 489/496] net: lan78xx: Support auto-downshift to 100Mb/s + +Ethernet cables with faulty or missing pairs (specifically pairs C and +D) allow auto-negotiation to 1000Mbs, but do not support the successful +establishment of a link. Add a DT property, "microchip,downshift-after", +to configure the number of auto-negotiation failures after which it +falls back to 100Mbs. Valid values are 2, 3, 4, 5 and 0, where 0 means +never downshift. + +Signed-off-by: Phil Elwell +--- + drivers/net/phy/microchip.c | 33 +++++++++++++++++++++++++++++++++ + drivers/net/usb/lan78xx.c | 8 ++++++-- + include/linux/microchipphy.h | 11 +++++++++++ + 3 files changed, 50 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/phy/microchip.c b/drivers/net/phy/microchip.c +index 5418c662b08c..5773701cd1bc 100644 +--- a/drivers/net/phy/microchip.c ++++ b/drivers/net/phy/microchip.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + + #define DRIVER_AUTHOR "WOOJUNG HUH " + #define DRIVER_DESC "Microchip LAN88XX PHY driver" +@@ -225,6 +226,7 @@ static int lan88xx_probe(struct phy_device *phydev) + { + struct device *dev = &phydev->mdio.dev; + struct lan88xx_priv *priv; ++ u32 downshift_after = 0; + + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) +@@ -232,6 +234,37 @@ static int lan88xx_probe(struct phy_device *phydev) + + priv->wolopts = 0; + ++ if (!of_property_read_u32(dev->of_node, ++ "microchip,downshift-after", ++ &downshift_after)) { ++ u32 mask = LAN78XX_PHY_CTRL3_DOWNSHIFT_CTRL_MASK; ++ u32 val = LAN78XX_PHY_CTRL3_AUTO_DOWNSHIFT; ++ ++ switch (downshift_after) { ++ case 2: ++ val |= LAN78XX_PHY_CTRL3_DOWNSHIFT_CTRL_2; ++ break; ++ case 3: ++ val |= LAN78XX_PHY_CTRL3_DOWNSHIFT_CTRL_3; ++ break; ++ case 4: ++ val |= LAN78XX_PHY_CTRL3_DOWNSHIFT_CTRL_4; ++ break; ++ case 5: ++ val |= LAN78XX_PHY_CTRL3_DOWNSHIFT_CTRL_5; ++ break; ++ case 0: ++ /* Disable completely */ ++ mask = LAN78XX_PHY_CTRL3_AUTO_DOWNSHIFT; ++ val = 0; ++ break; ++ default: ++ return -EINVAL; ++ } ++ (void)phy_modify_paged(phydev, 1, LAN78XX_PHY_CTRL3, ++ mask, val); ++ } ++ + /* these values can be used to identify internal PHY */ + priv->chip_id = phy_read_mmd(phydev, 3, LAN88XX_MMD3_CHIP_ID); + priv->chip_rev = phy_read_mmd(phydev, 3, LAN88XX_MMD3_CHIP_REV); +diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c +index 1f9c5164159a..dd51b2f7376c 100644 +--- a/drivers/net/usb/lan78xx.c ++++ b/drivers/net/usb/lan78xx.c +@@ -36,7 +36,8 @@ + #include + #include + #include +-#include ++#include ++#include + #include + #include "lan78xx.h" + +@@ -1776,6 +1777,7 @@ static int lan78xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx, + + static int lan78xx_mdio_init(struct lan78xx_net *dev) + { ++ struct device_node *node; + int ret; + + dev->mdiobus = mdiobus_alloc(); +@@ -1804,7 +1806,9 @@ static int lan78xx_mdio_init(struct lan78xx_net *dev) + break; + } + +- ret = mdiobus_register(dev->mdiobus); ++ node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); ++ ret = of_mdiobus_register(dev->mdiobus, node); ++ of_node_put(node); + if (ret) { + netdev_err(dev->net, "can't register MDIO bus\n"); + goto exit1; +diff --git a/include/linux/microchipphy.h b/include/linux/microchipphy.h +index 8f9c90379732..004e1cd55c2f 100644 +--- a/include/linux/microchipphy.h ++++ b/include/linux/microchipphy.h +@@ -70,6 +70,17 @@ + #define LAN88XX_MMD3_CHIP_ID (32877) + #define LAN88XX_MMD3_CHIP_REV (32878) + ++/* Registers specific to the LAN7800/LAN7850 embedded phy */ ++#define LAN78XX_PHY_LED_MODE_SELECT (0x1D) ++ ++#define LAN78XX_PHY_CTRL3 (0x14) ++#define LAN78XX_PHY_CTRL3_AUTO_DOWNSHIFT (0x0010) ++#define LAN78XX_PHY_CTRL3_DOWNSHIFT_CTRL_MASK (0x000c) ++#define LAN78XX_PHY_CTRL3_DOWNSHIFT_CTRL_2 (0x0000) ++#define LAN78XX_PHY_CTRL3_DOWNSHIFT_CTRL_3 (0x0004) ++#define LAN78XX_PHY_CTRL3_DOWNSHIFT_CTRL_4 (0x0008) ++#define LAN78XX_PHY_CTRL3_DOWNSHIFT_CTRL_5 (0x000c) ++ + /* DSP registers */ + #define PHY_ARDENNES_MMD_DEV_3_PHY_CFG (0x806A) + #define PHY_ARDENNES_MMD_DEV_3_PHY_CFG_ZD_DLY_EN_ (0x2000) +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0490-ARM-dts-bcm283x-Set-downshift-after-for-Pi-3B.patch b/root/target/linux/brcm2708/patches-4.14/0490-ARM-dts-bcm283x-Set-downshift-after-for-Pi-3B.patch new file mode 100644 index 00000000..1bebe5d7 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0490-ARM-dts-bcm283x-Set-downshift-after-for-Pi-3B.patch @@ -0,0 +1,37 @@ +From 45a0cd7d2d66d9954e13636437ca3cdc5f73b882 Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Tue, 27 Nov 2018 16:55:14 +0000 +Subject: [PATCH 490/496] ARM: dts: bcm283x: Set downshift-after for Pi 3B+ + +Enable the auto-downshift feature on Raspberry Pi 3B+ so that a link +can eventually be established using a cable with pairs C and/or D +missing or broken in a 1000Mbps-capable port. + +Signed-off-by: Phil Elwell +--- + arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi b/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi +index 154d48b7c45d..d1fdeb44a625 100644 +--- a/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi ++++ b/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi +@@ -27,6 +27,15 @@ + * led1 = 6:link10/100/activity + */ + microchip,led-modes = <1 6>; ++ ++ mdio { ++ #address-cells = <0x1>; ++ #size-cells = <0x0>; ++ eth_phy: ethernet-phy@1 { ++ reg = <1>; ++ microchip,downshift-after = <2>; ++ }; ++ }; + }; + }; + }; +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0491-BCM270X_DT-Add-new-Ethernet-DT-parameters.patch b/root/target/linux/brcm2708/patches-4.14/0491-BCM270X_DT-Add-new-Ethernet-DT-parameters.patch new file mode 100644 index 00000000..fedfd9f7 --- /dev/null +++ b/root/target/linux/brcm2708/patches-4.14/0491-BCM270X_DT-Add-new-Ethernet-DT-parameters.patch @@ -0,0 +1,62 @@ +From 12010ae212267f4b95496bfcfcb9f6230d4654eb Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Tue, 27 Nov 2018 16:56:50 +0000 +Subject: [PATCH 491/496] BCM270X_DT: Add new Ethernet DT parameters + +Add "eth_downshift_after" DT parameter to allow the delay before the +downshift to be specified. The default is 2 auto-negotiation cycles, +and legal values are 2, 3, 4, 5 and 0 (disabled). + +Add "eth_max_speed" DT parameter as a way of prohibiting 1000Mbps +links. This can be used to avoid the delay until the downshift mechanism +activates. Legal values are 10, 100 and 1000, where the default is +unlimited (effectively 1000Mbps). + +Signed-off-by: Phil Elwell +--- + arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi | 2 ++ + arch/arm/boot/dts/overlays/README | 9 +++++++++ + 2 files changed, 11 insertions(+) + +diff --git a/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi b/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi +index d1fdeb44a625..9ae96c02bbb1 100644 +--- a/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi ++++ b/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi +@@ -48,5 +48,7 @@ + tx_lpi_timer = <ðernet>,"microchip,tx-lpi-timer:0"; + eth_led0 = <ðernet>,"microchip,led-modes:0"; + eth_led1 = <ðernet>,"microchip,led-modes:4"; ++ eth_downshift_after = <ð_phy>,"microchip,downshift-after:0"; ++ eth_max_speed = <ð_phy>,"max-speed:0"; + }; + }; +diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README +index 4ac8c2d6c4b7..91f5bfa2dbd1 100644 +--- a/arch/arm/boot/dts/overlays/README ++++ b/arch/arm/boot/dts/overlays/README +@@ -98,6 +98,11 @@ Params: + compatible devices (default "on"). See also + "tx_lpi_timer". + ++ eth_downshift_after Set the number of auto-negotiation failures ++ after which the 1000Mbps modes are disabled. ++ Legal values are 2, 3, 4, 5 and 0, where ++ 0 means never downshift (default 2). ++ + eth_led0 Set mode of LED0 (usually orange) (default + "1"). The legal values are: + 0=link/activity 1=link1000/activity +@@ -108,6 +113,10 @@ Params: + eth_led1 Set mode of LED1 (usually green) (default + "6"). See eth_led0 for legal values. + ++ eth_max_speed Set the maximum speed a link is allowed ++ to negotiate. Legal values are 10, 100 and ++ 1000 (default 1000). ++ + i2c_arm Set to "on" to enable the ARM's i2c interface + (default "off") + +-- +2.19.1 + diff --git a/root/target/linux/brcm2708/patches-4.14/0997-lan78xx-read-led-states-from-dt.patch b/root/target/linux/brcm2708/patches-4.14/0997-lan78xx-read-led-states-from-dt.patch deleted file mode 100644 index 0646b538..00000000 --- a/root/target/linux/brcm2708/patches-4.14/0997-lan78xx-read-led-states-from-dt.patch +++ /dev/null @@ -1,166 +0,0 @@ -diff --git a/MAINTAINERS b/MAINTAINERS -index b60179d..23735d9 100644 ---- a/MAINTAINERS -+++ b/MAINTAINERS -@@ -14573,6 +14573,7 @@ M: Microchip Linux Driver Support - L: netdev@vger.kernel.org - S: Maintained - F: drivers/net/usb/lan78xx.* -+F: include/dt-bindings/net/microchip-lan78xx.h - - USB MASS STORAGE DRIVER - M: Alan Stern -diff --git a/drivers/net/phy/microchip.c b/drivers/net/phy/microchip.c -index 0f293ef..ef5e160 100644 ---- a/drivers/net/phy/microchip.c -+++ b/drivers/net/phy/microchip.c -@@ -20,7 +20,9 @@ - #include - #include - #include - #include -+#include -+#include - - #define DRIVER_AUTHOR "WOOJUNG HUH " - #define DRIVER_DESC "Microchip LAN88XX PHY driver" -@@ -70,6 +72,8 @@ static int lan88xx_probe(struct phy_device *phydev) - { - struct device *dev = &phydev->mdio.dev; - struct lan88xx_priv *priv; -+ u32 led_modes[4]; -+ int len; - - priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); - if (!priv) -@@ -77,6 +81,27 @@ static int lan88xx_probe(struct phy_device *phydev) - - priv->wolopts = 0; - -+ len = of_property_read_variable_u32_array(dev->of_node, -+ "microchip,led-modes", -+ led_modes, -+ 0, -+ ARRAY_SIZE(led_modes)); -+ if (len >= 0) { -+ u32 reg = 0; -+ int i; -+ -+ for (i = 0; i < len; i++) { -+ if (led_modes[i] > 15) -+ return -EINVAL; -+ reg |= led_modes[i] << (i * 4); -+ } -+ for (; i < ARRAY_SIZE(led_modes); i++) -+ reg |= LAN78XX_FORCE_LED_OFF << (i * 4); -+ (void)phy_write(phydev, LAN78XX_PHY_LED_MODE_SELECT, reg); -+ } else if (len == -EOVERFLOW) { -+ return -EINVAL; -+ } -+ - /* these values can be used to identify internal PHY */ - priv->chip_id = phy_read_mmd(phydev, 3, LAN88XX_MMD3_CHIP_ID); - priv->chip_rev = phy_read_mmd(phydev, 3, LAN88XX_MMD3_CHIP_REV); -diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c -index a823f01..6b03b97 100644 ---- a/drivers/net/usb/lan78xx.c -+++ b/drivers/net/usb/lan78xx.c -@@ -37,6 +37,7 @@ - #include - #include - #include -+#include - #include - #include "lan78xx.h" - -@@ -1760,6 +1761,7 @@ static int lan78xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx, - - static int lan78xx_mdio_init(struct lan78xx_net *dev) - { -+ struct device_node *node; - int ret; - - dev->mdiobus = mdiobus_alloc(); -@@ -1788,7 +1790,13 @@ static int lan78xx_mdio_init(struct lan78xx_net *dev) - break; - } - -- ret = mdiobus_register(dev->mdiobus); -+ node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); -+ if (node) { -+ ret = of_mdiobus_register(dev->mdiobus, node); -+ of_node_put(node); -+ } else { -+ ret = mdiobus_register(dev->mdiobus); -+ } - if (ret) { - netdev_err(dev->net, "can't register MDIO bus\n"); - goto exit1; -@@ -2077,6 +2085,28 @@ static int lan78xx_phy_init(struct lan78xx_net *dev) - mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); - phydev->advertising |= mii_adv_to_ethtool_adv_t(mii_adv); - -+ if (phydev->mdio.dev.of_node) { -+ u32 reg; -+ int len; -+ -+ len = of_property_count_elems_of_size(phydev->mdio.dev.of_node, -+ "microchip,led-modes", -+ sizeof(u32)); -+ if (len >= 0) { -+ /* Ensure the appropriate LEDs are enabled */ -+ lan78xx_read_reg(dev, HW_CFG, ®); -+ reg &= ~(HW_CFG_LED0_EN_ | -+ HW_CFG_LED1_EN_ | -+ HW_CFG_LED2_EN_ | -+ HW_CFG_LED3_EN_); -+ reg |= (len > 0) * HW_CFG_LED0_EN_ | -+ (len > 1) * HW_CFG_LED1_EN_ | -+ (len > 2) * HW_CFG_LED2_EN_ | -+ (len > 3) * HW_CFG_LED3_EN_; -+ lan78xx_write_reg(dev, HW_CFG, reg); -+ } -+ } -+ - genphy_config_aneg(phydev); - - dev->fc_autoneg = phydev->autoneg; -diff --git a/include/dt-bindings/net/microchip-lan78xx.h b/include/dt-bindings/net/microchip-lan78xx.h -new file mode 100644 -index 0000000..0742ff0 ---- /dev/null -+++ b/include/dt-bindings/net/microchip-lan78xx.h -@@ -0,0 +1,21 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+#ifndef _DT_BINDINGS_MICROCHIP_LAN78XX_H -+#define _DT_BINDINGS_MICROCHIP_LAN78XX_H -+ -+/* LED modes for LAN7800/LAN7850 embedded PHY */ -+ -+#define LAN78XX_LINK_ACTIVITY 0 -+#define LAN78XX_LINK_1000_ACTIVITY 1 -+#define LAN78XX_LINK_100_ACTIVITY 2 -+#define LAN78XX_LINK_10_ACTIVITY 3 -+#define LAN78XX_LINK_100_1000_ACTIVITY 4 -+#define LAN78XX_LINK_10_1000_ACTIVITY 5 -+#define LAN78XX_LINK_10_100_ACTIVITY 6 -+#define LAN78XX_DUPLEX_COLLISION 8 -+#define LAN78XX_COLLISION 9 -+#define LAN78XX_ACTIVITY 10 -+#define LAN78XX_AUTONEG_FAULT 12 -+#define LAN78XX_FORCE_LED_OFF 14 -+#define LAN78XX_FORCE_LED_ON 15 -+ -+#endif -diff --git a/include/linux/microchipphy.h b/include/linux/microchipphy.h -index eb492d4..8e4015e 100644 ---- a/include/linux/microchipphy.h -+++ b/include/linux/microchipphy.h -@@ -70,4 +70,7 @@ - #define LAN88XX_MMD3_CHIP_ID (32877) - #define LAN88XX_MMD3_CHIP_REV (32878) - -+/* Registers specific to the LAN7800/LAN7850 embedded phy */ -+#define LAN78XX_PHY_LED_MODE_SELECT (0x1D) -+ - #endif /* _MICROCHIPPHY_H */ diff --git a/root/target/linux/brcm2708/patches-4.14/0998-set-led-states-to-dt.patch b/root/target/linux/brcm2708/patches-4.14/0998-set-led-states-to-dt.patch deleted file mode 100644 index bc05f86e..00000000 --- a/root/target/linux/brcm2708/patches-4.14/0998-set-led-states-to-dt.patch +++ /dev/null @@ -1,49 +0,0 @@ ---- a/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi 2018-09-08 19:34:01.223685465 +0200 -+++ b/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi 2018-09-08 19:37:11.689325045 +0200 -@@ -1,3 +1,5 @@ -+#include -+ - / { - aliases { - ethernet0 = ðernet; -@@ -17,27 +17,22 @@ - #address-cells = <1>; - #size-cells = <0>; - -- ethernet: usbether@1 { -+ ethernet: ethernet@1 { - compatible = "usb424,7800"; - reg = <1>; -- microchip,eee-enabled; -- microchip,tx-lpi-timer = <600>; /* non-aggressive*/ -- /* -- * led0 = 1:link1000/activity -- * led1 = 6:link10/100/activity -- */ -- microchip,led-modes = <1 6>; -+ -+ mdio { -+ #address-cells = <0x1>; -+ #size-cells = <0x0>; -+ eth_phy: ethernet-phy@1 { -+ reg = <1>; -+ microchip,led-modes = < -+ LAN78XX_LINK_1000_ACTIVITY -+ LAN78XX_LINK_10_100_ACTIVITY -+ >; -+ }; -+ }; - }; - }; - }; - }; -- -- --/ { -- __overrides__ { -- eee = <ðernet>,"microchip,eee-enabled?"; -- tx_lpi_timer = <ðernet>,"microchip,tx-lpi-timer:0"; -- eth_led0 = <ðernet>,"microchip,led-modes:0"; -- eth_led1 = <ðernet>,"microchip,led-modes:4"; -- }; --};