mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
Merge commit '2551a5f146b52968d5058d62984cc3c4774f030e'
* commit '2551a5f146b52968d5058d62984cc3c4774f030e': ARM: rockchip_linux_defconfig: Enable CONFIG_WERROR media: rockchip: vpss: refactor v_1 for rk3576 media: rockchip: isp: set the dma_buf of wrap buf video: rockchip: dvbm: Fix typo drm/rockchip: drv: only rk3528/rk3566/rk3568/rk3588 need ovl lock mali400: mali: Add support to set clk to normal pll for rk3518 drm/rockchip: dw_dp: Set output_type in dw_dp_encoder_mode_valid() drm/rockchip: logo: check whether the bridge supports atomic mode before mode fixup ARM: dts: rockchip: add RK3518 evaluation board devicetree arm64: dts: rockchip: add RK3518 evaluation board devicetree arm64: dts: rockchip: add core dtsi for RK3518 Soc cpufreq: dt-platdev: Add rk3518 project into blacklist soc: rockchip: cpuinfo: Add support for rk3518 soc: rockchip: cpuinfo: Add support to parse 'cpu-code1' Change-Id: I6dd66f901c39c24ec4c64d66554c34cd16734679
This commit is contained in:
@@ -1239,6 +1239,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += \
|
||||
rk3506g-iotest-v10.dtb \
|
||||
rk3506g-iotest-v10-pdm.dtb \
|
||||
rk3506g-test1-v10-audio.dtb \
|
||||
rk3518-evb1-ddr4-v10.dtb \
|
||||
rk3528-demo4-ddr4-v10.dtb \
|
||||
rk3528-evb1-ddr4-v10.dtb \
|
||||
rk3528-evb2-ddr3-v10.dtb \
|
||||
|
||||
7
arch/arm/boot/dts/rk3518-evb1-ddr4-v10.dts
Normal file
7
arch/arm/boot/dts/rk3518-evb1-ddr4-v10.dts
Normal file
@@ -0,0 +1,7 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "arm64/rockchip/rk3518-evb1-ddr4-v10.dts"
|
||||
@@ -1,3 +1,4 @@
|
||||
CONFIG_WERROR=y
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_DEFAULT_HOSTNAME="localhost"
|
||||
CONFIG_SYSVIPC=y
|
||||
|
||||
@@ -96,6 +96,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-sapphire.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-sapphire-excavator.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-sapphire-excavator-edp-avb.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399pro-rock-pi-n10.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3518-evb1-ddr4-v10.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3528-demo1-lp4-v10.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3528-demo4-ddr4-v10.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3528-demo4-ddr4-v10-linux.dtb
|
||||
|
||||
644
arch/arm64/boot/dts/rockchip/rk3518-evb.dtsi
Normal file
644
arch/arm64/boot/dts/rockchip/rk3518-evb.dtsi
Normal file
@@ -0,0 +1,644 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "rk3518.dtsi"
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/rk-input.h>
|
||||
#include <dt-bindings/pinctrl/rockchip.h>
|
||||
#include "rk-stb-ir-keymap.dtsi"
|
||||
|
||||
/ {
|
||||
acodec_sound: acodec-sound {
|
||||
status = "okay";
|
||||
compatible = "simple-audio-card";
|
||||
simple-audio-card,name = "rk3528-acodec";
|
||||
simple-audio-card,format = "i2s";
|
||||
simple-audio-card,mclk-fs = <256>;
|
||||
simple-audio-card,cpu {
|
||||
sound-dai = <&sai2>;
|
||||
};
|
||||
simple-audio-card,codec {
|
||||
sound-dai = <&acodec>;
|
||||
};
|
||||
};
|
||||
|
||||
adc_keys: adc-keys {
|
||||
status = "okay";
|
||||
compatible = "adc-keys";
|
||||
io-channels = <&saradc 1>;
|
||||
io-channel-names = "buttons";
|
||||
keyup-threshold-microvolt = <1800000>;
|
||||
poll-interval = <100>;
|
||||
|
||||
vol-up-key {
|
||||
label = "volume up";
|
||||
linux,code = <KEY_VOLUMEUP>;
|
||||
press-threshold-microvolt = <1750>;
|
||||
};
|
||||
};
|
||||
|
||||
bt_sco: bt-sco {
|
||||
status = "disabled";
|
||||
compatible = "delta,dfbmcs320";
|
||||
#sound-dai-cells = <1>;
|
||||
};
|
||||
|
||||
bt_sound: bt-sound {
|
||||
status = "disabled";
|
||||
compatible = "simple-audio-card";
|
||||
simple-audio-card,format = "dsp_a";
|
||||
simple-audio-card,bitclock-inversion;
|
||||
simple-audio-card,mclk-fs = <256>;
|
||||
simple-audio-card,name = "rockchip,bt";
|
||||
simple-audio-card,cpu {
|
||||
sound-dai = <&sai0>;
|
||||
};
|
||||
simple-audio-card,codec {
|
||||
sound-dai = <&bt_sco 1>;
|
||||
};
|
||||
};
|
||||
|
||||
dc_12v: dc-12v {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "dc_12v";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <12000000>;
|
||||
regulator-max-microvolt = <12000000>;
|
||||
};
|
||||
|
||||
es7243_sound: es7243-sound {
|
||||
status = "disabled";
|
||||
compatible = "simple-audio-card";
|
||||
simple-audio-card,name = "rockchip,es7243";
|
||||
simple-audio-card,format = "i2s";
|
||||
simple-audio-card,mclk-fs = <256>;
|
||||
|
||||
simple-audio-card,cpu {
|
||||
sound-dai = <&sai1>;
|
||||
};
|
||||
simple-audio-card,codec {
|
||||
sound-dai = <&es7243e>;
|
||||
};
|
||||
};
|
||||
|
||||
hdmi_sound: hdmi-sound {
|
||||
compatible = "rockchip,hdmi";
|
||||
rockchip,mclk-fs = <128>;
|
||||
rockchip,card-name = "rockchip,hdmi";
|
||||
rockchip,cpu = <&sai3>;
|
||||
rockchip,codec = <&hdmi>;
|
||||
rockchip,jack-det;
|
||||
};
|
||||
|
||||
pdmics: dummy-codec {
|
||||
status = "disabled";
|
||||
compatible = "rockchip,dummy-codec";
|
||||
#sound-dai-cells = <0>;
|
||||
};
|
||||
|
||||
pdm_mic_array: pdm-mic-array {
|
||||
status = "disabled";
|
||||
compatible = "simple-audio-card";
|
||||
simple-audio-card,name = "rockchip,pdm-mic-array";
|
||||
simple-audio-card,cpu {
|
||||
sound-dai = <&pdm>;
|
||||
};
|
||||
simple-audio-card,codec {
|
||||
sound-dai = <&pdmics>;
|
||||
};
|
||||
};
|
||||
|
||||
spdif-sound {
|
||||
status = "okay";
|
||||
compatible = "simple-audio-card";
|
||||
simple-audio-card,name = "ROCKCHIP,SPDIF";
|
||||
simple-audio-card,mclk-fs = <128>;
|
||||
simple-audio-card,cpu {
|
||||
sound-dai = <&spdif_8ch>;
|
||||
};
|
||||
simple-audio-card,codec {
|
||||
sound-dai = <&spdif_out>;
|
||||
};
|
||||
};
|
||||
|
||||
spdif_out: spdif-out {
|
||||
status = "okay";
|
||||
compatible = "linux,spdif-dit";
|
||||
#sound-dai-cells = <0>;
|
||||
};
|
||||
|
||||
vcc5v0_sys: vcc5v0-sys {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc5v0_sys";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
vin-supply = <&dc_12v>;
|
||||
};
|
||||
|
||||
vcc5v0_host: vcc5v0-host-regulator {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc5v0_host";
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
enable-active-high;
|
||||
gpio = <&gpio4 RK_PB5 GPIO_ACTIVE_HIGH>;
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&vcc5v0_host_en>;
|
||||
};
|
||||
|
||||
vcc5v0_otg: vcc5v0-otg-regulator {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc5v0_otg";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
enable-active-high;
|
||||
gpio = <&gpio4 RK_PC1 GPIO_ACTIVE_HIGH>;
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&vcc5v0_otg_en>;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/
|
||||
vccio_sd: vccio-sd {
|
||||
compatible = "regulator-gpio";
|
||||
regulator-name = "vccio_sd";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>;
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
states = <1800000 0x0
|
||||
3300000 0x1>;
|
||||
};
|
||||
|
||||
vdd_cpu: vdd_logic: vdd_gpu: vdd-cpu {
|
||||
compatible = "pwm-regulator";
|
||||
pwms = <&pwm1 0 5000 1>;
|
||||
regulator-name = "vdd_cpu";
|
||||
regulator-min-microvolt = <746000>;
|
||||
regulator-max-microvolt = <1201000>;
|
||||
regulator-init-microvolt = <953000>;
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-settling-time-up-us = <250>;
|
||||
pwm-supply = <&vcc5v0_sys>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
vdd_0v9_s3: vdd-0v9-s3 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vdd_0v9_s3";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-max-microvolt = <900000>;
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
|
||||
vdd_1v8_s3: vdd-1v8-s3 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vdd_1v8_s3";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
|
||||
vcc_3v3_s3: vcc-3v3-s3 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc_3v3_s3";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/
|
||||
vcc_sd: vcc-sd {
|
||||
compatible = "regulator-fixed";
|
||||
gpio = <&gpio4 RK_PA1 GPIO_ACTIVE_LOW>;
|
||||
regulator-name = "vcc_sd";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
vin-supply = <&vcc_3v3_s3>;
|
||||
};
|
||||
|
||||
vcc_ddr_s3: vcc-ddr-s3 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc_ddr_s3";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <1200000>;
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
};
|
||||
|
||||
&acodec {
|
||||
pa-ctl-gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&avsd {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&combphy_pu {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&cpu0 {
|
||||
cpu-supply = <&vdd_cpu>;
|
||||
};
|
||||
|
||||
&crypto {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dfi {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&display_subsystem {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dmc {
|
||||
center-supply = <&vdd_logic>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gmac0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpu {
|
||||
mali-supply = <&vdd_gpu>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&hdmi {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&hdmi_in_vp0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&hdmiphy {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c6 {
|
||||
status = "disabled";
|
||||
es7243e: es7243e@10 {
|
||||
status = "okay";
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "ES7243E_MicArray_0";
|
||||
reg = <0x10>;
|
||||
};
|
||||
|
||||
es7243e_11: es7243e@11 {
|
||||
status = "okay";
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "ES7243E_MicArray_1";
|
||||
reg = <0x11>;
|
||||
};
|
||||
|
||||
es7243e_12: es7243e@12 {
|
||||
status = "okay";
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "ES7243E_MicArray_2";
|
||||
reg = <0x12>;
|
||||
};
|
||||
};
|
||||
|
||||
&iep {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iep_mmu {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&jpegd {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&jpegd_mmu {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&mpp_srv {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
usb {
|
||||
vcc5v0_host_en: vcc5v0-host-en {
|
||||
rockchip,pins = <4 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
vcc5v0_otg_en: vcc5v0-otg-en {
|
||||
rockchip,pins = <4 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pwm0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pwm1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pwm2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pwm3 {
|
||||
compatible = "rockchip,remotectl-pwm";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pwm3m0_pins>;
|
||||
remote_pwm_id = <3>;
|
||||
handle_cpu_id = <1>;
|
||||
remote_support_psci = <0>;
|
||||
status = "okay";
|
||||
|
||||
ir_key1 {
|
||||
rockchip,usercode = <0x4040>;
|
||||
rockchip,key_table =
|
||||
<0xf2 KEY_REPLY>,
|
||||
<0xba KEY_BACK>,
|
||||
<0xf4 KEY_UP>,
|
||||
<0xf1 KEY_DOWN>,
|
||||
<0xef KEY_LEFT>,
|
||||
<0xee KEY_RIGHT>,
|
||||
<0xbd KEY_HOME>,
|
||||
<0xea KEY_VOLUMEUP>,
|
||||
<0xe3 KEY_VOLUMEDOWN>,
|
||||
<0xe2 KEY_SEARCH>,
|
||||
<0xb2 KEY_POWER>,
|
||||
<0xbc KEY_MUTE>,
|
||||
<0xec KEY_MENU>,
|
||||
<0xbf 0x190>,
|
||||
<0xe0 0x191>,
|
||||
<0xe1 0x192>,
|
||||
<0xe9 183>,
|
||||
<0xe6 248>,
|
||||
<0xe8 185>,
|
||||
<0xe7 186>,
|
||||
<0xf0 388>,
|
||||
<0xbe 0x175>;
|
||||
};
|
||||
|
||||
ir_key2 {
|
||||
rockchip,usercode = <0xff00>;
|
||||
rockchip,key_table =
|
||||
<0xf9 KEY_HOME>,
|
||||
<0xbf KEY_BACK>,
|
||||
<0xfb KEY_MENU>,
|
||||
<0xaa KEY_REPLY>,
|
||||
<0xb9 KEY_UP>,
|
||||
<0xe9 KEY_DOWN>,
|
||||
<0xb8 KEY_LEFT>,
|
||||
<0xea KEY_RIGHT>,
|
||||
<0xeb KEY_VOLUMEDOWN>,
|
||||
<0xef KEY_VOLUMEUP>,
|
||||
<0xf7 KEY_MUTE>,
|
||||
<0xe7 KEY_POWER>,
|
||||
<0xfc KEY_POWER>,
|
||||
<0xa9 KEY_VOLUMEDOWN>,
|
||||
<0xa8 KEY_PLAYPAUSE>,
|
||||
<0xe0 KEY_VOLUMEDOWN>,
|
||||
<0xa5 KEY_VOLUMEDOWN>,
|
||||
<0xab 183>,
|
||||
<0xb7 388>,
|
||||
<0xe8 388>,
|
||||
<0xf8 184>,
|
||||
<0xaf 185>,
|
||||
<0xed KEY_VOLUMEDOWN>,
|
||||
<0xee 186>,
|
||||
<0xb3 KEY_VOLUMEDOWN>,
|
||||
<0xf1 KEY_VOLUMEDOWN>,
|
||||
<0xf2 KEY_VOLUMEDOWN>,
|
||||
<0xf3 KEY_SEARCH>,
|
||||
<0xb4 KEY_VOLUMEDOWN>,
|
||||
<0xa4 KEY_SETUP>,
|
||||
<0xbe KEY_SEARCH>;
|
||||
};
|
||||
|
||||
ir_key3 {
|
||||
rockchip,usercode = <0x1dcc>;
|
||||
rockchip,key_table =
|
||||
<0xee KEY_REPLY>,
|
||||
<0xf0 KEY_BACK>,
|
||||
<0xf8 KEY_UP>,
|
||||
<0xbb KEY_DOWN>,
|
||||
<0xef KEY_LEFT>,
|
||||
<0xed KEY_RIGHT>,
|
||||
<0xfc KEY_HOME>,
|
||||
<0xf1 KEY_VOLUMEUP>,
|
||||
<0xfd KEY_VOLUMEDOWN>,
|
||||
<0xb7 KEY_SEARCH>,
|
||||
<0xff KEY_POWER>,
|
||||
<0xf3 KEY_MUTE>,
|
||||
<0xbf KEY_MENU>,
|
||||
<0xf9 0x191>,
|
||||
<0xf5 0x192>,
|
||||
<0xb3 388>,
|
||||
<0xbe KEY_1>,
|
||||
<0xba KEY_2>,
|
||||
<0xb2 KEY_3>,
|
||||
<0xbd KEY_4>,
|
||||
<0xf9 KEY_5>,
|
||||
<0xb1 KEY_6>,
|
||||
<0xfc KEY_7>,
|
||||
<0xf8 KEY_8>,
|
||||
<0xb0 KEY_9>,
|
||||
<0xb6 KEY_0>,
|
||||
<0xb5 KEY_BACKSPACE>;
|
||||
};
|
||||
};
|
||||
|
||||
&rga2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rga2_mmu {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rkvdec {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rkvdec_mmu {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rkvenc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rkvenc_mmu {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rkvtunnel {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rockchip_suspend {
|
||||
status = "okay";
|
||||
rockchip,sleep-debug-en = <1>;
|
||||
rockchip,virtual-poweroff = <1>;
|
||||
rockchip,sleep-mode-config = <
|
||||
(0
|
||||
| RKPM_SLP_ARMPD
|
||||
)
|
||||
>;
|
||||
rockchip,wakeup-config = <
|
||||
(0
|
||||
| RKPM_CPU0_WKUP_EN
|
||||
| RKPM_GPIO_WKUP_EN
|
||||
)
|
||||
>;
|
||||
rockchip,pwm-regulator-config = <
|
||||
(0
|
||||
| RKPM_PWM0_M0_REGULATOR_EN
|
||||
| RKPM_PWM1_M0_REGULATOR_EN
|
||||
)
|
||||
>;
|
||||
};
|
||||
|
||||
&sai0 {
|
||||
pinctrl-0 = <&i2s0m1_lrck &i2s0m1_sclk &i2s0m1_sdi &i2s0m1_sdo>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&sai2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sai3 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&saradc {
|
||||
status = "okay";
|
||||
vref-supply = <&vdd_1v8_s3>;
|
||||
};
|
||||
|
||||
&sdhci {
|
||||
bus-width = <8>;
|
||||
no-sd;
|
||||
no-sdio;
|
||||
non-removable;
|
||||
mmc-hs400-1_8v;
|
||||
mmc-hs400-enhanced-strobe;
|
||||
max-frequency = <200000000>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sdmmc {
|
||||
bus-width = <4>;
|
||||
cap-mmc-highspeed;
|
||||
cap-sd-highspeed;
|
||||
disable-wp;
|
||||
max-frequency = <150000000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_det &sdmmc_bus4>;
|
||||
rockchip,default-sample-phase = <90>;
|
||||
supports-sd;
|
||||
sd-uhs-sdr12;
|
||||
sd-uhs-sdr25;
|
||||
sd-uhs-sdr50;
|
||||
sd-uhs-sdr104;
|
||||
vqmmc-supply = <&vccio_sd>;
|
||||
vmmc-supply = <&vcc_sd>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&sfc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&spdif_8ch {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&tsadc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&tve {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&tve_in_vp1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&u2phy_host {
|
||||
phy-supply = <&vcc5v0_host>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&u2phy_otg {
|
||||
vbus-supply = <&vcc5v0_otg>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb2phy {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_host0_ehci {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_host0_ohci {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbdrd30 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbdrd_dwc3 {
|
||||
dr_mode = "otg";
|
||||
extcon = <&usb2phy>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&vdpp {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&vdpu {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&vdpu_mmu {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&vop {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&vop_mmu {
|
||||
status = "okay";
|
||||
};
|
||||
12
arch/arm64/boot/dts/rockchip/rk3518-evb1-ddr4-v10.dts
Normal file
12
arch/arm64/boot/dts/rockchip/rk3518-evb1-ddr4-v10.dts
Normal file
@@ -0,0 +1,12 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "rk3518-evb1-ddr4-v10.dtsi"
|
||||
#include "rk3528-android.dtsi"
|
||||
|
||||
&sdmmc {
|
||||
status = "okay";
|
||||
};
|
||||
108
arch/arm64/boot/dts/rockchip/rk3518-evb1-ddr4-v10.dtsi
Normal file
108
arch/arm64/boot/dts/rockchip/rk3518-evb1-ddr4-v10.dtsi
Normal file
@@ -0,0 +1,108 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
|
||||
*
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include "rk3518.dtsi"
|
||||
#include "rk3518-evb.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Rockchip RK3518 EVB1 DDR4 V10 Board";
|
||||
compatible = "rockchip,rk3518-evb1-ddr4-v10", "rockchip,rk3518";
|
||||
|
||||
sdio_pwrseq: sdio-pwrseq {
|
||||
compatible = "mmc-pwrseq-simple";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&wifi_enable_h &clkm1_32k_out>;
|
||||
post-power-on-delay-ms = <200>;
|
||||
reset-gpios = <&gpio1 RK_PA6 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
wireless_bluetooth: wireless-bluetooth {
|
||||
compatible = "bluetooth-platdata";
|
||||
//wifi-bt-power-toggle;
|
||||
uart_rts_gpios = <&gpio1 RK_PB2 GPIO_ACTIVE_LOW>;
|
||||
pinctrl-names = "default", "rts_gpio";
|
||||
pinctrl-0 = <&uart2m1_rtsn>;
|
||||
pinctrl-1 = <&uart2m1_gpios>;
|
||||
BT,reset_gpio = <&gpio1 RK_PC1 GPIO_ACTIVE_HIGH>;
|
||||
BT,wake_gpio = <&gpio1 RK_PB4 GPIO_ACTIVE_HIGH>;
|
||||
BT,wake_host_irq = <&gpio1 RK_PC2 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
wireless_wlan: wireless-wlan {
|
||||
compatible = "wlan-platdata";
|
||||
rockchip,grf = <&grf>;
|
||||
wifi_chip_type = "ap6275s";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&wifi_host_wake_irq>;
|
||||
WIFI,host_wake_irq = <&gpio1 RK_PA7 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&es7243_sound {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&i2c6 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sai1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sdio0 {
|
||||
max-frequency = <200000000>;
|
||||
no-sd;
|
||||
no-mmc;
|
||||
supports-sdio;
|
||||
bus-width = <4>;
|
||||
disable-wp;
|
||||
cap-sd-highspeed;
|
||||
cap-sdio-irq;
|
||||
keep-power-in-suspend;
|
||||
non-removable;
|
||||
mmc-pwrseq = <&sdio_pwrseq>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
|
||||
sd-uhs-sdr104;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
status = "okay";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart2m1_xfer &uart2m1_ctsn>;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
sdio-pwrseq {
|
||||
wifi_enable_h: wifi-enable-h {
|
||||
rockchip,pins = <1 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
wifi_32k: wifi-32k {
|
||||
rockchip,pins = <1 RK_PC3 1 &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
|
||||
wireless-wlan {
|
||||
wifi_host_wake_irq: wifi-host-wake-irq {
|
||||
rockchip,pins = <1 RK_PA7 RK_FUNC_GPIO &pcfg_pull_down>;
|
||||
};
|
||||
};
|
||||
|
||||
wireless-bluetooth {
|
||||
uart2m1_gpios: uart2m1-gpios {
|
||||
rockchip,pins = <1 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
};
|
||||
161
arch/arm64/boot/dts/rockchip/rk3518.dtsi
Normal file
161
arch/arm64/boot/dts/rockchip/rk3518.dtsi
Normal file
@@ -0,0 +1,161 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
|
||||
*/
|
||||
|
||||
#include "rk3528.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "rockchip,rk3518";
|
||||
|
||||
aliases {
|
||||
/delete-property/ ethernet1;
|
||||
};
|
||||
|
||||
/delete-node/ cpuinfo;
|
||||
cpuinfo {
|
||||
compatible = "rockchip,cpuinfo";
|
||||
nvmem-cells = <&otp_id>, <&otp_cpu_version>,
|
||||
<&cpu_code>, <&cpu_code1>;
|
||||
nvmem-cell-names = "id", "cpu-version",
|
||||
"cpu-code", "cpu-code1";
|
||||
};
|
||||
};
|
||||
|
||||
&cpu0_opp_table {
|
||||
rockchip,video-4k-freq = <1200000>;
|
||||
rockchip,pvtm-voltage-sel = <
|
||||
0 1420 0
|
||||
1410 1444 1
|
||||
1445 1474 2
|
||||
1475 1509 3
|
||||
1510 1544 4
|
||||
1545 1579 5
|
||||
1580 1619 6
|
||||
1620 1689 7
|
||||
1690 1744 8
|
||||
1745 1799 9
|
||||
1800 9999 10
|
||||
>;
|
||||
rockchip,pvtm-pvtpll;
|
||||
rockchip,pvtm-offset = <0x18>;
|
||||
rockchip,pvtm-sample-time = <1100>;
|
||||
rockchip,pvtm-freq = <1416000>;
|
||||
rockchip,pvtm-volt = <950000>;
|
||||
rockchip,pvtm-ref-temp = <40>;
|
||||
rockchip,pvtm-temp-prop = <0 0>;
|
||||
rockchip,pvtm-thermal-zone = "soc-thermal";
|
||||
rockchip,grf = <&grf>;
|
||||
rockchip,temp-hysteresis = <5000>;
|
||||
rockchip,low-temp = <10000>;
|
||||
rockchip,low-temp-min-volt = <900000>;
|
||||
|
||||
/delete-node/ opp-408000000;
|
||||
/delete-node/ opp-600000000;
|
||||
/delete-node/ opp-816000000;
|
||||
/delete-node/ opp-1008000000;
|
||||
/delete-node/ opp-1200000000;
|
||||
/delete-node/ opp-1416000000;
|
||||
/delete-node/ opp-1608000000;
|
||||
/delete-node/ opp-1800000000;
|
||||
/delete-node/ opp-2016000000;
|
||||
|
||||
opp-1200000000 {
|
||||
opp-hz = /bits/ 64 <1200000000>;
|
||||
opp-microvolt = <900000 900000 1000000>;
|
||||
clock-latency-ns = <40000>;
|
||||
};
|
||||
opp-1416000000 {
|
||||
opp-hz = /bits/ 64 <1416000000>;
|
||||
opp-microvolt = <900000 900000 1000000>;
|
||||
opp-microvolt-L0 = <962500 962500 1000000>;
|
||||
opp-microvolt-L1 = <950000 950000 1000000>;
|
||||
opp-microvolt-L2 = <937500 937500 1000000>;
|
||||
opp-microvolt-L3 = <925000 925000 1000000>;
|
||||
opp-microvolt-L4 = <912500 912500 1000000>;
|
||||
clock-latency-ns = <40000>;
|
||||
};
|
||||
};
|
||||
|
||||
&dmc_opp_table {
|
||||
/delete-node/ opp-324000000;
|
||||
/delete-node/ opp-666000000;
|
||||
/delete-node/ opp-920000000;
|
||||
/delete-node/ opp-1056000000;
|
||||
|
||||
opp-324000000 {
|
||||
opp-hz = /bits/ 64 <324000000>;
|
||||
opp-microvolt = <900000 900000 1000000>;
|
||||
};
|
||||
opp-666000000 {
|
||||
opp-hz = /bits/ 64 <666000000>;
|
||||
opp-microvolt = <900000 900000 1000000>;
|
||||
};
|
||||
opp-780000000 {
|
||||
opp-hz = /bits/ 64 <780000000>;
|
||||
opp-microvolt = <900000 900000 1000000>;
|
||||
};
|
||||
opp-1056000000 {
|
||||
opp-hz = /bits/ 64 <1056000000>;
|
||||
opp-microvolt = <900000 900000 1000000>;
|
||||
};
|
||||
};
|
||||
|
||||
&gpu_opp_table{
|
||||
rockchip,pvtm-voltage-sel = <
|
||||
0 809 0
|
||||
810 830 1
|
||||
831 850 2
|
||||
851 880 3
|
||||
881 890 4
|
||||
891 910 5
|
||||
911 930 6
|
||||
931 950 7
|
||||
951 970 8
|
||||
971 995 9
|
||||
1000 9999 10
|
||||
>;
|
||||
rockchip,pvtm-pvtpll;
|
||||
rockchip,pvtm-offset = <0x10018>;
|
||||
rockchip,pvtm-sample-time = <1100>;
|
||||
rockchip,pvtm-freq = <800000>;
|
||||
rockchip,pvtm-volt = <950000>;
|
||||
rockchip,pvtm-ref-temp = <40>;
|
||||
rockchip,pvtm-temp-prop = <0 0>;
|
||||
rockchip,pvtm-thermal-zone = "soc-thermal";
|
||||
rockchip,grf = <&grf>;
|
||||
rockchip,temp-hysteresis = <5000>;
|
||||
rockchip,low-temp = <10000>;
|
||||
rockchip,low-temp-min-volt = <900000>;
|
||||
|
||||
/delete-node/ opp-300000000;
|
||||
/delete-node/ opp-400000000;
|
||||
/delete-node/ opp-500000000;
|
||||
/delete-node/ opp-600000000;
|
||||
/delete-node/ opp-700000000;
|
||||
/delete-node/ opp-800000000;
|
||||
|
||||
opp-700000000 {
|
||||
opp-hz = /bits/ 64 <700000000>;
|
||||
opp-microvolt = <900000 900000 1000000>;
|
||||
};
|
||||
opp-800000000 {
|
||||
opp-hz = /bits/ 64 <800000000>;
|
||||
opp-microvolt = <900000 900000 1000000>;
|
||||
opp-microvolt-L0 = <962500 962500 1000000>;
|
||||
opp-microvolt-L1 = <950000 950000 1000000>;
|
||||
opp-microvolt-L2 = <937500 937500 1000000>;
|
||||
opp-microvolt-L3 = <925000 925000 1000000>;
|
||||
opp-microvolt-L4 = <912500 912500 1000000>;
|
||||
opp-microvolt-L5 = <900000 900000 1000000>;
|
||||
};
|
||||
};
|
||||
|
||||
&otp {
|
||||
cpu_code1: cpu-code1@52 {
|
||||
reg = <0x52 0x2>;
|
||||
};
|
||||
};
|
||||
|
||||
/delete-node/ &gmac1;
|
||||
/delete-node/ &pcie2x1;
|
||||
@@ -158,6 +158,7 @@ static const struct of_device_id blocklist[] __initconst = {
|
||||
{ .compatible = "rockchip,rk3368", },
|
||||
{ .compatible = "rockchip,rk3399", },
|
||||
{ .compatible = "rockchip,rk3399pro", },
|
||||
{ .compatible = "rockchip,rk3518", },
|
||||
{ .compatible = "rockchip,rk3528", },
|
||||
{ .compatible = "rockchip,rk3562", },
|
||||
{ .compatible = "rockchip,rk3566", },
|
||||
|
||||
@@ -465,7 +465,7 @@ static int rk_platform_power_on_gpu(struct device *dev)
|
||||
goto fail_to_enable_regulator;
|
||||
}
|
||||
|
||||
if (cpu_is_rk3528()) {
|
||||
if (cpu_is_rk3528() || cpu_is_rk3518()) {
|
||||
#if defined(CONFIG_MALI_DEVFREQ) && defined(CONFIG_HAVE_CLK)
|
||||
struct mali_device *mdev = dev_get_drvdata(dev);
|
||||
|
||||
@@ -489,7 +489,7 @@ static void rk_platform_power_off_gpu(struct device *dev)
|
||||
struct rk_context *platform = s_rk_context;
|
||||
|
||||
if (platform->is_powered) {
|
||||
if (cpu_is_rk3528()) {
|
||||
if (cpu_is_rk3528() || cpu_is_rk3518()) {
|
||||
#if defined(CONFIG_MALI_DEVFREQ) && defined(CONFIG_HAVE_CLK)
|
||||
struct mali_device *mdev = dev_get_drvdata(dev);
|
||||
|
||||
|
||||
@@ -3060,7 +3060,10 @@ static enum drm_mode_status dw_dp_encoder_mode_valid(struct drm_encoder *encoder
|
||||
struct drm_device *dev = encoder->dev;
|
||||
struct rockchip_crtc_state *s;
|
||||
|
||||
if (!crtc) {
|
||||
if (crtc) {
|
||||
s = to_rockchip_crtc_state(crtc->state);
|
||||
s->output_type = DRM_MODE_CONNECTOR_DisplayPort;
|
||||
} else {
|
||||
drm_for_each_crtc(crtc, dev) {
|
||||
if (!drm_encoder_crtc_ok(encoder, crtc))
|
||||
continue;
|
||||
|
||||
@@ -587,6 +587,7 @@ struct rockchip_drm_private {
|
||||
* OVL_LAYER_SEL/OVL_PORT_SEL
|
||||
*/
|
||||
struct mutex ovl_lock;
|
||||
bool need_ovl_lock;
|
||||
|
||||
struct rockchip_drm_vcnt vcnt[ROCKCHIP_MAX_CRTC];
|
||||
struct rockchip_drm_error_event error_event;
|
||||
|
||||
@@ -290,9 +290,11 @@ static void rockchip_drm_atomic_helper_commit_tail_rpm(struct drm_atomic_state *
|
||||
|
||||
rockchip_dmcfreq_vop_bandwidth_update(&vop_bw_info);
|
||||
|
||||
mutex_lock(&prv->ovl_lock);
|
||||
if (prv->need_ovl_lock)
|
||||
mutex_lock(&prv->ovl_lock);
|
||||
drm_atomic_helper_commit_planes(dev, old_state, DRM_PLANE_COMMIT_ACTIVE_ONLY);
|
||||
mutex_unlock(&prv->ovl_lock);
|
||||
if (prv->need_ovl_lock)
|
||||
mutex_unlock(&prv->ovl_lock);
|
||||
|
||||
drm_atomic_helper_fake_vblank(old_state);
|
||||
|
||||
|
||||
@@ -739,7 +739,19 @@ static void rockchip_drm_mode_fixup(struct drm_crtc_state *crtc_state,
|
||||
return;
|
||||
|
||||
bridge = drm_bridge_chain_get_first_bridge(encoder);
|
||||
if (bridge) {
|
||||
/*
|
||||
* Check whether the bridge supports atomic mode or not.
|
||||
* According to the include/drm/drm_bridge.h, the following functions
|
||||
* are mandatory in atomic mode:
|
||||
* &drm_bridge_funcs.atomic_reset()
|
||||
* &drm_bridge_funcs.atomic_duplicate_state()
|
||||
* &drm_bridge_funcs.atomic_destroy_state()
|
||||
*
|
||||
* For some bridge drivers that have not supported atomic mode yet:
|
||||
* drivers/gpu/drm/bridge/sii902x.c
|
||||
* drivers/gpu/drm/bridge/rk630-tve.c
|
||||
*/
|
||||
if (bridge && bridge->funcs->atomic_duplicate_state) {
|
||||
bridge_state = drm_atomic_get_bridge_state(crtc_state->state, bridge);
|
||||
if (IS_ERR(bridge_state))
|
||||
return;
|
||||
|
||||
@@ -15317,6 +15317,7 @@ static int vop2_bind(struct device *dev, struct device *master, void *data)
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
const struct vop2_data *vop2_data;
|
||||
struct drm_device *drm_dev = data;
|
||||
struct rockchip_drm_private *private;
|
||||
struct vop2 *vop2;
|
||||
struct resource *res;
|
||||
size_t alloc_size;
|
||||
@@ -15348,6 +15349,17 @@ static int vop2_bind(struct device *dev, struct device *master, void *data)
|
||||
vop2->data = vop2_data;
|
||||
vop2->drm_dev = drm_dev;
|
||||
vop2->version = vop2_data->version;
|
||||
private = drm_dev->dev_private;
|
||||
/*
|
||||
* 1. RK3566/RK3568/RK3588 VOP different VPs share one overlay logic,
|
||||
* so need use ovl lock to make sure they're mutually exclusive;
|
||||
* 2. RK3528 need to reset the p2i_en bit when POST_BUF_EMPTY at
|
||||
* post_buf_empty_work_event(), the vop2_cfg_done() must exclusive
|
||||
* with userspace commit new frame.
|
||||
*/
|
||||
private->need_ovl_lock = vop2->version == VOP_VERSION_RK3528 ||
|
||||
vop2->version == VOP_VERSION_RK3568 ||
|
||||
vop2->version == VOP_VERSION_RK3588;
|
||||
|
||||
dev_set_drvdata(dev, vop2);
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ int rkisp_dvbm_init(struct rkisp_stream *stream)
|
||||
height = stream->out_fmt.height;
|
||||
wrap_line = dev->cap_dev.wrap_line;
|
||||
dvbm_cfg.dma_addr = buf->dma_addr;
|
||||
dvbm_cfg.buf = buf->dbuf;
|
||||
dvbm_cfg.ybuf_bot = 0;
|
||||
dvbm_cfg.ybuf_top = width * wrap_line;
|
||||
dvbm_cfg.ybuf_lstd = width;
|
||||
|
||||
@@ -182,6 +182,7 @@ int rkisp_rockit_buf_queue(struct rockit_cfg *input_rockit_cfg)
|
||||
reg = stream->config->mi.cb_base_ad_init;
|
||||
rkisp_write(ispdev, reg, val, false);
|
||||
stream->dummy_buf.dma_addr = isprk_buf->buff_addr;
|
||||
stream->dummy_buf.dbuf = isprk_buf->dmabuf;
|
||||
v4l2_info(&ispdev->v4l2_dev, "rockit wrap buf:0x%x\n", isprk_buf->buff_addr);
|
||||
}
|
||||
return -EINVAL;
|
||||
|
||||
@@ -10,3 +10,11 @@ config VIDEO_ROCKCHIP_VPSS
|
||||
default n
|
||||
help
|
||||
Support for VPSS on the rockchip SoC.
|
||||
|
||||
config VIDEO_ROCKCHIP_VPSS_V1
|
||||
bool "vpss1 for rk3576"
|
||||
depends on CPU_RK3576
|
||||
depends on VIDEO_ROCKCHIP_VPSS
|
||||
default y
|
||||
help
|
||||
Support for rk3576
|
||||
|
||||
@@ -8,3 +8,7 @@ video_rkvpss-objs += hw.o \
|
||||
stream.o \
|
||||
procfs.o \
|
||||
vpss_offline.o
|
||||
|
||||
video_rkvpss-$(CONFIG_VIDEO_ROCKCHIP_VPSS_V1) += \
|
||||
stream_v1.o \
|
||||
vpss_offline_v1.o
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright (C) 2023 Rockchip Electronics Co., Ltd. */
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include "vpss.h"
|
||||
#include "common.h"
|
||||
#include "stream.h"
|
||||
#include "dev.h"
|
||||
#include "regs.h"
|
||||
#include "vpss_offline.h"
|
||||
#include "hw.h"
|
||||
#include "procfs.h"
|
||||
#include "regs_v1.h"
|
||||
|
||||
|
||||
void rkvpss_idx_write(struct rkvpss_device *dev, u32 reg, u32 val, int idx)
|
||||
@@ -105,7 +106,7 @@ void rkvpss_update_regs(struct rkvpss_device *dev, u32 start, u32 end)
|
||||
if (i == RKVPSS_VPSS_ONLINE) {
|
||||
u32 mask = 0;
|
||||
|
||||
for (j = 0; j < RKVPSS_OUTPUT_MAX; j++) {
|
||||
for (j = 0; j < vpss_outchn_max(hw->vpss_ver); j++) {
|
||||
if (!hw->is_ofl_ch[j])
|
||||
continue;
|
||||
mask |= (RKVPSS_ISP2VPSS_CHN0_SEL(3) << j * 2);
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
#include <media/v4l2-ctrls.h>
|
||||
#include <media/v4l2-device.h>
|
||||
#include <media/videobuf2-v4l2.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include "../isp/isp_vpss.h"
|
||||
#include <linux/rk-camera-module.h>
|
||||
@@ -88,6 +91,14 @@ static inline struct vb2_queue *to_vb2_queue(struct file *file)
|
||||
return &vnode->buf_queue;
|
||||
}
|
||||
|
||||
static inline int vpss_outchn_max(int version)
|
||||
{
|
||||
if (version == VPSS_V10)
|
||||
return 4;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern int rkvpss_debug;
|
||||
extern struct platform_driver rkvpss_plat_drv;
|
||||
extern int rkvpss_cfginfo_num;
|
||||
|
||||
@@ -1,23 +1,15 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright (C) 2023 Rockchip Electronics Co., Ltd. */
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_graph.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/of_reserved_mem.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/reset.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <media/v4l2-fwnode.h>
|
||||
|
||||
#include "vpss.h"
|
||||
#include "common.h"
|
||||
#include "stream.h"
|
||||
#include "dev.h"
|
||||
#include "regs.h"
|
||||
#include "vpss_offline.h"
|
||||
#include "hw.h"
|
||||
#include "procfs.h"
|
||||
#include "regs_v1.h"
|
||||
|
||||
#include "version.h"
|
||||
|
||||
#define RKVPSS_VERNO_LEN 10
|
||||
@@ -34,6 +26,14 @@ static char rkvpss_version[RKVPSS_VERNO_LEN];
|
||||
module_param_string(version, rkvpss_version, RKVPSS_VERNO_LEN, 0444);
|
||||
MODULE_PARM_DESC(version, "version number");
|
||||
|
||||
static unsigned int rkvpss_wrap_line;
|
||||
module_param_named(wrap_line, rkvpss_wrap_line, uint, 0644);
|
||||
MODULE_PARM_DESC(wrap_line, "rkvpss wrap line");
|
||||
|
||||
char rkvpss_regfile[RKVPSS_REGFILE_LEN];
|
||||
module_param_string(reg_file, rkvpss_regfile, RKVPSS_REGFILE_LEN, 0644);
|
||||
MODULE_PARM_DESC(reg_file, "dump reg file");
|
||||
|
||||
int rkvpss_cfginfo_num = 5;
|
||||
|
||||
static int rkvpss_get_cfginfo_num(const char *val, const struct kernel_param *kp)
|
||||
@@ -72,7 +72,7 @@ void rkvpss_pipeline_default_fmt(struct rkvpss_device *dev)
|
||||
|
||||
w = dev->vpss_sdev.out_fmt.width;
|
||||
h = dev->vpss_sdev.out_fmt.height;
|
||||
for (i = 0; i < RKVPSS_OUTPUT_MAX; i++)
|
||||
for (i = 0; i < vpss_outchn_max(dev->hw_dev->vpss_ver); i++)
|
||||
rkvpss_stream_default_fmt(dev, i, w, h, V4L2_PIX_FMT_NV12);
|
||||
}
|
||||
|
||||
@@ -134,7 +134,7 @@ static int rkvpss_create_links(struct rkvpss_device *dev)
|
||||
struct media_entity *source, *sink;
|
||||
struct rkvpss_stream *stream;
|
||||
unsigned int flags = 0;
|
||||
int ret;
|
||||
int ret, i;
|
||||
|
||||
if (!dev->remote_sd)
|
||||
return -EINVAL;
|
||||
@@ -152,33 +152,14 @@ static int rkvpss_create_links(struct rkvpss_device *dev)
|
||||
flags = MEDIA_LNK_FL_ENABLED;
|
||||
source = &dev->vpss_sdev.sd.entity;
|
||||
|
||||
stream = &stream_vdev->stream[RKVPSS_OUTPUT_CH0];
|
||||
stream->linked = flags;
|
||||
sink = &stream->vnode.vdev.entity;
|
||||
ret = media_create_pad_link(source, RKVPSS_PAD_SOURCE, sink, 0, flags);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
|
||||
stream = &stream_vdev->stream[RKVPSS_OUTPUT_CH1];
|
||||
stream->linked = flags;
|
||||
sink = &stream->vnode.vdev.entity;
|
||||
ret = media_create_pad_link(source, RKVPSS_PAD_SOURCE, sink, 0, flags);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
|
||||
stream = &stream_vdev->stream[RKVPSS_OUTPUT_CH2];
|
||||
stream->linked = flags;
|
||||
sink = &stream->vnode.vdev.entity;
|
||||
ret = media_create_pad_link(source, RKVPSS_PAD_SOURCE, sink, 0, flags);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
|
||||
stream = &stream_vdev->stream[RKVPSS_OUTPUT_CH3];
|
||||
stream->linked = flags;
|
||||
sink = &stream->vnode.vdev.entity;
|
||||
ret = media_create_pad_link(source, RKVPSS_PAD_SOURCE, sink, 0, flags);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
for (i = 0; i < vpss_outchn_max(dev->hw_dev->vpss_ver); i++) {
|
||||
stream = &stream_vdev->stream[i];
|
||||
stream->linked = flags;
|
||||
sink = &stream->vnode.vdev.entity;
|
||||
ret = media_create_pad_link(source, RKVPSS_PAD_SOURCE, sink, 0, flags);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
}
|
||||
|
||||
end:
|
||||
return ret;
|
||||
|
||||
@@ -4,12 +4,20 @@
|
||||
#ifndef _RKVPSS_DEV_H
|
||||
#define _RKVPSS_DEV_H
|
||||
|
||||
#include <linux/rk-vpss-config.h>
|
||||
|
||||
#include "hw.h"
|
||||
#include "procfs.h"
|
||||
#include "stream.h"
|
||||
#include "vpss.h"
|
||||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_graph.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/of_reserved_mem.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/reset.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <media/v4l2-fwnode.h>
|
||||
|
||||
#define DRIVER_NAME "rkvpss"
|
||||
#define S0_VDEV_NAME DRIVER_NAME "_scale0"
|
||||
@@ -17,6 +25,8 @@
|
||||
#define S2_VDEV_NAME DRIVER_NAME "_scale2"
|
||||
#define S3_VDEV_NAME DRIVER_NAME "_scale3"
|
||||
|
||||
#define RKVPSS_REGFILE_LEN 50
|
||||
|
||||
enum rkvpss_input {
|
||||
INP_INVAL = 0,
|
||||
INP_ISP,
|
||||
@@ -59,6 +69,7 @@ struct rkvpss_device {
|
||||
atomic_t pipe_stream_cnt;
|
||||
|
||||
spinlock_t cmsc_lock;
|
||||
spinlock_t idle_lock;
|
||||
struct rkvpss_cmsc_cfg cmsc_cfg;
|
||||
|
||||
enum rkvpss_ver vpss_ver;
|
||||
|
||||
@@ -1,27 +1,14 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright (C) 2023 Rockchip Electronics Co., Ltd. */
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/iommu.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_graph.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/of_reserved_mem.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/reset.h>
|
||||
#include <media/videobuf2-cma-sg.h>
|
||||
#include <media/videobuf2-dma-sg.h>
|
||||
#include <soc/rockchip/rockchip_iommu.h>
|
||||
|
||||
#include "vpss.h"
|
||||
#include "common.h"
|
||||
#include "stream.h"
|
||||
#include "dev.h"
|
||||
#include "vpss_offline.h"
|
||||
#include "hw.h"
|
||||
#include "regs.h"
|
||||
#include "procfs.h"
|
||||
#include "regs_v1.h"
|
||||
|
||||
struct irqs_data {
|
||||
const char *name;
|
||||
@@ -895,7 +882,7 @@ static int rkvpss_hw_probe(struct platform_device *pdev)
|
||||
spin_lock_init(&hw_dev->reg_lock);
|
||||
atomic_set(&hw_dev->refcnt, 0);
|
||||
INIT_LIST_HEAD(&hw_dev->list);
|
||||
for (i = 0; i < RKVPSS_OUTPUT_MAX; i++)
|
||||
for (i = 0; i < vpss_outchn_max(hw_dev->vpss_ver); i++)
|
||||
hw_dev->is_ofl_ch[i] = false;
|
||||
hw_dev->is_ofl_cmsc = false;
|
||||
hw_dev->is_single = true;
|
||||
|
||||
@@ -4,8 +4,22 @@
|
||||
#ifndef _RKVPSS_HW_H
|
||||
#define _RKVPSS_HW_H
|
||||
|
||||
#include "common.h"
|
||||
#include "vpss_offline.h"
|
||||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/iommu.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_graph.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/of_reserved_mem.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/reset.h>
|
||||
#include <media/videobuf2-cma-sg.h>
|
||||
#include <media/videobuf2-dma-sg.h>
|
||||
#include <soc/rockchip/rockchip_iommu.h>
|
||||
|
||||
#define VPSS_MAX_BUS_CLK 4
|
||||
#define VPSS_MAX_DEV 8
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright (c) Rockchip Electronics Co., Ltd. */
|
||||
#include <linux/clk.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/sem.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <media/v4l2-common.h>
|
||||
|
||||
#include "vpss.h"
|
||||
#include "common.h"
|
||||
#include "stream.h"
|
||||
#include "dev.h"
|
||||
#include "vpss_offline.h"
|
||||
#include "hw.h"
|
||||
#include "procfs.h"
|
||||
#include "regs.h"
|
||||
#include "regs_v1.h"
|
||||
|
||||
#include "version.h"
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
@@ -27,7 +28,7 @@ static void show_hw(struct seq_file *p, struct rkvpss_hw_dev *hw)
|
||||
val = rkvpss_hw_read(hw, RKVPSS_VPSS_CTRL);
|
||||
seq_printf(p, "\tmirror:%s(0x%x)\n", (val & 0x10) ? "ON" : "OFF", val);
|
||||
|
||||
for (i = 0; i < RKVPSS_OUTPUT_MAX; i++) {
|
||||
for (i = 0; i < vpss_outchn_max(hw->vpss_ver); i++) {
|
||||
seq_printf(p, "\toutput[%d]", i);
|
||||
val = rkvpss_hw_read(hw, RKVPSS_CMSC_CTRL);
|
||||
mask = RKVPSS_CMSC_CHN_EN(i);
|
||||
@@ -90,7 +91,7 @@ static int vpss_show(struct seq_file *p, void *v)
|
||||
vpss_sdev->in_fmt.width, vpss_sdev->in_fmt.height);
|
||||
seq_printf(p, "is_ofl_cmsc:%d\n", hw->is_ofl_cmsc);
|
||||
|
||||
for (i = 0; i < RKVPSS_OUTPUT_MAX; i++) {
|
||||
for (i = 0; i < vpss_outchn_max(hw->vpss_ver); i++) {
|
||||
stream = &dev->stream_vdev.stream[i];
|
||||
if (hw->is_ofl_ch[i] || !stream->streaming) {
|
||||
seq_printf(p, "is_ofl_ch[%d]:%d OFF\n", i, hw->is_ofl_ch[i]);
|
||||
@@ -109,7 +110,7 @@ static int vpss_show(struct seq_file *p, void *v)
|
||||
stream->crop.height,
|
||||
stream->out_fmt.width,
|
||||
stream->out_fmt.height);
|
||||
seq_printf(p, "\tframe_cnt:%d rate:%dms delay:%dms frameloss:%d buf_cnt:%d\n",
|
||||
seq_printf(p, "\tsequence:%d rate:%dms delay:%dms frameloss:%d buf_cnt:%d\n",
|
||||
stream->dbg.id,
|
||||
stream->dbg.interval / 1000 / 1000,
|
||||
stream->dbg.delay / 1000 / 1000,
|
||||
@@ -194,7 +195,7 @@ static int offline_vpss_show(struct seq_file *p, void *v)
|
||||
cfginfo->input.height);
|
||||
|
||||
seq_printf(p, "%-10s\n", "Output");
|
||||
for (i = 0; i < RKVPSS_OUTPUT_MAX; i++) {
|
||||
for (i = 0; i < vpss_outchn_max(hw->vpss_ver); i++) {
|
||||
if (!ofl->hw->is_ofl_ch[i] || !cfginfo->output[i].enable) {
|
||||
seq_printf(p, "\tch[%d] OFF is_ofl_ch[%d]:%d output[%d].enable:%d\n",
|
||||
i, i, ofl->hw->is_ofl_ch[i], i,
|
||||
|
||||
@@ -4,6 +4,12 @@
|
||||
#ifndef _RKVPSS_PROCFS_H
|
||||
#define _RKVPSS_PROCFS_H
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/sem.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <media/v4l2-common.h>
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
int rkvpss_proc_init(struct rkvpss_device *dev);
|
||||
void rkvpss_proc_cleanup(struct rkvpss_device *dev);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,8 +4,23 @@
|
||||
#ifndef _RKVPSS_STREAM_H
|
||||
#define _RKVPSS_STREAM_H
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/slab.h>
|
||||
#include <media/v4l2-common.h>
|
||||
#include <media/v4l2-event.h>
|
||||
#include <media/v4l2-fh.h>
|
||||
#include <media/v4l2-ioctl.h>
|
||||
#include <media/v4l2-mc.h>
|
||||
#include <media/v4l2-subdev.h>
|
||||
#include <media/videobuf2-dma-contig.h>
|
||||
#include <media/videobuf2-dma-sg.h>
|
||||
#include <uapi/linux/rk-video-format.h>
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
#include "common.h"
|
||||
|
||||
#define STREAM_OUT_REQ_BUFS_MIN 0
|
||||
|
||||
struct rkvpss_stream;
|
||||
|
||||
|
||||
2823
drivers/media/platform/rockchip/vpss/stream_v1.c
Normal file
2823
drivers/media/platform/rockchip/vpss/stream_v1.c
Normal file
File diff suppressed because it is too large
Load Diff
42
drivers/media/platform/rockchip/vpss/stream_v1.h
Normal file
42
drivers/media/platform/rockchip/vpss/stream_v1.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Copyright (c) 2025 Rockchip Electronics Co., Ltd. */
|
||||
|
||||
#ifndef _RKVPSS_STREAM_V1_H
|
||||
#define _RKVPSS_STREAM_V1_H
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/slab.h>
|
||||
#include <media/v4l2-common.h>
|
||||
#include <media/v4l2-event.h>
|
||||
#include <media/v4l2-fh.h>
|
||||
#include <media/v4l2-ioctl.h>
|
||||
#include <media/v4l2-mc.h>
|
||||
#include <media/v4l2-subdev.h>
|
||||
#include <media/videobuf2-dma-contig.h>
|
||||
#include <media/videobuf2-dma-sg.h>
|
||||
#include <uapi/linux/rk-video-format.h>
|
||||
|
||||
#if IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_VPSS_V1)
|
||||
int rkvpss_register_stream_vdevs_v1(struct rkvpss_device *dev);
|
||||
void rkvpss_unregister_stream_vdevs_v1(struct rkvpss_device *dev);
|
||||
void rkvpss_stream_default_fmt_v1(struct rkvpss_device *dev, u32 id,
|
||||
u32 width, u32 height, u32 pixelformat);
|
||||
void rkvpss_isr_v1(struct rkvpss_device *dev, u32 mis_val);
|
||||
void rkvpss_mi_isr_v1(struct rkvpss_device *dev, u32 mis_val);
|
||||
void rkvpss_cmsc_config_v1(struct rkvpss_device *dev, bool sync);
|
||||
int rkvpss_stream_buf_cnt_v1(struct rkvpss_stream *stream);
|
||||
|
||||
#else
|
||||
static inline int rkvpss_register_stream_vdevs_v1(struct rkvpss_device *dev) {return -EINVAL; }
|
||||
static inline void rkvpss_unregister_stream_vdevs_v1(struct rkvpss_device *dev) {}
|
||||
static inline void rkvpss_stream_default_fmt_v1(struct rkvpss_device *dev, u32 id, u32 width, u32 height, u32 pixelformat) {}
|
||||
static inline void rkvpss_isr_v1(struct rkvpss_device *dev, u32 mis_val) {}
|
||||
static inline void rkvpss_mi_isr_v1(struct rkvpss_device *dev, u32 mis_val) {}
|
||||
static inline void rkvpss_cmsc_config_v1(struct rkvpss_device *dev, bool sync) {}
|
||||
static inline int rkvpss_stream_buf_cnt_v1(struct rkvpss_stream *stream) {return -EINVAL; }
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -4,7 +4,6 @@
|
||||
#ifndef _RKVPSS_VERSION_H
|
||||
#define _RKVPSS_VERSION_H
|
||||
#include <linux/version.h>
|
||||
#include <linux/rk-vpss-config.h>
|
||||
|
||||
/*
|
||||
* RKVPSS DRIVER VERSION NOTE
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright (c) 2023 Rockchip Electronics Co., Ltd. */
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/iommu.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/videodev2.h>
|
||||
#include <media/media-entity.h>
|
||||
#include <media/v4l2-event.h>
|
||||
|
||||
#include "vpss.h"
|
||||
#include "common.h"
|
||||
#include "stream.h"
|
||||
#include "dev.h"
|
||||
#include "regs.h"
|
||||
#include "vpss_offline.h"
|
||||
#include "hw.h"
|
||||
#include "procfs.h"
|
||||
#include "regs_v1.h"
|
||||
|
||||
static const struct vpsssd_fmt rkvpss_formats[] = {
|
||||
{
|
||||
@@ -19,6 +17,22 @@ static const struct vpsssd_fmt rkvpss_formats[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static inline const char *s_dev_name(int i)
|
||||
{
|
||||
switch (i) {
|
||||
case 0:
|
||||
return S0_VDEV_NAME;
|
||||
case 1:
|
||||
return S1_VDEV_NAME;
|
||||
case 2:
|
||||
return S2_VDEV_NAME;
|
||||
case 3:
|
||||
return S3_VDEV_NAME;
|
||||
default:
|
||||
return S0_VDEV_NAME;
|
||||
}
|
||||
}
|
||||
|
||||
static int rkvpss_subdev_link_setup(struct media_entity *entity,
|
||||
const struct media_pad *local,
|
||||
const struct media_pad *remote,
|
||||
@@ -29,6 +43,7 @@ static int rkvpss_subdev_link_setup(struct media_entity *entity,
|
||||
struct rkvpss_device *dev;
|
||||
struct rkvpss_stream_vdev *vdev;
|
||||
struct rkvpss_stream *stream = NULL;
|
||||
int i;
|
||||
|
||||
if (local->index != RKVPSS_PAD_SINK &&
|
||||
local->index != RKVPSS_PAD_SOURCE)
|
||||
@@ -46,22 +61,23 @@ static int rkvpss_subdev_link_setup(struct media_entity *entity,
|
||||
if (vpss_sdev->state & VPSS_START)
|
||||
return -EBUSY;
|
||||
|
||||
if (!strcmp(remote->entity->name, S0_VDEV_NAME)) {
|
||||
stream = &vdev->stream[RKVPSS_OUTPUT_CH0];
|
||||
} else if (!strcmp(remote->entity->name, S1_VDEV_NAME)) {
|
||||
stream = &vdev->stream[RKVPSS_OUTPUT_CH1];
|
||||
} else if (!strcmp(remote->entity->name, S2_VDEV_NAME)) {
|
||||
stream = &vdev->stream[RKVPSS_OUTPUT_CH2];
|
||||
} else if (!strcmp(remote->entity->name, S3_VDEV_NAME)) {
|
||||
stream = &vdev->stream[RKVPSS_OUTPUT_CH3];
|
||||
} else if (strstr(remote->entity->name, "rkisp")) {
|
||||
for (i = 0; i < vpss_outchn_max(dev->hw_dev->vpss_ver); i++) {
|
||||
if (!strcmp(remote->entity->name, s_dev_name(i))) {
|
||||
stream = &vdev->stream[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (stream)
|
||||
stream->linked = flags & MEDIA_LNK_FL_ENABLED;
|
||||
|
||||
if (strstr(remote->entity->name, "rkisp")) {
|
||||
if (flags & MEDIA_LNK_FL_ENABLED)
|
||||
dev->inp = INP_ISP;
|
||||
else
|
||||
dev->inp = INP_INVAL;
|
||||
}
|
||||
if (stream)
|
||||
stream->linked = flags & MEDIA_LNK_FL_ENABLED;
|
||||
|
||||
v4l2_dbg(1, rkvpss_debug, &dev->v4l2_dev, "input:%d\n", dev->inp);
|
||||
return 0;
|
||||
}
|
||||
@@ -253,7 +269,7 @@ static int rkvpss_sof(struct rkvpss_subdev *sdev, struct rkisp_vpss_sof *info)
|
||||
dev->unite_mode, dev->unite_index, info->seq);
|
||||
|
||||
rkvpss_cmsc_config(dev, !info->irq);
|
||||
for (i = 0; i < RKVPSS_OUTPUT_MAX; i++) {
|
||||
for (i = 0; i < vpss_outchn_max(dev->hw_dev->vpss_ver); i++) {
|
||||
stream = &dev->stream_vdev.stream[i];
|
||||
if (!stream->streaming)
|
||||
continue;
|
||||
@@ -287,7 +303,7 @@ static int rkvpss_sof(struct rkvpss_subdev *sdev, struct rkisp_vpss_sof *info)
|
||||
|
||||
/* force update mi write */
|
||||
vpss_online = rkvpss_hw_read(hw, RKVPSS_VPSS_ONLINE);
|
||||
for (i = 0; i < RKVPSS_OUTPUT_MAX; i++) {
|
||||
for (i = 0; i < vpss_outchn_max(dev->hw_dev->vpss_ver); i++) {
|
||||
if (((vpss_online >> (2 * i)) & 0x3) == 0x2)
|
||||
val |= BIT(i);
|
||||
}
|
||||
@@ -296,7 +312,7 @@ static int rkvpss_sof(struct rkvpss_subdev *sdev, struct rkisp_vpss_sof *info)
|
||||
}
|
||||
|
||||
dev->irq_ends_mask = VPSS_FRAME_END;
|
||||
for (i = 0; i < RKVPSS_OUTPUT_MAX; i++) {
|
||||
for (i = 0; i < vpss_outchn_max(dev->hw_dev->vpss_ver); i++) {
|
||||
if (hw->is_ofl_ch[i])
|
||||
continue;
|
||||
if (rkvpss_hw_read(dev->hw_dev, RKVPSS_MI_CHN0_WR_CTRL_SHD + i * 0x100) & 0x1)
|
||||
@@ -426,16 +442,29 @@ static void rkvpss_end_notify_isp(struct rkvpss_device *dev)
|
||||
|
||||
void rkvpss_check_idle(struct rkvpss_device *dev, u32 irq)
|
||||
{
|
||||
unsigned long lock_flags = 0;
|
||||
|
||||
spin_lock_irqsave(&dev->idle_lock, lock_flags);
|
||||
dev->irq_ends |= (irq & dev->irq_ends_mask);
|
||||
|
||||
v4l2_dbg(3, rkvpss_debug, &dev->v4l2_dev,
|
||||
"%s irq:0x%x ends:0x%x mask:0x%x\n",
|
||||
__func__, irq, dev->irq_ends, dev->irq_ends_mask);
|
||||
|
||||
if ((dev->irq_ends & dev->irq_ends_mask) != dev->irq_ends_mask)
|
||||
if ((dev->irq_ends & dev->irq_ends_mask) != dev->irq_ends_mask) {
|
||||
spin_unlock_irqrestore(&dev->idle_lock, lock_flags);
|
||||
return;
|
||||
}
|
||||
|
||||
/* offline MI frame end */
|
||||
if (!dev->irq_ends_mask) {
|
||||
spin_unlock_irqrestore(&dev->idle_lock, lock_flags);
|
||||
return;
|
||||
}
|
||||
|
||||
dev->irq_ends = 0;
|
||||
spin_unlock_irqrestore(&dev->idle_lock, lock_flags);
|
||||
|
||||
rkvpss_end_notify_isp(dev);
|
||||
dev->is_idle = true;
|
||||
|
||||
|
||||
@@ -4,7 +4,31 @@
|
||||
#ifndef _RKVPSS_VPSS_H
|
||||
#define _RKVPSS_VPSS_H
|
||||
|
||||
#include "common.h"
|
||||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/iommu.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/videodev2.h>
|
||||
#include <media/media-entity.h>
|
||||
#include <media/v4l2-event.h>
|
||||
#include <linux/version.h>
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/slab.h>
|
||||
#include <media/v4l2-common.h>
|
||||
#include <media/v4l2-event.h>
|
||||
#include <media/v4l2-fh.h>
|
||||
#include <media/v4l2-ioctl.h>
|
||||
#include <media/v4l2-mc.h>
|
||||
#include <media/v4l2-subdev.h>
|
||||
#include <media/videobuf2-dma-contig.h>
|
||||
#include <media/videobuf2-dma-sg.h>
|
||||
#include <uapi/linux/rk-video-format.h>
|
||||
|
||||
#include <linux/rk-vpss-config.h>
|
||||
|
||||
|
||||
#define GRP_ID_VPSS BIT(0)
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@
|
||||
#define UNITE_ENLARGE 16
|
||||
#define UNITE_LEFT_ENLARGE 16
|
||||
|
||||
#include "hw.h"
|
||||
extern char rkvpss_regfile[RKVPSS_REGFILE_LEN];
|
||||
|
||||
struct rkvpss_ofl_incfginfo {
|
||||
int width;
|
||||
@@ -82,5 +82,6 @@ struct rkvpss_offline_dev {
|
||||
int rkvpss_register_offline(struct rkvpss_hw_dev *hw);
|
||||
void rkvpss_unregister_offline(struct rkvpss_hw_dev *hw);
|
||||
void rkvpss_offline_irq(struct rkvpss_hw_dev *hw, u32 irq);
|
||||
void rkvpss_dump_reg(struct rkvpss_offline_dev *ofl, int sequence, int size);
|
||||
|
||||
#endif
|
||||
|
||||
2271
drivers/media/platform/rockchip/vpss/vpss_offline_v1.c
Normal file
2271
drivers/media/platform/rockchip/vpss/vpss_offline_v1.c
Normal file
File diff suppressed because it is too large
Load Diff
22
drivers/media/platform/rockchip/vpss/vpss_offline_v1.h
Normal file
22
drivers/media/platform/rockchip/vpss/vpss_offline_v1.h
Normal file
@@ -0,0 +1,22 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Copyright (c) 2024 Rockchip Electronics Co., Ltd. */
|
||||
|
||||
#ifndef _RKVPSS_OFFLINE_V1_H
|
||||
#define _RKVPSS_OFFLINE_V1_H
|
||||
#define DEV_NUM_MAX 256
|
||||
#define UNITE_ENLARGE 16
|
||||
#define UNITE_LEFT_ENLARGE 16
|
||||
|
||||
|
||||
#if IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_VPSS_V1)
|
||||
int rkvpss_register_offline_v1(struct rkvpss_hw_dev *hw);
|
||||
void rkvpss_unregister_offline_v1(struct rkvpss_hw_dev *hw);
|
||||
void rkvpss_offline_irq_v1(struct rkvpss_hw_dev *hw, u32 irq);
|
||||
#else
|
||||
static inline int rkvpss_register_offline_v1(struct rkvpss_hw_dev *hw) {return -EINVAL; }
|
||||
static inline void rkvpss_unregister_offline_v1(struct rkvpss_hw_dev *hw) {}
|
||||
static inline void rkvpss_offline_irq_v1(struct rkvpss_hw_dev *hw, u32 irq) {}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -29,20 +29,34 @@ static int rockchip_cpuinfo_probe(struct platform_device *pdev)
|
||||
struct device *dev = &pdev->dev;
|
||||
struct nvmem_cell *cell;
|
||||
unsigned char *efuse_buf, buf[16];
|
||||
bool is_cpu_code1_valid = false;
|
||||
size_t len = 0;
|
||||
int i;
|
||||
|
||||
cell = nvmem_cell_get(dev, "cpu-code");
|
||||
cell = nvmem_cell_get(dev, "cpu-code1");
|
||||
if (!IS_ERR(cell)) {
|
||||
efuse_buf = nvmem_cell_read(cell, &len);
|
||||
nvmem_cell_put(cell);
|
||||
if (IS_ERR(efuse_buf))
|
||||
return PTR_ERR(efuse_buf);
|
||||
|
||||
if (len == 2)
|
||||
if (len == 2 && efuse_buf[0] && efuse_buf[1]) {
|
||||
rockchip_set_cpu((efuse_buf[0] << 8 | efuse_buf[1]));
|
||||
is_cpu_code1_valid = true;
|
||||
}
|
||||
kfree(efuse_buf);
|
||||
}
|
||||
if (!is_cpu_code1_valid) {
|
||||
cell = nvmem_cell_get(dev, "cpu-code");
|
||||
if (!IS_ERR(cell)) {
|
||||
efuse_buf = nvmem_cell_read(cell, &len);
|
||||
nvmem_cell_put(cell);
|
||||
if (IS_ERR(efuse_buf))
|
||||
return PTR_ERR(efuse_buf);
|
||||
if (len == 2)
|
||||
rockchip_set_cpu((efuse_buf[0] << 8 | efuse_buf[1]));
|
||||
kfree(efuse_buf);
|
||||
}
|
||||
}
|
||||
|
||||
cell = nvmem_cell_get(dev, "cpu-version");
|
||||
if (!IS_ERR(cell)) {
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#define ROCKCHIP_CPU_RK312X 0x31260000
|
||||
#define ROCKCHIP_CPU_RK3288 0x32880000
|
||||
#define ROCKCHIP_CPU_RK3308 0x33080000
|
||||
#define ROCKCHIP_CPU_RK3518 0x35180000
|
||||
#define ROCKCHIP_CPU_RK3528 0x35280000
|
||||
#define ROCKCHIP_CPU_RK3566 0x35660000
|
||||
#define ROCKCHIP_CPU_RK3567 0x35670000
|
||||
@@ -185,8 +186,16 @@ static inline bool cpu_is_rk3528(void)
|
||||
return of_machine_is_compatible("rockchip,rk3528") ||
|
||||
of_machine_is_compatible("rockchip,rk3528a");
|
||||
}
|
||||
|
||||
static inline bool cpu_is_rk3518(void)
|
||||
{
|
||||
if (rockchip_soc_id)
|
||||
return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RK3518;
|
||||
return of_machine_is_compatible("rockchip,rk3518");
|
||||
}
|
||||
#else
|
||||
static inline bool cpu_is_rk3528(void) { return false; }
|
||||
static inline bool cpu_is_rk3518(void) { return false; }
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CPU_RK3568)
|
||||
@@ -232,6 +241,7 @@ static inline bool cpu_is_rk3568(void) { return false; }
|
||||
#define ROCKCHIP_SOC_RK3308 (ROCKCHIP_CPU_RK3308 | 0x00)
|
||||
#define ROCKCHIP_SOC_RK3308B (ROCKCHIP_CPU_RK3308 | 0x01)
|
||||
#define ROCKCHIP_SOC_RK3308BS (ROCKCHIP_CPU_RK3308 | 0x02)
|
||||
#define ROCKCHIP_SOC_RK3518 (ROCKCHIP_CPU_RK3518 | 0x00)
|
||||
#define ROCKCHIP_SOC_RK3528 (ROCKCHIP_CPU_RK3528 | 0x00)
|
||||
#define ROCKCHIP_SOC_RK3528A (ROCKCHIP_CPU_RK3528 | 0x01)
|
||||
#define ROCKCHIP_SOC_RK3566 (ROCKCHIP_CPU_RK3566 | 0x00)
|
||||
@@ -263,6 +273,7 @@ ROCKCHIP_SOC(RK3288, rk3288w, RK3288W)
|
||||
ROCKCHIP_SOC(RK3308, rk3308, RK3308)
|
||||
ROCKCHIP_SOC(RK3308, rk3308b, RK3308B)
|
||||
ROCKCHIP_SOC(RK3308, rk3308bs, RK3308BS)
|
||||
ROCKCHIP_SOC(RK3518, rk3518, RK3518)
|
||||
ROCKCHIP_SOC(RK3528, rk3528, RK3528)
|
||||
ROCKCHIP_SOC(RK3528, rk3528a, RK3528A)
|
||||
ROCKCHIP_SOC(RK3568, rk3566, RK3566)
|
||||
|
||||
@@ -60,7 +60,7 @@ struct dvbm_port {
|
||||
|
||||
struct dvbm_isp_cfg_t {
|
||||
u32 chan_id;
|
||||
struct dmabuf *buf;
|
||||
struct dma_buf *buf;
|
||||
dma_addr_t dma_addr;
|
||||
u32 ybuf_top;
|
||||
u32 ybuf_bot;
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
* ioctl RKVPSS_CMD_MODULE_SEL to select function using
|
||||
*/
|
||||
|
||||
#define RKVPSS_OUT_V1_MAX 4
|
||||
|
||||
/******vpss(online mode) v4l2 ioctl***************************/
|
||||
/* set before VIDIOC_S_FMT if dynamically changing output resolution */
|
||||
#define RKVPSS_CMD_SET_STREAM_MAX_SIZE \
|
||||
|
||||
Reference in New Issue
Block a user