diff options
Diffstat (limited to 'recipes-kernel/vizzini/vizzini-1.1/vizzini-1.1-enable-cts-v2.patch')
-rw-r--r-- | recipes-kernel/vizzini/vizzini-1.1/vizzini-1.1-enable-cts-v2.patch | 86 |
1 files changed, 86 insertions, 0 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 + |