/* 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@25 {
			reg = <25>;
			qcom,ion-heap-type = "SYSTEM";
		};

		qcom,ion-heap@21 {
			reg = <21>;
			qcom,ion-heap-type = "SYSTEM_CONTIG";
		};

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

		qcom,ion-heap@23 { /* OTHER PIL HEAP */
			compatible = "qcom,msm-ion-reserve";
			reg = <23>;
			qcom,heap-align = <0x1000>;
			qcom,memory-fixed = <0x0c500000 0x1300000>;
			qcom,ion-heap-type = "CARVEOUT";
		};

		qcom,ion-heap@26 { /* MODEM HEAP */
			compatible = "qcom,msm-ion-reserve";
			reg = <26>;
			qcom,heap-align = <0x1000>;
			qcom,memory-fixed = <0x08800000 0x3d00000>;
			qcom,ion-heap-type = "CARVEOUT";
		};

	};
};

