/*
 * Copyright (c) 2019, Linaro
 * Copyright (c) 2022, NXP
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <nxp/nxp_rt10xx.dtsi>

&sysclk {
	clock-frequency = <500000000>;
};

&itcm {
	reg = <0x00000000 DT_SIZE_K(64)>;
};

&dtcm {
	reg = <0x20000000 DT_SIZE_K(64)>;
};

&ocram {
	reg = <0x20200000 DT_SIZE_K(128)>;
};

&ccm {
	ipg-podf {
		clock-div = <4>;
	};
};

&gpt2 {
	gptfreq = <12500000>;
};

/ {
	soc {
		/* GPIOS 4 and 6-9 are not preset on RT1020 */
		/delete-node/ gpio@401c4000;
		/delete-node/ gpio@42000000;
		/delete-node/ gpio@42004000;
		/delete-node/ gpio@42008000;
		/delete-node/ gpio@4200c000;
		/* RT1020 has only one flexSPI controller */
		/delete-node/ spi@402a4000;
	};
};

/*
 * GPIO pinmux options. These options define the pinmux settings
 * for GPIO ports on the package, so that the GPIO driver can
 * select GPIO mux options during GPIO configuration.
 */

&gpio1{
	pinmux = <&iomuxc_gpio_ad_b0_00_gpio1_io00>,
		<&iomuxc_gpio_ad_b0_01_gpio1_io01>,
		<&iomuxc_gpio_ad_b0_02_gpio1_io02>,
		<&iomuxc_gpio_ad_b0_03_gpio1_io03>,
		<&iomuxc_gpio_ad_b0_04_gpio1_io04>,
		<&iomuxc_gpio_ad_b0_05_gpio1_io05>,
		<&iomuxc_gpio_ad_b0_06_gpio1_io06>,
		<&iomuxc_gpio_ad_b0_07_gpio1_io07>,
		<&iomuxc_gpio_ad_b0_08_gpio1_io08>,
		<&iomuxc_gpio_ad_b0_09_gpio1_io09>,
		<&iomuxc_gpio_ad_b0_10_gpio1_io10>,
		<&iomuxc_gpio_ad_b0_11_gpio1_io11>,
		<&iomuxc_gpio_ad_b0_12_gpio1_io12>,
		<&iomuxc_gpio_ad_b0_13_gpio1_io13>,
		<&iomuxc_gpio_ad_b0_14_gpio1_io14>,
		<&iomuxc_gpio_ad_b0_15_gpio1_io15>,
		<&iomuxc_gpio_ad_b1_00_gpio1_io16>,
		<&iomuxc_gpio_ad_b1_01_gpio1_io17>,
		<&iomuxc_gpio_ad_b1_02_gpio1_io18>,
		<&iomuxc_gpio_ad_b1_03_gpio1_io19>,
		<&iomuxc_gpio_ad_b1_04_gpio1_io20>,
		<&iomuxc_gpio_ad_b1_05_gpio1_io21>,
		<&iomuxc_gpio_ad_b1_06_gpio1_io22>,
		<&iomuxc_gpio_ad_b1_07_gpio1_io23>,
		<&iomuxc_gpio_ad_b1_08_gpio1_io24>,
		<&iomuxc_gpio_ad_b1_09_gpio1_io25>,
		<&iomuxc_gpio_ad_b1_10_gpio1_io26>,
		<&iomuxc_gpio_ad_b1_11_gpio1_io27>,
		<&iomuxc_gpio_ad_b1_12_gpio1_io28>,
		<&iomuxc_gpio_ad_b1_13_gpio1_io29>,
		<&iomuxc_gpio_ad_b1_14_gpio1_io30>,
		<&iomuxc_gpio_ad_b1_15_gpio1_io31>;
};

&gpio2{
	pinmux = <&iomuxc_gpio_emc_00_gpio2_io00>,
		<&iomuxc_gpio_emc_01_gpio2_io01>,
		<&iomuxc_gpio_emc_02_gpio2_io02>,
		<&iomuxc_gpio_emc_03_gpio2_io03>,
		<&iomuxc_gpio_emc_04_gpio2_io04>,
		<&iomuxc_gpio_emc_05_gpio2_io05>,
		<&iomuxc_gpio_emc_06_gpio2_io06>,
		<&iomuxc_gpio_emc_07_gpio2_io07>,
		<&iomuxc_gpio_emc_08_gpio2_io08>,
		<&iomuxc_gpio_emc_09_gpio2_io09>,
		<&iomuxc_gpio_emc_10_gpio2_io10>,
		<&iomuxc_gpio_emc_11_gpio2_io11>,
		<&iomuxc_gpio_emc_12_gpio2_io12>,
		<&iomuxc_gpio_emc_13_gpio2_io13>,
		<&iomuxc_gpio_emc_14_gpio2_io14>,
		<&iomuxc_gpio_emc_15_gpio2_io15>,
		<&iomuxc_gpio_emc_16_gpio2_io16>,
		<&iomuxc_gpio_emc_17_gpio2_io17>,
		<&iomuxc_gpio_emc_18_gpio2_io18>,
		<&iomuxc_gpio_emc_19_gpio2_io19>,
		<&iomuxc_gpio_emc_20_gpio2_io20>,
		<&iomuxc_gpio_emc_21_gpio2_io21>,
		<&iomuxc_gpio_emc_22_gpio2_io22>,
		<&iomuxc_gpio_emc_23_gpio2_io23>,
		<&iomuxc_gpio_emc_24_gpio2_io24>,
		<&iomuxc_gpio_emc_25_gpio2_io25>,
		<&iomuxc_gpio_emc_26_gpio2_io26>,
		<&iomuxc_gpio_emc_27_gpio2_io27>,
		<&iomuxc_gpio_emc_28_gpio2_io28>,
		<&iomuxc_gpio_emc_29_gpio2_io29>,
		<&iomuxc_gpio_emc_30_gpio2_io30>,
		<&iomuxc_gpio_emc_31_gpio2_io31>;
};

&gpio3{
	pinmux = <&iomuxc_gpio_emc_32_gpio3_io00>,
		<&iomuxc_gpio_emc_33_gpio3_io01>,
		<&iomuxc_gpio_emc_34_gpio3_io02>,
		<&iomuxc_gpio_emc_35_gpio3_io03>,
		<&iomuxc_gpio_emc_36_gpio3_io04>,
		<&iomuxc_gpio_emc_37_gpio3_io05>,
		<&iomuxc_gpio_emc_38_gpio3_io06>,
		<&iomuxc_gpio_emc_39_gpio3_io07>,
		<&iomuxc_gpio_emc_40_gpio3_io08>,
		<&iomuxc_gpio_emc_41_gpio3_io09>,
		<&iomuxc_gpio_sd_b0_00_gpio3_io13>,
		<&iomuxc_gpio_sd_b0_01_gpio3_io14>,
		<&iomuxc_gpio_sd_b0_02_gpio3_io15>,
		<&iomuxc_gpio_sd_b0_03_gpio3_io16>,
		<&iomuxc_gpio_sd_b0_04_gpio3_io17>,
		<&iomuxc_gpio_sd_b0_05_gpio3_io18>,
		<&iomuxc_gpio_sd_b0_06_gpio3_io19>,
		<&iomuxc_gpio_sd_b1_00_gpio3_io20>,
		<&iomuxc_gpio_sd_b1_01_gpio3_io21>,
		<&iomuxc_gpio_sd_b1_02_gpio3_io22>,
		<&iomuxc_gpio_sd_b1_03_gpio3_io23>,
		<&iomuxc_gpio_sd_b1_04_gpio3_io24>,
		<&iomuxc_gpio_sd_b1_05_gpio3_io25>,
		<&iomuxc_gpio_sd_b1_06_gpio3_io26>,
		<&iomuxc_gpio_sd_b1_07_gpio3_io27>,
		<&iomuxc_gpio_sd_b1_08_gpio3_io28>,
		<&iomuxc_gpio_sd_b1_09_gpio3_io29>,
		<&iomuxc_gpio_sd_b1_10_gpio3_io30>,
		<&iomuxc_gpio_sd_b1_11_gpio3_io31>;
	gpio-reserved-ranges = <10 3>;
};

&gpio5{
	pinmux = <&iomuxc_snvs_wakeup_gpio5_io00>,
		<&iomuxc_snvs_pmic_on_req_gpio5_io01>,
		<&iomuxc_snvs_pmic_stby_req_gpio5_io02>;
};
