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

#include <nxp/nxp_rt.dtsi>

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

/* i.MX rt1024 default FlexRAM partition:
 * ITCM: 64KB
 * DTCM: 64KB
 * OCRAM: 128KB
 */
&itcm {
	reg = <0x00000000 DT_SIZE_K(64)>;
};

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

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

&flexspi {
	status = "okay";
	reg = <0x402a8000 0x4000>, <0x60000000 DT_SIZE_M(4)>;
	is25wp032: is25wp032@0 {
		compatible = "nxp,imx-flexspi-nor";
		size = <DT_SIZE_M(32)>;
		reg = <0>;
		spi-max-frequency = <133000000>;
		status = "okay";
		jedec-id = [9d 70 17];
		erase-block-size = <DT_SIZE_K(4)>;
		write-block-size = <1>;
	};
};

/ {
	soc {
		/* GPIOS 4 and 6-9 are not preset on RT1024 */
		/delete-node/ gpio@401c4000;
		/delete-node/ gpio@42000000;
		/delete-node/ gpio@42004000;
		/delete-node/ gpio@42008000;
		/delete-node/ gpio@4200c000;
	};
};

/*
 * 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_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>;
};

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