AD9371: framerStatus (0xBE)

Hello All,

I am working on AD9371 board where i was getting sysref phase error when i saw log which is mentioned below:

ad9371 spi1.0: framerStatus (0xBE)

I was trying to implement subclass -1 for deterministic latency. For this, I added lmfcOffset value in ad9371 which is

mentioned below and these value are taken from ADRV9009 dtsi file.

adi,jesd204-rx-framer-lmfc-offset = 31  

adi,jesd204-obs-framer-lmfc-offset = 31

adi,jesd204-deframer-lmfc-offset = 17

I did few changes which i have highlighted below:

axi_jesd204_rx.c

writel_relaxed(31<<2, jesd->base + JESD204_RX_REG_LINK_CONF2);

writel_relaxed(31<<2,  jesd->base + JESD204_RX_REG_SYSREF_LMFC_OFFSET);

axi_jesd204_tx.c

writel_relaxed(17<<2, jesd->base + JESD204_TX_REG_SYSREF_LMFC_OFFSET);

I used SYSREF_LMFC_OFFSET to address power on variance and it was doing perfectly fine.

I've attached dtsi file to pursue some help from your end.

Regards,

/include/ "system-conf.dtsi"
/ {
    chosen {
        bootargs = "earlycon clk_ignore_unused root=/dev/mmcblk0p2 rw rootwait uio_pdrv_genirq.of_id=generic-uio loglevel=7";
        stdout-path = "serial0:115200n8";
	};
    };

/*
/ {
   amba_pl@0 {
      /delete-node/ axi_jesd204_rx@80010000;
      /delete-node/ axi_jesd204_rx@8000c000;
      /delete-node/ axi_jesd204_tx@80014000;
      /delete-node/ axi_adxcvr@80080000 ;
      /delete-node/ axi_adxcvr@80070000 ;
      /delete-node/ axi_adxcvr@80090000 ;
      /delete-node/ ad_ip_jesd204_tpl_adc@80024000;
      /delete-node/ ad_ip_jesd204_tpl_adc@80030000;
      /delete-node/ ad_ip_jesd204_tpl_dac@80028000;
   };
};
*/


&dwc3_0 {
	status = "okay";
	dr_mode = "host";
	maximum-speed = "super-speed";
	snps,usb3_lpm_capable;
	phy-names = "usb3-phy";
	phys = <&lane2 0x4 0x0 0x3 0x18CBA80>;
};

&gem0 {
    phy-handle = <&phy0>;
    is-internal-pcspma;
    phy-mode = "sgmii";
    phy0: phy@0 {
    /*  compatible = "marvell, 88E1512"; */
     reg = <0x0>;
     xlnx,phy-type = <0x4>;
   };
};

&gem1 {
    phy-handle = <&phy1>;
    is-internal-pcspma;
    phy-mode = "sgmii";
    phy1: phy@1 {
     /* compatible = "marvell, 88E1512"; */
     reg = <0x1>;
     xlnx,phy-type = <0x4>;
    };
};


&pinctrl0 {

pini2c0def:i2c0-default {

		   mux {
			   groups = "i2c0_9_grp";
			   function = "i2c0";
		   };

		   conf {
			   groups = "i2c0_9_grp";
			   bias-pull-up;
			   slew-rate = <0x1>;
			   io-standard = <0x0>;
		   };
	   };

pini2c0gp:i2c0-gpio {

		  mux {
			  groups = "gpio0_38_grp", "gpio0_39_grp";
			  function = "gpio0";
		  };

		  conf {
			  groups = "gpio0_38_grp", "gpio0_39_grp";
			  slew-rate = <0x1>;
			  io-standard = <0x0>;
		  };
	  };

pini2c1def:i2c1-default {
		   mux {
			   groups = "i2c1_10_grp";
			   function = "i2c1";
		   };

		   conf {
			   groups = "i2c1_10_grp";
			   bias-pull-up;
			   slew-rate = <0x1>;
			   io-standard = <0x0>;
		   };
	   };

pini2c1gp:i2c1-gpio {
		  mux {
			  groups = "gpio0_40_grp", "gpio0_41_grp";
			  function = "gpio0";
		  };

		  conf {
			  groups = "gpio0_40_grp", "gpio0_41_grp";
			  slew-rate = <0x1>;
			  io-standard = <0x0>;
		  };
	  };

pinuart0def:uart0-default {
		    mux {
			    groups = "uart0_10_grp";
			    function = "uart0";
		    };

		    conf {
			    groups = "uart0_10_grp";
			    slew-rate = <0x1>;
			    io-standard = <0x0>;
		    };

		    conf-rx {
			    pins = "MIO42";
			    bias-high-impedance;
		    };

		    conf-tx {
			    pins = "MIO43";
			    bias-disable;
		    };
	    };

pinuart1def:uart1-default {
		    mux {
			    groups = "uart1_11_grp";
			    function = "uart1";
		    };

		    conf {
			    groups = "uart1_11_grp";
			    slew-rate = <0x1>;
			    io-standard = <0x0>;
		    };

		    conf-rx {
			    pins = "MIO45";
			    bias-high-impedance;
		    };

		    conf-tx {
			    pins = "MIO44";
			    bias-disable;
		    };
	    };


pingem1def:gem1-default {
		   mux-mdio {
			   function = "mdio1";
			   groups = "mdio1_0_grp";
		   };

		   conf-mdio {
			   groups = "mdio1_0_grp";
			   slew-rate = <0x1>;
			   io-standard = <0x0>;
			   bias-disable;
		   };
	   };
pingem2def:gem2-default {
		   mux-mdio {
			   function = "mdio2";
			   groups = "mdio1_1_grp";
		   };

		   conf-mdio {
			   groups = "mdio1_1_grp";
			   slew-rate = <0x1>;
			   io-standard = <0x0>;
			   bias-disable;
		   };
	   };

pinsdhci:sdhci0-default {
		 mux {
			 groups = "sdio0_0_grp";
			 function = "sdio0";
		 };

		 conf {
			 groups = "sdio0_0_grp";
			 slew-rate = <0x1>;
			 io-standard = <0x0>;
			 bias-disable;
		 };

	 };

pingpio:gpio-default {
		mux-sw {
			function = "gpio0";
			groups = "gpio0_74_grp", "gpio0_75_grp";
		};

		conf-sw {
			groups = "gpio0_74_grp", "gpio0_75_grp";
			slew-rate = <0x1>;
			io-standard = <0>;
		};

		conf-pull-up {
			pins = "MIO74", "MIO75";
			bias-pull-up;
		};

		conf-pull-none {
			pins = "MIO64", "MIO65";
			bias-disable;
		};
	};
pinctrl_usb0_default: usb0-default {

	      mux {
		      groups = "usb0_0_grp";
		      function = "usb0";
	      };

	      conf {
		      groups = "usb0_0_grp";
		      slew-rate = <0x1>;
		      io-standard = <0>;
	      };

	      conf-rx {
		      pins = "MIO52", "MIO53", "MIO55";
		      bias-high-impedance;
	      };

	      conf-tx {
		      pins = "MIO54", "MIO56", "MIO57", "MIO58", "MIO59",
			   "MIO60", "MIO61", "MIO62", "MIO63";
		      bias-disable;
	      };
		      };
pinctrl_qspi0_default: qspi0-default {

	       mux {
		       groups = "usb0_0_grp";
		       function = "usb0";
		};

	       conf {
		       groups = "usb0_0_grp";
		       slew-rate = <0x1>;
		       io-standard = <0>;
	       };

	       conf-rx {
		       pins = "MIO52", "MIO53", "MIO55";
		       bias-high-impedance;
	       };

	       conf-tx {
		       pins = "MIO54", "MIO56", "MIO57", "MIO58", "MIO59",
			    "MIO60", "MIO61", "MIO62", "MIO63";
		       bias-disable;
	       };
		       };
};

&gpio {
	pinctrl-names = "default";
	pinctrl-0 = <&pingpio>;

};

&i2c0 {
	pinctrl-names = "default", "gpio";
	pinctrl-0 = <&pini2c0def>;
	pinctrl-1 = <&pini2c0gp>;
	scl-gpios = <&gpio 0x26 0x0>;
	sda-gpios = <&gpio 0x27 0x0>;



	EEPROM:eeprom@50 {

		compatible = "at,24c256";
		reg = <0x50>;
		#address-cells = <0x1>;
		#size-cells = <0x1>;

		board_sn@0 {
			reg = <0x0 0x14>;
		};

		eth_mac@20 {
			reg = <0x20 0x6>;
		};

		board_name@d0 {
			reg = <0xd0 0x6>;
		};

		board_revision@e0 {
			reg = <0xe0 0x3>;
		};
	 };

	RTC:rtc@68 {

		compatible = "dallas,ds1340";
		reg = <0x68>;
	};

	FPGATEMP:fpgaTemp@4C {

		 compatible = "adt7461";
		 reg = <0x4C>;
	 };


	 i2cswitch@71 {

		compatible = "nxp,pca9546";
		#address-cells = <0x1>;
		#size-cells = <0x0>;
		reg = <0x71>;

		 RFM1@0 {

			#address-cells = <0x1>;
			#size-cells = <0x0>;
			compatible = "xxx";
			reg = <0x0>;
		 };

		 RFM2@1 {

			#address-cells = <0x1>;
			#size-cells = <0x0>;
			compatible = "xxx";
			reg = <0x1>;
		};

		PSB@2 {
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			compatible = "xxx";
			reg = <0x2>;
		};

		hotspot:hotspot@48 {

			#address-cells = <0x1>;
			#size-cells = <0x0>;
			compatible = "ti,tmp112";
			reg = <0x48>;
		};
	};

};

&i2c1 {

	pinctrl-names = "default", "gpio";
	pinctrl-0 = <&pini2c1def>;
	pinctrl-1 = <&pini2c1gp>;
	scl-gpios = <&gpio 0x28 0x0>;
	sda-gpios = <&gpio 0x29 0x0>;

	ina226_1@40 {
		compatible = "ti,ina226";
		reg = <0x40>;
		#address-cells = <0x1>;
		#size-cells = <0x0>;
		shunt-resistor = <0x7d0>;
	};

	ina226_2@41 {
		compatible = "ti,ina226";
		#address-cells = <0x1>;
		#size-cells = <0x0>;
		reg = <0x41>;
		shunt-resistor = <0x1388>;
	};
	ina226_3@44 {
		compatible = "ti,ina226";
		reg = <0x44>;
		shunt-resistor = <0x1388>;
	};

	ina226_4@45 {
		compatible = "ti,ina226";
		reg = <0x45>;
		shunt-resistor = <0x1388>;
	};
	i2cswitch@70 {
		compatible = "nxp,pca9546";
		#address-cells = <0x1>;
		#size-cells = <0x0>;
		reg = <0x70>;

		SFP_1:SFP0@0 {
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			compatible = "xxx";
			reg = <0x0>;
		};

		SFP_2:SFP1@1{
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			compatible = "xxx";
			reg = <0x1>;
		};

		SFP_3:SFP2@2 {
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			compatible = "xxx";
			reg = <0x2>;
		};

		SFP_4:SFP3@3 {
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			compatible = "xxx";
			reg = <0x3>;
		};

	};

};

&sdhci0 {

	pinctrl-names = "default";
	pinctrl-0 = <&pinsdhci>;
	/* broken-mmc-highspeed; */
	no-1-8-v;
	broken-cd;
};
&spi1 {

	spidev1: cpld@0 {
		#address-cells = <0x1>;
		#size-cells = <0x0>;
		#clock-cells = <0x1>;
		compatible = "spidev";
		reg = <0x0>;
		spi-max-frequency = <0x989680>;
	 };
};

&spi0 {

	clk0_ad9528: ad9528-1@2 {
		#address-cells = <0x1>;
		#size-cells = <0x0>;
		#clock-cells = <0x1>;
		compatible = "adi,ad9528";
		reg = <0x2>;
		spi-max-frequency = <0x989680>;
		clock-output-names = "ad9528-1_out0", "ad9528-1_out1", "ad9528-1_out2", "ad9528-1_out3", "ad9528-1_out4",
			     "ad9528-1_out5", "ad9528-1_out6", "ad9528-1_out7", "ad9528-1_out8", "ad9528-1_out9",
			     "ad9528-1_out10", "ad9528-1_out11", "ad9528-1_out12", "ad9528-1_out13";

		adi,vcxo-freq = <0x7530000>;
		adi,refb-enable;
		adi,refb-r-div = <0x1>;
		/*adi,refa-cmos-neg-inp-enable;*/
		adi,ref-mode = <0x3>;
		/*adi,osc-in-cmos-neg-inp-enable;*/

		/*PLL1 config*/
		adi,pll1-feedback-div = <0x8>;
		/*adi,pll1-feedback-src-vcxo = <0x1>;*/
		adi,pll1-charge-pump-current-nA = <0x1388>;

		/*PLL2 config*/
		adi,pll2-vco-div-m1 = <0x3>;
		adi,pll2-n2-div = <0xa>;
		adi,pll2-r1-div = <0x1>;
		adi,pll2-charge-pump-current-nA = <0xc4888>;

		/* SYSREF config*/
		adi,sysref-src = <0x2>;             /* SYSREF_SRC_INTERNAL*/
		adi,sysref-pattern-mode = <0x1>;    /* SYSREF_PATTERN_CONTINUOUS */
		adi,sysref-k-div = <2000>;
		/*adi,sysref-request-enable; see this */
		adi,sysref-nshot-mode = <0x3>;              /* SYSREF_NSHOT_4_PULSES */
		adi,sysref-request-trigger-mode = <0x3>;    /* SYSREF_EDGE_FALLING */

		adi,rpole2 = <0x0>;				/* RPOLE2_900_OHM */
		adi,rzero = <0x2>;				/* RZERO_2250_OHM */
		adi,cpole1 = <0x2>;				/* CPOLE1_16_PF */

		adi,status-mon-pin0-function-select = <0x1>;	/* PLL1 and PLL2 locked */
		adi,status-mon-pin1-function-select = <0x7>;	/* REFA Correct */
		reset-gpios = <&gpio 0x4a 0x0>;

		/*
			DEV_CLK 122.88Mhz ---> AD9371_1_P
			DEV_CLK 122.88Mhz ---> AD9371_1_N

			Channel Divider 5 is used to divide 614.4Mhz so that to generate
			122.88Mhz

			Cal: 614.4/5 = 122.88Mhz
		*/
		channel@0 {

			reg = <0x0>;
			adi,extended-name = "DEV_CLK";
			adi,driver-mode = <0x0>;		/* DRIVER_MODE_LVDS */
			adi,divider-phase = <0x0>;
			adi,channel-divider = <0x5>;
			adi,signal-source = <0x0>;		/* SOURCE_VCO */
		 };

		/*
			DEV_CLK 122.88Mhz ---> AD9371_2_P
			DEV_CLK 122.88Mhz ---> AD9371_2_N

			Channel Divider 5 is used to divide 614.4Mhz so that to generate
			122.88Mhz

			Cal: 614.4/5 = 122.88Mhz
		*/
		channel@1 {

			reg = <0x1>;
			adi,extended-name = "DEV_CLK1";
			adi,driver-mode = <0x0>;		/* DRIVER_MODE_LVDS */
			adi,divider-phase = <0x0>;
			adi,channel-divider = <0x5>;
			adi,signal-source = <0x0>;		/* SOURCE_VCO */
		};

		/*
			Schematic: OUT5 Signal
			Signal Name: REF_CLK_OUT_P, REF_CLK_OUT_N

			REF_CLK_OUT_P >>--------------JESD0_REF_CLK_P
			REF_CLK_OUT_N >>--------------JESD0_REF_CLK_N

			Used as JESD0_REF_CLK_P/N which goes into FPGA GTH Serdes Bank

		*/
		channel@5 {

			reg = <0x5>;
			adi,extended-name = "FMC_CLK";
			adi,driver-mode = <0x0>;		/* DRIVER_MODE_LVDS */
			adi,divider-phase = <0x0>;
			adi,channel-divider = <0x5>;
			adi,signal-source = <0x0>;		/* SOURCE_VCO */
		};

		/*

			Schematic: OUT6 Signal
			Signal Name: AUX_CLK_OUT_P, AUX_CLK_OUT_N

			AUX_CLK_OUT_P >>--------------JESD1_REF_CLK_P
			AUX_CLK_OUT_N >>--------------JESD1_REF_CLK_N

			Used as JESD1_REF_CLK_P/N which goes into FPGA GTH Serdes Bank

		*/
		channel@6 {

			reg = <0x6>;
			adi,extended-name = "FMC_CLK1";
			adi,driver-mode = <0x0>;		/* DRIVER_MODE_LVDS */
			adi,divider-phase = <0x0>;
			adi,channel-divider = <0x5>;
			adi,signal-source = <0x0>;		/* SOURCE_VCO */
		};

		/*
			Schematic: OUT2 Signal
			Signal Name: SYSREF1_OUT_P, SYSREF1_OUT_N

			Used as sysref signal to AD9371. Its a differential
		*/
		channel@2 {

			reg = <0x2>;
			adi,extended-name = "DEV_SYSREF";
			adi,driver-mode = <0x0>;		/* DRIVER_MODE_LVDS */
			adi,divider-phase = <0x0>;
			adi,channel-divider = <0x5>;
			adi,signal-source = <0x3>;		/* SOURCE_SYSREF_VCXO */
		};

		/*
			Schematic: OUT3 Signal
			Signal Name: SYSREF2_OUT_P, SYSREF2_OUT_N

			Used as sysref signal to AD9371. Its a differential
		*/
		channel@3 {

			reg = <0x3>;
			adi,extended-name = "DEV_SYSREF1";
			adi,driver-mode = <0x0>;		/* DRIVER_MODE_LVDS */
			adi,divider-phase = <0x0>;
			adi,channel-divider = <0x5>;
			adi,signal-source = <0x3>;		/* SOURCE_SYSREF_VCXO */
		};

		/*
			Schematic: OUT4 Signal
			Signal Name: SYSREF3_OUT_P, SYSREF3_OUT_N

			Used as sysref signal to FPGA. Its a differential
		*/
		channel@4 {

			reg = <0x4>;
			adi,extended-name = "FMC_SYSREF";
			adi,driver-mode = <0x0>;		/* DRIVER_MODE_LVDS */
			adi,divider-phase = <0x0>;
			adi,channel-divider = <0x5>;
			adi,signal-source = <0x2>;		/* SOURCE_SYSREF_VCO */
		};

		/*
			Schematic: OUT13 Signal
			Signal Name: EXT_CLK_OUT_P, EXT_CLK_OUT_N

			Its a differential clock out signal
		*/
		channel@13 {

			reg = <0xd>;
			adi,extended-name = "TEST_OUT";
			adi,driver-mode = <0x0>;		/* DRIVER_MODE_LVDS */
			adi,divider-phase = <0x0>;
			adi,channel-divider = <0xa>;
			adi,signal-source = <0x1>;		/* SOURCE_VCXO */
		};



	     };

trx0_ad9371: ad9371-phy@0 {

		#address-cells = <0x1>;
		#size-cells = <0x0>;
		compatible = "adi,ad9371";
		reg = <0>;

		/*SPI Setup*/
		spi-max-frequency = <0x989680>;
		/*?? SPI Mode TODO*/

		clocks = <&AD9371_TOP_JESD_TOP_jesd_ctrl_top_axi_ad9371_rx_jesd_rx_axi>,
			    <&AD9371_TOP_JESD_TOP_jesd_ctrl_top_axi_ad9371_tx_jesd_tx_axi>,
			    <&AD9371_TOP_JESD_TOP_jesd_ctrl_top_axi_ad9371_rx_jesd_axi_ad9371_rx_os_jesd_rx_axi>,
			    <&clk0_ad9528 0>,<&clk0_ad9528 5>, <&clk0_ad9528 2>, <&clk0_ad9528 4>;

		clock-names = "jesd_rx_clk", "jesd_tx_clk", "jesd_rx_os_clk", "dev_clk", "fmc_clk","sysref_dev_clk","sysref_fmc_clk";

		#clock-cells = <0x1>;
		clock-output-names = "rx_sampl_clk", "rx_os_sampl_clk", "tx_sampl_clk";


		adi,clocks-clk-pll-vco-freq_khz = <9830400>;
		adi,clocks-device-clock_khz = <122880>;
		adi,clocks-clk-pll-hs-div = <4>;
		adi,clocks-clk-pll-vco-div = <2>;

		adi,jesd204-obs-framer-over-sample = <0>;

		adi,rx-profile-adc-div = <1>;
		adi,rx-profile-en-high-rej-dec5 = <1>;
		adi,rx-profile-iq-rate_khz = <122880>;
		adi,rx-profile-rf-bandwidth_hz = <100000000>;
		adi,rx-profile-rhb1-decimation = <1>;
		adi,rx-profile-rx-bbf-3db-corner_khz = <100000>;
		adi,rx-profile-rx-dec5-decimation = <5>;
		adi,rx-profile-rx-fir-decimation = <2>;

		adi,rx-profile-rx-fir-gain_db = <(-6)>;
		adi,rx-profile-rx-fir-num-fir-coefs = <48>;
		adi,rx-profile-rx-fir-coefs = /bits/ 16 <(-5) (-26) (32) (51) (-67) (-116) (140) (212) (-252) (-367) (429) (595) (-688) (-931) (1072) (1427) (-1650) (-2188) (2612) (3496) (-4802) (-7591) (9656) (32317) (32317) (9656) (-7591) (-4802) (3496) (2612) (-2188) (-1650) (1427) (1072) (-931) (-688) (595) (429) (-367) (-252) (212) (140) (-116) (-67) (51) (32) (-26) (-5)>;

		adi,rx-profile-custom-adc-profile = /bits/ 16  <534 386 201 98 1280 491 1591 279 1306 104 792 28 48 39 23 187>;

		adi,obs-profile-adc-div = <1>;
		adi,obs-profile-en-high-rej-dec5 = <1>;
		adi,obs-profile-iq-rate_khz = <245760>;
		adi,obs-profile-rf-bandwidth_hz = <200000000>;
		adi,obs-profile-rhb1-decimation = <1>;
		adi,obs-profile-rx-bbf-3db-corner_khz = <100000>;
		adi,obs-profile-rx-dec5-decimation = <5>;
		adi,obs-profile-rx-fir-decimation = <1>;

		adi,obs-profile-rx-fir-gain_db = <6>;
		adi,obs-profile-rx-fir-num-fir-coefs = <24>;
		adi,obs-profile-rx-fir-coefs = /bits/ 16 <(-289) (81) (-23) (-86) (229) (-354) (397) (-233) (-657) (1699) (-4172) (23010) (-4172) (1699) (-657) (-233) (397) (-354) (229) (-86) (-23) (81) (-289) (0)>;

		adi,obs-profile-custom-adc-profile = /bits/ 16  <450 349 201 98 1280 730 1626 818 1476 732 834 20 41 36 24 200>;
		adi,obs-settings-custom-loopback-adc-profile = /bits/ 16  <569 369 201 98 1280 291 1541 149 1320 58 807 34 48 40 23 189>;

		adi,tx-profile-dac-div = <1>;
		adi,tx-profile-iq-rate_khz = <245760>;
		adi,tx-profile-primary-sig-bandwidth_hz = <75000000>;
		adi,tx-profile-rf-bandwidth_hz = <200000000>;
		adi,tx-profile-thb1-interpolation = <2>;
		adi,tx-profile-thb2-interpolation = <1>;
		adi,tx-profile-tx-bbf-3db-corner_khz = <100000>;
		adi,tx-profile-tx-dac-3db-corner_khz = <187000>;
		adi,tx-profile-tx-fir-interpolation = <1>;
		adi,tx-profile-tx-input-hb-interpolation = <1>;

		adi,tx-profile-tx-fir-gain_db = <6>;
		adi,tx-profile-tx-fir-num-fir-coefs = <16>;
		adi,tx-profile-tx-fir-coefs = /bits/ 16 <(6) (-270) (203) (-168) (-84) (983) (-3222) (21143) (-3222) (983) (-84) (-168) (203) (-270) (6) (0)>;

		adi,sniffer-profile-adc-div = <1>;
		adi,sniffer-profile-en-high-rej-dec5 = <0>;
		adi,sniffer-profile-iq-rate_khz = <30720>;
		adi,sniffer-profile-rf-bandwidth_hz = <20000000>;
		adi,sniffer-profile-rhb1-decimation = <2>;
		adi,sniffer-profile-rx-bbf-3db-corner_khz = <100000>;
		adi,sniffer-profile-rx-dec5-decimation = <5>;
		adi,sniffer-profile-rx-fir-decimation = <4>;

		/*
		   Old Design
		   reset-gpios = <&gpio 130 0>;
		   test-gpios = <&gpio 131 0>;
		   sysref_req-gpios = <&gpio 136 0>;
		   rx2_enable-gpios = <&gpio 132 0>;
		   rx1_enable-gpios = <&gpio 133 0>;
		   tx2_enable-gpios = <&gpio 134 0>;
		   tx1_enable-gpios = <&gpio 135 0>;
		 */

		/* New Design

			Offset: 78 added to emio

			FPGA gpio bit starts from 32 so
			we need to add 32 in emio gpio

			eg:  gpio_t[82:32]
			gpio_i[82:32]
			gpio_o[82:32]

			Let say reset gpio bit is given by fpga as 20
			so we need to add offset of 31
			calculate emio num  = 20  + 31 = 51

			Calculate processor gpio:i (mio start from 0 to 78 so we need
			to pick afterwrds.

			processor gpio number offset emio = 78 + emio_num
			= 78 +51 = 130 ( reset gpio)
		 */

		reset-gpios = <&gpio 129 0>;
		//test-gpios = <&gpio 131 0>;      //136
		sysref_req-gpios = <&gpio 134 0>;  //135
		/*
		   rx2_enable-gpios = <&gpio 130 0>;  //131
		   rx1_enable-gpios = <&gpio 131 0>;  //132
		   tx2_enable-gpios = <&gpio 132 0>;  //133
		   tx1_enable-gpios = <&gpio 133 0>;  //134
		 */

		adi,jesd204-deframer-eq-setting = <3>;

};

/* Second ADI Configuration*/

trx1_ad9371: ad9371-phy@1 {

		#address-cells = <0x1>;
		#size-cells = <0x0>;
		compatible = "adi,ad9371";
		reg = <1>;

		spi-max-frequency = <0x989680>;

		clocks = <&AD9371_TOP1_JESD_TOP_jesd_ctrl_top_axi_ad9371_rx_jesd_rx_axi>,
		       <&AD9371_TOP1_JESD_TOP_jesd_ctrl_top_axi_ad9371_tx_jesd_tx_axi>,
		       <&AD9371_TOP1_JESD_TOP_jesd_ctrl_top_axi_ad9371_rx_jesd_axi_ad9371_rx_os_jesd_rx_axi>,
		       <&clk0_ad9528 1>,<&clk0_ad9528 6>, <&clk0_ad9528 3>, <&clk0_ad9528 4>;

		clock-names = "jesd_rx_clk", "jesd_tx_clk", "jesd_rx_os_clk", "dev_clk", "fmc_clk","sysref_dev_clk","sysref_fmc_clk";

		#clock-cells = <0x1>;
		clock-output-names = "rx_sampl_clk", "rx_os_sampl_clk", "tx_sampl_clk";


		adi,clocks-clk-pll-vco-freq_khz = <9830400>;
		adi,clocks-device-clock_khz = <122880>;
		adi,clocks-clk-pll-hs-div = <4>;
		adi,clocks-clk-pll-vco-div = <2>;

		adi,jesd204-obs-framer-over-sample = <0>;

		adi,rx-profile-adc-div = <1>;
		adi,rx-profile-en-high-rej-dec5 = <1>;
		adi,rx-profile-iq-rate_khz = <122880>;
		adi,rx-profile-rf-bandwidth_hz = <100000000>;
		adi,rx-profile-rhb1-decimation = <1>;
		adi,rx-profile-rx-bbf-3db-corner_khz = <100000>;
		adi,rx-profile-rx-dec5-decimation = <5>;
		adi,rx-profile-rx-fir-decimation = <2>;

		adi,rx-profile-rx-fir-gain_db = <(-6)>;
		adi,rx-profile-rx-fir-num-fir-coefs = <48>;
		adi,rx-profile-rx-fir-coefs = /bits/ 16 <(-5) (-26) (32) (51) (-67) (-116) (140) (212) (-252) (-367) (429) (595) (-688) (-931) (1072) (1427) (-1650) (-2188) (2612) (3496) (-4802) (-7591) (9656) (32317) (32317) (9656) (-7591) (-4802) (3496) (2612) (-2188) (-1650) (1427) (1072) (-931) (-688) (595) (429) (-367) (-252) (212) (140) (-116) (-67) (51) (32) (-26) (-5)>;

		adi,rx-profile-custom-adc-profile = /bits/ 16  <534 386 201 98 1280 491 1591 279 1306 104 792 28 48 39 23 187>;

		adi,obs-profile-adc-div = <1>;
		adi,obs-profile-en-high-rej-dec5 = <1>;
		adi,obs-profile-iq-rate_khz = <245760>;
		adi,obs-profile-rf-bandwidth_hz = <200000000>;
		adi,obs-profile-rhb1-decimation = <1>;
		adi,obs-profile-rx-bbf-3db-corner_khz = <100000>;
		adi,obs-profile-rx-dec5-decimation = <5>;
		adi,obs-profile-rx-fir-decimation = <1>;

		adi,obs-profile-rx-fir-gain_db = <6>;
		adi,obs-profile-rx-fir-num-fir-coefs = <24>;
		adi,obs-profile-rx-fir-coefs = /bits/ 16 <(-289) (81) (-23) (-86) (229) (-354) (397) (-233) (-657) (1699) (-4172) (23010) (-4172) (1699) (-657) (-233) (397) (-354) (229) (-86) (-23) (81) (-289) (0)>;

		adi,obs-profile-custom-adc-profile = /bits/ 16  <450 349 201 98 1280 730 1626 818 1476 732 834 20 41 36 24 200>;
		adi,obs-settings-custom-loopback-adc-profile = /bits/ 16  <569 369 201 98 1280 291 1541 149 1320 58 807 34 48 40 23 189>;

		adi,tx-profile-dac-div = <1>;
		adi,tx-profile-iq-rate_khz = <245760>;
		adi,tx-profile-primary-sig-bandwidth_hz = <75000000>;
		adi,tx-profile-rf-bandwidth_hz = <200000000>;
		adi,tx-profile-thb1-interpolation = <2>;
		adi,tx-profile-thb2-interpolation = <1>;
		adi,tx-profile-tx-bbf-3db-corner_khz = <100000>;
		adi,tx-profile-tx-dac-3db-corner_khz = <187000>;
		adi,tx-profile-tx-fir-interpolation = <1>;
		adi,tx-profile-tx-input-hb-interpolation = <1>;

		adi,tx-profile-tx-fir-gain_db = <6>;
		adi,tx-profile-tx-fir-num-fir-coefs = <16>;
		adi,tx-profile-tx-fir-coefs = /bits/ 16 <(6) (-270) (203) (-168) (-84) (983) (-3222) (21143) (-3222) (983) (-84) (-168) (203) (-270) (6) (0)>;

		adi,sniffer-profile-adc-div = <1>;
		adi,sniffer-profile-en-high-rej-dec5 = <0>;
		adi,sniffer-profile-iq-rate_khz = <30720>;
		adi,sniffer-profile-rf-bandwidth_hz = <20000000>;
		adi,sniffer-profile-rhb1-decimation = <2>;
		adi,sniffer-profile-rx-bbf-3db-corner_khz = <100000>;
		adi,sniffer-profile-rx-dec5-decimation = <5>;
		adi,sniffer-profile-rx-fir-decimation = <4>;

		reset-gpios = <&gpio 155 0>;

		/* New Design ToDo*/
		//test-gpios = <&gpio 161 0>;
		sysref_req-gpios = <&gpio 134 0>;  //135
		/*
		   rx2_enable-gpios = <&gpio 156 0>;
		   rx1_enable-gpios = <&gpio 157 0>;
		   tx2_enable-gpios = <&gpio 158 0>;
		   tx1_enable-gpios = <&gpio 159 0>;
		 */
		adi,jesd204-deframer-eq-setting = <3>;

     };
};

&amba_pl {


	#address-cells = <0x1>;
	#size-cells = <0x1>;
	interrupt-parent = <&gic>;
	ranges = <0 0 0 0xffffffff>;

};
/* TBD */
/*
   &axi_dma_0{
   reg = <0x80001000 0x1000>;
   };

   &axi_ethernet_0{
   reg = <0x80000000 0x1000>;
   };
 */


/*
	@ AXI ADC HDL driver is the driver for Generic AXI ADC IP core. This driver is split into  two parts.

		a) Control Driver i.e. SPI ADC Driver which configures the converter internal control registers.
		   This part is typically instantiated via SPI bus like ad9371_conv.c , ad9361_conv.c

	    b) AXI ADC Driver - Data Capture driver

	   Device probing for the data capture driver (AXI ADC) which controls the AXI HDL core registers and DMA,
	   is delayed until the SPI control driver is fully probed
	   The device tree phandle "spibus-connected" is used to connect the capture driver with a SPI control driver.
	   This split is required since AXI-ADC and the SPI-ADC parts are instantiated via differet busses i.e AXI and
	   SPI. AXI-ADC driver registers the IIO device, the SPI-ADC instance doesn't.
	   However a shared data structure (struct axiadc_converter) is used so that the methods local to the SPI-ADC
	   driver can extend the IIO attributes provided the AXI-ADC driver. There is also a callback (post_setup)
	   provided which calls from AXI-ADC into AXI-SPI driver after AXI-ADC is fully alive. This callback func is
	   then used to configure the digital data path, test and tune the digial data interface etc

	   For the AD9371 family of transceivers , things are bit more differentiated. In fact these devices have a
	   separate IIO devices for the radio control portion. We call them the PHY devices i.e ad9371.c, ad9361.c.
	   The PHY drivers are intented to be independent from our AXI-ADC capture drivers and underlying HDL designs.
	   Therefore things related to the AXI-ADC driver are located in the ad9371_conv.c files


	@ First ADI TPL Core Block
	@ 2018.v2: axi_ad9371_core: axi_ad9371@84a00000
	@ 2018.v3: This "AD9371_TOP_ad9371_tpl_core_rx_ad9371_tpl_core_tpl_core" has same address like old one axi_ad9371_core:
	@ This "AD9371_TOP_ad9371_tpl_core_rx_os_ad9371_tpl_core_tpl_core" is a new block
	@ This "AD9371_TOP_ad9371_tpl_core_tx_ad9371_tpl_core_tpl_core" is a new block
*/
&AD9371_TOP_ad9371_tpl_core_rx_ad9371_tpl_core_tpl_core {
	compatible = "adi,axi-ad9371-rx-1.0";
	reg = <0x80024000 0x8000>;
	/delete-property/ clock-names;
	/delete-property/ clocks;
	dmas = <&AXI_AD_DMA_TOP_axi_ad9371_rx_dma 0>;
	dma-names = "rx";
	/* It is used to connect capture driver ( AXI ADC HDL Driver) with a SPI control driver */
	spibus-connected = <&trx0_ad9371>;

};

&AD9371_TOP_ad9371_tpl_core_rx_os_ad9371_tpl_core_tpl_core {
	compatible = "adi,axi-ad9371-obs-1.0";
	reg = <0x80030000 0x1000>;
	dmas = <&AXI_AD_DMA_TOP_axi_ad9371_rx_os_dma 0>;
	dma-names = "rx";
	clocks = <&trx0_ad9371 1>;
	clock-names = "sampl_clk";

};

&AD9371_TOP_ad9371_tpl_core_tx_ad9371_tpl_core_tpl_core {
	compatible = "adi,axi-ad9371-tx-1.0";
	reg = <0x80028000 0x4000>;
	dmas = <&AXI_AD_DMA_TOP_axi_ad9371_tx_dma 0>;
	dma-names = "tx";
	clocks = <&trx0_ad9371 2>;
	clock-names = "sampl_clk";
	/* It is used to connect capture driver ( AXI ADC HDL Driver) with a SPI control driver */
	spibus-connected = <&trx0_ad9371>;
	adi,axi-pl-fifo-enable;

};


/* Second ADI TPL Core Block*/

&AD9371_TOP1_ad9371_tpl_core_rx_ad9371_tpl_core_tpl_core {
	compatible = "adi,axi-ad9371-rx-1.0";
	reg = <0x80034000 0x8000>;
	/delete-property/ clock-names;
	/delete-property/ clocks;
	//dmas = <&AXI_AD_DMA_TOP_axi_ad9371_rx_dma 0>;
	//dma-names = "rx";
	/* It is used to connect capture driver ( AXI ADC HDL Driver) with a SPI control driver */
	spibus-connected = <&trx1_ad9371>;

};

&AD9371_TOP1_ad9371_tpl_core_rx_os_ad9371_tpl_core_tpl_core {
	compatible = "adi,axi-ad9371-obs-1.0";
	reg = <0x80040000 0x1000>;
	//dmas = <&AXI_AD_DMA_TOP_axi_ad9371_rx_os_dma 0>;
	//dma-names = "rx";
	clocks = <&trx1_ad9371 1>;
	clock-names = "sampl_clk";

};

&AD9371_TOP1_ad9371_tpl_core_tx_ad9371_tpl_core_tpl_core {
	compatible = "adi,axi-ad9371-tx-1.0";
	reg = <0x80038000 0x4000>;
	//dmas = <&AXI_AD_DMA_TOP_axi_ad9371_tx_dma 0>;
	//dma-names = "tx";
	clocks = <&trx1_ad9371 2>;
	clock-names = "sampl_clk";
	/* It is used to connect capture driver ( AXI ADC HDL Driver) with a SPI control driver */
	spibus-connected = <&trx1_ad9371>;
	adi,axi-pl-fifo-enable;

};



/*
   &axi_ddc_rx_dma {
   compatible = "adi,axi-dmac-1.00.a";
   reg = <0x9c400000 0x1000>;
#dma-cells = <1>;
#clock-cells = <0>;
clocks = <&clk 73>;

adi,channels {
#size-cells = <0>;
#address-cells = <1>;

dma-channel@0 {
reg = <0>;
adi,source-bus-width = <60>;
adi,source-bus-type = <2>;
adi,destination-bus-width = <60>;
adi,destination-bus-type = <0>;
};
};
};
 */


//2019.v2: axi_ad9371_rx_dma
//2018.v3: AXI_AD_DMA_TOP_axi_ad9371_rx_dma

&AXI_AD_DMA_TOP_axi_ad9371_rx_dma {

	compatible = "adi,axi-dmac-1.00.a";
	reg = <0x800b0000 0x1000>;
	#dma-cells = <1>;
	#clock-cells = <0>;

	//2018.v2: Input Clock Configuration
	clocks = <&clk 73>;
	/delete-property/ clock-names;

	//2018.v3: Input Clock Configuration
	//clock-names = "s_axi_aclk", "m_dest_axi_aclk", "fifo_wr_clk";
	//clocks = <&clk 71>, <&clk 72>, <&misc_clk_0>;

	adi,channels {

		#size-cells = <0>;
		#address-cells = <1>;

		dma-channel@0 {
			reg = <0>;
			adi,source-bus-width = <64>;
			adi,source-bus-type = <2>;
			adi,destination-bus-width = <64>;
			adi,destination-bus-type = <0>;
		};
	};
};

//2018.v2: axi_ad9371_rx_jesd_rx_axi
//2018.v3: AD9371_TOP_JESD_TOP_jesd_ctrl_top_axi_ad9371_rx_jesd_rx_axi

&AD9371_TOP_JESD_TOP_jesd_ctrl_top_axi_ad9371_rx_jesd_rx_axi {
	compatible = "adi,axi-jesd204-rx-1.0";
	reg = <0x8000c000 0x4000>;

	//2018.v2: Input Clock Configuration
	//clocks = <&clk 71>, <&axi_ad9371_rx_clkgen>, <&axi_ad9371_rx_xcvr 0>;
	clocks = <&clk 71>, <&AD9371_TOP_JESD_TOP_xcvr_top_axi_ad9371_rx_xcvr 0>;
	clock-names = "s_axi_aclk", "lane_clk";

	//2018.v3: Input Clock Configuration
	//clock-names = "s_axi_aclk", "core_clk";
	//clocks = <&clk 71>, <&misc_clk_0>;

	#clock-cells = <0>;
	clock-output-names = "jesd_rx_lane_clk";

	adi,octets-per-frame = <4>;
	adi,frames-per-multiframe = <32>;

};

/* Second JESD Rx Block*/

&AD9371_TOP1_JESD_TOP_jesd_ctrl_top_axi_ad9371_rx_jesd_rx_axi {
	compatible = "adi,axi-jesd204-rx-1.0";
	reg = <0x8001c000 0x4000>;

	//2018.v2: Input Clock Configuration
	//clocks = <&clk 71>, <&axi_ad9371_rx_clkgen>, <&axi_ad9371_rx_xcvr 0>;
	clocks = <&clk 71>, <&AD9371_TOP1_JESD_TOP_xcvr_top_axi_ad9371_rx_xcvr 0>;
	clock-names = "s_axi_aclk", "lane_clk";

	//2018.v3: Input Clock Configuration
	//clock-names = "s_axi_aclk", "core_clk";
	//clocks = <&clk 71>, <&misc_clk_0>;

	#clock-cells = <0>;
	clock-output-names = "jesd_rx_lane_clk_1";

	adi,octets-per-frame = <4>;
	adi,frames-per-multiframe = <32>;

};


//2018.v2: axi_ad9371_rx_os_dma
//2018.v3: AXI_AD_DMA_TOP_axi_ad9371_rx_os_dma

&AXI_AD_DMA_TOP_axi_ad9371_rx_os_dma {

	compatible = "adi,axi-dmac-1.00.a";
	reg = <0x800c0000 0x1000>;
	#dma-cells = <1>;
	#clock-cells = <0>;

	//2018.v2: Input Clock Configuration
	clocks = <&clk 73>;
	/delete-property/ clock-names;

	//2018.v3: Input Clock Configuration
	//clock-names = "s_axi_aclk", "m_dest_axi_aclk", "fifo_wr_clk";
	//clocks = <&clk 71>, <&clk 72>, <&misc_clk_0>;

	adi,channels {

		#size-cells = <0>;
		#address-cells = <1>;

		dma-channel@0 {
			reg = <0>;
			adi,source-bus-width = <64>;
			adi,source-bus-type = <2>;
			adi,destination-bus-width = <64>;
			adi,destination-bus-type = <0>;
		};
	};
};

//2018.v2: axi_ad9371_rx_os_jesd_rx_axi
//2018.v3: AD9371_TOP_JESD_TOP_jesd_ctrl_top_axi_ad9371_rx_jesd_axi_ad9371_rx_os_jesd_rx_axi

&AD9371_TOP_JESD_TOP_jesd_ctrl_top_axi_ad9371_rx_jesd_axi_ad9371_rx_os_jesd_rx_axi{

	compatible = "adi,axi-jesd204-rx-1.0";
	reg = <0x80010000 0x4000>;

	// 2018.v2: The clock configuration
	//	clocks = <&clk 71>, <&axi_ad9371_tx_clkgen>, <&axi_ad9371_rx_os_xcvr 0>;
	clocks = <&clk 71>, <&AD9371_TOP_JESD_TOP_xcvr_top_axi_ad9371_rx_os_xcvr 0>;
	clock-names = "s_axi_aclk", "lane_clk";

	// 2018.v3: New Clock Configuration
	//clock-names = "s_axi_aclk", "core_clk";
	//clocks = <&clk 71>, <&misc_clk_0>;

	//Clock Output: No Change
	#clock-cells = <0>;
	clock-output-names = "jesd_rx_os_lane_clk";

	adi,octets-per-frame = <2>;
	adi,frames-per-multiframe = <32>;

};

/* Second AD9371 JESD Rx OS Block*/

&AD9371_TOP1_JESD_TOP_jesd_ctrl_top_axi_ad9371_rx_jesd_axi_ad9371_rx_os_jesd_rx_axi{
	compatible = "adi,axi-jesd204-rx-1.0";
	reg = <0x80020000 0x4000>;

	// 2018.v2: The clock configuration
	//	clocks = <&clk 71>, <&axi_ad9371_tx_clkgen>, <&axi_ad9371_rx_os_xcvr 0>;
   	clocks = <&clk 71>, <&AD9371_TOP1_JESD_TOP_xcvr_top_axi_ad9371_rx_os_xcvr 0>;
   	clock-names = "s_axi_aclk", "lane_clk";

	// 2018.v3: New Clock Configuration
	//clock-names = "s_axi_aclk", "core_clk";
	//clocks = <&clk 71>, <&misc_clk_0>;

	//Clock Output: No Change
	#clock-cells = <0>;
	clock-output-names = "jesd_rx_os_lane_clk_1";

	adi,octets-per-frame = <2>;
	adi,frames-per-multiframe = <32>;

};

  //2018.v2:  axi_ad9371_rx_os_xcvr
  //2018.v3:  AD9371_TOP_JESD_TOP_xcvr_top_axi_ad9371_rx_os_xcvr

&AD9371_TOP_JESD_TOP_xcvr_top_axi_ad9371_rx_os_xcvr {
	compatible = "adi,axi-adxcvr-1.0";
	reg = <0x80080000 0x10000>;

	// 2018.v2: The clock configuration
	//clocks =  <&clk0_ad9528 5>, <&axi_ad9371_tx_clkgen>;
	clocks =  <&clk0_ad9528 5>;
	clock-names = "conv";

	// 2018.v3: New Clock Configuration
	//clock-names = "s_axi_aclk";
	//clocks = <&clk 71>;

	#clock-cells = <1>;
	clock-output-names = "rx_os_gt_clk", "rx_os_out_clk";

	/*2 bit variable. For ultrascale , it selects the PLL reference
	  clk source to be forwarded to the OUTCLK MUX : 0-CPLL, 3-QPLL*/

	adi,sys-clk-select = <0>;

	/*  3 bit variable. Controls the OUTCLKSEL multiplexer, controlling what will be
	    forwarded to OUTCLK pin. Check RX/TXOUTCLKSEL parameter in the transceiver documentation
	    for the FPGA you are using
	*/

	adi,out-clk-select = <3>;

	/*  If set, the transceiver will be used in LPM mode. Otherwise, will be used in DFE mode*/

	adi,use-lpm-enable;

	/* If set, the CPLL will be used for these transceivers*/
	adi,use-cpll-enable;

};

/* Second AD9371 JESD Rx OS Rcvr Block*/

&AD9371_TOP1_JESD_TOP_xcvr_top_axi_ad9371_rx_os_xcvr {
	compatible = "adi,axi-adxcvr-1.0";
	reg = <0x800f0000 0x10000>;

	// 2018.v2: The clock configuration
	//clocks =  <&clk0_ad9528 5>, <&axi_ad9371_tx_clkgen>;
	clocks =  <&clk0_ad9528 6>;
	clock-names = "conv";

	// 2018.v3: New Clock Configuration
	//clock-names = "s_axi_aclk";
	//clocks = <&clk 71>;

	#clock-cells = <1>;
	clock-output-names = "rx_os_gt_clk_1", "rx_os_out_clk_1";

	/* 2 bit variable. For ultrascale , it selects the PLL reference
    	  clk source to be forwarded to the OUTCLK MUX : 0-CPLL, 3-QPLL
	*/

	adi,sys-clk-select = <0>;

	/*  3 bit variable. Controls the OUTCLKSEL multiplexer, controlling what will be
            forwarded to OUTCLK pin. Check RX/TXOUTCLKSEL parameter in the transceiver documentation
	    for the FPGA you are using
        */

	adi,out-clk-select = <3>;

	/*  If set, the transceiver will be used in LPM mode. Otherwise, will be used in DFE mode*/
	adi,use-lpm-enable;

	/* If set, the CPLL will be used for these transceivers*/
	adi,use-cpll-enable;

};

   //2018.v2: axi_ad9371_rx_xcvr
   //2018.v3: AD9371_TOP_JESD_TOP_xcvr_top_axi_ad9371_rx_xcvr


&AD9371_TOP_JESD_TOP_xcvr_top_axi_ad9371_rx_xcvr {
	compatible = "adi,axi-adxcvr-1.0";
	reg = <0x80070000 0x10000>;

	// 2018.v2: Input clock configuration
	//clocks = <&clk0_ad9528 5>, <&axi_ad9371_rx_clkgen 0>;
	clocks = <&clk0_ad9528 5>;
	clock-names = "conv";

	// 2018.v3: Input Clock Configuration
	//clock-names = "s_axi_aclk";
	//clocks = <&clk 71>;

	#clock-cells = <1>;
	clock-output-names = "rx_gt_clk", "rx_out_clk";

	/* 2 bit variable. For ultrascale , it selects the PLL reference
	   clk source to be forwarded to the OUTCLK MUX : 0-CPLL, 3-QPLL
	 */
	adi,sys-clk-select = <0>;

	/*  3 bit variable. Controls the OUTCLKSEL multiplexer, controlling what will be
	    forwarded to OUTCLK pin. Check RX/TXOUTCLKSEL parameter in the transceiver documentation
	    for the FPGA you are using
	 */
	adi,out-clk-select = <3>;

	/*  If set, the transceiver will be used in LPM mode. Otherwise, will be used in DFE mode*/
	adi,use-lpm-enable;

	/* If set, the CPLL will be used for these transceivers*/
	adi,use-cpll-enable;

};

/* Second AD9371 JESD Rx Rcvr Block*/

&AD9371_TOP1_JESD_TOP_xcvr_top_axi_ad9371_rx_xcvr {
	compatible = "adi,axi-adxcvr-1.0";
	reg = <0x800e0000 0x10000>;

	// 2018.v2: Input clock configuration
	//clocks = <&clk0_ad9528 5>, <&axi_ad9371_rx_clkgen 0>;
	clocks = <&clk0_ad9528 6>;
	clock-names = "conv";

	// 2018.v3: Input Clock Configuration
	//clock-names = "s_axi_aclk";
	//clocks = <&clk 71>;

	#clock-cells = <1>;
	clock-output-names = "rx_gt_clk_1", "rx_out_clk_1";

	/* 2 bit variable. For ultrascale , it selects the PLL reference
	   clk source to be forwarded to the OUTCLK MUX : 0-CPLL, 3-QPLL
	*/
	adi,sys-clk-select = <0>;

	/*  3 bit variable. Controls the OUTCLKSEL multiplexer, controlling what will be
	    forwarded to OUTCLK pin. Check RX/TXOUTCLKSEL parameter in the transceiver documentation
	    for the FPGA you are using
	*/
	adi,out-clk-select = <3>;

	/* If set, the transceiver will be used in LPM mode. Otherwise, will be used in DFE mode*/
	adi,use-lpm-enable;

	/* If set, the CPLL will be used for these transceivers*/
	adi,use-cpll-enable;

};


   //2018.v2: axi_ad9371_tx_dma
   //2018.v3: AXI_AD_DMA_TOP_axi_ad9371_tx_dma

&AXI_AD_DMA_TOP_axi_ad9371_tx_dma {

	compatible = "adi,axi-dmac-1.00.a";
	reg = <0x800d0000 0x1000>;
	#dma-cells = <1>;
	#clock-cells = <0>;

	// 2018.v2: Input clock configuration
	clocks = <&clk 73>;
	/delete-property/ clock-names;

	// 2018.v3: Input Clock Configuration
	//clock-names = "s_axi_aclk", "m_src_axi_aclk", "m_axis_aclk";
	//clocks = <&clk 71>, <&clk 72>, <&clk 72>;

	adi,channels {

		#size-cells = <0>;
		#address-cells = <1>;

		dma-channel@0 {
			reg = <0>;
			adi,source-bus-width = <64>;
			adi,source-bus-type = <0>;
			adi,destination-bus-width = <128>;
			adi,destination-bus-type = <1>;
		};
	};
};


   //2018.v2: axi_ad9371_tx_jesd_tx_axi
   //2018.v3: AD9371_TOP_JESD_TOP_jesd_ctrl_top_axi_ad9371_tx_jesd_tx_axi

&AD9371_TOP_JESD_TOP_jesd_ctrl_top_axi_ad9371_tx_jesd_tx_axi {

	compatible = "adi,axi-jesd204-tx-1.0";
	reg = <0x80014000 0x4000>;

	//2018.v2: Input Clock Configuration
	//clocks = <&clk 71>, <&axi_ad9371_tx_clkgen>,<&axi_ad9371_tx_xcvr 0>;
	clocks = <&clk 71>, <&AD9371_TOP_JESD_TOP_xcvr_top_axi_ad9371_tx_xcvr 0>;
	clock-names = "s_axi_aclk", "lane_clk";

	//2018.v3: Input Clock Configuration
	//clock-names = "s_axi_aclk", "core_clk";
	//clocks = <&clk 71>, <&misc_clk_0>;

	#clock-cells = <0>;
	clock-output-names = "jesd_tx_lane_clk";

	adi,octets-per-frame = <2>;		//F
	adi,frames-per-multiframe = <32>;	//K
	adi,converter-resolution = <14>;	//N
	adi,bits-per-sample = <16>;		//N'
	adi,converters-per-device = <4>;	//M
	adi,control-bits-per-sample = <2>;	//CS

};

/* Second AD9371 JESD Tx Block */

&AD9371_TOP1_JESD_TOP_jesd_ctrl_top_axi_ad9371_tx_jesd_tx_axi {

	compatible = "adi,axi-jesd204-tx-1.0";
	reg = <0x80018000 0x4000>;

	//2018.v2: Input Clock Configuration
	//clocks = <&clk 71>, <&axi_ad9371_tx_clkgen>,<&axi_ad9371_tx_xcvr 0>;
	clocks = <&clk 71>, <&AD9371_TOP1_JESD_TOP_xcvr_top_axi_ad9371_tx_xcvr 0>;
	clock-names = "s_axi_aclk", "lane_clk";

	//2018.v3: Input Clock Configuration
	//clock-names = "s_axi_aclk", "core_clk";
	 //clocks = <&clk 71>, <&misc_clk_0>;

	#clock-cells = <0>;
	clock-output-names = "jesd_tx_lane_clk_1";

	adi,octets-per-frame = <2>;              //F
	adi,frames-per-multiframe = <32>;        //K
	adi,converter-resolution = <14>;         //N
	adi,bits-per-sample = <16>;              //N'
	adi,converters-per-device = <4>;         //M

	/*
		a) 2 Bits per sample
		b) Control bits can be used to communicate status info, mark an
		   inactive converter on the link or control receiver operation
	*/
	adi,control-bits-per-sample = <2>;       //CS

};

   //2018.v2: axi_ad9371_tx_xcvr
   //2018.v3: AD9371_TOP_JESD_TOP_xcvr_top_axi_ad9371_tx_xcvr

&AD9371_TOP_JESD_TOP_xcvr_top_axi_ad9371_tx_xcvr{
	compatible = "adi,axi-adxcvr-1.0";
	reg = <0x80090000 0x10000>;

	//2018.v2: Input Clock Configuration
	//clocks =  <&clk0_ad9528 5>, <&axi_ad9371_tx_clkgen>;
	clocks =  <&clk0_ad9528 5>;
	clock-names = "conv";

	//2018.v3: Input Clock Configuration
	//clock-names = "s_axi_aclk";
	//clocks = <&clk 71>;

	#clock-cells = <1>;
	clock-output-names = "tx_gt_clk", "tx_out_clk";

	adi,sys-clk-select = <3>;
	adi,out-clk-select = <3>;

};

/* Second AD9371 JESD Tx Rcvr Block */

&AD9371_TOP1_JESD_TOP_xcvr_top_axi_ad9371_tx_xcvr{
	compatible = "adi,axi-adxcvr-1.0";
	reg = <0x80100000 0x10000>;

	//2018.v2: Input Clock Configuration
	//clocks =  <&clk0_ad9528 5>, <&axi_ad9371_tx_clkgen>;
	clocks =  <&clk0_ad9528 6>;
	clock-names = "conv";

	//2018.v3: Input Clock Configuration
	//clock-names = "s_axi_aclk";
	//clocks = <&clk 71>;

	#clock-cells = <1>;
	clock-output-names = "tx_gt_clk_1", "tx_out_clk_1";

	adi,sys-clk-select = <3>;
	adi,out-clk-select = <3>;

};

/*
&cpri_zcu102_0{
	reg = <0x80004000 0x1000>;
	compatible = "generic-uio";
};

&axi_iic_0{
	reg = <0x80003000 0x1000>;
};

&user_reg_top_0{
	reg = <0x80002000 0x1000>;
	compatible = "generic-uio";
};
*/

&PS_TOP_axi_iic_0 {

	#address-cells = <1>;
	#size-cells = <0>;
	clock-names = "s_axi_aclk";
	clocks = <&clk 71>;
	compatible = "xlnx,xps-iic-2.00.a";
	interrupt-names = "iic2intc_irpt";
	interrupt-parent = <&gic>;
	interrupts = <0 93 4>;
	reg = <0x80050000 0x1000>;
};

//Name change: cpri_zcu102_0 -> cpri_temac_top_0
//&cpri_temac_top_0 {
&cpri_temac_top_v1_0 {

	clock-names = "s00_axi_aclk";
	clocks = <&clk 71>;
	compatible = "generic-uio";
	reg = <0x80001000 0x1000>;
	xlnx,s00-axi-addr-width = <0xc>;
	xlnx,s00-axi-data-width = <0x20>;
};

//&csr_reg_top_0 {
&csr_reg_top {

	clock-names = "s00_axi_aclk";
	clocks = <&clk 74>;
	compatible = "generic-uio";
	reg = <0x80000000 0x1000>;
	xlnx,s00-axi-addr-width = <0xa>;
	xlnx,s00-axi-data-width = <0x20>;
};


&psu_ctrl_ipi {

	compatible = "xlnx,PERIPHERAL-1.0";
	reg = <0xff380000 0x80000>;

};

&psu_message_buffers {

	compatible = "xlnx,PERIPHERAL-1.0";
	reg = <0xff990000 0x10000>;

};

/*
&cfr_dpd_top_dpd_top {

	clock-names = "s_axi_ctrl_2x_aclk", "s_axi_ctrl_aclk", "s_axi_user_aclk";
	clocks = <&clk 73>, <&clk 71>, <&clk 71>;
	compatible = "generic-uio";
	reg = <0x88000000 0x4000000 0x8c000000 0x20000>;
};

&cfr_dpd_top_pc_cfr_top {

	clock-names = "s_axi_aclk";
	clocks = <&clk 71>;
	compatible = "generic-uio";
	reg = <0x84000000 0x4000000>;
};
*/

Regards,

Manish



Few wording
[edited by: manish3134 at 9:40 AM (GMT 0) on 16 Apr 2020]

Top Replies

  • Jun 1, 2020 in reply to AdrianC +1 verified

    Hi Sir,

    I forgot to mention that the problem was resolved by using N-Shot mode instead of continuous mode.

    I sincerely convey my thanks to you.

    Regards,

    Manish

Parents Reply
  • Hi Sir,

    In a boot log, I saw framer status value which was 0xBE.

    As per AD9731-UG992 page-32, If 7-bit is 1 that means its a "sysref phase error". I tried to do RCA and found that SYSREF-to-LMFC delay value in ad9371 was causing this issue. If i make it 0 for rxFramer then i don't see such error.  However, I tried with different values of SYSREF-to-LMFC and i am still seeing this issue.

    I am not sure that how can i fix it ?

    Regards,

    Manish

Children