/* 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.
 */

&soc {
	qcom,ion {
		compatible = "qcom,msm-ion";
		#address-cells = <1>;
		#size-cells = <0>;

		qcom,ion-heap@30 { /* SYSTEM HEAP */
			reg = <30>;
		};

		qcom,ion-heap@21 { /* SYSTEM CONTIG HEAP */
			reg = <21>;
		};

		qcom,ion-heap@8 { /* CP_MM HEAP */
			compatible = "qcom,msm-ion-reserve";
			reg = <8>;
			qcom,heap-align = <0x1000>;
			linux,contiguous-region = <&secure_mem>;
		};

		qcom,ion-heap@25 { /* IOMMU HEAP */
			reg = <25>;
		};

		qcom,ion-heap@27 { /* QSECOM HEAP */
			compatible = "qcom,msm-ion-reserve";
			reg = <27>;
			linux,contiguous-region = <&qsecom_mem>;
		};

		qcom,ion-heap@28 { /* AUDIO HEAP */
			compatible = "qcom,msm-ion-reserve";
			reg = <28>;
			qcom,heap-align = <0x1000>;
			qcom,memory-reservation-type = "EBI1"; /* reserve EBI memory */
			qcom,memory-reservation-size = <0x314000>;
		};
		qcom,ion-heap@23 { /* OTHER PIL HEAP */
			compatible = "qcom,msm-ion-reserve";
			reg = <23>;
			qcom,heap-align = <0x1000>;
			qcom,memory-fixed = <0x06400000 0x2000000>;
		};
		qcom,ion-heap@26 { /* MODEM PIL HEAP */
			compatible = "qcom,msm-ion-reserve";
			reg = <26>;
			qcom,heap-align = <0x1000>;
			qcom,memory-fixed = <0x08400000 0x4E00000>;

		};

	};
};
