From 985029d2ea37958bba06356317b1a6767312cfe6 Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Mon, 25 Aug 2025 15:52:50 +0800 Subject: [PATCH 1/9] ASoC: rockchip: multi-dais: Use the frame burst Always use the frame burst even if there is only one mapping. Signed-off-by: Sugar Zhang Change-Id: I3774be5286d618dd61ed11e443ee657ea22cd8d8 --- sound/soc/rockchip/rockchip_multi_dais_pcm.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sound/soc/rockchip/rockchip_multi_dais_pcm.c b/sound/soc/rockchip/rockchip_multi_dais_pcm.c index cf0c90d6734b..7a1c8cad5651 100644 --- a/sound/soc/rockchip/rockchip_multi_dais_pcm.c +++ b/sound/soc/rockchip/rockchip_multi_dais_pcm.c @@ -630,7 +630,6 @@ static int dmaengine_mpcm_hw_params(struct snd_soc_component *component, struct dma_slave_config slave_config; snd_pcm_format_t format; unsigned int *maps; - int frame_bytes; int ret, num, i, sz; if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) @@ -638,7 +637,6 @@ static int dmaengine_mpcm_hw_params(struct snd_soc_component *component, else maps = pcm->mdais->capture_channel_maps; format = params_format(params); - frame_bytes = snd_pcm_format_size(format, params_channels(params)); num = pcm->mdais->num_dais; for (i = 0; i < num; i++) { @@ -661,11 +659,11 @@ static int dmaengine_mpcm_hw_params(struct snd_soc_component *component, sz = snd_pcm_format_size(format, maps[i]); if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { chan = pcm->tx_chans[i]; - if (sz && (frame_bytes - sz) > 0) + if (sz) slave_config.dst_maxburst = sz / slave_config.dst_addr_width; } else { chan = pcm->rx_chans[i]; - if (sz && (frame_bytes - sz) > 0) + if (sz) slave_config.src_maxburst = sz / slave_config.src_addr_width; } if (!chan) From 63fa128c7f695f0ed04a3737401117d2375f6eab Mon Sep 17 00:00:00 2001 From: Ziyuan Xu Date: Mon, 25 Aug 2025 17:54:28 +0800 Subject: [PATCH 2/9] arm64: configs: Add rv1126b-fastboot.config Change-Id: I53133fad68f969157d30870255ec56dfb814c69a Signed-off-by: Ziyuan Xu --- arch/arm64/configs/rv1126b-fastboot.config | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 arch/arm64/configs/rv1126b-fastboot.config diff --git a/arch/arm64/configs/rv1126b-fastboot.config b/arch/arm64/configs/rv1126b-fastboot.config new file mode 100644 index 000000000000..1570a51b848e --- /dev/null +++ b/arch/arm64/configs/rv1126b-fastboot.config @@ -0,0 +1,17 @@ +CONFIG_DAX=y +CONFIG_EROFS_FS=y +CONFIG_LIBCRC32C=y +CONFIG_ROCKCHIP_HW_DECOMPRESS=y +CONFIG_ROCKCHIP_RAMDISK=y +CONFIG_ROCKCHIP_THUNDER_BOOT=y +CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK=y +# CONFIG_EROFS_FS_DEBUG is not set +# CONFIG_EROFS_FS_XATTR is not set +# CONFIG_EROFS_FS_ZIP is not set +CONFIG_FS_DAX=y +CONFIG_INITCALL_ASYNC=y +# CONFIG_ROCKCHIP_HW_DECOMPRESS_TEST is not set +CONFIG_ROCKCHIP_THUNDER_BOOT_MMC=y +CONFIG_ROCKCHIP_THUNDER_BOOT_SFC=y +# CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_ISP is not set +# CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_SETUP is not set From a2dced082943d3bb73e70b1aa169d81409397760 Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Mon, 18 Aug 2025 09:18:39 +0800 Subject: [PATCH 3/9] PCI: rockchip: dw: Add PCIE_DW_ROCKCHIP_RC_DMATEST macro limit for dma test unregister Change-Id: Id9ba68883db0045f4709f8bd59d52914e66babfe Signed-off-by: Jon Lin --- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c index 236c9793a3a5..1b6ddb251630 100644 --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c @@ -573,13 +573,13 @@ static int rk_pcie_init_dma_trx(struct rk_pcie *rk_pcie) if (!rk_pcie_udma_enabled(rk_pcie)) return 0; -#ifdef PCIE_DW_ROCKCHIP_RC_DMATEST - rk_pcie->dma_obj = pcie_dw_dmatest_register(rk_pcie->pci->dev, true); - if (IS_ERR(rk_pcie->dma_obj)) { - dev_err(rk_pcie->pci->dev, "failed to prepare dmatest\n"); - return -EINVAL; + if (IS_ENABLED(CONFIG_PCIE_DW_ROCKCHIP_RC_DMATEST)) { + rk_pcie->dma_obj = pcie_dw_dmatest_register(rk_pcie->pci->dev, true); + if (IS_ERR(rk_pcie->dma_obj)) { + dev_err(rk_pcie->pci->dev, "failed to prepare dmatest\n"); + return -EINVAL; + } } -#endif if (!rk_pcie->dma_obj) return 0; @@ -1802,7 +1802,8 @@ static int rk_pcie_remove(struct platform_device *pdev) dw_pcie_host_deinit(&rk_pcie->pci->pp); rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_INTR_MASK, 0xffffffff); destroy_workqueue(rk_pcie->hot_rst_wq); - pcie_dw_dmatest_unregister(rk_pcie->dma_obj); + if (IS_ENABLED(CONFIG_PCIE_DW_ROCKCHIP_RC_DMATEST)) + pcie_dw_dmatest_unregister(rk_pcie->dma_obj); rockchip_pcie_debugfs_exit(rk_pcie); if (rk_pcie->irq_domain) { int virq, j; From e57fa106fe67b96bf8c96b82c2459f8a8ad15c2f Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Tue, 19 Aug 2025 16:38:51 +0800 Subject: [PATCH 4/9] PCI: rockchip: dw: Add unregister_gpio_hotplug_slot 1.Call register/unregister in pair; 2.Only enable gpio_php when driver built in. Change-Id: Ib7326a76333a5916842a8e3f15b7fa329b4dde77 Signed-off-by: Jon Lin --- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c index 1b6ddb251630..97e70eda1459 100644 --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c @@ -1700,7 +1700,7 @@ static int rk_pcie_really_probe(void *p) if (ret && !rk_pcie->slot_pluggable) goto deinit_irq_and_wq; - if (rk_pcie->slot_pluggable) { + if (IS_BUILTIN(CONFIG_PCIE_DW_ROCKCHIP) && rk_pcie->slot_pluggable) { rk_pcie->hp_slot.plat_ops = &rk_pcie_gpio_hp_plat_ops; rk_pcie->hp_slot.np = rk_pcie->pci->dev->of_node; rk_pcie->hp_slot.slot_nr = rk_pcie->pci->pp.bridge->busnr; @@ -1817,6 +1817,9 @@ static int rk_pcie_remove(struct platform_device *pdev) irq_domain_remove(rk_pcie->irq_domain); } + if (IS_BUILTIN(CONFIG_PCIE_DW_ROCKCHIP) && rk_pcie->slot_pluggable) + unregister_gpio_hotplug_slot(&rk_pcie->hp_slot); + device_init_wakeup(dev, false); rk_pcie_host_unconfig(rk_pcie); From 488a2bed4a8e602f7f9bbd8fb5a1ef52274be1bf Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Tue, 19 Aug 2025 16:41:06 +0800 Subject: [PATCH 5/9] PCI: rockchip: dw_ep: Support building as a module when dma_test disabled Change-Id: I43ef9a2b069f3b49c529170855e88b90984efbf5 Signed-off-by: Jon Lin --- .../pci/controller/dwc/pcie-dw-ep-rockchip.c | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-dw-ep-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-ep-rockchip.c index 8beecf321195..e3ed69dd0c3a 100644 --- a/drivers/pci/controller/dwc/pcie-dw-ep-rockchip.c +++ b/drivers/pci/controller/dwc/pcie-dw-ep-rockchip.c @@ -289,6 +289,7 @@ static int rockchip_pcie_get_io_resource(struct platform_device *pdev, if (IS_ERR(rockchip->pci.dbi_base)) return PTR_ERR(rockchip->pci.dbi_base); rockchip->pci.atu_base = rockchip->pci.dbi_base + DEFAULT_DBI_ATU_OFFSET; + rockchip->pci.atu_size = SZ_4K; rockchip->dbi_base_physical = dbi_res->start; ret = device_property_read_u32(dev, "num-ib-windows", &rockchip->num_ib_windows); @@ -937,9 +938,6 @@ static int rockchip_pcie_config_host(struct rockchip_pcie *rockchip) u32 reg, val; int ret, retries, i; - /* Detecting ATU features to achieve DWC ATU interface development */ - dw_pcie_iatu_detect(&rockchip->pci); - if (dw_pcie_link_up(&rockchip->pci)) goto already_linkup; else @@ -1246,13 +1244,14 @@ static int rockchip_pcie_get_dma_status(struct dma_trx_obj *obj, u8 chn, enum dm static int rockchip_pcie_init_dma_trx(struct rockchip_pcie *rockchip) { - struct dw_pcie *pci = &rockchip->pci; - - rockchip->dma_obj = pcie_dw_dmatest_register(pci->dev, true); - if (IS_ERR(rockchip->dma_obj)) { - dev_err(rockchip->pci.dev, "failed to prepare dmatest\n"); - return -EINVAL; - } else if (rockchip->dma_obj) { + if (IS_ENABLED(CONFIG_PCIE_DW_ROCKCHIP_RC_DMATEST)) { + rockchip->dma_obj = pcie_dw_dmatest_register(rockchip->pci.dev, true); + if (IS_ERR(rockchip->dma_obj)) { + dev_err(rockchip->pci.dev, "failed to prepare dmatest\n"); + return -EINVAL; + } + } + if (rockchip->dma_obj) { rockchip->dma_obj->start_dma_func = rockchip_pcie_start_dma_dwc; rockchip->dma_obj->config_dma_func = rockchip_pcie_config_dma_dwc; rockchip->dma_obj->get_dma_status = rockchip_pcie_get_dma_status; @@ -1263,7 +1262,7 @@ static int rockchip_pcie_init_dma_trx(struct rockchip_pcie *rockchip) static void rockchip_pcie_deinit_dma_trx(struct rockchip_pcie *rockchip) { - if (rockchip->dma_obj) + if (IS_ENABLED(CONFIG_PCIE_DW_ROCKCHIP_RC_DMATEST) && rockchip->dma_obj) pcie_dw_dmatest_unregister(rockchip->dma_obj); } From 3be4ad7282226cd8fd96b08b78839eb6987b46b7 Mon Sep 17 00:00:00 2001 From: Liang Chen Date: Tue, 26 Aug 2025 11:57:14 +0800 Subject: [PATCH 6/9] arm64: dts: rockchip: rv1126b-evb: set venc-supply for evb1/evb4 Change-Id: I4aa7003bc8b0ba5f1c5f073f02561db95d497e43 Signed-off-by: Liang Chen --- arch/arm64/boot/dts/rockchip/rv1126b-evb1-v10.dtsi | 4 ++++ arch/arm64/boot/dts/rockchip/rv1126b-evb4-v10.dts | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rv1126b-evb1-v10.dtsi b/arch/arm64/boot/dts/rockchip/rv1126b-evb1-v10.dtsi index d789d93b60ef..31faaa3ad88b 100644 --- a/arch/arm64/boot/dts/rockchip/rv1126b-evb1-v10.dtsi +++ b/arch/arm64/boot/dts/rockchip/rv1126b-evb1-v10.dtsi @@ -469,6 +469,10 @@ rknpu-supply = <&vdd_npu>; }; +&rkvenc { + venc-supply = <&vdd_logic>; +}; + &route_dsi { status = "okay"; }; diff --git a/arch/arm64/boot/dts/rockchip/rv1126b-evb4-v10.dts b/arch/arm64/boot/dts/rockchip/rv1126b-evb4-v10.dts index 3344c5ec2793..991939cff850 100644 --- a/arch/arm64/boot/dts/rockchip/rv1126b-evb4-v10.dts +++ b/arch/arm64/boot/dts/rockchip/rv1126b-evb4-v10.dts @@ -477,6 +477,10 @@ rknpu-supply = <&vdd_npu>; }; +&rkvenc { + venc-supply = <&vdd_logic>; +}; + &rockchip_suspend { status = "okay"; From 468b76b2222873ee212af103349d4e7cfbe29227 Mon Sep 17 00:00:00 2001 From: Ziyuan Xu Date: Tue, 26 Aug 2025 11:14:57 +0800 Subject: [PATCH 7/9] soc: rockchip: thunderboot_mmc: Send CMD12 after transmission completion There're two ways to support read multiple blocks transmission: - Current design: SET_BLOCK_COUNT(CMD23) + READ_MULTIPLE_BLOCK(CMD18) - READ_MULTIPLE_BLOCK(CMD18) + STOP_TRANSMISSION(CMD12) CMD23 only support 2^16 blocks, we should change to plan B for the larger size transmission. Change-Id: Id8f3d11dbff65b8bac4b74ef2024862b6722fc26 Signed-off-by: Ziyuan Xu --- drivers/soc/rockchip/rockchip_thunderboot_mmc.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/soc/rockchip/rockchip_thunderboot_mmc.c b/drivers/soc/rockchip/rockchip_thunderboot_mmc.c index 3ca747066a6b..1dd41b456aae 100644 --- a/drivers/soc/rockchip/rockchip_thunderboot_mmc.c +++ b/drivers/soc/rockchip/rockchip_thunderboot_mmc.c @@ -17,6 +17,8 @@ #include #define SDMMC_CTRL 0x000 +#define SDMMC_CMDARG 0x028 +#define SDMMC_CMD 0x02c #define SDMMC_RINTSTS 0x044 #define SDMMC_STATUS 0x048 #define SDMMC_BMOD 0x080 @@ -84,6 +86,18 @@ static int rk_tb_mmc_thread(void *p) writel(0, regs + SDMMC_BMOD); writel(0, regs + SDMMC_DBADDR); + /* Send CMD12 to stop transmission */ + writel(0xffffffff, regs + SDMMC_RINTSTS); + writel(0, regs + SDMMC_CMDARG); + writel(0xa000414c, regs + SDMMC_CMD); + + if (readl_poll_timeout(regs + SDMMC_RINTSTS, status, + !(status & BIT(2)), 100, + 11 * USEC_PER_MSEC)) { + dev_err(dev, "Send CMD12 timeout!\n"); + goto out; + } + /* Parse ramdisk addr and help start decompressing */ if (rds && rdd) { struct resource src, dst; From c42d5b7f6cd18a8ecadf458a1e40be4f1a3efc3e Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Tue, 26 Aug 2025 12:32:02 +0800 Subject: [PATCH 8/9] mtd: spi-nor: puya: support PY25Q64LB Change-Id: I88341697eb2e30d05fd9a09af11b9dec47b97b69 Signed-off-by: Jon Lin --- drivers/mtd/spi-nor/puya.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/mtd/spi-nor/puya.c b/drivers/mtd/spi-nor/puya.c index f1b913c136c8..60c6bc7621c4 100644 --- a/drivers/mtd/spi-nor/puya.c +++ b/drivers/mtd/spi-nor/puya.c @@ -23,6 +23,9 @@ static const struct flash_info puya_parts[] = { { "PY25Q256HB", INFO(0x852019, 0, 64 * 1024, 512) NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) FIXUP_FLAGS(SPI_NOR_4B_OPCODES) }, + { "PY25Q64LB", INFO(0x856517, 0, 64 * 1024, 128) + NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | + SPI_NOR_QUAD_READ) }, { "PY25Q128LA", INFO(0x856518, 0, 64 * 1024, 256) NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, From ae9109eca6dec79d64974d8c197ebb31e5519bcd Mon Sep 17 00:00:00 2001 From: Zhang Yubing Date: Tue, 19 Aug 2025 11:54:39 +0800 Subject: [PATCH 9/9] drm/rockchip: dw-dp: protect panel status when show logo Change-Id: I506170da755fb25d43296e28378299392de177e3 Signed-off-by: Zhang Yubing --- drivers/gpu/drm/rockchip/dw-dp.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/rockchip/dw-dp.c b/drivers/gpu/drm/rockchip/dw-dp.c index 1feecb297866..8b3413ab11cb 100644 --- a/drivers/gpu/drm/rockchip/dw-dp.c +++ b/drivers/gpu/drm/rockchip/dw-dp.c @@ -3309,6 +3309,8 @@ static int dw_dp_loader_protect(struct rockchip_drm_sub_dev *sub_dev, bool on) struct dw_dp *dp = container_of(sub_dev, struct dw_dp, sub_dev); dp->is_loader_protect = true; + if (dp->panel) + rockchip_drm_panel_loader_protect(dp->panel, on); _dw_dp_loader_protect(dp, on); if (dp->right) _dw_dp_loader_protect(dp->right, on);