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"; 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 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); 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) }, 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); } diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c index d099e68e6cc8..f414230d437e 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; @@ -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; @@ -1802,7 +1802,8 @@ static int rk_pcie_remove(struct platform_device *pdev) if (IS_ENABLED(CONFIG_NO_GKI)) 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; @@ -1816,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); 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; 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)