Merge commit '70680c754ee59eb1768f398325e60385790872e5'

* commit '70680c754ee59eb1768f398325e60385790872e5':
  drivers: rkflash: Using kmap_atomic to build page address mapping
  ARM: rv1106-evb.config: enable CONFIG_NVMEM_SYSFS
  video: rockchip: mpp: fix the decoding buf is released issue
  media: rockchip: isp: make sure to free buf after isp stop
  media: i2c: sc200ai fix rk_cam_fps mistake
  media: rockchip: isp: fix hdr config for unite multi sensor
  phy: rockchip: inno-usb2: fix phy reset during power on for rk3588
  ARM: dts: rockchip: add rv1103g-battery-ipc-v11.dts
  usb: host: ehci-platform: fix companion-device leak for rockchip
  drm/fourcc: Add definitions for Rockchip vendor and VPU tiled format
  media: rockchip: isp: fix stream no output for multi sensor
  media: rockchip: isp: no wait if shutdown

Change-Id: Id06cad1af645979a2c335815c1561f67f7595252
This commit is contained in:
Tao Huang
2022-10-14 12:31:10 +08:00
21 changed files with 507 additions and 90 deletions

View File

@@ -973,6 +973,7 @@ dtb-$(CONFIG_ARCH_RENESAS) += \
dtb-$(CONFIG_ARCH_ROCKCHIP) += \
rv1103g-38x38-ipc-v10.dtb \
rv1103g-battery-ipc-v10.dtb \
rv1103g-battery-ipc-v11.dtb \
rv1103g-evb-v10.dtb \
rv1103g-rmsl311-dloc-sl-v10.dtb \
rv1103g-scaner-v10.dtb \

View File

@@ -0,0 +1,329 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2022 Rockchip Electronics Co., Ltd.
*/
/dts-v1/;
#include "rv1103.dtsi"
#include "rv1106-evb.dtsi"
#include "rv1106-thunder-boot-spi-nor.dtsi"
/ {
model = "Rockchip RV1103G Battery IPC V11 Board";
compatible = "rockchip,rv1103g-battery-ipc-v11", "rockchip,rv1103";
aliases {
/delete-property/ csi2dphy1;
/delete-property/ csi2dphy2;
/delete-property/ ethernet0;
/delete-property/ i2c0;
/delete-property/ i2c1;
/delete-property/ i2c2;
/delete-property/ i2c3;
/delete-property/ mmc0;
/delete-property/ mmc1;
/delete-property/ pwm0;
/delete-property/ pwm1;
/delete-property/ pwm2;
/delete-property/ pwm3;
/delete-property/ pwm4;
/delete-property/ pwm5;
/delete-property/ pwm6;
/delete-property/ pwm7;
/delete-property/ pwm8;
/delete-property/ pwm9;
/delete-property/ rkcif_mipi_lvds1;
/delete-property/ serial0;
/delete-property/ serial1;
/delete-property/ serial3;
/delete-property/ serial4;
/delete-property/ serial5;
/delete-property/ spi0;
/delete-property/ spi1;
};
chosen {
bootargs = "loglevel=0 rootfstype=erofs rootflags=dax console=ttyFIQ0 root=/dev/rd0 snd_soc_core.prealloc_buffer_size_kbytes=16 coherent_pool=0 driver_async_probe=dwmmc_rockchip storagemedia=mtd androidboot.storagemedia=mtd androidboot.mode=normal";
};
acodec_sound: acodec-sound {
compatible = "simple-audio-card";
simple-audio-card,name = "rv1103-acodec";
simple-audio-card,format = "i2s";
simple-audio-card,mclk-fs = <256>;
simple-audio-card,cpu {
sound-dai = <&i2s0_8ch>;
};
simple-audio-card,codec {
sound-dai = <&acodec>;
};
};
vcc_1v8: vcc-1v8 {
compatible = "regulator-fixed";
regulator-name = "vcc_1v8";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
};
/delete-node/ &dsm;
/delete-node/ &i2c0;
/delete-node/ &i2c1;
/delete-node/ &i2c2;
/delete-node/ &i2c3;
/delete-node/ &emmc;
/delete-node/ &gmac;
/delete-node/ &pwm0;
/delete-node/ &pwm1;
/delete-node/ &pwm2;
/delete-node/ &pwm3;
/delete-node/ &pwm4;
/delete-node/ &pwm5;
/delete-node/ &pwm6;
/delete-node/ &pwm7;
/delete-node/ &pwm8;
/delete-node/ &pwm9;
/delete-node/ &rkcif_dvp;
/delete-node/ &rkcif_dvp_sditf;
/delete-node/ &rkcif_mipi_lvds1;
/delete-node/ &rkcif_mipi_lvds1_sditf;
/delete-node/ &sdmmc;
/delete-node/ &spi0;
/delete-node/ &spi1;
/delete-node/ &uart0;
/delete-node/ &uart1;
/delete-node/ &uart3;
/delete-node/ &uart4;
/delete-node/ &uart5;
&acodec {
#sound-dai-cells = <0>;
pa-ctl-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;
status = "okay";
};
&csi2_dphy_hw {
status = "okay";
};
&csi2_dphy0 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
csi_dphy_input0: endpoint@0 {
reg = <0>;
remote-endpoint = <&sc3338_out>;
data-lanes = <1 2>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
csi_dphy_output: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi_csi2_input>;
};
};
};
};
&fiq_debugger {
rockchip,baudrate = <1500000>;
pinctrl-names = "default";
pinctrl-0 = <&uart2m1_xfer>;
};
&i2c4 {
rockchip,amp-shared;
clock-frequency = <400000>;
pinctrl-names = "default";
pinctrl-0 = <&i2c4m2_xfer>;
status = "okay";
sc3338: sc3338@30 {
compatible = "smartsens,sc3338";
status = "okay";
reg = <0x30>;
clocks = <&cru MCLK_REF_MIPI0>;
clock-names = "xvclk";
pwdn-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&mipi_refclk_out0>;
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "FKO1";
rockchip,camera-module-lens-name = "30IRC-F16";
port {
sc3338_out: endpoint {
remote-endpoint = <&csi_dphy_input0>;
data-lanes = <1 2>;
};
};
};
};
&i2s0_8ch {
#sound-dai-cells = <0>;
status = "okay";
};
&mailbox {
status = "okay";
};
&memory {
reg = <0x00000000 0x04000000>;
};
&mipi0_csi2 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_csi2_input: endpoint@1 {
reg = <1>;
remote-endpoint = <&csi_dphy_output>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
mipi_csi2_output: endpoint@0 {
reg = <0>;
remote-endpoint = <&cif_mipi_in>;
};
};
};
};
&pwm10 {
status = "okay";
};
&pwm11 {
status = "okay";
};
&rkcif {
status = "okay";
};
&rkcif_mipi_lvds {
status = "okay";
memory-region-thunderboot = <&rkisp_thunderboot>;
pinctrl-names = "default";
pinctrl-0 = <&mipi_pins>;
port {
/* MIPI CSI-2 endpoint */
cif_mipi_in: endpoint {
remote-endpoint = <&mipi_csi2_output>;
};
};
};
&rkcif_mipi_lvds_sditf {
status = "okay";
port {
/* MIPI CSI-2 endpoint */
mipi_lvds_sditf: endpoint {
remote-endpoint = <&isp_in>;
};
};
};
&rkisp {
status = "okay";
};
&rkisp_vir0 {
status = "okay";
port@0 {
isp_in: endpoint {
remote-endpoint = <&mipi_lvds_sditf>;
};
};
};
&saradc {
status = "okay";
vref-supply = <&vcc_1v8>;
};
&sdio {
max-frequency = <30000000>;
no-sd;
no-mmc;
bus-width = <4>;
cap-sd-highspeed;
cap-sdio-irq;
keep-power-in-suspend;
non-removable;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc1m1_cmd &sdmmc1m1_clk &sdmmc1m1_bus4>;
no-prescan-powerup;
post-power-on-delay-ms = <0>;
status = "okay";
};
&sfc {
assigned-clocks = <&cru SCLK_SFC>;
assigned-clock-rates = <125000000>;
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <125000000>;
spi-rx-bus-width = <4>;
spi-tx-bus-width = <1>;
};
};
&thunder_boot_service {
status = "okay";
};
&rkisp_thunderboot {
/* reg's offset MUST match with RTOS */
/*
* vicap, capture raw10, ceil(w*10/8/256)*256*h *4(buf num)
* e.g. 2304x1296: 0xf30000
*/
reg = <0x00860000 0xf30000>;
};
&ramdisk_r {
reg = <0x1790000 (10 * 0x00100000)>;
};
&ramdisk_c {
reg = <0x2190000 (5 * 0x00100000)>;
};

View File

@@ -23,6 +23,7 @@ CONFIG_MTD_UBI=y
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y
CONFIG_NVMEM_SYSFS=y
CONFIG_RK_CMA_PROCFS=y
CONFIG_RK_DMABUF_PROCFS=y
CONFIG_RK_MEMBLOCK_PROCFS=y
@@ -302,6 +303,7 @@ CONFIG_DRM_KMS_HELPER=y
# CONFIG_DRM_MAXIM_MAX96745 is not set
# CONFIG_DRM_MAXIM_MAX96752F is not set
# CONFIG_DRM_MAXIM_MAX96755F is not set
# CONFIG_DRM_MAXIM_MAX96776 is not set
# CONFIG_DRM_MCDE is not set
# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set
# CONFIG_DRM_MXSFB is not set
@@ -315,6 +317,7 @@ CONFIG_DRM_PANEL_BRIDGE=y
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAXIM_DESERIALIZER is not set
# CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set
# CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set
# CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO is not set
@@ -702,6 +705,7 @@ CONFIG_SPI_MEM=y
# CONFIG_SPI_OC_TINY is not set
# CONFIG_SPI_PL022 is not set
CONFIG_SPI_ROCKCHIP=y
# CONFIG_SPI_ROCKCHIP_MISCDEV is not set
CONFIG_SPI_ROCKCHIP_SFC=y
# CONFIG_SPI_SC18IS602 is not set
# CONFIG_SPI_SIFIVE is not set

View File

@@ -1948,7 +1948,7 @@ static int __init __maybe_unused rk_cam_fps_setup(char *str)
__setup("rk_cam_hdr=", rk_cam_hdr_setup);
__setup("rk_cam_w=", rk_cam_w_setup);
__setup("rk_cam_h=", rk_cam_h_setup);
__setup("rk_cam_fps", rk_cam_fps_setup);
__setup("rk_cam_fps=", rk_cam_fps_setup);
static void find_terminal_resolution(struct sc200ai *sc200ai)
{

View File

@@ -609,11 +609,13 @@ static int bridge_stop(struct rkisp_bridge_device *dev)
dev->ops->disable(dev);
rkisp_stop_spstream(sp_stream);
hdr_stop_dmatx(dev->ispdev);
ret = wait_event_timeout(dev->done, !dev->en,
msecs_to_jiffies(1000));
if (!ret)
v4l2_warn(&dev->sd,
"%s timeout ret:%d\n", __func__, ret);
if (!dev->ispdev->hw_dev->is_shutdown) {
ret = wait_event_timeout(dev->done, !dev->en,
msecs_to_jiffies(1000));
if (!ret)
v4l2_warn(&dev->sd,
"%s timeout ret:%d\n", __func__, ret);
}
crop_off(dev);
dev->stopping = false;
dev->en = false;

View File

@@ -790,7 +790,8 @@ static void rkisp_stream_stop(struct rkisp_stream *stream)
stream->stopping = true;
stream->ops->stop_mi(stream);
if ((dev->isp_state & ISP_START) &&
dev->isp_inp != INP_DMARX_ISP) {
dev->isp_inp != INP_DMARX_ISP &&
!dev->hw_dev->is_shutdown) {
ret = wait_event_timeout(stream->done,
!stream->streaming,
msecs_to_jiffies(1000));

View File

@@ -1518,7 +1518,8 @@ static void rkisp_stream_stop(struct rkisp_stream *stream)
stream->stopping = true;
stream->ops->stop_mi(stream);
if ((dev->isp_state & ISP_START) &&
dev->isp_inp != INP_DMARX_ISP) {
dev->isp_inp != INP_DMARX_ISP &&
!dev->hw_dev->is_shutdown) {
ret = wait_event_timeout(stream->done,
!stream->streaming,
msecs_to_jiffies(1000));

View File

@@ -1331,7 +1331,7 @@ static void rkisp_stream_stop(struct rkisp_stream *stream)
struct v4l2_device *v4l2_dev = &dev->v4l2_dev;
unsigned long lock_flags = 0;
int ret = 0;
bool is_wait = true;
bool is_wait = dev->hw_dev->is_shutdown ? false : true;
if (!dev->dmarx_dev.trigger &&
(is_rdbk_stream(stream) || is_hdr_stream(stream))) {

View File

@@ -966,7 +966,7 @@ static void rkisp_stream_stop(struct rkisp_stream *stream)
struct v4l2_device *v4l2_dev = &dev->v4l2_dev;
unsigned long lock_flags = 0;
int ret = 0;
bool is_wait = true;
bool is_wait = dev->hw_dev->is_shutdown ? false : true;
stream->stopping = true;
if (dev->hw_dev->is_single)

View File

@@ -1307,7 +1307,7 @@ static void rkisp_stream_stop(struct rkisp_stream *stream)
struct v4l2_device *v4l2_dev = &dev->v4l2_dev;
unsigned long lock_flags = 0;
int ret = 0;
bool is_wait = true;
bool is_wait = dev->hw_dev->is_shutdown ? false : true;
stream->stopping = true;
stream->is_pause = false;
@@ -1562,9 +1562,10 @@ static void rkisp_stop_streaming(struct vb2_queue *queue)
if (stream->id == RKISP_STREAM_LUMA) {
stream->stopping = true;
wait_event_timeout(stream->done,
stream->frame_end,
msecs_to_jiffies(500));
if (!dev->hw_dev->is_shutdown)
wait_event_timeout(stream->done,
stream->frame_end,
msecs_to_jiffies(500));
stream->streaming = false;
stream->stopping = false;
destroy_buf_queue(stream, VB2_BUF_STATE_ERROR);

View File

@@ -167,9 +167,17 @@ void rkisp_update_regs(struct rkisp_device *dev, u32 start, u32 end)
}
if (*flag == SW_REG_CACHE) {
if ((i == ISP3X_MAIN_RESIZE_CTRL ||
i == ISP32_BP_RESIZE_CTRL ||
i == ISP3X_SELF_RESIZE_CTRL) && *val == 0)
*val = CIF_RSZ_CTRL_CFG_UPD;
writel(*val, base + i);
if (hw->is_unite) {
val = dev->sw_base_addr + i + RKISP_ISP_SW_MAX_SIZE;
if ((i == ISP3X_MAIN_RESIZE_CTRL ||
i == ISP32_BP_RESIZE_CTRL ||
i == ISP3X_SELF_RESIZE_CTRL) && *val == 0)
*val = CIF_RSZ_CTRL_CFG_UPD;
writel(*val, hw->base_next_addr + i);
}
}

View File

@@ -505,7 +505,8 @@ static void dmarx_stop(struct rkisp_stream *stream)
int ret = 0;
stream->stopping = true;
if ((dev->isp_state & ISP_START) && !stream->frame_end) {
if ((dev->isp_state & ISP_START) && !stream->frame_end &&
!dev->hw_dev->is_shutdown) {
ret = wait_event_timeout(stream->done,
!stream->streaming,
msecs_to_jiffies(100));

View File

@@ -272,12 +272,8 @@ static int rkisp_params_fh_open(struct file *filp)
static int rkisp_params_fop_release(struct file *file)
{
struct rkisp_isp_params_vdev *params = video_drvdata(file);
struct video_device *vdev = video_devdata(file);
int ret;
if (file->private_data == vdev->queue->owner && params->ops->fop_release)
params->ops->fop_release(params);
ret = vb2_fop_release(file);
if (!ret)
v4l2_pipeline_pm_put(&params->vnode.vdev.entity);
@@ -408,14 +404,19 @@ void rkisp_params_set_meshbuf_size(struct rkisp_isp_params_vdev *params_vdev,
void rkisp_params_meshbuf_free(struct rkisp_isp_params_vdev *params_vdev, u64 id)
{
if (params_vdev->ops->free_meshbuf)
/* isp working no to free buf */
if (params_vdev->ops->free_meshbuf &&
!(params_vdev->dev->isp_state & ISP_START))
params_vdev->ops->free_meshbuf(params_vdev, id);
}
void rkisp_params_stream_stop(struct rkisp_isp_params_vdev *params_vdev)
{
/* isp stop to free buf */
if (params_vdev->ops->stream_stop)
params_vdev->ops->stream_stop(params_vdev);
if (params_vdev->ops->fop_release)
params_vdev->ops->fop_release(params_vdev);
}
bool rkisp_params_check_bigmode(struct rkisp_isp_params_vdev *params_vdev)

View File

@@ -4064,6 +4064,8 @@ rkisp_alloc_internal_buf(struct rkisp_isp_params_vdev *params_vdev,
priv_val->buf_3dlut_idx = 0;
for (i = 0; i < ISP32_3DLUT_BUF_NUM; i++) {
if (priv_val->buf_3dlut[i].mem_priv)
continue;
priv_val->buf_3dlut[i].is_need_vaddr = true;
priv_val->buf_3dlut[i].size = ISP32_3DLUT_BUF_SIZE;
ret = rkisp_alloc_buffer(dev, &priv_val->buf_3dlut[i]);
@@ -4084,6 +4086,7 @@ rkisp_alloc_internal_buf(struct rkisp_isp_params_vdev *params_vdev,
u32 h = ALIGN(isp_sdev->in_crop.height, 16);
u32 val, wrap_line, wsize, div;
dma_addr_t dma_addr;
bool is_alloc;
priv_val->is_lo8x8 = (!new_params->others.bay3d_cfg.lo4x8_en &&
!new_params->others.bay3d_cfg.lo4x4_en);
@@ -4102,11 +4105,20 @@ rkisp_alloc_internal_buf(struct rkisp_isp_params_vdev *params_vdev,
wsize *= 2;
div = is_bwopt_dis ? 1 : 2;
val = ALIGN(wsize * h / div, 16);
priv_val->buf_3dnr_iir.size = val;
ret = rkisp_alloc_buffer(dev, &priv_val->buf_3dnr_iir);
if (ret) {
dev_err(dev->dev, "alloc bay3d iir buf fail:%d\n", ret);
goto err_3dnr;
is_alloc = true;
if (priv_val->buf_3dnr_iir.mem_priv) {
if (val > priv_val->buf_3dnr_iir.size)
rkisp_free_buffer(dev, &priv_val->buf_3dnr_iir);
else
is_alloc = false;
}
if (is_alloc) {
priv_val->buf_3dnr_iir.size = val;
ret = rkisp_alloc_buffer(dev, &priv_val->buf_3dnr_iir);
if (ret) {
dev_err(dev->dev, "alloc bay3d iir buf fail:%d\n", ret);
goto err_3dnr;
}
}
isp3_param_write(params_vdev, val, ISP3X_MI_BAY3D_IIR_WR_SIZE);
val = priv_val->buf_3dnr_iir.dma_addr;
@@ -4117,12 +4129,21 @@ rkisp_alloc_internal_buf(struct rkisp_isp_params_vdev *params_vdev,
val = w * h / div;
/* pixel to Byte and align */
val = ALIGN(val * 2, 16);
priv_val->buf_3dnr_ds.size = val;
ret = rkisp_alloc_buffer(dev, &priv_val->buf_3dnr_ds);
if (ret) {
rkisp_free_buffer(dev, &priv_val->buf_3dnr_iir);
dev_err(dev->dev, "alloc bay3d ds buf fail:%d\n", ret);
goto err_3dnr;
is_alloc = true;
if (priv_val->buf_3dnr_ds.mem_priv) {
if (val > priv_val->buf_3dnr_ds.size)
rkisp_free_buffer(dev, &priv_val->buf_3dnr_ds);
else
is_alloc = false;
}
if (is_alloc) {
priv_val->buf_3dnr_ds.size = val;
ret = rkisp_alloc_buffer(dev, &priv_val->buf_3dnr_ds);
if (ret) {
rkisp_free_buffer(dev, &priv_val->buf_3dnr_iir);
dev_err(dev->dev, "alloc bay3d ds buf fail:%d\n", ret);
goto err_3dnr;
}
}
isp3_param_write(params_vdev, val, ISP3X_MI_BAY3D_DS_WR_SIZE);
val = priv_val->buf_3dnr_ds.dma_addr;
@@ -4139,8 +4160,16 @@ rkisp_alloc_internal_buf(struct rkisp_isp_params_vdev *params_vdev,
wsize = ALIGN(wsize * 2, 16);
div = is_bwopt_dis ? 1 : 2;
val = ALIGN(wsize * wrap_line / div, 16);
priv_val->buf_3dnr_cur.size = val;
if (val > dev->hw_dev->sram.size) {
is_alloc = true;
if (priv_val->buf_3dnr_cur.mem_priv) {
if (val > priv_val->buf_3dnr_cur.size ||
val < dev->hw_dev->sram.size)
rkisp_free_buffer(dev, &priv_val->buf_3dnr_cur);
else
is_alloc = false;
}
if (val > dev->hw_dev->sram.size && is_alloc) {
priv_val->buf_3dnr_cur.size = val;
ret = rkisp_alloc_buffer(dev, &priv_val->buf_3dnr_cur);
if (ret) {
rkisp_free_buffer(dev, &priv_val->buf_3dnr_iir);
@@ -4150,9 +4179,11 @@ rkisp_alloc_internal_buf(struct rkisp_isp_params_vdev *params_vdev,
}
dma_addr = priv_val->buf_3dnr_cur.dma_addr;
priv_val->is_sram = false;
} else {
} else if (val <= dev->hw_dev->sram.size) {
dma_addr = dev->hw_dev->sram.dma_addr;
priv_val->is_sram = true;
} else {
dma_addr = priv_val->buf_3dnr_cur.dma_addr;
}
isp3_param_write(params_vdev, val, ISP3X_MI_BAY3D_CUR_WR_SIZE);
isp3_param_write(params_vdev, val, ISP32_MI_BAY3D_CUR_RD_SIZE);
@@ -4443,6 +4474,7 @@ static int rkisp_init_mesh_buf(struct rkisp_isp_params_vdev *params_vdev,
u32 mesh_h = meshsize->meas_height;
u32 mesh_size, buf_size;
int i, ret, buf_cnt = meshsize->buf_cnt;
bool is_alloc;
priv_val = params_vdev->priv_val;
if (!priv_val) {
@@ -4475,16 +4507,28 @@ static int rkisp_init_mesh_buf(struct rkisp_isp_params_vdev *params_vdev,
buf->is_need_vaddr = true;
buf->is_need_dbuf = true;
buf->is_need_dmafd = true;
buf->size = buf_size;
ret = rkisp_alloc_buffer(params_vdev->dev, buf);
if (ret) {
dev_err(dev, "%s failed\n", __func__);
goto err;
is_alloc = true;
if (buf->mem_priv) {
if (buf_size > buf->size) {
rkisp_free_buffer(params_vdev->dev, buf);
} else {
is_alloc = false;
buf->dma_fd = dma_buf_fd(buf->dbuf, O_CLOEXEC);
if (buf->dma_fd < 0)
goto err;
}
}
if (is_alloc) {
buf->size = buf_size;
ret = rkisp_alloc_buffer(params_vdev->dev, buf);
if (ret) {
dev_err(dev, "%s failed\n", __func__);
goto err;
}
mesh_head = (struct isp2x_mesh_head *)buf->vaddr;
mesh_head->stat = MESH_BUF_INIT;
mesh_head->data_oft = ALIGN(sizeof(struct isp2x_mesh_head), 16);
}
mesh_head = (struct isp2x_mesh_head *)buf->vaddr;
mesh_head->stat = MESH_BUF_INIT;
mesh_head->data_oft = ALIGN(sizeof(struct isp2x_mesh_head), 16);
buf++;
}
@@ -4541,7 +4585,6 @@ rkisp_params_set_meshbuf_size_v32(struct rkisp_isp_params_vdev *params_vdev,
{
struct rkisp_meshbuf_size *meshsize = size;
rkisp_deinit_mesh_buf(params_vdev, meshsize->module_id);
rkisp_init_mesh_buf(params_vdev, meshsize);
}

View File

@@ -4104,6 +4104,10 @@ void __isp_config_hdrshd(struct rkisp_isp_params_vdev *params_vdev)
struct rkisp_isp_params_val_v3x *priv_val =
(struct rkisp_isp_params_val_v3x *)params_vdev->priv_val;
if (params_vdev->dev->hw_dev->is_unite) {
ops->hdrmge_config(params_vdev, &priv_val->last_hdrmge, RKISP_PARAMS_SHD, 1);
ops->hdrdrc_config(params_vdev, &priv_val->last_hdrdrc, RKISP_PARAMS_SHD, 1);
}
ops->hdrmge_config(params_vdev, &priv_val->last_hdrmge, RKISP_PARAMS_SHD, 0);
ops->hdrdrc_config(params_vdev, &priv_val->last_hdrdrc, RKISP_PARAMS_SHD, 0);
}

View File

@@ -616,11 +616,12 @@ void rkisp_trigger_read_back(struct rkisp_device *dev, u8 dma2frm, u32 mode, boo
rkisp_update_regs(dev, CTRL_VI_ISP_PATH, SUPER_IMP_COLOR_CR);
rkisp_update_regs(dev, DUAL_CROP_M_H_OFFS, DUAL_CROP_S_V_SIZE);
rkisp_update_regs(dev, ISP_ACQ_PROP, DUAL_CROP_CTRL);
rkisp_update_regs(dev, MAIN_RESIZE_SCALE_HY, MI_WR_CTRL);
rkisp_update_regs(dev, SELF_RESIZE_SCALE_HY, MAIN_RESIZE_CTRL);
rkisp_update_regs(dev, ISP_GAMMA_OUT_CTRL, SELF_RESIZE_CTRL);
rkisp_update_regs(dev, SELF_RESIZE_SCALE_HY, MI_WR_CTRL);
rkisp_update_regs(dev, ISP32_BP_RESIZE_SCALE_HY, SELF_RESIZE_CTRL);
rkisp_update_regs(dev, MAIN_RESIZE_SCALE_HY, ISP32_BP_RESIZE_CTRL);
rkisp_update_regs(dev, ISP_GAMMA_OUT_CTRL, MAIN_RESIZE_CTRL);
rkisp_update_regs(dev, MI_RD_CTRL2, ISP_LSC_CTRL);
rkisp_update_regs(dev, MI_MP_WR_Y_BASE, MI_MP_WR_Y_LLENGTH);
rkisp_update_regs(dev, MI_MP_WR_Y_BASE, MI_WR_CTRL2 - 4);
rkisp_update_regs(dev, ISP_LSC_XGRAD_01, ISP_RAWAWB_RAM_DATA);
if (dev->isp_ver == ISP_V20 &&
(rkisp_read(dev, ISP_DHAZ_CTRL, false) & ISP_DHAZ_ENMUX ||
@@ -1838,7 +1839,7 @@ static void rkisp_stop_3a_run(struct rkisp_device *dev)
int ret = 1000;
if (!rkisp_is_need_3a(dev) || dev->isp_ver == ISP_V20 ||
!params_vdev->is_subs_evt)
!params_vdev->is_subs_evt || dev->hw_dev->is_shutdown)
return;
v4l2_event_queue(vdev, &ev);

View File

@@ -853,9 +853,12 @@ static int rockchip_usb2phy_power_on(struct phy *phy)
* please keep the common_on_n 1'b0 to set these blocks
* remain powered.
*/
ret = rockchip_usb2phy_reset(rphy);
if (ret)
goto unlock;
if (rport->port_id == USB2PHY_PORT_OTG &&
of_device_is_compatible(rphy->dev->of_node, "rockchip,rk3588-usb2phy")) {
ret = rockchip_usb2phy_reset(rphy);
if (ret)
goto unlock;
}
/* waiting for the utmi_clk to become stable */
usleep_range(1500, 2000);
@@ -3665,7 +3668,7 @@ static const struct rockchip_usb2phy_cfg rk3588_phy_cfgs[] = {
.reg = 0x8000,
.num_ports = 1,
.phy_tuning = rk3588_usb2phy_tuning,
.clkout_ctl = { 0x0000, 0, 0, 1, 0 },
.clkout_ctl = { 0x0000, 0, 0, 0, 0 },
.ls_filter_con = { 0x0040, 19, 0, 0x30100, 0x00020 },
.port_cfgs = {
[USB2PHY_PORT_HOST] = {
@@ -3687,7 +3690,7 @@ static const struct rockchip_usb2phy_cfg rk3588_phy_cfgs[] = {
.reg = 0xc000,
.num_ports = 1,
.phy_tuning = rk3588_usb2phy_tuning,
.clkout_ctl = { 0x0000, 0, 0, 1, 0 },
.clkout_ctl = { 0x0000, 0, 0, 0, 0 },
.ls_filter_con = { 0x0040, 19, 0, 0x30100, 0x00020 },
.port_cfgs = {
[USB2PHY_PORT_HOST] = {

View File

@@ -223,20 +223,26 @@ static int rkflash_blk_xfer(struct flash_blk_dev *dev,
static int rkflash_blk_check_buffer_align(struct request *req, char **pbuf)
{
int nr_vec = 0;
struct bio_vec bvec;
struct bio_vec bv;
struct req_iterator iter;
char *buffer;
void *firstbuf = 0;
char *nextbuffer = 0;
rq_for_each_segment(bvec, req, iter) {
buffer = page_address(bvec.bv_page) + bvec.bv_offset;
rq_for_each_segment(bv, req, iter) {
/* high mem return 0 and using kernel buffer */
if (PageHighMem(bv.bv_page))
return 0;
buffer = page_address(bv.bv_page) + bv.bv_offset;
if (!buffer)
return 0;
if (!firstbuf)
firstbuf = buffer;
nr_vec++;
if (nextbuffer && nextbuffer != buffer)
return 0;
nextbuffer = buffer + bvec.bv_len;
nextbuffer = buffer + bv.bv_len;
}
*pbuf = firstbuf;
return 1;
@@ -247,12 +253,11 @@ static blk_status_t do_blktrans_all_request(struct flash_blk_ops *tr,
struct request *req)
{
unsigned long block, nsect;
char *buf = NULL;
char *buf = NULL, *page_buf;
struct req_iterator rq_iter;
struct bio_vec bvec;
int ret;
unsigned long totle_nsect;
unsigned long rq_len = 0;
block = blk_rq_pos(req);
nsect = blk_rq_cur_bytes(req) >> 9;
@@ -281,11 +286,13 @@ static blk_status_t do_blktrans_all_request(struct flash_blk_ops *tr,
char *p = buf;
rq_for_each_segment(bvec, req, rq_iter) {
memcpy(page_address(bvec.bv_page) +
bvec.bv_offset,
p,
bvec.bv_len);
page_buf = kmap_atomic(bvec.bv_page);
memcpy(page_buf +
bvec.bv_offset,
p,
bvec.bv_len);
p += bvec.bv_len;
kunmap_atomic(page_buf);
}
}
@@ -296,30 +303,26 @@ static blk_status_t do_blktrans_all_request(struct flash_blk_ops *tr,
case REQ_OP_WRITE:
rkflash_print_bio("%s write block=%lx nsec=%lx\n", __func__, block, totle_nsect);
rq_for_each_segment(bvec, req, rq_iter) {
if ((page_address(bvec.bv_page) + bvec.bv_offset) == (buf + rq_len)) {
rq_len += bvec.bv_len;
} else {
if (rq_len) {
ret = rkflash_blk_xfer(dev,
block,
rq_len >> 9,
buf,
REQ_OP_WRITE);
}
block += rq_len >> 9;
buf = (page_address(bvec.bv_page) + bvec.bv_offset);
rq_len = bvec.bv_len;
buf = mtd_read_temp_buffer;
rkflash_blk_check_buffer_align(req, &buf);
if (buf == mtd_read_temp_buffer) {
char *p = buf;
rq_for_each_segment(bvec, req, rq_iter) {
page_buf = kmap_atomic(bvec.bv_page);
memcpy(p,
page_buf +
bvec.bv_offset,
bvec.bv_len);
p += bvec.bv_len;
kunmap_atomic(page_buf);
}
}
if (rq_len) {
ret = rkflash_blk_xfer(dev,
block,
rq_len >> 9,
buf,
REQ_OP_WRITE);
}
ret = rkflash_blk_xfer(dev,
block,
totle_nsect,
buf,
REQ_OP_WRITE);
if (ret)
return BLK_STS_IOERR;

View File

@@ -422,6 +422,7 @@ static int ehci_platform_probe(struct platform_device *dev)
if (companion_dev) {
link = device_link_add(companion_dev, hcd->self.controller,
DL_FLAG_STATELESS);
put_device(companion_dev);
if (!link) {
dev_err(&dev->dev, "Unable to link %s\n",
dev_name(companion_dev));
@@ -473,8 +474,10 @@ static int ehci_platform_remove(struct platform_device *dev)
if (of_device_is_compatible(dev->dev.of_node,
"rockchip,rk3588-ehci")) {
companion_dev = usb_of_get_companion_dev(hcd->self.controller);
if (companion_dev)
if (companion_dev) {
device_link_remove(companion_dev, hcd->self.controller);
put_device(companion_dev);
}
}
usb_remove_hcd(hcd);
@@ -535,8 +538,9 @@ static int __maybe_unused ehci_platform_resume(struct device *dev)
}
companion_dev = usb_of_get_companion_dev(hcd->self.controller);
if (companion_dev && !device_is_dependent(hcd->self.controller, companion_dev)) {
device_pm_wait_for_dev(hcd->self.controller, companion_dev);
if (companion_dev) {
if (!device_is_dependent(hcd->self.controller, companion_dev))
device_pm_wait_for_dev(hcd->self.controller, companion_dev);
put_device(companion_dev);
}

View File

@@ -97,7 +97,7 @@ mpp_dma_remove_extra_buffer(struct mpp_dma_session *dma)
oldest = buffer;
}
}
if (oldest)
if (oldest && kref_read(&oldest->ref) <= 1)
kref_put(&oldest->ref, mpp_dma_release_buffer);
mutex_unlock(&dma->list_mutex);
}

View File

@@ -334,6 +334,7 @@ extern "C" {
#define DRM_FORMAT_MOD_VENDOR_ARM 0x08
#define DRM_FORMAT_MOD_VENDOR_ALLWINNER 0x09
#define DRM_FORMAT_MOD_VENDOR_AMLOGIC 0x0a
#define DRM_FORMAT_MOD_VENDOR_ROCKCHIP 0x0b
/* add more to the end as needed */
@@ -1058,6 +1059,15 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier)
*/
#define AMLOGIC_FBC_OPTION_MEM_SAVING (1ULL << 0)
#define ROCKCHIP_TILED_BLOCK_SIZE_MASK 0xf
#define ROCKCHIP_TILED_BLOCK_SIZE_8x8 (1ULL)
#define ROCKCHIP_TILED_BLOCK_SIZE_4x4_MODE0 (2ULL)
#define ROCKCHIP_TILED_BLOCK_SIZE_4x4_MODE1 (3ULL)
#define DRM_FORMAT_MOD_ROCKCHIP_TILED(_mode) fourcc_mod_code(ROCKCHIP, _mode)
#define IS_ROCKCHIP_TILED_MOD(val) (((val) >> 56) == DRM_FORMAT_MOD_VENDOR_ROCKCHIP)
#if defined(__cplusplus)
}
#endif