mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-30 14:16:40 +00:00
Rockchip: linux: update patches for 5.14
This commit is contained in:
parent
55fc867644
commit
62b72db072
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,437 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
|
Date: Sat, 10 Oct 2020 15:32:18 +0000
|
||||||
|
Subject: [PATCH] phy/rockchip: inno-hdmi: use correct vco_div_5 macro on
|
||||||
|
rk3328
|
||||||
|
|
||||||
|
inno_hdmi_phy_rk3328_clk_set_rate() is using the RK3228 macro
|
||||||
|
when configuring vco_div_5 on RK3328.
|
||||||
|
|
||||||
|
Fix this by using correct vco_div_5 macro for RK3328.
|
||||||
|
|
||||||
|
Fixes: 53706a116863 ("phy: add Rockchip Innosilicon hdmi phy")
|
||||||
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||||
|
---
|
||||||
|
drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
index 80acca4e9e14..15339338aae3 100644
|
||||||
|
--- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
+++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
@@ -790,8 +790,8 @@ static int inno_hdmi_phy_rk3328_clk_set_rate(struct clk_hw *hw,
|
||||||
|
RK3328_PRE_PLL_POWER_DOWN);
|
||||||
|
|
||||||
|
/* Configure pre-pll */
|
||||||
|
- inno_update_bits(inno, 0xa0, RK3228_PCLK_VCO_DIV_5_MASK,
|
||||||
|
- RK3228_PCLK_VCO_DIV_5(cfg->vco_div_5_en));
|
||||||
|
+ inno_update_bits(inno, 0xa0, RK3328_PCLK_VCO_DIV_5_MASK,
|
||||||
|
+ RK3328_PCLK_VCO_DIV_5(cfg->vco_div_5_en));
|
||||||
|
inno_write(inno, 0xa1, RK3328_PRE_PLL_PRE_DIV(cfg->prediv));
|
||||||
|
|
||||||
|
val = RK3328_SPREAD_SPECTRUM_MOD_DISABLE;
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zheng Yang <zhengyang@rock-chips.com>
|
||||||
|
Date: Sat, 10 Oct 2020 15:32:18 +0000
|
||||||
|
Subject: [PATCH] phy/rockchip: inno-hdmi: round fractal pixclock in rk3328
|
||||||
|
recalc_rate
|
||||||
|
|
||||||
|
inno_hdmi_phy_rk3328_clk_recalc_rate() is returning a rate not found
|
||||||
|
in the pre pll config table when the fractal divider is used.
|
||||||
|
This can prevent proper power_on because a tmdsclock for the new rate
|
||||||
|
is not found in the pre pll config table.
|
||||||
|
|
||||||
|
Fix this by saving and returning a rounded pixel rate that exist
|
||||||
|
in the pre pll config table.
|
||||||
|
|
||||||
|
Fixes: 53706a116863 ("phy: add Rockchip Innosilicon hdmi phy")
|
||||||
|
Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
|
||||||
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||||
|
---
|
||||||
|
drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 8 +++++---
|
||||||
|
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
index 15339338aae3..15a008a1ac7b 100644
|
||||||
|
--- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
+++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
@@ -745,10 +745,12 @@ unsigned long inno_hdmi_phy_rk3328_clk_recalc_rate(struct clk_hw *hw,
|
||||||
|
do_div(vco, (nd * (no_a == 1 ? no_b : no_a) * no_d * 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
- inno->pixclock = vco;
|
||||||
|
- dev_dbg(inno->dev, "%s rate %lu\n", __func__, inno->pixclock);
|
||||||
|
+ inno->pixclock = DIV_ROUND_CLOSEST((unsigned long)vco, 1000) * 1000;
|
||||||
|
|
||||||
|
- return vco;
|
||||||
|
+ dev_dbg(inno->dev, "%s rate %lu vco %llu\n",
|
||||||
|
+ __func__, inno->pixclock, vco);
|
||||||
|
+
|
||||||
|
+ return inno->pixclock;
|
||||||
|
}
|
||||||
|
|
||||||
|
static long inno_hdmi_phy_rk3328_clk_round_rate(struct clk_hw *hw,
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
|
Date: Sat, 10 Oct 2020 15:32:19 +0000
|
||||||
|
Subject: [PATCH] phy/rockchip: inno-hdmi: remove unused no_c from rk3328
|
||||||
|
recalc_rate
|
||||||
|
|
||||||
|
no_c is not used in any calculation, lets remove it.
|
||||||
|
|
||||||
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||||
|
---
|
||||||
|
drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 5 +----
|
||||||
|
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
index 15a008a1ac7b..4b936ca19920 100644
|
||||||
|
--- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
+++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
@@ -714,7 +714,7 @@ unsigned long inno_hdmi_phy_rk3328_clk_recalc_rate(struct clk_hw *hw,
|
||||||
|
{
|
||||||
|
struct inno_hdmi_phy *inno = to_inno_hdmi_phy(hw);
|
||||||
|
unsigned long frac;
|
||||||
|
- u8 nd, no_a, no_b, no_c, no_d;
|
||||||
|
+ u8 nd, no_a, no_b, no_d;
|
||||||
|
u64 vco;
|
||||||
|
u16 nf;
|
||||||
|
|
||||||
|
@@ -737,9 +737,6 @@ unsigned long inno_hdmi_phy_rk3328_clk_recalc_rate(struct clk_hw *hw,
|
||||||
|
no_b = inno_read(inno, 0xa5) & RK3328_PRE_PLL_PCLK_DIV_B_MASK;
|
||||||
|
no_b >>= RK3328_PRE_PLL_PCLK_DIV_B_SHIFT;
|
||||||
|
no_b += 2;
|
||||||
|
- no_c = inno_read(inno, 0xa6) & RK3328_PRE_PLL_PCLK_DIV_C_MASK;
|
||||||
|
- no_c >>= RK3328_PRE_PLL_PCLK_DIV_C_SHIFT;
|
||||||
|
- no_c = 1 << no_c;
|
||||||
|
no_d = inno_read(inno, 0xa6) & RK3328_PRE_PLL_PCLK_DIV_D_MASK;
|
||||||
|
|
||||||
|
do_div(vco, (nd * (no_a == 1 ? no_b : no_a) * no_d * 2));
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
|
Date: Sat, 10 Oct 2020 15:32:19 +0000
|
||||||
|
Subject: [PATCH] phy/rockchip: inno-hdmi: do not power on rk3328 post pll on
|
||||||
|
reg write
|
||||||
|
|
||||||
|
inno_write is used to configure 0xaa reg, that also hold the
|
||||||
|
POST_PLL_POWER_DOWN bit.
|
||||||
|
When POST_PLL_REFCLK_SEL_TMDS is configured the power down bit is not
|
||||||
|
taken into consideration.
|
||||||
|
|
||||||
|
Fix this by keeping the power down bit until configuration is complete.
|
||||||
|
Also reorder the reg write order for consistency.
|
||||||
|
|
||||||
|
Fixes: 53706a116863 ("phy: add Rockchip Innosilicon hdmi phy")
|
||||||
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||||
|
---
|
||||||
|
drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
index 4b936ca19920..620961fcfc1d 100644
|
||||||
|
--- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
+++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
@@ -1020,9 +1020,10 @@ inno_hdmi_phy_rk3328_power_on(struct inno_hdmi_phy *inno,
|
||||||
|
|
||||||
|
inno_write(inno, 0xac, RK3328_POST_PLL_FB_DIV_7_0(cfg->fbdiv));
|
||||||
|
if (cfg->postdiv == 1) {
|
||||||
|
- inno_write(inno, 0xaa, RK3328_POST_PLL_REFCLK_SEL_TMDS);
|
||||||
|
inno_write(inno, 0xab, RK3328_POST_PLL_FB_DIV_8(cfg->fbdiv) |
|
||||||
|
RK3328_POST_PLL_PRE_DIV(cfg->prediv));
|
||||||
|
+ inno_write(inno, 0xaa, RK3328_POST_PLL_REFCLK_SEL_TMDS |
|
||||||
|
+ RK3328_POST_PLL_POWER_DOWN);
|
||||||
|
} else {
|
||||||
|
v = (cfg->postdiv / 2) - 1;
|
||||||
|
v &= RK3328_POST_PLL_POST_DIV_MASK;
|
||||||
|
@@ -1030,7 +1031,8 @@ inno_hdmi_phy_rk3328_power_on(struct inno_hdmi_phy *inno,
|
||||||
|
inno_write(inno, 0xab, RK3328_POST_PLL_FB_DIV_8(cfg->fbdiv) |
|
||||||
|
RK3328_POST_PLL_PRE_DIV(cfg->prediv));
|
||||||
|
inno_write(inno, 0xaa, RK3328_POST_PLL_POST_DIV_ENABLE |
|
||||||
|
- RK3328_POST_PLL_REFCLK_SEL_TMDS);
|
||||||
|
+ RK3328_POST_PLL_REFCLK_SEL_TMDS |
|
||||||
|
+ RK3328_POST_PLL_POWER_DOWN);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (v = 0; v < 14; v++)
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Huicong Xu <xhc@rock-chips.com>
|
||||||
|
Date: Sat, 10 Oct 2020 15:32:20 +0000
|
||||||
|
Subject: [PATCH] phy/rockchip: inno-hdmi: force set_rate on power_on
|
||||||
|
|
||||||
|
Regular 8-bit and Deep Color video formats mainly differ in TMDS rate and
|
||||||
|
not in pixel clock rate.
|
||||||
|
When the hdmiphy clock is configured with the same pixel clock rate using
|
||||||
|
clk_set_rate() the clock framework do not signal the hdmi phy driver
|
||||||
|
to set_rate when switching between 8-bit and Deep Color.
|
||||||
|
This result in pre/post pll not being re-configured when switching between
|
||||||
|
regular 8-bit and Deep Color video formats.
|
||||||
|
|
||||||
|
Fix this by calling set_rate in power_on to force pre pll re-configuration.
|
||||||
|
|
||||||
|
Signed-off-by: Huicong Xu <xhc@rock-chips.com>
|
||||||
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||||
|
---
|
||||||
|
drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 13 +++++++++++++
|
||||||
|
1 file changed, 13 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
index 620961fcfc1d..2f01259823ea 100644
|
||||||
|
--- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
+++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
|
@@ -245,6 +245,7 @@ struct inno_hdmi_phy {
|
||||||
|
struct clk_hw hw;
|
||||||
|
struct clk *phyclk;
|
||||||
|
unsigned long pixclock;
|
||||||
|
+ unsigned long tmdsclock;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct pre_pll_config {
|
||||||
|
@@ -485,6 +486,8 @@ static int inno_hdmi_phy_power_on(struct phy *phy)
|
||||||
|
|
||||||
|
dev_dbg(inno->dev, "Inno HDMI PHY Power On\n");
|
||||||
|
|
||||||
|
+ inno->plat_data->clk_ops->set_rate(&inno->hw, inno->pixclock, 24000000);
|
||||||
|
+
|
||||||
|
ret = clk_prepare_enable(inno->phyclk);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
@@ -509,6 +512,8 @@ static int inno_hdmi_phy_power_off(struct phy *phy)
|
||||||
|
|
||||||
|
clk_disable_unprepare(inno->phyclk);
|
||||||
|
|
||||||
|
+ inno->tmdsclock = 0;
|
||||||
|
+
|
||||||
|
dev_dbg(inno->dev, "Inno HDMI PHY Power Off\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
@@ -628,6 +633,9 @@ static int inno_hdmi_phy_rk3228_clk_set_rate(struct clk_hw *hw,
|
||||||
|
dev_dbg(inno->dev, "%s rate %lu tmdsclk %lu\n",
|
||||||
|
__func__, rate, tmdsclock);
|
||||||
|
|
||||||
|
+ if (inno->pixclock == rate && inno->tmdsclock == tmdsclock)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
cfg = inno_hdmi_phy_get_pre_pll_cfg(inno, rate);
|
||||||
|
if (IS_ERR(cfg))
|
||||||
|
return PTR_ERR(cfg);
|
||||||
|
@@ -670,6 +678,7 @@ static int inno_hdmi_phy_rk3228_clk_set_rate(struct clk_hw *hw,
|
||||||
|
}
|
||||||
|
|
||||||
|
inno->pixclock = rate;
|
||||||
|
+ inno->tmdsclock = tmdsclock;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -781,6 +790,9 @@ static int inno_hdmi_phy_rk3328_clk_set_rate(struct clk_hw *hw,
|
||||||
|
dev_dbg(inno->dev, "%s rate %lu tmdsclk %lu\n",
|
||||||
|
__func__, rate, tmdsclock);
|
||||||
|
|
||||||
|
+ if (inno->pixclock == rate && inno->tmdsclock == tmdsclock)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
cfg = inno_hdmi_phy_get_pre_pll_cfg(inno, rate);
|
||||||
|
if (IS_ERR(cfg))
|
||||||
|
return PTR_ERR(cfg);
|
||||||
|
@@ -820,6 +832,7 @@ static int inno_hdmi_phy_rk3328_clk_set_rate(struct clk_hw *hw,
|
||||||
|
}
|
||||||
|
|
||||||
|
inno->pixclock = rate;
|
||||||
|
+ inno->tmdsclock = tmdsclock;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
|
Date: Sun, 17 Feb 2019 22:14:38 +0000
|
||||||
|
Subject: [PATCH] mmc: core: set initial signal voltage on power off
|
||||||
|
|
||||||
|
Some boards have SD card connectors where the power rail cannot be switched
|
||||||
|
off by the driver. If the card has not been power cycled, it may still be
|
||||||
|
using 1.8V signaling after a warm re-boot. Bootroms expecting 3.3V signaling
|
||||||
|
will fail to boot from a UHS card that continue to use 1.8V signaling.
|
||||||
|
|
||||||
|
Set initial signal voltage in mmc_power_off() to allow re-boot to function.
|
||||||
|
|
||||||
|
This fixes re-boot with UHS cards on Asus Tinker Board (Rockchip RK3288),
|
||||||
|
same issue have been seen on some Rockchip RK3399 boards.
|
||||||
|
|
||||||
|
I am sending this as a RFC because I have no insights into SD/MMC subsystem,
|
||||||
|
this change fix a re-boot issue on my boards and does not break emmc/sdio.
|
||||||
|
Is this an acceptable workaround? Any advice is appreciated.
|
||||||
|
|
||||||
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||||
|
---
|
||||||
|
drivers/mmc/core/core.c | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
|
||||||
|
index 95fedcf56e4a..38e75b275bb6 100644
|
||||||
|
--- a/drivers/mmc/core/core.c
|
||||||
|
+++ b/drivers/mmc/core/core.c
|
||||||
|
@@ -1355,6 +1355,14 @@ void mmc_power_off(struct mmc_host *host)
|
||||||
|
if (host->ios.power_mode == MMC_POWER_OFF)
|
||||||
|
return;
|
||||||
|
|
||||||
|
+ mmc_set_initial_signal_voltage(host);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * This delay should be sufficient to allow the power supply
|
||||||
|
+ * to reach the minimum voltage.
|
||||||
|
+ */
|
||||||
|
+ mmc_delay(host->ios.power_delay_ms);
|
||||||
|
+
|
||||||
|
mmc_pwrseq_power_off(host);
|
||||||
|
|
||||||
|
host->ios.clock = 0;
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
|
Date: Wed, 23 Jun 2021 13:59:26 +0200
|
||||||
|
Subject: [PATCH] arm64: dts: rockchip: Fix GPU register width for RK3328
|
||||||
|
|
||||||
|
As can be seen in RK3328's TRM the register range for the GPU is
|
||||||
|
0xff300000 to 0xff330000.
|
||||||
|
It would (and does in vendor kernel) overlap with the registers of
|
||||||
|
the HEVC encoder (node/driver do not exist yet in upstream kernel).
|
||||||
|
See already existing h265e_mmu node.
|
||||||
|
|
||||||
|
Fixes: 752fbc0c8da7 ("arm64: dts: rockchip: add rk3328 mali gpu node")
|
||||||
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
|
---
|
||||||
|
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
|
index becc1c61b182..5b2020590f53 100644
|
||||||
|
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
|
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
|
@@ -599,7 +599,7 @@ saradc: adc@ff280000 {
|
||||||
|
|
||||||
|
gpu: gpu@ff300000 {
|
||||||
|
compatible = "rockchip,rk3328-mali", "arm,mali-450";
|
||||||
|
- reg = <0x0 0xff300000 0x0 0x40000>;
|
||||||
|
+ reg = <0x0 0xff300000 0x0 0x30000>;
|
||||||
|
interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
|
Date: Wed, 23 Jun 2021 16:59:18 +0200
|
||||||
|
Subject: [PATCH] arm64: dts: rockchip: Add sdmmc_ext for RK3328
|
||||||
|
|
||||||
|
RK3328 SoC has a fourth mmc controller called SDMMC_EXT. Some
|
||||||
|
boards have sdio wifi connected to it. In order to use it
|
||||||
|
one would have to add the pinctrls from sdmmc0ext group which
|
||||||
|
is done on board level.
|
||||||
|
|
||||||
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
|
---
|
||||||
|
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 14 ++++++++++++++
|
||||||
|
1 file changed, 14 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
|
index 5b2020590f53..df46edbec82c 100644
|
||||||
|
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
|
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
|
@@ -975,6 +975,20 @@ usb_host0_ohci: usb@ff5d0000 {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
+ sdmmc_ext: mmc@ff5f0000 {
|
||||||
|
+ compatible = "rockchip,rk3328-dw-mshc", "rockchip,rk3288-dw-mshc";
|
||||||
|
+ reg = <0x0 0xff5f0000 0x0 0x4000>;
|
||||||
|
+ interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
+ clocks = <&cru HCLK_SDMMC_EXT>, <&cru SCLK_SDMMC_EXT>,
|
||||||
|
+ <&cru SCLK_SDMMC_EXT_DRV>, <&cru SCLK_SDMMC_EXT_SAMPLE>;
|
||||||
|
+ clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
|
||||||
|
+ fifo-depth = <0x100>;
|
||||||
|
+ max-frequency = <150000000>;
|
||||||
|
+ resets = <&cru SRST_SDMMCEXT>;
|
||||||
|
+ reset-names = "reset";
|
||||||
|
+ status = "disabled";
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
usbdrd3: usb@ff600000 {
|
||||||
|
compatible = "rockchip,rk3328-dwc3", "snps,dwc3";
|
||||||
|
reg = <0x0 0xff600000 0x0 0x100000>;
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
|
Date: Wed, 23 Jun 2021 17:02:08 +0200
|
||||||
|
Subject: [PATCH] arm64: dts: rockchip: Add sdmmc/sdio/emmc reset controls for
|
||||||
|
RK3328
|
||||||
|
|
||||||
|
The DW MCI controller driver will use them to reset the IP block before
|
||||||
|
initialisation.
|
||||||
|
|
||||||
|
Fixes: d717f7352ec6 ("arm64: dts: rockchip: add sdmmc/sdio/emmc nodes for RK3328 SoCs")
|
||||||
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
|
---
|
||||||
|
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
|
index df46edbec82c..cfc57be009a6 100644
|
||||||
|
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
|
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
|
@@ -853,6 +853,8 @@ sdmmc: mmc@ff500000 {
|
||||||
|
clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
|
||||||
|
fifo-depth = <0x100>;
|
||||||
|
max-frequency = <150000000>;
|
||||||
|
+ resets = <&cru SRST_MMC0>;
|
||||||
|
+ reset-names = "reset";
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -865,6 +867,8 @@ sdio: mmc@ff510000 {
|
||||||
|
clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
|
||||||
|
fifo-depth = <0x100>;
|
||||||
|
max-frequency = <150000000>;
|
||||||
|
+ resets = <&cru SRST_SDIO>;
|
||||||
|
+ reset-names = "reset";
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -877,6 +881,8 @@ emmc: mmc@ff520000 {
|
||||||
|
clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
|
||||||
|
fifo-depth = <0x100>;
|
||||||
|
max-frequency = <150000000>;
|
||||||
|
+ resets = <&cru SRST_EMMC>;
|
||||||
|
+ reset-names = "reset";
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
|
Date: Sat, 21 Aug 2021 19:13:31 +0200
|
||||||
|
Subject: [PATCH] Commit a728c10dd62a ("arm64: dts: rockchip: remove
|
||||||
|
interrupt-names from iommu nodes") intended to remove the interrupt-names
|
||||||
|
property for the mmu nodes. It also removed them for the vpu node in
|
||||||
|
rk3399.dtsi which currently results in a non-working driver. Fix this by
|
||||||
|
re-adding them.
|
||||||
|
|
||||||
|
Fixes: a728c10dd62a ("arm64: dts: rockchip: remove interrupt-names from iommu nodes")
|
||||||
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
|
---
|
||||||
|
arch/arm64/boot/dts/rockchip/rk3399.dtsi | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
|
index 9db9484ca38f..44def886b391 100644
|
||||||
|
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
|
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
|
@@ -1240,6 +1240,7 @@ vpu: video-codec@ff650000 {
|
||||||
|
reg = <0x0 0xff650000 0x0 0x800>;
|
||||||
|
interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||||
|
<GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||||
|
+ interrupt-names = "vepu", "vdpu";
|
||||||
|
clocks = <&cru ACLK_VCODEC>, <&cru HCLK_VCODEC>;
|
||||||
|
clock-names = "aclk", "hclk";
|
||||||
|
iommus = <&vpu_mmu>;
|
@ -1,219 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Peter Geis <pgwipeout@gmail.com>
|
|
||||||
Date: Tue, 11 May 2021 17:13:34 -0400
|
|
||||||
Subject: [PATCH] regulator: fan53555: only bind tcs4525 to correct chip id
|
|
||||||
|
|
||||||
The tcs4525 regulator has a chip id of <12>.
|
|
||||||
Only allow the driver to bind to the correct chip id for safety, in
|
|
||||||
accordance with the other supported devices.
|
|
||||||
|
|
||||||
Signed-off-by: Peter Geis <pgwipeout@gmail.com>
|
|
||||||
Link: https://lore.kernel.org/r/20210511211335.2935163-3-pgwipeout@gmail.com
|
|
||||||
Signed-off-by: Mark Brown <broonie@kernel.org>
|
|
||||||
---
|
|
||||||
drivers/regulator/fan53555.c | 25 ++++++++++++++++++-------
|
|
||||||
1 file changed, 18 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/regulator/fan53555.c b/drivers/regulator/fan53555.c
|
|
||||||
index 26f06f685b1b..16f28f9df6a1 100644
|
|
||||||
--- a/drivers/regulator/fan53555.c
|
|
||||||
+++ b/drivers/regulator/fan53555.c
|
|
||||||
@@ -89,6 +89,10 @@ enum {
|
|
||||||
FAN53555_CHIP_ID_08 = 8,
|
|
||||||
};
|
|
||||||
|
|
||||||
+enum {
|
|
||||||
+ TCS4525_CHIP_ID_12 = 12,
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
/* IC mask revision */
|
|
||||||
enum {
|
|
||||||
FAN53555_CHIP_REV_00 = 0x3,
|
|
||||||
@@ -368,14 +372,21 @@ static int fan53555_voltages_setup_silergy(struct fan53555_device_info *di)
|
|
||||||
|
|
||||||
static int fan53555_voltages_setup_tcs(struct fan53555_device_info *di)
|
|
||||||
{
|
|
||||||
- di->slew_reg = TCS4525_TIME;
|
|
||||||
- di->slew_mask = TCS_SLEW_MASK;
|
|
||||||
- di->slew_shift = TCS_SLEW_MASK;
|
|
||||||
+ switch (di->chip_id) {
|
|
||||||
+ case TCS4525_CHIP_ID_12:
|
|
||||||
+ di->slew_reg = TCS4525_TIME;
|
|
||||||
+ di->slew_mask = TCS_SLEW_MASK;
|
|
||||||
+ di->slew_shift = TCS_SLEW_MASK;
|
|
||||||
|
|
||||||
- /* Init voltage range and step */
|
|
||||||
- di->vsel_min = 600000;
|
|
||||||
- di->vsel_step = 6250;
|
|
||||||
- di->vsel_count = FAN53526_NVOLTAGES;
|
|
||||||
+ /* Init voltage range and step */
|
|
||||||
+ di->vsel_min = 600000;
|
|
||||||
+ di->vsel_step = 6250;
|
|
||||||
+ di->vsel_count = FAN53526_NVOLTAGES;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ dev_err(di->dev, "Chip ID %d not supported!\n", di->chip_id);
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Peter Geis <pgwipeout@gmail.com>
|
|
||||||
Date: Tue, 11 May 2021 17:13:35 -0400
|
|
||||||
Subject: [PATCH] regulator: fan53555: fix tcs4525 function names
|
|
||||||
|
|
||||||
The tcs4525 is based off the fan53526.
|
|
||||||
Rename the tcs4525 functions to align with this.
|
|
||||||
|
|
||||||
Signed-off-by: Peter Geis <pgwipeout@gmail.com>
|
|
||||||
Link: https://lore.kernel.org/r/20210511211335.2935163-4-pgwipeout@gmail.com
|
|
||||||
Signed-off-by: Mark Brown <broonie@kernel.org>
|
|
||||||
---
|
|
||||||
drivers/regulator/fan53555.c | 18 +++++++++---------
|
|
||||||
1 file changed, 9 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/regulator/fan53555.c b/drivers/regulator/fan53555.c
|
|
||||||
index 16f28f9df6a1..2695be617373 100644
|
|
||||||
--- a/drivers/regulator/fan53555.c
|
|
||||||
+++ b/drivers/regulator/fan53555.c
|
|
||||||
@@ -67,7 +67,7 @@ enum fan53555_vendor {
|
|
||||||
FAN53526_VENDOR_FAIRCHILD = 0,
|
|
||||||
FAN53555_VENDOR_FAIRCHILD,
|
|
||||||
FAN53555_VENDOR_SILERGY,
|
|
||||||
- FAN53555_VENDOR_TCS,
|
|
||||||
+ FAN53526_VENDOR_TCS,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
|
||||||
@@ -233,7 +233,7 @@ static int fan53555_set_ramp(struct regulator_dev *rdev, int ramp)
|
|
||||||
slew_rate_t = slew_rates;
|
|
||||||
slew_rate_n = ARRAY_SIZE(slew_rates);
|
|
||||||
break;
|
|
||||||
- case FAN53555_VENDOR_TCS:
|
|
||||||
+ case FAN53526_VENDOR_TCS:
|
|
||||||
slew_rate_t = tcs_slew_rates;
|
|
||||||
slew_rate_n = ARRAY_SIZE(tcs_slew_rates);
|
|
||||||
break;
|
|
||||||
@@ -370,7 +370,7 @@ static int fan53555_voltages_setup_silergy(struct fan53555_device_info *di)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int fan53555_voltages_setup_tcs(struct fan53555_device_info *di)
|
|
||||||
+static int fan53526_voltages_setup_tcs(struct fan53555_device_info *di)
|
|
||||||
{
|
|
||||||
switch (di->chip_id) {
|
|
||||||
case TCS4525_CHIP_ID_12:
|
|
||||||
@@ -420,7 +420,7 @@ static int fan53555_device_setup(struct fan53555_device_info *di,
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
- case FAN53555_VENDOR_TCS:
|
|
||||||
+ case FAN53526_VENDOR_TCS:
|
|
||||||
switch (pdata->sleep_vsel_id) {
|
|
||||||
case FAN53555_VSEL_ID_0:
|
|
||||||
di->sleep_reg = TCS4525_VSEL0;
|
|
||||||
@@ -459,7 +459,7 @@ static int fan53555_device_setup(struct fan53555_device_info *di,
|
|
||||||
di->mode_reg = di->vol_reg;
|
|
||||||
di->mode_mask = VSEL_MODE;
|
|
||||||
break;
|
|
||||||
- case FAN53555_VENDOR_TCS:
|
|
||||||
+ case FAN53526_VENDOR_TCS:
|
|
||||||
di->mode_reg = TCS4525_COMMAND;
|
|
||||||
|
|
||||||
switch (pdata->sleep_vsel_id) {
|
|
||||||
@@ -487,8 +487,8 @@ static int fan53555_device_setup(struct fan53555_device_info *di,
|
|
||||||
case FAN53555_VENDOR_SILERGY:
|
|
||||||
ret = fan53555_voltages_setup_silergy(di);
|
|
||||||
break;
|
|
||||||
- case FAN53555_VENDOR_TCS:
|
|
||||||
- ret = fan53555_voltages_setup_tcs(di);
|
|
||||||
+ case FAN53526_VENDOR_TCS:
|
|
||||||
+ ret = fan53526_voltages_setup_tcs(di);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
dev_err(di->dev, "vendor %d not supported!\n", di->vendor);
|
|
||||||
@@ -563,7 +563,7 @@ static const struct of_device_id __maybe_unused fan53555_dt_ids[] = {
|
|
||||||
.data = (void *)FAN53555_VENDOR_SILERGY,
|
|
||||||
}, {
|
|
||||||
.compatible = "tcs,tcs4525",
|
|
||||||
- .data = (void *)FAN53555_VENDOR_TCS
|
|
||||||
+ .data = (void *)FAN53526_VENDOR_TCS
|
|
||||||
},
|
|
||||||
{ }
|
|
||||||
};
|
|
||||||
@@ -671,7 +671,7 @@ static const struct i2c_device_id fan53555_id[] = {
|
|
||||||
.driver_data = FAN53555_VENDOR_SILERGY
|
|
||||||
}, {
|
|
||||||
.name = "tcs4525",
|
|
||||||
- .driver_data = FAN53555_VENDOR_TCS
|
|
||||||
+ .driver_data = FAN53526_VENDOR_TCS
|
|
||||||
},
|
|
||||||
{ },
|
|
||||||
};
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Axel Lin <axel.lin@ingics.com>
|
|
||||||
Date: Mon, 17 May 2021 09:03:17 +0800
|
|
||||||
Subject: [PATCH] regulator: fan53555: Fix slew_shift setting for tcs4525
|
|
||||||
|
|
||||||
Fix trivial copy-paste mistake.
|
|
||||||
|
|
||||||
Signed-off-by: Axel Lin <axel.lin@ingics.com>
|
|
||||||
Link: https://lore.kernel.org/r/20210517010318.1027949-1-axel.lin@ingics.com
|
|
||||||
Signed-off-by: Mark Brown <broonie@kernel.org>
|
|
||||||
---
|
|
||||||
drivers/regulator/fan53555.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/regulator/fan53555.c b/drivers/regulator/fan53555.c
|
|
||||||
index 2695be617373..d582ef3a3aeb 100644
|
|
||||||
--- a/drivers/regulator/fan53555.c
|
|
||||||
+++ b/drivers/regulator/fan53555.c
|
|
||||||
@@ -376,7 +376,7 @@ static int fan53526_voltages_setup_tcs(struct fan53555_device_info *di)
|
|
||||||
case TCS4525_CHIP_ID_12:
|
|
||||||
di->slew_reg = TCS4525_TIME;
|
|
||||||
di->slew_mask = TCS_SLEW_MASK;
|
|
||||||
- di->slew_shift = TCS_SLEW_MASK;
|
|
||||||
+ di->slew_shift = TCS_SLEW_SHIFT;
|
|
||||||
|
|
||||||
/* Init voltage range and step */
|
|
||||||
di->vsel_min = 600000;
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Axel Lin <axel.lin@ingics.com>
|
|
||||||
Date: Mon, 17 May 2021 09:03:18 +0800
|
|
||||||
Subject: [PATCH] regulator: fan53555: Cleanup unused define and redundant
|
|
||||||
assignment
|
|
||||||
|
|
||||||
TCS_VSEL_NSEL_MASK is not used so remove it.
|
|
||||||
Also remove redundant assignment for di->slew_reg.
|
|
||||||
|
|
||||||
Signed-off-by: Axel Lin <axel.lin@ingics.com>
|
|
||||||
Link: https://lore.kernel.org/r/20210517010318.1027949-2-axel.lin@ingics.com
|
|
||||||
Signed-off-by: Mark Brown <broonie@kernel.org>
|
|
||||||
---
|
|
||||||
drivers/regulator/fan53555.c | 2 --
|
|
||||||
1 file changed, 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/regulator/fan53555.c b/drivers/regulator/fan53555.c
|
|
||||||
index d582ef3a3aeb..f3f49cf3731b 100644
|
|
||||||
--- a/drivers/regulator/fan53555.c
|
|
||||||
+++ b/drivers/regulator/fan53555.c
|
|
||||||
@@ -56,7 +56,6 @@
|
|
||||||
#define FAN53555_NVOLTAGES 64 /* Numbers of voltages */
|
|
||||||
#define FAN53526_NVOLTAGES 128
|
|
||||||
|
|
||||||
-#define TCS_VSEL_NSEL_MASK 0x7f
|
|
||||||
#define TCS_VSEL0_MODE (1 << 7)
|
|
||||||
#define TCS_VSEL1_MODE (1 << 6)
|
|
||||||
|
|
||||||
@@ -362,7 +361,6 @@ static int fan53555_voltages_setup_silergy(struct fan53555_device_info *di)
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
di->slew_reg = FAN53555_CONTROL;
|
|
||||||
- di->slew_reg = FAN53555_CONTROL;
|
|
||||||
di->slew_mask = CTL_SLEW_MASK;
|
|
||||||
di->slew_shift = CTL_SLEW_SHIFT;
|
|
||||||
di->vsel_count = FAN53555_NVOLTAGES;
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,7 @@ Reviewed-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
index 7cc3b478a5f4..054d2e3eed67 100644
|
index 76e97cbe2512..af44a16c0c4a 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
@@ -752,7 +752,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
@@ -752,7 +752,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||||
@ -47,10 +47,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 2 insertions(+)
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index 1263991de76f..71a6b7b0b057 100644
|
index 7131156c1f2c..65a8334a188b 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -223,6 +223,8 @@ static int rkvdec_try_capture_fmt(struct file *file, void *priv,
|
@@ -233,6 +233,8 @@ static int rkvdec_try_capture_fmt(struct file *file, void *priv,
|
||||||
pix_mp->pixelformat = coded_desc->decoded_fmts[0];
|
pix_mp->pixelformat = coded_desc->decoded_fmts[0];
|
||||||
|
|
||||||
/* Always apply the frmsize constraint of the coded end. */
|
/* Always apply the frmsize constraint of the coded end. */
|
||||||
@ -83,7 +83,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
2 files changed, 12 insertions(+), 2 deletions(-)
|
2 files changed, 12 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
index 054d2e3eed67..d46424ba88e8 100644
|
index af44a16c0c4a..9852c3519f56 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
@@ -671,8 +671,8 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx,
|
@@ -671,8 +671,8 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx,
|
||||||
@ -98,7 +98,7 @@ index 054d2e3eed67..d46424ba88e8 100644
|
|||||||
FRAME_MBS_ONLY_FLAG);
|
FRAME_MBS_ONLY_FLAG);
|
||||||
WRITE_PPS(!!(sps->flags & V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD),
|
WRITE_PPS(!!(sps->flags & V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD),
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index 71a6b7b0b057..f405dd72ad93 100644
|
index 65a8334a188b..f4c5ee4a1e26 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -29,8 +29,11 @@
|
@@ -29,8 +29,11 @@
|
||||||
@ -146,7 +146,7 @@ Reviewed-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
index d46424ba88e8..6536cf0d6054 100644
|
index 9852c3519f56..f3ff3e709169 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
@@ -661,8 +661,8 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx,
|
@@ -661,8 +661,8 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx,
|
||||||
@ -179,7 +179,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
index 6536cf0d6054..bf632d45282b 100644
|
index f3ff3e709169..503ae683d0fd 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
@@ -1015,8 +1015,9 @@ static int rkvdec_h264_adjust_fmt(struct rkvdec_ctx *ctx,
|
@@ -1015,8 +1015,9 @@ static int rkvdec_h264_adjust_fmt(struct rkvdec_ctx *ctx,
|
||||||
@ -214,7 +214,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 38 insertions(+), 39 deletions(-)
|
1 file changed, 38 insertions(+), 39 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
|
diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
|
||||||
index 3dc17ebe14fa..4102c373b48a 100644
|
index 04af03285a20..ae585828c388 100644
|
||||||
--- a/drivers/media/v4l2-core/v4l2-common.c
|
--- a/drivers/media/v4l2-core/v4l2-common.c
|
||||||
+++ b/drivers/media/v4l2-core/v4l2-common.c
|
+++ b/drivers/media/v4l2-core/v4l2-common.c
|
||||||
@@ -333,6 +333,33 @@ static inline unsigned int v4l2_format_block_height(const struct v4l2_format_inf
|
@@ -333,6 +333,33 @@ static inline unsigned int v4l2_format_block_height(const struct v4l2_format_inf
|
||||||
@ -345,230 +345,13 @@ of 8 for NV15 and 4 for NV20.
|
|||||||
|
|
||||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||||
---
|
---
|
||||||
.../userspace-api/media/v4l/pixfmt-nv15.rst | 101 ++++++++++++++++++
|
drivers/media/v4l2-core/v4l2-common.c | 3 +++
|
||||||
.../userspace-api/media/v4l/pixfmt-nv20.rst | 99 +++++++++++++++++
|
drivers/media/v4l2-core/v4l2-ioctl.c | 2 ++
|
||||||
.../userspace-api/media/v4l/yuv-formats.rst | 2 +
|
include/uapi/linux/videodev2.h | 3 +++
|
||||||
drivers/media/v4l2-core/v4l2-common.c | 3 +
|
3 files changed, 8 insertions(+)
|
||||||
drivers/media/v4l2-core/v4l2-ioctl.c | 2 +
|
|
||||||
include/uapi/linux/videodev2.h | 3 +
|
|
||||||
6 files changed, 210 insertions(+)
|
|
||||||
create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-nv15.rst
|
|
||||||
create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-nv20.rst
|
|
||||||
|
|
||||||
diff --git a/Documentation/userspace-api/media/v4l/pixfmt-nv15.rst b/Documentation/userspace-api/media/v4l/pixfmt-nv15.rst
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000000..d059db58c6e0
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/Documentation/userspace-api/media/v4l/pixfmt-nv15.rst
|
|
||||||
@@ -0,0 +1,101 @@
|
|
||||||
+.. Permission is granted to copy, distribute and/or modify this
|
|
||||||
+.. document under the terms of the GNU Free Documentation License,
|
|
||||||
+.. Version 1.1 or any later version published by the Free Software
|
|
||||||
+.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
|
||||||
+.. and no Back-Cover Texts. A copy of the license is included at
|
|
||||||
+.. Documentation/userspace-api/media/fdl-appendix.rst.
|
|
||||||
+..
|
|
||||||
+.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
|
||||||
+
|
|
||||||
+.. _V4L2-PIX-FMT-NV15:
|
|
||||||
+
|
|
||||||
+**************************
|
|
||||||
+V4L2_PIX_FMT_NV15 ('NV15')
|
|
||||||
+**************************
|
|
||||||
+
|
|
||||||
+Format with ½ horizontal and vertical chroma resolution, also known as
|
|
||||||
+YUV 4:2:0. One luminance and one chrominance plane with alternating
|
|
||||||
+chroma samples similar to ``V4L2_PIX_FMT_NV12`` but with 10-bit samples
|
|
||||||
+that are grouped into four and packed into five bytes.
|
|
||||||
+
|
|
||||||
+The '15' suffix refers to the optimum effective bits per pixel which is
|
|
||||||
+achieved when the total number of luminance samples is a multiple of 8.
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+Description
|
|
||||||
+===========
|
|
||||||
+
|
|
||||||
+This is a packed 10-bit two-plane version of the YUV 4:2:0 format. The
|
|
||||||
+three components are separated into two sub-images or planes. The Y plane
|
|
||||||
+is first. The Y plane has five bytes per each group of four pixels. A
|
|
||||||
+combined CbCr plane immediately follows the Y plane in memory. The CbCr
|
|
||||||
+plane is the same width, in bytes, as the Y plane (and of the image), but
|
|
||||||
+is half as tall in pixels. Each CbCr pair belongs to four pixels. For
|
|
||||||
+example, Cb\ :sub:`00`/Cr\ :sub:`00` belongs to Y'\ :sub:`00`,
|
|
||||||
+Y'\ :sub:`01`, Y'\ :sub:`10`, Y'\ :sub:`11`.
|
|
||||||
+
|
|
||||||
+If the Y plane has pad bytes after each row, then the CbCr plane has as
|
|
||||||
+many pad bytes after its rows.
|
|
||||||
+
|
|
||||||
+**Byte Order.**
|
|
||||||
+Little endian. Each cell is one byte. Pixels cross the byte boundary.
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+.. flat-table::
|
|
||||||
+ :header-rows: 0
|
|
||||||
+ :stub-columns: 0
|
|
||||||
+
|
|
||||||
+ * - start + 0:
|
|
||||||
+ - Y'\ :sub:`00[7:0]`
|
|
||||||
+ - Y'\ :sub:`01[5:0]`\ Y'\ :sub:`00[9:8]`
|
|
||||||
+ - Y'\ :sub:`02[3:0]`\ Y'\ :sub:`01[9:6]`
|
|
||||||
+ - Y'\ :sub:`03[1:0]`\ Y'\ :sub:`02[9:4]`
|
|
||||||
+ - Y'\ :sub:`03[9:2]`
|
|
||||||
+ * - start + 5:
|
|
||||||
+ - Y'\ :sub:`10[7:0]`
|
|
||||||
+ - Y'\ :sub:`11[5:0]`\ Y'\ :sub:`10[9:8]`
|
|
||||||
+ - Y'\ :sub:`12[3:0]`\ Y'\ :sub:`11[9:6]`
|
|
||||||
+ - Y'\ :sub:`13[1:0]`\ Y'\ :sub:`12[9:4]`
|
|
||||||
+ - Y'\ :sub:`13[9:2]`
|
|
||||||
+ * - start + 10:
|
|
||||||
+ - Cb'\ :sub:`00[7:0]`
|
|
||||||
+ - Cr'\ :sub:`00[5:0]`\ Cb'\ :sub:`00[9:8]`
|
|
||||||
+ - Cb'\ :sub:`01[3:0]`\ Cr'\ :sub:`00[9:6]`
|
|
||||||
+ - Cr'\ :sub:`01[1:0]`\ Cb'\ :sub:`01[9:4]`
|
|
||||||
+ - Cr'\ :sub:`01[9:2]`
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+**Color Sample Location:**
|
|
||||||
+
|
|
||||||
+.. flat-table::
|
|
||||||
+ :header-rows: 0
|
|
||||||
+ :stub-columns: 0
|
|
||||||
+
|
|
||||||
+ * -
|
|
||||||
+ - 0
|
|
||||||
+ -
|
|
||||||
+ - 1
|
|
||||||
+ - 2
|
|
||||||
+ -
|
|
||||||
+ - 3
|
|
||||||
+ * - 0
|
|
||||||
+ - Y
|
|
||||||
+ -
|
|
||||||
+ - Y
|
|
||||||
+ - Y
|
|
||||||
+ -
|
|
||||||
+ - Y
|
|
||||||
+ * -
|
|
||||||
+ -
|
|
||||||
+ - C
|
|
||||||
+ -
|
|
||||||
+ -
|
|
||||||
+ - C
|
|
||||||
+ -
|
|
||||||
+ * - 1
|
|
||||||
+ - Y
|
|
||||||
+ -
|
|
||||||
+ - Y
|
|
||||||
+ - Y
|
|
||||||
+ -
|
|
||||||
+ - Y
|
|
||||||
diff --git a/Documentation/userspace-api/media/v4l/pixfmt-nv20.rst b/Documentation/userspace-api/media/v4l/pixfmt-nv20.rst
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000000..a8123be0baa3
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/Documentation/userspace-api/media/v4l/pixfmt-nv20.rst
|
|
||||||
@@ -0,0 +1,99 @@
|
|
||||||
+.. Permission is granted to copy, distribute and/or modify this
|
|
||||||
+.. document under the terms of the GNU Free Documentation License,
|
|
||||||
+.. Version 1.1 or any later version published by the Free Software
|
|
||||||
+.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
|
||||||
+.. and no Back-Cover Texts. A copy of the license is included at
|
|
||||||
+.. Documentation/userspace-api/media/fdl-appendix.rst.
|
|
||||||
+..
|
|
||||||
+.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
|
||||||
+
|
|
||||||
+.. _V4L2-PIX-FMT-NV20:
|
|
||||||
+
|
|
||||||
+**************************
|
|
||||||
+V4L2_PIX_FMT_NV20 ('NV20')
|
|
||||||
+**************************
|
|
||||||
+
|
|
||||||
+Format with ½ horizontal chroma resolution, also known as YUV 4:2:2.
|
|
||||||
+One luminance and one chrominance plane with alternating chroma samples
|
|
||||||
+similar to ``V4L2_PIX_FMT_NV16`` but with 10-bit samples
|
|
||||||
+that are grouped into four and packed into five bytes.
|
|
||||||
+
|
|
||||||
+The '20' suffix refers to the optimum effective bits per pixel which is
|
|
||||||
+achieved when the total number of luminance samples is a multiple of 4.
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+Description
|
|
||||||
+===========
|
|
||||||
+
|
|
||||||
+This is a packed 10-bit two-plane version of the YUV 4:2:2 format. The
|
|
||||||
+three components are separated into two sub-images or planes. The Y plane
|
|
||||||
+is first. The Y plane has five bytes per each group of four pixels. A
|
|
||||||
+combined CbCr plane immediately follows the Y plane in memory. The CbCr
|
|
||||||
+plane is the same width and height, in bytes, as the Y plane (and of the
|
|
||||||
+image). Each CbCr pair belongs to two pixels. For example,
|
|
||||||
+Cb\ :sub:`00`/Cr\ :sub:`00` belongs to Y'\ :sub:`00`, Y'\ :sub:`01`.
|
|
||||||
+
|
|
||||||
+If the Y plane has pad bytes after each row, then the CbCr plane has as
|
|
||||||
+many pad bytes after its rows.
|
|
||||||
+
|
|
||||||
+**Byte Order.**
|
|
||||||
+Little endian. Each cell is one byte. Pixels cross the byte boundary.
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+.. flat-table::
|
|
||||||
+ :header-rows: 0
|
|
||||||
+ :stub-columns: 0
|
|
||||||
+
|
|
||||||
+ * - start + 0:
|
|
||||||
+ - Y'\ :sub:`00[7:0]`
|
|
||||||
+ - Y'\ :sub:`01[5:0]`\ Y'\ :sub:`00[9:8]`
|
|
||||||
+ - Y'\ :sub:`02[3:0]`\ Y'\ :sub:`01[9:6]`
|
|
||||||
+ - Y'\ :sub:`03[1:0]`\ Y'\ :sub:`02[9:4]`
|
|
||||||
+ - Y'\ :sub:`03[9:2]`
|
|
||||||
+ * - start + 5:
|
|
||||||
+ - Y'\ :sub:`10[7:0]`
|
|
||||||
+ - Y'\ :sub:`11[5:0]`\ Y'\ :sub:`10[9:8]`
|
|
||||||
+ - Y'\ :sub:`12[3:0]`\ Y'\ :sub:`11[9:6]`
|
|
||||||
+ - Y'\ :sub:`13[1:0]`\ Y'\ :sub:`12[9:4]`
|
|
||||||
+ - Y'\ :sub:`13[9:2]`
|
|
||||||
+ * - start + 10:
|
|
||||||
+ - Cb'\ :sub:`00[7:0]`
|
|
||||||
+ - Cr'\ :sub:`00[5:0]`\ Cb'\ :sub:`00[9:8]`
|
|
||||||
+ - Cb'\ :sub:`01[3:0]`\ Cr'\ :sub:`00[9:6]`
|
|
||||||
+ - Cr'\ :sub:`01[1:0]`\ Cb'\ :sub:`01[9:4]`
|
|
||||||
+ - Cr'\ :sub:`01[9:2]`
|
|
||||||
+ * - start + 15:
|
|
||||||
+ - Cb'\ :sub:`10[7:0]`
|
|
||||||
+ - Cr'\ :sub:`10[5:0]`\ Cb'\ :sub:`10[9:8]`
|
|
||||||
+ - Cb'\ :sub:`11[3:0]`\ Cr'\ :sub:`10[9:6]`
|
|
||||||
+ - Cr'\ :sub:`11[1:0]`\ Cb'\ :sub:`11[9:4]`
|
|
||||||
+ - Cr'\ :sub:`11[9:2]`
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+**Color Sample Location:**
|
|
||||||
+
|
|
||||||
+.. flat-table::
|
|
||||||
+ :header-rows: 0
|
|
||||||
+ :stub-columns: 0
|
|
||||||
+
|
|
||||||
+ * -
|
|
||||||
+ - 0
|
|
||||||
+ -
|
|
||||||
+ - 1
|
|
||||||
+ - 2
|
|
||||||
+ -
|
|
||||||
+ - 3
|
|
||||||
+ * - 0
|
|
||||||
+ - Y
|
|
||||||
+ - C
|
|
||||||
+ - Y
|
|
||||||
+ - Y
|
|
||||||
+ - C
|
|
||||||
+ - Y
|
|
||||||
+ * - 1
|
|
||||||
+ - Y
|
|
||||||
+ - C
|
|
||||||
+ - Y
|
|
||||||
+ - Y
|
|
||||||
+ - C
|
|
||||||
+ - Y
|
|
||||||
diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
|
diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
|
||||||
index 4102c373b48a..0caac755d303 100644
|
index ae585828c388..5bafbdbe30b0 100644
|
||||||
--- a/drivers/media/v4l2-core/v4l2-common.c
|
--- a/drivers/media/v4l2-core/v4l2-common.c
|
||||||
+++ b/drivers/media/v4l2-core/v4l2-common.c
|
+++ b/drivers/media/v4l2-core/v4l2-common.c
|
||||||
@@ -267,6 +267,9 @@ const struct v4l2_format_info *v4l2_format_info(u32 format)
|
@@ -267,6 +267,9 @@ const struct v4l2_format_info *v4l2_format_info(u32 format)
|
||||||
@ -582,10 +365,10 @@ index 4102c373b48a..0caac755d303 100644
|
|||||||
{ .format = V4L2_PIX_FMT_YVU410, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 4 },
|
{ .format = V4L2_PIX_FMT_YVU410, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 4 },
|
||||||
{ .format = V4L2_PIX_FMT_YUV411P, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 1 },
|
{ .format = V4L2_PIX_FMT_YUV411P, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 1 },
|
||||||
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
|
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
|
||||||
index 9eda8b91d17a..1ff68c1bf14a 100644
|
index 05d5db3d85e5..fe43d785414c 100644
|
||||||
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
|
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
|
||||||
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
|
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
|
||||||
@@ -1319,6 +1319,8 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
|
@@ -1282,6 +1282,8 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
|
||||||
case V4L2_PIX_FMT_NV61: descr = "Y/CrCb 4:2:2"; break;
|
case V4L2_PIX_FMT_NV61: descr = "Y/CrCb 4:2:2"; break;
|
||||||
case V4L2_PIX_FMT_NV24: descr = "Y/CbCr 4:4:4"; break;
|
case V4L2_PIX_FMT_NV24: descr = "Y/CbCr 4:4:4"; break;
|
||||||
case V4L2_PIX_FMT_NV42: descr = "Y/CrCb 4:4:4"; break;
|
case V4L2_PIX_FMT_NV42: descr = "Y/CrCb 4:4:4"; break;
|
||||||
@ -595,12 +378,12 @@ index 9eda8b91d17a..1ff68c1bf14a 100644
|
|||||||
case V4L2_PIX_FMT_NV21M: descr = "Y/CrCb 4:2:0 (N-C)"; break;
|
case V4L2_PIX_FMT_NV21M: descr = "Y/CrCb 4:2:0 (N-C)"; break;
|
||||||
case V4L2_PIX_FMT_NV16M: descr = "Y/CbCr 4:2:2 (N-C)"; break;
|
case V4L2_PIX_FMT_NV16M: descr = "Y/CbCr 4:2:2 (N-C)"; break;
|
||||||
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
|
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
|
||||||
index 534eaa4d39bc..f21eba15ceae 100644
|
index 9260791b8438..169f8ad6fade 100644
|
||||||
--- a/include/uapi/linux/videodev2.h
|
--- a/include/uapi/linux/videodev2.h
|
||||||
+++ b/include/uapi/linux/videodev2.h
|
+++ b/include/uapi/linux/videodev2.h
|
||||||
@@ -609,6 +609,9 @@ struct v4l2_pix_format {
|
@@ -603,6 +603,9 @@ struct v4l2_pix_format {
|
||||||
#define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4') /* 24 Y/CbCr 4:4:4 */
|
|
||||||
#define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2') /* 24 Y/CrCb 4:4:4 */
|
#define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2') /* 24 Y/CrCb 4:4:4 */
|
||||||
|
#define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */
|
||||||
|
|
||||||
+#define V4L2_PIX_FMT_NV15 v4l2_fourcc('N', 'V', '1', '5') /* 15 Y/CbCr 4:2:0 10-bit packed */
|
+#define V4L2_PIX_FMT_NV15 v4l2_fourcc('N', 'V', '1', '5') /* 15 Y/CbCr 4:2:0 10-bit packed */
|
||||||
+#define V4L2_PIX_FMT_NV20 v4l2_fourcc('N', 'V', '2', '0') /* 20 Y/CbCr 4:2:2 10-bit packed */
|
+#define V4L2_PIX_FMT_NV20 v4l2_fourcc('N', 'V', '2', '0') /* 20 Y/CbCr 4:2:2 10-bit packed */
|
||||||
@ -626,7 +409,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
index bf632d45282b..6f2d41b2e076 100644
|
index 503ae683d0fd..88f5f4bb320b 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
@@ -893,9 +893,9 @@ static void config_registers(struct rkvdec_ctx *ctx,
|
@@ -893,9 +893,9 @@ static void config_registers(struct rkvdec_ctx *ctx,
|
||||||
@ -671,7 +454,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 15 insertions(+), 14 deletions(-)
|
1 file changed, 15 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index f405dd72ad93..c81ca5c7e979 100644
|
index f4c5ee4a1e26..d8d0eab9e25d 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -27,6 +27,17 @@
|
@@ -27,6 +27,17 @@
|
||||||
@ -692,7 +475,7 @@ index f405dd72ad93..c81ca5c7e979 100644
|
|||||||
static int rkvdec_try_ctrl(struct v4l2_ctrl *ctrl)
|
static int rkvdec_try_ctrl(struct v4l2_ctrl *ctrl)
|
||||||
{
|
{
|
||||||
struct rkvdec_ctx *ctx = container_of(ctrl->handler, struct rkvdec_ctx, ctrl_hdl);
|
struct rkvdec_ctx *ctx = container_of(ctrl->handler, struct rkvdec_ctx, ctrl_hdl);
|
||||||
@@ -167,13 +178,9 @@ static void rkvdec_reset_decoded_fmt(struct rkvdec_ctx *ctx)
|
@@ -177,13 +188,9 @@ static void rkvdec_reset_decoded_fmt(struct rkvdec_ctx *ctx)
|
||||||
|
|
||||||
rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->decoded_fmts[0]);
|
rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->decoded_fmts[0]);
|
||||||
f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||||
@ -709,7 +492,7 @@ index f405dd72ad93..c81ca5c7e979 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int rkvdec_enum_framesizes(struct file *file, void *priv,
|
static int rkvdec_enum_framesizes(struct file *file, void *priv,
|
||||||
@@ -239,13 +246,7 @@ static int rkvdec_try_capture_fmt(struct file *file, void *priv,
|
@@ -249,13 +256,7 @@ static int rkvdec_try_capture_fmt(struct file *file, void *priv,
|
||||||
&pix_mp->height,
|
&pix_mp->height,
|
||||||
&coded_desc->frmsize);
|
&coded_desc->frmsize);
|
||||||
|
|
||||||
@ -743,7 +526,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
2 files changed, 55 insertions(+), 6 deletions(-)
|
2 files changed, 55 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index c81ca5c7e979..a11474214bde 100644
|
index d8d0eab9e25d..d31344c4acaa 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -38,6 +38,16 @@ static void rkvdec_fill_decoded_pixfmt(struct rkvdec_ctx *ctx,
|
@@ -38,6 +38,16 @@ static void rkvdec_fill_decoded_pixfmt(struct rkvdec_ctx *ctx,
|
||||||
@ -802,7 +585,7 @@ index c81ca5c7e979..a11474214bde 100644
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct rkvdec_ctrl_desc rkvdec_h264_ctrl_descs[] = {
|
static const struct rkvdec_ctrl_desc rkvdec_h264_ctrl_descs[] = {
|
||||||
@@ -176,6 +209,7 @@ static void rkvdec_reset_decoded_fmt(struct rkvdec_ctx *ctx)
|
@@ -186,6 +219,7 @@ static void rkvdec_reset_decoded_fmt(struct rkvdec_ctx *ctx)
|
||||||
{
|
{
|
||||||
struct v4l2_format *f = &ctx->decoded_fmt;
|
struct v4l2_format *f = &ctx->decoded_fmt;
|
||||||
|
|
||||||
@ -810,7 +593,7 @@ index c81ca5c7e979..a11474214bde 100644
|
|||||||
rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->decoded_fmts[0]);
|
rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->decoded_fmts[0]);
|
||||||
f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||||
f->fmt.pix_mp.width = ctx->coded_fmt.fmt.pix_mp.width;
|
f->fmt.pix_mp.width = ctx->coded_fmt.fmt.pix_mp.width;
|
||||||
@@ -231,13 +265,17 @@ static int rkvdec_try_capture_fmt(struct file *file, void *priv,
|
@@ -241,13 +275,17 @@ static int rkvdec_try_capture_fmt(struct file *file, void *priv,
|
||||||
if (WARN_ON(!coded_desc))
|
if (WARN_ON(!coded_desc))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@ -834,7 +617,7 @@ index c81ca5c7e979..a11474214bde 100644
|
|||||||
|
|
||||||
/* Always apply the frmsize constraint of the coded end. */
|
/* Always apply the frmsize constraint of the coded end. */
|
||||||
pix_mp->width = max(pix_mp->width, ctx->coded_fmt.fmt.pix_mp.width);
|
pix_mp->width = max(pix_mp->width, ctx->coded_fmt.fmt.pix_mp.width);
|
||||||
@@ -312,6 +350,7 @@ static int rkvdec_s_capture_fmt(struct file *file, void *priv,
|
@@ -322,6 +360,7 @@ static int rkvdec_s_capture_fmt(struct file *file, void *priv,
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ctx->decoded_fmt = *f;
|
ctx->decoded_fmt = *f;
|
||||||
@ -842,7 +625,7 @@ index c81ca5c7e979..a11474214bde 100644
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -401,6 +440,14 @@ static int rkvdec_enum_capture_fmt(struct file *file, void *priv,
|
@@ -411,6 +450,14 @@ static int rkvdec_enum_capture_fmt(struct file *file, void *priv,
|
||||||
if (WARN_ON(!ctx->coded_fmt_desc))
|
if (WARN_ON(!ctx->coded_fmt_desc))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@ -858,10 +641,10 @@ index c81ca5c7e979..a11474214bde 100644
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
index 77a137cca88e..e95c52e3168a 100644
|
index 52ac3874c5e5..7b6f44ee8a1a 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
@@ -63,6 +63,7 @@ vb2_to_rkvdec_decoded_buf(struct vb2_buffer *buf)
|
@@ -62,6 +62,7 @@ vb2_to_rkvdec_decoded_buf(struct vb2_buffer *buf)
|
||||||
struct rkvdec_coded_fmt_ops {
|
struct rkvdec_coded_fmt_ops {
|
||||||
int (*adjust_fmt)(struct rkvdec_ctx *ctx,
|
int (*adjust_fmt)(struct rkvdec_ctx *ctx,
|
||||||
struct v4l2_format *f);
|
struct v4l2_format *f);
|
||||||
@ -869,7 +652,7 @@ index 77a137cca88e..e95c52e3168a 100644
|
|||||||
int (*start)(struct rkvdec_ctx *ctx);
|
int (*start)(struct rkvdec_ctx *ctx);
|
||||||
void (*stop)(struct rkvdec_ctx *ctx);
|
void (*stop)(struct rkvdec_ctx *ctx);
|
||||||
int (*run)(struct rkvdec_ctx *ctx);
|
int (*run)(struct rkvdec_ctx *ctx);
|
||||||
@@ -96,6 +97,7 @@ struct rkvdec_ctx {
|
@@ -95,6 +96,7 @@ struct rkvdec_ctx {
|
||||||
struct v4l2_fh fh;
|
struct v4l2_fh fh;
|
||||||
struct v4l2_format coded_fmt;
|
struct v4l2_format coded_fmt;
|
||||||
struct v4l2_format decoded_fmt;
|
struct v4l2_format decoded_fmt;
|
||||||
@ -898,7 +681,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
2 files changed, 29 insertions(+), 10 deletions(-)
|
2 files changed, 29 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
index 6f2d41b2e076..c115cd362a7f 100644
|
index 88f5f4bb320b..c9a551dbd9bc 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
@@ -1021,6 +1021,25 @@ static int rkvdec_h264_adjust_fmt(struct rkvdec_ctx *ctx,
|
@@ -1021,6 +1021,25 @@ static int rkvdec_h264_adjust_fmt(struct rkvdec_ctx *ctx,
|
||||||
@ -936,7 +719,7 @@ index 6f2d41b2e076..c115cd362a7f 100644
|
|||||||
.stop = rkvdec_h264_stop,
|
.stop = rkvdec_h264_stop,
|
||||||
.run = rkvdec_h264_run,
|
.run = rkvdec_h264_run,
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index a11474214bde..b57a39ce4f48 100644
|
index d31344c4acaa..d068383aeea8 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -31,7 +31,7 @@ static void rkvdec_fill_decoded_pixfmt(struct rkvdec_ctx *ctx,
|
@@ -31,7 +31,7 @@ static void rkvdec_fill_decoded_pixfmt(struct rkvdec_ctx *ctx,
|
||||||
@ -973,7 +756,7 @@ index a11474214bde..b57a39ce4f48 100644
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (ctx->valid_fmt && ctx->valid_fmt != rkvdec_valid_fmt(ctx, ctrl))
|
if (ctx->valid_fmt && ctx->valid_fmt != rkvdec_valid_fmt(ctx, ctrl))
|
||||||
@@ -145,6 +141,9 @@ static const struct rkvdec_ctrls rkvdec_h264_ctrls = {
|
@@ -155,6 +151,9 @@ static const struct rkvdec_ctrls rkvdec_h264_ctrls = {
|
||||||
|
|
||||||
static const u32 rkvdec_h264_decoded_fmts[] = {
|
static const u32 rkvdec_h264_decoded_fmts[] = {
|
||||||
V4L2_PIX_FMT_NV12,
|
V4L2_PIX_FMT_NV12,
|
||||||
@ -983,46 +766,3 @@ index a11474214bde..b57a39ce4f48 100644
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jonas Karlman <jonas@kwiboo.se>
|
|
||||||
Date: Mon, 6 Jul 2020 21:54:38 +0000
|
|
||||||
Subject: [PATCH] media: rkvdec: h264: Support profile and level controls
|
|
||||||
|
|
||||||
The Rockchip Video Decoder used in RK3399 supports H.264 profiles from
|
|
||||||
Baseline to High 4:2:2 up to Level 5.1, except for the Extended profile.
|
|
||||||
|
|
||||||
Expose the V4L2_CID_MPEG_VIDEO_H264_PROFILE and the
|
|
||||||
V4L2_CID_MPEG_VIDEO_H264_LEVEL control, so that userspace can query the
|
|
||||||
driver for the list of supported profiles and level.
|
|
||||||
|
|
||||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|
||||||
Reviewed-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|
||||||
---
|
|
||||||
drivers/staging/media/rkvdec/rkvdec.c | 13 +++++++++++++
|
|
||||||
1 file changed, 13 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
|
||||||
index b57a39ce4f48..9492822c12ae 100644
|
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
|
||||||
@@ -132,6 +132,19 @@ static const struct rkvdec_ctrl_desc rkvdec_h264_ctrl_descs[] = {
|
|
||||||
.cfg.def = V4L2_MPEG_VIDEO_H264_START_CODE_ANNEX_B,
|
|
||||||
.cfg.max = V4L2_MPEG_VIDEO_H264_START_CODE_ANNEX_B,
|
|
||||||
},
|
|
||||||
+ {
|
|
||||||
+ .cfg.id = V4L2_CID_MPEG_VIDEO_H264_PROFILE,
|
|
||||||
+ .cfg.min = V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE,
|
|
||||||
+ .cfg.max = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422,
|
|
||||||
+ .cfg.menu_skip_mask =
|
|
||||||
+ BIT(V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED),
|
|
||||||
+ .cfg.def = V4L2_MPEG_VIDEO_H264_PROFILE_MAIN,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .cfg.id = V4L2_CID_MPEG_VIDEO_H264_LEVEL,
|
|
||||||
+ .cfg.min = V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
|
|
||||||
+ .cfg.max = V4L2_MPEG_VIDEO_H264_LEVEL_5_1,
|
|
||||||
+ },
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct rkvdec_ctrls rkvdec_h264_ctrls = {
|
|
@ -24,10 +24,10 @@ Reviewed-by: Sandy Huang <hjc@rock-chips.com>
|
|||||||
2 files changed, 10 insertions(+)
|
2 files changed, 10 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
|
diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
|
||||||
index 722c7ebe4e88..2daf8a304b53 100644
|
index eda832f9200d..9498e9d466fb 100644
|
||||||
--- a/drivers/gpu/drm/drm_fourcc.c
|
--- a/drivers/gpu/drm/drm_fourcc.c
|
||||||
+++ b/drivers/gpu/drm/drm_fourcc.c
|
+++ b/drivers/gpu/drm/drm_fourcc.c
|
||||||
@@ -278,6 +278,14 @@ const struct drm_format_info *__drm_format_info(u32 format)
|
@@ -258,6 +258,14 @@ const struct drm_format_info *__drm_format_info(u32 format)
|
||||||
.num_planes = 2, .char_per_block = { 5, 5, 0 },
|
.num_planes = 2, .char_per_block = { 5, 5, 0 },
|
||||||
.block_w = { 4, 2, 0 }, .block_h = { 1, 1, 0 }, .hsub = 2,
|
.block_w = { 4, 2, 0 }, .block_h = { 1, 1, 0 }, .hsub = 2,
|
||||||
.vsub = 2, .is_yuv = true },
|
.vsub = 2, .is_yuv = true },
|
||||||
@ -43,10 +43,10 @@ index 722c7ebe4e88..2daf8a304b53 100644
|
|||||||
.num_planes = 3, .char_per_block = { 2, 2, 2 },
|
.num_planes = 3, .char_per_block = { 2, 2, 2 },
|
||||||
.block_w = { 1, 1, 1 }, .block_h = { 1, 1, 1 }, .hsub = 0,
|
.block_w = { 1, 1, 1 }, .block_h = { 1, 1, 1 }, .hsub = 0,
|
||||||
diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
|
diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
|
||||||
index 5498d7a6556a..5b5db0381729 100644
|
index f7156322aba5..a30bb7ef7632 100644
|
||||||
--- a/include/uapi/drm/drm_fourcc.h
|
--- a/include/uapi/drm/drm_fourcc.h
|
||||||
+++ b/include/uapi/drm/drm_fourcc.h
|
+++ b/include/uapi/drm/drm_fourcc.h
|
||||||
@@ -242,6 +242,8 @@ extern "C" {
|
@@ -279,6 +279,8 @@ extern "C" {
|
||||||
* index 1 = Cr:Cb plane, [39:0] Cr1:Cb1:Cr0:Cb0 little endian
|
* index 1 = Cr:Cb plane, [39:0] Cr1:Cb1:Cr0:Cb0 little endian
|
||||||
*/
|
*/
|
||||||
#define DRM_FORMAT_NV15 fourcc_code('N', 'V', '1', '5') /* 2x2 subsampled Cr:Cb plane */
|
#define DRM_FORMAT_NV15 fourcc_code('N', 'V', '1', '5') /* 2x2 subsampled Cr:Cb plane */
|
||||||
@ -76,10 +76,10 @@ Reviewed-by: Sandy Huang <hjc@rock-chips.com>
|
|||||||
3 files changed, 54 insertions(+), 8 deletions(-)
|
3 files changed, 54 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index c80f7d9fd13f..eb663e25ad9e 100644
|
index f5b9028a16a3..9df4a271f3aa 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -261,6 +261,18 @@ static bool has_rb_swapped(uint32_t format)
|
@@ -262,6 +262,18 @@ static bool has_rb_swapped(uint32_t format)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ index c80f7d9fd13f..eb663e25ad9e 100644
|
|||||||
static enum vop_data_format vop_convert_format(uint32_t format)
|
static enum vop_data_format vop_convert_format(uint32_t format)
|
||||||
{
|
{
|
||||||
switch (format) {
|
switch (format) {
|
||||||
@@ -276,10 +288,13 @@ static enum vop_data_format vop_convert_format(uint32_t format)
|
@@ -277,10 +289,13 @@ static enum vop_data_format vop_convert_format(uint32_t format)
|
||||||
case DRM_FORMAT_BGR565:
|
case DRM_FORMAT_BGR565:
|
||||||
return VOP_FMT_RGB565;
|
return VOP_FMT_RGB565;
|
||||||
case DRM_FORMAT_NV12:
|
case DRM_FORMAT_NV12:
|
||||||
@ -112,7 +112,7 @@ index c80f7d9fd13f..eb663e25ad9e 100644
|
|||||||
return VOP_FMT_YUV444SP;
|
return VOP_FMT_YUV444SP;
|
||||||
default:
|
default:
|
||||||
DRM_ERROR("unsupported format[%08x]\n", format);
|
DRM_ERROR("unsupported format[%08x]\n", format);
|
||||||
@@ -922,7 +937,12 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
@@ -931,7 +946,12 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
||||||
dsp_sty = dest->y1 + crtc->mode.vtotal - crtc->mode.vsync_start;
|
dsp_sty = dest->y1 + crtc->mode.vtotal - crtc->mode.vsync_start;
|
||||||
dsp_st = dsp_sty << 16 | (dsp_stx & 0xffff);
|
dsp_st = dsp_sty << 16 | (dsp_stx & 0xffff);
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ index c80f7d9fd13f..eb663e25ad9e 100644
|
|||||||
offset += (src->y1 >> 16) * fb->pitches[0];
|
offset += (src->y1 >> 16) * fb->pitches[0];
|
||||||
dma_addr = rk_obj->dma_addr + offset + fb->offsets[0];
|
dma_addr = rk_obj->dma_addr + offset + fb->offsets[0];
|
||||||
|
|
||||||
@@ -948,6 +968,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
@@ -957,6 +977,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
||||||
}
|
}
|
||||||
|
|
||||||
VOP_WIN_SET(vop, win, format, format);
|
VOP_WIN_SET(vop, win, format, format);
|
||||||
@ -134,7 +134,7 @@ index c80f7d9fd13f..eb663e25ad9e 100644
|
|||||||
VOP_WIN_SET(vop, win, yrgb_vir, DIV_ROUND_UP(fb->pitches[0], 4));
|
VOP_WIN_SET(vop, win, yrgb_vir, DIV_ROUND_UP(fb->pitches[0], 4));
|
||||||
VOP_WIN_SET(vop, win, yrgb_mst, dma_addr);
|
VOP_WIN_SET(vop, win, yrgb_mst, dma_addr);
|
||||||
VOP_WIN_YUV2YUV_SET(vop, win_yuv2yuv, y2r_en, is_yuv);
|
VOP_WIN_YUV2YUV_SET(vop, win_yuv2yuv, y2r_en, is_yuv);
|
||||||
@@ -964,7 +985,11 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
@@ -973,7 +994,11 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
||||||
uv_obj = fb->obj[1];
|
uv_obj = fb->obj[1];
|
||||||
rk_uv_obj = to_rockchip_obj(uv_obj);
|
rk_uv_obj = to_rockchip_obj(uv_obj);
|
||||||
|
|
||||||
@ -160,7 +160,7 @@ index 857d97cdc67c..b7169010622a 100644
|
|||||||
struct vop_reg act_info;
|
struct vop_reg act_info;
|
||||||
struct vop_reg dsp_info;
|
struct vop_reg dsp_info;
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
index 80053d91a301..2c55e1852c3d 100644
|
index ca7cc82125cb..fff9c3387b9d 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
@@ -50,6 +50,23 @@ static const uint32_t formats_win_full[] = {
|
@@ -50,6 +50,23 @@ static const uint32_t formats_win_full[] = {
|
||||||
@ -187,7 +187,7 @@ index 80053d91a301..2c55e1852c3d 100644
|
|||||||
static const uint64_t format_modifiers_win_full[] = {
|
static const uint64_t format_modifiers_win_full[] = {
|
||||||
DRM_FORMAT_MOD_LINEAR,
|
DRM_FORMAT_MOD_LINEAR,
|
||||||
DRM_FORMAT_MOD_INVALID,
|
DRM_FORMAT_MOD_INVALID,
|
||||||
@@ -579,11 +596,12 @@ static const struct vop_scl_regs rk3288_win_full_scl = {
|
@@ -613,11 +630,12 @@ static const struct vop_scl_regs rk3288_win_full_scl = {
|
||||||
|
|
||||||
static const struct vop_win_phy rk3288_win01_data = {
|
static const struct vop_win_phy rk3288_win01_data = {
|
||||||
.scl = &rk3288_win_full_scl,
|
.scl = &rk3288_win_full_scl,
|
||||||
@ -202,7 +202,7 @@ index 80053d91a301..2c55e1852c3d 100644
|
|||||||
.rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12),
|
.rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12),
|
||||||
.act_info = VOP_REG(RK3288_WIN0_ACT_INFO, 0x1fff1fff, 0),
|
.act_info = VOP_REG(RK3288_WIN0_ACT_INFO, 0x1fff1fff, 0),
|
||||||
.dsp_info = VOP_REG(RK3288_WIN0_DSP_INFO, 0x0fff0fff, 0),
|
.dsp_info = VOP_REG(RK3288_WIN0_DSP_INFO, 0x0fff0fff, 0),
|
||||||
@@ -713,11 +731,12 @@ static const struct vop_intr rk3368_vop_intr = {
|
@@ -747,11 +765,12 @@ static const struct vop_intr rk3368_vop_intr = {
|
||||||
|
|
||||||
static const struct vop_win_phy rk3368_win01_data = {
|
static const struct vop_win_phy rk3368_win01_data = {
|
||||||
.scl = &rk3288_win_full_scl,
|
.scl = &rk3288_win_full_scl,
|
||||||
@ -217,7 +217,7 @@ index 80053d91a301..2c55e1852c3d 100644
|
|||||||
.rb_swap = VOP_REG(RK3368_WIN0_CTRL0, 0x1, 12),
|
.rb_swap = VOP_REG(RK3368_WIN0_CTRL0, 0x1, 12),
|
||||||
.x_mir_en = VOP_REG(RK3368_WIN0_CTRL0, 0x1, 21),
|
.x_mir_en = VOP_REG(RK3368_WIN0_CTRL0, 0x1, 21),
|
||||||
.y_mir_en = VOP_REG(RK3368_WIN0_CTRL0, 0x1, 22),
|
.y_mir_en = VOP_REG(RK3368_WIN0_CTRL0, 0x1, 22),
|
||||||
@@ -862,11 +881,12 @@ static const struct vop_win_yuv2yuv_data rk3399_vop_big_win_yuv2yuv_data[] = {
|
@@ -896,11 +915,12 @@ static const struct vop_win_yuv2yuv_data rk3399_vop_big_win_yuv2yuv_data[] = {
|
||||||
|
|
||||||
static const struct vop_win_phy rk3399_win01_data = {
|
static const struct vop_win_phy rk3399_win01_data = {
|
||||||
.scl = &rk3288_win_full_scl,
|
.scl = &rk3288_win_full_scl,
|
||||||
@ -257,10 +257,10 @@ Signed-off-by: Qinglang Miao <miaoqinglang@huawei.com>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c b/drivers/gpu/drm/rockchip/cdn-dp-core.c
|
diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c b/drivers/gpu/drm/rockchip/cdn-dp-core.c
|
||||||
index a4a45daf93f2..9b4406191470 100644
|
index 8ab3247dbc4a..8429c6706ec5 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/cdn-dp-core.c
|
--- a/drivers/gpu/drm/rockchip/cdn-dp-core.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/cdn-dp-core.c
|
+++ b/drivers/gpu/drm/rockchip/cdn-dp-core.c
|
||||||
@@ -98,7 +98,7 @@ static int cdn_dp_clk_enable(struct cdn_dp_device *dp)
|
@@ -100,7 +100,7 @@ static int cdn_dp_clk_enable(struct cdn_dp_device *dp)
|
||||||
goto err_core_clk;
|
goto err_core_clk;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,10 +294,10 @@ Signed-off-by: Qinglang Miao <miaoqinglang@huawei.com>
|
|||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index eb663e25ad9e..c6c76e8ab66c 100644
|
index 9df4a271f3aa..c3c0de25b8e6 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -602,7 +602,7 @@ static int vop_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_state)
|
@@ -603,7 +603,7 @@ static int vop_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_state)
|
||||||
struct vop *vop = to_vop(crtc);
|
struct vop *vop = to_vop(crtc);
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
|
||||||
@ -306,7 +306,7 @@ index eb663e25ad9e..c6c76e8ab66c 100644
|
|||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
DRM_DEV_ERROR(vop->dev, "failed to get pm runtime: %d\n", ret);
|
DRM_DEV_ERROR(vop->dev, "failed to get pm runtime: %d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -1933,7 +1933,7 @@ static int vop_initial(struct vop *vop)
|
@@ -1956,7 +1956,7 @@ static int vop_initial(struct vop *vop)
|
||||||
return PTR_ERR(vop->dclk);
|
return PTR_ERR(vop->dclk);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,7 +340,7 @@ Signed-off-by: Qinglang Miao <miaoqinglang@huawei.com>
|
|||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_lvds.c b/drivers/gpu/drm/rockchip/rockchip_lvds.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_lvds.c b/drivers/gpu/drm/rockchip/rockchip_lvds.c
|
||||||
index 41edd0a421b2..4d463d50a63a 100644
|
index 489d63c05c0d..aaf0b6bbcb85 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_lvds.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_lvds.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_lvds.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_lvds.c
|
||||||
@@ -145,7 +145,7 @@ static int rk3288_lvds_poweron(struct rockchip_lvds *lvds)
|
@@ -145,7 +145,7 @@ static int rk3288_lvds_poweron(struct rockchip_lvds *lvds)
|
||||||
@ -362,3 +362,198 @@ index 41edd0a421b2..4d463d50a63a 100644
|
|||||||
DRM_DEV_ERROR(lvds->dev, "failed to get pm runtime: %d\n", ret);
|
DRM_DEV_ERROR(lvds->dev, "failed to get pm runtime: %d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Thomas Zimmermann <tzimmermann@suse.de>
|
||||||
|
Date: Thu, 24 Jun 2021 11:55:02 +0200
|
||||||
|
Subject: [PATCH] drm/rockchip: Implement mmap as GEM object function
|
||||||
|
|
||||||
|
Moving the driver-specific mmap code into a GEM object function allows
|
||||||
|
for using DRM helpers for various mmap callbacks.
|
||||||
|
|
||||||
|
The respective rockchip functions are being removed. The file_operations
|
||||||
|
structure fops is now being created by the helper macro
|
||||||
|
DEFINE_DRM_GEM_FOPS().
|
||||||
|
|
||||||
|
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
|
||||||
|
Tested-by: Heiko Stuebner <heiko@sntech.de>
|
||||||
|
---
|
||||||
|
drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 13 +-----
|
||||||
|
drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c | 3 +-
|
||||||
|
drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 44 +++++--------------
|
||||||
|
drivers/gpu/drm/rockchip/rockchip_drm_gem.h | 7 ---
|
||||||
|
4 files changed, 15 insertions(+), 52 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
|
||||||
|
index b730b8d5d949..2e3ab573a817 100644
|
||||||
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
|
||||||
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
|
||||||
|
@@ -208,16 +208,7 @@ static void rockchip_drm_unbind(struct device *dev)
|
||||||
|
drm_dev_put(drm_dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static const struct file_operations rockchip_drm_driver_fops = {
|
||||||
|
- .owner = THIS_MODULE,
|
||||||
|
- .open = drm_open,
|
||||||
|
- .mmap = rockchip_gem_mmap,
|
||||||
|
- .poll = drm_poll,
|
||||||
|
- .read = drm_read,
|
||||||
|
- .unlocked_ioctl = drm_ioctl,
|
||||||
|
- .compat_ioctl = drm_compat_ioctl,
|
||||||
|
- .release = drm_release,
|
||||||
|
-};
|
||||||
|
+DEFINE_DRM_GEM_FOPS(rockchip_drm_driver_fops);
|
||||||
|
|
||||||
|
static const struct drm_driver rockchip_drm_driver = {
|
||||||
|
.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
|
||||||
|
@@ -226,7 +217,7 @@ static const struct drm_driver rockchip_drm_driver = {
|
||||||
|
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
|
||||||
|
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
|
||||||
|
.gem_prime_import_sg_table = rockchip_gem_prime_import_sg_table,
|
||||||
|
- .gem_prime_mmap = rockchip_gem_mmap_buf,
|
||||||
|
+ .gem_prime_mmap = drm_gem_prime_mmap,
|
||||||
|
.fops = &rockchip_drm_driver_fops,
|
||||||
|
.name = DRIVER_NAME,
|
||||||
|
.desc = DRIVER_DESC,
|
||||||
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c b/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c
|
||||||
|
index 2fdc455c4ad7..d8418dd39d0e 100644
|
||||||
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c
|
||||||
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c
|
||||||
|
@@ -7,6 +7,7 @@
|
||||||
|
#include <drm/drm.h>
|
||||||
|
#include <drm/drm_fb_helper.h>
|
||||||
|
#include <drm/drm_fourcc.h>
|
||||||
|
+#include <drm/drm_prime.h>
|
||||||
|
#include <drm/drm_probe_helper.h>
|
||||||
|
|
||||||
|
#include "rockchip_drm_drv.h"
|
||||||
|
@@ -24,7 +25,7 @@ static int rockchip_fbdev_mmap(struct fb_info *info,
|
||||||
|
struct drm_fb_helper *helper = info->par;
|
||||||
|
struct rockchip_drm_private *private = to_drm_private(helper);
|
||||||
|
|
||||||
|
- return rockchip_gem_mmap_buf(private->fbdev_bo, vma);
|
||||||
|
+ return drm_gem_prime_mmap(private->fbdev_bo, vma);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct fb_ops rockchip_drm_fbdev_ops = {
|
||||||
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
|
||||||
|
index 7971f57436dd..63eb73b624aa 100644
|
||||||
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
|
||||||
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
|
||||||
|
@@ -240,12 +240,22 @@ static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj,
|
||||||
|
int ret;
|
||||||
|
struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj);
|
||||||
|
|
||||||
|
+ /*
|
||||||
|
+ * Set vm_pgoff (used as a fake buffer offset by DRM) to 0 and map the
|
||||||
|
+ * whole buffer from the start.
|
||||||
|
+ */
|
||||||
|
+ vma->vm_pgoff = 0;
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* We allocated a struct page table for rk_obj, so clear
|
||||||
|
* VM_PFNMAP flag that was set by drm_gem_mmap_obj()/drm_gem_mmap().
|
||||||
|
*/
|
||||||
|
+ vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP;
|
||||||
|
vma->vm_flags &= ~VM_PFNMAP;
|
||||||
|
|
||||||
|
+ vma->vm_page_prot = pgprot_writecombine(vm_get_page_prot(vma->vm_flags));
|
||||||
|
+ vma->vm_page_prot = pgprot_decrypted(vma->vm_page_prot);
|
||||||
|
+
|
||||||
|
if (rk_obj->pages)
|
||||||
|
ret = rockchip_drm_gem_object_mmap_iommu(obj, vma);
|
||||||
|
else
|
||||||
|
@@ -257,39 +267,6 @@ static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj,
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
-int rockchip_gem_mmap_buf(struct drm_gem_object *obj,
|
||||||
|
- struct vm_area_struct *vma)
|
||||||
|
-{
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- ret = drm_gem_mmap_obj(obj, obj->size, vma);
|
||||||
|
- if (ret)
|
||||||
|
- return ret;
|
||||||
|
-
|
||||||
|
- return rockchip_drm_gem_object_mmap(obj, vma);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-/* drm driver mmap file operations */
|
||||||
|
-int rockchip_gem_mmap(struct file *filp, struct vm_area_struct *vma)
|
||||||
|
-{
|
||||||
|
- struct drm_gem_object *obj;
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- ret = drm_gem_mmap(filp, vma);
|
||||||
|
- if (ret)
|
||||||
|
- return ret;
|
||||||
|
-
|
||||||
|
- /*
|
||||||
|
- * Set vm_pgoff (used as a fake buffer offset by DRM) to 0 and map the
|
||||||
|
- * whole buffer from the start.
|
||||||
|
- */
|
||||||
|
- vma->vm_pgoff = 0;
|
||||||
|
-
|
||||||
|
- obj = vma->vm_private_data;
|
||||||
|
-
|
||||||
|
- return rockchip_drm_gem_object_mmap(obj, vma);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
static void rockchip_gem_release_object(struct rockchip_gem_object *rk_obj)
|
||||||
|
{
|
||||||
|
drm_gem_object_release(&rk_obj->base);
|
||||||
|
@@ -301,6 +278,7 @@ static const struct drm_gem_object_funcs rockchip_gem_object_funcs = {
|
||||||
|
.get_sg_table = rockchip_gem_prime_get_sg_table,
|
||||||
|
.vmap = rockchip_gem_prime_vmap,
|
||||||
|
.vunmap = rockchip_gem_prime_vunmap,
|
||||||
|
+ .mmap = rockchip_drm_gem_object_mmap,
|
||||||
|
.vm_ops = &drm_gem_cma_vm_ops,
|
||||||
|
};
|
||||||
|
|
||||||
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h
|
||||||
|
index 5a70a56cd406..47c1861eece0 100644
|
||||||
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h
|
||||||
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h
|
||||||
|
@@ -34,13 +34,6 @@ rockchip_gem_prime_import_sg_table(struct drm_device *dev,
|
||||||
|
int rockchip_gem_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map);
|
||||||
|
void rockchip_gem_prime_vunmap(struct drm_gem_object *obj, struct dma_buf_map *map);
|
||||||
|
|
||||||
|
-/* drm driver mmap file operations */
|
||||||
|
-int rockchip_gem_mmap(struct file *filp, struct vm_area_struct *vma);
|
||||||
|
-
|
||||||
|
-/* mmap a gem object to userspace. */
|
||||||
|
-int rockchip_gem_mmap_buf(struct drm_gem_object *obj,
|
||||||
|
- struct vm_area_struct *vma);
|
||||||
|
-
|
||||||
|
struct rockchip_gem_object *
|
||||||
|
rockchip_gem_create_object(struct drm_device *drm, unsigned int size,
|
||||||
|
bool alloc_kmap);
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy Yan <andy.yan@rock-chips.com>
|
||||||
|
Date: Sun, 27 Jun 2021 16:47:37 +0800
|
||||||
|
Subject: [PATCH] drm/rockchip: Check iommu itself instead of it's parent for
|
||||||
|
device_is_available
|
||||||
|
|
||||||
|
When iommu itself is disabled in dts, we should
|
||||||
|
fallback to non-iommu buffer, check iommu parent
|
||||||
|
is meanless here.
|
||||||
|
|
||||||
|
Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
|
||||||
|
---
|
||||||
|
drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
|
||||||
|
index 2e3ab573a817..8161540be6c8 100644
|
||||||
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
|
||||||
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
|
||||||
|
@@ -367,7 +367,7 @@ static int rockchip_drm_platform_of_probe(struct device *dev)
|
||||||
|
}
|
||||||
|
|
||||||
|
iommu = of_parse_phandle(port->parent, "iommus", 0);
|
||||||
|
- if (!iommu || !of_device_is_available(iommu->parent)) {
|
||||||
|
+ if (!iommu || !of_device_is_available(iommu)) {
|
||||||
|
DRM_DEV_DEBUG(dev,
|
||||||
|
"no iommu attached for %pOF, using non-iommu buffers\n",
|
||||||
|
port->parent);
|
@ -13,10 +13,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index c6c76e8ab66c..2f98a5e7dce1 100644
|
index c3c0de25b8e6..395b7160a3c5 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -1554,7 +1554,11 @@ static struct drm_crtc_state *vop_crtc_duplicate_state(struct drm_crtc *crtc)
|
@@ -1578,7 +1578,11 @@ static struct drm_crtc_state *vop_crtc_duplicate_state(struct drm_crtc *crtc)
|
||||||
{
|
{
|
||||||
struct rockchip_crtc_state *rockchip_state;
|
struct rockchip_crtc_state *rockchip_state;
|
||||||
|
|
||||||
@ -47,10 +47,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 54 insertions(+)
|
1 file changed, 54 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index 2f98a5e7dce1..defa314a8f96 100644
|
index 395b7160a3c5..3603bf81b58b 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -1167,6 +1167,59 @@ static void vop_crtc_disable_vblank(struct drm_crtc *crtc)
|
@@ -1181,6 +1181,59 @@ static void vop_crtc_disable_vblank(struct drm_crtc *crtc)
|
||||||
spin_unlock_irqrestore(&vop->irq_lock, flags);
|
spin_unlock_irqrestore(&vop->irq_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ index 2f98a5e7dce1..defa314a8f96 100644
|
|||||||
static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
|
static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
|
||||||
const struct drm_display_mode *mode,
|
const struct drm_display_mode *mode,
|
||||||
struct drm_display_mode *adjusted_mode)
|
struct drm_display_mode *adjusted_mode)
|
||||||
@@ -1537,6 +1590,7 @@ static void vop_crtc_atomic_flush(struct drm_crtc *crtc,
|
@@ -1561,6 +1614,7 @@ static void vop_crtc_atomic_flush(struct drm_crtc *crtc,
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct drm_crtc_helper_funcs vop_crtc_helper_funcs = {
|
static const struct drm_crtc_helper_funcs vop_crtc_helper_funcs = {
|
||||||
@ -133,10 +133,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 3 insertions(+)
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index defa314a8f96..a9e6e8bdc848 100644
|
index 3603bf81b58b..91ed741d09cd 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -1205,6 +1205,9 @@ static enum drm_mode_status vop_crtc_mode_valid(struct drm_crtc *crtc,
|
@@ -1219,6 +1219,9 @@ static enum drm_mode_status vop_crtc_mode_valid(struct drm_crtc *crtc,
|
||||||
if (!vop_crtc_is_tmds(crtc))
|
if (!vop_crtc_is_tmds(crtc))
|
||||||
return MODE_OK;
|
return MODE_OK;
|
||||||
|
|
||||||
@ -183,10 +183,10 @@ index b7169010622a..0b1984585082 100644
|
|||||||
#define VOP_FEATURE_OUTPUT_RGB10 BIT(0)
|
#define VOP_FEATURE_OUTPUT_RGB10 BIT(0)
|
||||||
#define VOP_FEATURE_INTERNAL_RGB BIT(1)
|
#define VOP_FEATURE_INTERNAL_RGB BIT(1)
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
index 2c55e1852c3d..cf87361108a0 100644
|
index fff9c3387b9d..37e623bdf287 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
@@ -700,6 +700,7 @@ static const struct vop_intr rk3288_vop_intr = {
|
@@ -734,6 +734,7 @@ static const struct vop_intr rk3288_vop_intr = {
|
||||||
static const struct vop_data rk3288_vop = {
|
static const struct vop_data rk3288_vop = {
|
||||||
.version = VOP_VERSION(3, 1),
|
.version = VOP_VERSION(3, 1),
|
||||||
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
||||||
@ -194,7 +194,7 @@ index 2c55e1852c3d..cf87361108a0 100644
|
|||||||
.intr = &rk3288_vop_intr,
|
.intr = &rk3288_vop_intr,
|
||||||
.common = &rk3288_common,
|
.common = &rk3288_common,
|
||||||
.modeset = &rk3288_modeset,
|
.modeset = &rk3288_modeset,
|
||||||
@@ -801,6 +802,7 @@ static const struct vop_misc rk3368_misc = {
|
@@ -835,6 +836,7 @@ static const struct vop_misc rk3368_misc = {
|
||||||
|
|
||||||
static const struct vop_data rk3368_vop = {
|
static const struct vop_data rk3368_vop = {
|
||||||
.version = VOP_VERSION(3, 2),
|
.version = VOP_VERSION(3, 2),
|
||||||
@ -202,7 +202,7 @@ index 2c55e1852c3d..cf87361108a0 100644
|
|||||||
.intr = &rk3368_vop_intr,
|
.intr = &rk3368_vop_intr,
|
||||||
.common = &rk3288_common,
|
.common = &rk3288_common,
|
||||||
.modeset = &rk3288_modeset,
|
.modeset = &rk3288_modeset,
|
||||||
@@ -822,6 +824,7 @@ static const struct vop_intr rk3366_vop_intr = {
|
@@ -856,6 +858,7 @@ static const struct vop_intr rk3366_vop_intr = {
|
||||||
|
|
||||||
static const struct vop_data rk3366_vop = {
|
static const struct vop_data rk3366_vop = {
|
||||||
.version = VOP_VERSION(3, 4),
|
.version = VOP_VERSION(3, 4),
|
||||||
@ -210,7 +210,7 @@ index 2c55e1852c3d..cf87361108a0 100644
|
|||||||
.intr = &rk3366_vop_intr,
|
.intr = &rk3366_vop_intr,
|
||||||
.common = &rk3288_common,
|
.common = &rk3288_common,
|
||||||
.modeset = &rk3288_modeset,
|
.modeset = &rk3288_modeset,
|
||||||
@@ -929,6 +932,7 @@ static const struct vop_afbc rk3399_vop_afbc = {
|
@@ -963,6 +966,7 @@ static const struct vop_afbc rk3399_vop_afbc = {
|
||||||
static const struct vop_data rk3399_vop_big = {
|
static const struct vop_data rk3399_vop_big = {
|
||||||
.version = VOP_VERSION(3, 5),
|
.version = VOP_VERSION(3, 5),
|
||||||
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
||||||
@ -218,7 +218,7 @@ index 2c55e1852c3d..cf87361108a0 100644
|
|||||||
.intr = &rk3366_vop_intr,
|
.intr = &rk3366_vop_intr,
|
||||||
.common = &rk3288_common,
|
.common = &rk3288_common,
|
||||||
.modeset = &rk3288_modeset,
|
.modeset = &rk3288_modeset,
|
||||||
@@ -955,6 +959,7 @@ static const struct vop_win_yuv2yuv_data rk3399_vop_lit_win_yuv2yuv_data[] = {
|
@@ -989,6 +993,7 @@ static const struct vop_win_yuv2yuv_data rk3399_vop_lit_win_yuv2yuv_data[] = {
|
||||||
|
|
||||||
static const struct vop_data rk3399_vop_lit = {
|
static const struct vop_data rk3399_vop_lit = {
|
||||||
.version = VOP_VERSION(3, 6),
|
.version = VOP_VERSION(3, 6),
|
||||||
@ -226,7 +226,7 @@ index 2c55e1852c3d..cf87361108a0 100644
|
|||||||
.intr = &rk3366_vop_intr,
|
.intr = &rk3366_vop_intr,
|
||||||
.common = &rk3288_common,
|
.common = &rk3288_common,
|
||||||
.modeset = &rk3288_modeset,
|
.modeset = &rk3288_modeset,
|
||||||
@@ -975,6 +980,7 @@ static const struct vop_win_data rk3228_vop_win_data[] = {
|
@@ -1009,6 +1014,7 @@ static const struct vop_win_data rk3228_vop_win_data[] = {
|
||||||
static const struct vop_data rk3228_vop = {
|
static const struct vop_data rk3228_vop = {
|
||||||
.version = VOP_VERSION(3, 7),
|
.version = VOP_VERSION(3, 7),
|
||||||
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
||||||
@ -234,7 +234,7 @@ index 2c55e1852c3d..cf87361108a0 100644
|
|||||||
.intr = &rk3366_vop_intr,
|
.intr = &rk3366_vop_intr,
|
||||||
.common = &rk3288_common,
|
.common = &rk3288_common,
|
||||||
.modeset = &rk3288_modeset,
|
.modeset = &rk3288_modeset,
|
||||||
@@ -1046,6 +1052,7 @@ static const struct vop_win_data rk3328_vop_win_data[] = {
|
@@ -1080,6 +1086,7 @@ static const struct vop_win_data rk3328_vop_win_data[] = {
|
||||||
static const struct vop_data rk3328_vop = {
|
static const struct vop_data rk3328_vop = {
|
||||||
.version = VOP_VERSION(3, 8),
|
.version = VOP_VERSION(3, 8),
|
||||||
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
||||||
@ -256,10 +256,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 16 insertions(+)
|
1 file changed, 16 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index a9e6e8bdc848..bf44282409ab 100644
|
index 91ed741d09cd..5badaf5a87e7 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -1199,6 +1199,7 @@ static enum drm_mode_status vop_crtc_mode_valid(struct drm_crtc *crtc,
|
@@ -1213,6 +1213,7 @@ static enum drm_mode_status vop_crtc_mode_valid(struct drm_crtc *crtc,
|
||||||
const struct drm_display_mode *mode)
|
const struct drm_display_mode *mode)
|
||||||
{
|
{
|
||||||
struct vop *vop = to_vop(crtc);
|
struct vop *vop = to_vop(crtc);
|
||||||
@ -267,7 +267,7 @@ index a9e6e8bdc848..bf44282409ab 100644
|
|||||||
long rounded_rate;
|
long rounded_rate;
|
||||||
long lowest, highest;
|
long lowest, highest;
|
||||||
|
|
||||||
@@ -1220,6 +1221,10 @@ static enum drm_mode_status vop_crtc_mode_valid(struct drm_crtc *crtc,
|
@@ -1234,6 +1235,10 @@ static enum drm_mode_status vop_crtc_mode_valid(struct drm_crtc *crtc,
|
||||||
if (rounded_rate > highest)
|
if (rounded_rate > highest)
|
||||||
return MODE_CLOCK_HIGH;
|
return MODE_CLOCK_HIGH;
|
||||||
|
|
||||||
@ -278,7 +278,7 @@ index a9e6e8bdc848..bf44282409ab 100644
|
|||||||
return MODE_OK;
|
return MODE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1228,8 +1233,19 @@ static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
|
@@ -1242,8 +1247,19 @@ static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
|
||||||
struct drm_display_mode *adjusted_mode)
|
struct drm_display_mode *adjusted_mode)
|
||||||
{
|
{
|
||||||
struct vop *vop = to_vop(crtc);
|
struct vop *vop = to_vop(crtc);
|
||||||
@ -340,7 +340,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index 23de359a1dec..f78851e7ef16 100644
|
index 830bdd5e9b7c..08c4ea2b6bf2 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -181,7 +181,7 @@ static const struct dw_hdmi_curr_ctrl rockchip_cur_ctr[] = {
|
@@ -181,7 +181,7 @@ static const struct dw_hdmi_curr_ctrl rockchip_cur_ctr[] = {
|
||||||
@ -367,7 +367,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 1 insertion(+)
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index f78851e7ef16..a308adb56d2f 100644
|
index 08c4ea2b6bf2..546970b36dd2 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -183,6 +183,7 @@ static const struct dw_hdmi_phy_config rockchip_phy_config[] = {
|
@@ -183,6 +183,7 @@ static const struct dw_hdmi_phy_config rockchip_phy_config[] = {
|
||||||
@ -397,7 +397,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 2 insertions(+), 14 deletions(-)
|
1 file changed, 2 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index a308adb56d2f..5b273f26f177 100644
|
index 546970b36dd2..3bbd90e2e40b 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -160,20 +160,8 @@ static const struct dw_hdmi_mpll_config rockchip_mpll_cfg[] = {
|
@@ -160,20 +160,8 @@ static const struct dw_hdmi_mpll_config rockchip_mpll_cfg[] = {
|
||||||
@ -455,7 +455,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 69 insertions(+), 61 deletions(-)
|
1 file changed, 69 insertions(+), 61 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index 5b273f26f177..b5d2cdaa24fa 100644
|
index 3bbd90e2e40b..2cdaeb76ab9e 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -79,80 +79,88 @@ struct rockchip_hdmi {
|
@@ -79,80 +79,88 @@ struct rockchip_hdmi {
|
||||||
@ -628,7 +628,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 4 insertions(+), 12 deletions(-)
|
1 file changed, 4 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index b5d2cdaa24fa..5f7ab8e6bb72 100644
|
index 2cdaeb76ab9e..279d900e3e51 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -221,19 +221,11 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *hdmi, void *data,
|
@@ -221,19 +221,11 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *hdmi, void *data,
|
||||||
@ -667,7 +667,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index 5f7ab8e6bb72..0e7ca368314d 100644
|
index 279d900e3e51..20c37b22b3eb 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -225,7 +225,7 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *hdmi, void *data,
|
@@ -225,7 +225,7 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *hdmi, void *data,
|
||||||
@ -693,7 +693,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 2 insertions(+)
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index 0e7ca368314d..6f7641fbe6cc 100644
|
index 20c37b22b3eb..f8001dd8dca7 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -306,6 +306,8 @@ static int dw_hdmi_rockchip_genphy_init(struct dw_hdmi *dw_hdmi, void *data,
|
@@ -306,6 +306,8 @@ static int dw_hdmi_rockchip_genphy_init(struct dw_hdmi *dw_hdmi, void *data,
|
||||||
@ -721,7 +721,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 6 deletions(-)
|
1 file changed, 6 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index 6f7641fbe6cc..cc20a83fa9b8 100644
|
index f8001dd8dca7..8b957af7c61a 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -396,9 +396,6 @@ static struct rockchip_hdmi_chip_data rk3228_chip_data = {
|
@@ -396,9 +396,6 @@ static struct rockchip_hdmi_chip_data rk3228_chip_data = {
|
||||||
@ -756,7 +756,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 18 insertions(+), 7 deletions(-)
|
1 file changed, 18 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index cc20a83fa9b8..fd614c8a3486 100644
|
index 8b957af7c61a..303c6e81ca4f 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -516,8 +516,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
|
@@ -516,8 +516,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
|
||||||
@ -822,10 +822,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c
|
diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c
|
||||||
index 47d6482dda9d..a2b4d5487514 100644
|
index a24a35553e13..7343d2d7676b 100644
|
||||||
--- a/drivers/clk/rockchip/clk-rk3228.c
|
--- a/drivers/clk/rockchip/clk-rk3228.c
|
||||||
+++ b/drivers/clk/rockchip/clk-rk3228.c
|
+++ b/drivers/clk/rockchip/clk-rk3228.c
|
||||||
@@ -408,7 +408,7 @@ static struct rockchip_clk_branch rk3228_clk_branches[] __initdata = {
|
@@ -409,7 +409,7 @@ static struct rockchip_clk_branch rk3228_clk_branches[] __initdata = {
|
||||||
RK2928_CLKSEL_CON(29), 0, 3, DFLAGS),
|
RK2928_CLKSEL_CON(29), 0, 3, DFLAGS),
|
||||||
DIV(0, "sclk_vop_pre", "sclk_vop_src", 0,
|
DIV(0, "sclk_vop_pre", "sclk_vop_src", 0,
|
||||||
RK2928_CLKSEL_CON(27), 8, 8, DFLAGS),
|
RK2928_CLKSEL_CON(27), 8, 8, DFLAGS),
|
||||||
@ -846,10 +846,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 18 insertions(+), 3 deletions(-)
|
1 file changed, 18 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
index cf87361108a0..05ade8ea962f 100644
|
index 37e623bdf287..28df0bc79812 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
@@ -697,7 +697,7 @@ static const struct vop_intr rk3288_vop_intr = {
|
@@ -731,7 +731,7 @@ static const struct vop_intr rk3288_vop_intr = {
|
||||||
.clear = VOP_REG(RK3288_INTR_CTRL0, 0xf, 8),
|
.clear = VOP_REG(RK3288_INTR_CTRL0, 0xf, 8),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -858,7 +858,7 @@ index cf87361108a0..05ade8ea962f 100644
|
|||||||
.version = VOP_VERSION(3, 1),
|
.version = VOP_VERSION(3, 1),
|
||||||
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
.feature = VOP_FEATURE_OUTPUT_RGB10,
|
||||||
.max_output = { 3840, 2160 },
|
.max_output = { 3840, 2160 },
|
||||||
@@ -710,6 +710,19 @@ static const struct vop_data rk3288_vop = {
|
@@ -744,6 +744,19 @@ static const struct vop_data rk3288_vop = {
|
||||||
.lut_size = 1024,
|
.lut_size = 1024,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -878,7 +878,7 @@ index cf87361108a0..05ade8ea962f 100644
|
|||||||
static const int rk3368_vop_intrs[] = {
|
static const int rk3368_vop_intrs[] = {
|
||||||
FS_INTR,
|
FS_INTR,
|
||||||
0, 0,
|
0, 0,
|
||||||
@@ -1075,8 +1088,10 @@ static const struct of_device_id vop_driver_dt_match[] = {
|
@@ -1109,8 +1122,10 @@ static const struct of_device_id vop_driver_dt_match[] = {
|
||||||
.data = &rk3066_vop },
|
.data = &rk3066_vop },
|
||||||
{ .compatible = "rockchip,rk3188-vop",
|
{ .compatible = "rockchip,rk3188-vop",
|
||||||
.data = &rk3188_vop },
|
.data = &rk3188_vop },
|
||||||
@ -903,10 +903,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
index 01ea1f170f77..3575dea1ee29 100644
|
index 9c5a7791a1ab..b64b8fbe388d 100644
|
||||||
--- a/arch/arm/boot/dts/rk3288.dtsi
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
@@ -1037,7 +1037,7 @@ rga: rga@ff920000 {
|
@@ -1018,7 +1018,7 @@ rga: rga@ff920000 {
|
||||||
};
|
};
|
||||||
|
|
||||||
vopb: vop@ff930000 {
|
vopb: vop@ff930000 {
|
||||||
@ -915,7 +915,7 @@ index 01ea1f170f77..3575dea1ee29 100644
|
|||||||
reg = <0x0 0xff930000 0x0 0x19c>, <0x0 0xff931000 0x0 0x1000>;
|
reg = <0x0 0xff930000 0x0 0x19c>, <0x0 0xff931000 0x0 0x1000>;
|
||||||
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&cru ACLK_VOP0>, <&cru DCLK_VOP0>, <&cru HCLK_VOP0>;
|
clocks = <&cru ACLK_VOP0>, <&cru DCLK_VOP0>, <&cru HCLK_VOP0>;
|
||||||
@@ -1087,7 +1087,7 @@ vopb_mmu: iommu@ff930300 {
|
@@ -1068,7 +1068,7 @@ vopb_mmu: iommu@ff930300 {
|
||||||
};
|
};
|
||||||
|
|
||||||
vopl: vop@ff940000 {
|
vopl: vop@ff940000 {
|
||||||
@ -939,7 +939,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
3 files changed, 10 insertions(+), 6 deletions(-)
|
3 files changed, 10 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
index 0c79a9ba48bb..50199329ad6f 100644
|
index e7c7c9b9c646..ee1968ecaa8f 100644
|
||||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
@@ -137,7 +137,8 @@ struct dw_hdmi_phy_data {
|
@@ -137,7 +137,8 @@ struct dw_hdmi_phy_data {
|
||||||
@ -989,7 +989,7 @@ index 7b8ec8310699..539d86131fd4 100644
|
|||||||
const struct rcar_hdmi_phy_params *params = rcar_hdmi_phy_params;
|
const struct rcar_hdmi_phy_params *params = rcar_hdmi_phy_params;
|
||||||
|
|
||||||
diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h
|
diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h
|
||||||
index ea34ca146b82..4f61ede6486d 100644
|
index 6a5716655619..182c8a8781df 100644
|
||||||
--- a/include/drm/bridge/dw_hdmi.h
|
--- a/include/drm/bridge/dw_hdmi.h
|
||||||
+++ b/include/drm/bridge/dw_hdmi.h
|
+++ b/include/drm/bridge/dw_hdmi.h
|
||||||
@@ -152,7 +152,8 @@ struct dw_hdmi_plat_data {
|
@@ -152,7 +152,8 @@ struct dw_hdmi_plat_data {
|
||||||
@ -999,9 +999,9 @@ index ea34ca146b82..4f61ede6486d 100644
|
|||||||
- unsigned long mpixelclock);
|
- unsigned long mpixelclock);
|
||||||
+ unsigned long mpixelclock,
|
+ unsigned long mpixelclock,
|
||||||
+ unsigned long mtmdsclock);
|
+ unsigned long mtmdsclock);
|
||||||
};
|
|
||||||
|
|
||||||
struct dw_hdmi *dw_hdmi_probe(struct platform_device *pdev,
|
unsigned int disable_cec : 1;
|
||||||
|
};
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Jonas Karlman <jonas@kwiboo.se>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
@ -1016,7 +1016,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 12 insertions(+), 5 deletions(-)
|
1 file changed, 12 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
index 50199329ad6f..2581789178c7 100644
|
index ee1968ecaa8f..8b3ce725b211 100644
|
||||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
@@ -1448,6 +1448,7 @@ static int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
|
@@ -1448,6 +1448,7 @@ static int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
|
||||||
@ -1075,7 +1075,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
2 files changed, 4 insertions(+), 1 deletion(-)
|
2 files changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
index 2581789178c7..6d319b95b992 100644
|
index 8b3ce725b211..473db9629a66 100644
|
||||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
@@ -1450,7 +1450,9 @@ static int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
|
@@ -1450,7 +1450,9 @@ static int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
|
||||||
@ -1090,7 +1090,7 @@ index 2581789178c7..6d319b95b992 100644
|
|||||||
/* PLL/MPLL Cfg - always match on final entry */
|
/* PLL/MPLL Cfg - always match on final entry */
|
||||||
for (; mpll_config->mpixelclock != ~0UL; mpll_config++)
|
for (; mpll_config->mpixelclock != ~0UL; mpll_config++)
|
||||||
diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h
|
diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h
|
||||||
index 4f61ede6486d..0ebe01835d2a 100644
|
index 182c8a8781df..5387d2cd1560 100644
|
||||||
--- a/include/drm/bridge/dw_hdmi.h
|
--- a/include/drm/bridge/dw_hdmi.h
|
||||||
+++ b/include/drm/bridge/dw_hdmi.h
|
+++ b/include/drm/bridge/dw_hdmi.h
|
||||||
@@ -149,6 +149,7 @@ struct dw_hdmi_plat_data {
|
@@ -149,6 +149,7 @@ struct dw_hdmi_plat_data {
|
||||||
@ -1113,7 +1113,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index fd614c8a3486..c22add144cf4 100644
|
index 303c6e81ca4f..73fad678b6ee 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -221,8 +221,15 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *hdmi, void *data,
|
@@ -221,8 +221,15 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *hdmi, void *data,
|
||||||
@ -1154,7 +1154,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 41 insertions(+)
|
1 file changed, 41 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index c22add144cf4..1e558af2c9b2 100644
|
index 73fad678b6ee..6471d601b98b 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -165,6 +165,46 @@ static const struct dw_hdmi_mpll_config rockchip_mpll_cfg[] = {
|
@@ -165,6 +165,46 @@ static const struct dw_hdmi_mpll_config rockchip_mpll_cfg[] = {
|
||||||
@ -1225,7 +1225,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 41 insertions(+)
|
1 file changed, 41 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index 1e558af2c9b2..6dbd0e422ca1 100644
|
index 6471d601b98b..9af45fdfbd19 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -205,6 +205,46 @@ static const struct dw_hdmi_mpll_config rockchip_mpll_cfg_420[] = {
|
@@ -205,6 +205,46 @@ static const struct dw_hdmi_mpll_config rockchip_mpll_cfg_420[] = {
|
||||||
@ -1302,7 +1302,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 78 insertions(+), 32 deletions(-)
|
1 file changed, 78 insertions(+), 32 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index 6dbd0e422ca1..510ae5d5f133 100644
|
index 9af45fdfbd19..134c2db8d0fe 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -68,6 +68,7 @@ struct rockchip_hdmi {
|
@@ -68,6 +68,7 @@ struct rockchip_hdmi {
|
||||||
@ -1501,10 +1501,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 4 insertions(+), 32 deletions(-)
|
1 file changed, 4 insertions(+), 32 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index bf44282409ab..25b89ddb446d 100644
|
index 5badaf5a87e7..af9e40d7f49b 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -1854,19 +1854,10 @@ static int vop_create_crtc(struct vop *vop)
|
@@ -1877,19 +1877,10 @@ static int vop_create_crtc(struct vop *vop)
|
||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -1524,7 +1524,7 @@ index bf44282409ab..25b89ddb446d 100644
|
|||||||
ret = drm_universal_plane_init(vop->drm_dev, &vop_win->base,
|
ret = drm_universal_plane_init(vop->drm_dev, &vop_win->base,
|
||||||
0, &vop_plane_funcs,
|
0, &vop_plane_funcs,
|
||||||
win_data->phy->data_formats,
|
win_data->phy->data_formats,
|
||||||
@@ -1899,32 +1890,13 @@ static int vop_create_crtc(struct vop *vop)
|
@@ -1922,32 +1913,13 @@ static int vop_create_crtc(struct vop *vop)
|
||||||
drm_crtc_enable_color_mgmt(crtc, 0, false, vop_data->lut_size);
|
drm_crtc_enable_color_mgmt(crtc, 0, false, vop_data->lut_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1587,10 +1587,10 @@ index 3aa37e177667..a2b59faa9184 100644
|
|||||||
dev->mode_config.helper_private = &rockchip_mode_config_helpers;
|
dev->mode_config.helper_private = &rockchip_mode_config_helpers;
|
||||||
}
|
}
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index 25b89ddb446d..74d7e474bf89 100644
|
index af9e40d7f49b..ab3ae8d03231 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -1831,7 +1831,7 @@ static irqreturn_t vop_isr(int irq, void *data)
|
@@ -1854,7 +1854,7 @@ static irqreturn_t vop_isr(int irq, void *data)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1599,7 +1599,7 @@ index 25b89ddb446d..74d7e474bf89 100644
|
|||||||
const struct vop_win_data *win_data)
|
const struct vop_win_data *win_data)
|
||||||
{
|
{
|
||||||
unsigned int flags = 0;
|
unsigned int flags = 0;
|
||||||
@@ -1841,6 +1841,8 @@ static void vop_plane_add_properties(struct drm_plane *plane,
|
@@ -1864,6 +1864,8 @@ static void vop_plane_add_properties(struct drm_plane *plane,
|
||||||
if (flags)
|
if (flags)
|
||||||
drm_plane_create_rotation_property(plane, DRM_MODE_ROTATE_0,
|
drm_plane_create_rotation_property(plane, DRM_MODE_ROTATE_0,
|
||||||
DRM_MODE_ROTATE_0 | flags);
|
DRM_MODE_ROTATE_0 | flags);
|
||||||
@ -1608,7 +1608,7 @@ index 25b89ddb446d..74d7e474bf89 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int vop_create_crtc(struct vop *vop)
|
static int vop_create_crtc(struct vop *vop)
|
||||||
@@ -1872,7 +1874,7 @@ static int vop_create_crtc(struct vop *vop)
|
@@ -1895,7 +1897,7 @@ static int vop_create_crtc(struct vop *vop)
|
||||||
|
|
||||||
plane = &vop_win->base;
|
plane = &vop_win->base;
|
||||||
drm_plane_helper_add(plane, &plane_helper_funcs);
|
drm_plane_helper_add(plane, &plane_helper_funcs);
|
||||||
@ -1629,10 +1629,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 30 insertions(+), 2 deletions(-)
|
1 file changed, 30 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index 74d7e474bf89..d8e0c5a4df01 100644
|
index ab3ae8d03231..8c6d1881787c 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -1831,8 +1831,23 @@ static irqreturn_t vop_isr(int irq, void *data)
|
@@ -1854,8 +1854,23 @@ static irqreturn_t vop_isr(int irq, void *data)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1657,7 +1657,7 @@ index 74d7e474bf89..d8e0c5a4df01 100644
|
|||||||
{
|
{
|
||||||
unsigned int flags = 0;
|
unsigned int flags = 0;
|
||||||
|
|
||||||
@@ -1843,6 +1858,19 @@ static void vop_plane_add_properties(struct drm_plane *plane, int zpos,
|
@@ -1866,6 +1881,19 @@ static void vop_plane_add_properties(struct drm_plane *plane, int zpos,
|
||||||
DRM_MODE_ROTATE_0 | flags);
|
DRM_MODE_ROTATE_0 | flags);
|
||||||
|
|
||||||
drm_plane_create_zpos_immutable_property(plane, zpos);
|
drm_plane_create_zpos_immutable_property(plane, zpos);
|
||||||
@ -1677,7 +1677,7 @@ index 74d7e474bf89..d8e0c5a4df01 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int vop_create_crtc(struct vop *vop)
|
static int vop_create_crtc(struct vop *vop)
|
||||||
@@ -1874,7 +1902,7 @@ static int vop_create_crtc(struct vop *vop)
|
@@ -1897,7 +1925,7 @@ static int vop_create_crtc(struct vop *vop)
|
||||||
|
|
||||||
plane = &vop_win->base;
|
plane = &vop_win->base;
|
||||||
drm_plane_helper_add(plane, &plane_helper_funcs);
|
drm_plane_helper_add(plane, &plane_helper_funcs);
|
||||||
@ -1703,10 +1703,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
2 files changed, 4 insertions(+), 2 deletions(-)
|
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
index 3575dea1ee29..03e86d012edd 100644
|
index b64b8fbe388d..38da07f42cd5 100644
|
||||||
--- a/arch/arm/boot/dts/rk3288.dtsi
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
@@ -1046,6 +1046,8 @@ vopb: vop@ff930000 {
|
@@ -1027,6 +1027,8 @@ vopb: vop@ff930000 {
|
||||||
resets = <&cru SRST_LCDC0_AXI>, <&cru SRST_LCDC0_AHB>, <&cru SRST_LCDC0_DCLK>;
|
resets = <&cru SRST_LCDC0_AXI>, <&cru SRST_LCDC0_AHB>, <&cru SRST_LCDC0_DCLK>;
|
||||||
reset-names = "axi", "ahb", "dclk";
|
reset-names = "axi", "ahb", "dclk";
|
||||||
iommus = <&vopb_mmu>;
|
iommus = <&vopb_mmu>;
|
||||||
@ -1716,10 +1716,10 @@ index 3575dea1ee29..03e86d012edd 100644
|
|||||||
|
|
||||||
vopb_out: port {
|
vopb_out: port {
|
||||||
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
|
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
|
||||||
index 93c794695c46..db6c8bbb35f4 100644
|
index baa5aebd3277..20a3cdbbe909 100644
|
||||||
--- a/drivers/clk/rockchip/clk-rk3288.c
|
--- a/drivers/clk/rockchip/clk-rk3288.c
|
||||||
+++ b/drivers/clk/rockchip/clk-rk3288.c
|
+++ b/drivers/clk/rockchip/clk-rk3288.c
|
||||||
@@ -231,7 +231,7 @@ static struct rockchip_pll_clock rk3288_pll_clks[] __initdata = {
|
@@ -232,7 +232,7 @@ static struct rockchip_pll_clock rk3288_pll_clks[] __initdata = {
|
||||||
[gpll] = PLL(pll_rk3066, PLL_GPLL, "gpll", mux_pll_p, 0, RK3288_PLL_CON(12),
|
[gpll] = PLL(pll_rk3066, PLL_GPLL, "gpll", mux_pll_p, 0, RK3288_PLL_CON(12),
|
||||||
RK3288_MODE_CON, 12, 8, ROCKCHIP_PLL_SYNC_RATE, rk3288_pll_rates),
|
RK3288_MODE_CON, 12, 8, ROCKCHIP_PLL_SYNC_RATE, rk3288_pll_rates),
|
||||||
[npll] = PLL(pll_rk3066, PLL_NPLL, "npll", mux_pll_p, 0, RK3288_PLL_CON(16),
|
[npll] = PLL(pll_rk3066, PLL_NPLL, "npll", mux_pll_p, 0, RK3288_PLL_CON(16),
|
||||||
@ -1728,7 +1728,7 @@ index 93c794695c46..db6c8bbb35f4 100644
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct clk_div_table div_hclk_cpu_t[] = {
|
static struct clk_div_table div_hclk_cpu_t[] = {
|
||||||
@@ -441,7 +441,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
|
@@ -442,7 +442,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
|
||||||
RK3288_CLKSEL_CON(30), 14, 2, MFLAGS, 8, 5, DFLAGS,
|
RK3288_CLKSEL_CON(30), 14, 2, MFLAGS, 8, 5, DFLAGS,
|
||||||
RK3288_CLKGATE_CON(3), 4, GFLAGS),
|
RK3288_CLKGATE_CON(3), 4, GFLAGS),
|
||||||
|
|
||||||
@ -1752,7 +1752,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 22 insertions(+), 1 deletion(-)
|
1 file changed, 22 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
|
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
|
||||||
index db6c8bbb35f4..426309f5dd44 100644
|
index 20a3cdbbe909..47a2527fd238 100644
|
||||||
--- a/drivers/clk/rockchip/clk-rk3288.c
|
--- a/drivers/clk/rockchip/clk-rk3288.c
|
||||||
+++ b/drivers/clk/rockchip/clk-rk3288.c
|
+++ b/drivers/clk/rockchip/clk-rk3288.c
|
||||||
@@ -121,6 +121,27 @@ static struct rockchip_pll_rate_table rk3288_pll_rates[] = {
|
@@ -121,6 +121,27 @@ static struct rockchip_pll_rate_table rk3288_pll_rates[] = {
|
||||||
@ -1783,7 +1783,7 @@ index db6c8bbb35f4..426309f5dd44 100644
|
|||||||
#define RK3288_DIV_ACLK_CORE_M0_MASK 0xf
|
#define RK3288_DIV_ACLK_CORE_M0_MASK 0xf
|
||||||
#define RK3288_DIV_ACLK_CORE_M0_SHIFT 0
|
#define RK3288_DIV_ACLK_CORE_M0_SHIFT 0
|
||||||
#define RK3288_DIV_ACLK_CORE_MP_MASK 0xf
|
#define RK3288_DIV_ACLK_CORE_MP_MASK 0xf
|
||||||
@@ -231,7 +252,7 @@ static struct rockchip_pll_clock rk3288_pll_clks[] __initdata = {
|
@@ -232,7 +253,7 @@ static struct rockchip_pll_clock rk3288_pll_clks[] __initdata = {
|
||||||
[gpll] = PLL(pll_rk3066, PLL_GPLL, "gpll", mux_pll_p, 0, RK3288_PLL_CON(12),
|
[gpll] = PLL(pll_rk3066, PLL_GPLL, "gpll", mux_pll_p, 0, RK3288_PLL_CON(12),
|
||||||
RK3288_MODE_CON, 12, 8, ROCKCHIP_PLL_SYNC_RATE, rk3288_pll_rates),
|
RK3288_MODE_CON, 12, 8, ROCKCHIP_PLL_SYNC_RATE, rk3288_pll_rates),
|
||||||
[npll] = PLL(pll_rk3066, PLL_NPLL, "npll", mux_pll_p, 0, RK3288_PLL_CON(16),
|
[npll] = PLL(pll_rk3066, PLL_NPLL, "npll", mux_pll_p, 0, RK3288_PLL_CON(16),
|
||||||
@ -1806,7 +1806,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 16 insertions(+)
|
1 file changed, 16 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
|
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
|
||||||
index 426309f5dd44..b3247a3a7290 100644
|
index 47a2527fd238..233890555616 100644
|
||||||
--- a/drivers/clk/rockchip/clk-rk3288.c
|
--- a/drivers/clk/rockchip/clk-rk3288.c
|
||||||
+++ b/drivers/clk/rockchip/clk-rk3288.c
|
+++ b/drivers/clk/rockchip/clk-rk3288.c
|
||||||
@@ -127,18 +127,34 @@ static struct rockchip_pll_rate_table rk3288_npll_rates[] = {
|
@@ -127,18 +127,34 @@ static struct rockchip_pll_rate_table rk3288_npll_rates[] = {
|
||||||
@ -1857,7 +1857,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 26 insertions(+), 6 deletions(-)
|
1 file changed, 26 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/clk/rockchip/clk-rk3399.c b/drivers/clk/rockchip/clk-rk3399.c
|
diff --git a/drivers/clk/rockchip/clk-rk3399.c b/drivers/clk/rockchip/clk-rk3399.c
|
||||||
index 7df2f1e00347..d39d9ea39aca 100644
|
index 62a4f2543960..980223c32aba 100644
|
||||||
--- a/drivers/clk/rockchip/clk-rk3399.c
|
--- a/drivers/clk/rockchip/clk-rk3399.c
|
||||||
+++ b/drivers/clk/rockchip/clk-rk3399.c
|
+++ b/drivers/clk/rockchip/clk-rk3399.c
|
||||||
@@ -105,6 +105,25 @@ static struct rockchip_pll_rate_table rk3399_pll_rates[] = {
|
@@ -105,6 +105,25 @@ static struct rockchip_pll_rate_table rk3399_pll_rates[] = {
|
||||||
@ -1926,7 +1926,7 @@ index 7df2f1e00347..d39d9ea39aca 100644
|
|||||||
RK3399_CLKSEL_CON(49), 11, 1, MFLAGS);
|
RK3399_CLKSEL_CON(49), 11, 1, MFLAGS);
|
||||||
|
|
||||||
static struct rockchip_clk_branch rk3399_dclk_vop1_fracmux __initdata =
|
static struct rockchip_clk_branch rk3399_dclk_vop1_fracmux __initdata =
|
||||||
@@ -1160,7 +1180,7 @@ static struct rockchip_clk_branch rk3399_clk_branches[] __initdata = {
|
@@ -1162,7 +1182,7 @@ static struct rockchip_clk_branch rk3399_clk_branches[] __initdata = {
|
||||||
GATE(HCLK_VOP0_NOC, "hclk_vop0_noc", "hclk_vop0_pre", CLK_IGNORE_UNUSED,
|
GATE(HCLK_VOP0_NOC, "hclk_vop0_noc", "hclk_vop0_pre", CLK_IGNORE_UNUSED,
|
||||||
RK3399_CLKGATE_CON(28), 0, GFLAGS),
|
RK3399_CLKGATE_CON(28), 0, GFLAGS),
|
||||||
|
|
||||||
@ -1947,10 +1947,10 @@ Subject: [PATCH] HACK: dts: rockchip: do not use vopl for hdmi
|
|||||||
2 files changed, 18 deletions(-)
|
2 files changed, 18 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
index 03e86d012edd..746acfac1e92 100644
|
index 38da07f42cd5..831484253e27 100644
|
||||||
--- a/arch/arm/boot/dts/rk3288.dtsi
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
@@ -1104,11 +1104,6 @@ vopl_out: port {
|
@@ -1085,11 +1085,6 @@ vopl_out: port {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
@ -1962,7 +1962,7 @@ index 03e86d012edd..746acfac1e92 100644
|
|||||||
vopl_out_edp: endpoint@1 {
|
vopl_out_edp: endpoint@1 {
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
remote-endpoint = <&edp_in_vopl>;
|
remote-endpoint = <&edp_in_vopl>;
|
||||||
@@ -1249,10 +1244,6 @@ hdmi_in_vopb: endpoint@0 {
|
@@ -1230,10 +1225,6 @@ hdmi_in_vopb: endpoint@0 {
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
remote-endpoint = <&vopb_out_hdmi>;
|
remote-endpoint = <&vopb_out_hdmi>;
|
||||||
};
|
};
|
||||||
@ -1974,10 +1974,10 @@ index 03e86d012edd..746acfac1e92 100644
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
index 2551b238b97c..ea1ef6c7455a 100644
|
index 44def886b391..52a748053a97 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
@@ -1639,11 +1639,6 @@ vopl_out_edp: endpoint@1 {
|
@@ -1642,11 +1642,6 @@ vopl_out_edp: endpoint@1 {
|
||||||
remote-endpoint = <&edp_in_vopl>;
|
remote-endpoint = <&edp_in_vopl>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1989,7 +1989,7 @@ index 2551b238b97c..ea1ef6c7455a 100644
|
|||||||
vopl_out_mipi1: endpoint@3 {
|
vopl_out_mipi1: endpoint@3 {
|
||||||
reg = <3>;
|
reg = <3>;
|
||||||
remote-endpoint = <&mipi1_in_vopl>;
|
remote-endpoint = <&mipi1_in_vopl>;
|
||||||
@@ -1815,10 +1810,6 @@ hdmi_in_vopb: endpoint@0 {
|
@@ -1840,10 +1835,6 @@ hdmi_in_vopb: endpoint@0 {
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
remote-endpoint = <&vopb_out_hdmi>;
|
remote-endpoint = <&vopb_out_hdmi>;
|
||||||
};
|
};
|
||||||
@ -2012,7 +2012,7 @@ Subject: [PATCH] WIP: drm/bridge: dw-hdmi: limit mode and bus format to
|
|||||||
1 file changed, 76 insertions(+), 44 deletions(-)
|
1 file changed, 76 insertions(+), 44 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
index 6d319b95b992..c2425d7fc465 100644
|
index 473db9629a66..53fb6cf26137 100644
|
||||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
@@ -1859,6 +1859,21 @@ static void hdmi_config_drm_infoframe(struct dw_hdmi *hdmi,
|
@@ -1859,6 +1859,21 @@ static void hdmi_config_drm_infoframe(struct dw_hdmi *hdmi,
|
||||||
@ -2070,7 +2070,7 @@ index 6d319b95b992..c2425d7fc465 100644
|
|||||||
dev_dbg(hdmi->dev, "final tmdsclock = %d\n", vmode->mtmdsclock);
|
dev_dbg(hdmi->dev, "final tmdsclock = %d\n", vmode->mtmdsclock);
|
||||||
|
|
||||||
/* Set up HDMI_FC_INVIDCONF */
|
/* Set up HDMI_FC_INVIDCONF */
|
||||||
@@ -2544,8 +2541,21 @@ static int dw_hdmi_connector_create(struct dw_hdmi *hdmi)
|
@@ -2528,8 +2525,21 @@ static int dw_hdmi_connector_create(struct dw_hdmi *hdmi)
|
||||||
* - MEDIA_BUS_FMT_RGB888_1X24,
|
* - MEDIA_BUS_FMT_RGB888_1X24,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -2094,7 +2094,7 @@ index 6d319b95b992..c2425d7fc465 100644
|
|||||||
|
|
||||||
static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
|
static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
|
||||||
struct drm_bridge_state *bridge_state,
|
struct drm_bridge_state *bridge_state,
|
||||||
@@ -2557,8 +2567,6 @@ static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
|
@@ -2541,8 +2551,6 @@ static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
|
||||||
struct drm_display_info *info = &conn->display_info;
|
struct drm_display_info *info = &conn->display_info;
|
||||||
struct drm_display_mode *mode = &crtc_state->mode;
|
struct drm_display_mode *mode = &crtc_state->mode;
|
||||||
u8 max_bpc = conn_state->max_requested_bpc;
|
u8 max_bpc = conn_state->max_requested_bpc;
|
||||||
@ -2103,7 +2103,7 @@ index 6d319b95b992..c2425d7fc465 100644
|
|||||||
u32 *output_fmts;
|
u32 *output_fmts;
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
|
|
||||||
@@ -2581,29 +2589,33 @@ static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
|
@@ -2565,29 +2573,33 @@ static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
|
||||||
* If the current mode enforces 4:2:0, force the output but format
|
* If the current mode enforces 4:2:0, force the output but format
|
||||||
* to 4:2:0 and do not add the YUV422/444/RGB formats
|
* to 4:2:0 and do not add the YUV422/444/RGB formats
|
||||||
*/
|
*/
|
||||||
@ -2145,7 +2145,7 @@ index 6d319b95b992..c2425d7fc465 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2612,40 +2624,51 @@ static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
|
@@ -2596,40 +2608,51 @@ static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (max_bpc >= 16 && info->bpc == 16) {
|
if (max_bpc >= 16 && info->bpc == 16) {
|
||||||
@ -2208,7 +2208,7 @@ index 6d319b95b992..c2425d7fc465 100644
|
|||||||
|
|
||||||
*num_output_fmts = i;
|
*num_output_fmts = i;
|
||||||
|
|
||||||
@@ -2825,11 +2848,20 @@ dw_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
|
@@ -2809,11 +2832,20 @@ dw_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
|
||||||
struct dw_hdmi *hdmi = bridge->driver_private;
|
struct dw_hdmi *hdmi = bridge->driver_private;
|
||||||
const struct dw_hdmi_plat_data *pdata = hdmi->plat_data;
|
const struct dw_hdmi_plat_data *pdata = hdmi->plat_data;
|
||||||
enum drm_mode_status mode_status = MODE_OK;
|
enum drm_mode_status mode_status = MODE_OK;
|
||||||
@ -2241,7 +2241,7 @@ Subject: [PATCH] WIP: drm/rockchip: dw_hdmi: add 10-bit rgb bus format
|
|||||||
2 files changed, 43 insertions(+)
|
2 files changed, 43 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index 510ae5d5f133..43ad0278fad1 100644
|
index 134c2db8d0fe..cba63dd5e8c8 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -77,6 +77,7 @@ struct rockchip_hdmi {
|
@@ -77,6 +77,7 @@ struct rockchip_hdmi {
|
||||||
@ -2359,7 +2359,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
index c2425d7fc465..f86b8fa40ab6 100644
|
index 53fb6cf26137..df8ff6af9157 100644
|
||||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
@@ -1646,6 +1646,7 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi,
|
@@ -1646,6 +1646,7 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi,
|
||||||
@ -2379,25 +2379,25 @@ index c2425d7fc465..f86b8fa40ab6 100644
|
|||||||
/*
|
/*
|
||||||
* The Designware IP uses a different byte format from standard
|
* The Designware IP uses a different byte format from standard
|
||||||
* AVI info frames, though generally the bits are in the correct
|
* AVI info frames, though generally the bits are in the correct
|
||||||
@@ -2431,7 +2434,8 @@ static int dw_hdmi_connector_atomic_check(struct drm_connector *connector,
|
@@ -2416,7 +2419,8 @@ static int dw_hdmi_connector_atomic_check(struct drm_connector *connector,
|
||||||
if (!crtc)
|
if (!crtc)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
- if (!hdr_metadata_equal(old_state, new_state)) {
|
- if (!drm_connector_atomic_hdr_metadata_equal(old_state, new_state)) {
|
||||||
+ if (!hdr_metadata_equal(old_state, new_state) ||
|
+ if (!drm_connector_atomic_hdr_metadata_equal(old_state, new_state) ||
|
||||||
+ old_state->content_type != new_state->content_type) {
|
+ old_state->content_type != new_state->content_type) {
|
||||||
crtc_state = drm_atomic_get_crtc_state(state, crtc);
|
crtc_state = drm_atomic_get_crtc_state(state, crtc);
|
||||||
if (IS_ERR(crtc_state))
|
if (IS_ERR(crtc_state))
|
||||||
return PTR_ERR(crtc_state);
|
return PTR_ERR(crtc_state);
|
||||||
@@ -2499,6 +2503,8 @@ static int dw_hdmi_connector_create(struct dw_hdmi *hdmi)
|
@@ -2484,6 +2488,8 @@ static int dw_hdmi_connector_create(struct dw_hdmi *hdmi)
|
||||||
|
|
||||||
drm_connector_attach_max_bpc_property(connector, 8, 16);
|
drm_connector_attach_max_bpc_property(connector, 8, 16);
|
||||||
|
|
||||||
+ drm_connector_attach_content_type_property(connector);
|
+ drm_connector_attach_content_type_property(connector);
|
||||||
+
|
+
|
||||||
if (hdmi->version >= 0x200a && hdmi->plat_data->use_drm_infoframe)
|
if (hdmi->version >= 0x200a && hdmi->plat_data->use_drm_infoframe)
|
||||||
drm_object_attach_property(&connector->base,
|
drm_connector_attach_hdr_output_metadata_property(connector);
|
||||||
connector->dev->mode_config.hdr_output_metadata_property, 0);
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Jonas Karlman <jonas@kwiboo.se>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
@ -2412,7 +2412,7 @@ Subject: [PATCH] WIP: drm/rockchip: add yuv444 support
|
|||||||
4 files changed, 77 insertions(+), 1 deletion(-)
|
4 files changed, 77 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index 43ad0278fad1..c8eaeb484672 100644
|
index cba63dd5e8c8..6429892ac4df 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -62,6 +62,7 @@ struct rockchip_hdmi_chip_data {
|
@@ -62,6 +62,7 @@ struct rockchip_hdmi_chip_data {
|
||||||
@ -2490,10 +2490,10 @@ index 43ad0278fad1..c8eaeb484672 100644
|
|||||||
|
|
||||||
static const struct dw_hdmi_plat_data rk3328_hdmi_drv_data = {
|
static const struct dw_hdmi_plat_data rk3328_hdmi_drv_data = {
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index d8e0c5a4df01..9fde1c27072b 100644
|
index 8c6d1881787c..abf3442baac0 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -325,6 +325,17 @@ static int vop_convert_afbc_format(uint32_t format)
|
@@ -326,6 +326,17 @@ static int vop_convert_afbc_format(uint32_t format)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2511,7 +2511,7 @@ index d8e0c5a4df01..9fde1c27072b 100644
|
|||||||
static uint16_t scl_vop_cal_scale(enum scale_mode mode, uint32_t src,
|
static uint16_t scl_vop_cal_scale(enum scale_mode mode, uint32_t src,
|
||||||
uint32_t dst, bool is_horizontal,
|
uint32_t dst, bool is_horizontal,
|
||||||
int vsu_mode, int *vskiplines)
|
int vsu_mode, int *vskiplines)
|
||||||
@@ -1375,6 +1386,7 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
@@ -1395,6 +1406,7 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||||
u16 vact_end = vact_st + vdisplay;
|
u16 vact_end = vact_st + vdisplay;
|
||||||
uint32_t pin_pol, val;
|
uint32_t pin_pol, val;
|
||||||
int dither_bpc = s->output_bpc ? s->output_bpc : 10;
|
int dither_bpc = s->output_bpc ? s->output_bpc : 10;
|
||||||
@ -2519,7 +2519,7 @@ index d8e0c5a4df01..9fde1c27072b 100644
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (old_state && old_state->self_refresh_active) {
|
if (old_state && old_state->self_refresh_active) {
|
||||||
@@ -1448,6 +1460,8 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
@@ -1468,6 +1480,8 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||||
!(vop_data->feature & VOP_FEATURE_OUTPUT_RGB10))
|
!(vop_data->feature & VOP_FEATURE_OUTPUT_RGB10))
|
||||||
s->output_mode = ROCKCHIP_OUT_MODE_P888;
|
s->output_mode = ROCKCHIP_OUT_MODE_P888;
|
||||||
|
|
||||||
@ -2528,7 +2528,7 @@ index d8e0c5a4df01..9fde1c27072b 100644
|
|||||||
if (s->output_mode == ROCKCHIP_OUT_MODE_AAAA && dither_bpc <= 8)
|
if (s->output_mode == ROCKCHIP_OUT_MODE_AAAA && dither_bpc <= 8)
|
||||||
VOP_REG_SET(vop, common, pre_dither_down, 1);
|
VOP_REG_SET(vop, common, pre_dither_down, 1);
|
||||||
else
|
else
|
||||||
@@ -1463,6 +1477,21 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
@@ -1483,6 +1497,21 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||||
|
|
||||||
VOP_REG_SET(vop, common, out_mode, s->output_mode);
|
VOP_REG_SET(vop, common, out_mode, s->output_mode);
|
||||||
|
|
||||||
@ -2572,10 +2572,10 @@ index 0b1984585082..72dd670bf2a7 100644
|
|||||||
|
|
||||||
struct vop_intr {
|
struct vop_intr {
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
index 05ade8ea962f..f276ef4b3f64 100644
|
index 28df0bc79812..e64cedf7c7a1 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
@@ -662,6 +662,11 @@ static const struct vop_common rk3288_common = {
|
@@ -696,6 +696,11 @@ static const struct vop_common rk3288_common = {
|
||||||
.dsp_blank = VOP_REG(RK3288_DSP_CTRL0, 0x3, 18),
|
.dsp_blank = VOP_REG(RK3288_DSP_CTRL0, 0x3, 18),
|
||||||
.out_mode = VOP_REG(RK3288_DSP_CTRL0, 0xf, 0),
|
.out_mode = VOP_REG(RK3288_DSP_CTRL0, 0xf, 0),
|
||||||
.cfg_done = VOP_REG_SYNC(RK3288_REG_CFG_DONE, 0x1, 0),
|
.cfg_done = VOP_REG_SYNC(RK3288_REG_CFG_DONE, 0x1, 0),
|
||||||
@ -2587,7 +2587,7 @@ index 05ade8ea962f..f276ef4b3f64 100644
|
|||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1029,6 +1034,10 @@ static const struct vop_output rk3328_output = {
|
@@ -1063,6 +1068,10 @@ static const struct vop_output rk3328_output = {
|
||||||
|
|
||||||
static const struct vop_misc rk3328_misc = {
|
static const struct vop_misc rk3328_misc = {
|
||||||
.global_regdone_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 11),
|
.global_regdone_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 11),
|
||||||
@ -2598,7 +2598,7 @@ index 05ade8ea962f..f276ef4b3f64 100644
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct vop_common rk3328_common = {
|
static const struct vop_common rk3328_common = {
|
||||||
@@ -1041,6 +1050,11 @@ static const struct vop_common rk3328_common = {
|
@@ -1075,6 +1084,11 @@ static const struct vop_common rk3328_common = {
|
||||||
.dsp_blank = VOP_REG(RK3328_DSP_CTRL0, 0x3, 18),
|
.dsp_blank = VOP_REG(RK3328_DSP_CTRL0, 0x3, 18),
|
||||||
.out_mode = VOP_REG(RK3328_DSP_CTRL0, 0xf, 0),
|
.out_mode = VOP_REG(RK3328_DSP_CTRL0, 0xf, 0),
|
||||||
.cfg_done = VOP_REG_SYNC(RK3328_REG_CFG_DONE, 0x1, 0),
|
.cfg_done = VOP_REG_SYNC(RK3328_REG_CFG_DONE, 0x1, 0),
|
||||||
@ -2624,7 +2624,7 @@ Subject: [PATCH] WIP: drm/rockchip: add yuv420 support
|
|||||||
4 files changed, 47 insertions(+), 5 deletions(-)
|
4 files changed, 47 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index c8eaeb484672..9fe690570e3d 100644
|
index 6429892ac4df..257770ea2dc7 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -386,9 +386,21 @@ static bool is_yuv444(u32 format)
|
@@ -386,9 +386,21 @@ static bool is_yuv444(u32 format)
|
||||||
@ -2688,10 +2688,10 @@ index c8eaeb484672..9fe690570e3d 100644
|
|||||||
|
|
||||||
static struct rockchip_hdmi_chip_data rk3399_chip_data = {
|
static struct rockchip_hdmi_chip_data rk3399_chip_data = {
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index 9fde1c27072b..4d855724e1dd 100644
|
index abf3442baac0..5238bcbc7bae 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -326,6 +326,19 @@ static int vop_convert_afbc_format(uint32_t format)
|
@@ -327,6 +327,19 @@ static int vop_convert_afbc_format(uint32_t format)
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_yuv_output(uint32_t bus_format)
|
static bool is_yuv_output(uint32_t bus_format)
|
||||||
@ -2711,7 +2711,7 @@ index 9fde1c27072b..4d855724e1dd 100644
|
|||||||
{
|
{
|
||||||
switch (bus_format) {
|
switch (bus_format) {
|
||||||
case MEDIA_BUS_FMT_YUV8_1X24:
|
case MEDIA_BUS_FMT_YUV8_1X24:
|
||||||
@@ -1460,7 +1473,7 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
@@ -1480,7 +1493,7 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||||
!(vop_data->feature & VOP_FEATURE_OUTPUT_RGB10))
|
!(vop_data->feature & VOP_FEATURE_OUTPUT_RGB10))
|
||||||
s->output_mode = ROCKCHIP_OUT_MODE_P888;
|
s->output_mode = ROCKCHIP_OUT_MODE_P888;
|
||||||
|
|
||||||
@ -2720,7 +2720,7 @@ index 9fde1c27072b..4d855724e1dd 100644
|
|||||||
|
|
||||||
if (s->output_mode == ROCKCHIP_OUT_MODE_AAAA && dither_bpc <= 8)
|
if (s->output_mode == ROCKCHIP_OUT_MODE_AAAA && dither_bpc <= 8)
|
||||||
VOP_REG_SET(vop, common, pre_dither_down, 1);
|
VOP_REG_SET(vop, common, pre_dither_down, 1);
|
||||||
@@ -1477,6 +1490,9 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
@@ -1497,6 +1510,9 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||||
|
|
||||||
VOP_REG_SET(vop, common, out_mode, s->output_mode);
|
VOP_REG_SET(vop, common, out_mode, s->output_mode);
|
||||||
|
|
||||||
@ -2760,10 +2760,10 @@ index 72dd670bf2a7..a997578e174a 100644
|
|||||||
/* output flags */
|
/* output flags */
|
||||||
#define ROCKCHIP_OUTPUT_DSI_DUAL BIT(0)
|
#define ROCKCHIP_OUTPUT_DSI_DUAL BIT(0)
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
index f276ef4b3f64..8c99cc2a7eda 100644
|
index e64cedf7c7a1..a13059052124 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
@@ -664,6 +664,7 @@ static const struct vop_common rk3288_common = {
|
@@ -698,6 +698,7 @@ static const struct vop_common rk3288_common = {
|
||||||
.cfg_done = VOP_REG_SYNC(RK3288_REG_CFG_DONE, 0x1, 0),
|
.cfg_done = VOP_REG_SYNC(RK3288_REG_CFG_DONE, 0x1, 0),
|
||||||
|
|
||||||
.overlay_mode = VOP_REG(RK3288_SYS_CTRL, 0x1, 16),
|
.overlay_mode = VOP_REG(RK3288_SYS_CTRL, 0x1, 16),
|
||||||
@ -2771,7 +2771,7 @@ index f276ef4b3f64..8c99cc2a7eda 100644
|
|||||||
.dsp_data_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1f, 12),
|
.dsp_data_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1f, 12),
|
||||||
.dsp_out_yuv = VOP_REG(RK3288_POST_SCL_CTRL, 0x1, 2),
|
.dsp_out_yuv = VOP_REG(RK3288_POST_SCL_CTRL, 0x1, 2),
|
||||||
.dsp_background = VOP_REG(RK3288_DSP_BG, 0xffffffff, 0),
|
.dsp_background = VOP_REG(RK3288_DSP_BG, 0xffffffff, 0),
|
||||||
@@ -1052,6 +1053,7 @@ static const struct vop_common rk3328_common = {
|
@@ -1086,6 +1087,7 @@ static const struct vop_common rk3328_common = {
|
||||||
.cfg_done = VOP_REG_SYNC(RK3328_REG_CFG_DONE, 0x1, 0),
|
.cfg_done = VOP_REG_SYNC(RK3328_REG_CFG_DONE, 0x1, 0),
|
||||||
|
|
||||||
.overlay_mode = VOP_REG(RK3328_SYS_CTRL, 0x1, 16),
|
.overlay_mode = VOP_REG(RK3328_SYS_CTRL, 0x1, 16),
|
||||||
@ -2791,7 +2791,7 @@ Subject: [PATCH] drm/rockchip: enable ycbcr_420_allowed and ycbcr_444_allowed
|
|||||||
1 file changed, 2 insertions(+)
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index 9fe690570e3d..bccdbb3e0a54 100644
|
index 257770ea2dc7..78b77b31436a 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -595,6 +595,7 @@ static const struct dw_hdmi_phy_ops rk3228_hdmi_phy_ops = {
|
@@ -595,6 +595,7 @@ static const struct dw_hdmi_phy_ops rk3228_hdmi_phy_ops = {
|
||||||
@ -2826,7 +2826,7 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 16 insertions(+), 2 deletions(-)
|
1 file changed, 16 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index bccdbb3e0a54..a612bf3da9ee 100644
|
index 78b77b31436a..976dd3c9c26f 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -305,16 +305,30 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *hdmi, void *data,
|
@@ -305,16 +305,30 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *hdmi, void *data,
|
||||||
@ -2874,10 +2874,10 @@ Subject: [PATCH] !fixup drm/rockchip: rk3368's vop does not support 10-bit
|
|||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
index 8c99cc2a7eda..9ca9fff0d359 100644
|
index a13059052124..11a80117f5bc 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
@@ -751,8 +751,8 @@ static const struct vop_intr rk3368_vop_intr = {
|
@@ -785,8 +785,8 @@ static const struct vop_intr rk3368_vop_intr = {
|
||||||
|
|
||||||
static const struct vop_win_phy rk3368_win01_data = {
|
static const struct vop_win_phy rk3368_win01_data = {
|
||||||
.scl = &rk3288_win_full_scl,
|
.scl = &rk3288_win_full_scl,
|
||||||
@ -2900,10 +2900,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 27 insertions(+), 3 deletions(-)
|
1 file changed, 27 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
index 9ca9fff0d359..e34482c3d2be 100644
|
index 11a80117f5bc..43541a042a81 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
|
||||||
@@ -1069,12 +1069,36 @@ static const struct vop_intr rk3328_vop_intr = {
|
@@ -1103,12 +1103,36 @@ static const struct vop_intr rk3328_vop_intr = {
|
||||||
.clear = VOP_REG_MASK_SYNC(RK3328_INTR_CLEAR0, 0xffff, 0),
|
.clear = VOP_REG_MASK_SYNC(RK3328_INTR_CLEAR0, 0xffff, 0),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2954,10 +2954,10 @@ Subject: [PATCH] rockchip: vop: force skip lines if image too big
|
|||||||
1 file changed, 10 insertions(+), 3 deletions(-)
|
1 file changed, 10 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index 4d855724e1dd..5622ffd1b587 100644
|
index 5238bcbc7bae..20e45a23edf4 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -932,6 +932,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
@@ -941,6 +941,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
||||||
int format;
|
int format;
|
||||||
int is_yuv = fb->format->is_yuv;
|
int is_yuv = fb->format->is_yuv;
|
||||||
int i;
|
int i;
|
||||||
@ -2965,7 +2965,7 @@ index 4d855724e1dd..5622ffd1b587 100644
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* can't update plane when vop is disabled.
|
* can't update plane when vop is disabled.
|
||||||
@@ -950,8 +951,14 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
@@ -959,8 +960,14 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
||||||
obj = fb->obj[0];
|
obj = fb->obj[0];
|
||||||
rk_obj = to_rockchip_obj(obj);
|
rk_obj = to_rockchip_obj(obj);
|
||||||
|
|
||||||
@ -2981,7 +2981,7 @@ index 4d855724e1dd..5622ffd1b587 100644
|
|||||||
act_info = (actual_h - 1) << 16 | ((actual_w - 1) & 0xffff);
|
act_info = (actual_h - 1) << 16 | ((actual_w - 1) & 0xffff);
|
||||||
|
|
||||||
dsp_info = (drm_rect_height(dest) - 1) << 16;
|
dsp_info = (drm_rect_height(dest) - 1) << 16;
|
||||||
@@ -993,7 +1000,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
@@ -1002,7 +1009,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
||||||
|
|
||||||
VOP_WIN_SET(vop, win, format, format);
|
VOP_WIN_SET(vop, win, format, format);
|
||||||
VOP_WIN_SET(vop, win, fmt_10, is_fmt_10(fb->format->format));
|
VOP_WIN_SET(vop, win, fmt_10, is_fmt_10(fb->format->format));
|
||||||
@ -2990,7 +2990,7 @@ index 4d855724e1dd..5622ffd1b587 100644
|
|||||||
VOP_WIN_SET(vop, win, yrgb_mst, dma_addr);
|
VOP_WIN_SET(vop, win, yrgb_mst, dma_addr);
|
||||||
VOP_WIN_YUV2YUV_SET(vop, win_yuv2yuv, y2r_en, is_yuv);
|
VOP_WIN_YUV2YUV_SET(vop, win_yuv2yuv, y2r_en, is_yuv);
|
||||||
VOP_WIN_SET(vop, win, y_mir_en,
|
VOP_WIN_SET(vop, win, y_mir_en,
|
||||||
@@ -1017,7 +1024,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
@@ -1026,7 +1033,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
|
||||||
offset += (src->y1 >> 16) * fb->pitches[1] / vsub;
|
offset += (src->y1 >> 16) * fb->pitches[1] / vsub;
|
||||||
|
|
||||||
dma_addr = rk_uv_obj->dma_addr + offset + fb->offsets[1];
|
dma_addr = rk_uv_obj->dma_addr + offset + fb->offsets[1];
|
||||||
@ -3014,10 +3014,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
index d327fd300116..31c48c38c955 100644
|
index cfc57be009a6..9c10b6e3b9bc 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
@@ -805,8 +805,8 @@ cru: clock-controller@ff440000 {
|
@@ -793,8 +793,8 @@ cru: clock-controller@ff440000 {
|
||||||
<0>, <24000000>,
|
<0>, <24000000>,
|
||||||
<24000000>, <24000000>,
|
<24000000>, <24000000>,
|
||||||
<15000000>, <15000000>,
|
<15000000>, <15000000>,
|
||||||
@ -3046,7 +3046,7 @@ this.
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
|
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
|
||||||
index b3247a3a7290..f5617529dbb5 100644
|
index 233890555616..676e7c3c6f2b 100644
|
||||||
--- a/drivers/clk/rockchip/clk-rk3288.c
|
--- a/drivers/clk/rockchip/clk-rk3288.c
|
||||||
+++ b/drivers/clk/rockchip/clk-rk3288.c
|
+++ b/drivers/clk/rockchip/clk-rk3288.c
|
||||||
@@ -122,7 +122,7 @@ static struct rockchip_pll_rate_table rk3288_pll_rates[] = {
|
@@ -122,7 +122,7 @@ static struct rockchip_pll_rate_table rk3288_pll_rates[] = {
|
||||||
@ -3085,7 +3085,7 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
index f86b8fa40ab6..3340aef73d8d 100644
|
index df8ff6af9157..5642a8c9bed5 100644
|
||||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
@@ -81,15 +81,15 @@ static const u16 csc_coeff_rgb_out_eitu709[3][4] = {
|
@@ -81,15 +81,15 @@ static const u16 csc_coeff_rgb_out_eitu709[3][4] = {
|
||||||
@ -3131,7 +3131,7 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 28 insertions(+), 14 deletions(-)
|
1 file changed, 28 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/clk/rockchip/clk-rk3399.c b/drivers/clk/rockchip/clk-rk3399.c
|
diff --git a/drivers/clk/rockchip/clk-rk3399.c b/drivers/clk/rockchip/clk-rk3399.c
|
||||||
index d39d9ea39aca..16b0bf173299 100644
|
index 980223c32aba..09c6f8020212 100644
|
||||||
--- a/drivers/clk/rockchip/clk-rk3399.c
|
--- a/drivers/clk/rockchip/clk-rk3399.c
|
||||||
+++ b/drivers/clk/rockchip/clk-rk3399.c
|
+++ b/drivers/clk/rockchip/clk-rk3399.c
|
||||||
@@ -107,20 +107,34 @@ static struct rockchip_pll_rate_table rk3399_pll_rates[] = {
|
@@ -107,20 +107,34 @@ static struct rockchip_pll_rate_table rk3399_pll_rates[] = {
|
||||||
@ -3213,7 +3213,7 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 173 insertions(+), 25 deletions(-)
|
1 file changed, 173 insertions(+), 25 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
index 3719309ad0d0..00025dcd3bb9 100644
|
index 2f01259823ea..1889e78e18ea 100644
|
||||||
--- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
--- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
+++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
+++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||||
@@ -292,31 +292,179 @@ struct inno_hdmi_phy_drv_data {
|
@@ -292,31 +292,179 @@ struct inno_hdmi_phy_drv_data {
|
||||||
@ -3445,7 +3445,7 @@ Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
index 3340aef73d8d..d798846579f5 100644
|
index 5642a8c9bed5..84cc52858ffb 100644
|
||||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||||
@@ -1060,7 +1060,7 @@ static void hdmi_video_csc(struct dw_hdmi *hdmi)
|
@@ -1060,7 +1060,7 @@ static void hdmi_video_csc(struct dw_hdmi *hdmi)
|
||||||
@ -3457,13 +3457,12 @@ index 3340aef73d8d..d798846579f5 100644
|
|||||||
|
|
||||||
switch (hdmi_bus_fmt_color_depth(hdmi->hdmi_data.enc_out_bus_format)) {
|
switch (hdmi_bus_fmt_color_depth(hdmi->hdmi_data.enc_out_bus_format)) {
|
||||||
case 8:
|
case 8:
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Tue, 1 Jun 2021 19:24:37 +0200
|
Date: Tue, 1 Jun 2021 19:24:37 +0200
|
||||||
Subject: [PATCH] drm/rockchip: allow 4096px with modes
|
Subject: [PATCH] drm/rockchip: allow 4096px width modes
|
||||||
|
|
||||||
There is no reason to limit to modes up to 3840.
|
There is not reason to limit vop output to 3840px width modes.
|
||||||
Also drop the limitation from dw_hdmi_rockchip_mode_valid, since
|
Also drop the limitation from dw_hdmi_rockchip_mode_valid, since
|
||||||
the max dimenstions of the actual vop version is validated in
|
the max dimenstions of the actual vop version is validated in
|
||||||
vop_crtc_mode_valid anyways.
|
vop_crtc_mode_valid anyways.
|
||||||
@ -3475,7 +3474,7 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
index a612bf3da9ee..e4cfa6adbd87 100644
|
index 8d1d2b8d038b..07e1327acf5e 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
@@ -329,7 +329,7 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *hdmi, void *data,
|
@@ -329,7 +329,7 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *hdmi, void *data,
|
||||||
@ -3488,10 +3487,10 @@ index a612bf3da9ee..e4cfa6adbd87 100644
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
index 5622ffd1b587..a0d27a9a9675 100644
|
index 20a73cb3005e..b1473459a579 100644
|
||||||
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
|
||||||
@@ -401,8 +401,8 @@ static void scl_vop_cal_scl_fac(struct vop *vop, const struct vop_win_data *win,
|
@@ -402,8 +402,8 @@ static void scl_vop_cal_scl_fac(struct vop *vop, const struct vop_win_data *win,
|
||||||
if (info->is_yuv)
|
if (info->is_yuv)
|
||||||
is_yuv = true;
|
is_yuv = true;
|
||||||
|
|
||||||
@ -3502,3 +3501,5 @@ index 5622ffd1b587..a0d27a9a9675 100644
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -10,10 +10,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index 9492822c12ae..b49541f8ecf5 100644
|
index d068383aeea8..5c03fdbd45ec 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -1024,7 +1024,8 @@ static irqreturn_t rkvdec_irq_handler(int irq, void *priv)
|
@@ -986,7 +986,8 @@ static irqreturn_t rkvdec_irq_handler(int irq, void *priv)
|
||||||
state = (status & RKVDEC_RDY_STA) ?
|
state = (status & RKVDEC_RDY_STA) ?
|
||||||
VB2_BUF_STATE_DONE : VB2_BUF_STATE_ERROR;
|
VB2_BUF_STATE_DONE : VB2_BUF_STATE_ERROR;
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ index 9492822c12ae..b49541f8ecf5 100644
|
|||||||
if (cancel_delayed_work(&rkvdec->watchdog_work)) {
|
if (cancel_delayed_work(&rkvdec->watchdog_work)) {
|
||||||
struct rkvdec_ctx *ctx;
|
struct rkvdec_ctx *ctx;
|
||||||
|
|
||||||
@@ -1045,7 +1046,8 @@ static void rkvdec_watchdog_func(struct work_struct *work)
|
@@ -1007,7 +1008,8 @@ static void rkvdec_watchdog_func(struct work_struct *work)
|
||||||
ctx = v4l2_m2m_get_curr_priv(rkvdec->m2m_dev);
|
ctx = v4l2_m2m_get_curr_priv(rkvdec->m2m_dev);
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
dev_err(rkvdec->dev, "Frame processing timed out!\n");
|
dev_err(rkvdec->dev, "Frame processing timed out!\n");
|
||||||
@ -46,10 +46,10 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index b49541f8ecf5..51e257a0233d 100644
|
index 5c03fdbd45ec..ad5e02bbd8d0 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -1145,9 +1145,9 @@ static int rkvdec_remove(struct platform_device *pdev)
|
@@ -1105,9 +1105,9 @@ static int rkvdec_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct rkvdec_dev *rkvdec = platform_get_drvdata(pdev);
|
struct rkvdec_dev *rkvdec = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 5 insertions(+), 13 deletions(-)
|
1 file changed, 5 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
index c115cd362a7f..d9a2fd9386e2 100644
|
index c9a551dbd9bc..6ce11b736363 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
@@ -734,6 +734,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
@@ -734,6 +734,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||||
@ -131,7 +131,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
1 file changed, 64 insertions(+), 15 deletions(-)
|
1 file changed, 64 insertions(+), 15 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
index d9a2fd9386e2..d4f27ef7addd 100644
|
index 6ce11b736363..9c3f08c94800 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
@@ -737,7 +737,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
@@ -737,7 +737,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||||
@ -247,58 +247,27 @@ This still need code cleanup and formatting
|
|||||||
|
|
||||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||||
---
|
---
|
||||||
.../staging/media/hantro/hantro_g1_h264_dec.c | 17 +---
|
drivers/staging/media/hantro/hantro_h264.c | 91 ++++++++++++++++------
|
||||||
drivers/staging/media/hantro/hantro_h264.c | 81 ++++++++++++++++---
|
1 file changed, 69 insertions(+), 22 deletions(-)
|
||||||
drivers/staging/media/hantro/hantro_hw.h | 2 +
|
|
||||||
3 files changed, 74 insertions(+), 26 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/hantro/hantro_g1_h264_dec.c b/drivers/staging/media/hantro/hantro_g1_h264_dec.c
|
|
||||||
index 845bef73d218..869ee261a5db 100644
|
|
||||||
--- a/drivers/staging/media/hantro/hantro_g1_h264_dec.c
|
|
||||||
+++ b/drivers/staging/media/hantro/hantro_g1_h264_dec.c
|
|
||||||
@@ -130,25 +130,12 @@ static void set_ref(struct hantro_ctx *ctx)
|
|
||||||
struct v4l2_h264_dpb_entry *dpb = ctx->h264_dec.dpb;
|
|
||||||
const u8 *b0_reflist, *b1_reflist, *p_reflist;
|
|
||||||
struct hantro_dev *vpu = ctx->dev;
|
|
||||||
- u32 dpb_longterm = 0;
|
|
||||||
- u32 dpb_valid = 0;
|
|
||||||
int reg_num;
|
|
||||||
u32 reg;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * Set up bit maps of valid and long term DPBs.
|
|
||||||
- * NOTE: The bits are reversed, i.e. MSb is DPB 0.
|
|
||||||
- */
|
|
||||||
- for (i = 0; i < HANTRO_H264_DPB_SIZE; ++i) {
|
|
||||||
- if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE)
|
|
||||||
- dpb_valid |= BIT(HANTRO_H264_DPB_SIZE - 1 - i);
|
|
||||||
-
|
|
||||||
- if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM)
|
|
||||||
- dpb_longterm |= BIT(HANTRO_H264_DPB_SIZE - 1 - i);
|
|
||||||
- }
|
|
||||||
- vdpu_write_relaxed(vpu, dpb_valid << 16, G1_REG_VALID_REF);
|
|
||||||
- vdpu_write_relaxed(vpu, dpb_longterm << 16, G1_REG_LT_REF);
|
|
||||||
+ vdpu_write_relaxed(vpu, ctx->h264_dec.dpb_valid, G1_REG_VALID_REF);
|
|
||||||
+ vdpu_write_relaxed(vpu, ctx->h264_dec.dpb_longterm, G1_REG_LT_REF);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set up reference frame picture numbers.
|
|
||||||
diff --git a/drivers/staging/media/hantro/hantro_h264.c b/drivers/staging/media/hantro/hantro_h264.c
|
diff --git a/drivers/staging/media/hantro/hantro_h264.c b/drivers/staging/media/hantro/hantro_h264.c
|
||||||
index b1bdc00ac262..bc2af450a94c 100644
|
index 0b4d2491be3b..7b56a68c176c 100644
|
||||||
--- a/drivers/staging/media/hantro/hantro_h264.c
|
--- a/drivers/staging/media/hantro/hantro_h264.c
|
||||||
+++ b/drivers/staging/media/hantro/hantro_h264.c
|
+++ b/drivers/staging/media/hantro/hantro_h264.c
|
||||||
@@ -227,17 +227,67 @@ static void prepare_table(struct hantro_ctx *ctx)
|
@@ -227,30 +227,67 @@ static void prepare_table(struct hantro_ctx *ctx)
|
||||||
{
|
{
|
||||||
const struct hantro_h264_dec_ctrls *ctrls = &ctx->h264_dec.ctrls;
|
const struct hantro_h264_dec_ctrls *ctrls = &ctx->h264_dec.ctrls;
|
||||||
const struct v4l2_ctrl_h264_decode_params *dec_param = ctrls->decode;
|
const struct v4l2_ctrl_h264_decode_params *dec_param = ctrls->decode;
|
||||||
+ const struct v4l2_ctrl_h264_sps *sps = ctrls->sps;
|
+ const struct v4l2_ctrl_h264_sps *sps = ctrls->sps;
|
||||||
struct hantro_h264_dec_priv_tbl *tbl = ctx->h264_dec.priv.cpu;
|
struct hantro_h264_dec_priv_tbl *tbl = ctx->h264_dec.priv.cpu;
|
||||||
const struct v4l2_h264_dpb_entry *dpb = ctx->h264_dec.dpb;
|
const struct v4l2_h264_dpb_entry *dpb = ctx->h264_dec.dpb;
|
||||||
+ u32 dpb_longterm = 0;
|
u32 dpb_longterm = 0;
|
||||||
+ u32 dpb_valid = 0;
|
u32 dpb_valid = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
- for (i = 0; i < HANTRO_H264_DPB_SIZE; ++i) {
|
||||||
|
- tbl->poc[i * 2] = dpb[i].top_field_order_cnt;
|
||||||
|
- tbl->poc[i * 2 + 1] = dpb[i].bottom_field_order_cnt;
|
||||||
+ /*
|
+ /*
|
||||||
+ * Set up bit maps of valid and long term DPBs.
|
+ * Set up bit maps of valid and long term DPBs.
|
||||||
+ * NOTE: The bits are reversed, i.e. MSb is DPB 0.
|
+ * NOTE: The bits are reversed, i.e. MSb is DPB 0.
|
||||||
@ -315,7 +284,15 @@ index b1bdc00ac262..bc2af450a94c 100644
|
|||||||
+ if (dpb[i / 2].flags & V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM)
|
+ if (dpb[i / 2].flags & V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM)
|
||||||
+ dpb_longterm |= BIT(HANTRO_H264_DPB_SIZE * 2 - 1 - i);
|
+ dpb_longterm |= BIT(HANTRO_H264_DPB_SIZE * 2 - 1 - i);
|
||||||
+ }
|
+ }
|
||||||
+
|
|
||||||
|
- /*
|
||||||
|
- * Set up bit maps of valid and long term DPBs.
|
||||||
|
- * NOTE: The bits are reversed, i.e. MSb is DPB 0.
|
||||||
|
- */
|
||||||
|
- if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE)
|
||||||
|
- dpb_valid |= BIT(HANTRO_H264_DPB_SIZE - 1 - i);
|
||||||
|
- if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM)
|
||||||
|
- dpb_longterm |= BIT(HANTRO_H264_DPB_SIZE - 1 - i);
|
||||||
+ ctx->h264_dec.dpb_valid = dpb_valid;
|
+ ctx->h264_dec.dpb_valid = dpb_valid;
|
||||||
+ ctx->h264_dec.dpb_longterm = dpb_longterm;
|
+ ctx->h264_dec.dpb_longterm = dpb_longterm;
|
||||||
+ } else {
|
+ } else {
|
||||||
@ -329,11 +306,13 @@ index b1bdc00ac262..bc2af450a94c 100644
|
|||||||
+
|
+
|
||||||
+ ctx->h264_dec.dpb_valid = dpb_valid << 16;
|
+ ctx->h264_dec.dpb_valid = dpb_valid << 16;
|
||||||
+ ctx->h264_dec.dpb_longterm = dpb_longterm << 16;
|
+ ctx->h264_dec.dpb_longterm = dpb_longterm << 16;
|
||||||
+ }
|
}
|
||||||
+
|
- ctx->h264_dec.dpb_valid = dpb_valid << 16;
|
||||||
for (i = 0; i < HANTRO_H264_DPB_SIZE; ++i) {
|
- ctx->h264_dec.dpb_longterm = dpb_longterm << 16;
|
||||||
- tbl->poc[i * 2] = dpb[i].top_field_order_cnt;
|
|
||||||
- tbl->poc[i * 2 + 1] = dpb[i].bottom_field_order_cnt;
|
- tbl->poc[32] = dec_param->top_field_order_cnt;
|
||||||
|
- tbl->poc[33] = dec_param->bottom_field_order_cnt;
|
||||||
|
+ for (i = 0; i < HANTRO_H264_DPB_SIZE; ++i) {
|
||||||
+ if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE) {
|
+ if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE) {
|
||||||
+ tbl->poc[i * 2] = dpb[i].top_field_order_cnt;
|
+ tbl->poc[i * 2] = dpb[i].top_field_order_cnt;
|
||||||
+ tbl->poc[i * 2 + 1] = dpb[i].bottom_field_order_cnt;
|
+ tbl->poc[i * 2 + 1] = dpb[i].bottom_field_order_cnt;
|
||||||
@ -341,10 +320,8 @@ index b1bdc00ac262..bc2af450a94c 100644
|
|||||||
+ tbl->poc[i * 2] = 0;
|
+ tbl->poc[i * 2] = 0;
|
||||||
+ tbl->poc[i * 2 + 1] = 0;
|
+ tbl->poc[i * 2 + 1] = 0;
|
||||||
+ }
|
+ }
|
||||||
}
|
+ }
|
||||||
|
+
|
||||||
- tbl->poc[32] = dec_param->top_field_order_cnt;
|
|
||||||
- tbl->poc[33] = dec_param->bottom_field_order_cnt;
|
|
||||||
+ if ((dec_param->flags & V4L2_H264_DECODE_PARAM_FLAG_FIELD_PIC) || !(sps->flags & V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD)) {
|
+ if ((dec_param->flags & V4L2_H264_DECODE_PARAM_FLAG_FIELD_PIC) || !(sps->flags & V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD)) {
|
||||||
+ if ((dec_param->flags & V4L2_H264_DECODE_PARAM_FLAG_FIELD_PIC))
|
+ if ((dec_param->flags & V4L2_H264_DECODE_PARAM_FLAG_FIELD_PIC))
|
||||||
+ tbl->poc[32] = (dec_param->flags & V4L2_H264_DECODE_PARAM_FLAG_BOTTOM_FIELD) ?
|
+ tbl->poc[32] = (dec_param->flags & V4L2_H264_DECODE_PARAM_FLAG_BOTTOM_FIELD) ?
|
||||||
@ -356,11 +333,11 @@ index b1bdc00ac262..bc2af450a94c 100644
|
|||||||
+ } else {
|
+ } else {
|
||||||
+ tbl->poc[32] = dec_param->top_field_order_cnt;
|
+ tbl->poc[32] = dec_param->top_field_order_cnt;
|
||||||
+ tbl->poc[33] = dec_param->bottom_field_order_cnt;
|
+ tbl->poc[33] = dec_param->bottom_field_order_cnt;
|
||||||
+ }
|
+ };
|
||||||
|
|
||||||
assemble_scaling_list(ctx);
|
assemble_scaling_list(ctx);
|
||||||
}
|
}
|
||||||
@@ -245,8 +295,7 @@ static void prepare_table(struct hantro_ctx *ctx)
|
@@ -258,8 +295,7 @@ static void prepare_table(struct hantro_ctx *ctx)
|
||||||
static bool dpb_entry_match(const struct v4l2_h264_dpb_entry *a,
|
static bool dpb_entry_match(const struct v4l2_h264_dpb_entry *a,
|
||||||
const struct v4l2_h264_dpb_entry *b)
|
const struct v4l2_h264_dpb_entry *b)
|
||||||
{
|
{
|
||||||
@ -370,7 +347,7 @@ index b1bdc00ac262..bc2af450a94c 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void update_dpb(struct hantro_ctx *ctx)
|
static void update_dpb(struct hantro_ctx *ctx)
|
||||||
@@ -260,13 +309,13 @@ static void update_dpb(struct hantro_ctx *ctx)
|
@@ -273,13 +309,13 @@ static void update_dpb(struct hantro_ctx *ctx)
|
||||||
|
|
||||||
/* Disable all entries by default. */
|
/* Disable all entries by default. */
|
||||||
for (i = 0; i < ARRAY_SIZE(ctx->h264_dec.dpb); i++)
|
for (i = 0; i < ARRAY_SIZE(ctx->h264_dec.dpb); i++)
|
||||||
@ -386,7 +363,7 @@ index b1bdc00ac262..bc2af450a94c 100644
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -277,8 +326,7 @@ static void update_dpb(struct hantro_ctx *ctx)
|
@@ -290,8 +326,7 @@ static void update_dpb(struct hantro_ctx *ctx)
|
||||||
struct v4l2_h264_dpb_entry *cdpb;
|
struct v4l2_h264_dpb_entry *cdpb;
|
||||||
|
|
||||||
cdpb = &ctx->h264_dec.dpb[j];
|
cdpb = &ctx->h264_dec.dpb[j];
|
||||||
@ -396,7 +373,7 @@ index b1bdc00ac262..bc2af450a94c 100644
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
*cdpb = *ndpb;
|
*cdpb = *ndpb;
|
||||||
@@ -314,7 +362,10 @@ dma_addr_t hantro_h264_get_ref_buf(struct hantro_ctx *ctx,
|
@@ -327,7 +362,10 @@ dma_addr_t hantro_h264_get_ref_buf(struct hantro_ctx *ctx,
|
||||||
unsigned int dpb_idx)
|
unsigned int dpb_idx)
|
||||||
{
|
{
|
||||||
struct v4l2_h264_dpb_entry *dpb = ctx->h264_dec.dpb;
|
struct v4l2_h264_dpb_entry *dpb = ctx->h264_dec.dpb;
|
||||||
@ -407,7 +384,7 @@ index b1bdc00ac262..bc2af450a94c 100644
|
|||||||
|
|
||||||
if (dpb[dpb_idx].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE)
|
if (dpb[dpb_idx].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE)
|
||||||
dma_addr = hantro_get_ref(ctx, dpb[dpb_idx].reference_ts);
|
dma_addr = hantro_get_ref(ctx, dpb[dpb_idx].reference_ts);
|
||||||
@@ -332,7 +383,15 @@ dma_addr_t hantro_h264_get_ref_buf(struct hantro_ctx *ctx,
|
@@ -345,7 +383,16 @@ dma_addr_t hantro_h264_get_ref_buf(struct hantro_ctx *ctx,
|
||||||
dma_addr = hantro_get_dec_buf_addr(ctx, buf);
|
dma_addr = hantro_get_dec_buf_addr(ctx, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -421,22 +398,10 @@ index b1bdc00ac262..bc2af450a94c 100644
|
|||||||
+ 0x1 : 0;
|
+ 0x1 : 0;
|
||||||
+
|
+
|
||||||
+ return dma_addr | flags;
|
+ return dma_addr | flags;
|
||||||
|
+
|
||||||
}
|
}
|
||||||
|
|
||||||
int hantro_h264_dec_prepare_run(struct hantro_ctx *ctx)
|
u16 hantro_h264_get_ref_nbr(struct hantro_ctx *ctx, unsigned int dpb_idx)
|
||||||
diff --git a/drivers/staging/media/hantro/hantro_hw.h b/drivers/staging/media/hantro/hantro_hw.h
|
|
||||||
index 219283a06f52..7e35140a4f22 100644
|
|
||||||
--- a/drivers/staging/media/hantro/hantro_hw.h
|
|
||||||
+++ b/drivers/staging/media/hantro/hantro_hw.h
|
|
||||||
@@ -90,6 +90,8 @@ struct hantro_h264_dec_hw_ctx {
|
|
||||||
struct v4l2_h264_dpb_entry dpb[HANTRO_H264_DPB_SIZE];
|
|
||||||
struct hantro_h264_dec_reflists reflists;
|
|
||||||
struct hantro_h264_dec_ctrls ctrls;
|
|
||||||
+ u32 dpb_longterm;
|
|
||||||
+ u32 dpb_valid;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
@ -449,7 +414,7 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/hantro/hantro_h264.c b/drivers/staging/media/hantro/hantro_h264.c
|
diff --git a/drivers/staging/media/hantro/hantro_h264.c b/drivers/staging/media/hantro/hantro_h264.c
|
||||||
index bc2af450a94c..7bdefcc2fc77 100644
|
index 7b56a68c176c..befa69d5c855 100644
|
||||||
--- a/drivers/staging/media/hantro/hantro_h264.c
|
--- a/drivers/staging/media/hantro/hantro_h264.c
|
||||||
+++ b/drivers/staging/media/hantro/hantro_h264.c
|
+++ b/drivers/staging/media/hantro/hantro_h264.c
|
||||||
@@ -241,10 +241,10 @@ static void prepare_table(struct hantro_ctx *ctx)
|
@@ -241,10 +241,10 @@ static void prepare_table(struct hantro_ctx *ctx)
|
||||||
@ -477,7 +442,7 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
index d4f27ef7addd..627cd4efabef 100644
|
index 9c3f08c94800..7238117b6cf4 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
|
||||||
@@ -783,10 +783,10 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
@@ -783,10 +783,10 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||||
@ -512,32 +477,6 @@ index d4f27ef7addd..627cd4efabef 100644
|
|||||||
set_ps_field(hw_rps, DPB_INFO(i, j),
|
set_ps_field(hw_rps, DPB_INFO(i, j),
|
||||||
idx | (1 << 4));
|
idx | (1 << 4));
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
|
||||||
Date: Sun, 31 May 2020 18:22:01 +0200
|
|
||||||
Subject: [PATCH] media: hantro: rk3288: increase max ACLK
|
|
||||||
|
|
||||||
as per vendor source
|
|
||||||
|
|
||||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|
||||||
---
|
|
||||||
drivers/staging/media/hantro/rk3288_vpu_hw.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/hantro/rk3288_vpu_hw.c b/drivers/staging/media/hantro/rk3288_vpu_hw.c
|
|
||||||
index 7b299ee3e93d..23f793e73941 100644
|
|
||||||
--- a/drivers/staging/media/hantro/rk3288_vpu_hw.c
|
|
||||||
+++ b/drivers/staging/media/hantro/rk3288_vpu_hw.c
|
|
||||||
@@ -13,7 +13,7 @@
|
|
||||||
#include "hantro_g1_regs.h"
|
|
||||||
#include "hantro_h1_regs.h"
|
|
||||||
|
|
||||||
-#define RK3288_ACLK_MAX_FREQ (400 * 1000 * 1000)
|
|
||||||
+#define RK3288_ACLK_MAX_FREQ (600 * 1000 * 1000)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Supported formats.
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Randy Li <ayaka@soulik.info>
|
From: Randy Li <ayaka@soulik.info>
|
||||||
Date: Sun, 6 Jan 2019 01:48:37 +0800
|
Date: Sun, 6 Jan 2019 01:48:37 +0800
|
||||||
@ -560,10 +499,10 @@ Signed-off-by: Randy Li <ayaka@soulik.info>
|
|||||||
create mode 100644 include/soc/rockchip/pm_domains.h
|
create mode 100644 include/soc/rockchip/pm_domains.h
|
||||||
|
|
||||||
diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c
|
diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c
|
||||||
index 54eb6cfc5d5b..727af107e6d3 100644
|
index 0868b7d406fb..fddb4022c376 100644
|
||||||
--- a/drivers/soc/rockchip/pm_domains.c
|
--- a/drivers/soc/rockchip/pm_domains.c
|
||||||
+++ b/drivers/soc/rockchip/pm_domains.c
|
+++ b/drivers/soc/rockchip/pm_domains.c
|
||||||
@@ -196,6 +196,29 @@ static int rockchip_pmu_set_idle_request(struct rockchip_pm_domain *pd,
|
@@ -204,6 +204,29 @@ static int rockchip_pmu_set_idle_request(struct rockchip_pm_domain *pd,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -652,10 +591,10 @@ Subject: [PATCH] WIP: media: rkvdec: implement reset controls
|
|||||||
4 files changed, 87 insertions(+), 1 deletion(-)
|
4 files changed, 87 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
diff --git a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||||
index 8d35c327018b..dfafdb671798 100644
|
index 089f11d21b25..3f4772c8d095 100644
|
||||||
--- a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
--- a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||||
+++ b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
+++ b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||||
@@ -43,6 +43,18 @@ properties:
|
@@ -51,6 +51,18 @@ properties:
|
||||||
iommus:
|
iommus:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
||||||
@ -674,7 +613,7 @@ index 8d35c327018b..dfafdb671798 100644
|
|||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
- reg
|
- reg
|
||||||
@@ -50,6 +62,8 @@ required:
|
@@ -58,6 +70,8 @@ required:
|
||||||
- clocks
|
- clocks
|
||||||
- clock-names
|
- clock-names
|
||||||
- power-domains
|
- power-domains
|
||||||
@ -683,7 +622,7 @@ index 8d35c327018b..dfafdb671798 100644
|
|||||||
|
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|
||||||
@@ -68,6 +82,11 @@ examples:
|
@@ -76,6 +90,11 @@ examples:
|
||||||
clock-names = "axi", "ahb", "cabac", "core";
|
clock-names = "axi", "ahb", "cabac", "core";
|
||||||
power-domains = <&power RK3399_PD_VDU>;
|
power-domains = <&power RK3399_PD_VDU>;
|
||||||
iommus = <&vdec_mmu>;
|
iommus = <&vdec_mmu>;
|
||||||
@ -712,7 +651,7 @@ index 15b9bee92016..3acc914888f6 100644
|
|||||||
#define RKVDEC_REG_SYSCTRL 0x008
|
#define RKVDEC_REG_SYSCTRL 0x008
|
||||||
#define RKVDEC_IN_ENDIAN BIT(0)
|
#define RKVDEC_IN_ENDIAN BIT(0)
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index 51e257a0233d..c05ba31ed656 100644
|
index ad5e02bbd8d0..6abce36eee7f 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -10,12 +10,15 @@
|
@@ -10,12 +10,15 @@
|
||||||
@ -731,7 +670,7 @@ index 51e257a0233d..c05ba31ed656 100644
|
|||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
@@ -725,6 +728,11 @@ static void rkvdec_job_finish(struct rkvdec_ctx *ctx,
|
@@ -687,6 +690,11 @@ static void rkvdec_job_finish(struct rkvdec_ctx *ctx,
|
||||||
|
|
||||||
pm_runtime_mark_last_busy(rkvdec->dev);
|
pm_runtime_mark_last_busy(rkvdec->dev);
|
||||||
pm_runtime_put_autosuspend(rkvdec->dev);
|
pm_runtime_put_autosuspend(rkvdec->dev);
|
||||||
@ -743,7 +682,7 @@ index 51e257a0233d..c05ba31ed656 100644
|
|||||||
rkvdec_job_finish_no_pm(ctx, result);
|
rkvdec_job_finish_no_pm(ctx, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -762,6 +770,33 @@ static void rkvdec_device_run(void *priv)
|
@@ -724,6 +732,33 @@ static void rkvdec_device_run(void *priv)
|
||||||
|
|
||||||
if (WARN_ON(!desc))
|
if (WARN_ON(!desc))
|
||||||
return;
|
return;
|
||||||
@ -775,9 +714,9 @@ index 51e257a0233d..c05ba31ed656 100644
|
|||||||
+ pm_runtime_suspend(rkvdec->dev);
|
+ pm_runtime_suspend(rkvdec->dev);
|
||||||
+ }
|
+ }
|
||||||
|
|
||||||
ret = pm_runtime_get_sync(rkvdec->dev);
|
ret = pm_runtime_resume_and_get(rkvdec->dev);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
@@ -1029,6 +1064,11 @@ static irqreturn_t rkvdec_irq_handler(int irq, void *priv)
|
@@ -991,6 +1026,11 @@ static irqreturn_t rkvdec_irq_handler(int irq, void *priv)
|
||||||
if (cancel_delayed_work(&rkvdec->watchdog_work)) {
|
if (cancel_delayed_work(&rkvdec->watchdog_work)) {
|
||||||
struct rkvdec_ctx *ctx;
|
struct rkvdec_ctx *ctx;
|
||||||
|
|
||||||
@ -789,7 +728,7 @@ index 51e257a0233d..c05ba31ed656 100644
|
|||||||
ctx = v4l2_m2m_get_curr_priv(rkvdec->m2m_dev);
|
ctx = v4l2_m2m_get_curr_priv(rkvdec->m2m_dev);
|
||||||
rkvdec_job_finish(ctx, state);
|
rkvdec_job_finish(ctx, state);
|
||||||
}
|
}
|
||||||
@@ -1046,6 +1086,7 @@ static void rkvdec_watchdog_func(struct work_struct *work)
|
@@ -1008,6 +1048,7 @@ static void rkvdec_watchdog_func(struct work_struct *work)
|
||||||
ctx = v4l2_m2m_get_curr_priv(rkvdec->m2m_dev);
|
ctx = v4l2_m2m_get_curr_priv(rkvdec->m2m_dev);
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
dev_err(rkvdec->dev, "Frame processing timed out!\n");
|
dev_err(rkvdec->dev, "Frame processing timed out!\n");
|
||||||
@ -797,7 +736,7 @@ index 51e257a0233d..c05ba31ed656 100644
|
|||||||
writel(RKVDEC_CONFIG_DEC_CLK_GATE_E | RKVDEC_IRQ_DIS,
|
writel(RKVDEC_CONFIG_DEC_CLK_GATE_E | RKVDEC_IRQ_DIS,
|
||||||
rkvdec->regs + RKVDEC_REG_INTERRUPT);
|
rkvdec->regs + RKVDEC_REG_INTERRUPT);
|
||||||
writel(0, rkvdec->regs + RKVDEC_REG_SYSCTRL);
|
writel(0, rkvdec->regs + RKVDEC_REG_SYSCTRL);
|
||||||
@@ -1125,6 +1166,18 @@ static int rkvdec_probe(struct platform_device *pdev)
|
@@ -1085,6 +1126,18 @@ static int rkvdec_probe(struct platform_device *pdev)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -817,7 +756,7 @@ index 51e257a0233d..c05ba31ed656 100644
|
|||||||
pm_runtime_use_autosuspend(&pdev->dev);
|
pm_runtime_use_autosuspend(&pdev->dev);
|
||||||
pm_runtime_enable(&pdev->dev);
|
pm_runtime_enable(&pdev->dev);
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
index e95c52e3168a..c14cd2571bfc 100644
|
index 7b6f44ee8a1a..fa24bcb6ff42 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
@@ -11,10 +11,11 @@
|
@@ -11,10 +11,11 @@
|
||||||
@ -846,7 +785,7 @@ index e95c52e3168a..c14cd2571bfc 100644
|
|||||||
struct rkvdec_ctx;
|
struct rkvdec_ctx;
|
||||||
|
|
||||||
struct rkvdec_ctrl_desc {
|
struct rkvdec_ctrl_desc {
|
||||||
@@ -91,6 +98,8 @@ struct rkvdec_dev {
|
@@ -90,6 +97,8 @@ struct rkvdec_dev {
|
||||||
void __iomem *regs;
|
void __iomem *regs;
|
||||||
struct mutex vdev_lock; /* serializes ioctls */
|
struct mutex vdev_lock; /* serializes ioctls */
|
||||||
struct delayed_work watchdog_work;
|
struct delayed_work watchdog_work;
|
||||||
@ -866,11 +805,11 @@ Subject: [PATCH] WIP: arm64: dts: add resets to vdec for RK3399
|
|||||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
index ea1ef6c7455a..92e3f6da0297 100644
|
index 52a748053a97..2c7b263a82cd 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
@@ -1022,7 +1022,10 @@ pd_vcodec@RK3399_PD_VCODEC {
|
@@ -993,7 +993,10 @@ power-domain@RK3399_PD_VCODEC {
|
||||||
pd_vdu@RK3399_PD_VDU {
|
power-domain@RK3399_PD_VDU {
|
||||||
reg = <RK3399_PD_VDU>;
|
reg = <RK3399_PD_VDU>;
|
||||||
clocks = <&cru ACLK_VDU>,
|
clocks = <&cru ACLK_VDU>,
|
||||||
- <&cru HCLK_VDU>;
|
- <&cru HCLK_VDU>;
|
||||||
@ -880,8 +819,8 @@ index ea1ef6c7455a..92e3f6da0297 100644
|
|||||||
+
|
+
|
||||||
pm_qos = <&qos_video_m1_r>,
|
pm_qos = <&qos_video_m1_r>,
|
||||||
<&qos_video_m1_w>;
|
<&qos_video_m1_w>;
|
||||||
};
|
#power-domain-cells = <0>;
|
||||||
@@ -1283,6 +1286,11 @@ vdec: video-codec@ff660000 {
|
@@ -1266,6 +1269,11 @@ vdec: video-codec@ff660000 {
|
||||||
clock-names = "axi", "ahb", "cabac", "core";
|
clock-names = "axi", "ahb", "cabac", "core";
|
||||||
iommus = <&vdec_mmu>;
|
iommus = <&vdec_mmu>;
|
||||||
power-domains = <&power RK3399_PD_VDU>;
|
power-domains = <&power RK3399_PD_VDU>;
|
||||||
@ -905,10 +844,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
index 92e3f6da0297..03c6737ca0ea 100644
|
index 2c7b263a82cd..ec3561d147d5 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
@@ -1279,7 +1279,7 @@ vpu_mmu: iommu@ff650800 {
|
@@ -1262,7 +1262,7 @@ vpu_mmu: iommu@ff650800 {
|
||||||
|
|
||||||
vdec: video-codec@ff660000 {
|
vdec: video-codec@ff660000 {
|
||||||
compatible = "rockchip,rk3399-vdec";
|
compatible = "rockchip,rk3399-vdec";
|
||||||
@ -925,42 +864,40 @@ Subject: [PATCH] arm64: dts: rockchip: add rkvdec node for RK3328
|
|||||||
|
|
||||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
---
|
---
|
||||||
.../bindings/media/rockchip,vdec.yaml | 5 ++++
|
.../bindings/media/rockchip,vdec.yaml | 3 +++
|
||||||
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 26 ++++++++++++++++++-
|
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 25 ++++++++++++++++++-
|
||||||
2 files changed, 30 insertions(+), 1 deletion(-)
|
2 files changed, 27 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
diff --git a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||||
index dfafdb671798..360b750e5514 100644
|
index 3f4772c8d095..21a78372dae6 100644
|
||||||
--- a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
--- a/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||||
+++ b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
+++ b/Documentation/devicetree/bindings/media/rockchip,vdec.yaml
|
||||||
@@ -16,6 +16,11 @@ description: |-
|
@@ -20,6 +20,9 @@ properties:
|
||||||
properties:
|
- items:
|
||||||
compatible:
|
- const: rockchip,rk3228-vdec
|
||||||
const: rockchip,rk3399-vdec
|
- const: rockchip,rk3399-vdec
|
||||||
+ - items:
|
+ - items:
|
||||||
+ - enum:
|
+ - const: rockchip,rk3328-vdec
|
||||||
+ - rockchip,rk3328-vdec
|
+ - const: rockchip,rk3399-vdec
|
||||||
+ - const: rockchip,rk3399-vdec
|
|
||||||
+
|
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
index 31c48c38c955..bd0ec27cf49b 100644
|
index 9c10b6e3b9bc..23021373e15b 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
@@ -326,6 +326,10 @@ pd_hevc@RK3328_PD_HEVC {
|
@@ -306,6 +306,10 @@ power-domain@RK3328_PD_HEVC {
|
||||||
};
|
};
|
||||||
pd_video@RK3328_PD_VIDEO {
|
power-domain@RK3328_PD_VIDEO {
|
||||||
reg = <RK3328_PD_VIDEO>;
|
reg = <RK3328_PD_VIDEO>;
|
||||||
+ clocks = <&cru ACLK_RKVDEC>,
|
+ clocks = <&cru ACLK_RKVDEC>,
|
||||||
+ <&cru HCLK_RKVDEC>,
|
+ <&cru HCLK_RKVDEC>,
|
||||||
+ <&cru SCLK_VDEC_CABAC>,
|
+ <&cru SCLK_VDEC_CABAC>,
|
||||||
+ <&cru SCLK_VDEC_CORE>;
|
+ <&cru SCLK_VDEC_CORE>;
|
||||||
|
#power-domain-cells = <0>;
|
||||||
};
|
};
|
||||||
pd_vpu@RK3328_PD_VPU {
|
power-domain@RK3328_PD_VPU {
|
||||||
reg = <RK3328_PD_VPU>;
|
@@ -660,6 +664,25 @@ vpu_mmu: iommu@ff350800 {
|
||||||
@@ -670,6 +674,26 @@ vpu_mmu: iommu@ff350800 {
|
|
||||||
power-domains = <&power RK3328_PD_VPU>;
|
power-domains = <&power RK3328_PD_VPU>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -968,7 +905,6 @@ index 31c48c38c955..bd0ec27cf49b 100644
|
|||||||
+ compatible = "rockchip,rk3328-vdec", "rockchip,rk3399-vdec";
|
+ compatible = "rockchip,rk3328-vdec", "rockchip,rk3399-vdec";
|
||||||
+ reg = <0x0 0xff360000 0x0 0x480>;
|
+ reg = <0x0 0xff360000 0x0 0x480>;
|
||||||
+ interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
|
+ interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
+ interrupt-names = "vdpu";
|
|
||||||
+ assigned-clocks = <&cru ACLK_RKVDEC>, <&cru SCLK_VDEC_CABAC>,
|
+ assigned-clocks = <&cru ACLK_RKVDEC>, <&cru SCLK_VDEC_CABAC>,
|
||||||
+ <&cru SCLK_VDEC_CORE>;
|
+ <&cru SCLK_VDEC_CORE>;
|
||||||
+ assigned-clock-rates = <400000000>, <400000000>, <300000000>;
|
+ assigned-clock-rates = <400000000>, <400000000>, <300000000>;
|
||||||
@ -987,7 +923,7 @@ index 31c48c38c955..bd0ec27cf49b 100644
|
|||||||
rkvdec_mmu: iommu@ff360480 {
|
rkvdec_mmu: iommu@ff360480 {
|
||||||
compatible = "rockchip,iommu";
|
compatible = "rockchip,iommu";
|
||||||
reg = <0x0 0xff360480 0x0 0x40>, <0x0 0xff3604c0 0x0 0x40>;
|
reg = <0x0 0xff360480 0x0 0x40>, <0x0 0xff3604c0 0x0 0x40>;
|
||||||
@@ -678,7 +702,7 @@ rkvdec_mmu: iommu@ff360480 {
|
@@ -667,7 +690,7 @@ rkvdec_mmu: iommu@ff360480 {
|
||||||
clocks = <&cru ACLK_RKVDEC>, <&cru HCLK_RKVDEC>;
|
clocks = <&cru ACLK_RKVDEC>, <&cru HCLK_RKVDEC>;
|
||||||
clock-names = "aclk", "iface";
|
clock-names = "aclk", "iface";
|
||||||
#iommu-cells = <0>;
|
#iommu-cells = <0>;
|
||||||
@ -1008,10 +944,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index c05ba31ed656..4111155d62f4 100644
|
index 6abce36eee7f..fbaf0303f7c2 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -1134,10 +1134,12 @@ static int rkvdec_probe(struct platform_device *pdev)
|
@@ -1096,10 +1096,12 @@ static int rkvdec_probe(struct platform_device *pdev)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1027,3 +963,61 @@ index c05ba31ed656..4111155d62f4 100644
|
|||||||
|
|
||||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
rkvdec->regs = devm_ioremap_resource(&pdev->dev, res);
|
rkvdec->regs = devm_ioremap_resource(&pdev->dev, res);
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
|
Date: Sat, 21 Aug 2021 16:12:36 +0200
|
||||||
|
Subject: [PATCH] media: hantro: rockchip: Increase RK3288's max ACLK
|
||||||
|
|
||||||
|
Required to proper decode H.264@4K
|
||||||
|
|
||||||
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
|
---
|
||||||
|
drivers/staging/media/hantro/rockchip_vpu_hw.c | 14 +++++++++++---
|
||||||
|
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/staging/media/hantro/rockchip_vpu_hw.c b/drivers/staging/media/hantro/rockchip_vpu_hw.c
|
||||||
|
index d4f52957cc53..3d98e2251ea5 100644
|
||||||
|
--- a/drivers/staging/media/hantro/rockchip_vpu_hw.c
|
||||||
|
+++ b/drivers/staging/media/hantro/rockchip_vpu_hw.c
|
||||||
|
@@ -15,7 +15,8 @@
|
||||||
|
#include "rockchip_vpu2_regs.h"
|
||||||
|
|
||||||
|
#define RK3066_ACLK_MAX_FREQ (300 * 1000 * 1000)
|
||||||
|
-#define RK3288_ACLK_MAX_FREQ (400 * 1000 * 1000)
|
||||||
|
+#define RK3288_ACLK_MAX_FREQ (600 * 1000 * 1000)
|
||||||
|
+#define RK3399_ACLK_MAX_FREQ (400 * 1000 * 1000)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Supported formats.
|
||||||
|
@@ -272,13 +273,20 @@ static int rk3066_vpu_hw_init(struct hantro_dev *vpu)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int rockchip_vpu_hw_init(struct hantro_dev *vpu)
|
||||||
|
+static int rk3288_vpu_hw_init(struct hantro_dev *vpu)
|
||||||
|
{
|
||||||
|
/* Bump ACLK to max. possible freq. to improve performance. */
|
||||||
|
clk_set_rate(vpu->clocks[0].clk, RK3288_ACLK_MAX_FREQ);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int rockchip_vpu_hw_init(struct hantro_dev *vpu)
|
||||||
|
+{
|
||||||
|
+ /* Bump ACLK to max. possible freq. to improve performance. */
|
||||||
|
+ clk_set_rate(vpu->clocks[0].clk, RK3399_ACLK_MAX_FREQ);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void rk3066_vpu_dec_reset(struct hantro_ctx *ctx)
|
||||||
|
{
|
||||||
|
struct hantro_dev *vpu = ctx->dev;
|
||||||
|
@@ -511,7 +519,7 @@ const struct hantro_variant rk3288_vpu_variant = {
|
||||||
|
.codec_ops = rk3288_vpu_codec_ops,
|
||||||
|
.irqs = rockchip_vpu1_irqs,
|
||||||
|
.num_irqs = ARRAY_SIZE(rockchip_vpu1_irqs),
|
||||||
|
- .init = rockchip_vpu_hw_init,
|
||||||
|
+ .init = rk3288_vpu_hw_init,
|
||||||
|
.clk_names = rockchip_vpu_clk_names,
|
||||||
|
.num_clocks = ARRAY_SIZE(rockchip_vpu_clk_names)
|
||||||
|
};
|
@ -10,25 +10,26 @@ other SoC components, we have to make sure voltage is never lower then
|
|||||||
|
|
||||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
---
|
---
|
||||||
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 33 ++++++++++++++++++++++++
|
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 34 ++++++++++++++++++++++++
|
||||||
1 file changed, 33 insertions(+)
|
1 file changed, 34 insertions(+)
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
index bd0ec27cf49b..21e32ddb21a0 100644
|
index 23021373e15b..ca03c8ed9708 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
@@ -321,6 +321,10 @@ power: power-controller {
|
@@ -300,6 +300,11 @@ power: power-controller {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
+ power-domain@RK3328_PD_GPU {
|
+ power-domain@RK3328_PD_GPU {
|
||||||
+ reg = <RK3328_PD_GPU>;
|
+ reg = <RK3328_PD_GPU>;
|
||||||
+ clocks = <&cru ACLK_GPU>;
|
+ clocks = <&cru ACLK_GPU>;
|
||||||
|
+ #power-domain-cells = <0>;
|
||||||
+ };
|
+ };
|
||||||
power-domain@RK3328_PD_HEVC {
|
power-domain@RK3328_PD_HEVC {
|
||||||
reg = <RK3328_PD_HEVC>;
|
reg = <RK3328_PD_HEVC>;
|
||||||
};
|
#power-domain-cells = <0>;
|
||||||
@@ -546,6 +550,11 @@ map0 {
|
@@ -539,6 +544,11 @@ map0 {
|
||||||
<&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
|
<&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
|
||||||
contribution = <4096>;
|
contribution = <4096>;
|
||||||
};
|
};
|
||||||
@ -40,7 +41,7 @@ index bd0ec27cf49b..21e32ddb21a0 100644
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -627,7 +636,31 @@ gpu: gpu@ff300000 {
|
@@ -620,7 +630,31 @@ gpu: gpu@ff300000 {
|
||||||
"ppmmu1";
|
"ppmmu1";
|
||||||
clocks = <&cru ACLK_GPU>, <&cru ACLK_GPU>;
|
clocks = <&cru ACLK_GPU>, <&cru ACLK_GPU>;
|
||||||
clock-names = "bus", "core";
|
clock-names = "bus", "core";
|
||||||
@ -73,42 +74,6 @@ index bd0ec27cf49b..21e32ddb21a0 100644
|
|||||||
|
|
||||||
h265e_mmu: iommu@ff330200 {
|
h265e_mmu: iommu@ff330200 {
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
|
||||||
Date: Mon, 10 Feb 2020 19:22:41 +0100
|
|
||||||
Subject: [PATCH] arm64: dts: rockchip: add sdmmc ext node for RK3328
|
|
||||||
|
|
||||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|
||||||
---
|
|
||||||
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 14 ++++++++++++++
|
|
||||||
1 file changed, 14 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
|
||||||
index 21e32ddb21a0..18d663aacd07 100644
|
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
|
||||||
@@ -1109,6 +1109,20 @@ usbdrd_dwc3: dwc3@ff600000 {
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
+ sdmmc_ext: dwmmc@ff5f0000 {
|
|
||||||
+ compatible = "rockchip,rk3328-dw-mshc", "rockchip,rk3288-dw-mshc";
|
|
||||||
+ reg = <0x0 0xff5f0000 0x0 0x4000>;
|
|
||||||
+ interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
+ clocks = <&cru HCLK_SDMMC_EXT>, <&cru SCLK_SDMMC_EXT>,
|
|
||||||
+ <&cru SCLK_SDMMC_EXT_DRV>, <&cru SCLK_SDMMC_EXT_SAMPLE>;
|
|
||||||
+ clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
|
|
||||||
+ fifo-depth = <0x100>;
|
|
||||||
+ max-frequency = <150000000>;
|
|
||||||
+ resets = <&cru SRST_SDMMCEXT>;
|
|
||||||
+ reset-names = "reset";
|
|
||||||
+ status = "disabled";
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
gic: interrupt-controller@ff811000 {
|
|
||||||
compatible = "arm,gic-400";
|
|
||||||
#interrupt-cells = <3>;
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Tue, 2 Feb 2021 17:22:21 +0200
|
Date: Tue, 2 Feb 2021 17:22:21 +0200
|
||||||
@ -183,10 +148,10 @@ index 9c1e38c54eae..ee332fc9cf1f 100644
|
|||||||
|
|
||||||
simple-audio-card,codec {
|
simple-audio-card,codec {
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
index 03c6737ca0ea..9c2ac03c154b 100644
|
index ec3561d147d5..b2ed593a229c 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
@@ -1782,7 +1782,7 @@ hdmi_sound: hdmi-sound {
|
@@ -1807,7 +1807,7 @@ hdmi_sound: hdmi-sound {
|
||||||
compatible = "simple-audio-card";
|
compatible = "simple-audio-card";
|
||||||
simple-audio-card,format = "i2s";
|
simple-audio-card,format = "i2s";
|
||||||
simple-audio-card,mclk-fs = <256>;
|
simple-audio-card,mclk-fs = <256>;
|
||||||
@ -207,10 +172,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
|
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
|
||||||
index 69c2c079d803..65fbffc4cbc7 100644
|
index d62fb1a3c916..e46165bed006 100644
|
||||||
--- a/drivers/gpu/drm/drm_gem.c
|
--- a/drivers/gpu/drm/drm_gem.c
|
||||||
+++ b/drivers/gpu/drm/drm_gem.c
|
+++ b/drivers/gpu/drm/drm_gem.c
|
||||||
@@ -1093,7 +1093,7 @@ int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size,
|
@@ -1073,7 +1073,7 @@ int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size,
|
||||||
ret = obj->funcs->mmap(obj, vma);
|
ret = obj->funcs->mmap(obj, vma);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_drm_gem_object_put;
|
goto err_drm_gem_object_put;
|
||||||
@ -219,6 +184,7 @@ index 69c2c079d803..65fbffc4cbc7 100644
|
|||||||
} else {
|
} else {
|
||||||
if (!vma->vm_ops) {
|
if (!vma->vm_ops) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Jonas Karlman <jonas@kwiboo.se>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
Date: Sun, 25 Mar 2018 22:17:06 +0200
|
Date: Sun, 25 Mar 2018 22:17:06 +0200
|
||||||
@ -229,10 +195,10 @@ Subject: [PATCH] ASoC: hdmi-codec: fix channel allocation
|
|||||||
1 file changed, 52 insertions(+), 61 deletions(-)
|
1 file changed, 52 insertions(+), 61 deletions(-)
|
||||||
|
|
||||||
diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
|
diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
|
||||||
index 403d4c6a49a8..7505c3eee4c1 100644
|
index b61f980cabdc..3ad50ae8c93d 100644
|
||||||
--- a/sound/soc/codecs/hdmi-codec.c
|
--- a/sound/soc/codecs/hdmi-codec.c
|
||||||
+++ b/sound/soc/codecs/hdmi-codec.c
|
+++ b/sound/soc/codecs/hdmi-codec.c
|
||||||
@@ -195,78 +195,69 @@ static const struct snd_pcm_chmap_elem hdmi_codec_8ch_chmaps[] = {
|
@@ -194,78 +194,69 @@ static const struct snd_pcm_chmap_elem hdmi_codec_8ch_chmaps[] = {
|
||||||
*/
|
*/
|
||||||
static const struct hdmi_codec_cea_spk_alloc hdmi_codec_channel_alloc[] = {
|
static const struct hdmi_codec_cea_spk_alloc hdmi_codec_channel_alloc[] = {
|
||||||
{ .ca_id = 0x00, .n_ch = 2,
|
{ .ca_id = 0x00, .n_ch = 2,
|
||||||
@ -364,63 +330,6 @@ index 403d4c6a49a8..7505c3eee4c1 100644
|
|||||||
|
|
||||||
struct hdmi_codec_priv {
|
struct hdmi_codec_priv {
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
|
||||||
Date: Sat, 27 Feb 2021 17:41:48 +0100
|
|
||||||
Subject: [PATCH] arm64: dts: rockchip: fix GPU register width and supplies for
|
|
||||||
RK3328
|
|
||||||
|
|
||||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|
||||||
---
|
|
||||||
arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 4 ++++
|
|
||||||
arch/arm64/boot/dts/rockchip/rk3328-rock64.dts | 4 ++++
|
|
||||||
arch/arm64/boot/dts/rockchip/rk3328.dtsi | 2 +-
|
|
||||||
3 files changed, 9 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
|
||||||
index 3ac876c08d61..8607514437f5 100644
|
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
|
||||||
@@ -161,6 +161,10 @@ &gmac2io {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
+&gpu {
|
|
||||||
+ mali-supply = <&vdd_logic>;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
&hdmi {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts
|
|
||||||
index 89fde87f7650..bd62349a9390 100644
|
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts
|
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts
|
|
||||||
@@ -157,6 +157,10 @@ &gmac2io {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
+&gpu {
|
|
||||||
+ mali-supply = <&vdd_logic>;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
&hdmi {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
|
||||||
index 18d663aacd07..0e5e492db9c7 100644
|
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
|
||||||
@@ -619,7 +619,7 @@ saradc: adc@ff280000 {
|
|
||||||
|
|
||||||
gpu: gpu@ff300000 {
|
|
||||||
compatible = "rockchip,rk3328-mali", "arm,mali-450";
|
|
||||||
- reg = <0x0 0xff300000 0x0 0x40000>;
|
|
||||||
+ reg = <0x0 0xff300000 0x0 0x30000>;
|
|
||||||
interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
<GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>,
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Sun, 2 May 2021 20:44:21 +0200
|
Date: Sun, 2 May 2021 20:44:21 +0200
|
||||||
@ -434,10 +343,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi
|
||||||
index 58097245994a..c7c515c6c5cb 100644
|
index 83db4ca67334..06d2a1e3e340 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi
|
--- a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi
|
+++ b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi
|
||||||
@@ -247,8 +247,8 @@ &gmac {
|
@@ -289,8 +289,8 @@ &gmac {
|
||||||
snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
|
snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
|
||||||
snps,reset-active-low;
|
snps,reset-active-low;
|
||||||
snps,reset-delays-us = <0 10000 50000>;
|
snps,reset-delays-us = <0 10000 50000>;
|
||||||
@ -452,20 +361,18 @@ index 58097245994a..c7c515c6c5cb 100644
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Sat, 27 Feb 2021 17:52:02 +0100
|
Date: Sat, 27 Feb 2021 17:52:02 +0100
|
||||||
Subject: [PATCH] arm64: dts: rockchip: add SPDIF nodes for RK3328 A1/ROC CC
|
Subject: [PATCH] arm64: dts: rockchip: add SPDIF nodes for RK3328 A1 board
|
||||||
boards
|
|
||||||
|
|
||||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
---
|
---
|
||||||
arch/arm64/boot/dts/rockchip/rk3328-a1.dts | 23 +++++++++++++++++++
|
arch/arm64/boot/dts/rockchip/rk3328-a1.dts | 23 ++++++++++++++++++++++
|
||||||
.../arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 23 +++++++++++++++++++
|
1 file changed, 23 insertions(+)
|
||||||
2 files changed, 46 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328-a1.dts b/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3328-a1.dts b/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
||||||
index 4013f16bb368..1bb3f4a6e496 100644
|
index de2d3e88e27f..68b74ed080f3 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
--- a/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
+++ b/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
||||||
@@ -52,6 +52,24 @@ ir-receiver {
|
@@ -57,6 +57,24 @@ ir-receiver {
|
||||||
gpios = <&gpio2 RK_PA2 GPIO_ACTIVE_LOW>;
|
gpios = <&gpio2 RK_PA2 GPIO_ACTIVE_LOW>;
|
||||||
linux,rc-map-name = "rc-beelink-gs1";
|
linux,rc-map-name = "rc-beelink-gs1";
|
||||||
};
|
};
|
||||||
@ -490,7 +397,7 @@ index 4013f16bb368..1bb3f4a6e496 100644
|
|||||||
};
|
};
|
||||||
|
|
||||||
&analog_sound {
|
&analog_sound {
|
||||||
@@ -319,6 +337,11 @@ &sdmmc {
|
@@ -324,6 +342,11 @@ &sdmmc {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -502,47 +409,6 @@ index 4013f16bb368..1bb3f4a6e496 100644
|
|||||||
&tsadc {
|
&tsadc {
|
||||||
rockchip,hw-tshut-mode = <0>;
|
rockchip,hw-tshut-mode = <0>;
|
||||||
rockchip,hw-tshut-polarity = <0>;
|
rockchip,hw-tshut-polarity = <0>;
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
|
||||||
index 8607514437f5..6ca08854aef3 100644
|
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
|
||||||
@@ -102,6 +102,24 @@ user_led: led-1 {
|
|
||||||
mode = <0x05>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
+
|
|
||||||
+ spdif_sound: spdif-sound {
|
|
||||||
+ compatible = "simple-audio-card";
|
|
||||||
+ simple-audio-card,name = "SPDIF";
|
|
||||||
+
|
|
||||||
+ simple-audio-card,cpu {
|
|
||||||
+ sound-dai = <&spdif>;
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ simple-audio-card,codec {
|
|
||||||
+ sound-dai = <&spdif_dit>;
|
|
||||||
+ };
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ spdif_dit: spdif-dit {
|
|
||||||
+ compatible = "linux,spdif-dit";
|
|
||||||
+ #sound-dai-cells = <0>;
|
|
||||||
+ };
|
|
||||||
};
|
|
||||||
|
|
||||||
&analog_sound {
|
|
||||||
@@ -337,6 +355,11 @@ &sdmmc {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
+&spdif {
|
|
||||||
+ pinctrl-0 = <&spdifm0_tx>;
|
|
||||||
+ status = "okay";
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
&tsadc {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
@ -555,10 +421,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 14 insertions(+)
|
1 file changed, 14 insertions(+)
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
||||||
index 6ca08854aef3..fb21ad1324bc 100644
|
index aa22a0c22265..a78fbddd21df 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
--- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
+++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
|
||||||
@@ -83,6 +83,13 @@ vcc_phy: vcc-phy-regulator {
|
@@ -88,6 +88,13 @@ vcc_phy: vcc-phy-regulator {
|
||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -572,7 +438,7 @@ index 6ca08854aef3..fb21ad1324bc 100644
|
|||||||
leds {
|
leds {
|
||||||
compatible = "gpio-leds";
|
compatible = "gpio-leds";
|
||||||
|
|
||||||
@@ -325,6 +332,13 @@ &io_domains {
|
@@ -308,6 +315,13 @@ &io_domains {
|
||||||
};
|
};
|
||||||
|
|
||||||
&pinctrl {
|
&pinctrl {
|
||||||
@ -620,10 +486,10 @@ Subject: [PATCH] HACK: arm64: dts: enable FE phy for Beelink A1 also
|
|||||||
1 file changed, 8 insertions(+)
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328-a1.dts b/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3328-a1.dts b/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
||||||
index 1bb3f4a6e496..99f28dac0791 100644
|
index 68b74ed080f3..6736b5dc53e4 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
--- a/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
+++ b/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
||||||
@@ -142,6 +142,14 @@ rtl8211f: ethernet-phy@0 {
|
@@ -147,6 +147,14 @@ rtl8211f: ethernet-phy@0 {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -713,10 +579,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
index 9c2ac03c154b..b1c7ee80d255 100644
|
index b2ed593a229c..27938ff0d208 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
@@ -1390,7 +1390,7 @@ cru: clock-controller@ff760000 {
|
@@ -1393,7 +1393,7 @@ cru: clock-controller@ff760000 {
|
||||||
<1000000000>,
|
<1000000000>,
|
||||||
<150000000>, <75000000>,
|
<150000000>, <75000000>,
|
||||||
<37500000>,
|
<37500000>,
|
||||||
@ -728,157 +594,52 @@ index 9c2ac03c154b..b1c7ee80d255 100644
|
|||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Wed, 5 May 2021 22:09:44 +0200
|
Date: Sat, 21 Aug 2021 17:04:46 +0200
|
||||||
Subject: [PATCH] arm64: dts: rockchip: limit emmc clockrate to 150 MHz for
|
Subject: [PATCH] arm64: dts: rockchip: Enable USB3 for rk3328 Beelink A1
|
||||||
Rock Pi4 board
|
|
||||||
|
|
||||||
as per https://github.com/radxa/kernel/commit/db9dfc2cdd25103c553845d24967e4cb31852b61
|
|
||||||
|
|
||||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
---
|
---
|
||||||
arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi | 1 +
|
arch/arm64/boot/dts/rockchip/rk3328-a1.dts | 5 +++++
|
||||||
1 file changed, 1 insertion(+)
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3328-a1.dts b/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
||||||
index fb7599f07af4..155f22b53103 100644
|
index 6736b5dc53e4..9000fae2a5ee 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi
|
--- a/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi
|
+++ b/arch/arm64/boot/dts/rockchip/rk3328-a1.dts
|
||||||
@@ -593,6 +593,7 @@ &sdmmc {
|
@@ -388,6 +388,11 @@ &usb_host0_ehci {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
&sdhci {
|
+&usbdrd3 {
|
||||||
bus-width = <8>;
|
+ dr_mode = "host";
|
||||||
+ max-frequency = <150000000>;
|
+ status = "okay";
|
||||||
mmc-hs400-1_8v;
|
+};
|
||||||
mmc-hs400-enhanced-strobe;
|
+
|
||||||
non-removable;
|
&vop {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Rudi Heitbaum <rudi@heitbaum.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Tue, 1 Jun 2021 19:42:31 +0200
|
Date: Sat, 21 Aug 2021 14:03:25 +0200
|
||||||
Subject: [PATCH] arm64: dts: rockchip: dts additions for Rock Pi N10
|
Subject: [PATCH] HACK: media: hantro: rockchip: disable H264 for RK3328
|
||||||
|
|
||||||
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
---
|
---
|
||||||
.../dts/rockchip/rk3399pro-rock-pi-n10.dts | 4 +
|
drivers/staging/media/hantro/rockchip_vpu_hw.c | 3 +--
|
||||||
.../dts/rockchip/rk3399pro-vmarc-som.dtsi | 83 +++++++++++++++++++
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
2 files changed, 87 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399pro-rock-pi-n10.dts b/arch/arm64/boot/dts/rockchip/rk3399pro-rock-pi-n10.dts
|
diff --git a/drivers/staging/media/hantro/rockchip_vpu_hw.c b/drivers/staging/media/hantro/rockchip_vpu_hw.c
|
||||||
index 369de5dc0ebd..48ac0cfa93c0 100644
|
index 3d98e2251ea5..b201700ccc8a 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3399pro-rock-pi-n10.dts
|
--- a/drivers/staging/media/hantro/rockchip_vpu_hw.c
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399pro-rock-pi-n10.dts
|
+++ b/drivers/staging/media/hantro/rockchip_vpu_hw.c
|
||||||
@@ -20,3 +20,7 @@ chosen {
|
@@ -530,8 +530,7 @@ const struct hantro_variant rk3328_vpu_variant = {
|
||||||
stdout-path = "serial2:1500000n8";
|
.dec_offset = 0x400,
|
||||||
};
|
.dec_fmts = rk3399_vpu_dec_fmts,
|
||||||
};
|
.num_dec_fmts = ARRAY_SIZE(rk3399_vpu_dec_fmts),
|
||||||
+
|
- .codec = HANTRO_MPEG2_DECODER | HANTRO_VP8_DECODER |
|
||||||
+&uart2 {
|
- HANTRO_H264_DECODER,
|
||||||
+ status = "okay";
|
+ .codec = HANTRO_MPEG2_DECODER | HANTRO_VP8_DECODER,
|
||||||
+};
|
.codec_ops = rk3399_vpu_codec_ops,
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399pro-vmarc-som.dtsi b/arch/arm64/boot/dts/rockchip/rk3399pro-vmarc-som.dtsi
|
.irqs = rockchip_vdpu2_irqs,
|
||||||
index 7257494d2831..9e2994e27d05 100644
|
.num_irqs = ARRAY_SIZE(rockchip_vdpu2_irqs),
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3399pro-vmarc-som.dtsi
|
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399pro-vmarc-som.dtsi
|
|
||||||
@@ -57,6 +57,22 @@ &hdmi {
|
|
||||||
pinctrl-0 = <&hdmi_cec>;
|
|
||||||
};
|
|
||||||
|
|
||||||
+&hdmi_sound {
|
|
||||||
+ status = "okay";
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+&gpu {
|
|
||||||
+ mali-supply = <&vdd_gpu>;
|
|
||||||
+ assigned-clocks = <&cru ACLK_GPU>;
|
|
||||||
+ assigned-clock-rates = <200000000>;
|
|
||||||
+ status = "okay";
|
|
||||||
+ /delete-property/ operating-points-v2;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+&vopl {
|
|
||||||
+ status = "disabled";
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
&i2c0 {
|
|
||||||
clock-frequency = <400000>;
|
|
||||||
i2c-scl-falling-time-ns = <30>;
|
|
||||||
@@ -280,6 +296,50 @@ regulator-state-mem {
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
+
|
|
||||||
+ vdd_cpu_b: tcs4525@1c {
|
|
||||||
+ compatible = "tcs,tcs4525";
|
|
||||||
+ reg = <0x1c>;
|
|
||||||
+ vin-supply = <&vcc5v0_sys>;
|
|
||||||
+ regulator-compatible = "fan53555-reg";
|
|
||||||
+ pinctrl-0 = <&vsel1_gpio>;
|
|
||||||
+ vsel-gpios = <&gpio1 RK_PC1 GPIO_ACTIVE_HIGH>;
|
|
||||||
+ regulator-name = "vdd_cpu_b";
|
|
||||||
+ regulator-min-microvolt = <712500>;
|
|
||||||
+ regulator-max-microvolt = <1500000>;
|
|
||||||
+ regulator-ramp-delay = <2300>;
|
|
||||||
+ fcs,suspend-voltage-selector = <1>;
|
|
||||||
+ regulator-always-on;
|
|
||||||
+ regulator-boot-on;
|
|
||||||
+ regulator-initial-state = <3>;
|
|
||||||
+ regulator-state-mem {
|
|
||||||
+ regulator-off-in-suspend;
|
|
||||||
+ };
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ vdd_gpu: tcs4526@10 {
|
|
||||||
+ compatible = "tcs,tcs4526";
|
|
||||||
+ reg = <0x10>;
|
|
||||||
+ vin-supply = <&vcc5v0_sys>;
|
|
||||||
+ regulator-compatible = "fan53555-reg";
|
|
||||||
+ pinctrl-0 = <&vsel2_gpio>;
|
|
||||||
+ vsel-gpios = <&gpio1 RK_PB6 GPIO_ACTIVE_HIGH>;
|
|
||||||
+ regulator-name = "vdd_gpu";
|
|
||||||
+ regulator-min-microvolt = <735000>;
|
|
||||||
+ regulator-max-microvolt = <1400000>;
|
|
||||||
+ regulator-ramp-delay = <1000>;
|
|
||||||
+ fcs,suspend-voltage-selector = <1>;
|
|
||||||
+ regulator-always-on;
|
|
||||||
+ regulator-boot-on;
|
|
||||||
+ regulator-initial-state = <3>;
|
|
||||||
+ regulator-state-mem {
|
|
||||||
+ regulator-off-in-suspend;
|
|
||||||
+ };
|
|
||||||
+ };
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+&i2s2 {
|
|
||||||
+ status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
&i2c1 {
|
|
||||||
@@ -351,6 +411,29 @@ pmic {
|
|
||||||
pmic_int_l: pmic-int-l {
|
|
||||||
rockchip,pins = <1 RK_PC2 0 &pcfg_pull_up>;
|
|
||||||
};
|
|
||||||
+ vsel1_gpio: vsel1-gpio {
|
|
||||||
+ rockchip,pins =
|
|
||||||
+ <1 RK_PC1 0 &pcfg_pull_down>;
|
|
||||||
+ };
|
|
||||||
+ vsel2_gpio: vsel2-gpio {
|
|
||||||
+ rockchip,pins =
|
|
||||||
+ <1 RK_PB6 0 &pcfg_pull_down>;
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ soc_slppin_gpio: soc-slppin-gpio {
|
|
||||||
+ rockchip,pins =
|
|
||||||
+ <1 RK_PA5 0 &pcfg_output_low>;
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ soc_slppin_slp: soc-slppin-slp {
|
|
||||||
+ rockchip,pins =
|
|
||||||
+ <1 RK_PA5 1 &pcfg_pull_down>;
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ soc_slppin_rst: soc-slppin-rst {
|
|
||||||
+ rockchip,pins =
|
|
||||||
+ <1 RK_PA5 2 &pcfg_pull_none>;
|
|
||||||
+ };
|
|
||||||
};
|
|
||||||
|
|
||||||
sdio-pwrseq {
|
|
@ -10,20 +10,21 @@ Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
|
|||||||
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
|
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
|
||||||
Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
|
Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
|
||||||
---
|
---
|
||||||
.../userspace-api/media/v4l/biblio.rst | 10 +
|
.../userspace-api/media/v4l/biblio.rst | 10 +
|
||||||
.../media/v4l/ext-ctrls-codec.rst | 550 ++++++++++++++++++
|
.../media/v4l/ext-ctrls-codec.rst | 1100 +++++++++++++++++
|
||||||
drivers/media/v4l2-core/v4l2-ctrls.c | 239 ++++++++
|
drivers/media/v4l2-core/v4l2-ctrls-core.c | 225 ++++
|
||||||
drivers/media/v4l2-core/v4l2-ioctl.c | 1 +
|
drivers/media/v4l2-core/v4l2-ctrls-defs.c | 14 +
|
||||||
include/media/v4l2-ctrls.h | 5 +
|
drivers/media/v4l2-core/v4l2-ioctl.c | 1 +
|
||||||
include/media/vp9-ctrls.h | 486 ++++++++++++++++
|
include/media/v4l2-ctrls.h | 5 +
|
||||||
6 files changed, 1291 insertions(+)
|
include/media/vp9-ctrls.h | 486 ++++++++
|
||||||
|
7 files changed, 1841 insertions(+)
|
||||||
create mode 100644 include/media/vp9-ctrls.h
|
create mode 100644 include/media/vp9-ctrls.h
|
||||||
|
|
||||||
diff --git a/Documentation/userspace-api/media/v4l/biblio.rst b/Documentation/userspace-api/media/v4l/biblio.rst
|
diff --git a/Documentation/userspace-api/media/v4l/biblio.rst b/Documentation/userspace-api/media/v4l/biblio.rst
|
||||||
index 7869b6f6ff72..6b4a83b053f5 100644
|
index 7b8e6738ff9e..9cd18c153d19 100644
|
||||||
--- a/Documentation/userspace-api/media/v4l/biblio.rst
|
--- a/Documentation/userspace-api/media/v4l/biblio.rst
|
||||||
+++ b/Documentation/userspace-api/media/v4l/biblio.rst
|
+++ b/Documentation/userspace-api/media/v4l/biblio.rst
|
||||||
@@ -407,3 +407,13 @@ VP8
|
@@ -417,3 +417,13 @@ VP8
|
||||||
:title: RFC 6386: "VP8 Data Format and Decoding Guide"
|
:title: RFC 6386: "VP8 Data Format and Decoding Guide"
|
||||||
|
|
||||||
:author: J. Bankoski et al.
|
:author: J. Bankoski et al.
|
||||||
@ -38,11 +39,11 @@ index 7869b6f6ff72..6b4a83b053f5 100644
|
|||||||
+
|
+
|
||||||
+:author: Adrian Grange (Google), Peter de Rivaz (Argon Design), Jonathan Hunt (Argon Design)
|
+:author: Adrian Grange (Google), Peter de Rivaz (Argon Design), Jonathan Hunt (Argon Design)
|
||||||
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
||||||
index ce728c757eaf..456488f2b5ca 100644
|
index 8c6e2a11ed95..5dd4afc5f1fe 100644
|
||||||
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
||||||
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
||||||
@@ -2730,6 +2730,556 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
|
@@ -3106,6 +3106,556 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
|
||||||
- ``padding[3]``
|
- ``padding[2]``
|
||||||
- Applications and drivers must set this to zero.
|
- Applications and drivers must set this to zero.
|
||||||
|
|
||||||
+.. _v4l2-mpeg-vp9:
|
+.. _v4l2-mpeg-vp9:
|
||||||
@ -598,41 +599,570 @@ index ce728c757eaf..456488f2b5ca 100644
|
|||||||
.. raw:: latex
|
.. raw:: latex
|
||||||
|
|
||||||
\normalsize
|
\normalsize
|
||||||
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
|
@@ -3157,6 +3707,556 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
|
||||||
index 41f8410d08d6..7ed11f296008 100644
|
- ``padding[6]``
|
||||||
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
|
- Applications and drivers must set this to zero.
|
||||||
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
|
|
||||||
@@ -971,6 +971,11 @@ const char *v4l2_ctrl_get_name(u32 id)
|
|
||||||
case V4L2_CID_MPEG_VIDEO_VP9_PROFILE: return "VP9 Profile";
|
|
||||||
case V4L2_CID_MPEG_VIDEO_VP9_LEVEL: return "VP9 Level";
|
|
||||||
case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER: return "VP8 Frame Header";
|
|
||||||
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_DECODE_PARAMS: return "VP9 Frame Decode Parameters";
|
|
||||||
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(0): return "VP9 Frame Context 0";
|
|
||||||
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(1): return "VP9 Frame Context 1";
|
|
||||||
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(2): return "VP9 Frame Context 2";
|
|
||||||
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(3): return "VP9 Frame Context 3";
|
|
||||||
|
|
||||||
/* HEVC controls */
|
+.. _v4l2-mpeg-vp9:
|
||||||
case V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP: return "HEVC I-Frame QP Value";
|
+
|
||||||
@@ -1452,6 +1457,15 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
|
+``V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(0..3) (struct)``
|
||||||
case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER:
|
+ Stores VP9 probabilities attached to a specific frame context. The VP9
|
||||||
*type = V4L2_CTRL_TYPE_VP8_FRAME_HEADER;
|
+ specification allows using a maximum of 4 contexts. Each frame being
|
||||||
break;
|
+ decoded refers to one of those context. See section '7.1.2 Refresh
|
||||||
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_DECODE_PARAMS:
|
+ probs semantics' section of :ref:`vp9` for more details about these
|
||||||
+ *type = V4L2_CTRL_TYPE_VP9_FRAME_DECODE_PARAMS;
|
+ contexts.
|
||||||
+ break;
|
+
|
||||||
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(0):
|
+ This control is bi-directional:
|
||||||
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(1):
|
+
|
||||||
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(2):
|
+ * all 4 contexts must be initialized by userspace just after the
|
||||||
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(3):
|
+ stream is started and before the first decoding request is submitted.
|
||||||
+ *type = V4L2_CTRL_TYPE_VP9_FRAME_CONTEXT;
|
+ * the referenced context might be read by the kernel when a decoding
|
||||||
+ break;
|
+ request is submitted, and will be updated after the decoder is done
|
||||||
case V4L2_CID_MPEG_VIDEO_HEVC_SPS:
|
+ decoding the frame if the `V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX` flag
|
||||||
*type = V4L2_CTRL_TYPE_HEVC_SPS;
|
+ is set.
|
||||||
break;
|
+ * contexts will be read back by user space before each decoding request
|
||||||
@@ -1754,6 +1768,219 @@ static void std_log(const struct v4l2_ctrl *ctrl)
|
+ to retrieve the updated probabilities.
|
||||||
0; \
|
+ * userspace will re-initialize the context to their default values when
|
||||||
})
|
+ a reset context is required.
|
||||||
|
+
|
||||||
|
+ .. note::
|
||||||
|
+
|
||||||
|
+ This compound control is not yet part of the public kernel API and
|
||||||
|
+ it is expected to change.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_ctrl_vp9_frame_ctx
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{5.8cm}|p{4.8cm}|p{6.6cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: struct v4l2_ctrl_vp9_frame_ctx
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 1 2
|
||||||
|
+
|
||||||
|
+ * - struct :c:type:`v4l2_vp9_probabilities`
|
||||||
|
+ - ``probs``
|
||||||
|
+ - Structure with VP9 probabilities attached to the context.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_probabilities
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: struct v4l2_vp9_probabilities
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 1 2
|
||||||
|
+
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``tx8[2][1]``
|
||||||
|
+ - TX 8x8 probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``tx16[2][2]``
|
||||||
|
+ - TX 16x16 probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``tx32[2][3]``
|
||||||
|
+ - TX 32x32 probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``coef[4][2][2][6][6][3]``
|
||||||
|
+ - Coefficient probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``skip[3]``
|
||||||
|
+ - Skip probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``inter_mode[7][3]``
|
||||||
|
+ - Inter prediction mode probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``interp_filter[4][2]``
|
||||||
|
+ - Interpolation filter probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``is_inter[4]``
|
||||||
|
+ - Is inter-block probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``comp_mode[5]``
|
||||||
|
+ - Compound prediction mode probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``single_ref[5][2]``
|
||||||
|
+ - Single reference probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``comp_mode[5]``
|
||||||
|
+ - Compound reference probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``y_mode[4][9]``
|
||||||
|
+ - Y prediction mode probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``uv_mode[10][9]``
|
||||||
|
+ - UV prediction mode probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``partition[16][3]``
|
||||||
|
+ - Partition probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``mv.joint[3]``
|
||||||
|
+ - Motion vector joint probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``mv.sign[2]``
|
||||||
|
+ - Motion vector sign probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``mv.class[2][10]``
|
||||||
|
+ - Motion vector class probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``mv.class0_bit[2]``
|
||||||
|
+ - Motion vector class0 bit probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``mv.bits[2][10]``
|
||||||
|
+ - Motion vector bits probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``mv.class0_fr[2][2][3]``
|
||||||
|
+ - Motion vector class0 fractional bit probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``mv.fr[2][3]``
|
||||||
|
+ - Motion vector fractional bit probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``mv.class0_hp[2]``
|
||||||
|
+ - Motion vector class0 high precision fractional bit probabilities.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``mv.hp[2]``
|
||||||
|
+ - Motion vector high precision fractional bit probabilities.
|
||||||
|
+
|
||||||
|
+``V4L2_CID_MPEG_VIDEO_VP9_FRAME_DECODE_PARAMS (struct)``
|
||||||
|
+ Specifies the frame parameters for the associated VP9 frame decode request.
|
||||||
|
+ This includes the necessary parameters for configuring a stateless hardware
|
||||||
|
+ decoding pipeline for VP9. The bitstream parameters are defined according
|
||||||
|
+ to :ref:`vp9`.
|
||||||
|
+
|
||||||
|
+ .. note::
|
||||||
|
+
|
||||||
|
+ This compound control is not yet part of the public kernel API and
|
||||||
|
+ it is expected to change.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_ctrl_vp9_frame_decode_params
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: struct v4l2_ctrl_vp9_frame_decode_params
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 1 2
|
||||||
|
+
|
||||||
|
+ * - __u32
|
||||||
|
+ - ``flags``
|
||||||
|
+ - Combination of V4L2_VP9_FRAME_FLAG_* flags. See
|
||||||
|
+ :c:type:`v4l2_vp9_frame_flags`.
|
||||||
|
+ * - __u16
|
||||||
|
+ - ``compressed_header_size``
|
||||||
|
+ - Compressed header size in bytes.
|
||||||
|
+ * - __u16
|
||||||
|
+ - ``uncompressed_header_size``
|
||||||
|
+ - Uncompressed header size in bytes.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``profile``
|
||||||
|
+ - VP9 profile. Can be 0, 1, 2 or 3.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``reset_frame_context``
|
||||||
|
+ - Frame context that should be used/updated when decoding the frame.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``bit_depth``
|
||||||
|
+ - Component depth in bits. Must be 8 for profile 0 and 1. Must 10 or 12
|
||||||
|
+ for profile 2 and 3.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``interpolation_filter``
|
||||||
|
+ - Specifies the filter selection used for performing inter prediction. See
|
||||||
|
+ :c:type:`v4l2_vp9_interpolation_filter`.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``tile_cols_log2``
|
||||||
|
+ - Specifies the base 2 logarithm of the width of each tile (where the
|
||||||
|
+ width is measured in units of 8x8 blocks). Shall be less than or equal
|
||||||
|
+ to 6.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``tile_rows_log2``
|
||||||
|
+ - Specifies the base 2 logarithm of the height of each tile (where the
|
||||||
|
+ height is measured in units of 8x8 blocks)
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``tx_mode``
|
||||||
|
+ - Specifies the TX mode. See :c:type:`v4l2_vp9_tx_mode`.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``reference_mode``
|
||||||
|
+ - Specifies the type of inter prediction to be used. See
|
||||||
|
+ :c:type:`v4l2_vp9_reference_mode`.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``padding[7]``
|
||||||
|
+ - Needed to make this struct 64 bit aligned. Shall be filled with zeroes.
|
||||||
|
+ * - __u16
|
||||||
|
+ - ``frame_width_minus_1``
|
||||||
|
+ - Add 1 to get the frame width expressed in pixels.
|
||||||
|
+ * - __u16
|
||||||
|
+ - ``frame_height_minus_1``
|
||||||
|
+ - Add 1 to get the frame height expressed in pixels.
|
||||||
|
+ * - __u16
|
||||||
|
+ - ``frame_width_minus_1``
|
||||||
|
+ - Add 1 to get the expected render width expressed in pixels. This is
|
||||||
|
+ not used during the decoding process but might be used by HW scalers to
|
||||||
|
+ prepare a frame that's ready for scanout.
|
||||||
|
+ * - __u16
|
||||||
|
+ - frame_height_minus_1
|
||||||
|
+ - Add 1 to get the expected render height expressed in pixels. This is
|
||||||
|
+ not used during the decoding process but might be used by HW scalers to
|
||||||
|
+ prepare a frame that's ready for scanout.
|
||||||
|
+ * - __u64
|
||||||
|
+ - ``refs[3]``
|
||||||
|
+ - Array of reference frame timestamps.
|
||||||
|
+ * - struct :c:type:`v4l2_vp9_loop_filter`
|
||||||
|
+ - ``lf``
|
||||||
|
+ - Loop filter parameters. See struct :c:type:`v4l2_vp9_loop_filter`.
|
||||||
|
+ * - struct :c:type:`v4l2_vp9_quantization`
|
||||||
|
+ - ``quant``
|
||||||
|
+ - Quantization parameters. See :c:type:`v4l2_vp9_quantization`.
|
||||||
|
+ * - struct :c:type:`v4l2_vp9_segmentation`
|
||||||
|
+ - ``seg``
|
||||||
|
+ - Segmentation parameters. See :c:type:`v4l2_vp9_segmentation`.
|
||||||
|
+ * - struct :c:type:`v4l2_vp9_probabilities`
|
||||||
|
+ - ``probs``
|
||||||
|
+ - Probabilities. See :c:type:`v4l2_vp9_probabilities`.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_frame_flags
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: enum v4l2_vp9_frame_flags
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 2
|
||||||
|
+
|
||||||
|
+ * - ``V4L2_VP9_FRAME_FLAG_KEY_FRAME``
|
||||||
|
+ - The frame is a key frame.
|
||||||
|
+ * - ``V4L2_VP9_FRAME_FLAG_SHOW_FRAME``
|
||||||
|
+ - The frame should be displayed.
|
||||||
|
+ * - ``V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT``
|
||||||
|
+ - The decoding should be error resilient.
|
||||||
|
+ * - ``V4L2_VP9_FRAME_FLAG_INTRA_ONLY``
|
||||||
|
+ - The frame does not reference other frames.
|
||||||
|
+ * - ``V4L2_VP9_FRAME_FLAG_ALLOW_HIGH_PREC_MV``
|
||||||
|
+ - the frame might can high precision motion vectors.
|
||||||
|
+ * - ``V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX``
|
||||||
|
+ - Frame context should be updated after decoding.
|
||||||
|
+ * - ``V4L2_VP9_FRAME_FLAG_PARALLEL_DEC_MODE``
|
||||||
|
+ - Parallel decoding is used.
|
||||||
|
+ * - ``V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING``
|
||||||
|
+ - Vertical subsampling is enabled.
|
||||||
|
+ * - ``V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING``
|
||||||
|
+ - Horizontal subsampling is enabled.
|
||||||
|
+ * - ``V4L2_VP9_FRAME_FLAG_COLOR_RANGE_FULL_SWING``
|
||||||
|
+ - The full UV range is used.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_ref_id
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: enum v4l2_vp9_ref_id
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 2
|
||||||
|
+
|
||||||
|
+ * - ``V4L2_REF_ID_LAST``
|
||||||
|
+ - Last reference frame.
|
||||||
|
+ * - ``V4L2_REF_ID_GOLDEN``
|
||||||
|
+ - Golden reference frame.
|
||||||
|
+ * - ``V4L2_REF_ID_ALTREF``
|
||||||
|
+ - Alternative reference frame.
|
||||||
|
+ * - ``V4L2_REF_ID_CNT``
|
||||||
|
+ - Number of reference frames.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_tx_mode
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: enum v4l2_vp9_tx_mode
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 2
|
||||||
|
+
|
||||||
|
+ * - ``V4L2_VP9_TX_MODE_ONLY_4X4``
|
||||||
|
+ - Transform size is 4x4.
|
||||||
|
+ * - ``V4L2_VP9_TX_MODE_ALLOW_8X8``
|
||||||
|
+ - Transform size can be up to 8x8.
|
||||||
|
+ * - ``V4L2_VP9_TX_MODE_ALLOW_16X16``
|
||||||
|
+ - Transform size can be up to 16x16.
|
||||||
|
+ * - ``V4L2_VP9_TX_MODE_ALLOW_32X32``
|
||||||
|
+ - transform size can be up to 32x32.
|
||||||
|
+ * - ``V4L2_VP9_TX_MODE_SELECT``
|
||||||
|
+ - Bitstream contains transform size for each block.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_reference_mode
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: enum v4l2_vp9_reference_mode
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 2
|
||||||
|
+
|
||||||
|
+ * - ``V4L2_VP9_REF_MODE_SINGLE``
|
||||||
|
+ - Indicates that all the inter blocks use only a single reference frame
|
||||||
|
+ to generate motion compensated prediction.
|
||||||
|
+ * - ``V4L2_VP9_REF_MODE_COMPOUND``
|
||||||
|
+ - Requires all the inter blocks to use compound mode. Single reference
|
||||||
|
+ frame prediction is not allowed.
|
||||||
|
+ * - ``V4L2_VP9_REF_MODE_SELECT``
|
||||||
|
+ - Allows each individual inter block to select between single and
|
||||||
|
+ compound prediction modes.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_interpolation_filter
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: enum v4l2_vp9_interpolation_filter
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 2
|
||||||
|
+
|
||||||
|
+ * - ``V4L2_VP9_INTERP_FILTER_8TAP``
|
||||||
|
+ - Height tap filter.
|
||||||
|
+ * - ``V4L2_VP9_INTERP_FILTER_8TAP_SMOOTH``
|
||||||
|
+ - Height tap smooth filter.
|
||||||
|
+ * - ``V4L2_VP9_INTERP_FILTER_8TAP_SHARP``
|
||||||
|
+ - Height tap sharp filter.
|
||||||
|
+ * - ``V4L2_VP9_INTERP_FILTER_BILINEAR``
|
||||||
|
+ - Bilinear filter.
|
||||||
|
+ * - ``V4L2_VP9_INTERP_FILTER_SWITCHABLE``
|
||||||
|
+ - Filter selection is signaled at the block level.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_reset_frame_context
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: enum v4l2_vp9_reset_frame_context
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 2
|
||||||
|
+
|
||||||
|
+ * - ``V4L2_VP9_RESET_FRAME_CTX_NONE``
|
||||||
|
+ - Do not reset any frame context.
|
||||||
|
+ * - ``V4L2_VP9_RESET_FRAME_CTX_SPEC``
|
||||||
|
+ - Reset the frame context pointed by
|
||||||
|
+ :c:type:`v4l2_ctrl_vp9_frame_decode_params`.frame_context_idx.
|
||||||
|
+ * - ``V4L2_VP9_RESET_FRAME_CTX_ALL``
|
||||||
|
+ - Reset all frame contexts.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_intra_prediction_mode
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: enum v4l2_vp9_intra_prediction_mode
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 2
|
||||||
|
+
|
||||||
|
+ * - ``V4L2_VP9_INTRA_PRED_DC``
|
||||||
|
+ - DC intra prediction.
|
||||||
|
+ * - ``V4L2_VP9_INTRA_PRED_MODE_V``
|
||||||
|
+ - Vertical intra prediction.
|
||||||
|
+ * - ``V4L2_VP9_INTRA_PRED_MODE_H``
|
||||||
|
+ - Horizontal intra prediction.
|
||||||
|
+ * - ``V4L2_VP9_INTRA_PRED_MODE_D45``
|
||||||
|
+ - D45 intra prediction.
|
||||||
|
+ * - ``V4L2_VP9_INTRA_PRED_MODE_D135``
|
||||||
|
+ - D135 intra prediction.
|
||||||
|
+ * - ``V4L2_VP9_INTRA_PRED_MODE_D117``
|
||||||
|
+ - D117 intra prediction.
|
||||||
|
+ * - ``V4L2_VP9_INTRA_PRED_MODE_D153``
|
||||||
|
+ - D153 intra prediction.
|
||||||
|
+ * - ``V4L2_VP9_INTRA_PRED_MODE_D207``
|
||||||
|
+ - D207 intra prediction.
|
||||||
|
+ * - ``V4L2_VP9_INTRA_PRED_MODE_D63``
|
||||||
|
+ - D63 intra prediction.
|
||||||
|
+ * - ``V4L2_VP9_INTRA_PRED_MODE_TM``
|
||||||
|
+ - True motion intra prediction.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_segmentation
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: struct v4l2_vp9_segmentation
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 1 2
|
||||||
|
+
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``flags``
|
||||||
|
+ - Combination of V4L2_VP9_SEGMENTATION_FLAG_* flags. See
|
||||||
|
+ :c:type:`v4l2_vp9_segmentation_flags`.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``tree_probs[7]``
|
||||||
|
+ - Specifies the probability values to be used when decoding a Segment-ID.
|
||||||
|
+ See '5.15. Segmentation map' section of :ref:`vp9` for more details.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``pred_prob[3]``
|
||||||
|
+ - Specifies the probability values to be used when decoding a
|
||||||
|
+ Predicted-Segment-ID. See '6.4.14. Get segment id syntax'
|
||||||
|
+ section of :ref:`vp9` for more details.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``padding[5]``
|
||||||
|
+ - Used to align this struct on 64 bit. Shall be filled with zeroes.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``feature_enabled[8]``
|
||||||
|
+ - Bitmask defining which features are enabled in each segment.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``feature_data[8][4]``
|
||||||
|
+ - Data attached to each feature. Data entry is only valid if the feature
|
||||||
|
+ is enabled.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_segment_feature
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: enum v4l2_vp9_segment_feature
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 2
|
||||||
|
+
|
||||||
|
+ * - ``V4L2_VP9_SEGMENT_FEATURE_QP_DELTA``
|
||||||
|
+ - QP delta segment feature.
|
||||||
|
+ * - ``V4L2_VP9_SEGMENT_FEATURE_LF``
|
||||||
|
+ - Loop filter segment feature.
|
||||||
|
+ * - ``V4L2_VP9_SEGMENT_FEATURE_REF_FRAME``
|
||||||
|
+ - Reference frame segment feature.
|
||||||
|
+ * - ``V4L2_VP9_SEGMENT_FEATURE_SKIP``
|
||||||
|
+ - Skip segment feature.
|
||||||
|
+ * - ``V4L2_VP9_SEGMENT_FEATURE_CNT``
|
||||||
|
+ - Number of segment features.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_segmentation_flags
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: enum v4l2_vp9_segmentation_flags
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 2
|
||||||
|
+
|
||||||
|
+ * - ``V4L2_VP9_SEGMENTATION_FLAG_ENABLED``
|
||||||
|
+ - Indicates that this frame makes use of the segmentation tool.
|
||||||
|
+ * - ``V4L2_VP9_SEGMENTATION_FLAG_UPDATE_MAP``
|
||||||
|
+ - Indicates that the segmentation map should be updated during the
|
||||||
|
+ decoding of this frame.
|
||||||
|
+ * - ``V4L2_VP9_SEGMENTATION_FLAG_TEMPORAL_UPDATE``
|
||||||
|
+ - Indicates that the updates to the segmentation map are coded
|
||||||
|
+ relative to the existing segmentation map.
|
||||||
|
+ * - ``V4L2_VP9_SEGMENTATION_FLAG_UPDATE_DATA``
|
||||||
|
+ - Indicates that new parameters are about to be specified for each
|
||||||
|
+ segment.
|
||||||
|
+ * - ``V4L2_VP9_SEGMENTATION_FLAG_ABS_OR_DELTA_UPDATE``
|
||||||
|
+ - Indicates that the segmentation parameters represent the actual values
|
||||||
|
+ to be used.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_quantization
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: struct v4l2_vp9_quantization
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 1 2
|
||||||
|
+
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``base_q_idx``
|
||||||
|
+ - Indicates the base frame qindex.
|
||||||
|
+ * - __s8
|
||||||
|
+ - ``delta_q_y_dc``
|
||||||
|
+ - Indicates the Y DC quantizer relative to base_q_idx.
|
||||||
|
+ * - __s8
|
||||||
|
+ - ``delta_q_uv_dc``
|
||||||
|
+ - Indicates the UV DC quantizer relative to base_q_idx.
|
||||||
|
+ * - __s8
|
||||||
|
+ - ``delta_q_uv_ac``
|
||||||
|
+ - Indicates the UV AC quantizer relative to base_q_idx.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``padding[4]``
|
||||||
|
+ - Padding bytes used to align this struct on 64 bit. Must be set to 0.
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_loop_filter
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: struct v4l2_vp9_loop_filter
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 1 2
|
||||||
|
+
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``flags``
|
||||||
|
+ - Combination of V4L2_VP9_LOOP_FILTER_FLAG_* flags.
|
||||||
|
+ See :c:type:`v4l2_vp9_loop_filter_flags`.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``level``
|
||||||
|
+ - Indicates the loop filter strength.
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``sharpness``
|
||||||
|
+ - Indicates the sharpness level.
|
||||||
|
+ * - __s8
|
||||||
|
+ - ``ref_deltas[4]``
|
||||||
|
+ - Contains the adjustment needed for the filter level based on the chosen
|
||||||
|
+ reference frame.
|
||||||
|
+ * - __s8
|
||||||
|
+ - ``mode_deltas[2]``
|
||||||
|
+ - Contains the adjustment needed for the filter level based on the chosen
|
||||||
|
+ mode
|
||||||
|
+ * - __u8
|
||||||
|
+ - ``level_lookup[8][4][2]``
|
||||||
|
+ - Level lookup table.
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+.. c:type:: v4l2_vp9_loop_filter_flags
|
||||||
|
+
|
||||||
|
+.. cssclass:: longtable
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
|
||||||
|
+
|
||||||
|
+.. flat-table:: enum v4l2_vp9_loop_filter_flags
|
||||||
|
+ :header-rows: 0
|
||||||
|
+ :stub-columns: 0
|
||||||
|
+ :widths: 1 2
|
||||||
|
+
|
||||||
|
+ * - ``V4L2_VP9_LOOP_FILTER_FLAG_DELTA_ENABLED``
|
||||||
|
+ - When set, the filter level depends on the mode and reference frame used
|
||||||
|
+ to predict a block.
|
||||||
|
+ * - ``V4L2_VP9_LOOP_FILTER_FLAG_DELTA_UPDATE``
|
||||||
|
+ - When set, the bitstream contains additional syntax elements that
|
||||||
|
+ specify which mode and reference frame deltas are to be updated.
|
||||||
|
+
|
||||||
|
.. raw:: latex
|
||||||
|
|
||||||
|
\normalsize
|
||||||
|
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2-core/v4l2-ctrls-core.c
|
||||||
|
index c4b5082849b6..b4802c9989fd 100644
|
||||||
|
--- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
|
||||||
|
+++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
|
||||||
|
@@ -289,6 +289,219 @@ static void std_log(const struct v4l2_ctrl *ctrl)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+static int
|
+static int
|
||||||
+validate_vp9_lf_params(struct v4l2_vp9_loop_filter *lf)
|
+validate_vp9_lf_params(struct v4l2_vp9_loop_filter *lf)
|
||||||
@ -847,11 +1377,11 @@ index 41f8410d08d6..7ed11f296008 100644
|
|||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
/* Validate a new control */
|
/*
|
||||||
|
* Round towards the closest legal value. Be careful when we are
|
||||||
#define zero_padding(s) \
|
* close to the maximum range of the control type to prevent
|
||||||
@@ -1871,6 +2098,12 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
|
@@ -574,6 +787,12 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
|
||||||
zero_padding(p_vp8_frame_header->coder_state);
|
zero_padding(p_vp8_frame->coder_state);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
+ case V4L2_CTRL_TYPE_VP9_FRAME_DECODE_PARAMS:
|
+ case V4L2_CTRL_TYPE_VP9_FRAME_DECODE_PARAMS:
|
||||||
@ -863,9 +1393,9 @@ index 41f8410d08d6..7ed11f296008 100644
|
|||||||
case V4L2_CTRL_TYPE_HEVC_SPS:
|
case V4L2_CTRL_TYPE_HEVC_SPS:
|
||||||
p_hevc_sps = p;
|
p_hevc_sps = p;
|
||||||
|
|
||||||
@@ -2635,6 +2868,12 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
|
@@ -1231,6 +1450,12 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
|
||||||
case V4L2_CTRL_TYPE_VP8_FRAME_HEADER:
|
case V4L2_CTRL_TYPE_VP8_FRAME:
|
||||||
elem_size = sizeof(struct v4l2_ctrl_vp8_frame_header);
|
elem_size = sizeof(struct v4l2_ctrl_vp8_frame);
|
||||||
break;
|
break;
|
||||||
+ case V4L2_CTRL_TYPE_VP9_FRAME_CONTEXT:
|
+ case V4L2_CTRL_TYPE_VP9_FRAME_CONTEXT:
|
||||||
+ elem_size = sizeof(struct v4l2_ctrl_vp9_frame_ctx);
|
+ elem_size = sizeof(struct v4l2_ctrl_vp9_frame_ctx);
|
||||||
@ -876,11 +1406,43 @@ index 41f8410d08d6..7ed11f296008 100644
|
|||||||
case V4L2_CTRL_TYPE_HEVC_SPS:
|
case V4L2_CTRL_TYPE_HEVC_SPS:
|
||||||
elem_size = sizeof(struct v4l2_ctrl_hevc_sps);
|
elem_size = sizeof(struct v4l2_ctrl_hevc_sps);
|
||||||
break;
|
break;
|
||||||
|
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
|
||||||
|
index b6344bbf1e00..22a031e25499 100644
|
||||||
|
--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
|
||||||
|
+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
|
||||||
|
@@ -940,6 +940,11 @@ const char *v4l2_ctrl_get_name(u32 id)
|
||||||
|
case V4L2_CID_MPEG_VIDEO_VP8_PROFILE: return "VP8 Profile";
|
||||||
|
case V4L2_CID_MPEG_VIDEO_VP9_PROFILE: return "VP9 Profile";
|
||||||
|
case V4L2_CID_MPEG_VIDEO_VP9_LEVEL: return "VP9 Level";
|
||||||
|
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_DECODE_PARAMS: return "VP9 Frame Decode Parameters";
|
||||||
|
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(0): return "VP9 Frame Context 0";
|
||||||
|
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(1): return "VP9 Frame Context 1";
|
||||||
|
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(2): return "VP9 Frame Context 2";
|
||||||
|
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(3): return "VP9 Frame Context 3";
|
||||||
|
|
||||||
|
/* HEVC controls */
|
||||||
|
case V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP: return "HEVC I-Frame QP Value";
|
||||||
|
@@ -1479,6 +1484,15 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
|
||||||
|
case V4L2_CID_STATELESS_VP8_FRAME:
|
||||||
|
*type = V4L2_CTRL_TYPE_VP8_FRAME;
|
||||||
|
break;
|
||||||
|
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_DECODE_PARAMS:
|
||||||
|
+ *type = V4L2_CTRL_TYPE_VP9_FRAME_DECODE_PARAMS;
|
||||||
|
+ break;
|
||||||
|
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(0):
|
||||||
|
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(1):
|
||||||
|
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(2):
|
||||||
|
+ case V4L2_CID_MPEG_VIDEO_VP9_FRAME_CONTEXT(3):
|
||||||
|
+ *type = V4L2_CTRL_TYPE_VP9_FRAME_CONTEXT;
|
||||||
|
+ break;
|
||||||
|
case V4L2_CID_MPEG_VIDEO_HEVC_SPS:
|
||||||
|
*type = V4L2_CTRL_TYPE_HEVC_SPS;
|
||||||
|
break;
|
||||||
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
|
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
|
||||||
index 1ff68c1bf14a..783733bef2da 100644
|
index fe43d785414c..47f812a081ca 100644
|
||||||
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
|
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
|
||||||
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
|
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
|
||||||
@@ -1429,6 +1429,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
|
@@ -1394,6 +1394,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
|
||||||
case V4L2_PIX_FMT_VP8: descr = "VP8"; break;
|
case V4L2_PIX_FMT_VP8: descr = "VP8"; break;
|
||||||
case V4L2_PIX_FMT_VP8_FRAME: descr = "VP8 Frame"; break;
|
case V4L2_PIX_FMT_VP8_FRAME: descr = "VP8 Frame"; break;
|
||||||
case V4L2_PIX_FMT_VP9: descr = "VP9"; break;
|
case V4L2_PIX_FMT_VP9: descr = "VP9"; break;
|
||||||
@ -889,30 +1451,30 @@ index 1ff68c1bf14a..783733bef2da 100644
|
|||||||
case V4L2_PIX_FMT_HEVC_SLICE: descr = "HEVC Parsed Slice Data"; break;
|
case V4L2_PIX_FMT_HEVC_SLICE: descr = "HEVC Parsed Slice Data"; break;
|
||||||
case V4L2_PIX_FMT_FWHT: descr = "FWHT"; break; /* used in vicodec */
|
case V4L2_PIX_FMT_FWHT: descr = "FWHT"; break; /* used in vicodec */
|
||||||
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
|
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
|
||||||
index 9ecbb98908f0..ebcb34759ad8 100644
|
index 575b59fbac77..f62c529b6a70 100644
|
||||||
--- a/include/media/v4l2-ctrls.h
|
--- a/include/media/v4l2-ctrls.h
|
||||||
+++ b/include/media/v4l2-ctrls.h
|
+++ b/include/media/v4l2-ctrls.h
|
||||||
@@ -21,6 +21,7 @@
|
@@ -18,6 +18,7 @@
|
||||||
#include <media/fwht-ctrls.h>
|
* This will move to the public headers once this API is fully stable.
|
||||||
#include <media/h264-ctrls.h>
|
*/
|
||||||
#include <media/vp8-ctrls.h>
|
|
||||||
+#include <media/vp9-ctrls.h>
|
|
||||||
#include <media/hevc-ctrls.h>
|
#include <media/hevc-ctrls.h>
|
||||||
|
+#include <media/vp9-ctrls.h>
|
||||||
|
|
||||||
/* forward references */
|
/* forward references */
|
||||||
@@ -53,6 +54,8 @@ struct video_device;
|
struct file;
|
||||||
|
@@ -50,6 +51,8 @@ struct video_device;
|
||||||
* @p_h264_decode_params: Pointer to a struct v4l2_ctrl_h264_decode_params.
|
* @p_h264_decode_params: Pointer to a struct v4l2_ctrl_h264_decode_params.
|
||||||
* @p_h264_pred_weights: Pointer to a struct v4l2_ctrl_h264_pred_weights.
|
* @p_h264_pred_weights: Pointer to a struct v4l2_ctrl_h264_pred_weights.
|
||||||
* @p_vp8_frame_header: Pointer to a VP8 frame header structure.
|
* @p_vp8_frame: Pointer to a VP8 frame params structure.
|
||||||
+ * @p_vp9_frame_ctx: Pointer to a VP9 frame context structure.
|
+ * @p_vp9_frame_ctx: Pointer to a VP9 frame context structure.
|
||||||
+ * @p_vp9_frame_decode_params: Pointer to a VP9 frame params structure.
|
+ * @p_vp9_frame_decode_params: Pointer to a VP9 frame params structure.
|
||||||
* @p_hevc_sps: Pointer to an HEVC sequence parameter set structure.
|
* @p_hevc_sps: Pointer to an HEVC sequence parameter set structure.
|
||||||
* @p_hevc_pps: Pointer to an HEVC picture parameter set structure.
|
* @p_hevc_pps: Pointer to an HEVC picture parameter set structure.
|
||||||
* @p_hevc_slice_params: Pointer to an HEVC slice parameters structure.
|
* @p_hevc_slice_params: Pointer to an HEVC slice parameters structure.
|
||||||
@@ -80,6 +83,8 @@ union v4l2_ctrl_ptr {
|
@@ -82,6 +85,8 @@ union v4l2_ctrl_ptr {
|
||||||
struct v4l2_ctrl_hevc_sps *p_hevc_sps;
|
|
||||||
struct v4l2_ctrl_hevc_pps *p_hevc_pps;
|
|
||||||
struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
|
struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
|
||||||
|
struct v4l2_ctrl_hdr10_cll_info *p_hdr10_cll;
|
||||||
|
struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering;
|
||||||
+ struct v4l2_ctrl_vp9_frame_ctx *p_vp9_frame_ctx;
|
+ struct v4l2_ctrl_vp9_frame_ctx *p_vp9_frame_ctx;
|
||||||
+ struct v4l2_ctrl_vp9_frame_decode_params *p_vp9_frame_decode_params;
|
+ struct v4l2_ctrl_vp9_frame_decode_params *p_vp9_frame_decode_params;
|
||||||
struct v4l2_area *p_area;
|
struct v4l2_area *p_area;
|
||||||
@ -920,7 +1482,7 @@ index 9ecbb98908f0..ebcb34759ad8 100644
|
|||||||
const void *p_const;
|
const void *p_const;
|
||||||
diff --git a/include/media/vp9-ctrls.h b/include/media/vp9-ctrls.h
|
diff --git a/include/media/vp9-ctrls.h b/include/media/vp9-ctrls.h
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 000000000000..a14fffb3ad61
|
index 000000000000..f62f528d4b39
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/include/media/vp9-ctrls.h
|
+++ b/include/media/vp9-ctrls.h
|
||||||
@@ -0,0 +1,486 @@
|
@@ -0,0 +1,486 @@
|
||||||
@ -1425,9 +1987,9 @@ Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
|
|||||||
---
|
---
|
||||||
drivers/staging/media/rkvdec/Makefile | 2 +-
|
drivers/staging/media/rkvdec/Makefile | 2 +-
|
||||||
drivers/staging/media/rkvdec/rkvdec-vp9.c | 1577 +++++++++++++++++++++
|
drivers/staging/media/rkvdec/rkvdec-vp9.c | 1577 +++++++++++++++++++++
|
||||||
drivers/staging/media/rkvdec/rkvdec.c | 60 +-
|
drivers/staging/media/rkvdec/rkvdec.c | 59 +-
|
||||||
drivers/staging/media/rkvdec/rkvdec.h | 6 +
|
drivers/staging/media/rkvdec/rkvdec.h | 6 +
|
||||||
4 files changed, 1643 insertions(+), 2 deletions(-)
|
4 files changed, 1642 insertions(+), 2 deletions(-)
|
||||||
create mode 100644 drivers/staging/media/rkvdec/rkvdec-vp9.c
|
create mode 100644 drivers/staging/media/rkvdec/rkvdec-vp9.c
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/Makefile b/drivers/staging/media/rkvdec/Makefile
|
diff --git a/drivers/staging/media/rkvdec/Makefile b/drivers/staging/media/rkvdec/Makefile
|
||||||
@ -3023,10 +3585,10 @@ index 000000000000..8b443ed511c9
|
|||||||
+ .done = rkvdec_vp9_done,
|
+ .done = rkvdec_vp9_done,
|
||||||
+};
|
+};
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index c4e0ec16c285..f3578c5ea902 100644
|
index fbaf0303f7c2..2c0c6dcbd066 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -162,6 +162,39 @@ static const u32 rkvdec_h264_decoded_fmts[] = {
|
@@ -159,6 +159,39 @@ static const u32 rkvdec_h264_decoded_fmts[] = {
|
||||||
V4L2_PIX_FMT_NV20,
|
V4L2_PIX_FMT_NV20,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3066,7 +3628,7 @@ index c4e0ec16c285..f3578c5ea902 100644
|
|||||||
static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||||
{
|
{
|
||||||
.fourcc = V4L2_PIX_FMT_H264_SLICE,
|
.fourcc = V4L2_PIX_FMT_H264_SLICE,
|
||||||
@@ -177,6 +211,21 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
@@ -174,6 +207,21 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||||
.ops = &rkvdec_h264_fmt_ops,
|
.ops = &rkvdec_h264_fmt_ops,
|
||||||
.num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_decoded_fmts),
|
.num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_decoded_fmts),
|
||||||
.decoded_fmts = rkvdec_h264_decoded_fmts,
|
.decoded_fmts = rkvdec_h264_decoded_fmts,
|
||||||
@ -3088,7 +3650,7 @@ index c4e0ec16c285..f3578c5ea902 100644
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -376,7 +425,7 @@ static int rkvdec_s_output_fmt(struct file *file, void *priv,
|
@@ -373,7 +421,7 @@ static int rkvdec_s_output_fmt(struct file *file, void *priv,
|
||||||
struct v4l2_m2m_ctx *m2m_ctx = ctx->fh.m2m_ctx;
|
struct v4l2_m2m_ctx *m2m_ctx = ctx->fh.m2m_ctx;
|
||||||
const struct rkvdec_coded_fmt_desc *desc;
|
const struct rkvdec_coded_fmt_desc *desc;
|
||||||
struct v4l2_format *cap_fmt;
|
struct v4l2_format *cap_fmt;
|
||||||
@ -3097,7 +3659,7 @@ index c4e0ec16c285..f3578c5ea902 100644
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -388,6 +437,15 @@ static int rkvdec_s_output_fmt(struct file *file, void *priv,
|
@@ -385,6 +433,15 @@ static int rkvdec_s_output_fmt(struct file *file, void *priv,
|
||||||
if (vb2_is_busy(peer_vq))
|
if (vb2_is_busy(peer_vq))
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
@ -3114,10 +3676,10 @@ index c4e0ec16c285..f3578c5ea902 100644
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
index c14cd2571bfc..d760c3609e2c 100644
|
index fa24bcb6ff42..18dd721172d8 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
@@ -58,6 +58,10 @@ struct rkvdec_vp9_decoded_buffer_info {
|
@@ -57,6 +57,10 @@ struct rkvdec_vp9_decoded_buffer_info {
|
||||||
struct rkvdec_decoded_buffer {
|
struct rkvdec_decoded_buffer {
|
||||||
/* Must be the first field in this struct. */
|
/* Must be the first field in this struct. */
|
||||||
struct v4l2_m2m_buffer base;
|
struct v4l2_m2m_buffer base;
|
||||||
@ -3128,7 +3690,7 @@ index c14cd2571bfc..d760c3609e2c 100644
|
|||||||
};
|
};
|
||||||
|
|
||||||
static inline struct rkvdec_decoded_buffer *
|
static inline struct rkvdec_decoded_buffer *
|
||||||
@@ -128,4 +132,6 @@ void rkvdec_run_preamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
@@ -127,4 +131,6 @@ void rkvdec_run_preamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
||||||
void rkvdec_run_postamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
void rkvdec_run_postamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
||||||
|
|
||||||
extern const struct rkvdec_coded_fmt_ops rkvdec_h264_fmt_ops;
|
extern const struct rkvdec_coded_fmt_ops rkvdec_h264_fmt_ops;
|
||||||
|
@ -1,41 +1,49 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
From: Benjamin Gaignard <benjamin.gaignard@collabora.com>
|
||||||
Date: Sat, 26 Oct 2019 13:55:15 +0200
|
Date: Thu, 15 Jul 2021 17:12:22 +0200
|
||||||
Subject: [PATCH] media: uapi: hevc: Add scaling matrix control
|
Subject: [PATCH] media: hevc: Add scaling matrix control
|
||||||
|
|
||||||
HEVC has a scaling matrix concept. Add support for it.
|
HEVC scaling lists are used for the scaling process for transform
|
||||||
|
coefficients.
|
||||||
|
V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED has to set when they are
|
||||||
|
encoded in the bitstream.
|
||||||
|
|
||||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
|
||||||
|
Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||||
|
Reviewed-by: Ezequiel Garcia <ezequiel@collabora.com>
|
||||||
|
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
|
||||||
|
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
|
||||||
---
|
---
|
||||||
.../media/v4l/ext-ctrls-codec.rst | 41 +++++++++++++++++++
|
.../media/v4l/ext-ctrls-codec.rst | 57 +++++++++++++++++++
|
||||||
.../media/v4l/pixfmt-compressed.rst | 1 +
|
.../media/v4l/vidioc-queryctrl.rst | 6 ++
|
||||||
drivers/media/v4l2-core/v4l2-ctrls.c | 10 +++++
|
drivers/media/v4l2-core/v4l2-ctrls-core.c | 6 ++
|
||||||
include/media/hevc-ctrls.h | 11 +++++
|
drivers/media/v4l2-core/v4l2-ctrls-defs.c | 4 ++
|
||||||
4 files changed, 63 insertions(+)
|
include/media/hevc-ctrls.h | 11 ++++
|
||||||
|
5 files changed, 84 insertions(+)
|
||||||
|
|
||||||
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
||||||
index 456488f2b5ca..81529b1d8d69 100644
|
index 5dd4afc5f1fe..dc08368d62fe 100644
|
||||||
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
||||||
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
||||||
@@ -4866,6 +4866,47 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
|
@@ -3068,6 +3068,63 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
|
||||||
- ``padding[6]``
|
|
||||||
- Applications and drivers must set this to zero.
|
\normalsize
|
||||||
|
|
||||||
+``V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX (struct)``
|
+``V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX (struct)``
|
||||||
+ Specifies the scaling matrix (as extracted from the bitstream) for
|
+ Specifies the HEVC scaling matrix parameters used for the scaling process
|
||||||
+ the associated HEVC slice data. The bitstream parameters are
|
+ for transform coefficients.
|
||||||
+ defined according to :ref:`hevc`, section 7.4.5 "Scaling list
|
+ These matrix and parameters are defined according to :ref:`hevc`.
|
||||||
+ data semantics". For further documentation, refer to the above
|
+ They are described in section 7.4.5 "Scaling list data semantics" of
|
||||||
+ specification, unless there is an explicit comment stating
|
+ the specification.
|
||||||
+ otherwise.
|
|
||||||
+
|
|
||||||
+ .. note::
|
|
||||||
+
|
|
||||||
+ This compound control is not yet part of the public kernel API and
|
|
||||||
+ it is expected to change.
|
|
||||||
+
|
+
|
||||||
+.. c:type:: v4l2_ctrl_hevc_scaling_matrix
|
+.. c:type:: v4l2_ctrl_hevc_scaling_matrix
|
||||||
+
|
+
|
||||||
|
+.. raw:: latex
|
||||||
|
+
|
||||||
|
+ \scriptsize
|
||||||
|
+
|
||||||
|
+.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
|
||||||
|
+
|
||||||
+.. cssclass:: longtable
|
+.. cssclass:: longtable
|
||||||
+
|
+
|
||||||
+.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
|
+.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
|
||||||
@ -45,50 +53,65 @@ index 456488f2b5ca..81529b1d8d69 100644
|
|||||||
+
|
+
|
||||||
+ * - __u8
|
+ * - __u8
|
||||||
+ - ``scaling_list_4x4[6][16]``
|
+ - ``scaling_list_4x4[6][16]``
|
||||||
+ -
|
+ - Scaling list is used for the scaling process for transform
|
||||||
|
+ coefficients. The values on each scaling list are expected
|
||||||
|
+ in raster scan order.
|
||||||
+ * - __u8
|
+ * - __u8
|
||||||
+ - ``scaling_list_8x8[6][64]``
|
+ - ``scaling_list_8x8[6][64]``
|
||||||
+ -
|
+ - Scaling list is used for the scaling process for transform
|
||||||
|
+ coefficients. The values on each scaling list are expected
|
||||||
|
+ in raster scan order.
|
||||||
+ * - __u8
|
+ * - __u8
|
||||||
+ - ``scaling_list_16x16[6][64]``
|
+ - ``scaling_list_16x16[6][64]``
|
||||||
+ -
|
+ - Scaling list is used for the scaling process for transform
|
||||||
|
+ coefficients. The values on each scaling list are expected
|
||||||
|
+ in raster scan order.
|
||||||
+ * - __u8
|
+ * - __u8
|
||||||
+ - ``scaling_list_32x32[2][64]``
|
+ - ``scaling_list_32x32[2][64]``
|
||||||
+ -
|
+ - Scaling list is used for the scaling process for transform
|
||||||
|
+ coefficients. The values on each scaling list are expected
|
||||||
|
+ in raster scan order.
|
||||||
+ * - __u8
|
+ * - __u8
|
||||||
+ - ``scaling_list_dc_coef_16x16[6]``
|
+ - ``scaling_list_dc_coef_16x16[6]``
|
||||||
+ -
|
+ - Scaling list is used for the scaling process for transform
|
||||||
|
+ coefficients. The values on each scaling list are expected
|
||||||
|
+ in raster scan order.
|
||||||
+ * - __u8
|
+ * - __u8
|
||||||
+ - ``scaling_list_dc_coef_32x32[2]``
|
+ - ``scaling_list_dc_coef_32x32[2]``
|
||||||
+ -
|
+ - Scaling list is used for the scaling process for transform
|
||||||
|
+ coefficients. The values on each scaling list are expected
|
||||||
|
+ in raster scan order.
|
||||||
+
|
+
|
||||||
``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE (enum)``
|
+.. raw:: latex
|
||||||
Specifies the decoding mode to use. Currently exposes slice-based and
|
+
|
||||||
frame-based decoding but new modes might be added later on.
|
+ \normalsize
|
||||||
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
|
+
|
||||||
index 7ed11f296008..a2609de88d26 100644
|
.. c:type:: v4l2_hevc_dpb_entry
|
||||||
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
|
|
||||||
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
|
.. raw:: latex
|
||||||
@@ -1026,6 +1026,7 @@ const char *v4l2_ctrl_get_name(u32 id)
|
diff --git a/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst b/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst
|
||||||
case V4L2_CID_MPEG_VIDEO_HEVC_SPS: return "HEVC Sequence Parameter Set";
|
index f9ecf6276129..2f491c17dd5d 100644
|
||||||
case V4L2_CID_MPEG_VIDEO_HEVC_PPS: return "HEVC Picture Parameter Set";
|
--- a/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst
|
||||||
case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS: return "HEVC Slice Parameters";
|
+++ b/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst
|
||||||
+ case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX: return "HEVC Scaling Matrix";
|
@@ -495,6 +495,12 @@ See also the examples in :ref:`control`.
|
||||||
case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE: return "HEVC Decode Mode";
|
- n/a
|
||||||
case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE: return "HEVC Start Code";
|
- A struct :c:type:`v4l2_ctrl_hevc_slice_params`, containing HEVC
|
||||||
|
slice parameters for stateless video decoders.
|
||||||
|
+ * - ``V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX``
|
||||||
|
+ - n/a
|
||||||
|
+ - n/a
|
||||||
|
+ - n/a
|
||||||
|
+ - A struct :c:type:`v4l2_ctrl_hevc_scaling_matrix`, containing HEVC
|
||||||
|
+ scaling matrix for stateless video decoders.
|
||||||
|
* - ``V4L2_CTRL_TYPE_VP8_FRAME``
|
||||||
|
- n/a
|
||||||
|
- n/a
|
||||||
|
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2-core/v4l2-ctrls-core.c
|
||||||
|
index b4802c9989fd..f557aca9d966 100644
|
||||||
|
--- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
|
||||||
|
+++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
|
||||||
|
@@ -906,6 +906,9 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
|
||||||
|
|
||||||
@@ -1475,6 +1476,9 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
|
|
||||||
case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
|
|
||||||
*type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
|
|
||||||
break;
|
|
||||||
+ case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:
|
|
||||||
+ *type = V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX;
|
|
||||||
+ break;
|
|
||||||
case V4L2_CID_UNIT_CELL_SIZE:
|
|
||||||
*type = V4L2_CTRL_TYPE_AREA;
|
|
||||||
*flags |= V4L2_CTRL_FLAG_READ_ONLY;
|
|
||||||
@@ -2167,6 +2171,9 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
|
|
||||||
zero_padding(*p_hevc_slice_params);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
+ case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
|
+ case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
|
||||||
@ -97,18 +120,40 @@ index 7ed11f296008..a2609de88d26 100644
|
|||||||
case V4L2_CTRL_TYPE_AREA:
|
case V4L2_CTRL_TYPE_AREA:
|
||||||
area = p;
|
area = p;
|
||||||
if (!area->width || !area->height)
|
if (!area->width || !area->height)
|
||||||
@@ -2883,6 +2890,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
|
@@ -1465,6 +1468,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
|
||||||
case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
|
case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
|
||||||
elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
|
elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
|
||||||
break;
|
break;
|
||||||
+ case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
|
+ case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
|
||||||
+ elem_size = sizeof(struct v4l2_ctrl_hevc_scaling_matrix);
|
+ elem_size = sizeof(struct v4l2_ctrl_hevc_scaling_matrix);
|
||||||
+ break;
|
+ break;
|
||||||
case V4L2_CTRL_TYPE_AREA:
|
case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
|
||||||
elem_size = sizeof(struct v4l2_area);
|
elem_size = sizeof(struct v4l2_ctrl_hevc_decode_params);
|
||||||
|
break;
|
||||||
|
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
|
||||||
|
index 22a031e25499..bca21812e216 100644
|
||||||
|
--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
|
||||||
|
+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
|
||||||
|
@@ -1001,6 +1001,7 @@ const char *v4l2_ctrl_get_name(u32 id)
|
||||||
|
case V4L2_CID_MPEG_VIDEO_HEVC_SPS: return "HEVC Sequence Parameter Set";
|
||||||
|
case V4L2_CID_MPEG_VIDEO_HEVC_PPS: return "HEVC Picture Parameter Set";
|
||||||
|
case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS: return "HEVC Slice Parameters";
|
||||||
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX: return "HEVC Scaling Matrix";
|
||||||
|
case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS: return "HEVC Decode Parameters";
|
||||||
|
case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE: return "HEVC Decode Mode";
|
||||||
|
case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE: return "HEVC Start Code";
|
||||||
|
@@ -1502,6 +1503,9 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
|
||||||
|
case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
|
||||||
|
*type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
|
||||||
|
break;
|
||||||
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:
|
||||||
|
+ *type = V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX;
|
||||||
|
+ break;
|
||||||
|
case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS:
|
||||||
|
*type = V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS;
|
||||||
break;
|
break;
|
||||||
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
|
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
|
||||||
index 1009cf0891cc..1592e52c3614 100644
|
index 53c0038c792b..0e5c4a2eecff 100644
|
||||||
--- a/include/media/hevc-ctrls.h
|
--- a/include/media/hevc-ctrls.h
|
||||||
+++ b/include/media/hevc-ctrls.h
|
+++ b/include/media/hevc-ctrls.h
|
||||||
@@ -19,6 +19,7 @@
|
@@ -19,6 +19,7 @@
|
||||||
@ -116,18 +161,18 @@ index 1009cf0891cc..1592e52c3614 100644
|
|||||||
#define V4L2_CID_MPEG_VIDEO_HEVC_PPS (V4L2_CID_CODEC_BASE + 1009)
|
#define V4L2_CID_MPEG_VIDEO_HEVC_PPS (V4L2_CID_CODEC_BASE + 1009)
|
||||||
#define V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS (V4L2_CID_CODEC_BASE + 1010)
|
#define V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS (V4L2_CID_CODEC_BASE + 1010)
|
||||||
+#define V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX (V4L2_CID_CODEC_BASE + 1011)
|
+#define V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX (V4L2_CID_CODEC_BASE + 1011)
|
||||||
|
#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS (V4L2_CID_CODEC_BASE + 1012)
|
||||||
#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE (V4L2_CID_CODEC_BASE + 1015)
|
#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE (V4L2_CID_CODEC_BASE + 1015)
|
||||||
#define V4L2_CID_MPEG_VIDEO_HEVC_START_CODE (V4L2_CID_CODEC_BASE + 1016)
|
#define V4L2_CID_MPEG_VIDEO_HEVC_START_CODE (V4L2_CID_CODEC_BASE + 1016)
|
||||||
|
@@ -27,6 +28,7 @@
|
||||||
@@ -26,6 +27,7 @@
|
|
||||||
#define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
|
#define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
|
||||||
#define V4L2_CTRL_TYPE_HEVC_PPS 0x0121
|
#define V4L2_CTRL_TYPE_HEVC_PPS 0x0121
|
||||||
#define V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS 0x0122
|
#define V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS 0x0122
|
||||||
+#define V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX 0x0123
|
+#define V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX 0x0123
|
||||||
|
#define V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS 0x0124
|
||||||
|
|
||||||
enum v4l2_mpeg_video_hevc_decode_mode {
|
enum v4l2_mpeg_video_hevc_decode_mode {
|
||||||
V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
|
@@ -224,6 +226,15 @@ struct v4l2_ctrl_hevc_decode_params {
|
||||||
@@ -209,4 +211,13 @@ struct v4l2_ctrl_hevc_slice_params {
|
|
||||||
__u64 flags;
|
__u64 flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -140,70 +185,59 @@ index 1009cf0891cc..1592e52c3614 100644
|
|||||||
+ __u8 scaling_list_dc_coef_32x32[2];
|
+ __u8 scaling_list_dc_coef_32x32[2];
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
#endif
|
/* MPEG-class control IDs specific to the Hantro driver as defined by V4L2 */
|
||||||
|
#define V4L2_CID_CODEC_HANTRO_BASE (V4L2_CTRL_CLASS_CODEC | 0x1200)
|
||||||
|
/*
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
From: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||||
Date: Sat, 26 Oct 2019 15:42:28 +0200
|
Date: Sun, 6 Jun 2021 10:23:13 +0200
|
||||||
Subject: [PATCH] media: uapi: hevc: Add segment address field
|
Subject: [PATCH] media: hevc: Add segment address field
|
||||||
|
|
||||||
If HEVC frame consists of multiple slices, segment address has to be
|
If HEVC frame consists of multiple slices, segment address has to be
|
||||||
known in order to properly decode it.
|
known in order to properly decode it.
|
||||||
|
|
||||||
Add segment address field to slice parameters.
|
Add segment address field to slice parameters.
|
||||||
|
|
||||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||||
|
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
|
||||||
|
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
|
||||||
---
|
---
|
||||||
Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 5 ++++-
|
Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 3 +++
|
||||||
include/media/hevc-ctrls.h | 5 ++++-
|
include/media/hevc-ctrls.h | 3 ++-
|
||||||
2 files changed, 8 insertions(+), 2 deletions(-)
|
2 files changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
||||||
index 81529b1d8d69..817773791888 100644
|
index dc08368d62fe..9b25674fcd40 100644
|
||||||
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
||||||
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
|
||||||
@@ -4661,6 +4661,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
|
@@ -3000,6 +3000,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
|
||||||
* - __u32
|
* - __u8
|
||||||
- ``data_bit_offset``
|
- ``pic_struct``
|
||||||
- Offset (in bits) to the video data in the current slice data.
|
-
|
||||||
+ * - __u32
|
+ * - __u32
|
||||||
+ - ``slice_segment_addr``
|
+ - ``slice_segment_addr``
|
||||||
+ -
|
+ -
|
||||||
* - __u8
|
* - __u8
|
||||||
- ``nal_unit_type``
|
- ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
|
||||||
-
|
- The list of L0 reference elements as indices in the DPB.
|
||||||
@@ -4738,7 +4741,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
|
|
||||||
- ``num_rps_poc_lt_curr``
|
|
||||||
- The number of reference pictures in the long-term set.
|
|
||||||
* - __u8
|
|
||||||
- - ``padding[7]``
|
|
||||||
+ - ``padding[5]``
|
|
||||||
- Applications and drivers must set this to zero.
|
|
||||||
* - struct :c:type:`v4l2_hevc_dpb_entry`
|
|
||||||
- ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
|
|
||||||
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
|
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
|
||||||
index 1592e52c3614..3e2e32098312 100644
|
index 0e5c4a2eecff..ef63bc205756 100644
|
||||||
--- a/include/media/hevc-ctrls.h
|
--- a/include/media/hevc-ctrls.h
|
||||||
+++ b/include/media/hevc-ctrls.h
|
+++ b/include/media/hevc-ctrls.h
|
||||||
@@ -167,6 +167,9 @@ struct v4l2_ctrl_hevc_slice_params {
|
@@ -198,10 +198,11 @@ struct v4l2_ctrl_hevc_slice_params {
|
||||||
__u32 bit_size;
|
__u8 pic_struct;
|
||||||
__u32 data_bit_offset;
|
|
||||||
|
|
||||||
+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
|
|
||||||
+ __u32 slice_segment_addr;
|
|
||||||
+
|
|
||||||
/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
|
|
||||||
__u8 nal_unit_type;
|
|
||||||
__u8 nuh_temporal_id_plus1;
|
|
||||||
@@ -200,7 +203,7 @@ struct v4l2_ctrl_hevc_slice_params {
|
|
||||||
__u8 num_rps_poc_st_curr_after;
|
|
||||||
__u8 num_rps_poc_lt_curr;
|
|
||||||
|
|
||||||
- __u8 padding;
|
|
||||||
+ __u8 padding[5];
|
|
||||||
|
|
||||||
/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
|
/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
|
||||||
struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
|
+ __u32 slice_segment_addr;
|
||||||
|
__u8 ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
|
||||||
|
__u8 ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
|
||||||
|
|
||||||
|
- __u8 padding[5];
|
||||||
|
+ __u8 padding;
|
||||||
|
|
||||||
|
/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
|
||||||
|
struct v4l2_hevc_pred_weight_table pred_weight_table;
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Jonas Karlman <jonas@kwiboo.se>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
@ -214,46 +248,40 @@ NOTE: these fields are used by rkvdec hevc backend
|
|||||||
|
|
||||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||||
---
|
---
|
||||||
include/media/hevc-ctrls.h | 16 ++++++++++++----
|
include/media/hevc-ctrls.h | 12 ++++++++++--
|
||||||
1 file changed, 12 insertions(+), 4 deletions(-)
|
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
|
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
|
||||||
index 3e2e32098312..3cc3b47e1417 100644
|
index ef63bc205756..a808894e8c76 100644
|
||||||
--- a/include/media/hevc-ctrls.h
|
--- a/include/media/hevc-ctrls.h
|
||||||
+++ b/include/media/hevc-ctrls.h
|
+++ b/include/media/hevc-ctrls.h
|
||||||
@@ -56,6 +56,9 @@ enum v4l2_mpeg_video_hevc_start_code {
|
@@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
|
||||||
/* The controls are not stable at the moment and will likely be reworked. */
|
/* The controls are not stable at the moment and will likely be reworked. */
|
||||||
struct v4l2_ctrl_hevc_sps {
|
struct v4l2_ctrl_hevc_sps {
|
||||||
/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
|
/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
|
||||||
+ __u8 video_parameter_set_id;
|
+ __u8 video_parameter_set_id;
|
||||||
+ __u8 seq_parameter_set_id;
|
+ __u8 seq_parameter_set_id;
|
||||||
+ __u8 chroma_format_idc;
|
|
||||||
__u16 pic_width_in_luma_samples;
|
__u16 pic_width_in_luma_samples;
|
||||||
__u16 pic_height_in_luma_samples;
|
__u16 pic_height_in_luma_samples;
|
||||||
__u8 bit_depth_luma_minus8;
|
__u8 bit_depth_luma_minus8;
|
||||||
@@ -76,9 +79,8 @@ struct v4l2_ctrl_hevc_sps {
|
@@ -81,6 +83,8 @@ struct v4l2_ctrl_hevc_sps {
|
||||||
__u8 log2_diff_max_min_pcm_luma_coding_block_size;
|
__u8 chroma_format_idc;
|
||||||
__u8 num_short_term_ref_pic_sets;
|
__u8 sps_max_sub_layers_minus1;
|
||||||
__u8 num_long_term_ref_pics_sps;
|
|
||||||
- __u8 chroma_format_idc;
|
|
||||||
|
|
||||||
- __u8 padding;
|
|
||||||
+ __u8 padding[7];
|
|
||||||
|
|
||||||
|
+ __u8 padding[6];
|
||||||
|
+
|
||||||
__u64 flags;
|
__u64 flags;
|
||||||
};
|
};
|
||||||
@@ -105,7 +107,10 @@ struct v4l2_ctrl_hevc_sps {
|
|
||||||
|
@@ -108,6 +112,7 @@ struct v4l2_ctrl_hevc_sps {
|
||||||
|
|
||||||
struct v4l2_ctrl_hevc_pps {
|
struct v4l2_ctrl_hevc_pps {
|
||||||
/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
|
/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
|
||||||
+ __u8 pic_parameter_set_id;
|
+ __u8 pic_parameter_set_id;
|
||||||
__u8 num_extra_slice_header_bits;
|
__u8 num_extra_slice_header_bits;
|
||||||
+ __u8 num_ref_idx_l0_default_active_minus1;
|
__u8 num_ref_idx_l0_default_active_minus1;
|
||||||
+ __u8 num_ref_idx_l1_default_active_minus1;
|
__u8 num_ref_idx_l1_default_active_minus1;
|
||||||
__s8 init_qp_minus26;
|
@@ -123,7 +128,7 @@ struct v4l2_ctrl_hevc_pps {
|
||||||
__u8 diff_cu_qp_delta_depth;
|
|
||||||
__s8 pps_cb_qp_offset;
|
|
||||||
@@ -118,7 +123,7 @@ struct v4l2_ctrl_hevc_pps {
|
|
||||||
__s8 pps_tc_offset_div2;
|
__s8 pps_tc_offset_div2;
|
||||||
__u8 log2_parallel_merge_level_minus2;
|
__u8 log2_parallel_merge_level_minus2;
|
||||||
|
|
||||||
@ -262,18 +290,18 @@ index 3e2e32098312..3cc3b47e1417 100644
|
|||||||
__u64 flags;
|
__u64 flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -203,7 +208,10 @@ struct v4l2_ctrl_hevc_slice_params {
|
@@ -202,7 +207,10 @@ struct v4l2_ctrl_hevc_slice_params {
|
||||||
__u8 num_rps_poc_st_curr_after;
|
__u8 ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
|
||||||
__u8 num_rps_poc_lt_curr;
|
__u8 ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
|
||||||
|
|
||||||
- __u8 padding[5];
|
- __u8 padding;
|
||||||
+ __u16 short_term_ref_pic_set_size;
|
+ __u16 short_term_ref_pic_set_size;
|
||||||
+ __u16 long_term_ref_pic_set_size;
|
+ __u16 long_term_ref_pic_set_size;
|
||||||
+
|
+
|
||||||
+ __u8 padding;
|
+ __u8 padding[4];
|
||||||
|
|
||||||
/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
|
/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
|
||||||
struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
|
struct v4l2_hevc_pred_weight_table pred_weight_table;
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Jonas Karlman <jonas@kwiboo.se>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
@ -281,42 +309,34 @@ Date: Sat, 23 May 2020 15:07:15 +0000
|
|||||||
Subject: [PATCH] HACK: media: uapi: hevc: tiles and num_slices
|
Subject: [PATCH] HACK: media: uapi: hevc: tiles and num_slices
|
||||||
|
|
||||||
---
|
---
|
||||||
include/media/hevc-ctrls.h | 8 ++++++--
|
include/media/hevc-ctrls.h | 7 +++++--
|
||||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
|
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
|
||||||
index 3cc3b47e1417..b33e1a8141e1 100644
|
index a808894e8c76..f1b8756521b9 100644
|
||||||
--- a/include/media/hevc-ctrls.h
|
--- a/include/media/hevc-ctrls.h
|
||||||
+++ b/include/media/hevc-ctrls.h
|
+++ b/include/media/hevc-ctrls.h
|
||||||
@@ -80,7 +80,8 @@ struct v4l2_ctrl_hevc_sps {
|
@@ -83,7 +83,8 @@ struct v4l2_ctrl_hevc_sps {
|
||||||
__u8 num_short_term_ref_pic_sets;
|
__u8 chroma_format_idc;
|
||||||
__u8 num_long_term_ref_pics_sps;
|
__u8 sps_max_sub_layers_minus1;
|
||||||
|
|
||||||
- __u8 padding[7];
|
- __u8 padding[6];
|
||||||
+ __u8 num_slices;
|
+ __u8 num_slices;
|
||||||
+ __u8 padding[6];
|
+ __u8 padding[5];
|
||||||
|
|
||||||
__u64 flags;
|
__u64 flags;
|
||||||
};
|
};
|
||||||
@@ -174,6 +175,7 @@ struct v4l2_ctrl_hevc_slice_params {
|
@@ -210,7 +211,9 @@ struct v4l2_ctrl_hevc_slice_params {
|
||||||
|
|
||||||
/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
|
|
||||||
__u32 slice_segment_addr;
|
|
||||||
+ __u32 num_entry_point_offsets;
|
|
||||||
|
|
||||||
/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
|
|
||||||
__u8 nal_unit_type;
|
|
||||||
@@ -211,7 +213,9 @@ struct v4l2_ctrl_hevc_slice_params {
|
|
||||||
__u16 short_term_ref_pic_set_size;
|
__u16 short_term_ref_pic_set_size;
|
||||||
__u16 long_term_ref_pic_set_size;
|
__u16 long_term_ref_pic_set_size;
|
||||||
|
|
||||||
- __u8 padding;
|
- __u8 padding[4];
|
||||||
+ __u8 padding[5];
|
+ __u32 num_entry_point_offsets;
|
||||||
+
|
|
||||||
+ __u32 entry_point_offset_minus1[256];
|
+ __u32 entry_point_offset_minus1[256];
|
||||||
|
+ __u8 padding[8];
|
||||||
|
|
||||||
/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
|
/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
|
||||||
struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
|
struct v4l2_hevc_pred_weight_table pred_weight_table;
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Jonas Karlman <jonas@kwiboo.se>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
@ -331,9 +351,9 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
|||||||
drivers/staging/media/rkvdec/Makefile | 2 +-
|
drivers/staging/media/rkvdec/Makefile | 2 +-
|
||||||
drivers/staging/media/rkvdec/rkvdec-hevc.c | 2522 ++++++++++++++++++++
|
drivers/staging/media/rkvdec/rkvdec-hevc.c | 2522 ++++++++++++++++++++
|
||||||
drivers/staging/media/rkvdec/rkvdec-regs.h | 1 +
|
drivers/staging/media/rkvdec/rkvdec-regs.h | 1 +
|
||||||
drivers/staging/media/rkvdec/rkvdec.c | 70 +
|
drivers/staging/media/rkvdec/rkvdec.c | 67 +
|
||||||
drivers/staging/media/rkvdec/rkvdec.h | 1 +
|
drivers/staging/media/rkvdec/rkvdec.h | 1 +
|
||||||
5 files changed, 2595 insertions(+), 1 deletion(-)
|
5 files changed, 2592 insertions(+), 1 deletion(-)
|
||||||
create mode 100644 drivers/staging/media/rkvdec/rkvdec-hevc.c
|
create mode 100644 drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/Makefile b/drivers/staging/media/rkvdec/Makefile
|
diff --git a/drivers/staging/media/rkvdec/Makefile b/drivers/staging/media/rkvdec/Makefile
|
||||||
@ -347,7 +367,7 @@ index cb86b429cfaa..a77122641d14 100644
|
|||||||
+rockchip-vdec-y += rkvdec.o rkvdec-h264.o rkvdec-hevc.o rkvdec-vp9.o
|
+rockchip-vdec-y += rkvdec.o rkvdec-h264.o rkvdec-hevc.o rkvdec-vp9.o
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 000000000000..03ba848411c6
|
index 000000000000..c3cceba837c2
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
@@ -0,0 +1,2522 @@
|
@@ -0,0 +1,2522 @@
|
||||||
@ -2886,11 +2906,11 @@ index 3acc914888f6..4addfaefdfb4 100644
|
|||||||
#define RKVDEC_MODE_VP9 2
|
#define RKVDEC_MODE_VP9 2
|
||||||
#define RKVDEC_RPS_MODE BIT(24)
|
#define RKVDEC_RPS_MODE BIT(24)
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index f3578c5ea902..a44db1aa161e 100644
|
index 2c0c6dcbd066..c269e4a21a29 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -162,6 +162,57 @@ static const u32 rkvdec_h264_decoded_fmts[] = {
|
@@ -147,6 +147,58 @@ static const struct rkvdec_ctrl_desc rkvdec_h264_ctrl_descs[] = {
|
||||||
V4L2_PIX_FMT_NV20,
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
+static const struct rkvdec_ctrl_desc rkvdec_hevc_ctrl_descs[] = {
|
+static const struct rkvdec_ctrl_desc rkvdec_hevc_ctrl_descs[] = {
|
||||||
@ -2944,10 +2964,11 @@ index f3578c5ea902..a44db1aa161e 100644
|
|||||||
+ V4L2_PIX_FMT_NV15,
|
+ V4L2_PIX_FMT_NV15,
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
static const struct rkvdec_ctrl_desc rkvdec_vp9_ctrl_descs[] = {
|
+
|
||||||
{
|
static const struct rkvdec_ctrls rkvdec_h264_ctrls = {
|
||||||
.mandatory = true,
|
.ctrls = rkvdec_h264_ctrl_descs,
|
||||||
@@ -212,6 +267,21 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
.num_ctrls = ARRAY_SIZE(rkvdec_h264_ctrl_descs),
|
||||||
|
@@ -208,6 +260,21 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||||
.num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_decoded_fmts),
|
.num_decoded_fmts = ARRAY_SIZE(rkvdec_h264_decoded_fmts),
|
||||||
.decoded_fmts = rkvdec_h264_decoded_fmts,
|
.decoded_fmts = rkvdec_h264_decoded_fmts,
|
||||||
},
|
},
|
||||||
@ -2970,10 +2991,10 @@ index f3578c5ea902..a44db1aa161e 100644
|
|||||||
.fourcc = V4L2_PIX_FMT_VP9_FRAME,
|
.fourcc = V4L2_PIX_FMT_VP9_FRAME,
|
||||||
.frmsize = {
|
.frmsize = {
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
index d760c3609e2c..975fe4b5dd68 100644
|
index 18dd721172d8..d60840c179a4 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
@@ -132,6 +132,7 @@ void rkvdec_run_preamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
@@ -131,6 +131,7 @@ void rkvdec_run_preamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
||||||
void rkvdec_run_postamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
void rkvdec_run_postamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run);
|
||||||
|
|
||||||
extern const struct rkvdec_coded_fmt_ops rkvdec_h264_fmt_ops;
|
extern const struct rkvdec_coded_fmt_ops rkvdec_h264_fmt_ops;
|
||||||
@ -2982,6 +3003,132 @@ index d760c3609e2c..975fe4b5dd68 100644
|
|||||||
|
|
||||||
#endif /* RKVDEC_H_ */
|
#endif /* RKVDEC_H_ */
|
||||||
|
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
|
Date: Sat, 21 Aug 2021 16:01:43 +0200
|
||||||
|
Subject: [PATCH] media: rkvdec: hevc: adapt for 5.14 uAPI
|
||||||
|
|
||||||
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
|
---
|
||||||
|
drivers/staging/media/rkvdec/rkvdec-hevc.c | 29 +++++++++++++---------
|
||||||
|
drivers/staging/media/rkvdec/rkvdec.c | 3 +++
|
||||||
|
2 files changed, 20 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
|
index c3cceba837c2..5c341b5fa534 100644
|
||||||
|
--- a/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
|
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
|
@@ -116,6 +116,7 @@ struct rkvdec_hevc_priv_tbl {
|
||||||
|
struct rkvdec_hevc_run {
|
||||||
|
struct rkvdec_run base;
|
||||||
|
const struct v4l2_ctrl_hevc_slice_params *slices_params;
|
||||||
|
+ const struct v4l2_ctrl_hevc_decode_params *decode_params;
|
||||||
|
const struct v4l2_ctrl_hevc_sps *sps;
|
||||||
|
const struct v4l2_ctrl_hevc_pps *pps;
|
||||||
|
const struct v4l2_ctrl_hevc_scaling_matrix *scaling_matrix;
|
||||||
|
@@ -2179,6 +2180,7 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx,
|
||||||
|
static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||||
|
struct rkvdec_hevc_run *run)
|
||||||
|
{
|
||||||
|
+ const struct v4l2_ctrl_hevc_decode_params *decode_params = run->decode_params;
|
||||||
|
const struct v4l2_ctrl_hevc_slice_params *sl_params;
|
||||||
|
const struct v4l2_hevc_dpb_entry *dpb;
|
||||||
|
struct rkvdec_hevc_ctx *hevc_ctx = ctx->priv;
|
||||||
|
@@ -2200,7 +2202,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||||
|
|
||||||
|
for (j = 0; j < run->num_slices; j++) {
|
||||||
|
sl_params = &run->slices_params[j];
|
||||||
|
- dpb = sl_params->dpb;
|
||||||
|
+ dpb = decode_params->dpb;
|
||||||
|
|
||||||
|
hw_ps = &priv_tbl->rps[j];
|
||||||
|
memset(hw_ps, 0, sizeof(*hw_ps));
|
||||||
|
@@ -2228,9 +2230,9 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||||
|
WRITE_RPS(sl_params->long_term_ref_pic_set_size,
|
||||||
|
LONG_TERM_REF_PIC_SET_SIZE);
|
||||||
|
|
||||||
|
- WRITE_RPS(sl_params->num_rps_poc_st_curr_before +
|
||||||
|
- sl_params->num_rps_poc_st_curr_after +
|
||||||
|
- sl_params->num_rps_poc_lt_curr,
|
||||||
|
+ WRITE_RPS(decode_params->num_poc_st_curr_before +
|
||||||
|
+ decode_params->num_poc_st_curr_after +
|
||||||
|
+ decode_params->num_poc_lt_curr,
|
||||||
|
NUM_RPS_POC);
|
||||||
|
|
||||||
|
//WRITE_RPS(0x3ffff, PS_FIELD(206, 18));
|
||||||
|
@@ -2280,12 +2282,12 @@ get_ref_buf(struct rkvdec_ctx *ctx, struct rkvdec_hevc_run *run,
|
||||||
|
unsigned int dpb_idx)
|
||||||
|
{
|
||||||
|
struct v4l2_m2m_ctx *m2m_ctx = ctx->fh.m2m_ctx;
|
||||||
|
- const struct v4l2_ctrl_hevc_slice_params *sl_params = &run->slices_params[0];
|
||||||
|
- const struct v4l2_hevc_dpb_entry *dpb = sl_params->dpb;
|
||||||
|
+ const struct v4l2_ctrl_hevc_decode_params *decode_params = run->decode_params;
|
||||||
|
+ const struct v4l2_hevc_dpb_entry *dpb = decode_params->dpb;
|
||||||
|
struct vb2_queue *cap_q = &m2m_ctx->cap_q_ctx.q;
|
||||||
|
int buf_idx = -1;
|
||||||
|
|
||||||
|
- if (dpb_idx < sl_params->num_active_dpb_entries)
|
||||||
|
+ if (dpb_idx < decode_params->num_active_dpb_entries)
|
||||||
|
buf_idx = vb2_find_timestamp(cap_q,
|
||||||
|
dpb[dpb_idx].timestamp, 0);
|
||||||
|
|
||||||
|
@@ -2303,8 +2305,9 @@ static void config_registers(struct rkvdec_ctx *ctx,
|
||||||
|
struct rkvdec_hevc_run *run)
|
||||||
|
{
|
||||||
|
struct rkvdec_dev *rkvdec = ctx->dev;
|
||||||
|
+ const struct v4l2_ctrl_hevc_decode_params *decode_params = run->decode_params;
|
||||||
|
const struct v4l2_ctrl_hevc_slice_params *sl_params = &run->slices_params[0];
|
||||||
|
- const struct v4l2_hevc_dpb_entry *dpb = sl_params->dpb;
|
||||||
|
+ const struct v4l2_hevc_dpb_entry *dpb = decode_params->dpb;
|
||||||
|
struct rkvdec_hevc_ctx *hevc_ctx = ctx->priv;
|
||||||
|
dma_addr_t priv_start_addr = hevc_ctx->priv_tbl.dma;
|
||||||
|
const struct v4l2_pix_format_mplane *dst_fmt;
|
||||||
|
@@ -2366,8 +2369,8 @@ static void config_registers(struct rkvdec_ctx *ctx,
|
||||||
|
for (i = 0; i < 15; i++) {
|
||||||
|
struct vb2_buffer *vb_buf = get_ref_buf(ctx, run, i);
|
||||||
|
|
||||||
|
- if (i < 4 && sl_params->num_active_dpb_entries) {
|
||||||
|
- reg = GENMASK(sl_params->num_active_dpb_entries - 1, 0);
|
||||||
|
+ if (i < 4 && decode_params->num_active_dpb_entries) {
|
||||||
|
+ reg = GENMASK(decode_params->num_active_dpb_entries - 1, 0);
|
||||||
|
reg = (reg >> (i * 4)) & 0xf;
|
||||||
|
} else
|
||||||
|
reg = 0;
|
||||||
|
@@ -2376,7 +2379,7 @@ static void config_registers(struct rkvdec_ctx *ctx,
|
||||||
|
writel_relaxed(refer_addr | reg,
|
||||||
|
rkvdec->regs + RKVDEC_REG_H264_BASE_REFER(i));
|
||||||
|
|
||||||
|
- reg = RKVDEC_POC_REFER(i < sl_params->num_active_dpb_entries ? dpb[i].pic_order_cnt[0] : 0);
|
||||||
|
+ reg = RKVDEC_POC_REFER(i < decode_params->num_active_dpb_entries ? dpb[i].pic_order_cnt[0] : 0);
|
||||||
|
writel_relaxed(reg,
|
||||||
|
rkvdec->regs + RKVDEC_REG_H264_POC_REFER0(i));
|
||||||
|
}
|
||||||
|
@@ -2461,7 +2464,9 @@ static void rkvdec_hevc_run_preamble(struct rkvdec_ctx *ctx,
|
||||||
|
struct rkvdec_hevc_run *run)
|
||||||
|
{
|
||||||
|
struct v4l2_ctrl *ctrl;
|
||||||
|
-
|
||||||
|
+ ctrl = v4l2_ctrl_find(&ctx->ctrl_hdl,
|
||||||
|
+ V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS);
|
||||||
|
+ run->decode_params = ctrl ? ctrl->p_cur.p : NULL;
|
||||||
|
ctrl = v4l2_ctrl_find(&ctx->ctrl_hdl,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS);
|
||||||
|
run->slices_params = ctrl ? ctrl->p_cur.p : NULL;
|
||||||
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
|
index c269e4a21a29..e91c2b3e9fd9 100644
|
||||||
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
|
@@ -163,6 +163,9 @@ static const struct rkvdec_ctrl_desc rkvdec_hevc_ctrl_descs[] = {
|
||||||
|
{
|
||||||
|
.cfg.id = V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX,
|
||||||
|
},
|
||||||
|
+ {
|
||||||
|
+ .cfg.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
|
||||||
|
+ },
|
||||||
|
{
|
||||||
|
.cfg.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE,
|
||||||
|
.cfg.min = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Jonas Karlman <jonas@kwiboo.se>
|
From: Jonas Karlman <jonas@kwiboo.se>
|
||||||
Date: Sat, 1 Aug 2020 12:24:58 +0000
|
Date: Sat, 1 Aug 2020 12:24:58 +0000
|
||||||
@ -2993,10 +3140,10 @@ Subject: [PATCH] WIP: media: rkvdec: add HEVC format validation
|
|||||||
2 files changed, 33 insertions(+), 1 deletion(-)
|
2 files changed, 33 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
index 03ba848411c6..b8ad7fc2271c 100644
|
index 5c341b5fa534..8ea2ad9f4f3a 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
@@ -2415,6 +2415,16 @@ static int rkvdec_hevc_adjust_fmt(struct rkvdec_ctx *ctx,
|
@@ -2418,6 +2418,16 @@ static int rkvdec_hevc_adjust_fmt(struct rkvdec_ctx *ctx,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3013,7 +3160,7 @@ index 03ba848411c6..b8ad7fc2271c 100644
|
|||||||
static int rkvdec_hevc_start(struct rkvdec_ctx *ctx)
|
static int rkvdec_hevc_start(struct rkvdec_ctx *ctx)
|
||||||
{
|
{
|
||||||
struct rkvdec_dev *rkvdec = ctx->dev;
|
struct rkvdec_dev *rkvdec = ctx->dev;
|
||||||
@@ -2516,6 +2526,7 @@ static int rkvdec_hevc_run(struct rkvdec_ctx *ctx)
|
@@ -2521,6 +2531,7 @@ static int rkvdec_hevc_run(struct rkvdec_ctx *ctx)
|
||||||
|
|
||||||
const struct rkvdec_coded_fmt_ops rkvdec_hevc_fmt_ops = {
|
const struct rkvdec_coded_fmt_ops rkvdec_hevc_fmt_ops = {
|
||||||
.adjust_fmt = rkvdec_hevc_adjust_fmt,
|
.adjust_fmt = rkvdec_hevc_adjust_fmt,
|
||||||
@ -3022,7 +3169,7 @@ index 03ba848411c6..b8ad7fc2271c 100644
|
|||||||
.stop = rkvdec_hevc_stop,
|
.stop = rkvdec_hevc_stop,
|
||||||
.run = rkvdec_hevc_run,
|
.run = rkvdec_hevc_run,
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index a44db1aa161e..7419ae7027ab 100644
|
index e91c2b3e9fd9..da32a6350344 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -79,6 +79,26 @@ static int rkvdec_try_ctrl(struct v4l2_ctrl *ctrl)
|
@@ -79,6 +79,26 @@ static int rkvdec_try_ctrl(struct v4l2_ctrl *ctrl)
|
||||||
@ -3056,19 +3203,19 @@ index a44db1aa161e..7419ae7027ab 100644
|
|||||||
{
|
{
|
||||||
struct rkvdec_ctx *ctx = container_of(ctrl->handler, struct rkvdec_ctx, ctrl_hdl);
|
struct rkvdec_ctx *ctx = container_of(ctrl->handler, struct rkvdec_ctx, ctrl_hdl);
|
||||||
|
|
||||||
- if (ctrl->id == V4L2_CID_MPEG_VIDEO_H264_SPS && !ctx->valid_fmt) {
|
- if (ctrl->id == V4L2_CID_STATELESS_H264_SPS && !ctx->valid_fmt) {
|
||||||
+ if (!ctx->valid_fmt) {
|
+ if (!ctx->valid_fmt) {
|
||||||
ctx->valid_fmt = rkvdec_valid_fmt(ctx, ctrl);
|
ctx->valid_fmt = rkvdec_valid_fmt(ctx, ctrl);
|
||||||
if (ctx->valid_fmt) {
|
if (ctx->valid_fmt) {
|
||||||
struct v4l2_pix_format_mplane *pix_mp;
|
struct v4l2_pix_format_mplane *pix_mp;
|
||||||
@@ -173,6 +193,7 @@ static const struct rkvdec_ctrl_desc rkvdec_hevc_ctrl_descs[] = {
|
@@ -156,6 +176,7 @@ static const struct rkvdec_ctrl_desc rkvdec_hevc_ctrl_descs[] = {
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.mandatory = true,
|
|
||||||
.cfg.id = V4L2_CID_MPEG_VIDEO_HEVC_SPS,
|
.cfg.id = V4L2_CID_MPEG_VIDEO_HEVC_SPS,
|
||||||
+ .cfg.ops = &rkvdec_ctrl_ops,
|
+ .cfg.ops = &rkvdec_ctrl_ops,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.mandatory = true,
|
.cfg.id = V4L2_CID_MPEG_VIDEO_HEVC_PPS,
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
@ -3082,10 +3229,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
index b8ad7fc2271c..943f3f4a644a 100644
|
index 8ea2ad9f4f3a..58ae8a1a4ff3 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
@@ -2164,9 +2164,9 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx,
|
@@ -2165,9 +2165,9 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx,
|
||||||
for (i = 0; i <= pps->num_tile_rows_minus1; i++)
|
for (i = 0; i <= pps->num_tile_rows_minus1; i++)
|
||||||
WRITE_PPS(pps->row_height_minus1[i], ROW_HEIGHT(i));
|
WRITE_PPS(pps->row_height_minus1[i], ROW_HEIGHT(i));
|
||||||
} else {
|
} else {
|
||||||
@ -3109,10 +3256,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
index 943f3f4a644a..93b4e09e5bf1 100644
|
index 58ae8a1a4ff3..55bf61a84165 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
@@ -2194,8 +2194,8 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
@@ -2196,8 +2196,8 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||||
#define REF_PIC_IDX_L1(i) PS_FIELD((i < 4 ? 76 : 128) + (i * 5), 4)
|
#define REF_PIC_IDX_L1(i) PS_FIELD((i < 4 ? 76 : 128) + (i * 5), 4)
|
||||||
|
|
||||||
#define LOWDELAY PS_FIELD(182, 1)
|
#define LOWDELAY PS_FIELD(182, 1)
|
||||||
@ -3123,7 +3270,7 @@ index 943f3f4a644a..93b4e09e5bf1 100644
|
|||||||
#define NUM_RPS_POC PS_FIELD(202, 4)
|
#define NUM_RPS_POC PS_FIELD(202, 4)
|
||||||
|
|
||||||
for (j = 0; j < run->num_slices; j++) {
|
for (j = 0; j < run->num_slices; j++) {
|
||||||
@@ -2222,11 +2222,11 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
@@ -2224,11 +2224,11 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||||
// TODO: lowdelay
|
// TODO: lowdelay
|
||||||
WRITE_RPS(0, LOWDELAY);
|
WRITE_RPS(0, LOWDELAY);
|
||||||
|
|
||||||
@ -3137,8 +3284,8 @@ index 943f3f4a644a..93b4e09e5bf1 100644
|
|||||||
- LONG_TERM_REF_PIC_SET_SIZE);
|
- LONG_TERM_REF_PIC_SET_SIZE);
|
||||||
+ SHORT_TERM_RPS_BIT_OFFSET);
|
+ SHORT_TERM_RPS_BIT_OFFSET);
|
||||||
|
|
||||||
WRITE_RPS(sl_params->num_rps_poc_st_curr_before +
|
WRITE_RPS(decode_params->num_poc_st_curr_before +
|
||||||
sl_params->num_rps_poc_st_curr_after +
|
decode_params->num_poc_st_curr_after +
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
@ -3148,13 +3295,13 @@ Subject: [PATCH] WIP: media: rkvdec: hevc: implement lowdelay
|
|||||||
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
||||||
---
|
---
|
||||||
drivers/staging/media/rkvdec/rkvdec-hevc.c | 16 ++++++++++++++--
|
drivers/staging/media/rkvdec/rkvdec-hevc.c | 16 ++++++++++++++--
|
||||||
1 files changed, 14 insertions(+), 2 deletions(-)
|
1 file changed, 14 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec-hevc.c b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
index 93b4e09e5bf1..8a94fc04980f 100644
|
index 55bf61a84165..3cca79282111 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
--- a/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec-hevc.c
|
||||||
@@ -2185,6 +2185,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
@@ -2187,6 +2187,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||||
struct rkvdec_hevc_priv_tbl *priv_tbl = hevc_ctx->priv_tbl.cpu;
|
struct rkvdec_hevc_priv_tbl *priv_tbl = hevc_ctx->priv_tbl.cpu;
|
||||||
struct rkvdec_rps_packet *hw_ps;
|
struct rkvdec_rps_packet *hw_ps;
|
||||||
int i, j;
|
int i, j;
|
||||||
@ -3162,15 +3309,15 @@ index 93b4e09e5bf1..8a94fc04980f 100644
|
|||||||
|
|
||||||
#define WRITE_RPS(value, field) set_ps_field(hw_ps->info, field, value)
|
#define WRITE_RPS(value, field) set_ps_field(hw_ps->info, field, value)
|
||||||
|
|
||||||
@@ -2201,6 +2202,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
@@ -2203,6 +2204,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||||
for (j = 0; j < run->num_slices; j++) {
|
for (j = 0; j < run->num_slices; j++) {
|
||||||
sl_params = &run->slices_params[j];
|
sl_params = &run->slices_params[j];
|
||||||
dpb = sl_params->dpb;
|
dpb = decode_params->dpb;
|
||||||
+ lowdelay = 0;
|
+ lowdelay = 0;
|
||||||
|
|
||||||
hw_ps = &priv_tbl->rps[j];
|
hw_ps = &priv_tbl->rps[j];
|
||||||
memset(hw_ps, 0, sizeof(*hw_ps));
|
memset(hw_ps, 0, sizeof(*hw_ps));
|
||||||
@@ -2219,8 +2221,18 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
@@ -2221,8 +2223,18 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
|
||||||
|
|
||||||
//WRITE_RPS(0xffffffff, PS_FIELD(96, 32));
|
//WRITE_RPS(0xffffffff, PS_FIELD(96, 32));
|
||||||
|
|
||||||
@ -3179,7 +3326,7 @@ index 93b4e09e5bf1..8a94fc04980f 100644
|
|||||||
+ if (sl_params->slice_type != V4L2_HEVC_SLICE_TYPE_I &&
|
+ if (sl_params->slice_type != V4L2_HEVC_SLICE_TYPE_I &&
|
||||||
+ !(!!(sl_params->flags & V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT))) {
|
+ !(!!(sl_params->flags & V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT))) {
|
||||||
+ lowdelay = 1;
|
+ lowdelay = 1;
|
||||||
+ for (i = 0; i < sl_params->num_active_dpb_entries; i++) {
|
+ for (i = 0; i < decode_params->num_active_dpb_entries; i++) {
|
||||||
+ if (dpb[i].pic_order_cnt[0] > sl_params->slice_pic_order_cnt) {
|
+ if (dpb[i].pic_order_cnt[0] > sl_params->slice_pic_order_cnt) {
|
||||||
+ lowdelay = 0;
|
+ lowdelay = 0;
|
||||||
+ break;
|
+ break;
|
||||||
@ -3191,6 +3338,7 @@ index 93b4e09e5bf1..8a94fc04980f 100644
|
|||||||
|
|
||||||
WRITE_RPS(sl_params->long_term_ref_pic_set_size +
|
WRITE_RPS(sl_params->long_term_ref_pic_set_size +
|
||||||
sl_params->short_term_ref_pic_set_size,
|
sl_params->short_term_ref_pic_set_size,
|
||||||
|
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Alex Bee <knaerzche@gmail.com>
|
From: Alex Bee <knaerzche@gmail.com>
|
||||||
Date: Sat, 30 Jan 2021 18:16:39 +0100
|
Date: Sat, 30 Jan 2021 18:16:39 +0100
|
||||||
@ -3213,7 +3361,7 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
2 files changed, 84 insertions(+), 30 deletions(-)
|
2 files changed, 84 insertions(+), 30 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index 7419ae7027ab..ab8b42f4f98c 100644
|
index da32a6350344..4fb05e8b5a54 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -14,6 +14,7 @@
|
@@ -14,6 +14,7 @@
|
||||||
@ -3224,7 +3372,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/pm.h>
|
#include <linux/pm.h>
|
||||||
#include <linux/pm_runtime.h>
|
#include <linux/pm_runtime.h>
|
||||||
@@ -273,21 +274,6 @@ static const u32 rkvdec_vp9_decoded_fmts[] = {
|
@@ -269,21 +270,6 @@ static const u32 rkvdec_vp9_decoded_fmts[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||||
@ -3246,7 +3394,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
{
|
{
|
||||||
.fourcc = V4L2_PIX_FMT_HEVC_SLICE,
|
.fourcc = V4L2_PIX_FMT_HEVC_SLICE,
|
||||||
.frmsize = {
|
.frmsize = {
|
||||||
@@ -302,6 +288,23 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
@@ -298,6 +284,23 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||||
.ops = &rkvdec_hevc_fmt_ops,
|
.ops = &rkvdec_hevc_fmt_ops,
|
||||||
.num_decoded_fmts = ARRAY_SIZE(rkvdec_hevc_decoded_fmts),
|
.num_decoded_fmts = ARRAY_SIZE(rkvdec_hevc_decoded_fmts),
|
||||||
.decoded_fmts = rkvdec_hevc_decoded_fmts,
|
.decoded_fmts = rkvdec_hevc_decoded_fmts,
|
||||||
@ -3270,7 +3418,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.fourcc = V4L2_PIX_FMT_VP9_FRAME,
|
.fourcc = V4L2_PIX_FMT_VP9_FRAME,
|
||||||
@@ -317,16 +320,31 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
@@ -313,16 +316,31 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = {
|
||||||
.ops = &rkvdec_vp9_fmt_ops,
|
.ops = &rkvdec_vp9_fmt_ops,
|
||||||
.num_decoded_fmts = ARRAY_SIZE(rkvdec_vp9_decoded_fmts),
|
.num_decoded_fmts = ARRAY_SIZE(rkvdec_vp9_decoded_fmts),
|
||||||
.decoded_fmts = rkvdec_vp9_decoded_fmts,
|
.decoded_fmts = rkvdec_vp9_decoded_fmts,
|
||||||
@ -3305,7 +3453,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
return &rkvdec_coded_fmts[i];
|
return &rkvdec_coded_fmts[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -349,7 +367,7 @@ static void rkvdec_reset_coded_fmt(struct rkvdec_ctx *ctx)
|
@@ -345,7 +363,7 @@ static void rkvdec_reset_coded_fmt(struct rkvdec_ctx *ctx)
|
||||||
{
|
{
|
||||||
struct v4l2_format *f = &ctx->coded_fmt;
|
struct v4l2_format *f = &ctx->coded_fmt;
|
||||||
|
|
||||||
@ -3314,7 +3462,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->fourcc);
|
rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->fourcc);
|
||||||
|
|
||||||
f->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
|
f->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
|
||||||
@@ -376,11 +394,13 @@ static int rkvdec_enum_framesizes(struct file *file, void *priv,
|
@@ -372,11 +390,13 @@ static int rkvdec_enum_framesizes(struct file *file, void *priv,
|
||||||
struct v4l2_frmsizeenum *fsize)
|
struct v4l2_frmsizeenum *fsize)
|
||||||
{
|
{
|
||||||
const struct rkvdec_coded_fmt_desc *fmt;
|
const struct rkvdec_coded_fmt_desc *fmt;
|
||||||
@ -3329,7 +3477,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
if (!fmt)
|
if (!fmt)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@@ -451,10 +471,11 @@ static int rkvdec_try_output_fmt(struct file *file, void *priv,
|
@@ -447,10 +467,11 @@ static int rkvdec_try_output_fmt(struct file *file, void *priv,
|
||||||
struct rkvdec_ctx *ctx = fh_to_rkvdec_ctx(priv);
|
struct rkvdec_ctx *ctx = fh_to_rkvdec_ctx(priv);
|
||||||
const struct rkvdec_coded_fmt_desc *desc;
|
const struct rkvdec_coded_fmt_desc *desc;
|
||||||
|
|
||||||
@ -3344,7 +3492,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
v4l2_apply_frmsize_constraints(&pix_mp->width,
|
v4l2_apply_frmsize_constraints(&pix_mp->width,
|
||||||
@@ -541,7 +562,8 @@ static int rkvdec_s_output_fmt(struct file *file, void *priv,
|
@@ -537,7 +558,8 @@ static int rkvdec_s_output_fmt(struct file *file, void *priv,
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -3354,7 +3502,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
if (!desc)
|
if (!desc)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
ctx->coded_fmt_desc = desc;
|
ctx->coded_fmt_desc = desc;
|
||||||
@@ -589,7 +611,10 @@ static int rkvdec_g_capture_fmt(struct file *file, void *priv,
|
@@ -585,7 +607,10 @@ static int rkvdec_g_capture_fmt(struct file *file, void *priv,
|
||||||
static int rkvdec_enum_output_fmt(struct file *file, void *priv,
|
static int rkvdec_enum_output_fmt(struct file *file, void *priv,
|
||||||
struct v4l2_fmtdesc *f)
|
struct v4l2_fmtdesc *f)
|
||||||
{
|
{
|
||||||
@ -3366,7 +3514,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
f->pixelformat = rkvdec_coded_fmts[f->index].fourcc;
|
f->pixelformat = rkvdec_coded_fmts[f->index].fourcc;
|
||||||
@@ -1040,14 +1065,17 @@ static int rkvdec_init_ctrls(struct rkvdec_ctx *ctx)
|
@@ -993,14 +1018,17 @@ static int rkvdec_init_ctrls(struct rkvdec_ctx *ctx)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++)
|
for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++)
|
||||||
@ -3388,7 +3536,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret = v4l2_ctrl_handler_setup(&ctx->ctrl_hdl);
|
ret = v4l2_ctrl_handler_setup(&ctx->ctrl_hdl);
|
||||||
@@ -1251,8 +1279,17 @@ static void rkvdec_watchdog_func(struct work_struct *work)
|
@@ -1204,8 +1232,17 @@ static void rkvdec_watchdog_func(struct work_struct *work)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3407,7 +3555,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
{ /* sentinel */ }
|
{ /* sentinel */ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, of_rkvdec_match);
|
MODULE_DEVICE_TABLE(of, of_rkvdec_match);
|
||||||
@@ -1265,6 +1302,7 @@ static int rkvdec_probe(struct platform_device *pdev)
|
@@ -1218,6 +1255,7 @@ static int rkvdec_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct rkvdec_dev *rkvdec;
|
struct rkvdec_dev *rkvdec;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
@ -3415,7 +3563,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
unsigned int i;
|
unsigned int i;
|
||||||
int ret, irq;
|
int ret, irq;
|
||||||
|
|
||||||
@@ -1290,6 +1328,12 @@ static int rkvdec_probe(struct platform_device *pdev)
|
@@ -1243,6 +1281,12 @@ static int rkvdec_probe(struct platform_device *pdev)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -3429,7 +3577,7 @@ index 7419ae7027ab..ab8b42f4f98c 100644
|
|||||||
* Don't bump ACLK to max. possible freq. (500 MHz) to improve performance,
|
* Don't bump ACLK to max. possible freq. (500 MHz) to improve performance,
|
||||||
* since it will lead to non-recoverable decoder lockups in case of decoding
|
* since it will lead to non-recoverable decoder lockups in case of decoding
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.h b/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
index 975fe4b5dd68..cc505bc4a042 100644
|
index d60840c179a4..ac1e7d053f62 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
--- a/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
+++ b/drivers/staging/media/rkvdec/rkvdec.h
|
||||||
@@ -29,6 +29,10 @@
|
@@ -29,6 +29,10 @@
|
||||||
@ -3443,7 +3591,7 @@ index 975fe4b5dd68..cc505bc4a042 100644
|
|||||||
struct rkvdec_ctx;
|
struct rkvdec_ctx;
|
||||||
|
|
||||||
struct rkvdec_ctrl_desc {
|
struct rkvdec_ctrl_desc {
|
||||||
@@ -71,6 +75,10 @@ vb2_to_rkvdec_decoded_buf(struct vb2_buffer *buf)
|
@@ -70,6 +74,10 @@ vb2_to_rkvdec_decoded_buf(struct vb2_buffer *buf)
|
||||||
base.vb.vb2_buf);
|
base.vb.vb2_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3454,7 +3602,7 @@ index 975fe4b5dd68..cc505bc4a042 100644
|
|||||||
struct rkvdec_coded_fmt_ops {
|
struct rkvdec_coded_fmt_ops {
|
||||||
int (*adjust_fmt)(struct rkvdec_ctx *ctx,
|
int (*adjust_fmt)(struct rkvdec_ctx *ctx,
|
||||||
struct v4l2_format *f);
|
struct v4l2_format *f);
|
||||||
@@ -90,6 +98,7 @@ struct rkvdec_coded_fmt_desc {
|
@@ -89,6 +97,7 @@ struct rkvdec_coded_fmt_desc {
|
||||||
const struct rkvdec_coded_fmt_ops *ops;
|
const struct rkvdec_coded_fmt_ops *ops;
|
||||||
unsigned int num_decoded_fmts;
|
unsigned int num_decoded_fmts;
|
||||||
const u32 *decoded_fmts;
|
const u32 *decoded_fmts;
|
||||||
@ -3462,7 +3610,7 @@ index 975fe4b5dd68..cc505bc4a042 100644
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct rkvdec_dev {
|
struct rkvdec_dev {
|
||||||
@@ -104,6 +113,7 @@ struct rkvdec_dev {
|
@@ -103,6 +112,7 @@ struct rkvdec_dev {
|
||||||
struct delayed_work watchdog_work;
|
struct delayed_work watchdog_work;
|
||||||
struct reset_control *rstc;
|
struct reset_control *rstc;
|
||||||
u8 reset_mask;
|
u8 reset_mask;
|
||||||
@ -3485,10 +3633,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 8 insertions(+)
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
index ab8b42f4f98c..162623567a1d 100644
|
index 4fb05e8b5a54..8767b1149009 100644
|
||||||
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
--- a/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
+++ b/drivers/staging/media/rkvdec/rkvdec.c
|
||||||
@@ -1285,11 +1285,19 @@ static const struct rkvdec_variant rk3399_rkvdec_variant = {
|
@@ -1238,11 +1238,19 @@ static const struct rkvdec_variant rk3399_rkvdec_variant = {
|
||||||
RKVDEC_CAPABILITY_VP9
|
RKVDEC_CAPABILITY_VP9
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3520,10 +3668,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 20 insertions(+), 1 deletion(-)
|
1 file changed, 20 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
index 746acfac1e92..32e141a3955b 100644
|
index 831484253e27..64b36cc8ef94 100644
|
||||||
--- a/arch/arm/boot/dts/rk3288.dtsi
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
@@ -1271,6 +1271,25 @@ vpu_mmu: iommu@ff9a0800 {
|
@@ -1252,6 +1252,25 @@ vpu_mmu: iommu@ff9a0800 {
|
||||||
power-domains = <&power RK3288_PD_VIDEO>;
|
power-domains = <&power RK3288_PD_VIDEO>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3549,7 +3697,7 @@ index 746acfac1e92..32e141a3955b 100644
|
|||||||
hevc_mmu: iommu@ff9c0440 {
|
hevc_mmu: iommu@ff9c0440 {
|
||||||
compatible = "rockchip,iommu";
|
compatible = "rockchip,iommu";
|
||||||
reg = <0x0 0xff9c0440 0x0 0x40>, <0x0 0xff9c0480 0x0 0x40>;
|
reg = <0x0 0xff9c0440 0x0 0x40>, <0x0 0xff9c0480 0x0 0x40>;
|
||||||
@@ -1279,7 +1298,7 @@ hevc_mmu: iommu@ff9c0440 {
|
@@ -1260,7 +1279,7 @@ hevc_mmu: iommu@ff9c0440 {
|
||||||
clocks = <&cru ACLK_HEVC>, <&cru HCLK_HEVC>;
|
clocks = <&cru ACLK_HEVC>, <&cru HCLK_HEVC>;
|
||||||
clock-names = "aclk", "iface";
|
clock-names = "aclk", "iface";
|
||||||
#iommu-cells = <0>;
|
#iommu-cells = <0>;
|
||||||
|
@ -109,10 +109,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
create mode 100644 drivers/media/platform/rockchip/iep/iep.h
|
create mode 100644 drivers/media/platform/rockchip/iep/iep.h
|
||||||
|
|
||||||
diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig
|
diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig
|
||||||
index 7e152bbb4fa6..eee78b20c791 100644
|
index 157c924686e4..d77056060c7f 100644
|
||||||
--- a/drivers/media/platform/Kconfig
|
--- a/drivers/media/platform/Kconfig
|
||||||
+++ b/drivers/media/platform/Kconfig
|
+++ b/drivers/media/platform/Kconfig
|
||||||
@@ -462,6 +462,20 @@ config VIDEO_RENESAS_VSP1
|
@@ -527,6 +527,20 @@ config VIDEO_RENESAS_VSP1
|
||||||
To compile this driver as a module, choose M here: the module
|
To compile this driver as a module, choose M here: the module
|
||||||
will be called vsp1.
|
will be called vsp1.
|
||||||
|
|
||||||
@ -134,10 +134,10 @@ index 7e152bbb4fa6..eee78b20c791 100644
|
|||||||
tristate "Rockchip Raster 2d Graphic Acceleration Unit"
|
tristate "Rockchip Raster 2d Graphic Acceleration Unit"
|
||||||
depends on VIDEO_DEV && VIDEO_V4L2
|
depends on VIDEO_DEV && VIDEO_V4L2
|
||||||
diff --git a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile
|
diff --git a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile
|
||||||
index 62b6cdc8c730..f99a873818d5 100644
|
index 73ce083c2fc6..d1cf1cf99027 100644
|
||||||
--- a/drivers/media/platform/Makefile
|
--- a/drivers/media/platform/Makefile
|
||||||
+++ b/drivers/media/platform/Makefile
|
+++ b/drivers/media/platform/Makefile
|
||||||
@@ -52,6 +52,7 @@ obj-$(CONFIG_VIDEO_RENESAS_FDP1) += rcar_fdp1.o
|
@@ -54,6 +54,7 @@ obj-$(CONFIG_VIDEO_RENESAS_FDP1) += rcar_fdp1.o
|
||||||
obj-$(CONFIG_VIDEO_RENESAS_JPU) += rcar_jpu.o
|
obj-$(CONFIG_VIDEO_RENESAS_JPU) += rcar_jpu.o
|
||||||
obj-$(CONFIG_VIDEO_RENESAS_VSP1) += vsp1/
|
obj-$(CONFIG_VIDEO_RENESAS_VSP1) += vsp1/
|
||||||
|
|
||||||
@ -1680,10 +1680,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 22 insertions(+)
|
1 file changed, 22 insertions(+)
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
index 0e5e492db9c7..f014b87c48f0 100644
|
index ca03c8ed9708..ef0d04afc1b1 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||||
@@ -771,6 +771,28 @@ vop_mmu: iommu@ff373f00 {
|
@@ -759,6 +759,28 @@ vop_mmu: iommu@ff373f00 {
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1724,10 +1724,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 12 insertions(+), 1 deletion(-)
|
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
index b1c7ee80d255..be839c1a7692 100644
|
index 27938ff0d208..9adfc422ae90 100644
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
|
||||||
@@ -1304,6 +1304,17 @@ vdec_mmu: iommu@ff660480 {
|
@@ -1286,14 +1286,25 @@ vdec_mmu: iommu@ff660480 {
|
||||||
#iommu-cells = <0>;
|
#iommu-cells = <0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1745,8 +1745,7 @@ index b1c7ee80d255..be839c1a7692 100644
|
|||||||
iep_mmu: iommu@ff670800 {
|
iep_mmu: iommu@ff670800 {
|
||||||
compatible = "rockchip,iommu";
|
compatible = "rockchip,iommu";
|
||||||
reg = <0x0 0xff670800 0x0 0x40>;
|
reg = <0x0 0xff670800 0x0 0x40>;
|
||||||
@@ -1311,8 +1322,8 @@ iep_mmu: iommu@ff670800 {
|
interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||||
interrupt-names = "iep_mmu";
|
|
||||||
clocks = <&cru ACLK_IEP>, <&cru HCLK_IEP>;
|
clocks = <&cru ACLK_IEP>, <&cru HCLK_IEP>;
|
||||||
clock-names = "aclk", "iface";
|
clock-names = "aclk", "iface";
|
||||||
+ power-domains = <&power RK3399_PD_IEP>;
|
+ power-domains = <&power RK3399_PD_IEP>;
|
||||||
@ -1767,10 +1766,10 @@ Signed-off-by: Alex Bee <knaerzche@gmail.com>
|
|||||||
1 file changed, 12 insertions(+), 1 deletion(-)
|
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
index 32e141a3955b..6b1523b38e53 100644
|
index 64b36cc8ef94..159c22805d03 100644
|
||||||
--- a/arch/arm/boot/dts/rk3288.dtsi
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
@@ -1002,6 +1002,17 @@ crypto: cypto-controller@ff8a0000 {
|
@@ -983,6 +983,17 @@ crypto: cypto-controller@ff8a0000 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1788,7 +1787,7 @@ index 32e141a3955b..6b1523b38e53 100644
|
|||||||
iep_mmu: iommu@ff900800 {
|
iep_mmu: iommu@ff900800 {
|
||||||
compatible = "rockchip,iommu";
|
compatible = "rockchip,iommu";
|
||||||
reg = <0x0 0xff900800 0x0 0x40>;
|
reg = <0x0 0xff900800 0x0 0x40>;
|
||||||
@@ -1009,8 +1020,8 @@ iep_mmu: iommu@ff900800 {
|
@@ -990,8 +1001,8 @@ iep_mmu: iommu@ff900800 {
|
||||||
interrupt-names = "iep_mmu";
|
interrupt-names = "iep_mmu";
|
||||||
clocks = <&cru ACLK_IEP>, <&cru HCLK_IEP>;
|
clocks = <&cru ACLK_IEP>, <&cru HCLK_IEP>;
|
||||||
clock-names = "aclk", "iface";
|
clock-names = "aclk", "iface";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user