Commit Graph

613812 Commits

Author SHA1 Message Date
Sugar Zhang
97239e32ff arm64: dts: rockchip: Add 'rockchip,grf' property for i2s-tdm
Change-Id: I42f461651f272c2c17ad08599b2b4d16e55b5ce5
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
2018-12-05 18:16:28 +08:00
Sugar Zhang
9d3c30ad8e dt-bindings: sound: Add 'rockchip,grf' for rockchip i2s-tdm
This patch adds 'rockchip,grf' property for rockchip i2s-tdm.

Change-Id: If71fb12ac2d8969f291f69f694e0768427730983
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
2018-12-05 18:16:28 +08:00
Sugar Zhang
91e521d581 ASoC: rockchip: i2s_tdm: Add grf configuration
This patch adds grf configs to fix the clk paths
when used in tx/rx only slave mode.

Change-Id: I704687d86f1e8c25181d1e87e00107560c9e36fe
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
2018-12-05 18:16:28 +08:00
Sugar Zhang
6113767b45 arm: dts: rockchip: add reset properties for i2s
Change-Id: I4c04448a7f1630aec0f0a6e32edbcf9e6669efcb
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
2018-12-05 18:16:28 +08:00
Sugar Zhang
adaf81f4a7 arm64: dts: rockchip: add reset properties for i2s
Change-Id: I1bdc5a417b412d484ba0caccc9e57da6a928de54
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
2018-12-05 18:16:28 +08:00
Sugar Zhang
5af049f8eb ASoC: rockchip: i2s_tdm: Correct some regmap config
When restoring registers during runtime resume, we must not write to
I2S_TXDR which is the transmit FIFO as this queues up a sample to be
output and pushes all of the output channels down by one.

This can be demonstrated with the speaker-test utility:

for i in a b c; do speaker-test -c 2 -s 1; done

which should play a test with through the left speaker three times but if
the I2S hardware starts runtime suspended the first sample will be played
through the right speaker.

Fix this by marking I2S_TXDR as volatile (which also requires marking it
as readable, even though it technically isn't).  This seems to be the
most robust fix, the alternative of giving I2S_TXDR a default value is
more fragile since it does not prevent regcache writing to the register
in all circumstances.

While here, also fix the configuration of I2S_RXDR and I2S_FIFOLR; these
are not writable so they do not suffer from the same problem as I2S_TXDR
but reading from I2S_RXDR does suffer from a similar problem.

Change-Id: Id91d3f54f3fda0e9140c9da162b0dff2c3df067b
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
2018-12-05 18:16:28 +08:00
John Keeping
d83ced5248 UPSTREAM: ASoC: rockchip: i2s: fix playback after runtime resume
When restoring registers during runtime resume, we must not write to
I2S_TXDR which is the transmit FIFO as this queues up a sample to be
output and pushes all of the output channels down by one.

This can be demonstrated with the speaker-test utility:

	for i in a b c; do speaker-test -c 2 -s 1; done

which should play a test through the left speaker three times but if the
I2S hardware starts runtime suspended the first sample will be played
through the right speaker.

Fix this by marking I2S_TXDR as volatile (which also requires marking it
as readable, even though it technically isn't).  This seems to be the
most robust fix, the alternative of giving I2S_TXDR a default value is
more fragile since it does not prevent regcache writing to the register
in all circumstances.

While here, also fix the configuration of I2S_RXDR and I2S_FIFOLR; these
are not writable so they do not suffer from the same problem as I2S_TXDR
but reading from I2S_RXDR does suffer from a similar problem.

Change-Id: I47e67b51f8251486bb5e937619fdec89fc055f14
Fixes: f0447f6cbb ("ASoC: rockchip: i2s: restore register during runtime_suspend/resume cycle", 2016-09-07)
Signed-off-by: John Keeping <john@metanate.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
(cherry picked from commit c66234cfed)
2018-12-05 18:16:28 +08:00
Sugar Zhang
1c84facc5b dt-bindings: sound: rockchip-i2s: Add reset property
This patch adds the reset property for reset mechanism.

Change-Id: Ia60cc1f140860613b35ec42d703094bff8b46893
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
2018-12-05 18:16:28 +08:00
Sugar Zhang
130c994af3 ASoC: rockchip: i2s: Add reset mechanism
This patch brings i2s back to normal by resetting i2s m/h
logic if i2s' clear operation is failed.

Change-Id: I2fd47039b522ac89499b4a2912d5ffb7a469e75e
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
2018-12-05 18:16:28 +08:00
Sugar Zhang
013ace76f0 ASoC: rockchip: i2s_tdm: Add reset mechanism
This patch brings i2s back to normal by resetting i2s tx/rx
relative logic if i2s' clear operation is failed.

Change-Id: I52e4713d26f781962278802bd1f9bbce3fe4b751
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
2018-12-05 18:16:28 +08:00
Herman Chen
dc6c729aa1 video: rockchip: vpu: Add clean cache for rkvdec
Add different clean cache operation for vpu / hevc / rkvdec.

Change-Id: I22f89d7648338f9788f5f2fff26b4ce815865809
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2018-12-05 15:25:27 +08:00
Elaine Zhang
808af4ff0f arm64: dts: rockchip: add pvtm clk node for rk3368
Change-Id: Ieca322f3fdfcf76ccf28642c6c07a46d4213c1d7
Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
2018-12-05 11:27:52 +08:00
Elaine Zhang
6950dffaa3 clk: rockchip: add support for pvtm clk
add pvtm 32K internal clock setting and select enable.

Change-Id: I60225d29e16c5b96f285623260bea475c78a026a
Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
2018-12-05 11:26:45 +08:00
Elaine Zhang
ed0c1b9bc9 dt-bindings: clock: Binding documentation for Rockchip pvtm 32k clock
Change-Id: Ic8ff577553bf9267f8b4e7ec72974a61d035be2d
Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
2018-12-05 11:26:39 +08:00
Wyon Bi
f484097e4b drm/bridge: lt8912: disabled LP mode in HBP region
Change-Id: I5d40e835e2df47c4ef4acbe2471acd79be66771a
Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
2018-12-04 17:33:45 +08:00
Hu Kejun
7b45e7e687 media: rockchip: isp1: change isp fmt&size by default sensor fmt
Change-Id: I5b28a783fff3ec06fd6b6bbbb3905340e46b2d3b
Signed-off-by: Hu Kejun <william.hu@rock-chips.com>
2018-12-04 16:41:51 +08:00
Hu Kejun
e6a1c2bd17 media: i2c: gc0312: fix broken pixels of two columns
Change-Id: I2efde13ec63d5fccf7280bb574b0d9f8b96c470a
Signed-off-by: Hu Kejun <william.hu@rock-chips.com>
2018-12-04 15:15:51 +08:00
William Wu
f26098251d HACK: usb: devio: add delay to fix ss bulk transfer issue
On RK3399/RK3399Pro platforms, We found that when USB 3.0
read/write at the same time in the following test case,
it may easily fail to transfer data with unknown problem.

Host transfer: 24B, 4MB, 4MB, 4MB
Device transfer : 24B, 4MB, 4MB, 4MB

Both Host and Device transfer "24B, 4MB, 4MB, 4M" Repeatedly
until transfer fail.

This patch adds 150us between the 24B and 4MB data to work
around the transfer issue. This patch may affect the USB 3.0
transmission performance, so we mark it as a HACK. We can
revert this patch if we find the root cause and fix this
issue with more reasonable patches.

Change-Id: Iff923ff895396a41a87e6a7df2bfa0072a13e2fc
Signed-off-by: William Wu <william.wu@rock-chips.com>
2018-12-03 18:51:48 +08:00
Herman Chen
e1755f0a19 video: rockchip: vpu: Fix address translate error
Some hardware need to translate scaling list table address to u32
address in register. The dma_addr_t on 64bit kernel will cause
overwriting to later register file.

Change-Id: Ib01d8e260b3e83dabafc13b3bfac02595faa6d63
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2018-12-03 17:45:07 +08:00
Nickey Yang
187a6da61f arm64: dts: rockchip: fix wrong lcd_en settings on rk1808-evb.
GPIO0_C4 is used for lcd_en,not for backlight_en.
So fix it.

Change-Id: Id38ea83d65c91e2d7772d79caa6bad84a5d4398c
Signed-off-by: Nickey Yang <nickey.yang@rock-chips.com>
2018-12-03 14:55:08 +08:00
jon.lin
19e6e2a580 drivers: rkflash: support 4KB page size slc nand
1.support 4KB page size slc nand;
2.support idblock update when NANDC version is 9.

Change-Id: Ia4c170270264fd46dbd2bc627d0780b8fe46f7d5
Signed-off-by: jon.lin <jon.lin@rock-chips.com>
2018-12-03 11:31:20 +08:00
zain wang
d576fa1a11 arm64: dts: rockchip: rk3326-evb: add pinctrl to pwm3
Change-Id: If8ba9ddfe2c600bd747db9a4d8a3f06633bc25f6
Signed-off-by: zain wang <wzz@rock-chips.com>
2018-12-03 11:30:27 +08:00
Wang Panzhenzhuan
58ada56569 arm64: dts: rockchip: rk3399-android.dtsi enable cif_clkout for dvp camera
Change-Id: Ie07a28e060fdfeb1acffae4b435b5388f25136b6
Signed-off-by: Wang Panzhenzhuan <randy.wang@rock-chips.com>
2018-12-03 11:29:34 +08:00
Ziyuan Xu
f7bf4ab52e arm64: rk3326_linux_defconfig: add nvmem support
Change-Id: Ib2e1228902b87a45c3fb50e6871c50259bce2378
Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com>
2018-12-03 09:30:15 +08:00
XiaoDong Huang
04ae9a93ac arm64: dts: rockchip: rk1808-evb-v10: enable rockchip_suspend node
Change-Id: I9d880d868a2ffc23762b3edcc9a5110d7323ebd0
Signed-off-by: XiaoDong Huang <derrick.huang@rock-chips.com>
2018-11-30 11:46:34 +08:00
XiaoDong Huang
375f7f433e arm64: dts: rockchip: rk1808: add rockchip-suspend node
Change-Id: I03281e58c2ebd2cc7af39dd204aa333e27d15520
Signed-off-by: XiaoDong Huang <derrick.huang@rock-chips.com>
2018-11-30 10:27:34 +08:00
XiaoDong Huang
0d3d325f61 dt-bindings: suspend: rk1808: add sleep mode config defines
Change-Id: Ib4cdd2d3b27eaac2f8244be679a0f6e7d8671c9f
Signed-off-by: XiaoDong Huang <derrick.huang@rock-chips.com>
2018-11-30 10:27:33 +08:00
XiaoDong Huang
7193a01de3 soc: rockchip: support rk1808 pm config
Change-Id: I6926cedc25bc9356608eeb8ad3e8751241f487ac
Signed-off-by: XiaoDong Huang <derrick.huang@rock-chips.com>
2018-11-30 10:27:33 +08:00
William Wu
87413a64ea usb: dwc_otg_310: pcd: don't set pullup twice
This patch adds a new flag pullups_connected to avoid
set pullup twice. It can help to fix the issue that
usb disconnect and reconnect again if we set pullup on
twice when usb connect to PC.

Change-Id: I756448cee9d2377695681d0394fada51a0c208f4
Signed-off-by: William Wu <william.wu@rock-chips.com>
2018-11-29 20:49:49 +08:00
William Wu
31f0ea59ba usb: gadget: f_uvc: increase the data buf of uvc_request_data
The rockchip IQ tool uses the data buf of the uvc_request_data
to send vendor specific uvc control data to uvc host, or receive
data from uvc host. The max data payload maybe 4096 bytes, so we
increase the data buf of uvc_request_data to 4096, and also change
the UVC_MAX_REQUEST_SIZE to 4100 correspondingly.

Change-Id: I9820a5f531a655eb53232096fad131ad7a05e349
Signed-off-by: William Wu <william.wu@rock-chips.com>
2018-11-29 20:49:38 +08:00
William Wu
f61d769615 media: v4l: increase the data length of v4l2_event
The rockchip IQ tool sends data via usb uvc. The data buf
of v4l2_event is used for IQ tool userspace on uvc device
side to receive vendor specific data from host, the max
length of data maybe 4096 bytes, so increase the data length
of v4l2_event to 4100.

I have already tested the usb host uvc function, it works
well with this patch.

Note:
The userspace need to update the data length of v4l2_event
to 4100 synchronously.

Change-Id: I1a4673d50137760e190a17c6981740952fac2ca7
Signed-off-by: William Wu <william.wu@rock-chips.com>
2018-11-29 20:49:38 +08:00
William Wu
3d41efffff lib/Kconfig.debug: raise CONFIG_FRAME_WARN for Rockchip UVC
When building with the USB_CONFIGFS_F_UVC_ROCKCHIP, set the
default CONFIG_FRAME_WARN to 5120, since Rockchip UVC need
4096 bytes for UVC request data buffer, grow beyond 2048 bytes
stack size.

Change-Id: I2df8892b8e0c930053be0154609ccc1558318b33
Signed-off-by: William Wu <william.wu@rock-chips.com>
2018-11-29 20:49:38 +08:00
William Wu
2eced06d5f usb: gadget: Kconfig: support Rockchip uvc
This patch adds support to use uvc for Rockchip ISP IQ tool
which needs large data buf of the uvc_request_data to send
vendor special uvc control data to uvc host.

Change-Id: I22b65c4f28d69b50f6bbb41124f3342b8c4c7c19
Signed-off-by: William Wu <william.wu@rock-chips.com>
2018-11-29 20:49:38 +08:00
Finley Xiao
e6161ee602 arm64: dts: rockchip: rk3399pro-npu: Add thermal zone node
Change-Id: I211edf33d2bcd7540473c8a39d56a5a1ff844a37
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
2018-11-29 17:10:40 +08:00
Finley Xiao
baf4236132 arm64: dts: rockchip: rk3399pro-npu: Add #cooling-cells to npu node
Change-Id: Ie6fbc463db8b4fe8165af33e1540683c8424167d
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
2018-11-29 17:10:35 +08:00
Finley Xiao
11a3c81c58 arm64: dts: rockchip: rk3399pro-npu: Add power-model for npu
Change-Id: I194c0cbfafe496668775196e67d1949cb6e2fd5b
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
2018-11-29 17:10:29 +08:00
Finley Xiao
3b05cc60d6 arm64: dts: rockchip: rk3399pro-npu: Add #cooling-cells to cpu node
Change-Id: Ib9809da5a9ea4c2af614ff42188ab0617c1a4ee8
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
2018-11-29 17:09:17 +08:00
Finley Xiao
58f6fccc04 arm64: dts: rockchip: rk3399pro-npu: Add dynamic-power-coefficient for cpu
The average value of dynamic-power-coefficient is about 74.

Change-Id: Id80521440e0cbdb677344bf5becf092e4311c499
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
2018-11-29 16:58:40 +08:00
Finley Xiao
f0e7208510 arm64: rk3399pro_npu_defconfig: Enable CPU and DEVFREQ THERMAL
Change-Id: Ie2dbafb010e5f889f31e76e1c1db0d0b399f5bd3
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
2018-11-29 16:52:15 +08:00
Ziyuan Xu
fc7baf06e4 Revert "clk: rockchip: fix wrong mmc phase shift for rk3328"
This reverts commit 4ef2449889.

The description for CRU_EMMC/SDMMC/SDIO_CON[0/1] is jumble on
chapters, make it clear that the correct shift is 1 that from
IC engineer.

Change-Id: I48dce293ec6ef82a5c78db38efc083227776ea99
Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com>
2018-11-29 11:11:46 +08:00
Hu Kejun
7557057cac media: soc_camera: rockchip: add handle for TEST_PATTERN
add handle for V4L2_CID_TEST_PATTERN

Change-Id: Ibe79bca7d1fe261382ca330e26c0faec703b77a8
Signed-off-by: Hu Kejun <william.hu@rock-chips.com>
2018-11-29 10:38:38 +08:00
Hu Kejun
3aecfaa13a media: rk-isp10: add TEST_PATTERN in s_ctrl
use V4L2_CID_TEST_PATTERN to enable test mode of sensor

Change-Id: I8a27d4ae072baecf62efb39d782bdfee897cc7bf
Signed-off-by: Hu Kejun <william.hu@rock-chips.com>
2018-11-29 10:38:22 +08:00
Wyon Bi
a8a8abb754 arm64: dts: rockchip: Add support for PX30 Z7-A0 board
Change-Id: Ide6b4520306f21484d206ee3d31c581bbc42226a
Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
2018-11-29 10:17:32 +08:00
Wyon Bi
0573096c0e drm/rockchip: rk618: Add support for dsi
Change-Id: I14e43f6edccf62392ac6a005ce12cf0961583573
Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
2018-11-29 10:17:32 +08:00
William Wu
56eefb4ebb phy: rockchip-inno-combphy: disable lane 0 for usb3 to save power
For rk1808 platform, when system enters deep sleep,
it doesn't need usb3 phy to detect any signals, so
we can disable lane 0 to reduce power consumption.

With this patch, I test the 0.8V and 1.8V power
consumption for USB 3.0 mode while system enters
deep sleep on RK1808-EVB.

- 0.8V : 3.5mA
- 1.8V : 0.3mA

Change-Id: I2c080b2787e5358c7495b9a237d0d2b338cc145e
Signed-off-by: William Wu <william.wu@rock-chips.com>
2018-11-29 10:15:23 +08:00
Finley Xiao
6e0dcc43d0 arm64: dts: rockchip: rk3308: Add wide-temperature configure for cpu
Change-Id: I951c82b40dd9cca919cdbe0c5bd06bda71059904
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
2018-11-28 17:43:32 +08:00
Hu Kejun
c39d9b99cd media: rockchip: isp1: support get embedded data
support get embedded data on rk3399/rk3288

Change-Id: I2ee2be79d23917384661173714f3e5cb6482ae04
Signed-off-by: Hu Kejun <william.hu@rock-chips.com>
2018-11-28 11:57:47 +08:00
Hu Kejun
5b63dff013 media: rockchip: isp1: add version of isp in querycap
Change-Id: Ie6953c8cf48ff8629d5bcb166d88fd6946e5405f
Signed-off-by: Hu Kejun <william.hu@rock-chips.com>
2018-11-28 11:56:45 +08:00
Jiri Slaby
4542ef41d3 UPSTREAM: usb: devio, do not warn when allocation fails
usbdev_mmap allocates a buffer. The size of the buffer is determined
by a user. So with this code (no need to be root):

	int fd = open("/dev/bus/usb/001/001", O_RDONLY);
	mmap(NULL, 0x800000, PROT_READ, MAP_SHARED, fd, 0);

we can see a warning:

WARNING: CPU: 0 PID: 21771 at ../mm/page_alloc.c:3563 __alloc_pages_slowpath+0x1036/0x16e0()
...
Call Trace:
 [<ffffffff8117a3ae>] ? warn_slowpath_null+0x2e/0x40
 [<ffffffff815178b6>] ? __alloc_pages_slowpath+0x1036/0x16e0
 [<ffffffff81516880>] ? warn_alloc_failed+0x250/0x250
 [<ffffffff8151226b>] ? get_page_from_freelist+0x75b/0x28b0
 [<ffffffff815184e3>] ? __alloc_pages_nodemask+0x583/0x6b0
 [<ffffffff81517f60>] ? __alloc_pages_slowpath+0x16e0/0x16e0
 [<ffffffff810565d4>] ? dma_generic_alloc_coherent+0x104/0x220
 [<ffffffffa0269e56>] ? hcd_buffer_alloc+0x1d6/0x3e0 [usbcore]
 [<ffffffffa0269c80>] ? hcd_buffer_destroy+0xa0/0xa0 [usbcore]
 [<ffffffffa0228f05>] ? usb_alloc_coherent+0x65/0x90 [usbcore]
 [<ffffffffa0275c05>] ? usbdev_mmap+0x1a5/0x770 [usbcore]
...

Allocations like this one should be marked as __GFP_NOWARN. So do so.

The size could be also clipped by something like:
	if (size >= (1 << (MAX_ORDER + PAGE_SHIFT - 1)))
		return -ENOMEM;
But I think the overall limit of 16M (by usbfs_increase_memory_usage)
is enough, so that we only silence the warning here.

Change-Id: I4765cb06f86fc39da83172cf116a63838e2586eb
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Steinar H. Gunderson <sesse@google.com>
Cc: Markus Rechberger <mrechberger@gmail.com>
Fixes: f7d34b445a (USB: Add support for usbfs zerocopy.)
Cc: 4.6+ <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 70f7ca9a02)
2018-11-27 19:47:04 +08:00
Steinar H. Gunderson
377e6b874e BACKPORT: USB: Add support for usbfs zerocopy.
Add a new interface for userspace to preallocate memory that can be
used with usbfs. This gives two primary benefits:

 - Zerocopy; data no longer needs to be copied between the userspace
   and the kernel, but can instead be read directly by the driver from
   userspace's buffers. This works for all kinds of transfers (even if
   nonsensical for control and interrupt transfers); isochronous also
   no longer need to memset() the buffer to zero to avoid leaking kernel data.

 - Once the buffers are allocated, USB transfers can no longer fail due to
   memory fragmentation; previously, long-running programs could run into
   problems finding a large enough contiguous memory chunk, especially on
   embedded systems or at high rates.

Memory is allocated by using mmap() against the usbfs file descriptor,
and similarly deallocated by munmap(). Once memory has been allocated,
using it as pointers to a bulk or isochronous operation means you will
automatically get zerocopy behavior. Note that this also means you cannot
modify outgoing data until the transfer is complete. The same holds for
data on the same cache lines as incoming data; DMA modifying them at the
same time could lead to your changes being overwritten.

There's a new capability USBDEVFS_CAP_MMAP that userspace can query to see
if the running kernel supports this functionality, if just trying mmap() is
not acceptable.

Largely based on a patch by Markus Rechberger with some updates. The original
patch can be found at:

  http://sundtek.de/support/devio_mmap_v0.4.diff

Change-Id: I22f101b6e1a1fb027288f1c345da1750c39396c9
Signed-off-by: Steinar H. Gunderson <sesse@google.com>
Signed-off-by: Markus Rechberger <mrechberger@gmail.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit f7d34b445a)
2018-11-27 19:47:04 +08:00