diff --git a/kernel-6.1/arch/arm64/boot/dts/rockchip/rk3588-nanopi6-rev09.dts b/kernel-6.1/arch/arm64/boot/dts/rockchip/rk3588-nanopi6-rev09.dts index 1a579edc9fe..70395ac3a0c 100644 --- a/kernel-6.1/arch/arm64/boot/dts/rockchip/rk3588-nanopi6-rev09.dts +++ b/kernel-6.1/arch/arm64/boot/dts/rockchip/rk3588-nanopi6-rev09.dts @@ -798,6 +798,30 @@ dsi0_pwm: &pwm2 { status = "disabled"; }; +/* MIPI-DSI */ +#define ENABLE_MIPI_DSI0 1 + +#include "rk3588-nanopi6-mipi-lcd-yx70.dtsi" +#include "rk3588-nanopi6-mipi-dsi-sel.dtsi" + +#if defined(ENABLE_MIPI_DSI0) +&dsi0_gt1x { + compatible = "goodix,gt1x", "goodix,gt9xx"; + status = "okay"; +}; + +&dsi0_gt9xx { + status = "disabled"; +}; +#endif + +/* MIPI-CSI */ +#define ENABLE_MIPI_CSI1 1 + +#if (ENABLE_MIPI_CSI1) +#include "rk3588-nanopi6-csi1-imx415.dtsi" +#endif + /* GPIO Connector */ &gpio0 { gpio-line-names = diff --git a/kernel-6.1/arch/arm64/boot/dts/rockchip/rk3588.dtsi b/kernel-6.1/arch/arm64/boot/dts/rockchip/rk3588.dtsi index 9262085ffda..767be6b009d 100644 --- a/kernel-6.1/arch/arm64/boot/dts/rockchip/rk3588.dtsi +++ b/kernel-6.1/arch/arm64/boot/dts/rockchip/rk3588.dtsi @@ -837,8 +837,8 @@ compatible = "rockchip,rk3588-pcie3-phy"; reg = <0x0 0xfee80000 0x0 0x20000>; #phy-cells = <0>; - clocks = <&cru PCLK_PCIE_COMBO_PIPE_PHY>; - clock-names = "pclk"; + clocks = <&cru PCLK_PCIE_COMBO_PIPE_PHY>, <&cru PCLK_PHP_ROOT>; + clock-names = "pclk", "phpclk"; resets = <&cru SRST_PCIE30_PHY>; reset-names = "phy"; rockchip,pipe-grf = <&php_grf>; diff --git a/kernel-6.1/drivers/media/platform/rockchip/cif/capture.c b/kernel-6.1/drivers/media/platform/rockchip/cif/capture.c index 49a80dadd7d..3e12f21f6e4 100644 --- a/kernel-6.1/drivers/media/platform/rockchip/cif/capture.c +++ b/kernel-6.1/drivers/media/platform/rockchip/cif/capture.c @@ -7464,13 +7464,12 @@ int rkcif_update_sensor_info(struct rkcif_stream *stream) terminal_sensor->hdmi_input_en = 0; } } else { - v4l2_err(&stream->cifdev->v4l2_dev, + v4l2_warn_once(&stream->cifdev->v4l2_dev, "%s: stream[%d] get remote terminal sensor failed!\n", __func__, stream->id); return -ENODEV; } - if (terminal_sensor->mbus.type == V4L2_MBUS_CSI2_DPHY || terminal_sensor->mbus.type == V4L2_MBUS_CSI2_CPHY) terminal_sensor->lanes = terminal_sensor->mbus.bus.mipi_csi2.num_data_lanes; @@ -8415,7 +8414,7 @@ int rkcif_do_start_stream(struct rkcif_stream *stream, enum rkcif_stream_mode mo if (!dev->active_sensor) { ret = rkcif_update_sensor_info(stream); if (ret < 0) { - v4l2_err(v4l2_dev, + v4l2_warn_once(v4l2_dev, "update sensor info failed %d\n", ret); goto out; @@ -9054,7 +9053,7 @@ static int rkcif_fh_open(struct file *filp) /* Make sure active sensor is valid before .set_fmt() */ ret = rkcif_update_sensor_info(stream); if (ret < 0) { - v4l2_err(vdev, + v4l2_warn_once(vdev, "update sensor info failed %d\n", ret); @@ -9194,7 +9193,7 @@ static int rkcif_enum_frameintervals(struct file *file, void *fh, if (!sensor || !sensor->sd) { /* TODO: active_sensor is NULL if using DMARX path */ - v4l2_err(&dev->v4l2_dev, "%s Not active sensor\n", __func__); + v4l2_warn_once(&dev->v4l2_dev, "%s Not active sensor\n", __func__); return -ENODEV; } diff --git a/kernel-6.1/drivers/media/platform/rockchip/cif/cif-scale.c b/kernel-6.1/drivers/media/platform/rockchip/cif/cif-scale.c index 4114b0fe618..c9bbae45fab 100644 --- a/kernel-6.1/drivers/media/platform/rockchip/cif/cif-scale.c +++ b/kernel-6.1/drivers/media/platform/rockchip/cif/cif-scale.c @@ -584,7 +584,7 @@ static int rkcif_scale_fh_open(struct file *file) ret = rkcif_update_sensor_info(scale_vdev->stream); if (ret < 0) { - v4l2_err(vdev, + v4l2_warn_once(vdev, "update sensor info failed %d\n", ret); diff --git a/kernel-6.1/drivers/media/platform/rockchip/cif/cif-tools.c b/kernel-6.1/drivers/media/platform/rockchip/cif/cif-tools.c index f46c744489d..c4090a0eb65 100644 --- a/kernel-6.1/drivers/media/platform/rockchip/cif/cif-tools.c +++ b/kernel-6.1/drivers/media/platform/rockchip/cif/cif-tools.c @@ -342,7 +342,7 @@ static int rkcif_tools_fh_open(struct file *file) ret = rkcif_update_sensor_info(tools_vdev->stream); if (ret < 0) { - v4l2_err(vdev, + v4l2_warn_once(vdev, "update sensor info failed %d\n", ret); diff --git a/kernel-6.1/drivers/media/platform/rockchip/cif/mipi-csi2.c b/kernel-6.1/drivers/media/platform/rockchip/cif/mipi-csi2.c index 1de4cd09a1d..270d99df74e 100644 --- a/kernel-6.1/drivers/media/platform/rockchip/cif/mipi-csi2.c +++ b/kernel-6.1/drivers/media/platform/rockchip/cif/mipi-csi2.c @@ -113,7 +113,7 @@ static void csi2_update_sensor_info(struct csi2_dev *csi2) ret = v4l2_subdev_call(sensor->sd, pad, get_mbus_config, 0, &mbus); if (ret) { - v4l2_err(&csi2->sd, "update sensor info failed!\n"); + v4l2_warn_once(&csi2->sd, "update sensor info failed!\n"); return; } diff --git a/kernel-6.1/drivers/media/platform/rockchip/cif/mipi-csi2.h b/kernel-6.1/drivers/media/platform/rockchip/cif/mipi-csi2.h index 6cfd9f217d4..504936878bb 100644 --- a/kernel-6.1/drivers/media/platform/rockchip/cif/mipi-csi2.h +++ b/kernel-6.1/drivers/media/platform/rockchip/cif/mipi-csi2.h @@ -208,4 +208,9 @@ int rkcif_csi2_register_notifier(struct notifier_block *nb); int rkcif_csi2_unregister_notifier(struct notifier_block *nb); void rkcif_csi2_event_reset_pipe(struct csi2_dev *csi2_dev, int reset_src); +#ifndef v4l2_warn_once +#define v4l2_warn_once(dev, fmt, arg...) \ + printk_once(KERN_WARNING "%s: " fmt, (dev)->name , ## arg) +#endif + #endif diff --git a/kernel-6.1/drivers/media/platform/rockchip/isp/capture.c b/kernel-6.1/drivers/media/platform/rockchip/isp/capture.c index b62ec33a73d..0e525333558 100644 --- a/kernel-6.1/drivers/media/platform/rockchip/isp/capture.c +++ b/kernel-6.1/drivers/media/platform/rockchip/isp/capture.c @@ -1499,7 +1499,7 @@ static int rkisp_enum_frameintervals(struct file *file, void *fh, if (!sensor) { /* TODO: active_sensor is NULL if using DMARX path */ - v4l2_err(&dev->v4l2_dev, "%s Not active sensor\n", __func__); + v4l2_warn_once(&dev->v4l2_dev, "%s Not active sensor\n", __func__); return -ENODEV; } diff --git a/kernel-6.1/drivers/media/platform/rockchip/isp/capture_v30.c b/kernel-6.1/drivers/media/platform/rockchip/isp/capture_v30.c index 137473716db..77af975120c 100644 --- a/kernel-6.1/drivers/media/platform/rockchip/isp/capture_v30.c +++ b/kernel-6.1/drivers/media/platform/rockchip/isp/capture_v30.c @@ -1414,7 +1414,7 @@ rkisp_start_streaming(struct vb2_queue *queue, unsigned int count) memset(&stream->dbg, 0, sizeof(stream->dbg)); atomic_inc(&dev->cap_dev.refcnt); if (!dev->isp_inp || !stream->linked) { - v4l2_err(v4l2_dev, "check %s link or isp input\n", node->vdev.name); + v4l2_warn_once(v4l2_dev, "check %s link or isp input\n", node->vdev.name); goto buffer_done; } diff --git a/kernel-6.1/drivers/media/platform/rockchip/isp/capture_v39.c b/kernel-6.1/drivers/media/platform/rockchip/isp/capture_v39.c index 322b55acd80..b2f3f3df1d1 100644 --- a/kernel-6.1/drivers/media/platform/rockchip/isp/capture_v39.c +++ b/kernel-6.1/drivers/media/platform/rockchip/isp/capture_v39.c @@ -1495,7 +1495,7 @@ rkisp_start_streaming(struct vb2_queue *queue, unsigned int count) atomic_inc(&dev->cap_dev.refcnt); if (!dev->isp_inp || !stream->linked) { - v4l2_err(v4l2_dev, "check %s link or isp input\n", node->vdev.name); + v4l2_warn_once(v4l2_dev, "check %s link or isp input\n", node->vdev.name); goto buffer_done; } diff --git a/kernel-6.1/drivers/media/platform/rockchip/isp/rkisp.h b/kernel-6.1/drivers/media/platform/rockchip/isp/rkisp.h index 5b635b53c44..503f2f0cf5f 100644 --- a/kernel-6.1/drivers/media/platform/rockchip/isp/rkisp.h +++ b/kernel-6.1/drivers/media/platform/rockchip/isp/rkisp.h @@ -218,4 +218,9 @@ struct v4l2_rect *rkisp_get_isp_sd_win(struct rkisp_isp_subdev *isp_sdev) return &isp_sdev->out_crop; } +#ifndef v4l2_warn_once +#define v4l2_warn_once(dev, fmt, arg...) \ + printk_once(KERN_WARNING "%s: " fmt, (dev)->name , ## arg) +#endif + #endif /* _RKISP_H */ diff --git a/kernel-6.1/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c b/kernel-6.1/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c index bc8c2cb3cd0..0d1c4973a0e 100644 --- a/kernel-6.1/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c +++ b/kernel-6.1/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c @@ -264,6 +264,10 @@ static int rockchip_p3phy_probe(struct platform_device *pdev) return -EINVAL; } + priv->num_clks = devm_clk_bulk_get_all(dev, &priv->clks); + if (priv->num_clks < 1) + return -ENODEV; + priv->phy_grf = syscon_regmap_lookup_by_phandle(np, "rockchip,phy-grf"); if (IS_ERR(priv->phy_grf)) { dev_err(dev, "failed to find rockchip,phy_grf regmap\n"); @@ -275,6 +279,13 @@ static int rockchip_p3phy_probe(struct platform_device *pdev) if (IS_ERR(priv->pipe_grf)) dev_info(dev, "failed to find rockchip,pipe_grf regmap\n"); + /* Configuring grf with clk enabled. */ + ret = clk_bulk_prepare_enable(priv->num_clks, priv->clks); + if (ret) { + pr_err("failed to enable PCIe bulk clks %d\n", ret); + return ret; + } + ret = device_property_read_u32(dev, "rockchip,pcie30-phymode", &val); if (!ret) { priv->pcie30_phymode = val; @@ -294,6 +305,8 @@ static int rockchip_p3phy_probe(struct platform_device *pdev) (reg << 16) | reg); }; + clk_bulk_disable_unprepare(priv->num_clks, priv->clks); + priv->phy = devm_phy_create(dev, NULL, &rockchip_p3phy_ops); if (IS_ERR(priv->phy)) { dev_err(dev, "failed to create combphy\n"); @@ -306,10 +319,6 @@ static int rockchip_p3phy_probe(struct platform_device *pdev) priv->p30phy = NULL; } - priv->num_clks = devm_clk_bulk_get_all(dev, &priv->clks); - if (priv->num_clks < 1) - return -ENODEV; - dev_set_drvdata(dev, priv); phy_set_drvdata(priv->phy, priv); phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);