Kernel 6.2 rc5 (#13)

* Upgrade Kernel to 6.2-rc5 + Patches
* Liux Patch: tty: serial: bflb_uart: fix leaked ISR registration
* Linux Patch: mmc: sdhci-bflb: remove unnecessary quirks
* Bump Kernel
* Update Linux defconfig and mount root with a label instead of partition
This commit is contained in:
Justin Hammond 2023-01-23 09:02:26 +08:00 committed by GitHub
parent 37f451d82b
commit 0fd2be9e8b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 336 additions and 217 deletions

View file

@ -1,10 +1,12 @@
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
CONFIG_GENERIC_IRQ_DEBUGFS=y
CONFIG_NO_HZ_IDLE=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_BPF_SYSCALL=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=16
CONFIG_CGROUPS=y
CONFIG_CGROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
@ -12,20 +14,20 @@ CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_BPF=y
CONFIG_USER_NS=y
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_PERF_EVENTS=y
CONFIG_SOC_BOUFFALOLAB=y
CONFIG_SOC_VIRT=y
CONFIG_ERRATA_THEAD=y
CONFIG_SMP=y
CONFIG_NR_CPUS=8
CONFIG_RISCV_SBI_V01=y
# CONFIG_COMPAT is not set
CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
# CONFIG_GCC_PLUGINS is not set
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_PARTITION_ADVANCED=y
CONFIG_CMDLINE_PARTITION=y
CONFIG_IOSCHED_BFQ=y
CONFIG_PAGE_REPORTING=y
CONFIG_NET=y
CONFIG_PACKET=y
@ -37,9 +39,15 @@ CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
CONFIG_NETFILTER=y
CONFIG_NF_TABLES=y
CONFIG_NF_TABLES_INET=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_FILTER=y
CONFIG_DNS_RESOLVER=y
CONFIG_NETLINK_DIAG=y
# CONFIG_WIRELESS is not set
CONFIG_FAILOVER=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_MTD=y
@ -54,241 +62,74 @@ CONFIG_MTD_PHYSMAP_OF=y
CONFIG_MTD_PHYSMAP_VERSATILE=y
CONFIG_MTD_PHYSMAP_GEMINI=y
CONFIG_MTD_PLATRAM=y
CONFIG_OF_OVERLAY=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_VIRTIO_BLK=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_SCSI_VIRTIO=y
CONFIG_NETDEVICES=y
CONFIG_VIRTIO_NET=y
CONFIG_WIREGUARD=y
# CONFIG_ETHERNET is not set
CONFIG_MDIO_DEVICE=y
CONFIG_PPP=y
CONFIG_PPP_BSDCOMP=y
CONFIG_PPP_DEFLATE=y
# CONFIG_WLAN is not set
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_EVBUG=y
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
CONFIG_SERIO_LIBPS2=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
CONFIG_SERIAL_BFLB=y
CONFIG_SERIAL_BFLB_CONSOLE=y
CONFIG_SERIAL_SIFIVE=y
CONFIG_SERIAL_SIFIVE_CONSOLE=y
CONFIG_HVC_RISCV_SBI=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_I2C=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_XILINX=y
CONFIG_I2C_SLAVE=y
CONFIG_I2C_SLAVE_EEPROM=y
CONFIG_I2C_DEBUG_CORE=y
CONFIG_I2C_DEBUG_ALGO=y
CONFIG_I2C_DEBUG_BUS=y
CONFIG_POWER_RESET=y
CONFIG_POWER_RESET_SYSCON=y
CONFIG_POWER_RESET_SYSCON_POWEROFF=y
CONFIG_FB=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
# CONFIG_VGA_CONSOLE is not set
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
# CONFIG_HID_A4TECH is not set
# CONFIG_HID_BELKIN is not set
# CONFIG_HID_CHERRY is not set
# CONFIG_HID_CYPRESS is not set
# CONFIG_HID_EZKEY is not set
# CONFIG_HID_ITE is not set
# CONFIG_HID_KENSINGTON is not set
# CONFIG_HID_REDRAGON is not set
# CONFIG_HID_MICROSOFT is not set
# CONFIG_HID_MONTEREY is not set
# CONFIG_HID is not set
# CONFIG_USB_SUPPORT is not set
CONFIG_RTC_CLASS=y
CONFIG_SYNC_FILE=y
# CONFIG_VIRTIO_MENU is not set
# CONFIG_VHOST_MENU is not set
# CONFIG_IOMMU_SUPPORT is not set
CONFIG_RPMSG_CHAR=y
CONFIG_RPMSG_VIRTIO=y
CONFIG_GENERIC_PHY=y
CONFIG_AUTOFS4_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_CONFIGFS_FS=y
# CONFIG_EFIVAR_FS is not set
CONFIG_SQUASHFS=y
CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y
# CONFIG_NETWORK_FILESYSTEMS is not set
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_UTF8=y
CONFIG_KEYS=y
CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity"
CONFIG_CRYPTO=y
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_USER_API_HASH=y
CONFIG_CRYPTO_DEV_VIRTIO=y
CONFIG_CRC16=y
CONFIG_CRC_ITU_T=y
CONFIG_CRC7=y
CONFIG_XZ_DEC=y
CONFIG_PRINTK_TIME=y
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_VM_PGTABLE=y
CONFIG_DEBUG_TIMEKEEPING=y
CONFIG_FUNCTION_ERROR_INJECTION=y
# CONFIG_RUNTIME_TESTING_MENU is not set
CONFIG_MEMTEST=y
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
CONFIG_NO_HZ_IDLE=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_BPF_SYSCALL=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_BPF=y
CONFIG_USER_NS=y
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_PERF_EVENTS=y
CONFIG_SOC_BOUFFALOLAB=y
CONFIG_SOC_VIRT=y
CONFIG_ERRATA_THEAD=y
CONFIG_SMP=y
CONFIG_NR_CPUS=8
CONFIG_RISCV_SBI_V01=y
# CONFIG_COMPAT is not set
CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_PARTITION_ADVANCED=y
CONFIG_CMDLINE_PARTITION=y
CONFIG_PAGE_REPORTING=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
CONFIG_DNS_RESOLVER=y
CONFIG_NETLINK_DIAG=y
# CONFIG_WIRELESS is not set
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_MTD=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_BLOCK_RO=y
CONFIG_MTD_CFI=y
CONFIG_MTD_CFI_ADV_OPTIONS=y
CONFIG_MTD_ROM=y
CONFIG_MTD_ABSENT=y
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_PHYSMAP_OF=y
CONFIG_MTD_PHYSMAP_VERSATILE=y
CONFIG_MTD_PHYSMAP_GEMINI=y
CONFIG_MTD_PLATRAM=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_VIRTIO_BLK=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_SCSI_VIRTIO=y
CONFIG_NETDEVICES=y
CONFIG_VIRTIO_NET=y
# CONFIG_ETHERNET is not set
CONFIG_MDIO_DEVICE=y
# CONFIG_WLAN is not set
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_EVBUG=y
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
CONFIG_SERIAL_BFLB=y
CONFIG_SERIAL_BFLB_CONSOLE=y
CONFIG_SERIAL_SIFIVE=y
CONFIG_SERIAL_SIFIVE_CONSOLE=y
CONFIG_HVC_RISCV_SBI=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_I2C=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_XILINX=y
CONFIG_I2C_SLAVE=y
CONFIG_I2C_SLAVE_EEPROM=y
CONFIG_I2C_DEBUG_CORE=y
CONFIG_I2C_DEBUG_ALGO=y
CONFIG_I2C_DEBUG_BUS=y
CONFIG_FB=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
# CONFIG_VGA_CONSOLE is not set
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
# CONFIG_HID_A4TECH is not set
# CONFIG_HID_BELKIN is not set
# CONFIG_HID_CHERRY is not set
# CONFIG_HID_CYPRESS is not set
# CONFIG_HID_EZKEY is not set
# CONFIG_HID_ITE is not set
# CONFIG_HID_KENSINGTON is not set
# CONFIG_HID_REDRAGON is not set
# CONFIG_HID_MICROSOFT is not set
# CONFIG_HID_MONTEREY is not set
# CONFIG_USB_SUPPORT is not set
CONFIG_RTC_CLASS=y
CONFIG_SYNC_FILE=y
# CONFIG_VIRTIO_MENU is not set
# CONFIG_VHOST_MENU is not set
# CONFIG_IOMMU_SUPPORT is not set
CONFIG_RPMSG_CHAR=y
CONFIG_RPMSG_VIRTIO=y
CONFIG_GENERIC_PHY=y
CONFIG_AUTOFS4_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_CONFIGFS_FS=y
# CONFIG_EFIVAR_FS is not set
CONFIG_SQUASHFS=y
CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y
# CONFIG_NETWORK_FILESYSTEMS is not set
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_UTF8=y
CONFIG_KEYS=y
CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity"
CONFIG_CRYPTO=y
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_USER_API_HASH=y
CONFIG_CRYPTO_DEV_VIRTIO=y
CONFIG_CRC16=y
CONFIG_CRC_ITU_T=y
CONFIG_CRC7=y
CONFIG_XZ_DEC=y
CONFIG_PRINTK_TIME=y
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_VM_PGTABLE=y
CONFIG_DEBUG_TIMEKEEPING=y
CONFIG_FUNCTION_ERROR_INJECTION=y
# CONFIG_RUNTIME_TESTING_MENU is not set
CONFIG_MEMTEST=y
CONFIG_MMC=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHCI_BFLB=y
CONFIG_GENERIC_IRQ_DEBUGFS=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_GOLDFISH=y
# CONFIG_VIRTIO_MENU is not set
# CONFIG_VHOST_MENU is not set
CONFIG_GOLDFISH=y
CONFIG_MAILBOX=y
CONFIG_BFLB_IPC=y
# CONFIG_IOMMU_SUPPORT is not set
CONFIG_EXT4_FS=y
CONFIG_AUTOFS4_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_EXFAT_FS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_CONFIGFS_FS=y
# CONFIG_EFIVAR_FS is not set
# CONFIG_NETWORK_FILESYSTEMS is not set
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_UTF8=y
CONFIG_KEYS=y
CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity"
CONFIG_CRYPTO_RSA=y
CONFIG_CRYPTO_USER_API_HASH=y
# CONFIG_CRYPTO_HW is not set
CONFIG_CRC_ITU_T=y
CONFIG_CRC7=y
CONFIG_XZ_DEC=y
CONFIG_PRINTK_TIME=y
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_VM_PGTABLE=y
# CONFIG_RUNTIME_TESTING_MENU is not set
CONFIG_MEMTEST=y

View file

@ -17,7 +17,7 @@ index a3b1ae9f0478..d3d228c3d8c0 100644
chosen {
stdout-path = "serial0:2000000n8";
- bootargs = "console=ttyS0,2000000 loglevel=8 earlycon=sbi root=/dev/mtdblock0 ro rootfstype=squashfs";
+ bootargs = "console=ttyS0,2000000 loglevel=8 earlycon=sbi root=/dev/mmcblk0p2 rootwait rootfstype=ext4";
+ bootargs = "console=ttyS0,2000000 loglevel=8 earlycon=sbi root=PARTLABEL=rootfs rootwait rootfstype=ext4";
linux,initrd-start = <0x0 0x52000000>;
linux,initrd-end = <0x0 0x52941784>;
};

View file

@ -0,0 +1,247 @@
From 21dd2b6821d171463407a77536ea8044dc64bbeb Mon Sep 17 00:00:00 2001
From: Allen Martin <armartin@gmail.com>
Date: Fri, 20 Jan 2023 19:42:33 -0800
Subject: [PATCH 20/21] tty: serial: bflb_uart: fix leaked ISR registration
-call devm_free_irq() in shutdown to release ISR registered in
startup.
-change many functions to take driver private bflb_uart_port *
instead of serial_core uart_port *
-add to_bflb_uart_port() to assist with above
-switch to using uart_port_tx_limited() serial_core helper
which is the preferred way to do transmission instead of
accessing serial_core xmit buffer directly
---
drivers/tty/serial/bflb_uart.c | 133 ++++++++++++++++++++-------------
1 file changed, 79 insertions(+), 54 deletions(-)
diff --git a/drivers/tty/serial/bflb_uart.c b/drivers/tty/serial/bflb_uart.c
index b091ad7a891a..5911f489959c 100644
--- a/drivers/tty/serial/bflb_uart.c
+++ b/drivers/tty/serial/bflb_uart.c
@@ -82,12 +82,17 @@
#define BFLB_UART_MAXPORTS 8
#define BFLB_UART_BAUD 2000000
#define BFLB_UART_RX_FIFO_TH 7
+#define BFLB_UART_TX_FIFO_DEPTH 32
struct bflb_uart_port {
struct uart_port port;
struct clk *clk;
};
+#define to_bflb_uart_port(p) (container_of((p), \
+ struct bflb_uart_port, \
+ port))
+
static struct bflb_uart_port *bflb_uart_ports[BFLB_UART_MAXPORTS];
static inline u32 rdl(struct uart_port *port, u32 reg)
@@ -227,91 +232,104 @@ static void bflb_uart_set_termios(struct uart_port *port,
spin_unlock_irqrestore(&port->lock, flags);
}
-static void bflb_uart_rx_chars(struct uart_port *port)
+static void bflb_uart_rx_chars(struct bflb_uart_port *bp)
{
unsigned char ch, flag;
unsigned long status;
- while ((status = rdl(port, UART_FIFO_CONFIG_1)) & UART_RX_FIFO_CNT_MSK) {
- ch = rdl(port, UART_FIFO_RDATA) & UART_FIFO_RDATA_MSK;
+ while ((status = rdl(&bp->port, UART_FIFO_CONFIG_1)) & UART_RX_FIFO_CNT_MSK) {
+ ch = rdl(&bp->port, UART_FIFO_RDATA) & UART_FIFO_RDATA_MSK;
flag = TTY_NORMAL;
- port->icount.rx++;
+ bp->port.icount.rx++;
- if (uart_handle_sysrq_char(port, ch))
+ if (uart_handle_sysrq_char(&bp->port, ch))
continue;
- uart_insert_char(port, 0, 0, ch, flag);
+ uart_insert_char(&bp->port, 0, 0, ch, flag);
}
- spin_unlock(&port->lock);
- tty_flip_buffer_push(&port->state->port);
- spin_lock(&port->lock);
+ spin_unlock(&bp->port.lock);
+ tty_flip_buffer_push(&bp->port.state->port);
+ spin_lock(&bp->port.lock);
}
-static void bflb_uart_tx_chars(struct uart_port *port)
+/**
+ * bflb_uart_txfifo_space() - How much space is left int the TX FIFO?
+ * @bp: pointer to a struct bflb_uart_port
+ *
+ * Read the transmit FIFO count to find out how much space is left
+ *
+ * Returns: UART_TX_FIFO_CNT - count of space left in the TX FIFO
+ */
+static int bflb_uart_txfifo_space(struct bflb_uart_port *bp)
{
- struct circ_buf *xmit = &port->state->xmit;
- unsigned int pending, count;
+ return (rdl(&bp->port, UART_FIFO_CONFIG_1)
+ & UART_TX_FIFO_CNT_MSK) >> UART_TX_FIFO_CNT_SFT;
+}
- if (port->x_char) {
- /* Send special char - probably flow control */
- wrl(port, UART_FIFO_WDATA, port->x_char);
- port->x_char = 0;
- port->icount.tx++;
- return;
- }
+/**
+ * bflb_uart_tx_char() - enqueue a byte to transmit onto the TX FIFO
+ * @bp: pointer to a struct bflb_uart_port
+ * @ch: character to transmit
+ *
+ * Enqueue a byte @ch onto the transmit FIFO, given a pointer @bp to the
+ * struct bflb_uart_port * to transmit on.
+ *
+ * Context: Any context.
+ */
+static void bflb_uart_tx_char(struct bflb_uart_port *bp, int ch)
+{
+ wrl(&bp->port, UART_FIFO_WDATA, ch);
+}
- pending = uart_circ_chars_pending(xmit);
- if (pending > 0) {
- count = (rdl(port, UART_FIFO_CONFIG_1) &
- UART_TX_FIFO_CNT_MSK) >> UART_TX_FIFO_CNT_SFT;
- if (count > pending)
- count = pending;
- if (count > 0) {
- pending -= count;
- while (count--) {
- wrl(port, UART_FIFO_WDATA, xmit->buf[xmit->tail]);
- xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
- port->icount.tx++;
- }
- if (pending < WAKEUP_CHARS)
- uart_write_wakeup(port);
- }
- }
+/**
+ * bflb_uart_tx_chars() - enqueue multiple bytes onto the TX FIFO
+ * @bp: pointer to a struct bflb_uart_port
+ *
+ * Transfer up to a TX FIFO size's worth of characters from the Linux serial
+ * transmit buffer to the BFLB UART TX FIFO.
+ *
+ * Context: Any context. Expects @bp->port.lock to be held by caller.
+ */
+static void bflb_uart_tx_chars(struct bflb_uart_port *bp)
+{
+ u8 ch;
- if (pending == 0)
- bflb_uart_stop_tx(port);
+ uart_port_tx_limited(&bp->port, ch, BFLB_UART_TX_FIFO_DEPTH,
+ bflb_uart_txfifo_space(bp),
+ bflb_uart_tx_char(bp, ch),
+ ({}));
}
static irqreturn_t bflb_uart_interrupt(int irq, void *data)
{
- struct uart_port *port = data;
+ struct bflb_uart_port *bp = data;
u32 isr, val;
- isr = rdl(port, UART_INT_STS);
- wrl(port, UART_INT_CLEAR, isr);
+ isr = rdl(&bp->port, UART_INT_STS);
+ wrl(&bp->port, UART_INT_CLEAR, isr);
- isr &= ~rdl(port, UART_INT_MASK);
+ isr &= ~rdl(&bp->port, UART_INT_MASK);
- spin_lock(&port->lock);
+ spin_lock(&bp->port.lock);
if (isr & UART_URX_FER_INT) {
/* RX FIFO error interrupt */
- val = rdl(port, UART_FIFO_CONFIG_0);
+ val = rdl(&bp->port, UART_FIFO_CONFIG_0);
if (val & UART_RX_FIFO_OVERFLOW)
- port->icount.overrun++;
+ bp->port.icount.overrun++;
val |= UART_RX_FIFO_CLR;
- wrl(port, UART_FIFO_CONFIG_0, val);
+ wrl(&bp->port, UART_FIFO_CONFIG_0, val);
}
if (isr & (UART_URX_FIFO_INT | UART_URX_RTO_INT)) {
- bflb_uart_rx_chars(port);
+ bflb_uart_rx_chars(bp);
}
if (isr & (UART_UTX_FIFO_INT | UART_UTX_END_INT)) {
- bflb_uart_tx_chars(port);
+ bflb_uart_tx_chars(bp);
}
- spin_unlock(&port->lock);
+ spin_unlock(&bp->port.lock);
return IRQ_RETVAL(isr);
}
@@ -335,19 +353,22 @@ static void bflb_uart_config_port(struct uart_port *port, int flags)
static int bflb_uart_startup(struct uart_port *port)
{
unsigned long flags;
- int ret;
u32 val;
+ struct bflb_uart_port *bp = to_bflb_uart_port(port);
+ int ret;
+
+ dev_dbg(port->dev, "startup %s\n", port->name);
+
+ spin_lock_irqsave(&port->lock, flags);
ret = devm_request_irq(port->dev, port->irq, bflb_uart_interrupt,
- IRQF_SHARED, port->name, port);
+ IRQF_SHARED, port->name, bp);
if (ret) {
dev_err(port->dev, "fail to request serial irq %d, ret=%d\n",
port->irq, ret);
return ret;
}
- spin_lock_irqsave(&port->lock, flags);
-
val = rdl(port, UART_INT_MASK);
val |= 0xfff;
wrl(port, UART_INT_MASK, val);
@@ -383,10 +404,14 @@ static int bflb_uart_startup(struct uart_port *port)
static void bflb_uart_shutdown(struct uart_port *port)
{
unsigned long flags;
+ struct bflb_uart_port *bp = to_bflb_uart_port(port);
+
+ dev_dbg(port->dev, "shutdown %s\n", port->name);
spin_lock_irqsave(&port->lock, flags);
/* mask all interrupts now */
wrl(port, UART_INT_MASK, UART_UTX_END_INT | UART_URX_END_INT);
+ devm_free_irq(port->dev, port->irq, bp);
spin_unlock_irqrestore(&port->lock, flags);
}
@@ -589,7 +614,7 @@ static int bflb_uart_probe(struct platform_device *pdev)
port->line = index;
port->type = PORT_BFLB;
port->iotype = UPIO_MEM;
- port->fifosize = 32;
+ port->fifosize = BFLB_UART_TX_FIFO_DEPTH;
port->ops = &bflb_uart_ops;
port->flags = UPF_BOOT_AUTOCONF;
port->dev = &pdev->dev;
--
2.25.1

View file

@ -0,0 +1,31 @@
From 83dd2f89365b55df3901da4ecabeb38cdff102f5 Mon Sep 17 00:00:00 2001
From: Allen Martin <armartin@gmail.com>
Date: Sat, 21 Jan 2023 03:35:04 -0800
Subject: [PATCH 21/21] mmc: sdhci-bflb: remove unnecessary quirks
Remove quirks that were added during bringup but are not required.
This will enable DMA and ADMA on sdcard.
---
drivers/mmc/host/sdhci-bflb.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/mmc/host/sdhci-bflb.c b/drivers/mmc/host/sdhci-bflb.c
index aacf234387af..1e590a151c04 100644
--- a/drivers/mmc/host/sdhci-bflb.c
+++ b/drivers/mmc/host/sdhci-bflb.c
@@ -55,11 +55,7 @@ static const struct sdhci_pltfm_data sdhci_bflb_pdata = {
.quirks = SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER |
SDHCI_QUIRK_NO_BUSY_IRQ |
SDHCI_QUIRK_BROKEN_TIMEOUT_VAL |
- SDHCI_QUIRK_BROKEN_DMA |
- SDHCI_QUIRK_BROKEN_ADMA |
- SDHCI_QUIRK_BROKEN_CARD_DETECTION |
- SDHCI_QUIRK_INVERTED_WRITE_PROTECT |
- SDHCI_QUIRK_NO_HISPD_BIT,
+ SDHCI_QUIRK_INVERTED_WRITE_PROTECT,
};
static int sdhci_bflb_probe(struct platform_device *pdev)
--
2.25.1

View file

@ -22,7 +22,7 @@ BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_BOUFFALO_BR_PATH)/board/pine64/ox64/rootfs-ov
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_BOUFFALO_BR_PATH)/board/pine64/ox64/post-build.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="v6.2-rc2"
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="v6.2-rc5"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_BOUFFALO_BR_PATH)/board/pine64/ox64/linux_defconfig"
BR2_LINUX_KERNEL_LZ4=y

View file

@ -22,7 +22,7 @@ BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_BOUFFALO_BR_PATH)/board/pine64/ox64/rootfs-ov
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_BOUFFALO_BR_PATH)/board/pine64/ox64/post-build.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="v6.2-rc2"
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="v6.2-rc5"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_BOUFFALO_BR_PATH)/board/pine64/ox64/linux_defconfig"
BR2_LINUX_KERNEL_LZ4=y