Fixes CVE-2020-10757 via upstream commit df4988aa1c96 ("mm: Fix mremap
not considering huge pmd devmap").
Resolved merge conflict in the following patches:
 bcm27xx: 950-0128-gpiolib-Don-t-prevent-IRQ-usage-of-output-GPIOs.patch
Refreshed patches, removed upstreamed patch:
 generic: 751-v5.8-net-dsa-mt7530-set-CPU-port-to-fallback-mode.patch
 generic: 754-v5.7-net-dsa-mt7530-fix-roaming-from-DSA-user-ports.patch
Run tested: qemu-x86-64
Build tested: x86/64, imx6, sunxi/a53
Signed-off-by: Petr Štetiar <ynezz@true.cz>
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 097cc81ee5c15913ad330baffff2e3dea09bdad0 Mon Sep 17 00:00:00 2001
 | 
						|
From: Tim Harvey <tharvey@gateworks.com>
 | 
						|
Date: Thu, 30 Aug 2018 15:16:08 -0700
 | 
						|
Subject: [PATCH] can: mcp251x: convert driver to half-duplex SPI
 | 
						|
 | 
						|
Some SPI host controllers such as the Cavium Thunder TX do not support
 | 
						|
full-duplex SPI. Using half-duplex transfers allows the driver to work
 | 
						|
with those host controllers.
 | 
						|
 | 
						|
Signed-off-by: Tim Harvey <tharvey@gateworks.com>
 | 
						|
---
 | 
						|
 drivers/net/can/spi/mcp251x.c | 15 ++++++++-------
 | 
						|
 1 file changed, 8 insertions(+), 7 deletions(-)
 | 
						|
 | 
						|
--- a/drivers/net/can/spi/mcp251x.c
 | 
						|
+++ b/drivers/net/can/spi/mcp251x.c
 | 
						|
@@ -291,23 +291,23 @@ static u8 mcp251x_read_reg(struct spi_de
 | 
						|
 	priv->spi_tx_buf[0] = INSTRUCTION_READ;
 | 
						|
 	priv->spi_tx_buf[1] = reg;
 | 
						|
 
 | 
						|
-	mcp251x_spi_trans(spi, 3);
 | 
						|
-	val = priv->spi_rx_buf[2];
 | 
						|
+	spi_write_then_read(spi, priv->spi_tx_buf, 2, &val, 1);
 | 
						|
 
 | 
						|
 	return val;
 | 
						|
 }
 | 
						|
 
 | 
						|
 static void mcp251x_read_2regs(struct spi_device *spi, u8 reg, u8 *v1, u8 *v2)
 | 
						|
 {
 | 
						|
+	u8 val[4] = {0};
 | 
						|
 	struct mcp251x_priv *priv = spi_get_drvdata(spi);
 | 
						|
 
 | 
						|
 	priv->spi_tx_buf[0] = INSTRUCTION_READ;
 | 
						|
 	priv->spi_tx_buf[1] = reg;
 | 
						|
 
 | 
						|
-	mcp251x_spi_trans(spi, 4);
 | 
						|
+	spi_write_then_read(spi, priv->spi_tx_buf, 2, val, 2);
 | 
						|
 
 | 
						|
-	*v1 = priv->spi_rx_buf[2];
 | 
						|
-	*v2 = priv->spi_rx_buf[3];
 | 
						|
+	*v1 = val[0];
 | 
						|
+	*v2 = val[1];
 | 
						|
 }
 | 
						|
 
 | 
						|
 static void mcp251x_write_reg(struct spi_device *spi, u8 reg, u8 val)
 | 
						|
@@ -398,8 +398,9 @@ static void mcp251x_hw_rx_frame(struct s
 | 
						|
 			buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i);
 | 
						|
 	} else {
 | 
						|
 		priv->spi_tx_buf[RXBCTRL_OFF] = INSTRUCTION_READ_RXB(buf_idx);
 | 
						|
-		mcp251x_spi_trans(spi, SPI_TRANSFER_BUF_LEN);
 | 
						|
-		memcpy(buf, priv->spi_rx_buf, SPI_TRANSFER_BUF_LEN);
 | 
						|
+		spi_write_then_read(spi, priv->spi_tx_buf, 1, priv->spi_rx_buf,
 | 
						|
+				    SPI_TRANSFER_BUF_LEN);
 | 
						|
+		memcpy(buf + 1, priv->spi_rx_buf, SPI_TRANSFER_BUF_LEN - 1);
 | 
						|
 	}
 | 
						|
 }
 | 
						|
 
 |