/* Copyright (c) 2012-2013, 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/ "msm-iommu-v1.dtsi"

&jpeg_iommu {
	status = "ok";

	qcom,iommu-bfb-regs =  <0x204c
				0x2514
				0x2540
				0x256c
				0x2314
				0x2394
				0x2414
				0x2494
				0x20ac
				0x215c
				0x220c
				0x22bc
				0x2008>;

	qcom,iommu-bfb-data =  <0x0F
				0x4
				0x4
				0x0
				0x0
				0x4
				0x14
				0x0
				0x800
				0x800
				0x3a04
				0x0
				0x0>;
};

&mdp_iommu {
	status = "ok";

	qcom,iommu-bfb-regs =  <0x204c
				0x2514
				0x2540
				0x256c
				0x20ac
				0x215c
				0x220c
				0x22bc
				0x2314
				0x2394
				0x2414
				0x2494
				0x2008
				0x200c
				0x2010
				0x2014>;

	qcom,iommu-bfb-data =  <0x3FFFF
				0x4
				0x4
				0x0
				0x1000
				0x0e00
				0x8207
				0x0
				0x0
				0x8
				0x24
				0x0
				0x0
				0x0
				0x0
				0x0>;
};

&venus_iommu {
	status = "ok";

	qcom,iommu-bfb-regs =  <0x204c
				0x2514
				0x2540
				0x256c
				0x20ac
				0x215c
				0x220c
				0x22bc
				0x2314
				0x2394
				0x2414
				0x2494
				0x2008
				0x200c
				0x2010
				0x2014
				0x2018
				0x201c>;

	qcom,iommu-bfb-data =  <0x7FFFFFF
				0x4
				0x8
				0x0
				0x13205
				0x4000
				0x14020
				0x0
				0x0
				0x94
				0x114
				0x0
				0x0
				0x0
				0x0
				0x0
				0x0
				0x0>;

	venus_ns: qcom,iommu-ctx@fdc8c000 {
		qcom,iommu-ctx-sids = <0 1 2 3 4 5 7>;
	};

	venus_sec_bitstream: qcom,iommu-ctx@fdc8d000 {
		qcom,iommu-ctx-sids = <0x80 0x81 0x82 0x83 0x84>;
		label = "venus_sec_bitstream";
	};

	venus_sec_pixel: qcom,iommu-ctx@fdc8f000 {
		compatible = "qcom,msm-smmu-v1-ctx";
		reg = <0xfdc8f000 0x1000>;
		interrupts = <0 42 0>;
		qcom,iommu-ctx-sids = <0x85>;
		label = "venus_sec_pixel";
		qcom,secure-context;
	};

	venus_sec_non_pixel: qcom,iommu-ctx@fdc90000 {
		compatible = "qcom,msm-smmu-v1-ctx";
		reg = <0xfdc90000 0x1000>;
		interrupts = <0 42 0>;
		qcom,iommu-ctx-sids = <0x87 0xA0>;
		label = "venus_sec_non_pixel";
		qcom,secure-context;
	};
};

&kgsl_iommu {
	status = "ok";

	qcom,iommu-bfb-regs =  <0x204c
				0x2514
				0x2540
				0x256c
				0x20ac
				0x215c
				0x220c
				0x22bc
				0x2314
				0x2394
				0x2414
				0x2494
				0x2008
				0x2600
				0x2604
				0x2608
				0x260c
				0x2610
				0x2614
				0x2618
				0x261c
				0x2620
				0x2624
				0x2628
				0x262c
				0x2630
				0x2634
				0x2638>;

	qcom,iommu-bfb-data =  <0x3
				0x4
				0x10
				0x0
				0x0
				0x0
				0x20
				0x0
				0x0
				0x1
				0x81
				0x0
				0x0
				0x1f
				0x4
				0x8
				0x14
				0x0
				0x0
				0xc
				0x3c
				0x0
				0x4
				0x10
				0x0
				0x15
				0x3020100
				0x04>;
};

&vpu_iommu {
	status = "ok";

	qcom,iommu-bfb-regs =  <0x204c
				0x2050
				0x2514
				0x2540
				0x256c
				0x2314
				0x2394
				0x2414
				0x2494
				0x20ac
				0x215c
				0x220c
				0x22bc
				0x2008
				0x200c
				0x2010
				0x2014
				0x2018
				0x201c
				0x2020
				0x2024
				0x2028
				0x202c
				0x2030>;

	qcom,iommu-bfb-data =  <0xffffffff
				0xfffff
				0x4
				0x8
				0x0
				0x0
				0x34
				0x104
				0x0
				0x6800
				0x6800
				0x18034
				0x0
				0x0
				0x0
				0x0
				0x0
				0x0
				0x0
				0x0
				0x0
				0x0
				0x0
				0x0>;

	interrupts = <0 300 0>;
	vpu_cb_0: qcom,iommu-ctx@fdeec000 {
		interrupts = <0 302 0>;
	};

	vpu_cb_1: qcom,iommu-ctx@fdeed000 {
		interrupts = <0 302 0>;
	};

	vpu_cb_2: qcom,iommu-ctx@fdeee000 {
		interrupts = <0 302 0>;
	};
};

&vcap_iommu {
	status = "ok";
};
