summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-03-19drivers: rkflash: support 8KB page size slc nandJon Lin
comfirm in MT29F16G08ABABA Change-Id: I6b1179e7e835b77176aaa0292b162ab08bb38fb7 Signed-off-by: Jon Lin <jon.lin@rock-chips.com>
2019-03-19arm64: dts: rockchip: add dummy i2s sound for rk3399 sapphire excavatorXiaotan Luo
Change-Id: Ic7a9437eee6d9d12d25ce7fb1171faf1624d3681 Signed-off-by: Xiaotan Luo <lxt@rock-chips.com>
2019-03-19ASoC: codec: dummy-codec: add setting mclkXiaotan Luo
Many devices require MCLK to work, So add mclk Change-Id: I666e46c8968330afd81506d0c64769b59ad0837d Signed-off-by: Xiaotan Luo <lxt@rock-chips.com>
2019-03-19media: spi: RK1608: support no sensor connect to preispHu Kejun
To support preisp post-processing and camera hal1, let driver probe ok when no sensor device is connected. Change-Id: I1830420f448b47a0bd327ee3950da0eb7af8d3fb Signed-off-by: Hu Kejun <william.hu@rock-chips.com>
2019-03-19dt-bindings: display: media-bus-format: Sync with ↵Sandy Huang
include/uapi/linux/media-bus-format.h Change-Id: I1da14bc81a8652dcac5f0b85035f8f1bf6e71bfe Signed-off-by: Sandy Huang <hjc@rock-chips.com>
2019-03-19drm/rockchip: rgb: Add support srgb and srgb dummy modeSandy Huang
Change-Id: Ie5942b90dccec5cec74d1f1f2cbef835d95bdfd9 Signed-off-by: Sandy Huang <hjc@rock-chips.com>
2019-03-19drm/rockchip: vop: Add support srgb and srgb dummy modeSandy Huang
Change-Id: I31892fe22db329deaca8d9e1eb4085d530b65d6f Signed-off-by: Sandy Huang <hjc@rock-chips.com>
2019-03-19media-bus: Add SRGB888 media bus formatSandy Huang
The output timing described at [1], focus at s888 mode and s888 dummy mode: [1] https://patchwork.kernel.org/patch/9992241/ Change-Id: I1bcc6d64ede243d89807acc7e842bcc7fd120c26 Signed-off-by: Sandy Huang <hjc@rock-chips.com>
2019-03-19init: support init ramfs asyncLiao Huaping
If enable ramfs function, init ramfs async, can reduce kernel init time. Change-Id: I95d8ca6d8b9c4e9c738c635c5ee56391cbbe7c16 Signed-off-by: Liao Huaping <huaping.liao@rock-chips.com> Signed-off-by: Tao Huang <huangtao@rock-chips.com>
2019-03-18media: i2c: fix compile errorHu Kejun
fix the following error on RK1808. error: implicit declaration of function 'kzalloc' [-Werror=implicit-function-declaration] inf = kzalloc(sizeof(*inf), GFP_KERNEL); error: implicit declaration of function 'kfree' [-Werror=implicit-function-declaration] kfree(inf); Change-Id: Ie46828b03a45cc523b8503fb62caeccee165142f Signed-off-by: Hu Kejun <william.hu@rock-chips.com>
2019-03-18media: i2c: add sensor ov5648Wang Panzhenzhuan
Change-Id: Ia6f19841a86983dd3b8896cf4f598180076ecc7b Signed-off-by: Wang Panzhenzhuan <randy.wang@rock-chips.com>
2019-03-18video/rockchip: rga2 fix the issue of yuv422p format conversionShixiang Zheng
Change-Id: I5213a7be831e7a5166231f4e7179ce4a564a14fb Signed-off-by: Shixiang Zheng <shixiang.zheng@rock-chips.com>
2019-03-15arm64: dts: rockchip: pulldown BT irq gpio for rk3399pro evb v10Longjian Lin
Change-Id: I8c4ac43cd2ff560f2f94a01570ec82b143a7966a Signed-off-by: Longjian Lin <llj@rock-chips.com>
2019-03-15usb: dwc3: rockchip: fix connect fail when force host modeWilliam Wu
The DWC3 rockchip driver provides a sysfs interface "dwc3_mode" to force Peripheral mode or Host mode. It has a problem to force to Host mode when the DWC3 works as Peripheral mode and connects to Host (e.g. PC USB Port). This issue can be reproduced on RK1808 EVB follow these steps: 1. Set dr_mode = "otg" in DTS dwc3 node; 2. Start the system, and connect the RK1808 USB 3.0 to PC USB. 3. Make sure that PC has recognized the USB device, and then force DWC3 to Host mode via "dwc3_mode". echo "host" > /sys/devices/platform/usb/dwc3_mode And plug in an USB 2.0 Device to RK1808 USB 3.0 Port, then we can see the following error log: rockchip-dwc3 usb: Peripheral disconnect timeout rockchip-dwc3 usb: USB unconnectedxhci-hcd xhci-hcd.3.auto: xHCI Host Controller xhci-hcd xhci-hcd.3.auto: new USB bus registered, assigned bus number 3 xhci-hcd xhci-hcd.3.auto: hcc params 0x0220fe64 hci version 0x110 quirks 0x04010010 ... hub 4-0:1.0: USB hub found hub 4-0:1.0: 1 port detected rockchip-dwc3 usb: USB HOST connected rockchip-dwc3 usb: set new mode successfully usb 3-1: new high-speed USB device number 2 using xhci-hcd usb 3-1: new high-speed USB device number 3 using xhci-hcd usb usb3-port1: attempt power cycle usb 3-1: new full-speed USB device number 4 using xhci-hcd usb 3-1: Device not responding to setup address usb 3-1: Device not responding to setup address usb 3-1: device not accepting address 4, error -71 It's because that in this test case, the dr_mode is original otg mode, and the current code only call phy_set_mode() to disconnect the peripheral from PC host if the dr_mode is peripheral mode. This cause dwc3_rockchip_otg_extcon_evt_work() wait peripheral disconnect timeout, and DWC3 fail to do runtime suspend and resume to initialized the DWC3 core register again. This patch call phy_set_mode() to disconnect the peripheral if the current dr_mode is peripheral or otg when force to host mode. Change-Id: I733d364046abcb616cf3d99ed57ab8604a87eef6 Signed-off-by: William Wu <william.wu@rock-chips.com>
2019-03-15usb: dwc3: rockchip: fix NULL pointer dereference in async probeWilliam Wu
In dwc3_rockchip_async_probe(), if it tries to get hcd in peripheral only mode (dr_mode = "peripheral"), a NULL pointer deference will happen. Because hcd only be allocated and initialized in host mode or otg mode. We can reproduce this issue when set dr_mode to peripheral in DTS, like rk3399pro-npu.dtsi, and get the following panic log on RK1808 EVB: Unable to handle kernel NULL pointer dereference at virtual address 000000b0 pgd = ffffff8008b0b000 [000000b0] *pgd=000000007fffe003, *pud=000000007fffe003, *pmd=0000000000000000 Internal error: Oops: 96000005 [#1] PREEMPT SMP Modules linked in: CPU: 0 PID: 29 Comm: kworker/u4:1 Not tainted 4.4.167 #493 Hardware name: Rockchip RK1808 EVB V10 Board (DT) Workqueue: events_unbound async_run_entry_fn task: ffffffc07cd29580 task.stack: ffffffc07cd40000 PC is at dwc3_rockchip_async_probe+0x28/0x1c8 LR is at async_run_entry_fn+0x48/0x100 pc : [<ffffff80083adf5c>] lr : [<ffffff80080b445c>] pstate: 60000045 sp : ffffffc07cd43d10 ... [<ffffff80083adf5c>] dwc3_rockchip_async_probe+0x28/0x1c8 [<ffffff80080b445c>] async_run_entry_fn+0x48/0x100 [<ffffff80080acca8>] process_one_work+0x1b8/0x2b8 [<ffffff80080ad94c>] worker_thread+0x304/0x418 [<ffffff80080b206c>] kthread+0xd0/0xd8 [<ffffff8008082e80>] ret_from_fork+0x10/0x50 Fixes: f2a2b34e456b ("usb: dwc3: rockchip: use async_schedule for initial dwc3") Change-Id: I740936e43bc4ea2b5a056d6d9dcaf18466006f0c Signed-off-by: William Wu <william.wu@rock-chips.com>
2019-03-14arm64: rk3399pro_npu_defconfig: enable npu efuseWeixin Zhou
Change-Id: Ie3b576f3ab8a04c4c81debfd04844b8d2ef7fd73 Signed-off-by: Weixin Zhou <zwx@rock-chips.com>
2019-03-14arm64: dts: rockchip: rk3399pro-npu: add efuse node and infoWeixin Zhou
Change-Id: I1242fc127da02dff5d0e02418c2a540d21983430 Signed-off-by: Liang Chen <cl@rock-chips.com> Signed-off-by: Weixin Zhou <zwx@rock-chips.com>
2019-03-14drm/rockchip: rk618: Correct the bus format settingWyon Bi
Change-Id: I7a22e2436c37a9c990fd7bf76aa6ddfdc1964241 Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
2019-03-13arm64: dts: rockchip: clean up rk809-sound pdm for ↵Xing Zheng
rk3326-evb-ai-va-v11-linux board Change-Id: I6f554b92dc09dec640025f973548d71b89142bec Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
2019-03-13arm64: rk3326_linux_defconfig: clean up sound configXing Zheng
- Remove useless codecs/spdif. - Enable PDM/multi-codecs/multi-dais. Change-Id: I178e9fe186263722bc27d2c26170db24c08d623f Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
2019-03-12arm64: dts: rockchip: rk1808-evb: enable mic array ledLin Huang
Change-Id: Iead1a3bc4695a7209f3d4bd82c49a00b2a8a4940 Signed-off-by: Lin Huang <hl@rock-chips.com>
2019-03-12arm64: dts: rockchip: rk1808-evb: enable pdm on evb boardLin Huang
we use pdm mic as rk1808 evb board default mic array, so enable pdm. Change-Id: I45c4904fe865813185ab327da347d0b52418ef1c Signed-off-by: Lin Huang <hl@rock-chips.com>
2019-03-12arm64: dts: rockchip: px30: add reset properties for watchdogZiyuan Xu
Change-Id: I83a7762c23a4caaa5d3d3cd5e8e79b288f8662b4 Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com>
2019-03-12BACKPORT: watchdog: dw_wdt: add stop watchdog operationOleksij Rempel
The only way of stopping the watchdog is by resetting it. Add the watchdog op for stopping the device and reset if a reset line is provided. At same time WDOG_HW_RUNNING should be remove from dw_wdt_start. As commented by Guenter Roeck: dw_wdt sets WDOG_HW_RUNNING in its open function. Result is that the kref_get() in watchdog_open() won't be executed. But then kref_put() in close will be called since the watchdog now does stop. This causes the imbalance. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Cc: Wim Van Sebroeck <wim@iguana.be> Cc: Guenter Roeck <linux@roeck-us.net> Cc: linux-watchdog@vger.kernel.org Reviewed-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@iguana.be> (cherry picked from commit 1bfe8889380890efe4943d125124f5a7b48571b0) Conflicts: drivers/watchdog/dw_wdt.c Change-Id: Ia6f4e16011b61f78c09b5c54669ddd18678357b9 Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com>
2019-03-12BACKPORT: watchdog: dw_wdt: get reset lines from dtSteffen Trumtrar
The dw_wdt has an external reset line, that can keep the device in reset and therefore rendering it useless and also is the only way of stopping the watchdog once it was started. Get the reset lines for this core from the devicetree. As these lines are optional, use devm_reset_control_get_optional_shared. If the reset line is not specified in the devicetree, the reset framework will just skip deasserting and continue. This way all users of the driver will continue to function without any harm, even if the reset line is not specified in the devicetree. Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de> Cc: linux-watchdog@vger.kernel.org Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@iguana.be> (cherry picked from commit 65a3b6935d920a37820226864eb607467e49ba50) Conflicts: drivers/watchdog/dw_wdt.c Change-Id: Iffbc95931869a5d595a348b6c08ee7da5a1e64e4 Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com>
2019-03-12drivers: rkflash: reduce print tagJon Lin
Warning awaits elimination, it's normal. [ 14.568343] g_gc_superblock_free 260 40 0 2f 2f [ 14.597317] lpa=c779, ppa=130000 [ 14.921319] g_gc_superblock_free 1ee 40 0 3 3 Change-Id: I4b3721310fcd833152ff8a7576c997b2202bc4f0 Signed-off-by: Jon Lin <jon.lin@rock-chips.com>
2019-03-12arm64: dts: rk3308: add panic and watchdog boot modeAndy Yan
Change-Id: I3ef0b265b1cabe152961985621336294f88bb1a7 Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
2019-03-12dt-bindings: add BOOT_PANIC and BOOT_WATCHDOGAndy Yan
Change-Id: I66e3d7caa7b8591bd5af8d481ba773f5e38e9471 Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
2019-03-12power: reset: reboot-mode: support parse boot modeAndy Yan
Parse boot mode on system bootup, and export it to userspace by sysfs: sys/kernel/boot_mode Change-Id: I0158fc28f4dae51c798806006e49cead4ce2e923 Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
2019-03-12BACKPORT: watchdog: dw_wdt: Read clock rate only once and validate itGuenter Roeck
Coverity reports: divide_by_zero: In expression readl(dw_wdt->regs + 8) / clk_get_rate(dw_wdt->clk), division by expression clk_get_rate(dw_wdt->clk) which may be zero has undefined behavior. The clock used for the watchdog timer won't change its rate, so read it only once during probe. Also validate it and abort the probe function with an error if it is 0. Cc: Douglas Anderson <dianders@chromium.org> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@iguana.be> (cherry picked from commit c97344f73fdc35b27c7315c5e7c5decd4ce10467) Conflicts: drivers/watchdog/dw_wdt.c [due to missing: f29a72c24ad49 "watchdog: dw_wdt: Convert to use watchdog infrastructure" and local version of: 3024e0d13b0f3 "watchdog: dw_wdt: fix signedness bug in dw_wdt_top_in_seconds()"] Change-Id: Iea745e27224532bf4da560e5952b372289d1c6ae Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
2019-03-12FROMLIST: watchdog: dw: save/restore control and timeout across suspend/resumeBrian Norris
Some platforms lose this state in suspend. It should be safe to do this unconditionally. Signed-off-by: Brian Norris <briannorris@chromium.org> Reviewed-by: Guenter Roeck <linux@roeck-us.net> (am from https://patchwork.kernel.org/patch/10273165/) Conflicts: small context changes BUG=b:74204857 TEST=force watchdog event before/after suspend/resume on kevin and scarlet; check timing Reviewed-on: https://chromium-review.googlesource.com/958089 Commit-Ready: Brian Norris <briannorris@chromium.org> Tested-by: Brian Norris <briannorris@chromium.org> Reviewed-by: Guenter Roeck <groeck@chromium.org> Change-Id: I7a0e4d6c87ed3eeb3c41d9dcff014fd5f7cddef5 Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
2019-03-12FROMLIST: watchdog: dw: RMW the control registerBrian Norris
RK3399 has rst_pulse_length in CONTROL_REG[4:2], determining the length of pulse to issue for system reset. We shouldn't clobber this value, because that might make the system reset ineffective. On RK3399, we're seeing that a value of 000b (meaning 2 cycles) yields an unreliable (partial?) reset, and so we only fully reset after the watchdog fires a second time. If we retain the system default (010b, or 8 clock cycles), then the watchdog reset is much more reliable. Read-modify-write retains the system value and improves reset reliability. Signed-off-by: Brian Norris <briannorris@chromium.org> Reviewed-by: Guenter Roeck <linux@roeck-us.net> (am from https://patchwork.kernel.org/patch/10273163/) Conflicts: core watchdog frameworks were reworked, so this moved from an open() function to a start() function BUG=b:74204857 TEST=force watchdog event before/after suspend/resume on kevin and scarlet; check timing Reviewed-on: https://chromium-review.googlesource.com/958088 Commit-Ready: Brian Norris <briannorris@chromium.org> Tested-by: Brian Norris <briannorris@chromium.org> Reviewed-by: Guenter Roeck <groeck@chromium.org> Change-Id: I18d5ec3604a44a671ba79ceea1821e733bf051fe Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
2019-03-12drm/rockchip: rgb: Implement loader protect callbackWyon Bi
Change-Id: Iffa5b17de436ad26c718725168b5eab11e4ebbfc Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
2019-03-12clk: rockchip: rk3128: mark the hclk_vio_h2p as critical clkWyon Bi
Change-Id: Ib4eb985b1c3aacf6e51d593fcf71cd46e1dc0b82 Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
2019-03-12ARM: dts: rockchip: rk312x-android: set vop-dclk-mode default value to 1Wyon Bi
Fix display abnormal caused by DDR frequency conversion. Change-Id: Iaa3bf6177d42f8ac5f9078b58a138f48d5c1d874 Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
2019-03-12ARM: dts: rockchip: add battery node for rk3128-fireprimeKever Yang
fireprime is using rk818, which need a battery node for fuel gauge, or else the input current will be limit to 500mA. Change-Id: Ie80dbc103d1ac57b704235a9b618b7e9db44c953 Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
2019-03-12ASoC: core: Fix panic when two cards register using the same daiSugar Zhang
This issue was caused by two cards using the same dai(cpu_dai/codec_dai). the second one will fail to register as a card, then will release the same dai resource, leading to the first card crash. [ 79.032274] Unable to handle kernel paging request at virtual address ffffffffffffffe0 [ 79.035543] Hardware name: Rockchip RK3399 Excavator Board edp (Android) (DT) [ 79.036171] task: ffffffc0dd126c00 task.stack: ffffffc0d109c000 [ 79.036717] PC is at dapm_widget_invalidate_output_paths+0x98/0xe0 [ 79.037268] LR is at soc_dapm_dai_stream_event+0x60/0x9c [ 79.184613] Call trace: [ 79.192401] [<ffffff80088e9028>] dapm_widget_invalidate_output_paths+0x98/0xe0 [ 79.193044] [<ffffff80088ea0d0>] soc_dapm_dai_stream_event+0x60/0x9c [ 79.193611] [<ffffff80088eeb9c>] snd_soc_dapm_stream_event+0x44/0x94 [ 79.194175] [<ffffff80088e515c>] snd_soc_suspend+0x23c/0x2fc [ 79.194686] [<ffffff800852d1f0>] platform_pm_suspend+0x38/0x54 [ 79.195208] [<ffffff8008536e88>] dpm_run_callback+0x110/0x1bc [ 79.195726] [<ffffff8008537578>] __device_suspend+0x164/0x2a4 [ 79.196242] [<ffffff80085392b0>] dpm_suspend+0x70/0x338 [ 79.196713] [<ffffff8008539ab0>] dpm_suspend_start+0x64/0x68 [ 79.197226] [<ffffff80080f0b9c>] suspend_devices_and_enter+0x74/0x2d8 [ 79.197800] [<ffffff80080f140c>] pm_suspend+0x60c/0x668 [ 79.198272] [<ffffff80080ef7b4>] state_store+0x50/0x84 [ 79.198734] [<ffffff800839d128>] kobj_attr_store+0x14/0x24 [ 79.199234] [<ffffff8008232fd8>] sysfs_kf_write+0x38/0x50 [ 79.199718] [<ffffff8008232208>] kernfs_fop_write+0x124/0x180 [ 79.200237] [<ffffff80081bf76c>] __vfs_write+0x38/0xfc [ 79.200695] [<ffffff80081bffd4>] vfs_write+0x9c/0x170 [ 79.201153] [<ffffff80081c0a18>] SyS_write+0x5c/0xbc [ 79.201604] [<ffffff80080832f0>] el0_svc_naked+0x24/0x28 [ 79.202079] Code: 54000081 f9408000 d1040000 17ffffef (39406025) [ 79.202693] ---[ end trace dec5980253348a7f ]--- Change-Id: I6bbbeefaa68a7d5dfccc1bba57d61216b4be1035 Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
2019-03-12arm64: dts: rockchip: rk3399-tve1030g: decrease sdio clk to 100MAlex Zhao
Change-Id: I7c3c7bf4b3c720fce366767d4725ea4a82e0652b Signed-off-by: Alex Zhao <zzc@rock-chips.com>
2019-03-11UPSTREAM: usb: dwc2: gadget: Disable enabled HW endpoint in ↵Vahram Aharonyan
dwc2_hsotg_ep_disable Check if endpoint is enabled during dwc2_hsotg_ep_disable() function processing and call dwc2_hsotg_ep_stop_xfr() to disable it and flush associated FIFO. Move dwc2_hsotg_ep_stop_xfr() and dwc2_hsotg_wait_bit_set() functions upper before dwc2_hsotg_ep_enable and dwc2_hsotg_ep_disable function definitions. Change-Id: Ieafe29703e167c72ad8a6aa8e437bd13c395a602 Signed-off-by: Vahram Aharonyan <vahrama@synopsys.com> Signed-off-by: John Youn <johnyoun@synopsys.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Signed-off-by: William Wu <william.wu@rock-chips.com> (cherry picked from commit a4f827714539a7cb76fa1ac55954b184071999eb)
2019-03-11UPSTREAM: usb: dwc2: gadget: Correct dwc2_hsotg_ep_stop_xfr() functionVahram Aharonyan
Correct dwc2_hsotg_ep_stop_xfr() function to follow dwc2 programming guide for setting NAK on specific endpoint, disabling it and flushing corresponding FIFO. Current code does not take into account whether core acts in shared or dedicated FIFO mode, current endpoint is periodic or not. It does not clear EPDISBLD interrupt after programming of DXEPCTL_EPDIS, does not flush shared TX FIFO and tries to clear global out NAK in wrong manner instead of setting DCTL_CGOUTNAK. Change-Id: I4066fab83cf31a6c074a3d4456fdaa8144132926 Signed-off-by: Vahram Aharonyan <vahrama@synopsys.com> Signed-off-by: John Youn <johnyoun@synopsys.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Signed-off-by: William Wu <william.wu@rock-chips.com> (cherry picked from commit ae79dd5dddb6fa4051c96c7f14116ded9e0dbdd7)
2019-03-11arm64: dts: rockchip: rk1808-evb: adjust some regulator configXiaoDong Huang
Poweroff vcc1v8_dvp, vdd1v5_dvp, vccio_sd, vcc3v3_sd in rk809 sleep mode. Change-Id: I3c3194449cd0ed17df84c9c03ad2ae4d2f3f720d Signed-off-by: XiaoDong Huang <derrick.huang@rock-chips.com>
2019-03-11usb: gadget: f_uac2: fix some issues for Windows recognizedWilliam Wu
We find that the UAC2 gadget can't be recognized on Windows 10. It's because that the descriptors of UAC2 doesn't meet the requirements of Windows. According to the USB Audio 2.0 Drivers of Windows [1], if the bmAttributes of OUT-EP in the audio stream interface is set to asynchronous (use USB_ENDPOINT_SYNC_ASYNC), then a feedback endpoint must be implemented in the respective alternate setting of the AS interface. The Windows driver does not support implicit feedback. However, it's difficult to implement the feedback endpoint now. So the patch changes the bmAttributes of OUT-EP to adaptive, and changes the bmAttributes of IN-EP to synchronous at the same time. This patch also sets the wTerminalType of terminal descriptor to microphone and speaker by default. With this patch, we also fix the wTotalLength of the ac_hdr_desc. [1] https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/usb-2-0-audio-drivers Change-Id: I3597d5f321235fcbce56dbfbfe95172d02e58892 Signed-off-by: William Wu <william.wu@rock-chips.com>
2019-03-11UPSTREAM: usb: gadget: f_uac2: disable IN/OUT ep if unusedAndreas Pape
Via p_chmask/c_chmask the user can define whether uac2 shall support playback and/or capture. This has only effect on the created ALSA device, but not on the USB descriptor. This patch adds playback/capture descriptors dependent on that parameter. Conflicts: drivers/usb/gadget/function/f_uac2.c Change-Id: I396b4238e6a8f2b4a32a57780acea4f23dc0c081 Signed-off-by: Andreas Pape <apape@de.adit-jv.com> Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Signed-off-by: William Wu <william.wu@rock-chips.com> (cherry picked from commit 3fa4eaa6c08206b5fa6a8ba49b891d6aab243f52)
2019-03-11UPSTREAM: usb: gadget: u_audio: protect stream runtime fields with stream ↵Vladimir Zapolskiy
spinlock The change protects almost the whole body of u_audio_iso_complete() function by PCM stream lock, this is mainly sufficient to avoid a race between USB request completion and stream termination, the change prevents a possibility of invalid memory access in interrupt context by memcpy(): Unable to handle kernel paging request at virtual address 00004e80 pgd = c0004000 [00004e80] *pgd=00000000 Internal error: Oops: 817 [#1] PREEMPT SMP ARM CPU: 0 PID: 3 Comm: ksoftirqd/0 Tainted: G C 3.14.54+ #117 task: da180b80 ti: da192000 task.ti: da192000 PC is at memcpy+0x50/0x330 LR is at 0xcdd92b0e pc : [<c029ef30>] lr : [<cdd92b0e>] psr: 20000193 sp : da193ce4 ip : dd86ae26 fp : 0000b180 r10: daf81680 r9 : 00000000 r8 : d58a01ea r7 : 2c0b43e4 r6 : acdfb08b r5 : 01a271cf r4 : 87389377 r3 : 69469782 r2 : 00000020 r1 : daf82fe0 r0 : 00004e80 Flags: nzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel Control: 10c5387d Table: 2b70804a DAC: 00000015 Process ksoftirqd/0 (pid: 3, stack limit = 0xda192238) Also added a check for potential !runtime condition, commonly it is done by PCM_RUNTIME_CHECK(substream) in the beginning, however this does not completely prevent from oopses in u_audio_iso_complete(), because the proper protection scheme must be implemented in PCM library functions. An example of *not fixed* oops due to substream->runtime->* dereference by snd_pcm_running(substream) from snd_pcm_period_elapsed(), where substream->runtime is gone while waiting the substream lock: Unable to handle kernel paging request at virtual address 6b6b6b6b pgd = db7e4000 [6b6b6b6b] *pgd=00000000 CPU: 0 PID: 193 Comm: klogd Tainted: G C 3.14.54+ #118 task: db5ac500 ti: db60c000 task.ti: db60c000 PC is at snd_pcm_period_elapsed+0x48/0xd8 [snd_pcm] LR is at snd_pcm_period_elapsed+0x40/0xd8 [snd_pcm] pc : [<>] lr : [<>] psr: 60000193 Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user Control: 10c5387d Table: 2b7e404a DAC: 00000015 Process klogd (pid: 193, stack limit = 0xdb60c238) [<>] (snd_pcm_period_elapsed [snd_pcm]) from [<>] (udc_irq+0x500/0xbbc) [<>] (udc_irq) from [<>] (ci_irq+0x280/0x304) [<>] (ci_irq) from [<>] (handle_irq_event_percpu+0xa4/0x40c) [<>] (handle_irq_event_percpu) from [<>] (handle_irq_event+0x3c/0x5c) [<>] (handle_irq_event) from [<>] (handle_fasteoi_irq+0xc4/0x110) [<>] (handle_fasteoi_irq) from [<>] (generic_handle_irq+0x20/0x30) [<>] (generic_handle_irq) from [<>] (handle_IRQ+0x80/0xc0) [<>] (handle_IRQ) from [<>] (gic_handle_irq+0x3c/0x60) [<>] (gic_handle_irq) from [<>] (__irq_svc+0x44/0x78) Change-Id: I0b0e20f1aaf7c093c7fc198128186cfb637bdbf4 Signed-off-by: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com> [erosca: W/o this patch, with minimal instrumentation [1], I can consistently reproduce BUG: KASAN: use-after-free [2]] [1] Instrumentation to reproduce issue [2]: diff --git a/drivers/usb/gadget/function/u_audio.c b/drivers/usb/gadget/function/u_audio.c index a72295c953bb..bd0b308024fe 100644 --- a/drivers/usb/gadget/function/u_audio.c +++ b/drivers/usb/gadget/function/u_audio.c @@ -16,6 +16,7 @@ #include <sound/core.h> #include <sound/pcm.h> #include <sound/pcm_params.h> +#include <linux/delay.h> #include "u_audio.h" @@ -147,6 +148,8 @@ static void u_audio_iso_complete(struct usb_ep *ep, struct usb_request *req) spin_unlock_irqrestore(&prm->lock, flags); + udelay(500); //delay here to increase probability of parallel activities + /* Pack USB load in ALSA ring buffer */ pending = prm->dma_bytes - hw_ptr; [2] After applying [1], below BUG occurs on Rcar-H3-Salvator-X board: ================================================================== BUG: KASAN: use-after-free in u_audio_iso_complete+0x24c/0x520 [u_audio] Read of size 8 at addr ffff8006cafcc248 by task swapper/0/0 CPU: 0 PID: 0 Comm: swapper/0 Tainted: G WC 4.14.47+ #160 Hardware name: Renesas Salvator-X board based on r8a7795 ES2.0+ (DT) Call trace: [<ffff2000080925ac>] dump_backtrace+0x0/0x364 [<ffff200008092924>] show_stack+0x14/0x1c [<ffff200008f8dbcc>] dump_stack+0x108/0x174 [<ffff2000083c71b8>] print_address_description+0x7c/0x32c [<ffff2000083c78e8>] kasan_report+0x324/0x354 [<ffff2000083c6114>] __asan_load8+0x24/0x94 [<ffff2000021d1b34>] u_audio_iso_complete+0x24c/0x520 [u_audio] [<ffff20000152fe50>] usb_gadget_giveback_request+0x480/0x4d0 [udc_core] [<ffff200001860ab8>] usbhsg_queue_done+0x100/0x130 [renesas_usbhs] [<ffff20000185f814>] usbhsf_pkt_handler+0x1a4/0x298 [renesas_usbhs] [<ffff20000185fb38>] usbhsf_irq_ready+0x128/0x178 [renesas_usbhs] [<ffff200001859cc8>] usbhs_interrupt+0x440/0x490 [renesas_usbhs] [<ffff2000081a0288>] __handle_irq_event_percpu+0x594/0xa58 [<ffff2000081a07d0>] handle_irq_event_percpu+0x84/0x12c [<ffff2000081a0928>] handle_irq_event+0xb0/0x10c [<ffff2000081a8384>] handle_fasteoi_irq+0x1e0/0x2ec [<ffff20000819e5f8>] generic_handle_irq+0x2c/0x44 [<ffff20000819f0d0>] __handle_domain_irq+0x190/0x194 [<ffff20000808177c>] gic_handle_irq+0x80/0xac Exception stack(0xffff200009e97c80 to 0xffff200009e97dc0) 7c80: 0000000000000000 0000000000000000 0000000000000003 ffff200008179298 7ca0: ffff20000ae1c180 dfff200000000000 0000000000000000 ffff2000081f9a88 7cc0: ffff200009eb5960 ffff200009e97cf0 0000000000001600 ffff0400041b064b 7ce0: 0000000000000000 0000000000000002 0000000200000001 0000000000000001 7d00: ffff20000842197c 0000ffff958c4970 0000000000000000 ffff8006da0d5b80 7d20: ffff8006d4678498 0000000000000000 000000126bde0a8b ffff8006d4678480 7d40: 0000000000000000 000000126bdbea64 ffff200008fd0000 ffff8006fffff980 7d60: 00000000495f0018 ffff200009e97dc0 ffff200008b6c4ec ffff200009e97dc0 7d80: ffff200008b6c4f0 0000000020000145 ffff8006da0d5b80 ffff8006d4678498 7da0: ffffffffffffffff ffff8006d4678498 ffff200009e97dc0 ffff200008b6c4f0 [<ffff200008084034>] el1_irq+0xb4/0x12c [<ffff200008b6c4f0>] cpuidle_enter_state+0x818/0x844 [<ffff200008b6c59c>] cpuidle_enter+0x18/0x20 [<ffff20000815f2e4>] call_cpuidle+0x98/0x9c [<ffff20000815f674>] do_idle+0x214/0x264 [<ffff20000815facc>] cpu_startup_entry+0x20/0x24 [<ffff200008fb09d8>] rest_init+0x30c/0x320 [<ffff2000095f1338>] start_kernel+0x570/0x5b0 ---<-snip->--- Fixes: 132fcb460839 ("usb: gadget: Add Audio Class 2.0 Driver") Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Signed-off-by: William Wu <william.wu@rock-chips.com> (cherry picked from commit 56bc61587daadef67712068f251c4ef2e3932d94)
2019-03-11UPSTREAM: usb: gadget: u_audio: remove cached period bytes valueVladimir Zapolskiy
Substream period size potentially can be changed in runtime, however this is not accounted in the data copying routine, the change replaces the cached value with an actual value from substream runtime. As a side effect the change also removes a potential division by zero in u_audio_iso_complete() function, if there is a race with uac_pcm_hw_free(), which sets prm->period_size to 0. Change-Id: Iefa71f6a146c2cec3d7ff9ddec3e289e9e763622 Fixes: 132fcb460839 ("usb: gadget: Add Audio Class 2.0 Driver") Signed-off-by: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com> Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Signed-off-by: William Wu <william.wu@rock-chips.com> (cherry picked from commit 773e53d50e227b0c03d0bb434c1636f6c49c75b2)
2019-03-11UPSTREAM: usb: gadget: u_audio: remove caching of stream buffer parametersVladimir Zapolskiy
There is no necessity to copy PCM stream ring buffer area and size properties to UAC private data structure, these values can be got from substream itself. The change gives more control on substream and avoid stale caching. Change-Id: Ifec5307261a4fd551be54e15ef44e29eaa758096 Fixes: 132fcb460839 ("usb: gadget: Add Audio Class 2.0 Driver") Signed-off-by: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com> Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Signed-off-by: William Wu <william.wu@rock-chips.com> (cherry picked from commit 96afb54ece0ee903d23a7ac04ddc461413b972c4)
2019-03-11UPSTREAM: usb: gadget: u_audio: update hw_ptr in iso_complete after data copiedJoshua Frkuska
In u_audio_iso_complete, the runtime hw_ptr is updated before the data is actually copied over to/from the buffer/dma area. When ALSA uses this hw_ptr, the data may not actually be available to be used. This causes trash/stale audio to play/record. This patch updates the hw_ptr after the data has been copied to avoid this. Change-Id: I22e4479e2978740708be92ce27d8cb61789a7062 Fixes: 132fcb460839 ("usb: gadget: Add Audio Class 2.0 Driver") Signed-off-by: Joshua Frkuska <joshua_frkuska@mentor.com> Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Signed-off-by: William Wu <william.wu@rock-chips.com> (cherry picked from commit 6b37bd78d30c890e575a1bda22978d1d2a233362)
2019-03-11UPSTREAM: usb: gadget: u_audio: fix pcm/card naming in g_audio_setup()Eugeniu Rosca
Fix below smatch (v0.5.0-4443-g69e9094e11c1) warnings: drivers/usb/gadget/function/u_audio.c:607 g_audio_setup() warn: strcpy() 'pcm_name' of unknown size might be too large for 'pcm->name' drivers/usb/gadget/function/u_audio.c:614 g_audio_setup() warn: strcpy() 'card_name' of unknown size might be too large for 'card->driver' drivers/usb/gadget/function/u_audio.c:615 g_audio_setup() warn: strcpy() 'card_name' of unknown size might be too large for 'card->shortname' Below commits performed a similar 's/strcpy/strlcpy/' rework: * v2.6.31 commit 8372d4980fbc ("ALSA: ctxfi - Fix PCM device naming") * v4.14 commit 003d3e70dbeb ("ALSA: ad1848: fix format string overflow warning") * v4.14 commit 6d8b04de87e1 ("ALSA: cs423x: fix format string overflow warning") Change-Id: I4608029dc9d618da2f363d638cd218262eaa2820 Fixes: eb9fecb9e69b ("usb: gadget: f_uac2: split out audio core") Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Signed-off-by: William Wu <william.wu@rock-chips.com> (cherry picked from commit dfa042fa310caa475667b8c38d852f14439e0b01)
2019-03-11UPSTREAM: usb: gadget: f_uac2: fix error handling in afunc_bind (again)Eugeniu Rosca
If usb_ep_autoconfig() fails (i.e. returns a null endpoint descriptor), we expect afunc_bind() to fail (i.e. return a negative error code). However, due to v4.10-rc1 commit f1d3861d63a5 ("usb: gadget: f_uac2: fix error handling at afunc_bind"), afunc_bind() returns zero, telling the caller that it succeeded. This then generates NULL pointer dereference in below scenario on Rcar H3-ES20-Salvator-X target: rcar-gen3:/home/root# modprobe g_audio [ 626.521155] g_audio gadget: afunc_bind:565 Error! [ 626.526319] g_audio gadget: Linux USB Audio Gadget, version: Feb 2, 2012 [ 626.533405] g_audio gadget: g_audio ready rcar-gen3:/home/root# rcar-gen3:/home/root# modprobe -r g_audio [ 728.256707] ================================================================== [ 728.264293] BUG: KASAN: null-ptr-deref in u_audio_stop_capture+0x70/0x268 [u_audio] [ 728.272244] Read of size 8 at addr 00000000000000a0 by task modprobe/2545 [ 728.279309] [ 728.280849] CPU: 0 PID: 2545 Comm: modprobe Tainted: G WC 4.14.47+ #152 [ 728.288778] Hardware name: Renesas Salvator-X board based on r8a7795 ES2.0+ (DT) [ 728.296454] Call trace: [ 728.299151] [<ffff2000080925ac>] dump_backtrace+0x0/0x364 [ 728.304808] [<ffff200008092924>] show_stack+0x14/0x1c [ 728.310081] [<ffff200008f8d5cc>] dump_stack+0x108/0x174 [ 728.315522] [<ffff2000083c77c8>] kasan_report+0x1fc/0x354 [ 728.321134] [<ffff2000083c611c>] __asan_load8+0x24/0x94 [ 728.326600] [<ffff2000021e1618>] u_audio_stop_capture+0x70/0x268 [u_audio] [ 728.333735] [<ffff2000021f8b7c>] afunc_disable+0x44/0x60 [usb_f_uac2] [ 728.340503] [<ffff20000218177c>] usb_remove_function+0x9c/0x210 [libcomposite] [ 728.348060] [<ffff200002183320>] remove_config.isra.2+0x1d8/0x218 [libcomposite] [ 728.355788] [<ffff200002186c54>] __composite_unbind+0x104/0x1f8 [libcomposite] [ 728.363339] [<ffff200002186d58>] composite_unbind+0x10/0x18 [libcomposite] [ 728.370536] [<ffff20000152f158>] usb_gadget_remove_driver+0xc0/0x170 [udc_core] [ 728.378172] [<ffff20000153154c>] usb_gadget_unregister_driver+0x1cc/0x258 [udc_core] [ 728.386274] [<ffff200002180de8>] usb_composite_unregister+0x10/0x18 [libcomposite] [ 728.394116] [<ffff2000021d035c>] audio_driver_exit+0x14/0x28 [g_audio] [ 728.400878] [<ffff200008213ed4>] SyS_delete_module+0x288/0x32c [ 728.406935] Exception stack(0xffff8006cf6c7ec0 to 0xffff8006cf6c8000) [ 728.413624] 7ec0: 0000000006136428 0000000000000800 0000000000000000 0000ffffd706efe8 [ 728.421718] 7ee0: 0000ffffd706efe9 000000000000000a 1999999999999999 0000000000000000 [ 728.429792] 7f00: 000000000000006a 000000000042c078 0000000000000000 0000000000000005 [ 728.437870] 7f20: 0000000000000000 0000000000000000 0000000000000004 0000000000000000 [ 728.445952] 7f40: 000000000042bfc8 0000ffffbc7c8f40 0000000000000000 00000000061363c0 [ 728.454035] 7f60: 0000000006136428 0000000000000000 0000000000000000 0000000006136428 [ 728.462114] 7f80: 000000000042c000 0000ffffd7071448 000000000042c000 0000000000000000 [ 728.470190] 7fa0: 00000000061350c0 0000ffffd7070010 000000000041129c 0000ffffd7070010 [ 728.478281] 7fc0: 0000ffffbc7c8f48 0000000060000000 0000000006136428 000000000000006a [ 728.486351] 7fe0: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 [ 728.494434] [<ffff200008084780>] el0_svc_naked+0x34/0x38 [ 728.499957] ================================================================== [ 728.507801] Unable to handle kernel NULL pointer dereference at virtual address 000000a0 [ 728.517742] Mem abort info: [ 728.520993] Exception class = DABT (current EL), IL = 32 bits [ 728.527375] SET = 0, FnV = 0 [ 728.530731] EA = 0, S1PTW = 0 [ 728.534361] Data abort info: [ 728.537650] ISV = 0, ISS = 0x00000006 [ 728.541863] CM = 0, WnR = 0 [ 728.545167] user pgtable: 4k pages, 48-bit VAs, pgd = ffff8006c6100000 [ 728.552156] [00000000000000a0] *pgd=0000000716a8d003 [ 728.557519] , *pud=00000007116fc003 [ 728.561259] , *pmd=0000000000000000 [ 728.564985] Internal error: Oops: 96000006 [#1] PREEMPT SMP [ 728.570815] Modules linked in: [ 728.574023] usb_f_uac2 [ 728.576560] u_audio [ 728.578827] g_audio(-) [ 728.581361] libcomposite [ 728.584071] configfs [ 728.586428] aes_ce_blk [ 728.588960] sata_rcar [ 728.591421] crypto_simd [ 728.594039] cryptd [ 728.596217] libata [ 728.598396] aes_ce_cipher [ 728.601188] crc32_ce [ 728.603542] ghash_ce [ 728.605896] gf128mul [ 728.608250] aes_arm64 [ 728.610692] scsi_mod [ 728.613046] sha2_ce [ 728.615313] xhci_plat_hcd [ 728.618106] sha256_arm64 [ 728.620811] sha1_ce [ 728.623077] renesas_usbhs [ 728.625869] xhci_hcd [ 728.628243] renesas_usb3 [ 728.630948] sha1_generic [ 728.633670] ravb_streaming(C) [ 728.636814] udc_core [ 728.639168] cpufreq_dt [ 728.641697] rcar_gen3_thermal [ 728.644840] usb_dmac [ 728.647194] pwm_rcar [ 728.649548] thermal_sys [ 728.652165] virt_dma [ 728.654519] mch_core(C) [ 728.657137] pwm_bl [ 728.659315] snd_soc_rcar [ 728.662020] snd_aloop [ 728.664462] snd_soc_generic_card [ 728.667869] snd_soc_ak4613 [ 728.670749] ipv6 [ 728.672768] autofs4 [ 728.675052] CPU: 0 PID: 2545 Comm: modprobe Tainted: G B WC 4.14.47+ #152 [ 728.682973] Hardware name: Renesas Salvator-X board based on r8a7795 ES2.0+ (DT) [ 728.690637] task: ffff8006ced38000 task.stack: ffff8006cf6c0000 [ 728.696814] PC is at u_audio_stop_capture+0x70/0x268 [u_audio] [ 728.702896] LR is at u_audio_stop_capture+0x70/0x268 [u_audio] [ 728.708964] pc : [<ffff2000021e1618>] lr : [<ffff2000021e1618>] pstate: 60000145 [ 728.716620] sp : ffff8006cf6c7a50 [ 728.720154] x29: ffff8006cf6c7a50 [ 728.723760] x28: ffff8006ced38000 [ 728.727272] x27: ffff200008fd7000 [ 728.730857] x26: ffff2000021d2340 [ 728.734361] x25: 0000000000000000 [ 728.737948] x24: ffff200009e94b08 [ 728.741452] x23: 00000000000000a0 [ 728.745052] x22: 00000000000000a8 [ 728.748558] x21: 1ffff000d9ed8f7c [ 728.752142] x20: ffff8006d671a800 [ 728.755646] x19: 0000000000000000 [ 728.759231] x18: 0000000000000000 [ 728.762736] x17: 0000ffffbc7c8f40 [ 728.766320] x16: ffff200008213c4c [ 728.769823] x15: 0000000000000000 [ 728.773408] x14: 0720072007200720 [ 728.776912] x13: 0720072007200720 [ 728.780497] x12: ffffffffffffffff [ 728.784001] x11: 0000000000000040 [ 728.787598] x10: 0000000000001600 [ 728.791103] x9 : ffff8006cf6c77a0 [ 728.794689] x8 : ffff8006ced39660 [ 728.798193] x7 : ffff20000811c738 [ 728.801794] x6 : 0000000000000000 [ 728.805299] x5 : dfff200000000000 [ 728.808885] x4 : ffff8006ced38000 [ 728.812390] x3 : ffff200008fb46e8 [ 728.815976] x2 : 0000000000000007 [ 728.819480] x1 : 3ba68643e7431500 [ 728.823066] x0 : 0000000000000000 [ 728.826574] Process modprobe (pid: 2545, stack limit = 0xffff8006cf6c0000) [ 728.833704] Call trace: [ 728.836292] Exception stack(0xffff8006cf6c7910 to 0xffff8006cf6c7a50) [ 728.842987] 7900: 0000000000000000 3ba68643e7431500 [ 728.851084] 7920: 0000000000000007 ffff200008fb46e8 ffff8006ced38000 dfff200000000000 [ 728.859173] 7940: 0000000000000000 ffff20000811c738 ffff8006ced39660 ffff8006cf6c77a0 [ 728.867248] 7960: 0000000000001600 0000000000000040 ffffffffffffffff 0720072007200720 [ 728.875323] 7980: 0720072007200720 0000000000000000 ffff200008213c4c 0000ffffbc7c8f40 [ 728.883412] 79a0: 0000000000000000 0000000000000000 ffff8006d671a800 1ffff000d9ed8f7c [ 728.891485] 79c0: 00000000000000a8 00000000000000a0 ffff200009e94b08 0000000000000000 [ 728.899561] 79e0: ffff2000021d2340 ffff200008fd7000 ffff8006ced38000 ffff8006cf6c7a50 [ 728.907636] 7a00: ffff2000021e1618 ffff8006cf6c7a50 ffff2000021e1618 0000000060000145 [ 728.915710] 7a20: 0000000000000008 0000000000000000 0000ffffffffffff 3ba68643e7431500 [ 728.923780] 7a40: ffff8006cf6c7a50 ffff2000021e1618 [ 728.928880] [<ffff2000021e1618>] u_audio_stop_capture+0x70/0x268 [u_audio] [ 728.936032] [<ffff2000021f8b7c>] afunc_disable+0x44/0x60 [usb_f_uac2] [ 728.942822] [<ffff20000218177c>] usb_remove_function+0x9c/0x210 [libcomposite] [ 728.950385] [<ffff200002183320>] remove_config.isra.2+0x1d8/0x218 [libcomposite] [ 728.958134] [<ffff200002186c54>] __composite_unbind+0x104/0x1f8 [libcomposite] [ 728.965689] [<ffff200002186d58>] composite_unbind+0x10/0x18 [libcomposite] [ 728.972882] [<ffff20000152f158>] usb_gadget_remove_driver+0xc0/0x170 [udc_core] [ 728.980522] [<ffff20000153154c>] usb_gadget_unregister_driver+0x1cc/0x258 [udc_core] [ 728.988638] [<ffff200002180de8>] usb_composite_unregister+0x10/0x18 [libcomposite] [ 728.996472] [<ffff2000021d035c>] audio_driver_exit+0x14/0x28 [g_audio] [ 729.003231] [<ffff200008213ed4>] SyS_delete_module+0x288/0x32c [ 729.009278] Exception stack(0xffff8006cf6c7ec0 to 0xffff8006cf6c8000) [ 729.015946] 7ec0: 0000000006136428 0000000000000800 0000000000000000 0000ffffd706efe8 [ 729.024022] 7ee0: 0000ffffd706efe9 000000000000000a 1999999999999999 0000000000000000 [ 729.032099] 7f00: 000000000000006a 000000000042c078 0000000000000000 0000000000000005 [ 729.040172] 7f20: 0000000000000000 0000000000000000 0000000000000004 0000000000000000 [ 729.048263] 7f40: 000000000042bfc8 0000ffffbc7c8f40 0000000000000000 00000000061363c0 [ 729.056337] 7f60: 0000000006136428 0000000000000000 0000000000000000 0000000006136428 [ 729.064411] 7f80: 000000000042c000 0000ffffd7071448 000000000042c000 0000000000000000 [ 729.072484] 7fa0: 00000000061350c0 0000ffffd7070010 000000000041129c 0000ffffd7070010 [ 729.080563] 7fc0: 0000ffffbc7c8f48 0000000060000000 0000000006136428 000000000000006a [ 729.088636] 7fe0: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 [ 729.096733] [<ffff200008084780>] el0_svc_naked+0x34/0x38 [ 729.102259] Code: 9597d1b3 aa1703e0 9102a276 958792b9 (f9405275) [ 729.108617] ---[ end trace 7560c5fa3d100243 ]--- After this patch is applied, the issue is fixed: rcar-gen3:/home/root# modprobe g_audio [ 59.217127] g_audio gadget: afunc_bind:565 Error! [ 59.222329] g_audio ee020000.usb: failed to start g_audio: -19 modprobe: ERROR: could not insert 'g_audio': No such device rcar-gen3:/home/root# modprobe -r g_audio rcar-gen3:/home/root# Change-Id: Ibe9d59519b17fb18ad6b8bb378b2a994ea5e429a Fixes: f1d3861d63a5 ("usb: gadget: f_uac2: fix error handling at afunc_bind") Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Signed-off-by: William Wu <william.wu@rock-chips.com> (cherry picked from commit e87581fe0509020f77ebf0b7c4c1c338c6a4bcf6)
2019-03-11UPSTREAM: usb: gadget: make snd_pcm_hardware constBhumika Goyal
Make this const as it is only used during a copy operation. Done using Coccinelle. Change-Id: I6d5f8855f5a87d2fa36d06f11c1c1788a48c2b3c Signed-off-by: Bhumika Goyal <bhumirks@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: William Wu <william.wu@rock-chips.com> (cherry picked from commit 2ab3c34c9c75331143d67042e826bdcde4d6ab37)