/* Copyright (c) 2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/msm/msm-bus-ids.h>
#include <dt-bindings/clock/qcom,videocc-sdm845.h>

&soc {
	msm_vidc: qcom,vidc@aa00000 {
		compatible = "qcom,msm-vidc";
		status = "ok";
		reg = <0xaa00000 0x200000>;
		interrupts = <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>;
		qcom,hfi = "venus";
		qcom,firmware-name = "venus";
		qcom,never-unload-fw;
		qcom,sw-power-collapse;
		qcom,max-secure-instances = <5>;
		qcom,max-hw-load = <2563200>; /* Full 4k @ 60 + 1080p @ 60 */

		/* Supply */
		venus-supply = <&venus_gdsc>;
		venus-core0-supply = <&vcodec0_gdsc>;
		venus-core1-supply = <&vcodec1_gdsc>;

		/* Clocks */
		clock-names = "core_clk", "iface_clk", "bus_clk",
			"core0_clk", "core0_bus_clk",
			"core1_clk", "core1_bus_clk";
		clocks = <&clock_videocc VIDEO_CC_VENUS_CTL_CORE_CLK>,
			<&clock_videocc VIDEO_CC_VENUS_AHB_CLK>,
			<&clock_videocc VIDEO_CC_VENUS_CTL_AXI_CLK>,
			<&clock_videocc VIDEO_CC_VCODEC0_CORE_CLK>,
			<&clock_videocc VIDEO_CC_VCODEC0_AXI_CLK>,
			<&clock_videocc VIDEO_CC_VCODEC1_CORE_CLK>,
			<&clock_videocc VIDEO_CC_VCODEC1_AXI_CLK>;
		qcom,proxy-clock-names = "core_clk", "iface_clk",
			"bus_clk", "core0_clk", "core0_bus_clk",
			"core1_clk", "core1_bus_clk";
		qcom,clock-configs = <0x1 0x0 0x0 0x1 0x0 0x1 0x0>;
		qcom,allowed-clock-rates = <200000000 320000000 380000000
			444000000 533000000>;
		qcom,max-hq-mbs-per-frame = <8160>;
		qcom,max-hq-frames-per-sec = <60>;
		qcom,clock-freq-tbl {
			qcom,profile-enc {
				qcom,codec-mask = <0x55555555>;
				qcom,vpp-cycles-per-mb = <675>;
				qcom,vsp-cycles-per-mb = <125>;
				qcom,low-power-cycles-per-mb = <320>;
			};
			qcom,profile-dec {
				qcom,codec-mask = <0xffffffff>;
				qcom,vpp-cycles-per-mb = <200>;
				qcom,vsp-cycles-per-mb = <50>;
			};
		};

		/* Buses */
		bus_cnoc {
			compatible = "qcom,msm-vidc,bus";
			label = "cnoc";
			qcom,bus-master = <MSM_BUS_MASTER_AMPSS_M0>;
			qcom,bus-slave = <MSM_BUS_SLAVE_VENUS_CFG>;
			qcom,bus-governor = "performance";
			qcom,bus-range-kbps = <1000 1000>;
		};

		venus_bus_ddr {
			compatible = "qcom,msm-vidc,bus";
			label = "venus-ddr";
			qcom,bus-master = <MSM_BUS_MASTER_VIDEO_P0>;
			qcom,bus-slave = <MSM_BUS_SLAVE_EBI_CH0>;
			qcom,bus-governor = "performance";
			qcom,bus-range-kbps = <1000 3388000>;
		};
		arm9_bus_ddr {
			compatible = "qcom,msm-vidc,bus";
			label = "venus-arm9-ddr";
			qcom,bus-master = <MSM_BUS_MASTER_VIDEO_P0>;
			qcom,bus-slave = <MSM_BUS_SLAVE_EBI_CH0>;
			qcom,bus-governor = "performance";
			qcom,bus-range-kbps = <1000 1000>;
		};

		/* MMUs */
		non_secure_cb {
			compatible = "qcom,msm-vidc,context-bank";
			label = "venus_ns";
			iommus =
				<&apps_smmu 0x10a0>,
				<&apps_smmu 0x10a8>,
				<&apps_smmu 0x10b0>;
			buffer-types = <0xfff>;
			virtual-addr-pool = <0x70800000 0x6f800000>;
		};

		secure_bitstream_cb {
			compatible = "qcom,msm-vidc,context-bank";
			label = "venus_sec_bitstream";
			iommus =
				<&apps_smmu 0x10a1>,
				<&apps_smmu 0x10a9>,
				<&apps_smmu 0x10a5>,
				<&apps_smmu 0x10ad>;
			buffer-types = <0x241>;
			virtual-addr-pool = <0x4b000000 0x25800000>;
			qcom,secure-context-bank;
		};

		secure_pixel_cb {
			compatible = "qcom,msm-vidc,context-bank";
			label = "venus_sec_pixel";
			iommus =
				<&apps_smmu 0x10a3>,
				<&apps_smmu 0x10ab>;
			buffer-types = <0x106>;
			virtual-addr-pool = <0x25800000 0x25800000>;
			qcom,secure-context-bank;
		};

		secure_non_pixel_cb {
			compatible = "qcom,msm-vidc,context-bank";
			label = "venus_sec_non_pixel";
			iommus =
				<&apps_smmu 0x10a4>,
				<&apps_smmu 0x10ac>,
				<&apps_smmu 0x10b4>;
			buffer-types = <0x480>;
			virtual-addr-pool = <0x1000000 0x24800000>;
			qcom,secure-context-bank;
		};
	};
};
