This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM335x and Marvell 88e6165 switch

Hi.


Now I use marvell switch 88e6165 (6-port) and try to connect with MDIO and RGMII2 interface AM335x.

This task is very complex. Because i must to write DTS file for linux kernel and use driver for 88e6165.

Linux kernel have driver 88e6165 in /drivers/net/dsa/mv88e6123_61_65.c. But this code have very more bugs. These bugs in driver we fixed.

I know about work AM335x only in PHY mode with extended switch.

Now we have problems with DTS file. Ready-made solution i have not found. So we hand make DTS file. I doubt very much the correctness our linux DTS file.

/ {
	model = "TI AM335x BeagleBone";
	compatible = "ti,am335x-bone", "ti,am33xx";
	aliases {
		ethernet0 = &cpsw_emac1;
	};



	cpus {
		cpu@0 {
			cpu0-supply = <&dcdc2_reg>;
		};
	};

	memory {
		device_type = "memory";
		reg = <0x80000000 0x10000000>; /* 256 MB */
	};

	dsa@0 {
		compatible = "marvell,dsa";
		#address-cells = <2>;
		#size-cells = <0>;

		interrupts = <10>;
		dsa,ethernet = <&mac>;
		dsa,mii-bus = <&davinci_mdio>;

		switch@0 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0 0>;	/* MDIO address 0, switch 0 in tree */

			port@0 {
				reg = <0>;
				label = "lan1";
				phy-handle = <&davinci_mdio>;
			};

			port@1 {
				reg = <1>;
				label = "lan2";
				phy-handle = <&davinci_mdio>;
			};

			port@2 {
				reg = <2>;
				label = "lan3";
				phy-handle = <&davinci_mdio>;
			};

			port@3 {
				reg = <3>;
				label = "lan4";
				phy-handle = <&davinci_mdio>;
			};

			port@4 {
				reg = <4>;
				label = "lan5";
				phy-handle = <&davinci_mdio>;
			};

			port@5 {
				reg = <5>;
				label = "cpu";
				phy-handle = <&davinci_mdio>;
			};
		};
	};	

};

&am33xx_pinmux {
	cpsw_default: cpsw_default {
		pinctrl-single,pins = <
			/* Slave 2 */
			0x40 (PIN_OUTPUT_PULLDOWN | MUX_MODE2)	/* gpmc_a0.rgmii2_tctl */
			0x44 (PIN_INPUT_PULLDOWN | MUX_MODE2)	/* gpmc_a1.rgmii2_rctl */
			0x48 (PIN_OUTPUT_PULLDOWN | MUX_MODE2)	/* gpmc_a2.rgmii2_td3 */
			0x4c (PIN_OUTPUT_PULLDOWN | MUX_MODE2)	/* gpmc_a3.rgmii2_td2 */
			0x50 (PIN_OUTPUT_PULLDOWN | MUX_MODE2)	/* gpmc_a4.rgmii2_td1 */
			0x54 (PIN_OUTPUT_PULLDOWN | MUX_MODE2)	/* gpmc_a5.rgmii2_td0 */
			0x58 (PIN_OUTPUT_PULLDOWN | MUX_MODE2)	/* gpmc_a6.rgmii2_tclk */
			0x5c (PIN_INPUT_PULLDOWN | MUX_MODE2)	/* gpmc_a7.rgmii2_rclk */
			0x60 (PIN_INPUT_PULLDOWN | MUX_MODE2)	/* gpmc_a8.rgmii2_rd3 */
			0x64 (PIN_INPUT_PULLDOWN | MUX_MODE2)	/* gpmc_a9.rgmii2_rd2 */
			0x68 (PIN_INPUT_PULLDOWN | MUX_MODE2)	/* gpmc_a10.rgmii2_rd1 */
			0x6c (PIN_INPUT_PULLDOWN | MUX_MODE2)	/* gpmc_a11.rgmii2_rd0 */
		>;
	};
 
	cpsw_sleep: cpsw_sleep {
		pinctrl-single,pins = <
			/* Slave 2 reset value*/
			0x40 (PIN_INPUT_PULLDOWN | MUX_MODE7)
			0x44 (PIN_INPUT_PULLDOWN | MUX_MODE7)
			0x48 (PIN_INPUT_PULLDOWN | MUX_MODE7)
			0x4c (PIN_INPUT_PULLDOWN | MUX_MODE7)
			0x50 (PIN_INPUT_PULLDOWN | MUX_MODE7)
			0x54 (PIN_INPUT_PULLDOWN | MUX_MODE7)
			0x58 (PIN_INPUT_PULLDOWN | MUX_MODE7)
			0x5c (PIN_INPUT_PULLDOWN | MUX_MODE7)
			0x60 (PIN_INPUT_PULLDOWN | MUX_MODE7)
			0x64 (PIN_INPUT_PULLDOWN | MUX_MODE7)
			0x68 (PIN_INPUT_PULLDOWN | MUX_MODE7)
			0x6c (PIN_INPUT_PULLDOWN | MUX_MODE7)		
		>;
	};

	davinci_mdio_default: davinci_mdio_default {
		pinctrl-single,pins = <
			/* MDIO */
/*			
			0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)	// mdio_data.mdio_data
			0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0)			// mdio_clk.mdio_clk
*/
			0x148 (PIN_INPUT_PULLUP | MUX_MODE0)	/* mdio_data.mdio_data */
			0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0)			/* mdio_clk.mdio_clk */
			 
		>;
	};

	davinci_mdio_sleep: davinci_mdio_sleep {
		pinctrl-single,pins = <
			/* MDIO reset value */
			/* 0x148 (PIN_INPUT_PULLDOWN | MUX_MODE7) */
			/* 0x14c (PIN_INPUT_PULLDOWN | MUX_MODE7) */
/*			
			0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)	// mdio_data.mdio_data
			0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0)			// mdio_clk.mdio_clk
*/
			0x148 (PIN_INPUT_PULLUP | MUX_MODE0)	/* mdio_data.mdio_data */
			0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0)			/* mdio_clk.mdio_clk */				
		>;
	};
};

&cpsw_emac1 {
	status = "okay";
	phy_id = <&davinci_mdio>, <0x15>;
	phy-mode = "rgmii";
};

&mac {
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&cpsw_default>;
	pinctrl-1 = <&cpsw_sleep>;
	active_slave = <1>;
	status = "okay";
};

&davinci_mdio {
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&davinci_mdio_default>;
	pinctrl-1 = <&davinci_mdio_sleep>;
	status = "okay";

	dsa@0 {
	};
};

May be somebody have right DTS file for marvell 88e6165 switch?