kernel: update kernel 4.9 to 4.9.29
- Refresh all patches - Removed upstreamed - Adapted 1 Compile tested on: bcm53xx, cns3xxx, imx6, lantiq Run tested on: cns3xxx & imx6 Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com> [update from 4.9.28 to 4.9.29] Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
committed by
Hauke Mehrtens
parent
088e28772c
commit
e842e16f45
@@ -14,7 +14,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -7323,8 +7323,6 @@ int alloc_contig_range(unsigned long sta
|
||||
@@ -7324,8 +7324,6 @@ int alloc_contig_range(unsigned long sta
|
||||
|
||||
/* Make sure the range is really isolated. */
|
||||
if (test_pages_isolated(outer_start, end, false)) {
|
||||
|
||||
@@ -696,7 +696,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
||||
}
|
||||
--- a/drivers/usb/core/hub.c
|
||||
+++ b/drivers/usb/core/hub.c
|
||||
@@ -5009,7 +5009,7 @@ static void port_event(struct usb_hub *h
|
||||
@@ -5025,7 +5025,7 @@ static void port_event(struct usb_hub *h
|
||||
if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
|
||||
u16 status = 0, unused;
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
||||
depends on X86_THERMAL_VECTOR
|
||||
--- a/drivers/thermal/Makefile
|
||||
+++ b/drivers/thermal/Makefile
|
||||
@@ -41,6 +41,7 @@ obj-$(CONFIG_MAX77620_THERMAL) += max776
|
||||
@@ -42,6 +42,7 @@ obj-$(CONFIG_MAX77620_THERMAL) += max776
|
||||
obj-$(CONFIG_QORIQ_THERMAL) += qoriq_thermal.o
|
||||
obj-$(CONFIG_DB8500_CPUFREQ_COOLING) += db8500_cpufreq_cooling.o
|
||||
obj-$(CONFIG_INTEL_POWERCLAMP) += intel_powerclamp.o
|
||||
|
||||
@@ -10,7 +10,7 @@ Subject: [PATCH] config: Enable CONFIG_MEMCG, but leave it disabled (due to
|
||||
|
||||
--- a/kernel/cgroup.c
|
||||
+++ b/kernel/cgroup.c
|
||||
@@ -5626,7 +5626,7 @@ int __init cgroup_init_early(void)
|
||||
@@ -5627,7 +5627,7 @@ int __init cgroup_init_early(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ Subject: [PATCH] config: Enable CONFIG_MEMCG, but leave it disabled (due to
|
||||
|
||||
/**
|
||||
* cgroup_init - cgroup initialization
|
||||
@@ -6163,6 +6163,28 @@ static int __init cgroup_no_v1(char *str
|
||||
@@ -6164,6 +6164,28 @@ static int __init cgroup_no_v1(char *str
|
||||
}
|
||||
__setup("cgroup_no_v1=", cgroup_no_v1);
|
||||
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
From 89b466914a0d49f08d00be25556ba22497b9a284 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= <noralf@tronnes.org>
|
||||
Date: Sat, 17 Sep 2016 15:07:10 +0200
|
||||
Subject: [PATCH] i2c: bcm2835: Fix hang for writing messages larger than 16
|
||||
bytes
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Writing messages larger than the FIFO size results in a hang, rendering
|
||||
the machine unusable. This is because the RXD status flag is set on the
|
||||
first interrupt which results in bcm2835_drain_rxfifo() stealing bytes
|
||||
from the buffer. The controller continues to trigger interrupts waiting
|
||||
for the missing bytes, but bcm2835_fill_txfifo() has none to give.
|
||||
In this situation wait_for_completion_timeout() apparently is unable to
|
||||
stop the madness.
|
||||
|
||||
The BCM2835 ARM Peripherals datasheet has this to say about the flags:
|
||||
TXD: is set when the FIFO has space for at least one byte of data.
|
||||
RXD: is set when the FIFO contains at least one byte of data.
|
||||
TXW: is set during a write transfer and the FIFO is less than full.
|
||||
RXR: is set during a read transfer and the FIFO is or more full.
|
||||
|
||||
Implementing the logic from the downstream i2c-bcm2708 driver solved
|
||||
the hang problem.
|
||||
|
||||
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
||||
Reviewed-by: Eric Anholt <eric@anholt.net>
|
||||
Reviewed-by: Martin Sperl <kernel@martin.sperl.org>
|
||||
---
|
||||
drivers/i2c/busses/i2c-bcm2835.c | 22 ++++++++++++++--------
|
||||
1 file changed, 14 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/drivers/i2c/busses/i2c-bcm2835.c
|
||||
+++ b/drivers/i2c/busses/i2c-bcm2835.c
|
||||
@@ -64,6 +64,7 @@ struct bcm2835_i2c_dev {
|
||||
int irq;
|
||||
struct i2c_adapter adapter;
|
||||
struct completion completion;
|
||||
+ struct i2c_msg *curr_msg;
|
||||
u32 msg_err;
|
||||
u8 *msg_buf;
|
||||
size_t msg_buf_remaining;
|
||||
@@ -126,14 +127,13 @@ static irqreturn_t bcm2835_i2c_isr(int t
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
- if (val & BCM2835_I2C_S_RXD) {
|
||||
- bcm2835_drain_rxfifo(i2c_dev);
|
||||
- if (!(val & BCM2835_I2C_S_DONE))
|
||||
- return IRQ_HANDLED;
|
||||
- }
|
||||
-
|
||||
if (val & BCM2835_I2C_S_DONE) {
|
||||
- if (i2c_dev->msg_buf_remaining)
|
||||
+ if (i2c_dev->curr_msg->flags & I2C_M_RD) {
|
||||
+ bcm2835_drain_rxfifo(i2c_dev);
|
||||
+ val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S);
|
||||
+ }
|
||||
+
|
||||
+ if ((val & BCM2835_I2C_S_RXD) || i2c_dev->msg_buf_remaining)
|
||||
i2c_dev->msg_err = BCM2835_I2C_S_LEN;
|
||||
else
|
||||
i2c_dev->msg_err = 0;
|
||||
@@ -141,11 +141,16 @@ static irqreturn_t bcm2835_i2c_isr(int t
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
- if (val & BCM2835_I2C_S_TXD) {
|
||||
+ if (val & BCM2835_I2C_S_TXW) {
|
||||
bcm2835_fill_txfifo(i2c_dev);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
+ if (val & BCM2835_I2C_S_RXR) {
|
||||
+ bcm2835_drain_rxfifo(i2c_dev);
|
||||
+ return IRQ_HANDLED;
|
||||
+ }
|
||||
+
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
@@ -155,6 +160,7 @@ static int bcm2835_i2c_xfer_msg(struct b
|
||||
u32 c;
|
||||
unsigned long time_left;
|
||||
|
||||
+ i2c_dev->curr_msg = msg;
|
||||
i2c_dev->msg_buf = msg->buf;
|
||||
i2c_dev->msg_buf_remaining = msg->len;
|
||||
reinit_completion(&i2c_dev->completion);
|
||||
Reference in New Issue
Block a user