clearfog: update kernel to 6.2.9 + fixes

On one hand, this unbreaks the PCIe bus on the inline amplifiers (and
therefore the extra network card). On the other hand, there's a new
error from I2C:

 i2c i2c-2: readbytes: invalid block length (255)

This one might be harmless; at least I think it's a complain from a
piece of code that I touched the last time (!), and that was only to
make an error message grepable. Also, the buffer has been "always" set
to 32 bytes. Anyway, the initialization of the fsp-3y pmbus driver
passes, and I can read some data, which is good.

The other nasty part was a regression in drivers/tty/serial/max310x.c
which introduced random IO corruption when using batched IO (i.e., all
the time) -- hence a new patch.

I also decided to drop an unrelated spi_orion cleanup which isn't that
urgent -- so there's no change of the number in kernel's
CONFIG_LOCALVERSION.

Change-Id: I56470386d2c0abee508c883f15ea1986042349b5
Fixes: a12acd9 Update kernel
diff --git a/board/czechlight/clearfog/linux.fragment b/board/czechlight/clearfog/linux.fragment
index f0fae65..50239e9 100644
--- a/board/czechlight/clearfog/linux.fragment
+++ b/board/czechlight/clearfog/linux.fragment
@@ -51,4 +51,4 @@
 CONFIG_KEYBOARD_ATKBD=N
 CONFIG_INPUT_MOUSE=N
 
-CONFIG_LOCALVERSION="-6-gfc198736eda4"
+CONFIG_LOCALVERSION="-6-ge8ddee461538"
diff --git a/board/czechlight/clearfog/patches/linux.patch b/board/czechlight/clearfog/patches/linux.patch
index 934e3e5..67a380f 100644
--- a/board/czechlight/clearfog/patches/linux.patch
+++ b/board/czechlight/clearfog/patches/linux.patch
@@ -197,30 +197,10 @@
  	data->ngpio = ngpio;
  
 diff --git a/drivers/spi/spi-orion.c b/drivers/spi/spi-orion.c
-index 565cd4c48d7b..cb252d98184c 100644
+index 565cd4c48d7b..3298f6d17f4a 100644
 --- a/drivers/spi/spi-orion.c
 +++ b/drivers/spi/spi-orion.c
-@@ -86,10 +86,6 @@ struct orion_direct_acc {
- 	u32			size;
- };
- 
--struct orion_child_options {
--	struct orion_direct_acc direct_access;
--};
--
- struct orion_spi {
- 	struct spi_master	*master;
- 	void __iomem		*base;
-@@ -98,7 +94,7 @@ struct orion_spi {
- 	const struct orion_spi_dev *devdata;
- 	struct device		*dev;
- 
--	struct orion_child_options	child[ORION_NUM_CHIPSELECTS];
-+	struct orion_direct_acc	direct_access[ORION_NUM_CHIPSELECTS];
- };
- 
- #ifdef CONFIG_PM
-@@ -473,7 +469,7 @@ orion_spi_write_read(struct spi_device *spi, struct spi_transfer *xfer)
+@@ -473,7 +473,7 @@ orion_spi_write_read(struct spi_device *spi, struct spi_transfer *xfer)
  	int cs = spi->chip_select;
  	void __iomem *vaddr;
  
@@ -229,48 +209,11 @@
  	count = xfer->len;
  
  	orion_spi = spi_master_get_devdata(spi->master);
-@@ -483,7 +479,7 @@ orion_spi_write_read(struct spi_device *spi, struct spi_transfer *xfer)
- 	 * and SPI_CS_WORD flag is not set.
- 	 * Otherwise fall back to PIO mode for this transfer.
- 	 */
--	vaddr = orion_spi->child[cs].direct_access.vaddr;
-+	vaddr = orion_spi->direct_access[cs].vaddr;
- 
- 	if (vaddr && xfer->tx_buf && word_len == 8 && (spi->mode & SPI_CS_WORD) == 0) {
- 		unsigned int cnt = count / 4;
-@@ -736,7 +732,6 @@ static int orion_spi_probe(struct platform_device *pdev)
- 	}
- 
- 	for_each_available_child_of_node(pdev->dev.of_node, np) {
--		struct orion_direct_acc *dir_acc;
- 		u32 cs;
- 
- 		/* Get chip-select number from the "reg" property */
-@@ -765,14 +760,15 @@ static int orion_spi_probe(struct platform_device *pdev)
- 		 * This needs to get extended for the direct SPI NOR / SPI NAND
- 		 * support, once this gets implemented.
- 		 */
--		dir_acc = &spi->child[cs].direct_access;
--		dir_acc->vaddr = devm_ioremap(&pdev->dev, r->start, PAGE_SIZE);
--		if (!dir_acc->vaddr) {
-+		spi->direct_access[cs].vaddr = devm_ioremap(&pdev->dev,
-+							    r->start,
-+							    PAGE_SIZE);
-+		if (!spi->direct_access[cs].vaddr) {
- 			status = -ENOMEM;
- 			of_node_put(np);
- 			goto out_rel_axi_clk;
- 		}
--		dir_acc->size = PAGE_SIZE;
-+		spi->direct_access[cs].size = PAGE_SIZE;
- 
- 		dev_info(&pdev->dev, "CS%d configured for direct access\n", cs);
- 	}
 diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c
-index dde0824b2fa5..bdfcd01401dd 100644
+index 4eb24e3407f8..7e71b36a16ab 100644
 --- a/drivers/tty/serial/max310x.c
 +++ b/drivers/tty/serial/max310x.c
-@@ -235,6 +235,10 @@
+@@ -237,6 +237,10 @@
  #define MAX310x_REV_MASK		(0xf8)
  #define MAX310X_WRITE_BIT		0x80
  
@@ -281,7 +224,19 @@
  /* MAX3107 specific */
  #define MAX3107_REV_ID			(0xa0)
  
-@@ -610,11 +614,14 @@ static u32 max310x_set_ref_clk(struct device *dev, struct max310x_port *s,
+@@ -525,6 +529,11 @@ static bool max310x_reg_precious(struct device *dev, unsigned int reg)
+ 	return false;
+ }
+ 
++static bool max310x_reg_noinc(struct device *dev, unsigned int reg)
++{
++	return reg == MAX310X_RHR_REG;
++}
++
+ static int max310x_set_baud(struct uart_port *port, int baud)
+ {
+ 	unsigned int mode = 0, div = 0, frac = 0, c = 0, F = 0;
+@@ -636,11 +645,14 @@ static u32 max310x_set_ref_clk(struct device *dev, struct max310x_port *s,
  
  	/* Wait for crystal */
  	if (xtal) {
@@ -300,7 +255,24 @@
  		}
  	}
  
-@@ -1335,6 +1342,10 @@ static int max310x_probe(struct device *dev, const struct max310x_devtype *devty
+@@ -651,14 +663,14 @@ static void max310x_batch_write(struct uart_port *port, u8 *txbuf, unsigned int
+ {
+ 	struct max310x_one *one = to_max310x_port(port);
+ 
+-	regmap_raw_write(one->regmap, MAX310X_THR_REG, txbuf, len);
++	regmap_noinc_write(one->regmap, MAX310X_THR_REG, txbuf, len);
+ }
+ 
+ static void max310x_batch_read(struct uart_port *port, u8 *rxbuf, unsigned int len)
+ {
+ 	struct max310x_one *one = to_max310x_port(port);
+ 
+-	regmap_raw_read(one->regmap, MAX310X_RHR_REG, rxbuf, len);
++	regmap_noinc_read(one->regmap, MAX310X_RHR_REG, rxbuf, len);
+ }
+ 
+ static void max310x_handle_rx(struct uart_port *port, unsigned int rxlen)
+@@ -1344,6 +1356,10 @@ static int max310x_probe(struct device *dev, const struct max310x_devtype *devty
  	}
  
  	uartclk = max310x_set_ref_clk(dev, s, freq, xtal);
@@ -311,3 +283,14 @@
  	dev_dbg(dev, "Reference clock set to %i Hz\n", uartclk);
  
  	for (i = 0; i < devtype->nr; i++) {
+@@ -1469,6 +1485,10 @@ static struct regmap_config regcfg = {
+ 	.writeable_reg = max310x_reg_writeable,
+ 	.volatile_reg = max310x_reg_volatile,
+ 	.precious_reg = max310x_reg_precious,
++	.writeable_noinc_reg = max310x_reg_noinc,
++	.readable_noinc_reg = max310x_reg_noinc,
++	.max_raw_read = MAX310X_FIFO_SIZE,
++	.max_raw_write = MAX310X_FIFO_SIZE,
+ };
+ 
+ #ifdef CONFIG_SPI_MASTER
diff --git a/configs/czechlight_clearfog_defconfig b/configs/czechlight_clearfog_defconfig
index 654a5cc..561a561 100644
--- a/configs/czechlight_clearfog_defconfig
+++ b/configs/czechlight_clearfog_defconfig
@@ -27,7 +27,7 @@
 BR2_ROOTFS_POST_SCRIPT_ARGS="-c $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/clearfog/genimage.cfg"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.16.10"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.2.9"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/clearfog/patches/linux.patch"
 BR2_LINUX_KERNEL_DEFCONFIG="mvebu_v7"
 BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/clearfog/linux.fragment $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/linux.fragment"