summaryrefslogtreecommitdiff
path: root/recipes-kernel/vizzini
diff options
context:
space:
mode:
authorMykyta Dorokhin <mykyta.dorokhin@globallogic.com>2021-01-28 13:33:11 +0200
committerMykyta Dorokhin <mykyta.dorokhin@globallogic.com>2021-01-28 13:33:11 +0200
commit0b39a5c555fc0dde4ad909891888dc952b6ed831 (patch)
treeb2180e99fbfa5e76989106b55d38193c9f59e5a7 /recipes-kernel/vizzini
parentcbf484292c7d15261c3dbde44e764bdb5e989d4b (diff)
downloadmeta-multitech-atmel-0b39a5c555fc0dde4ad909891888dc952b6ed831.tar.gz
meta-multitech-atmel-0b39a5c555fc0dde4ad909891888dc952b6ed831.tar.bz2
meta-multitech-atmel-0b39a5c555fc0dde4ad909891888dc952b6ed831.zip
linux 5.4: vizzini: fix "transfer buffer is on stack" backtrace
The following backtrace is caused by original vizzini-1.1-enable-cts.patch WARNING: CPU: 0 PID: 1030 at drivers/usb/core/hcd.c:1495 usb_hcd_map_urb_for_dma+0x3c0/0x480 transfer buffer is on stack Modules linked in: mts_io(O) xt_time xt_tcpudp xt_state xt_set xt_recent xt_policy xt_nat xt_multiport xt_mark xt_mac xt_limit xt_l2tp xt_iprange xt_hl xt_hashlimit xt_esp ip6t_ipv6header ip6t_hbh ip6t_frag ip6t_eui64 ip6t_ah ip6t_SYNPROXY nf_synproxy_core ip6t_REJECT nf_reject_ipv6 ip6t_NPT x_tables ip6_vti ip6_gre ip6_tunnel dns_resolver CPU: 0 PID: 1030 Comm: gpsctl Tainted: G O 5.4.81 #1 Hardware name: Atmel AT91SAM9 [<c000ffc4>] (unwind_backtrace) from [<c000d4c8>] (show_stack+0x10/0x14) [<c000d4c8>] (show_stack) from [<c00195c8>] (__warn+0xb8/0xcc) [<c00195c8>] (__warn) from [<c0019644>] (warn_slowpath_fmt+0x68/0x7c) [<c0019644>] (warn_slowpath_fmt) from [<c036ed40>] (usb_hcd_map_urb_for_dma+0x3c0/0x480) [<c036ed40>] (usb_hcd_map_urb_for_dma) from [<c036fe28>] (usb_hcd_submit_urb+0x8c4/0x940) [<c036fe28>] (usb_hcd_submit_urb) from [<c03725e4>] (usb_start_wait_urb+0x44/0x130) [<c03725e4>] (usb_start_wait_urb) from [<c037276c>] (usb_control_msg+0x9c/0xd0) [<c037276c>] (usb_control_msg) from [<bf096528>] (vizzini_get_reg+0x4c/0x60 [vizzini]) [<bf096528>] (vizzini_get_reg [vizzini]) from [<bf0967e4>] (xr21v141x_tty_set_termios+0x130/0x344 [vizzini]) [<bf0967e4>] (xr21v141x_tty_set_termios [vizzini]) from [<c0285598>] (tty_set_termios+0x168/0x1e0) [<c0285598>] (tty_set_termios) from [<c0285c70>] (set_termios+0x258/0x2ec) [<c0285c70>] (set_termios) from [<c028601c>] (tty_mode_ioctl+0x1c4/0x424) [<c028601c>] (tty_mode_ioctl) from [<c0280f14>] (tty_ioctl+0x90c/0x980) [<c0280f14>] (tty_ioctl) from [<c00e45d0>] (vfs_ioctl+0x24/0x3c) [<c00e45d0>] (vfs_ioctl) from [<c00e4eb0>] (do_vfs_ioctl+0x94/0x6f4) [<c00e4eb0>] (do_vfs_ioctl) from [<c00e5560>] (ksys_ioctl+0x50/0x68) [<c00e5560>] (ksys_ioctl) from [<c0009000>] (ret_fast_syscall+0x0/0x50) Exception stack(0xc5ce1fa8 to 0xc5ce1ff0) 1fa0: 00000000 00000003 00000003 00005402 beeb8c04 00000000 1fc0: 00000000 00000003 000121d0 00000036 00000000 00000000 b6fe4fa4 beeb8c74 1fe0: 00000010 beeb8c00 00000000 b6e1e890
Diffstat (limited to 'recipes-kernel/vizzini')
-rw-r--r--recipes-kernel/vizzini/vizzini-1.1/vizzini-1.1-enable-cts-v2.patch86
-rw-r--r--recipes-kernel/vizzini/vizzini_1.1.bb2
2 files changed, 87 insertions, 1 deletions
diff --git a/recipes-kernel/vizzini/vizzini-1.1/vizzini-1.1-enable-cts-v2.patch b/recipes-kernel/vizzini/vizzini-1.1/vizzini-1.1-enable-cts-v2.patch
new file mode 100644
index 0000000..abb5781
--- /dev/null
+++ b/recipes-kernel/vizzini/vizzini-1.1/vizzini-1.1-enable-cts-v2.patch
@@ -0,0 +1,86 @@
+From 7cb3a2e17bde4d3491e786a6c1790bc3c98c2f66 Mon Sep 17 00:00:00 2001
+From: Mykyta Dorokhin <mykyta.dorokhin@globallogic.com>
+Date: Thu, 28 Jan 2021 13:02:08 +0200
+Subject: [PATCH] vizzini-1.1-enable-cts-v2
+
+vizzini-1.1-enable-cts-v2.patch: Replaces vizzini-1.1-enable-cts.patch The change fixes the following backtrace triggered by the original patch:
+
+------------[ cut here ]------------
+WARNING: CPU: 0 PID: 1078 at drivers/usb/core/hcd.c:1495 usb_hcd_map_urb_for_dma+0x3c0/0x480
+transfer buffer is on stack
+Modules linked in: mts_io(O) xt_time xt_tcpudp xt_state xt_set xt_recent xt_policy xt_nat xt_multiport xt_mark xt_mac xt_limit xt_l2tp xt_iprange xt_hl xt_hashlimit xt_esh
+ ip6t_ipv6header ip6t_hbh ip6t_frag ip6t_eui64 ip6t_ah ip6t_SYNPROXY nf_synproxy_core ip6t_REJECT nf_reject_ipv6 ip6t_NPT x_tables ip6_vti ip6_gre ip6_tunnel dns_resolvero
+CPU: 0 PID: 1078 Comm: gpsctl Tainted: G O 5.4.81 #1
+Hardware name: Atmel AT91SAM9
+[<c000ffc4>] (unwind_backtrace) from [<c000d4c8>] (show_stack+0x10/0x14)
+[<c000d4c8>] (show_stack) from [<c00195c8>] (__warn+0xb8/0xcc)
+[<c00195c8>] (__warn) from [<c0019644>] (warn_slowpath_fmt+0x68/0x7c)
+[<c0019644>] (warn_slowpath_fmt) from [<c036ed40>] (usb_hcd_map_urb_for_dma+0x3c0/0x480)
+[<c036ed40>] (usb_hcd_map_urb_for_dma) from [<c036fe28>] (usb_hcd_submit_urb+0x8c4/0x940)
+[<c036fe28>] (usb_hcd_submit_urb) from [<c03725e4>] (usb_start_wait_urb+0x44/0x130)
+[<c03725e4>] (usb_start_wait_urb) from [<c037276c>] (usb_control_msg+0x9c/0xd0)
+[<c037276c>] (usb_control_msg) from [<bf0f1528>] (vizzini_get_reg+0x4c/0x60 [vizzini])
+[<bf0f1528>] (vizzini_get_reg [vizzini]) from [<bf0f17e4>] (xr21v141x_tty_set_termios+0x130/0x344 [vizzini])
+[<bf0f17e4>] (xr21v141x_tty_set_termios [vizzini]) from [<c0285598>] (tty_set_termios+0x168/0x1e0)
+[<c0285598>] (tty_set_termios) from [<c0285c70>] (set_termios+0x258/0x2ec)
+[<c0285c70>] (set_termios) from [<c028601c>] (tty_mode_ioctl+0x1c4/0x424)
+[<c028601c>] (tty_mode_ioctl) from [<c0280f14>] (tty_ioctl+0x90c/0x980)
+[<c0280f14>] (tty_ioctl) from [<c00e45d0>] (vfs_ioctl+0x24/0x3c)
+[<c00e45d0>] (vfs_ioctl) from [<c00e4eb0>] (do_vfs_ioctl+0x94/0x6f4)
+[<c00e4eb0>] (do_vfs_ioctl) from [<c00e5560>] (ksys_ioctl+0x50/0x68)
+[<c00e5560>] (ksys_ioctl) from [<c0009000>] (ret_fast_syscall+0x0/0x50)
+Exception stack(0xc62cbfa8 to 0xc62cbff0)
+bfa0: 00000000 00000003 00000003 00005402 becb1c04 00000000
+bfc0: 00000000 00000003 000121d0 00000036 00000000 00000000 b6f85fa4 becb1c74
+bfe0: 00000010 becb1c00 00000000 b6dbf890
+---[ end trace ac4b5bc1fe01b267 ]---
+---
+ vizzini.c | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+diff --git a/vizzini.c b/vizzini.c
+index 9595ba3..326a1bd 100644
+--- a/vizzini.c
++++ b/vizzini.c
+@@ -61,6 +61,9 @@
+ #define DRIVER_AUTHOR "Ravi Reddy"
+ #define DRIVER_DESC "Exar USB UART Driver for XR21V141x "
+
++#define UART_PIN_RTS 0x020
++#define UART_GPIO_DIR 0x01b
++
+ static struct usb_driver xr21v141x_driver;
+ static struct tty_driver *xr21v141x_tty_driver;
+ static struct xr21v141x *xr21v141x_table[XR21V141X_TTY_MINORS];
+@@ -1236,6 +1239,28 @@ static void xr21v141x_tty_set_termios(struct tty_struct *tty,
+ vizzini_set_reg(xr21v141x, block, UART_FLOW, flow);
+ vizzini_set_reg(xr21v141x, block, UART_GPIO_MODE, gpio_mode);
+
++ /* if flow control hasn't been turned on, enable RTS for modem-like functionality */
++ if (flow == UART_FLOW_MODE_NONE) {
++ char value;
++ void *buf = kmalloc(1, GFP_KERNEL);
++
++ if (!buf) {
++ dev_err(&xr21v141x->control->dev, "%s - Cannot allocate buffer.\n", __func__);
++ }
++ else {
++ vizzini_get_reg(xr21v141x, block, UART_GPIO_DIR, buf);
++ memcpy(&value, buf, 1);
++ value |= UART_PIN_RTS;
++ vizzini_set_reg(xr21v141x, block, UART_GPIO_DIR, value);
++
++ vizzini_get_reg(xr21v141x, block, UART_GPIO_CLR, buf);
++ memcpy(&value, buf, 1);
++ value |= UART_PIN_RTS;
++ vizzini_set_reg(xr21v141x, block, UART_GPIO_CLR, value);
++ kfree(buf);
++ }
++ }
++
+ if (xr21v141x->trans9) {
+ /* Turn on wide mode if we're 9-bit transparent. */
+ vizzini_set_reg(xr21v141x, EPLOCALS_REG_BLOCK, (block * MEM_EP_LOCALS_SIZE) + EP_WIDE_MODE, 1);
+--
+1.9.1
+
diff --git a/recipes-kernel/vizzini/vizzini_1.1.bb b/recipes-kernel/vizzini/vizzini_1.1.bb
index 8dc75f2..0cd1c5e 100644
--- a/recipes-kernel/vizzini/vizzini_1.1.bb
+++ b/recipes-kernel/vizzini/vizzini_1.1.bb
@@ -3,7 +3,7 @@ PR = "r1.1${KERNEL_MODULE_PACKAGE_SUFFIX}"
SRC_URI += "file://xr21v141x-lnx3.10-3.11.tar.gz \
- file://vizzini-1.1-enable-cts.patch \
+ file://vizzini-1.1-enable-cts-v2.patch \
file://vizzini-1.1-rs485.patch \
"
S = "${WORKDIR}/xr21v141x-lnx3.10-3.11"