/*
 * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 * Based on "dra7.dtsi"
 */

/{
	ocp {
		u-boot,dm-spl;

		ocp2scp@4a090000 {
			compatible = "ti,omap-ocp2scp", "simple-bus";
		};
	};
};

&uart1 {
	u-boot,dm-spl;
};

&uart3 {
	u-boot,dm-spl;
};

&mmc1 {
	u-boot,dm-spl;
};

&mmc2 {
	u-boot,dm-spl;
};

&l4_cfg {
	u-boot,dm-spl;
};

&scm {
	u-boot,dm-spl;
};

&scm_conf {
	u-boot,dm-spl;
};

&qspi {
	u-boot,dm-spl;

	m25p80@0 {
		u-boot,dm-spl;
	};
};

&gpio2 {
	u-boot,dm-spl;
};

&gpio7 {
	u-boot,dm-spl;
};
