// SPDX-License-Identifier: GPL-2.0+
/*
 * Clock specification for Xilinx ZynqMP
 *
 * (C) Copyright 2017-2022 Xilinx, Inc.
 * (C) Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved.
 *
 * Michal Simek <michal.simek@amd.com>
 */

#include "include/dt-bindings/clock/xlnx-zynqmp-clk.h"
/ {
	pss_ref_clk: pss-ref-clk {
		bootph-all;
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <33333333>;
		clock-output-names = "pss_ref_clk";
	};

	video_clk: video-clk {
		bootph-all;
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <27000000>;
		clock-output-names = "video_clk";
	};

	pss_alt_ref_clk: pss-alt-ref-clk {
		bootph-all;
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <0>;
		clock-output-names = "pss_alt_ref_clk";
	};

	gt_crx_ref_clk: gt-crx-ref-clk {
		bootph-all;
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <108000000>;
		clock-output-names = "gt_crx_ref_clk";
	};

	aux_ref_clk: aux-ref-clk {
		bootph-all;
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <27000000>;
		clock-output-names = "aux_ref_clk";
	};
};

&zynqmp_firmware {
	zynqmp_clk: clock-controller {
		bootph-all;
		#clock-cells = <1>;
		compatible = "xlnx,zynqmp-clk";
		clocks = <&pss_ref_clk>, <&video_clk>, <&pss_alt_ref_clk>,
			 <&aux_ref_clk>, <&gt_crx_ref_clk>;
		clock-names = "pss_ref_clk", "video_clk", "pss_alt_ref_clk",
			      "aux_ref_clk", "gt_crx_ref_clk";
	};
};

&can0 {
	clocks = <&zynqmp_clk CAN0_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&can1 {
	clocks = <&zynqmp_clk CAN1_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&psu_cortexa53_0 {
	clocks = <&zynqmp_clk ACPU>;
};

&psu_cortexa53_0_debug {
       clocks = <&zynqmp_clk DBF_FPD>;
};

&psu_cortexa53_1_debug {
       clocks = <&zynqmp_clk DBF_FPD>;
};

&psu_cortexa53_2_debug {
       clocks = <&zynqmp_clk DBF_FPD>;
};

&psu_cortexa53_3_debug {
       clocks = <&zynqmp_clk DBF_FPD>;
};

&fpd_dma_chan1 {
	clocks = <&zynqmp_clk GDMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&fpd_dma_chan2 {
	clocks = <&zynqmp_clk GDMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&fpd_dma_chan3 {
	clocks = <&zynqmp_clk GDMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&fpd_dma_chan4 {
	clocks = <&zynqmp_clk GDMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&fpd_dma_chan5 {
	clocks = <&zynqmp_clk GDMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&fpd_dma_chan6 {
	clocks = <&zynqmp_clk GDMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&fpd_dma_chan7 {
	clocks = <&zynqmp_clk GDMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&fpd_dma_chan8 {
	clocks = <&zynqmp_clk GDMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&gpu {
	clocks = <&zynqmp_clk GPU_REF>, <&zynqmp_clk GPU_PP0_REF>;
};

&lpd_dma_chan1 {
	clocks = <&zynqmp_clk ADMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&lpd_dma_chan2 {
	clocks = <&zynqmp_clk ADMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&lpd_dma_chan3 {
	clocks = <&zynqmp_clk ADMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&lpd_dma_chan4 {
	clocks = <&zynqmp_clk ADMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&lpd_dma_chan5 {
	clocks = <&zynqmp_clk ADMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&lpd_dma_chan6 {
	clocks = <&zynqmp_clk ADMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&lpd_dma_chan7 {
	clocks = <&zynqmp_clk ADMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&lpd_dma_chan8 {
	clocks = <&zynqmp_clk ADMA_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&nand0 {
	clocks = <&zynqmp_clk NAND_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&gem0 {
	clocks = <&zynqmp_clk LPD_LSBUS>, <&zynqmp_clk GEM0_REF>,
		 <&zynqmp_clk GEM0_TX>, <&zynqmp_clk GEM0_RX>,
		 <&zynqmp_clk GEM_TSU>;
	assigned-clocks = <&zynqmp_clk GEM_TSU>;
};

&gem1 {
	clocks = <&zynqmp_clk LPD_LSBUS>, <&zynqmp_clk GEM1_REF>,
		 <&zynqmp_clk GEM1_TX>, <&zynqmp_clk GEM1_RX>,
		 <&zynqmp_clk GEM_TSU>;
	assigned-clocks = <&zynqmp_clk GEM_TSU>;
};

&gem2 {
	clocks = <&zynqmp_clk LPD_LSBUS>, <&zynqmp_clk GEM2_REF>,
		 <&zynqmp_clk GEM2_TX>, <&zynqmp_clk GEM2_RX>,
		 <&zynqmp_clk GEM_TSU>;
	assigned-clocks = <&zynqmp_clk GEM_TSU>;
};

&gem3 {
	clocks = <&zynqmp_clk LPD_LSBUS>, <&zynqmp_clk GEM3_REF>,
		 <&zynqmp_clk GEM3_TX>, <&zynqmp_clk GEM3_RX>,
		 <&zynqmp_clk GEM_TSU>;
	assigned-clocks = <&zynqmp_clk GEM_TSU>;
};

&gpio {
	clocks = <&zynqmp_clk LPD_LSBUS>;
};

&i2c0 {
	clocks = <&zynqmp_clk I2C0_REF>;
};

&i2c1 {
	clocks = <&zynqmp_clk I2C1_REF>;
};

&perf_monitor_ocm {
	clocks = <&zynqmp_clk LPD_LSBUS>;
};

&perf_monitor_ddr {
	clocks = <&zynqmp_clk TOPSW_LSBUS>;
};

&perf_monitor_cci {
	clocks = <&zynqmp_clk TOPSW_LSBUS>;
};

&perf_monitor_lpd {
	clocks = <&zynqmp_clk LPD_LSBUS>;
};

&pcie {
	clocks = <&zynqmp_clk PCIE_REF>;
};

&qspi {
	clocks = <&zynqmp_clk QSPI_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&sata {
	clocks = <&zynqmp_clk SATA_REF>;
};

&sdhci0 {
	clocks = <&zynqmp_clk SDIO0_REF>, <&zynqmp_clk LPD_LSBUS>;
	assigned-clocks = <&zynqmp_clk SDIO0_REF>;
};

&sdhci1 {
	clocks = <&zynqmp_clk SDIO1_REF>, <&zynqmp_clk LPD_LSBUS>;
	assigned-clocks = <&zynqmp_clk SDIO1_REF>;
};

&spi0 {
	clocks = <&zynqmp_clk SPI0_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&spi1 {
	clocks = <&zynqmp_clk SPI1_REF>, <&zynqmp_clk LPD_LSBUS>;
};

&ttc0 {
	clocks = <&zynqmp_clk LPD_LSBUS>;
};

&ttc1 {
	clocks = <&zynqmp_clk LPD_LSBUS>;
};

&ttc2 {
	clocks = <&zynqmp_clk LPD_LSBUS>;
};

&ttc3 {
	clocks = <&zynqmp_clk LPD_LSBUS>;
};

&uart0 {
	clocks = <&zynqmp_clk UART0_REF>, <&zynqmp_clk LPD_LSBUS>;
	assigned-clocks = <&zynqmp_clk UART0_REF>;
};

&uart1 {
	clocks = <&zynqmp_clk UART1_REF>, <&zynqmp_clk LPD_LSBUS>;
	assigned-clocks = <&zynqmp_clk UART1_REF>;
};

&usb0 {
	clocks = <&zynqmp_clk USB0_BUS_REF>, <&zynqmp_clk USB3_DUAL_REF>;
	assigned-clocks = <&zynqmp_clk USB0_BUS_REF>, <&zynqmp_clk USB3_DUAL_REF>;
};

&dwc3_0 {
	clocks = <&zynqmp_clk USB3_DUAL_REF>;
};

&usb1 {
	clocks = <&zynqmp_clk USB1_BUS_REF>, <&zynqmp_clk USB3_DUAL_REF>;
	assigned-clocks = <&zynqmp_clk USB1_BUS_REF>, <&zynqmp_clk USB3_DUAL_REF>;
};

&dwc3_1 {
	clocks = <&zynqmp_clk USB3_DUAL_REF>;
};

&watchdog0 {
	clocks = <&zynqmp_clk WDT>;
};

&lpd_watchdog {
	clocks = <&zynqmp_clk LPD_WDT>;
};

&xilinx_ams {
	clocks = <&zynqmp_clk AMS_REF>;
};

&zynqmp_dpdma {
	clocks = <&zynqmp_clk DPDMA_REF>;
	assigned-clocks = <&zynqmp_clk DPDMA_REF>; /* apll */
};

&zynqmp_dpsub {
	clocks = <&zynqmp_clk TOPSW_LSBUS>,
		 <&zynqmp_clk DP_AUDIO_REF>,
		 <&zynqmp_clk DP_VIDEO_REF>;
	assigned-clocks = <&zynqmp_clk DP_STC_REF>,
			  <&zynqmp_clk DP_AUDIO_REF>,
			  <&zynqmp_clk DP_VIDEO_REF>;  /* rpll, rpll, vpll */
};
